/** * There is java environment configuration gap - ${JAVA_HOME}/bin/java != `which java` so just * start child process as "java" executable command drives to unexpected results. On generic Lunix * environment 'which java' may show not Oracle hotspot 8th jdk binary and evoSuite * master<->client communication will have no results. * * @param isFullOriginalJavaExecRequired - original behavior switch: "java" or JAVA_CMD from * (@link org.evosuite.EvoSuite#JAVA_CMD) * @return current runtime java executable path based on $JAVA_HOME environment variable * @apiNote under maven java.home property is ${JAVA_HOME}/jre/bin/java */ public static String getJavaBinExecutablePath(final boolean isFullOriginalJavaExecRequired) { final String separator = System.getProperty("file.separator"); final String JAVA_CMD = System.getProperty("java.home") + separator + "bin" + separator + "java"; return getJavaHomeEnv() .map(javaHomeEnvVar -> new File( javaHomeEnvVar + File.separatorChar + "bin" + File.separatorChar + "java" + getOsName() .filter(osName -> osName.toLowerCase().contains("windows")) .map(osName -> ".exe") .orElse("") ) ) .filter(File::exists) .map(File::getPath) .orElse(isFullOriginalJavaExecRequired ? JAVA_CMD : "java"); }
@Test public void unixNewBehavior() { // run test only on unix build JavaExecCmdUtil.getOsName().filter(osName -> !osName.startsWith("Windows")) .ifPresent(os -> { System.setProperty("os.name", MOCK_OS); System.setProperty("file.separator", SEPARATOR); System.setProperty("java.home", JAVA_HOME_MOCK_PATH); // set correct java_home and get real path to java environmentVariables.set("JAVA_HOME", JAVA_HOME_SYSTEM); assertThat(JavaExecCmdUtil.getJavaBinExecutablePath(), IsEqual.equalTo(JAVA_HOME_SYSTEM + SEPARATOR + "bin" + SEPARATOR + "java")); } ); } }
@Test public void winNewBehavior() { // run test only on windows build Assume.assumeThat(ORIG_OS.toLowerCase(), StringStartsWith.startsWith("win")); JavaExecCmdUtil.getOsName().filter(osName -> osName.startsWith("Windows")).ifPresent(os -> { // set correct java_home and get real path to java.exe environmentVariables.set("JAVA_HOME", JAVA_HOME_SYSTEM); assertThat(JavaExecCmdUtil.getJavaBinExecutablePath(), IsEqual.equalTo( JAVA_HOME_SYSTEM + SEPARATOR + "bin" + SEPARATOR + "java.exe")); } ); } }