--- old/test/compiler/compilercontrol/share/scenario/Scenario.java 2015-11-19 10:17:20.000000000 +0300 +++ new/test/compiler/compilercontrol/share/scenario/Scenario.java 2015-11-19 10:17:20.000000000 +0300 @@ -23,7 +23,6 @@ package compiler.compilercontrol.share.scenario; -import compiler.compilercontrol.share.actions.BaseAction; import compiler.compilercontrol.share.method.MethodDescriptor; import compiler.compilercontrol.share.processors.CommandProcessor; import compiler.compilercontrol.share.processors.LogProcessor; @@ -32,20 +31,10 @@ import jdk.test.lib.Asserts; import jdk.test.lib.OutputAnalyzer; import jdk.test.lib.Pair; -import jdk.test.lib.ProcessTools; -import jdk.test.lib.dcmd.CommandExecutorException; -import jdk.test.lib.dcmd.JcmdExecutor; import pool.PoolHelper; -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.PrintWriter; import java.lang.reflect.Executable; -import java.net.ServerSocket; -import java.net.Socket; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.LinkedHashSet; @@ -60,10 +49,9 @@ */ public final class Scenario { private final boolean isValid; - private final List vmopts; private final Map states; private final List> processors; - private final List jcmdExecCommands; + private final Executor executor; private Scenario(boolean isValid, List vmopts, @@ -71,7 +59,6 @@ List compileCommands, List jcmdCommands) { this.isValid = isValid; - this.vmopts = vmopts; this.states = states; processors = new ArrayList<>(); processors.add(new LogProcessor(states)); @@ -89,7 +76,7 @@ } processors.add(new CommandProcessor(nonQuieted)); processors.add(new QuietProcessor(quieted)); - jcmdExecCommands = new ArrayList<>(); + List jcmdExecCommands = new ArrayList<>(); boolean addCommandMet = false; for (JcmdCommand cmd : jcmdCommands) { switch (cmd.jcmdType) { @@ -104,42 +91,17 @@ break; } } + executor = new Executor(isValid, vmopts, states, jcmdExecCommands); } /** * Executes scenario */ public void execute() { - // Construct execution command with CompileCommand and class - List argsList = new ArrayList<>(); - // Add VM options - argsList.addAll(vmopts); - // Add class name that would be executed in a separate VM - String classCmd = BaseAction.class.getName(); - argsList.add(classCmd); - OutputAnalyzer output; - try (ServerSocket serverSocket = new ServerSocket(0)) { - if (isValid) { - // Get port test VM will connect to - int port = serverSocket.getLocalPort(); - if (port == -1) { - throw new Error("Socket is not bound: " + port); - } - argsList.add(String.valueOf(port)); - // Start separate thread to connect with test VM - new Thread(() -> connectTestVM(serverSocket)).start(); - } - // Start test VM - output = ProcessTools.executeTestJvmAllArgs( - argsList.toArray(new String[argsList.size()])); - } catch (Throwable thr) { - throw new Error("Execution failed", thr); - } + OutputAnalyzer output = executor.execute(); if (isValid) { output.shouldHaveExitValue(0); - for (Consumer processor : processors) { - processor.accept(output); - } + processors.forEach(processor -> processor.accept(output)); } else { Asserts.assertNE(output.getExitValue(), 0, "VM should exit with " + "error for incorrect directives"); @@ -147,52 +109,6 @@ } } - /* - * Performs connection with a test VM, sends method states and performs - * JCMD operations on a test VM. - */ - private void connectTestVM(ServerSocket serverSocket) { - /* - * There are no way to prove that accept was invoked before we started - * test VM that connects to this serverSocket. Connection timeout is - * enough - */ - try ( - Socket socket = serverSocket.accept(); - PrintWriter pw = new PrintWriter(socket.getOutputStream(), - true); - BufferedReader in = new BufferedReader(new InputStreamReader( - socket.getInputStream()))) { - // Get pid of the executed process - int pid = Integer.parseInt(in.readLine()); - Asserts.assertNE(pid, 0, "Got incorrect pid"); - executeJCMD(pid); - // serialize and send state map - for (Executable x : states.keySet()) { - pw.println("{"); - pw.println(x.toGenericString()); - pw.println(states.get(x).toString()); - pw.println("}"); - } - } catch (IOException e) { - throw new Error("Failed to write data", e); - } - } - - // Executes all diagnostic commands - private void executeJCMD(int pid) { - for (String command : jcmdExecCommands) { - new JcmdExecutor() { - @Override - protected List createCommandLine(String cmd) - throws CommandExecutorException { - return Arrays.asList(jcmdBinary, Integer.toString(pid), - cmd); - } - }.execute(command); - } - } - /** * Gets states of methods for this scenario *