1 /*
2 * Copyright (c) 2024, 2025, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 import java.io.File;
26 import java.nio.file.Path;
27 import java.util.Map;
28 import jdk.test.lib.StringArrayUtils;
29 import jdk.test.lib.artifacts.Artifact;
30 import jdk.test.lib.artifacts.ArtifactResolver;
31 import jdk.test.lib.cds.CDSAppTester;
32 import jdk.test.lib.process.OutputAnalyzer;
33
34 /*
35 * @test id=static
36 * @key external-dep
37 * @requires vm.cds
38 * @summary run HelidonQuickStartSE with the classic static archive workflow
39 * @library /test/lib
40 * @run driver/timeout=120 HelidonQuickStartSE STATIC
41 */
42
43 /*
44 * @test id=dynamic
45 * @key external-dep
46 * @requires vm.cds
47 * @summary run HelidonQuickStartSE with the classic dynamic archive workflow
48 * @library /test/lib
49 * @build jdk.test.whitebox.WhiteBox
50 * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox
51 * @run main/othervm/timeout=120 -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:. HelidonQuickStartSE DYNAMIC
52 */
53
54 /*
55 * @test id=aot
56 * @key external-dep
57 * @requires vm.cds
58 * @requires vm.cds.write.archived.java.heap
59 * @summary run HelidonQuickStartSE with the JEP 483 workflow
60 * @library /test/lib
61 * @run driver/timeout=120 HelidonQuickStartSE AOT
62 */
63
64 // Test CDS with the example program in https://helidon.io/docs/v4/se/guides/quickstart
65 //
66 // NOTE: if you have not set up an artifactory, you can create helidon-quickstart-se-4.0.7.zip by:
67 //
68 // - Make a clone of https://github.com/openjdk/leyden/tree/premain
69 // - Change to the directory test/hotspot/jtreg/premain/helidon-quickstart-se
70 // - Edit the Makefile and ../lib/DemoSupport.gmk as necessary
71 // - Run the command "make artifact"
72 //
73 // Then, you can add the following to your jtreg command-line to run the test cases in this directory:
74 // -vmoption:-Djdk.test.lib.artifacts.helidon-quickstart-se=/my/repo/test/hotspot/jtreg/premain/helidon-quickstart-se/helidon-quickstart-se
75
76 @Artifact(organization = "io.helidon", name = "helidon-quickstart-se", revision = "4.0.7", extension = "zip")
77 public class HelidonQuickStartSE {
78 public static void main(String args[]) throws Exception {
79 String cp = getArtifact();
80 HelidonQuickStartSETester tester = new HelidonQuickStartSETester(cp);
81 tester.run(args);
82 System.out.println(cp);
83 }
84
85 private static String getArtifact() throws Exception {
86 String sep = File.separator;
87 Map<String, Path> artifacts = ArtifactResolver.resolve(HelidonQuickStartSE.class);
88 Path path = artifacts.get("io.helidon.helidon-quickstart-se-4.0.7");
89 return path.toString() + sep + "target" + sep + "helidon-quickstart-se.jar";
90 }
91
92 static class HelidonQuickStartSETester extends CDSAppTester {
93 String cp;
94
95 HelidonQuickStartSETester(String cp) {
96 super("HelidonQuickStartSE");
97 this.cp = cp;
98 }
99
100 @Override
101 public String[] vmArgs(RunMode runMode) {
102 return new String[] {
103 "-DautoQuit=true",
104 "-Dserver.port=0", // use system-assigned port
105
106 // This program may run very slowly in debug builds if VerifyDependencies is enabled.
107 "-XX:+IgnoreUnrecognizedVMOptions", "-XX:-VerifyDependencies",
108 };
109 }
110
111 @Override
112 public String classpath(RunMode runMode) {
113 return cp;
114 }
115
116 @Override
117 public String[] appCommandLine(RunMode runMode) {
118 String cmdLine[] = new String[] {
119 "io.helidon.examples.quickstart.se.Main",
120 };
121
122 if (runMode.isProductionRun()) {
123 cmdLine = StringArrayUtils.concat("-Xlog:aot+codecache=error", cmdLine);
124 }
125 return cmdLine;
126 }
127
128 @Override
129 public void checkExecution(OutputAnalyzer out, RunMode runMode) {
130 if (runMode.isApplicationExecuted()) {
131 out.shouldContain("Booted and returned in ");
132 }
133 }
134 }
135 }