38
39 public abstract class StressAddJcmdBase {
40 private static final int DIRECTIVES_AMOUNT = Integer.getInteger(
41 "compiler.compilercontrol.jcmd.StressAddJcmdBase.directivesAmount",
42 1000);
43 private static final int DIRECTIVE_FILES = Integer.getInteger(
44 "compiler.compilercontrol.jcmd.StressAddJcmdBase.directiveFiles",
45 5);
46 private static final List<MethodDescriptor> DESCRIPTORS = new PoolHelper()
47 .getAllMethods().stream()
48 .map(pair -> AbstractTestBase
49 .getValidMethodDescriptor(pair.first))
50 .collect(Collectors.toList());
51
52 /**
53 * Performs test
54 */
55 public void test() {
56 List<String> commands = prepareCommands();
57 Executor executor = new TimeLimitedExecutor(commands);
58 OutputAnalyzer outputAnalyzer = executor.execute();
59 outputAnalyzer.shouldHaveExitValue(0);
60 }
61
62 /**
63 * Makes connection to the test VM
64 *
65 * @param pid a pid of the VM under test
66 * @param commands a list of jcmd commands to be executed
67 * @return true if the test should continue invocation of this method
68 */
69 protected abstract boolean makeConnection(int pid, List<String> commands);
70
71 /**
72 * Finish test executions
73 */
74 protected void finish() { }
75
76 private List<String> prepareCommands() {
77 String[] files = new String[DIRECTIVE_FILES];
78 for (int i = 0; i < DIRECTIVE_FILES; i++) {
79 files[i] = "directives" + i + ".json";
80 HugeDirectiveUtil.createHugeFile(DESCRIPTORS, files[i],
81 DIRECTIVES_AMOUNT);
82 }
83 return Stream.of(files)
84 .map(file -> "Compiler.directives_add " + file)
85 .collect(Collectors.toList());
86 }
87
88 private class TimeLimitedExecutor extends Executor {
89 private final List<String> jcmdCommands;
90
91 public TimeLimitedExecutor(List<String> jcmdCommands) {
92 /* There are no need to check the state */
93 super(true, null, null, jcmdCommands);
94 this.jcmdCommands = jcmdCommands;
95 }
96
97 @Override
98 protected void executeJCMD(int pid) {
99 TimeLimitedRunner runner = new TimeLimitedRunner(
100 Utils.DEFAULT_TEST_TIMEOUT,
101 Utils.TIMEOUT_FACTOR,
102 () -> makeConnection(pid, jcmdCommands));
103 try {
104 runner.call();
105 } catch (Exception e) {
106 throw new Error("Exception during the execution: " + e, e);
107 }
108 finish();
109 }
110 }
111 }
|
38
39 public abstract class StressAddJcmdBase {
40 private static final int DIRECTIVES_AMOUNT = Integer.getInteger(
41 "compiler.compilercontrol.jcmd.StressAddJcmdBase.directivesAmount",
42 1000);
43 private static final int DIRECTIVE_FILES = Integer.getInteger(
44 "compiler.compilercontrol.jcmd.StressAddJcmdBase.directiveFiles",
45 5);
46 private static final List<MethodDescriptor> DESCRIPTORS = new PoolHelper()
47 .getAllMethods().stream()
48 .map(pair -> AbstractTestBase
49 .getValidMethodDescriptor(pair.first))
50 .collect(Collectors.toList());
51
52 /**
53 * Performs test
54 */
55 public void test() {
56 List<String> commands = prepareCommands();
57 Executor executor = new TimeLimitedExecutor(commands);
58 List<OutputAnalyzer> outputAnalyzers = executor.execute();
59 outputAnalyzers.get(0).shouldHaveExitValue(0);
60 }
61
62 /**
63 * Makes connection to the test VM
64 *
65 * @param pid a pid of the VM under test
66 * @param commands a list of jcmd commands to be executed
67 * @return true if the test should continue invocation of this method
68 */
69 protected abstract boolean makeConnection(int pid, List<String> commands);
70
71 /**
72 * Finish test executions
73 */
74 protected void finish() { }
75
76 private List<String> prepareCommands() {
77 String[] files = new String[DIRECTIVE_FILES];
78 for (int i = 0; i < DIRECTIVE_FILES; i++) {
79 files[i] = "directives" + i + ".json";
80 HugeDirectiveUtil.createHugeFile(DESCRIPTORS, files[i],
81 DIRECTIVES_AMOUNT);
82 }
83 return Stream.of(files)
84 .map(file -> "Compiler.directives_add " + file)
85 .collect(Collectors.toList());
86 }
87
88 private class TimeLimitedExecutor extends Executor {
89 private final List<String> jcmdCommands;
90
91 public TimeLimitedExecutor(List<String> jcmdCommands) {
92 /* There are no need to check the state */
93 super(true, null, null, jcmdCommands);
94 this.jcmdCommands = jcmdCommands;
95 }
96
97 @Override
98 protected OutputAnalyzer[] executeJCMD(int pid) {
99 TimeLimitedRunner runner = new TimeLimitedRunner(
100 Utils.DEFAULT_TEST_TIMEOUT,
101 Utils.TIMEOUT_FACTOR,
102 () -> makeConnection(pid, jcmdCommands));
103 try {
104 runner.call();
105 } catch (Exception e) {
106 throw new Error("Exception during the execution: " + e, e);
107 }
108 finish();
109 return new OutputAnalyzer[0];
110 }
111 }
112 }
|