| /* |
| * Copyright (c) 2022, 2022 Contributors to the Eclipse Foundation. All rights reserved. |
| * |
| * This program and the accompanying materials are made available under the |
| * terms of the Eclipse Public License v. 2.0, which is available at |
| * http://www.eclipse.org/legal/epl-2.0. |
| * |
| * This Source Code may also be made available under the following Secondary |
| * Licenses when the conditions for such availability set forth in the |
| * Eclipse Public License v. 2.0 are satisfied: GNU General Public License, |
| * version 2 with the GNU Classpath Exception, which is available at |
| * https://www.gnu.org/software/classpath/license.html. |
| * |
| * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 |
| */ |
| package com.sun.ts.run; |
| |
| import static java.lang.String.join; |
| import static java.lang.System.getProperty; |
| import static java.nio.file.Files.writeString; |
| import static java.nio.file.Paths.get; |
| import static org.junit.jupiter.api.Assertions.fail; |
| |
| import java.io.IOException; |
| import java.io.OutputStreamWriter; |
| import java.io.PrintWriter; |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| import org.junit.jupiter.api.Test; |
| |
| import com.sun.javatest.Status; |
| import com.sun.ts.lib.harness.ExecTSTestCmd; |
| |
| public class StandaloneRunnerITest { |
| |
| @Test |
| public void test() throws IOException { |
| if (getProperty("tck.standalone") == null) { |
| return; |
| } |
| |
| ExecTSTestCmd cmd = new ExecTSTestCmd(); |
| |
| System.getProperties().entrySet().stream().forEach(entry -> System.out.println(entry.getKey() + "=" + entry.getValue())); |
| |
| writeString( |
| get(getProperty("tck.home") + "/tmp/tstest.jte"), |
| getTSContent()); |
| |
| List<String> arguments = new ArrayList<>(); |
| arguments.addAll(getEnvOptions()); |
| arguments.addAll(getJavaOptions()); |
| arguments.addAll(getTestOptions()); |
| |
| PrintWriter log = new PrintWriter(new OutputStreamWriter(System.err)); |
| PrintWriter ref = new PrintWriter(new OutputStreamWriter(System.out)); |
| |
| try { |
| Status status = cmd.run(arguments.toArray(String[]::new), log, ref); |
| if (!status.isPassed()) { |
| fail(status.getReason()); |
| } |
| |
| } finally { |
| log.flush(); |
| ref.flush(); |
| } |
| } |
| |
| List<String> getEnvOptions() { |
| return List.of( |
| "-v", |
| "CLASSPATH=" + getClassPath(), |
| "HOME=" + getProperty("user.home"), |
| "windir=", |
| "SYSTEMROOT="); |
| } |
| |
| List<String> getJavaOptions() { |
| List<String> javaOptions = List.of( |
| |
| getProperty("java.home") + "/bin/java", |
| |
| "-Dcts.tmp=" + getProperty("java.io.tmpdir"), |
| |
| "--add-opens=jdk.management/com.sun.management.internal=ALL-UNNAMED", |
| "--add-opens=java.base/sun.net.www.protocol.jrt=ALL-UNNAMED", |
| "--add-opens=java.base/java.lang=ALL-UNNAMED", |
| "--add-opens=java.base/java.util=ALL-UNNAMED", |
| "--add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED", |
| "--add-opens=java.naming/javax.naming.spi=ALL-UNNAMED") |
| ; |
| |
| if (getProperty("maven.tck.debug") != null && !getProperty("maven.tck.debug").isEmpty()) { |
| javaOptions = new ArrayList<>(javaOptions); |
| javaOptions.add("-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=9009"); |
| } |
| |
| return javaOptions; |
| } |
| |
| List<String> getTestOptions() { |
| return List.of( |
| "com.sun.ts.tests.common.vehicle.VehicleClient", |
| |
| "-p", getProperty("tck.home") + "/tmp/tstest.jte", |
| "-t", getTest(), |
| "-vehicle", "standalone" |
| ); |
| } |
| |
| String getClassPath() { |
| return join(":", List.of( |
| getProperty("tck.home") + "/lib/javatest.jar", |
| getProperty("tck.home") + "/lib/tsharness.jar", |
| getProperty("tck.home") + "/lib/eltck.jar", |
| getProperty("tck.home") + "/lib/sigtest.jar", |
| getProperty("tck.home") + "/classes", |
| getProperty("glassfish.home") + "/glassfish/modules/jakarta.el-api.jar", |
| getProperty("glassfish.home") + "/glassfish/modules/expressly.jar" |
| |
| )); |
| } |
| |
| String getTSContent() { |
| return join("\n", List.of( |
| "test_classname=" + getTestClass(), |
| "variable.mapper=org.glassfish.expressly.lang.VariableMapperImpl", |
| "porting.ts.url.class.1=com.sun.ts.lib.implementation.sun.common.SunRIURL", |
| |
| "bin.dir=" + getProperty("tck.home") + "/bin", |
| "harness.temp.directory=" + getProperty("tck.home") + "/tmp", |
| "jimage.dir=" + getProperty("tck.home") + "/tmp/jdk-bundles", |
| |
| "harness.socket.retry.count=10", |
| "harness.log.port=2000", |
| "harness.log.delayseconds=1", |
| "harness.log.traceflag=false", |
| "all.props=false", |
| "finder=cts", |
| "current.keywords=all" |
| )); |
| } |
| |
| String getTestClass() { |
| // e.g. |
| // -Drun.test="com/sun/ts/tests/el/api/jakarta_el/methodexpression/ELClient.java#methodExpressionMatchingAmbiguousTest" |
| String test = getProperty("run.test"); |
| int dashPos = test.indexOf('#'); |
| if (dashPos > 0) { |
| test = test.substring(0, dashPos); |
| } |
| int javaPos = test.indexOf(".java"); |
| if (javaPos > 0) { |
| test = test.substring(0, javaPos); |
| } |
| |
| return test.replace('/', '.'); |
| } |
| |
| String getTest() { |
| String test = ""; |
| String runTest = getProperty("run.test"); |
| int dashPos = runTest.indexOf('#'); |
| if (dashPos > 0) { |
| test = runTest.substring(dashPos + 1); |
| } |
| |
| return test; |
| } |
| |
| } |