# HG changeset patch # User mseledtsov # Date 1553631926 25200 # Node ID dae71635cc3aa82a51985205b0992664bef810c2 # Parent c31faeacf00a81419f62fb6d8e7028e4712642d0 8221342: [TESTBUG] Generate Dockerfile for docker testing Summary: Dockerfile is generated; introduced properties to specify custom base image Reviewed-by: sgehwolf, dholmes, jiefu diff -r c31faeacf00a -r dae71635cc3a test/hotspot/jtreg/runtime/containers/docker/Dockerfile-BasicTest --- a/test/hotspot/jtreg/runtime/containers/docker/Dockerfile-BasicTest Tue Mar 26 15:50:34 2019 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,8 +0,0 @@ -FROM oraclelinux:7.6 -MAINTAINER mikhailo.seledtsov@oracle.com - -COPY /jdk /jdk - -ENV JAVA_HOME=/jdk - -CMD ["/bin/bash"] diff -r c31faeacf00a -r dae71635cc3a test/hotspot/jtreg/runtime/containers/docker/Dockerfile-BasicTest-aarch64 --- a/test/hotspot/jtreg/runtime/containers/docker/Dockerfile-BasicTest-aarch64 Tue Mar 26 15:50:34 2019 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,8 +0,0 @@ -# Use generic ubuntu Linux on AArch64 -FROM aarch64/ubuntu - -COPY /jdk /jdk - -ENV JAVA_HOME=/jdk - -CMD ["/bin/bash"] diff -r c31faeacf00a -r dae71635cc3a test/hotspot/jtreg/runtime/containers/docker/Dockerfile-BasicTest-ppc64le --- a/test/hotspot/jtreg/runtime/containers/docker/Dockerfile-BasicTest-ppc64le Tue Mar 26 15:50:34 2019 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,10 +0,0 @@ -# test on x86_64 uses Oracle Linux but we do not have this for ppc64le -# so use some other Linux where OpenJDK works -# FROM oraclelinux:7.2 -FROM ppc64le/ubuntu - -COPY /jdk /jdk - -ENV JAVA_HOME=/jdk - -CMD ["/bin/bash"] diff -r c31faeacf00a -r dae71635cc3a test/hotspot/jtreg/runtime/containers/docker/Dockerfile-BasicTest-s390x --- a/test/hotspot/jtreg/runtime/containers/docker/Dockerfile-BasicTest-s390x Tue Mar 26 15:50:34 2019 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,7 +0,0 @@ -FROM s390x/ubuntu - -COPY /jdk /jdk - -ENV JAVA_HOME=/jdk - -CMD ["/bin/bash"] diff -r c31faeacf00a -r dae71635cc3a test/jdk/jdk/internal/platform/docker/Dockerfile-BasicTest --- a/test/jdk/jdk/internal/platform/docker/Dockerfile-BasicTest Tue Mar 26 15:50:34 2019 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,8 +0,0 @@ -FROM oraclelinux:7.6 -MAINTAINER mikhailo.seledtsov@oracle.com - -COPY /jdk /jdk - -ENV JAVA_HOME=/jdk - -CMD ["/bin/bash"] diff -r c31faeacf00a -r dae71635cc3a test/jdk/jdk/internal/platform/docker/Dockerfile-BasicTest-aarch64 --- a/test/jdk/jdk/internal/platform/docker/Dockerfile-BasicTest-aarch64 Tue Mar 26 15:50:34 2019 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,8 +0,0 @@ -# Use generic ubuntu Linux on AArch64 -FROM aarch64/ubuntu - -COPY /jdk /jdk - -ENV JAVA_HOME=/jdk - -CMD ["/bin/bash"] diff -r c31faeacf00a -r dae71635cc3a test/jdk/jdk/internal/platform/docker/Dockerfile-BasicTest-ppc64le --- a/test/jdk/jdk/internal/platform/docker/Dockerfile-BasicTest-ppc64le Tue Mar 26 15:50:34 2019 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,10 +0,0 @@ -# test on x86_64 uses Oracle Linux but we do not have this for ppc64le -# so use some other Linux where OpenJDK works -# FROM oraclelinux:7.2 -FROM ppc64le/ubuntu - -COPY /jdk /jdk - -ENV JAVA_HOME=/jdk - -CMD ["/bin/bash"] diff -r c31faeacf00a -r dae71635cc3a test/jdk/jdk/internal/platform/docker/Dockerfile-BasicTest-s390x --- a/test/jdk/jdk/internal/platform/docker/Dockerfile-BasicTest-s390x Tue Mar 26 15:50:34 2019 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,7 +0,0 @@ -FROM s390x/ubuntu - -COPY /jdk /jdk - -ENV JAVA_HOME=/jdk - -CMD ["/bin/bash"] diff -r c31faeacf00a -r dae71635cc3a test/lib/jdk/test/lib/containers/docker/DockerTestUtils.java --- a/test/lib/jdk/test/lib/containers/docker/DockerTestUtils.java Tue Mar 26 15:50:34 2019 -0400 +++ b/test/lib/jdk/test/lib/containers/docker/DockerTestUtils.java Tue Mar 26 13:25:26 2019 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -35,7 +35,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import jdk.test.lib.Platform; import jdk.test.lib.Utils; import jdk.test.lib.process.OutputAnalyzer; import jdk.test.lib.process.ProcessTools; @@ -126,11 +125,6 @@ if (Files.exists(buildDir)) { throw new RuntimeException("The docker build directory already exists: " + buildDir); } - // check for the existance of a platform specific docker file as well - String platformSpecificDockerfile = dockerfile + "-" + Platform.getOsArch(); - if (Files.exists(Paths.get(Utils.TEST_SRC, platformSpecificDockerfile))) { - dockerfile = platformSpecificDockerfile; - } Path jdkSrcDir = Paths.get(Utils.TEST_JDK); Path jdkDstDir = buildDir.resolve("jdk"); @@ -158,8 +152,9 @@ public static void buildDockerImage(String imageName, Path dockerfile, Path buildDir) throws Exception { - // Copy docker file to the build dir - Files.copy(dockerfile, buildDir.resolve("Dockerfile")); + generateDockerFile(buildDir.resolve("Dockerfile"), + DockerfileConfig.getBaseImageName(), + DockerfileConfig.getBaseImageVersion()); // Build the docker execute("docker", "build", "--no-cache", "--tag", imageName, buildDir.toString()) @@ -250,6 +245,18 @@ } + private static void generateDockerFile(Path dockerfile, String baseImage, + String baseImageVersion) throws Exception { + String template = + "FROM %s:%s\n" + + "COPY /jdk /jdk\n" + + "ENV JAVA_HOME=/jdk\n" + + "CMD [\"/bin/bash\"]\n"; + String dockerFileStr = String.format(template, baseImage, baseImageVersion); + Files.writeString(dockerfile, dockerFileStr); + } + + private static class CopyFileVisitor extends SimpleFileVisitor { private final Path src; private final Path dst; diff -r c31faeacf00a -r dae71635cc3a test/lib/jdk/test/lib/containers/docker/DockerfileConfig.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/lib/jdk/test/lib/containers/docker/DockerfileConfig.java Tue Mar 26 13:25:26 2019 -0700 @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package jdk.test.lib.containers.docker; + +import jdk.test.lib.Platform; + +// Use the following properties to specify docker base image at test execution time: +// Image name: jdk.test.docker.image.name +// Image version: jdk.test.docker.image.version +// Usage: +// jtreg -Djdk.test.docker.image.name= -Djdk.test.docker.image.version= test/hotspot/jtreg/runtime/containers/docker/ +// E.g.: +// jtreg -Djdk.test.docker.image.name=ubuntu -Djdk.test.docker.image.version=latest test/hotspot/jtreg/runtime/containers/docker/ +// Using make: +// make test TEST="test/hotspot/jtreg/runtime/containers/docker" JTREG="JAVA_OPTIONS=-Djdk.test.docker.image.name=ubuntu -Djdk.test.docker.image.version=latest" +// Note: base image version should not be an empty string. Use "latest" to get the latest version. + +public class DockerfileConfig { + static String getBaseImageName() { + String name = System.getProperty("jdk.test.docker.image.name"); + if (name != null) { + System.out.println("DockerfileConfig: using custom image name: " + name); + return name; + } + + switch (Platform.getOsArch()) { + case "aarch64": + return "aarch64/ubuntu"; + case "ppc64le": + return "ppc64le/ubuntu"; + case "s390x": + return "s390x/ubuntu"; + default: + return "oraclelinux"; + } + } + + static String getBaseImageVersion() { + String version = System.getProperty("jdk.test.docker.image.version"); + if (version != null) { + System.out.println("DockerfileConfig: using custom image version: " + version); + return version; + } + + switch (Platform.getOsArch()) { + case "aarch64": + case "ppc64le": + case "s390x": + return "latest"; + default: + return "7.6"; + } + } +}