32 import client.test.RunModes.RunModeException; 33 import client.test.runner.CommonTestRunnerWorker.Command; 34 import client.test.runner.CommonTestRunnerWorker.Command.CommandType; 35 import client.test.runner.interview.LookAndFeelQuestion; 36 import client.test.runner.interview.PipelineQuestion; 37 import client.util.CtrUtils; 38 import static client.util.CtrUtils.*; 39 import client.util.CtrUtils.OutputReader; 40 import client.util.JettyServer; 41 import com.sun.interview.YesNoQuestion; 42 import com.sun.javatest.Status; 43 import com.sun.javatest.TestDescription; 44 import com.sun.javatest.TestEnvironment; 45 import com.sun.javatest.TestEnvironment.Fault; 46 import java.io.*; 47 import java.lang.reflect.Method; 48 import java.net.ServerSocket; 49 import java.net.Socket; 50 import java.net.URL; 51 import java.net.UnknownHostException; 52 import java.util.concurrent.Semaphore; 53 import java.util.concurrent.TimeUnit; 54 import java.util.logging.Level; 55 import java.util.logging.Logger; 56 import org.junit.runner.RunWith; 57 import test.javaclient.shared.CanvasRunner; 58 import test.javaclient.shared.Utils; 59 60 /** 61 * 62 * @author shura, mrkam, Sergey Grinev, Victor Shubov 63 */ 64 public class TestScript extends htmltestrunner.TestScript { 65 66 private static final int FORCED_TERMINATION_TIMEOUT = 5000; 67 private static final boolean verbose = true; //TODO: use real logger 68 private volatile Process process = null; 69 private volatile ServerSocket cmdServer = null; 70 private volatile Socket cmdSocket; 71 private volatile ObjectOutputStream commandStream; 317 pathStr.append(p); 318 } 319 String javaExec = pathStr.toString(); 320 321 322 String proxy = lookup(BasicFXInterview.PROXY_PARAM_NAME, ""); 323 String jvmProxyHost = ""; 324 String jvmProxyPort = ""; 325 if (proxy != null && proxy.trim().length() > 0) { 326 URL proxyUrl = getProxyUrl(proxy); 327 if (proxyUrl != null) { 328 jvmProxyHost = "-DproxyHost=" + proxyUrl.getHost(); 329 jvmProxyPort = "-DproxyPort=" + proxyUrl.getPort(); 330 } 331 } 332 333 String additionalOptions = getAdditionalOptions(); 334 335 String[] jvmVmOptions = savedEnv.lookup(BasicFXInterview.VM_OPTIONS_PARAM_NAME); 336 337 String jvmArgPrismOrder = getJvmArgPrismOrder(); 338 339 //TODO (SG): is this still required? 340 String jvmArgLibraryPath = ""; 341 if (fxSdkHome != null) { 342 jvmArgLibraryPath = "-Djava.library.path=" + fxSdkHome + File.separator + "rt"; 343 } 344 345 // String externaloutput = lookup(BasicFXInterview.EXTERNALOUTPUT, ""); 346 // if (externaloutput != null) { 347 // jvmArgImageUtils = "-Dimageutils.outputpath=" + externaloutput + File.separator; 348 // } 349 String jvmArgImageUtils = "-Dimageutils.outputpath=" + resultDir + File.separator; 350 351 String jvmArgNoDesc = ""; 352 if (Boolean.parseBoolean(td.getParameter(RunUITestFinder.NO_DESCRIPTION))) { 353 jvmArgNoDesc = "-Djavatest.mode.nodesc=true"; 354 } 355 356 String runMode = lookup(BasicFXInterview.RUN_MODE_PARAM, BasicFXInterview.RUN_MODE_DESKTOP); 357 358 String jvmInterop = ""; 359 if (runMode.equals(BasicFXInterview.RUN_MODE_DESKTOP_SWING_INTEROPERABILITY)) { 360 jvmInterop = "-Djavafx.swinginteroperability=true"; 361 } else if (runMode.equals(BasicFXInterview.RUN_MODE_DESKTOP_SWT_INTEROPERABILITY)) { 362 jvmInterop = "-Djavafx.swtinteroperability=true"; 363 } 364 365 String lookAndFeelOptions = ""; 366 String lfOptions = lookup(LookAndFeelQuestion.LOOKANDFEEL_PARAM_NAME, ""); 367 if (!lfOptions.trim().equals("")) { 368 lookAndFeelOptions = "-Djavafx.userAgentStylesheetUrl=" + lfOptions; 369 } 370 371 //Needed to get images via proxy in Evergreen via VPN see RT-21325 || RT-19661 372 final boolean isFXCompatibility = System.getProperty("java.class.path").contains("JavaFXCompatibility"); 373 String ipV4 = isFXCompatibility ? "-Djava.net.preferIPv4Stack=true" : ""; 374 375 String swtTestOpt = ""; 376 try { 377 if (System.getProperty("os.name").toLowerCase().indexOf("mac") >= 0) { 378 RunWith wunWithAnnotation = Class.forName(testClassName).getAnnotation(RunWith.class); 379 if ((wunWithAnnotation != null) && (wunWithAnnotation.value().equals(CanvasRunner.class))) { 380 swtTestOpt = "-XstartOnFirstThread"; 381 System.out.println("Use -XstartOnFirstThread option, as we on MacOS, and SWT test is run."); 382 } 383 } 384 } catch (ClassNotFoundException ex) { 385 System.err.println("Error : " + ex); 386 } 387 388 String jvmArgClientTestRoot = "-DtestRoot=" + RunUITestFinder.testRoot; 389 390 String[] command = new String[]{}; 391 command = addToArray(command, javaExec.trim()); 392 command = addToArray(command, jvmVmOptions); 393 command = addToArray(command, lookAndFeelOptions); 394 command = addToArray(command, ipV4); 395 command = addToArray(command, jvmArgPrismOrder, jvmArgLibraryPath, jvmArgImageUtils); 396 command = addToArray(command, additionalOptions); 397 command = addToArray(command, jvmArgNoDesc, jvmProxyHost, jvmProxyPort, jvmInterop, swtTestOpt); 398 command = addToArray(command, jvmArgClientTestRoot); 399 command = addToArray(command, "-DmasterPort=" + port); 400 command = addToArray(command, "-classpath", System.getProperty("java.class.path")); 401 // command = addToArray(command, "-Xdebug", "-Xnoagent", "-Djava.compiler=NONE", "-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5858"); 402 command = addToArray(command, isJunit ? JUnit2TestRunner.class.getName() : TestRunner.class.getName(), testClassName); 403 return command; 404 } 405 406 /** 407 * 408 * @param td 409 * @param resultDir 410 * @return 411 */ 412 protected String[] pluginCmdArgs(TestDescription td, String resultDir) { 413 return null; 414 } 415 416 /** 417 * 418 * @param command 419 * @throws IOException 420 */ 421 protected void doRunTd(String[] command) throws IOException { 422 process = Runtime.getRuntime().exec(deleteEmptyElements(command)); 423 } 424 | 32 import client.test.RunModes.RunModeException; 33 import client.test.runner.CommonTestRunnerWorker.Command; 34 import client.test.runner.CommonTestRunnerWorker.Command.CommandType; 35 import client.test.runner.interview.LookAndFeelQuestion; 36 import client.test.runner.interview.PipelineQuestion; 37 import client.util.CtrUtils; 38 import static client.util.CtrUtils.*; 39 import client.util.CtrUtils.OutputReader; 40 import client.util.JettyServer; 41 import com.sun.interview.YesNoQuestion; 42 import com.sun.javatest.Status; 43 import com.sun.javatest.TestDescription; 44 import com.sun.javatest.TestEnvironment; 45 import com.sun.javatest.TestEnvironment.Fault; 46 import java.io.*; 47 import java.lang.reflect.Method; 48 import java.net.ServerSocket; 49 import java.net.Socket; 50 import java.net.URL; 51 import java.net.UnknownHostException; 52 import java.util.ArrayList; 53 import java.util.HashSet; 54 import java.util.List; 55 import java.util.Set; 56 import java.util.concurrent.Semaphore; 57 import java.util.concurrent.TimeUnit; 58 import java.util.logging.Level; 59 import java.util.logging.Logger; 60 import org.junit.runner.RunWith; 61 import test.javaclient.shared.CanvasRunner; 62 import test.javaclient.shared.Utils; 63 64 /** 65 * 66 * @author shura, mrkam, Sergey Grinev, Victor Shubov 67 */ 68 public class TestScript extends htmltestrunner.TestScript { 69 70 private static final int FORCED_TERMINATION_TIMEOUT = 5000; 71 private static final boolean verbose = true; //TODO: use real logger 72 private volatile Process process = null; 73 private volatile ServerSocket cmdServer = null; 74 private volatile Socket cmdSocket; 75 private volatile ObjectOutputStream commandStream; 321 pathStr.append(p); 322 } 323 String javaExec = pathStr.toString(); 324 325 326 String proxy = lookup(BasicFXInterview.PROXY_PARAM_NAME, ""); 327 String jvmProxyHost = ""; 328 String jvmProxyPort = ""; 329 if (proxy != null && proxy.trim().length() > 0) { 330 URL proxyUrl = getProxyUrl(proxy); 331 if (proxyUrl != null) { 332 jvmProxyHost = "-DproxyHost=" + proxyUrl.getHost(); 333 jvmProxyPort = "-DproxyPort=" + proxyUrl.getPort(); 334 } 335 } 336 337 String additionalOptions = getAdditionalOptions(); 338 339 String[] jvmVmOptions = savedEnv.lookup(BasicFXInterview.VM_OPTIONS_PARAM_NAME); 340 341 String[] xPatch = savedEnv.lookup(BasicFXInterview.XPATCH_PARAM_NAME); 342 String xPatchArg = ""; 343 if (xPatch != null && xPatch.length > 0) { 344 File xPatchFile = new File(xPatch[0]); 345 xPatchArg = xPatchFile.getAbsolutePath(); 346 } 347 348 boolean enableAddExports = YesNoQuestion.YES.equals(lookup( 349 BasicFXInterview.ENABLE_ADD_EXPORTS_PARAM_NAME, YesNoQuestion.NO)); 350 351 String noAddExportsArg = enableAddExports ? null : "-DnoAddExports=true"; 352 353 String addExportsArg[] = enableAddExports 354 ? combineAddExports( 355 savedEnv.lookup(BasicFXInterview.ADD_EXPORTS_PARAM_NAME), 356 td.getParameter(RunUITestFinder.ADD_EXPORTS)) 357 : null; 358 359 String jvmArgPrismOrder = getJvmArgPrismOrder(); 360 361 362 // String externaloutput = lookup(BasicFXInterview.EXTERNALOUTPUT, ""); 363 // if (externaloutput != null) { 364 // jvmArgImageUtils = "-Dimageutils.outputpath=" + externaloutput + File.separator; 365 // } 366 String jvmArgImageUtils = "-Dimageutils.outputpath=" + resultDir + File.separator; 367 368 String jvmArgNoDesc = ""; 369 if (Boolean.parseBoolean(td.getParameter(RunUITestFinder.NO_DESCRIPTION))) { 370 jvmArgNoDesc = "-Djavatest.mode.nodesc=true"; 371 } 372 373 String runMode = lookup(BasicFXInterview.RUN_MODE_PARAM, BasicFXInterview.RUN_MODE_DESKTOP); 374 375 String jvmInterop = ""; 376 if (runMode.equals(BasicFXInterview.RUN_MODE_DESKTOP_SWING_INTEROPERABILITY)) { 377 jvmInterop = "-Djavafx.swinginteroperability=true"; 378 } else if (runMode.equals(BasicFXInterview.RUN_MODE_DESKTOP_SWT_INTEROPERABILITY)) { 379 jvmInterop = "-Djavafx.swtinteroperability=true"; 380 } 381 382 String lookAndFeelOptions = ""; 383 String lfOptions = lookup(LookAndFeelQuestion.LOOKANDFEEL_PARAM_NAME, ""); 384 if (!lfOptions.trim().equals("")) { 385 lookAndFeelOptions = "-Djavafx.userAgentStylesheetUrl=" + lfOptions; 386 } 387 388 //Needed to get images via proxy in Evergreen via VPN see RT-21325 || RT-19661 389 final boolean isFXCompatibility = System.getProperty("java.class.path").contains("JavaFXCompatibility"); 390 String ipV4 = isFXCompatibility ? "-Djava.net.preferIPv4Stack=true" : ""; 391 392 String swtTestOpt = ""; 393 try { 394 if (System.getProperty("os.name").toLowerCase().contains("mac")) { 395 RunWith wunWithAnnotation = Class.forName(testClassName).getAnnotation(RunWith.class); 396 if ((wunWithAnnotation != null) && (wunWithAnnotation.value().equals(CanvasRunner.class))) { 397 swtTestOpt = "-XstartOnFirstThread"; 398 System.out.println("Use -XstartOnFirstThread option, as we on MacOS, and SWT test is run."); 399 } 400 } 401 } catch (ClassNotFoundException ex) { 402 System.err.println("Error : " + ex); 403 } 404 405 String jvmArgClientTestRoot = "-DtestRoot=" + RunUITestFinder.testRoot; 406 407 String[] command = new String[]{}; 408 command = addToArray(command, javaExec.trim()); 409 command = addToArray(command, jvmVmOptions); 410 if (addExportsArg != null) { 411 command = addToArray(command, addExportsArg); 412 } else if (noAddExportsArg != null) { 413 command = addToArray(command, noAddExportsArg); 414 } 415 if (xPatchArg != null && !xPatchArg.isEmpty()) { 416 command = addToArray(command, "--patch-module " + xPatchArg); 417 } 418 command = addToArray(command, lookAndFeelOptions); 419 command = addToArray(command, ipV4); 420 command = addToArray(command, jvmArgPrismOrder, jvmArgImageUtils); 421 command = addToArray(command, additionalOptions); 422 command = addToArray(command, jvmArgNoDesc, jvmProxyHost, jvmProxyPort, jvmInterop, swtTestOpt); 423 command = addToArray(command, jvmArgClientTestRoot); 424 command = addToArray(command, "-DmasterPort=" + port); 425 command = addToArray(command, "-classpath", System.getProperty("java.class.path")); 426 // command = addToArray(command, "-Xdebug", "-Xnoagent", "-Djava.compiler=NONE", "-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5858"); 427 command = addToArray(command, isJunit ? JUnit2TestRunner.class.getName() : TestRunner.class.getName(), testClassName); 428 return command; 429 } 430 431 static String[] combineAddExports(String[] addExportsArray, String addExportsValue) { 432 if (addExportsValue == null) { 433 return combineAddExports(addExportsArray); 434 } else { 435 String[] newArray = new String[addExportsArray.length + 1]; 436 System.arraycopy(addExportsArray, 0, newArray, 1, addExportsArray.length); 437 newArray[0] = addExportsValue; 438 return combineAddExports(newArray); 439 } 440 } 441 442 static String[] combineAddExports(String[] addExportsArray) { 443 List<String> addExportsList = new ArrayList<>(); 444 for (String addExports : addExportsArray) { 445 if (addExports != null) { 446 for (String value : addExports.split("\\s*,\\s*")) { 447 if (!value.isEmpty() && !addExportsList.contains(value.trim())) { 448 addExportsList.add("--add-exports"); 449 addExportsList.add(value.trim()); 450 addExportsList.add("--add-opens"); 451 addExportsList.add(value.trim()); 452 } 453 } 454 } 455 } 456 return addExportsList.toArray(new String[addExportsList.size()]); 457 } 458 459 460 /** 461 * 462 * @param td 463 * @param resultDir 464 * @return 465 */ 466 protected String[] pluginCmdArgs(TestDescription td, String resultDir) { 467 return null; 468 } 469 470 /** 471 * 472 * @param command 473 * @throws IOException 474 */ 475 protected void doRunTd(String[] command) throws IOException { 476 process = Runtime.getRuntime().exec(deleteEmptyElements(command)); 477 } 478 |