From 2de2a3095c863e4a42bab65009433f7539b53ee1 Mon Sep 17 00:00:00 2001 From: Oleg Kuznetsov Date: Mon, 16 May 2022 19:01:52 +0300 Subject: [PATCH 1/2] Added enterprise test profile and changed TarantoolImageParams logic --- .github/workflows/ubuntu-master.yml | 8 +++- pom.xml | 22 ++++++++++ .../TarantoolContainerImageHelper.java | 31 +++++++------ .../containers/TarantoolImageParams.java | 44 +++++++++++-------- src/main/resources/sdk/Dockerfile | 25 ----------- ... TarantoolSdkContainerTestEnterprise.java} | 34 ++++---------- src/test/resources/testsdk/Dockerfile | 11 ++--- 7 files changed, 84 insertions(+), 91 deletions(-) delete mode 100644 src/main/resources/sdk/Dockerfile rename src/test/java/org/testcontainers/containers/{TarantoolSdkContainerTest.java => TarantoolSdkContainerTestEnterprise.java} (54%) diff --git a/.github/workflows/ubuntu-master.yml b/.github/workflows/ubuntu-master.yml index 45f9b4c..ddeeea3 100644 --- a/.github/workflows/ubuntu-master.yml +++ b/.github/workflows/ubuntu-master.yml @@ -30,5 +30,11 @@ jobs: env: TARANTOOL_SERVER_USER: root TARANTOOL_SERVER_GROUP: root - URI: ${{ secrets.URI }} run: mvn -B verify --file pom.xml + + - name: Run enterprise tests + env: + TARANTOOL_SERVER_USER: root + TARANTOOL_SERVER_GROUP: root + DOWNLOAD_SDK_URI: ${{ secrets.DOWNLOAD_SDK_URI }} + run: mvn -B test -P enterprise --file pom.xml \ No newline at end of file diff --git a/pom.xml b/pom.xml index 0d736f8..065dac5 100644 --- a/pom.xml +++ b/pom.xml @@ -185,6 +185,28 @@ + + enterprise + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.0.0-M5 + + + **/*TestEnterprise.java + + + ${logging.config} + ${logging.logLevel} + + false + + + + + release diff --git a/src/main/java/org/testcontainers/containers/TarantoolContainerImageHelper.java b/src/main/java/org/testcontainers/containers/TarantoolContainerImageHelper.java index e6a4242..bfab354 100644 --- a/src/main/java/org/testcontainers/containers/TarantoolContainerImageHelper.java +++ b/src/main/java/org/testcontainers/containers/TarantoolContainerImageHelper.java @@ -1,6 +1,7 @@ package org.testcontainers.containers; import com.github.dockerjava.api.DockerClient; +import com.github.dockerjava.api.command.BuildImageCmd; import com.github.dockerjava.api.command.BuildImageResultCallback; import com.github.dockerjava.api.model.Image; import com.github.dockerjava.core.DockerClientBuilder; @@ -11,6 +12,7 @@ import java.util.Collections; import java.util.HashSet; import java.util.List; +import java.util.Map; /** * Class for working with docker directly @@ -31,17 +33,17 @@ private TarantoolContainerImageHelper() { * @return image name */ static String getImage(TarantoolImageParams imageParams) { - final String sdkVersion = imageParams.getSdkVersion(); + final String tag = imageParams.getTag(); - if (StringUtils.isEmpty(sdkVersion)) { - throw new IllegalArgumentException("SDK version is null or empty!"); + if (StringUtils.isEmpty(tag)) { + throw new IllegalArgumentException("Image tag is null or empty!"); } - if (!hasImage(sdkVersion)) { + if (!hasImage(tag)) { buildImage(imageParams); } - return sdkVersion; + return tag; } /** @@ -50,17 +52,14 @@ static String getImage(TarantoolImageParams imageParams) { * @param imageParams parameters for building tarantool image */ private static void buildImage(TarantoolImageParams imageParams) { - final String sdkVersion = imageParams.getSdkVersion(); - final String uri = System.getenv("URI"); + final BuildImageCmd buildImageCmd = dockerClient.buildImageCmd(imageParams.getDockerfile()); - if (StringUtils.isEmpty(uri)) { - throw new IllegalStateException("URI environment variable must be specified!"); + final Map buildArgs = imageParams.getBuildArgs(); + for (Map.Entry entry : buildArgs.entrySet()) { + buildImageCmd.withBuildArg(entry.getKey(), entry.getValue()); } - dockerClient.buildImageCmd(imageParams.getDockerfile()) - .withTags(new HashSet<>(Collections.singletonList(sdkVersion))) - .withBuildArg("SDK_VERSION", sdkVersion) - .withBuildArg("URI", uri) + buildImageCmd.withTags(new HashSet<>(Collections.singletonList(imageParams.getTag()))) .exec(new BuildImageResultCallback()) .awaitImageId(); } @@ -68,15 +67,15 @@ private static void buildImage(TarantoolImageParams imageParams) { /** * Checks image for existing by name * - * @param imageName image name for searching + * @param tag image tag for searching * @return true if image exist and false if not */ - private static boolean hasImage(String imageName) { + private static boolean hasImage(String tag) { final List images = dockerClient.listImagesCmd().exec(); return images.stream() .map(Image::getRepoTags) .map(Arrays::asList) .flatMap(Collection::stream) - .anyMatch(tag -> tag.equals(imageName + ":latest")); + .anyMatch(repoTag -> repoTag.equals(tag)); } } diff --git a/src/main/java/org/testcontainers/containers/TarantoolImageParams.java b/src/main/java/org/testcontainers/containers/TarantoolImageParams.java index 2c8de3f..6c0f8a7 100644 --- a/src/main/java/org/testcontainers/containers/TarantoolImageParams.java +++ b/src/main/java/org/testcontainers/containers/TarantoolImageParams.java @@ -1,7 +1,8 @@ package org.testcontainers.containers; import java.io.File; -import java.net.URISyntaxException; +import java.util.Collections; +import java.util.Map; /** * Tarantool image parameters holder @@ -10,35 +11,31 @@ */ public class TarantoolImageParams { - private final String sdkVersion; + private final String tag; private final File dockerfile; + private final Map buildArgs; /** - * Basic constructor for tarantool image parameters + * Custom constructor for tarantool image parameters * - * @param sdkVersion version of tarantool sdk which will be downloaded from specified in env variables URI, - * for example: tarantool-enterprise-bundle-2.8.3-21-g7d35cd2be-r470 + * @param tag docker image tag + * @param dockerfile dockerfile for building custom tarantool image */ - public TarantoolImageParams(String sdkVersion) { - this.sdkVersion = sdkVersion; - try { - this.dockerfile = new File(TarantoolImageParams.class.getClassLoader() - .getResource("sdk/Dockerfile").toURI()); - } catch (URISyntaxException e) { - throw new IllegalStateException("Can't access to Dockerfile for testcontainers"); - } + public TarantoolImageParams(String tag, File dockerfile) { + this(tag, dockerfile, Collections.emptyMap()); } /** * Custom constructor for tarantool image parameters * - * @param sdkVersion version of tarantool sdk which will be downloaded from specified in env variables URI, - * for example: tarantool-enterprise-bundle-2.8.3-21-g7d35cd2be-r470 + * @param tag docker image tag * @param dockerfile dockerfile for building custom tarantool image + * @param buildArgs args for building docker image */ - public TarantoolImageParams(String sdkVersion, File dockerfile) { - this.sdkVersion = sdkVersion; + public TarantoolImageParams(String tag, File dockerfile, Map buildArgs) { + this.tag = tag; this.dockerfile = dockerfile; + this.buildArgs = buildArgs; } /** @@ -46,8 +43,8 @@ public TarantoolImageParams(String sdkVersion, File dockerfile) { * * @return sdk version */ - public String getSdkVersion() { - return sdkVersion; + public String getTag() { + return tag; } /** @@ -58,4 +55,13 @@ public String getSdkVersion() { public File getDockerfile() { return dockerfile; } + + /** + * Getter for buildArgs + * + * @return dockerfile + */ + Map getBuildArgs() { + return buildArgs; + } } diff --git a/src/main/resources/sdk/Dockerfile b/src/main/resources/sdk/Dockerfile deleted file mode 100644 index 2db13a1..0000000 --- a/src/main/resources/sdk/Dockerfile +++ /dev/null @@ -1,25 +0,0 @@ -FROM centos:7 - -ARG TARANTOOL_WORKDIR="/app" -ARG TARANTOOL_RUNDIR="/tmp/run" -ARG TARANTOOL_DATADIR="/tmp/data" -ARG SDK_TGT_DIR="/sdk" -ARG URI="" -ARG SDK_VERSION="" -ARG SDK_TGZ=$SDK_VERSION.tar.gz - -ENV URI=$URI -ENV SDK_VERSION=$SDK_VERSION -ENV SDK_TGT_DIR=$SDK_TGT_DIR -ENV TARANTOOL_WORKDIR=$TARANTOOL_WORKDIR -ENV TARANTOOL_RUNDIR=$TARANTOOL_RUNDIR -ENV TARANTOOL_DATADIR=$TARANTOOL_DATADIR - -RUN curl https://curl.se/ca/cacert.pem -o /etc/pki/tls/certs/ca-bundle.crt && \ - yum -y install wget && \ - wget $URI/$SDK_TGZ && \ - mkdir ./tmp_sdk && tar -xf $SDK_TGZ -C ./tmp_sdk && \ - mv ./tmp_sdk/tarantool-enterprise $SDK_TGT_DIR && rm $SDK_TGZ && \ - cp $SDK_TGT_DIR/tarantool /usr/bin/tarantool - -WORKDIR $TARANTOOL_WORKDIR diff --git a/src/test/java/org/testcontainers/containers/TarantoolSdkContainerTest.java b/src/test/java/org/testcontainers/containers/TarantoolSdkContainerTestEnterprise.java similarity index 54% rename from src/test/java/org/testcontainers/containers/TarantoolSdkContainerTest.java rename to src/test/java/org/testcontainers/containers/TarantoolSdkContainerTestEnterprise.java index ee5ee96..274e023 100644 --- a/src/test/java/org/testcontainers/containers/TarantoolSdkContainerTest.java +++ b/src/test/java/org/testcontainers/containers/TarantoolSdkContainerTestEnterprise.java @@ -11,42 +11,26 @@ import java.io.File; import java.net.URISyntaxException; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * @author Oleg Kuznetsov */ -public class TarantoolSdkContainerTest { +public class TarantoolSdkContainerTestEnterprise { @Test - void test_should_createTarantoolContainerFromSdk() { - try (final TarantoolContainer tarantoolContainer = new TarantoolContainer( - new TarantoolImageParams("tarantool-enterprise-bundle-2.8.3-21-g7d35cd2be-r470") - )) { - tarantoolContainer.start(); - - final TarantoolClient> client = - TarantoolClientFactory.createClient() - .withCredentials("api_user", "secret") - .withAddress(tarantoolContainer.getHost(), tarantoolContainer.getMappedPort(3301)) - .build(); - - final List result = client.eval("return 'test'").join(); - final TarantoolVersion version = client.getVersion(); - - Assertions.assertEquals("test", result.get(0)); - Assertions.assertTrue(version.toString().startsWith("Tarantool 2.8.3 (Binary)")); - } - } - - @Test - void test_should_createTarantoolContainerFromSdk_ifDockerfileSpecified() throws URISyntaxException { + void test_should_createTarantoolContainerFromSdk() throws URISyntaxException { final File dockerfile = new File( - TarantoolSdkContainerTest.class.getClassLoader().getResource("testsdk/Dockerfile").toURI() + TarantoolSdkContainerTestEnterprise.class.getClassLoader().getResource("testsdk/Dockerfile").toURI() ); + final Map buildArgs = new HashMap<>(); + buildArgs.put("DOWNLOAD_SDK_URI", System.getenv("DOWNLOAD_SDK_URI")); + buildArgs.put("SDK_VERSION", "tarantool-enterprise-bundle-2.7.3-0-gdddf926c3-r443"); try (final TarantoolContainer tarantoolContainer = new TarantoolContainer( - new TarantoolImageParams("testsdk", dockerfile)) + new TarantoolImageParams("tarantool-enterprise-bundle:latest", dockerfile, buildArgs)) .withDirectoryBinding("testsdk")) { tarantoolContainer.start(); diff --git a/src/test/resources/testsdk/Dockerfile b/src/test/resources/testsdk/Dockerfile index d1bf0b8..f86d2b8 100644 --- a/src/test/resources/testsdk/Dockerfile +++ b/src/test/resources/testsdk/Dockerfile @@ -4,11 +4,12 @@ ARG TARANTOOL_WORKDIR="/app" ARG TARANTOOL_RUNDIR="/tmp/run" ARG TARANTOOL_DATADIR="/tmp/data" ARG SDK_TGT_DIR="/sdk" -ARG URI="" -ARG SDK_TGZ="tarantool-enterprise-bundle-2.7.3-0-gdddf926c3-r443.tar.gz" +ARG DOWNLOAD_SDK_URI="" +ARG SDK_VERSION="" +ARG SDK_TGZ=$SDK_VERSION.tar.gz -ENV URI=$URI -ENV SDK_VERSION="tarantool-enterprise-bundle-2.7.3-0-gdddf926c3-r443" +ENV DOWNLOAD_SDK_URI=$DOWNLOAD_SDK_URI +ENV SDK_VERSION=$SDK_VERSION ENV SDK_TGT_DIR=$SDK_TGT_DIR ENV TARANTOOL_WORKDIR=$TARANTOOL_WORKDIR ENV TARANTOOL_RUNDIR=$TARANTOOL_RUNDIR @@ -16,7 +17,7 @@ ENV TARANTOOL_DATADIR=$TARANTOOL_DATADIR RUN curl https://curl.se/ca/cacert.pem -o /etc/pki/tls/certs/ca-bundle.crt && \ yum -y install wget && \ - wget $URI/$SDK_TGZ && \ + wget $DOWNLOAD_SDK_URI/$SDK_TGZ && \ mkdir ./tmp_sdk && tar -xf $SDK_TGZ -C ./tmp_sdk && \ mv ./tmp_sdk/tarantool-enterprise $SDK_TGT_DIR && rm $SDK_TGZ && \ cp $SDK_TGT_DIR/tarantool /usr/bin/tarantool From 3031cfb3373f9efae0d632620fefb95d517e5f1d Mon Sep 17 00:00:00 2001 From: Oleg Kuznetsov Date: Mon, 16 May 2022 19:03:51 +0300 Subject: [PATCH 2/2] Added EOF empty line for github workflow --- .github/workflows/ubuntu-master.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ubuntu-master.yml b/.github/workflows/ubuntu-master.yml index ddeeea3..f09cfc3 100644 --- a/.github/workflows/ubuntu-master.yml +++ b/.github/workflows/ubuntu-master.yml @@ -37,4 +37,4 @@ jobs: TARANTOOL_SERVER_USER: root TARANTOOL_SERVER_GROUP: root DOWNLOAD_SDK_URI: ${{ secrets.DOWNLOAD_SDK_URI }} - run: mvn -B test -P enterprise --file pom.xml \ No newline at end of file + run: mvn -B test -P enterprise --file pom.xml