diff --git a/CHANGELOG.md b/CHANGELOG.md index 03590ee..1d45f88 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## [Unreleased] - Fix problem if topology isn't applied correctly - Bump testcontainers to 1.18.0 +- Move rocks building in build phase ## [0.5.4] - 2023-03-31 - Use tarantool image as base instead of centos in cartridge container diff --git a/src/main/java/org/testcontainers/containers/TarantoolCartridgeContainer.java b/src/main/java/org/testcontainers/containers/TarantoolCartridgeContainer.java index 2382ca3..b9dd581 100644 --- a/src/main/java/org/testcontainers/containers/TarantoolCartridgeContainer.java +++ b/src/main/java/org/testcontainers/containers/TarantoolCartridgeContainer.java @@ -186,7 +186,7 @@ public TarantoolCartridgeContainer(String dockerFile, String buildImageName, */ public TarantoolCartridgeContainer(String dockerFile, String buildImageName, String instancesFile, String topologyConfigurationFile, final Map buildArgs) { - this(buildImage(dockerFile, buildImageName), instancesFile, topologyConfigurationFile, buildArgs); + this(buildImage(dockerFile, buildImageName, buildArgs), instancesFile, topologyConfigurationFile, buildArgs); } private TarantoolCartridgeContainer(ImageFromDockerfile image, String instancesFile, String topologyConfigurationFile, @@ -238,12 +238,17 @@ private static Map mergeBuildArguments(Map build return args; } - private static ImageFromDockerfile buildImage(String dockerFile, String buildImageName) { + private static ImageFromDockerfile buildImage(String dockerFile, String buildImageName, + final Map buildArgs) { + ImageFromDockerfile image; if (buildImageName != null && !buildImageName.isEmpty()) { - return new ImageFromDockerfile(buildImageName, false) - .withFileFromClasspath("Dockerfile", dockerFile); + image = new ImageFromDockerfile(buildImageName, false); + } else { + image = new ImageFromDockerfile(); } - return new ImageFromDockerfile().withFileFromClasspath("Dockerfile", dockerFile); + return image.withFileFromClasspath("Dockerfile", dockerFile) + .withFileFromClasspath("cartridge", buildArgs.get("CARTRIDGE_SRC_DIR") == null ? + "cartridge" : buildArgs.get("CARTRIDGE_SRC_DIR")); } /** diff --git a/src/main/resources/Dockerfile b/src/main/resources/Dockerfile index 64033b9..3606287 100644 --- a/src/main/resources/Dockerfile +++ b/src/main/resources/Dockerfile @@ -1,21 +1,26 @@ ARG TARANTOOL_VERSION=2.10.5 -FROM tarantool/tarantool:${TARANTOOL_VERSION}-centos7 AS tarantool-base +FROM tarantool/tarantool:${TARANTOOL_VERSION}-centos7 AS cartridge-base + +# system preparations because docker mount directory as a root ARG TARANTOOL_SERVER_USER="root" ARG TARANTOOL_SERVER_GROUP="root" -ARG TARANTOOL_WORKDIR="/app" -ARG TARANTOOL_RUNDIR="/tmp/run" -ARG TARANTOOL_DATADIR="/tmp/data" -ARG TARANTOOL_INSTANCES_FILE="./instances.yml" -ENV TARANTOOL_WORKDIR=$TARANTOOL_WORKDIR -ENV TARANTOOL_RUNDIR=$TARANTOOL_RUNDIR -ENV TARANTOOL_DATADIR=$TARANTOOL_DATADIR -ENV TARANTOOL_INSTANCES_FILE=$TARANTOOL_INSTANCES_FILE +USER $TARANTOOL_SERVER_USER:$TARANTOOL_SERVER_GROUP +RUN groupadd $TARANTOOL_SERVER_GROUP && useradd -m -s /bin/bash $TARANTOOL_SERVER_USER || true + +# install dependencies RUN yum -y install cmake make gcc gcc-c++ git unzip cartridge-cli && \ yum clean all -RUN groupadd $TARANTOOL_SERVER_GROUP && useradd -m -s /bin/bash $TARANTOOL_SERVER_USER || true -USER $TARANTOOL_SERVER_USER:$TARANTOOL_SERVER_GROUP RUN cartridge version -FROM tarantool-base AS cartridge-base +# build +ARG CARTRIDGE_SRC_DIR="cartridge" +ARG TARANTOOL_WORKDIR="/app" +COPY $CARTRIDGE_SRC_DIR $TARANTOOL_WORKDIR WORKDIR $TARANTOOL_WORKDIR +RUN cartridge build --verbose + +ENV TARANTOOL_RUNDIR="/tmp/run" +ENV TARANTOOL_DATADIR="/tmp/data" +ENV TARANTOOL_INSTANCES_FILE="./instances.yml" + CMD cartridge build && cartridge start --run-dir=$TARANTOOL_RUNDIR --data-dir=$TARANTOOL_DATADIR --cfg=$TARANTOOL_INSTANCES_FILE diff --git a/src/test/java/org/testcontainers/containers/TarantoolCartridgeBootstrapFromLuaWithFixedPortsTest.java b/src/test/java/org/testcontainers/containers/TarantoolCartridgeBootstrapFromLuaWithFixedPortsTest.java index 0a020b1..ee157d5 100644 --- a/src/test/java/org/testcontainers/containers/TarantoolCartridgeBootstrapFromLuaWithFixedPortsTest.java +++ b/src/test/java/org/testcontainers/containers/TarantoolCartridgeBootstrapFromLuaWithFixedPortsTest.java @@ -1,5 +1,7 @@ package org.testcontainers.containers; +import java.time.Duration; + import org.junit.jupiter.api.Test; import org.rnorth.ducttape.RetryCountExceededException; import org.slf4j.LoggerFactory; @@ -7,10 +9,6 @@ import org.testcontainers.containers.output.Slf4jLogConsumer; import org.testcontainers.junit.jupiter.Container; import org.testcontainers.junit.jupiter.Testcontainers; -import org.testcontainers.utility.MountableFile; - -import java.time.Duration; - import static org.junit.Assert.assertThrows; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -22,18 +20,18 @@ public class TarantoolCartridgeBootstrapFromLuaWithFixedPortsTest { @Container private static final TarantoolCartridgeContainer container = - new TarantoolCartridgeContainer( - "Dockerfile", - "cartridge/instances_fixedport.yml", - "cartridge/topology_fixedport.lua") - .withDirectoryBinding("cartridge") - .withEnv("TARANTOOL_INSTANCES_FILE", "instances_fixedport.yml") - .withStartupTimeout(Duration.ofSeconds(300)) - .withUseFixedPorts(true) - .withAPIPort(18081) - .withRouterPort(13301) - .withLogConsumer(new Slf4jLogConsumer( - LoggerFactory.getLogger(TarantoolCartridgeBootstrapFromLuaWithFixedPortsTest.class))); + new TarantoolCartridgeContainer( + "Dockerfile", + "cartridge", + "cartridge/instances_fixedport.yml", + "cartridge/topology_fixedport.lua") + .withEnv("TARANTOOL_INSTANCES_FILE", "instances_fixedport.yml") + .withStartupTimeout(Duration.ofSeconds(300)) + .withUseFixedPorts(true) + .withAPIPort(18081) + .withRouterPort(13301) + .withLogConsumer(new Slf4jLogConsumer( + LoggerFactory.getLogger(TarantoolCartridgeBootstrapFromLuaWithFixedPortsTest.class))); @Test public void test_StaticClusterContainer_StartsSuccessfully_ifFilesAreCopied() throws Exception { @@ -45,9 +43,9 @@ public void test_retryingSetupTopology_shouldWork() { try (TarantoolCartridgeContainer testContainer = new TarantoolCartridgeContainer( "Dockerfile", + "cartridge", "cartridge/instances.yml", "cartridge/incorrect_topology.lua") - .withDirectoryBinding("cartridge") .withLogConsumer(new Slf4jLogConsumer( LoggerFactory.getLogger(TarantoolCartridgeBootstrapFromLuaWithFixedPortsTest.class)))) { ContainerLaunchException ex = assertThrows(ContainerLaunchException.class, testContainer::start); diff --git a/src/test/java/org/testcontainers/containers/TarantoolCartridgeBootstrapFromYamlTest.java b/src/test/java/org/testcontainers/containers/TarantoolCartridgeBootstrapFromYamlTest.java index 43a8592..a12611c 100644 --- a/src/test/java/org/testcontainers/containers/TarantoolCartridgeBootstrapFromYamlTest.java +++ b/src/test/java/org/testcontainers/containers/TarantoolCartridgeBootstrapFromYamlTest.java @@ -22,9 +22,9 @@ public class TarantoolCartridgeBootstrapFromYamlTest { private static final TarantoolCartridgeContainer container = new TarantoolCartridgeContainer( "Dockerfile", + "cartridge", "cartridge/instances.yml", "cartridge/replicasets.yml") - .withCopyFileToContainer(MountableFile.forClasspathResource("cartridge"), "/app") .withStartupTimeout(Duration.ofSeconds(300)) .withLogConsumer(new Slf4jLogConsumer( LoggerFactory.getLogger(TarantoolCartridgeBootstrapFromYamlTest.class))); diff --git a/src/test/java/org/testcontainers/containers/TarantoolSdkContainerTestEnterprise.java b/src/test/java/org/testcontainers/containers/TarantoolSdkContainerTestEnterprise.java index 8fd2fd7..645dca9 100644 --- a/src/test/java/org/testcontainers/containers/TarantoolSdkContainerTestEnterprise.java +++ b/src/test/java/org/testcontainers/containers/TarantoolSdkContainerTestEnterprise.java @@ -29,7 +29,7 @@ void test_should_createTarantoolContainerFromSdk() throws URISyntaxException { ); 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"); + buildArgs.put("SDK_VERSION", "tarantool-enterprise-sdk-nogc64-2.10.6-0-r557.linux.x86_64"); try (final TarantoolContainer tarantoolContainer = new TarantoolContainer( new TarantoolImageParams("tarantool-enterprise-bundle:latest", dockerfile, buildArgs)) @@ -47,7 +47,7 @@ void test_should_createTarantoolContainerFromSdk() throws URISyntaxException { final TarantoolVersion version = client.getVersion(); assertEquals("test", result.get(0)); - assertTrue(version.toString().startsWith("Tarantool 2.7.3 (Binary)")); + assertTrue(version.toString().startsWith("Tarantool 2.10.6 (Binary)")); } } }