Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/test/com/sun/tools/attach/TempDirTest.java
38855 views
1
/*
2
* Copyright (c) 2014 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
import com.sun.tools.attach.*;
25
26
import java.nio.file.Files;
27
import java.nio.file.Path;
28
import java.util.Properties;
29
import java.util.List;
30
import java.io.File;
31
32
import jdk.testlibrary.OutputAnalyzer;
33
import jdk.testlibrary.ProcessTools;
34
import jdk.testlibrary.ProcessThread;
35
36
/*
37
* @test
38
* @bug 8033104
39
* @summary Test to make sure attach and jvmstat works correctly when java.io.tmpdir is set
40
* @library /lib/testlibrary
41
* @run build Application Shutdown RunnerUtil
42
* @run main/timeout=200 TempDirTest
43
*/
44
45
/*
46
* This test runs with an extra long timeout since it takes a really long time with -Xcomp
47
* when starting many processes.cd /
48
*/
49
50
public class TempDirTest {
51
52
private static long startTime;
53
54
public static void main(String args[]) throws Throwable {
55
56
startTime = System.currentTimeMillis();
57
58
Path clientTmpDir = Files.createTempDirectory("TempDirTest-client");
59
clientTmpDir.toFile().deleteOnExit();
60
Path targetTmpDir = Files.createTempDirectory("TempDirTest-target");
61
targetTmpDir.toFile().deleteOnExit();
62
63
// run the test with all possible combinations of setting java.io.tmpdir
64
runExperiment(null, null);
65
runExperiment(clientTmpDir, null);
66
runExperiment(clientTmpDir, targetTmpDir);
67
runExperiment(null, targetTmpDir);
68
69
}
70
71
private static int counter = 0;
72
73
/*
74
* The actual test is in the nested class TestMain.
75
* The responsibility of this class is to:
76
* 1. Start the Application class in a separate process.
77
* 2. Find the pid and shutdown port of the running Application.
78
* 3. Launches the tests in nested class TestMain that will attach to the Application.
79
* 4. Shut down the Application.
80
*/
81
public static void runExperiment(Path clientTmpDir, Path targetTmpDir) throws Throwable {
82
83
System.out.print("### Running tests with overridden tmpdir for");
84
System.out.print(" client: " + (clientTmpDir == null ? "no" : "yes"));
85
System.out.print(" target: " + (targetTmpDir == null ? "no" : "yes"));
86
System.out.println(" ###");
87
88
long elapsedTime = (System.currentTimeMillis() - startTime) / 1000;
89
System.out.println("Started after " + elapsedTime + "s");
90
91
final String pidFile = "TempDirTest.Application.pid-" + counter++;
92
ProcessThread processThread = null;
93
RunnerUtil.ProcessInfo info = null;
94
try {
95
String[] tmpDirArg = null;
96
if (targetTmpDir != null) {
97
tmpDirArg = new String[] {"-Djava.io.tmpdir=" + targetTmpDir};
98
}
99
processThread = RunnerUtil.startApplication(pidFile, tmpDirArg);
100
info = RunnerUtil.readProcessInfo(pidFile);
101
launchTests(info.pid, clientTmpDir);
102
} catch (Throwable t) {
103
System.out.println("TempDirTest got unexpected exception: " + t);
104
t.printStackTrace();
105
throw t;
106
} finally {
107
// Make sure the Application process is stopped.
108
RunnerUtil.stopApplication(info.shutdownPort, processThread);
109
}
110
111
elapsedTime = (System.currentTimeMillis() - startTime) / 1000;
112
System.out.println("Completed after " + elapsedTime + "s");
113
114
}
115
116
/**
117
* Runs the actual tests in nested class TestMain.
118
* The reason for running the tests in a separate process
119
* is that we need to modify the class path and
120
* the -Djava.io.tmpdir property.
121
*/
122
private static void launchTests(int pid, Path clientTmpDir) throws Throwable {
123
final String sep = File.separator;
124
125
// Need to add jdk/lib/tools.jar to classpath.
126
String classpath =
127
System.getProperty("test.class.path", "") + File.pathSeparator +
128
System.getProperty("test.jdk", ".") + sep + "lib" + sep + "tools.jar";
129
130
String[] tmpDirArg = null;
131
if (clientTmpDir != null) {
132
tmpDirArg = new String [] {"-Djava.io.tmpdir=" + clientTmpDir};
133
}
134
135
// Arguments : [-Djava.io.tmpdir=] -classpath cp TempDirTest$TestMain pid
136
String[] args = RunnerUtil.concat(
137
tmpDirArg,
138
new String[] {
139
"-classpath",
140
classpath,
141
"TempDirTest$TestMain",
142
Integer.toString(pid) });
143
OutputAnalyzer output = ProcessTools.executeTestJvm(args);
144
output.shouldHaveExitValue(0);
145
}
146
147
/**
148
* This is the actual test. It will attach to the running Application
149
* and perform a number of basic attach tests.
150
*/
151
public static class TestMain {
152
public static void main(String args[]) throws Exception {
153
String pid = args[0];
154
155
// Test 1 - list method should list the target VM
156
System.out.println(" - Test: VirtualMachine.list");
157
List<VirtualMachineDescriptor> l = VirtualMachine.list();
158
boolean found = false;
159
for (VirtualMachineDescriptor vmd: l) {
160
if (vmd.id().equals(pid)) {
161
found = true;
162
break;
163
}
164
}
165
if (found) {
166
System.out.println(" - " + pid + " found.");
167
} else {
168
throw new RuntimeException(pid + " not found in VM list");
169
}
170
171
// Test 2 - try to attach and verify connection
172
173
System.out.println(" - Attaching to application ...");
174
VirtualMachine vm = VirtualMachine.attach(pid);
175
176
System.out.println(" - Test: system properties in target VM");
177
Properties props = vm.getSystemProperties();
178
String value = props.getProperty("attach.test");
179
if (value == null || !value.equals("true")) {
180
throw new RuntimeException("attach.test property not set");
181
}
182
System.out.println(" - attach.test property set as expected");
183
}
184
}
185
}
186
187