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 miscellanous functionality related to JVM running in docker container
28 * @requires docker.support
29 * @library /test/lib
30 * @modules java.base/jdk.internal.misc
31 * java.management
32 * jdk.jartool/sun.tools.jar
33 * @build CheckContainerized sun.hotspot.WhiteBox PrintContainerInfo
34 * @run driver ClassFileInstaller -jar whitebox.jar sun.hotspot.WhiteBox sun.hotspot.WhiteBox$WhiteBoxPermission
35 * @run driver TestMisc
36 */
37 import jdk.test.lib.containers.docker.Common;
38 import jdk.test.lib.containers.docker.DockerTestUtils;
39 import jdk.test.lib.containers.docker.DockerRunOptions;
40 import jdk.test.lib.process.OutputAnalyzer;
41 import jdk.test.lib.process.ProcessTools;
42
43
44 public class TestMisc {
45 private static final String imageName = Common.imageName("misc");
46
47 public static void main(String[] args) throws Exception {
48 if (!DockerTestUtils.canTestDocker()) {
49 return;
50 }
51
52 Common.prepareWhiteBox();
53 DockerTestUtils.buildJdkDockerImage(imageName, "Dockerfile-BasicTest", "jdk-docker");
54
55 try {
56 testMinusContainerSupport();
72 }
73
74
75 private static void testIsContainerized() throws Exception {
76 Common.logNewTestCase("Test is_containerized() inside a docker container");
77
78 DockerRunOptions opts = Common.newOpts(imageName, "CheckContainerized");
79 Common.addWhiteBoxOpts(opts);
80
81 Common.run(opts)
82 .shouldContain(CheckContainerized.INSIDE_A_CONTAINER);
83 }
84
85
86 private static void testPrintContainerInfo() throws Exception {
87 Common.logNewTestCase("Test print_container_info()");
88
89 DockerRunOptions opts = Common.newOpts(imageName, "PrintContainerInfo");
90 Common.addWhiteBoxOpts(opts);
91
92 checkContainerInfo(Common.run(opts));
93 }
94
95
96 private static void checkContainerInfo(OutputAnalyzer out) throws Exception {
97 String[] expectedToContain = new String[] {
98 "cpuset.cpus",
99 "cpuset.mems",
100 "CPU Shares",
101 "CPU Quota",
102 "CPU Period",
103 "OSContainer::active_processor_count",
104 "Memory Limit",
105 "Memory Soft Limit",
106 "Memory Usage",
107 "Maximum Memory Usage",
108 "memory_max_usage_in_bytes"
109 };
110
111 for (String s : expectedToContain) {
112 out.shouldContain(s);
113 }
114 }
115
116 }
|
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 miscellanous functionality related to JVM running in docker container
28 * @requires docker.support
29 * @library /test/lib
30 * @modules java.base/jdk.internal.misc
31 * java.management
32 * jdk.jartool/sun.tools.jar
33 * @build CheckContainerized sun.hotspot.WhiteBox PrintContainerInfo
34 * @run driver ClassFileInstaller -jar whitebox.jar sun.hotspot.WhiteBox sun.hotspot.WhiteBox$WhiteBoxPermission
35 * @run driver TestMisc
36 */
37 import java.util.Optional;
38 import jdk.test.lib.containers.docker.Common;
39 import jdk.test.lib.containers.docker.DockerTestUtils;
40 import jdk.test.lib.containers.docker.DockerRunOptions;
41 import jdk.test.lib.process.OutputAnalyzer;
42 import jdk.test.lib.process.ProcessTools;
43
44
45 public class TestMisc {
46 private static final String imageName = Common.imageName("misc");
47
48 public static void main(String[] args) throws Exception {
49 if (!DockerTestUtils.canTestDocker()) {
50 return;
51 }
52
53 Common.prepareWhiteBox();
54 DockerTestUtils.buildJdkDockerImage(imageName, "Dockerfile-BasicTest", "jdk-docker");
55
56 try {
57 testMinusContainerSupport();
73 }
74
75
76 private static void testIsContainerized() throws Exception {
77 Common.logNewTestCase("Test is_containerized() inside a docker container");
78
79 DockerRunOptions opts = Common.newOpts(imageName, "CheckContainerized");
80 Common.addWhiteBoxOpts(opts);
81
82 Common.run(opts)
83 .shouldContain(CheckContainerized.INSIDE_A_CONTAINER);
84 }
85
86
87 private static void testPrintContainerInfo() throws Exception {
88 Common.logNewTestCase("Test print_container_info()");
89
90 DockerRunOptions opts = Common.newOpts(imageName, "PrintContainerInfo");
91 Common.addWhiteBoxOpts(opts);
92
93 OutputAnalyzer out = Common.run(opts);
94 checkContainerInfoCommon(out);
95 checkContainerInfoCgroupSpecific(out);
96 }
97
98
99 private static void checkContainerInfoCommon(OutputAnalyzer out) throws Exception {
100 String[] expectedToContain = new String[] {
101 "cpuset.cpus",
102 "cpuset.mems",
103 "CPU Shares",
104 "CPU Quota",
105 "CPU Period",
106 "OSContainer::active_processor_count",
107 "Memory Limit",
108 "Memory Soft Limit",
109 "Memory Usage",
110 "memory_max_usage_in_bytes"
111 };
112
113 for (String s : expectedToContain) {
114 out.shouldContain(s);
115 }
116 }
117
118 private static void checkContainerInfoCgroupSpecific(OutputAnalyzer out) throws Exception {
119 Optional<String> cgroupVersString = out.asLines()
120 .stream()
121 .filter( l -> l.startsWith("Detected CGroups version is:") )
122 .findFirst();
123 if (cgroupVersString.isPresent()) { // only non-product builds have this
124 String cgroupVers = cgroupVersString.get().split(": ")[1].trim();
125 if ("cgroupv1".equals(cgroupVers)) {
126 out.shouldContain("Maximum Memory Usage"); // only supported for cgroups v1
127 }
128 }
129 }
130
131 }
|