8221342: [TESTBUG] Generate Dockerfile for docker testing

Dockerfile is generated; introduced properties to specify custom base image

Reviewed-by: sgehwolf, dholmes, jiefu
This commit is contained in:
Mikhailo Seledtsov 2019-03-26 13:25:26 -07:00
parent 201cdc50f9
commit 7f9103968f
10 changed files with 91 additions and 75 deletions

View File

@ -1,8 +0,0 @@
FROM oraclelinux:7.6
MAINTAINER mikhailo.seledtsov@oracle.com
COPY /jdk /jdk
ENV JAVA_HOME=/jdk
CMD ["/bin/bash"]

View File

@ -1,8 +0,0 @@
# Use generic ubuntu Linux on AArch64
FROM aarch64/ubuntu
COPY /jdk /jdk
ENV JAVA_HOME=/jdk
CMD ["/bin/bash"]

View File

@ -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"]

View File

@ -1,7 +0,0 @@
FROM s390x/ubuntu
COPY /jdk /jdk
ENV JAVA_HOME=/jdk
CMD ["/bin/bash"]

View File

@ -1,8 +0,0 @@
FROM oraclelinux:7.6
MAINTAINER mikhailo.seledtsov@oracle.com
COPY /jdk /jdk
ENV JAVA_HOME=/jdk
CMD ["/bin/bash"]

View File

@ -1,8 +0,0 @@
# Use generic ubuntu Linux on AArch64
FROM aarch64/ubuntu
COPY /jdk /jdk
ENV JAVA_HOME=/jdk
CMD ["/bin/bash"]

View File

@ -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"]

View File

@ -1,7 +0,0 @@
FROM s390x/ubuntu
COPY /jdk /jdk
ENV JAVA_HOME=/jdk
CMD ["/bin/bash"]

View File

@ -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.nio.file.attribute.BasicFileAttributes;
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 @@ public class DockerTestUtils {
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 class DockerTestUtils {
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 @@ public class DockerTestUtils {
}
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<Path> {
private final Path src;
private final Path dst;

View File

@ -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=<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";
}
}
}