author | chegar |
Thu, 17 Oct 2019 20:54:25 +0100 | |
branch | datagramsocketimpl-branch |
changeset 58679 | 9c3209ff7550 |
parent 58678 | 9cf78a70fa4f |
parent 58550 | e98509cb3867 |
permissions | -rw-r--r-- |
57502 | 1 |
/* |
2 |
* Copyright (c) 2019, 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 |
/* |
|
26 |
* @test |
|
27 |
* @summary Test JCMD with side car pattern. |
|
28 |
* Sidecar is a common pattern used in the cloud environments for monitoring |
|
29 |
* and other uses. In side car pattern the main application/service container |
|
30 |
* is paired with a sidecar container by sharing certain aspects of container |
|
31 |
* namespace such as PID namespace, specific sub-directories, IPC and more. |
|
32 |
* @requires docker.support |
|
33 |
* @library /test/lib |
|
34 |
* @modules java.base/jdk.internal.misc |
|
35 |
* java.management |
|
36 |
* jdk.jartool/sun.tools.jar |
|
37 |
* @build EventGeneratorLoop |
|
38 |
* @run driver TestJcmdWithSideCar |
|
39 |
*/ |
|
40 |
import java.nio.file.Paths; |
|
41 |
import java.util.Arrays; |
|
42 |
import java.util.ArrayList; |
|
43 |
import java.util.List; |
|
57954
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
44 |
import java.util.concurrent.TimeUnit; |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
45 |
import java.util.function.Consumer; |
57502 | 46 |
import java.util.stream.Collectors; |
47 |
import jdk.test.lib.Container; |
|
48 |
import jdk.test.lib.Utils; |
|
49 |
import jdk.test.lib.containers.docker.Common; |
|
50 |
import jdk.test.lib.containers.docker.DockerRunOptions; |
|
51 |
import jdk.test.lib.containers.docker.DockerTestUtils; |
|
52 |
import jdk.test.lib.process.OutputAnalyzer; |
|
57954
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
53 |
import jdk.test.lib.process.ProcessTools; |
57502 | 54 |
|
55 |
||
56 |
public class TestJcmdWithSideCar { |
|
57 |
private static final String IMAGE_NAME = Common.imageName("jfr-jcmd"); |
|
58 |
private static final int TIME_TO_RUN_MAIN_PROCESS = (int) (30 * Utils.TIMEOUT_FACTOR); // seconds |
|
58550
e98509cb3867
8230957: [TESTBUG] containers/docker/TestJcmdWithSideCar.java sporadic failures
mbaesken
parents:
57954
diff
changeset
|
59 |
private static final long TIME_TO_WAIT_FOR_MAIN_METHOD_START = 50 * 1000; // milliseconds |
57502 | 60 |
private static final String MAIN_CONTAINER_NAME = "test-container-main"; |
61 |
||
62 |
public static void main(String[] args) throws Exception { |
|
63 |
if (!DockerTestUtils.canTestDocker()) { |
|
64 |
return; |
|
65 |
} |
|
66 |
||
67 |
DockerTestUtils.buildJdkDockerImage(IMAGE_NAME, "Dockerfile-BasicTest", "jdk-docker"); |
|
68 |
||
69 |
try { |
|
70 |
// Start the loop process in the "main" container, then run test cases |
|
71 |
// using a sidecar container. |
|
57954
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
72 |
MainContainer mainContainer = new MainContainer(); |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
73 |
mainContainer.start(); |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
74 |
mainContainer.waitForMainMethodStart(TIME_TO_WAIT_FOR_MAIN_METHOD_START); |
57502 | 75 |
|
57954
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
76 |
long mainProcPid = testCase01(); |
57502 | 77 |
|
57954
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
78 |
// Excluding the test case below until JDK-8228850 is fixed |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
79 |
// JDK-8228850: jhsdb jinfo fails with ClassCastException: |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
80 |
// s.j.h.oops.TypeArray cannot be cast to s.j.h.oops.Instance |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
81 |
// mainContainer.assertIsAlive(); |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
82 |
// testCase02(mainProcPid); |
57502 | 83 |
|
84 |
// JCMD does not work in sidecar configuration, except for "jcmd -l". |
|
85 |
// Including this test case to assist in reproduction of the problem. |
|
57954
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
86 |
// mainContainer.assertIsAlive(); |
57502 | 87 |
// testCase03(mainProcPid); |
88 |
||
57954
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
89 |
mainContainer.waitForAndCheck(TIME_TO_RUN_MAIN_PROCESS * 1000); |
57502 | 90 |
} finally { |
91 |
DockerTestUtils.removeDockerImage(IMAGE_NAME); |
|
92 |
} |
|
93 |
} |
|
94 |
||
95 |
||
57954
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
96 |
// Run "jcmd -l" in a sidecar container, find a target process. |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
97 |
private static long testCase01() throws Exception { |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
98 |
OutputAnalyzer out = runSideCar(MAIN_CONTAINER_NAME, "/jdk/bin/jcmd", "-l") |
57502 | 99 |
.shouldHaveExitValue(0) |
57954
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
100 |
.shouldContain("sun.tools.jcmd.JCmd"); |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
101 |
long pid = findProcess(out, "EventGeneratorLoop"); |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
102 |
if (pid == -1) { |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
103 |
throw new RuntimeException("Could not find specified process"); |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
104 |
} |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
105 |
|
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
106 |
return pid; |
57502 | 107 |
} |
108 |
||
109 |
// run jhsdb jinfo <PID> (jhsdb uses PTRACE) |
|
110 |
private static void testCase02(long pid) throws Exception { |
|
111 |
runSideCar(MAIN_CONTAINER_NAME, "/jdk/bin/jhsdb", "jinfo", "--pid", "" + pid) |
|
112 |
.shouldHaveExitValue(0) |
|
113 |
.shouldContain("Java System Properties") |
|
114 |
.shouldContain("VM Flags"); |
|
115 |
} |
|
116 |
||
117 |
// test jcmd with some commands (help, start JFR recording) |
|
118 |
// JCMD will use signal mechanism and Unix Socket |
|
119 |
private static void testCase03(long pid) throws Exception { |
|
120 |
runSideCar(MAIN_CONTAINER_NAME, "/jdk/bin/jcmd", "" + pid, "help") |
|
121 |
.shouldHaveExitValue(0) |
|
122 |
.shouldContain("VM.version"); |
|
123 |
runSideCar(MAIN_CONTAINER_NAME, "/jdk/bin/jcmd", "" + pid, "JFR.start") |
|
124 |
.shouldHaveExitValue(0) |
|
125 |
.shouldContain("Started recording"); |
|
126 |
} |
|
127 |
||
128 |
||
129 |
// JCMD relies on the attach mechanism (com.sun.tools.attach), |
|
130 |
// which in turn relies on JVMSTAT mechanism, which puts its mapped |
|
131 |
// buffers in /tmp directory (hsperfdata_<user>). Thus, in sidecar |
|
132 |
// we mount /tmp via --volumes-from from the main container. |
|
57954
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
133 |
private static OutputAnalyzer runSideCar(String mainContainerName, String whatToRun, |
57502 | 134 |
String... args) throws Exception { |
135 |
List<String> cmd = new ArrayList<>(); |
|
136 |
String[] command = new String[] { |
|
137 |
Container.ENGINE_COMMAND, "run", |
|
138 |
"--tty=true", "--rm", |
|
139 |
"--cap-add=SYS_PTRACE", "--sig-proxy=true", |
|
57954
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
140 |
"--pid=container:" + mainContainerName, |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
141 |
"--volumes-from", mainContainerName, |
57502 | 142 |
IMAGE_NAME, whatToRun |
143 |
}; |
|
144 |
||
145 |
cmd.addAll(Arrays.asList(command)); |
|
146 |
cmd.addAll(Arrays.asList(args)); |
|
147 |
return DockerTestUtils.execute(cmd); |
|
148 |
} |
|
149 |
||
57954
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
150 |
// Returns PID of a matching process, or -1 if not found. |
57502 | 151 |
private static long findProcess(OutputAnalyzer out, String name) throws Exception { |
152 |
List<String> l = out.asLines() |
|
153 |
.stream() |
|
154 |
.filter(s -> s.contains(name)) |
|
155 |
.collect(Collectors.toList()); |
|
156 |
if (l.isEmpty()) { |
|
57954
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
157 |
return -1; |
57502 | 158 |
} |
159 |
String psInfo = l.get(0); |
|
160 |
System.out.println("findProcess(): psInfo: " + psInfo); |
|
161 |
String pid = psInfo.substring(0, psInfo.indexOf(' ')); |
|
162 |
System.out.println("findProcess(): pid: " + pid); |
|
163 |
return Long.parseLong(pid); |
|
164 |
} |
|
165 |
||
166 |
private static DockerRunOptions commonDockerOpts(String className) { |
|
167 |
return new DockerRunOptions(IMAGE_NAME, "/jdk/bin/java", className) |
|
168 |
.addDockerOpts("--volume", Utils.TEST_CLASSES + ":/test-classes/") |
|
169 |
.addJavaOpts("-cp", "/test-classes/"); |
|
170 |
} |
|
171 |
||
57954
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
172 |
private static void sleep(long delay) { |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
173 |
try { |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
174 |
Thread.sleep(delay); |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
175 |
} catch (InterruptedException e) { |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
176 |
System.out.println("InterruptedException" + e.getMessage()); |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
177 |
} |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
178 |
} |
57502 | 179 |
|
57954
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
180 |
|
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
181 |
static class MainContainer { |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
182 |
boolean mainMethodStarted; |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
183 |
Process p; |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
184 |
|
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
185 |
private Consumer<String> outputConsumer = s -> { |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
186 |
if (!mainMethodStarted && s.contains(EventGeneratorLoop.MAIN_METHOD_STARTED)) { |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
187 |
System.out.println("MainContainer: setting mainMethodStarted"); |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
188 |
mainMethodStarted = true; |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
189 |
} |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
190 |
}; |
57502 | 191 |
|
57954
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
192 |
public Process start() throws Exception { |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
193 |
// start "main" container (the observee) |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
194 |
DockerRunOptions opts = commonDockerOpts("EventGeneratorLoop"); |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
195 |
opts.addDockerOpts("--cap-add=SYS_PTRACE") |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
196 |
.addDockerOpts("--name", MAIN_CONTAINER_NAME) |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
197 |
.addDockerOpts("--volume", "/tmp") |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
198 |
.addDockerOpts("--volume", Paths.get(".").toAbsolutePath() + ":/workdir/") |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
199 |
.addJavaOpts("-XX:+UsePerfData") |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
200 |
.addClassOptions("" + TIME_TO_RUN_MAIN_PROCESS); |
58550
e98509cb3867
8230957: [TESTBUG] containers/docker/TestJcmdWithSideCar.java sporadic failures
mbaesken
parents:
57954
diff
changeset
|
201 |
// avoid large Xmx |
e98509cb3867
8230957: [TESTBUG] containers/docker/TestJcmdWithSideCar.java sporadic failures
mbaesken
parents:
57954
diff
changeset
|
202 |
opts.appendTestJavaOptions = false; |
57954
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
203 |
|
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
204 |
List<String> cmd = DockerTestUtils.buildJavaCommand(opts); |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
205 |
ProcessBuilder pb = new ProcessBuilder(cmd); |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
206 |
p = ProcessTools.startProcess("main-container-process", |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
207 |
pb, |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
208 |
outputConsumer); |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
209 |
return p; |
57502 | 210 |
} |
211 |
||
57954
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
212 |
public void waitForMainMethodStart(long howLong) { |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
213 |
long expiration = System.currentTimeMillis() + howLong; |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
214 |
|
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
215 |
do { |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
216 |
if (mainMethodStarted) { |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
217 |
return; |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
218 |
} |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
219 |
sleep(200); |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
220 |
} while (System.currentTimeMillis() < expiration); |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
221 |
|
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
222 |
throw new RuntimeException("Timed out while waiting for main() to start"); |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
223 |
} |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
224 |
|
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
225 |
public void assertIsAlive() throws Exception { |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
226 |
if (!p.isAlive()) { |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
227 |
throw new RuntimeException("Main container process stopped unexpectedly, exit value: " |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
228 |
+ p.exitValue()); |
57502 | 229 |
} |
230 |
} |
|
231 |
||
57954
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
232 |
public void waitFor(long timeout) throws Exception { |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
233 |
p.waitFor(timeout, TimeUnit.MILLISECONDS); |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
234 |
} |
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
235 |
|
fd09c637dedb
8228960: [TESTBUG] containers/docker/TestJcmdWithSideCar.java: jcmd reports main class as Unknown
mseledtsov
parents:
57502
diff
changeset
|
236 |
public void waitForAndCheck(long timeout) throws Exception { |
58550
e98509cb3867
8230957: [TESTBUG] containers/docker/TestJcmdWithSideCar.java sporadic failures
mbaesken
parents:
57954
diff
changeset
|
237 |
int exitValue = -1; |
e98509cb3867
8230957: [TESTBUG] containers/docker/TestJcmdWithSideCar.java sporadic failures
mbaesken
parents:
57954
diff
changeset
|
238 |
int retryCount = 3; |
e98509cb3867
8230957: [TESTBUG] containers/docker/TestJcmdWithSideCar.java sporadic failures
mbaesken
parents:
57954
diff
changeset
|
239 |
|
e98509cb3867
8230957: [TESTBUG] containers/docker/TestJcmdWithSideCar.java sporadic failures
mbaesken
parents:
57954
diff
changeset
|
240 |
do { |
e98509cb3867
8230957: [TESTBUG] containers/docker/TestJcmdWithSideCar.java sporadic failures
mbaesken
parents:
57954
diff
changeset
|
241 |
waitFor(timeout); |
e98509cb3867
8230957: [TESTBUG] containers/docker/TestJcmdWithSideCar.java sporadic failures
mbaesken
parents:
57954
diff
changeset
|
242 |
try { |
e98509cb3867
8230957: [TESTBUG] containers/docker/TestJcmdWithSideCar.java sporadic failures
mbaesken
parents:
57954
diff
changeset
|
243 |
exitValue = p.exitValue(); |
e98509cb3867
8230957: [TESTBUG] containers/docker/TestJcmdWithSideCar.java sporadic failures
mbaesken
parents:
57954
diff
changeset
|
244 |
} catch(IllegalThreadStateException ex) { |
e98509cb3867
8230957: [TESTBUG] containers/docker/TestJcmdWithSideCar.java sporadic failures
mbaesken
parents:
57954
diff
changeset
|
245 |
System.out.println("IllegalThreadStateException occured when calling exitValue()"); |
e98509cb3867
8230957: [TESTBUG] containers/docker/TestJcmdWithSideCar.java sporadic failures
mbaesken
parents:
57954
diff
changeset
|
246 |
retryCount--; |
e98509cb3867
8230957: [TESTBUG] containers/docker/TestJcmdWithSideCar.java sporadic failures
mbaesken
parents:
57954
diff
changeset
|
247 |
} |
e98509cb3867
8230957: [TESTBUG] containers/docker/TestJcmdWithSideCar.java sporadic failures
mbaesken
parents:
57954
diff
changeset
|
248 |
} while (exitValue == -1 && retryCount > 0); |
e98509cb3867
8230957: [TESTBUG] containers/docker/TestJcmdWithSideCar.java sporadic failures
mbaesken
parents:
57954
diff
changeset
|
249 |
|
e98509cb3867
8230957: [TESTBUG] containers/docker/TestJcmdWithSideCar.java sporadic failures
mbaesken
parents:
57954
diff
changeset
|
250 |
if (exitValue != 0) { |
e98509cb3867
8230957: [TESTBUG] containers/docker/TestJcmdWithSideCar.java sporadic failures
mbaesken
parents:
57954
diff
changeset
|
251 |
throw new RuntimeException("DockerThread stopped unexpectedly, non-zero exit value is " + exitValue); |
57502 | 252 |
} |
253 |
} |
|
254 |
||
255 |
} |
|
256 |
||
257 |
} |