Mercurial > hg > icedtea8-forest > hotspot
changeset 10842:de90eec825b4
8221342: [TESTBUG] Generate Dockerfile for docker testing
Summary: Dockerfile is generated; introduced properties to specify custom base image
Reviewed-by: sgehwolf, dholmes, jiefu
author | mseledtsov |
---|---|
date | Tue, 26 Mar 2019 13:25:26 -0700 |
parents | 3c4577d95636 |
children | 308ed1ae8a75 |
files | test/runtime/containers/docker/Dockerfile-BasicTest test/runtime/containers/docker/Dockerfile-BasicTest-aarch64 test/runtime/containers/docker/Dockerfile-BasicTest-ppc64le test/runtime/containers/docker/Dockerfile-BasicTest-s390x test/testlibrary/com/oracle/java/testlibrary/DockerTestUtils.java test/testlibrary/com/oracle/java/testlibrary/DockerfileConfig.java |
diffstat | 6 files changed, 90 insertions(+), 41 deletions(-) [+] |
line wrap: on
line diff
--- a/test/runtime/containers/docker/Dockerfile-BasicTest Thu Oct 08 08:10:55 2020 +0000 +++ /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"]
--- a/test/runtime/containers/docker/Dockerfile-BasicTest-aarch64 Thu Oct 08 08:10:55 2020 +0000 +++ /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"]
--- a/test/runtime/containers/docker/Dockerfile-BasicTest-ppc64le Thu Oct 08 08:10:55 2020 +0000 +++ /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"]
--- a/test/runtime/containers/docker/Dockerfile-BasicTest-s390x Thu Oct 08 08:10:55 2020 +0000 +++ /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"]
--- a/test/testlibrary/com/oracle/java/testlibrary/DockerTestUtils.java Thu Oct 08 08:10:55 2020 +0000 +++ b/test/testlibrary/com/oracle/java/testlibrary/DockerTestUtils.java Tue Mar 26 13:25:26 2019 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 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 @@ -25,6 +25,7 @@ import java.io.File; import java.io.IOException; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.FileVisitResult; import java.nio.file.Path; @@ -125,11 +126,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"); @@ -156,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()) @@ -247,6 +244,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.write(dockerfile, dockerFileStr.getBytes(StandardCharsets.UTF_8)); + } + + private static class CopyFileVisitor extends SimpleFileVisitor<Path> { private final Path src; private final Path dst;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/testlibrary/com/oracle/java/testlibrary/DockerfileConfig.java Tue Mar 26 13:25:26 2019 -0700 @@ -0,0 +1,73 @@ +/* + * 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 com.oracle.java.testlibrary; + +// 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=<BASE_IMAGE_NAME> -Djdk.test.docker.image.version=<BASE_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"; + } + } +}