From 718e746d76f8e3ae91185e5e5952f45fbe307353 Mon Sep 17 00:00:00 2001 From: Belonogov Nikolay Date: Fri, 8 Dec 2023 15:46:45 +0300 Subject: [PATCH 1/3] Improve testcontainers-java-tarantool Closes #98. --- .gitignore | 6 ++ CHANGELOG.md | 2 + pom.xml | 2 +- .../TarantoolCartridgeContainer.java | 96 +++++++++++++------ src/main/resources/Dockerfile | 7 +- 5 files changed, 81 insertions(+), 32 deletions(-) diff --git a/.gitignore b/.gitignore index f0a29bb..5a0b61e 100644 --- a/.gitignore +++ b/.gitignore @@ -2,5 +2,11 @@ target/ .idea/ *.iml +.classpath +.project +.settings/ +*.swp +workbench.xmi + src/test/resources/cartridge/tmp/* diff --git a/CHANGELOG.md b/CHANGELOG.md index 97ce51a..aeeaad9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## [Unreleased] +- Bump testcontainers to 1.19.3 + ## [1.0.2] - 2023-11-10 - Make a separate step for building the cartridge ([#94](https://github.com/tarantool/testcontainers-java-tarantool/issues/94)) diff --git a/pom.xml b/pom.xml index 3394ba8..001eeda 100644 --- a/pom.xml +++ b/pom.xml @@ -53,7 +53,7 @@ - 1.18.0 + 1.19.3 UTF-8 UTF-8 ${project.basedir}/src/test/resources/logback-test.xml diff --git a/src/main/java/org/testcontainers/containers/TarantoolCartridgeContainer.java b/src/main/java/org/testcontainers/containers/TarantoolCartridgeContainer.java index 84329fd..5444ab5 100644 --- a/src/main/java/org/testcontainers/containers/TarantoolCartridgeContainer.java +++ b/src/main/java/org/testcontainers/containers/TarantoolCartridgeContainer.java @@ -120,6 +120,7 @@ public class TarantoolCartridgeContainer extends GenericContainer waitFunc) { + private boolean waitUntilTrue(int secondsToWait, Supplier waitFunc) { int secondsPassed = 0; boolean result = waitFunc.get(); while (!result && secondsPassed < secondsToWait) { result = waitFunc.get(); try { - Thread.sleep(1000); + Thread.sleep(1_000); + secondsPassed++; } catch (InterruptedException e) { break; } } - if (!result) { - throw new RuntimeException("Failed to change the app topology after retry"); - } + return result; } private boolean routerIsUp() { - String healthyCmd = " local cartridge = package.loaded['cartridge']" + - " return cartridge ~= nil"; +// String healthyCmd = " local cartridge = package.loaded['cartridge']" + +// " return cartridge ~= nil"; + String healthyCmd = "return require('cartridge').is_healthy()"; + ExecResult result; + try { - List result = executeCommandDecoded(healthyCmd); - return result.get(0).getClass() == Boolean.class && (Boolean) result.get(0); - } catch (Exception e) { - logger().warn("Error while waiting for router instance to be up: " + e.getMessage()); + result = executeCommand(healthyCmd); + if (result.getExitCode() != 0 && result.getStderr().contains("Connection refused") && + result.getStdout().isEmpty()) { + return false; + } else if (result.getExitCode() != 0) { + logger().error("exit code: {}, stdout: {}, stderr: {}",result.getExitCode(), result.getStdout(), + result.getStderr()); + return false; + } else { + return true; + } + }catch (Exception e) { + logger().error(e.getMessage()); return false; } + } private boolean isCartridgeHealthy() { - String healthyCmd = " local cartridge = package.loaded['cartridge']" + - " return cartridge ~= nil and cartridge.is_healthy()"; + String healthyCmd = " return require('cartridge').is_healthy()"; + ExecResult result; try { - List result = executeCommandDecoded(healthyCmd); - return result.get(0).getClass() == Boolean.class && (Boolean) result.get(0); + result = executeCommand(healthyCmd); + if (result.getExitCode() != 0) { + logger().error("exitCode: {}, stdout: {}, stderr: {}", result.getExitCode(), result.getStdout(), + result.getStderr()); + return false; + } else if (result.getStdout().startsWith("---\n- null\n")){ + return false; + } else if (result.getStdout().contains("true")) { + return true; + } else { + logger().warn("exitCode: {}, stdout: {}, stderr: {}", result.getExitCode(), result.getStdout(), + result.getStderr()); + return false; + } } catch (Exception e) { - logger().warn("Error while waiting for cartridge healthy state: " + e.getMessage()); + logger().error("Error while waiting for cartridge healthy state: " + e.getMessage()); return false; } } diff --git a/src/main/resources/Dockerfile b/src/main/resources/Dockerfile index d8a07eb..c32828d 100644 --- a/src/main/resources/Dockerfile +++ b/src/main/resources/Dockerfile @@ -23,6 +23,8 @@ ARG TARANTOOL_DATADIR="/tmp/data" ARG TARANTOOL_LOGDIR="/tmp/log" ARG TARANTOOL_INSTANCES_FILE="./instances.yml" ARG TARANTOOL_CLUSTER_COOKIE="testapp-cluster-cookie" +ARG START_DELAY="5s" +ENV START_DELAY=$START_DELAY ENV TARANTOOL_WORKDIR=$TARANTOOL_WORKDIR ENV TARANTOOL_RUNDIR=$TARANTOOL_RUNDIR ENV TARANTOOL_DATADIR=$TARANTOOL_DATADIR @@ -31,6 +33,7 @@ ENV TARANTOOL_INSTANCES_FILE=$TARANTOOL_INSTANCES_FILE ENV TARANTOOL_CLUSTER_COOKIE=$TARANTOOL_CLUSTER_COOKIE COPY $CARTRIDGE_SRC_DIR $TARANTOOL_WORKDIR WORKDIR $TARANTOOL_WORKDIR -RUN cartridge build -CMD cartridge start --run-dir=$TARANTOOL_RUNDIR --data-dir=$TARANTOOL_DATADIR \ + +RUN rm -rf .rocks && cartridge build --verbose +CMD sleep $START_DELAY && cartridge start --run-dir=$TARANTOOL_RUNDIR --data-dir=$TARANTOOL_DATADIR \ --log-dir=$TARANTOOL_LOGDIR --cfg=$TARANTOOL_INSTANCES_FILE From 5be496bd95b0457283f71b46a6c2a51a1ac65f95 Mon Sep 17 00:00:00 2001 From: Belonogov Nikolay Date: Fri, 8 Dec 2023 20:36:56 +0300 Subject: [PATCH 2/3] Fix after review Closes #98 --- .../containers/TarantoolCartridgeContainer.java | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/testcontainers/containers/TarantoolCartridgeContainer.java b/src/main/java/org/testcontainers/containers/TarantoolCartridgeContainer.java index 5444ab5..e00f977 100644 --- a/src/main/java/org/testcontainers/containers/TarantoolCartridgeContainer.java +++ b/src/main/java/org/testcontainers/containers/TarantoolCartridgeContainer.java @@ -106,6 +106,7 @@ public class TarantoolCartridgeContainer extends GenericContainer waitFunc) { } private boolean routerIsUp() { -// String healthyCmd = " local cartridge = package.loaded['cartridge']" + -// " return cartridge ~= nil"; - String healthyCmd = "return require('cartridge').is_healthy()"; ExecResult result; - try { result = executeCommand(healthyCmd); if (result.getExitCode() != 0 && result.getStderr().contains("Connection refused") && @@ -637,7 +635,6 @@ private boolean routerIsUp() { } private boolean isCartridgeHealthy() { - String healthyCmd = " return require('cartridge').is_healthy()"; ExecResult result; try { result = executeCommand(healthyCmd); From 25ab0d3efc644a634c14d821233b541139965372 Mon Sep 17 00:00:00 2001 From: Belonogov Nikolay Date: Mon, 11 Dec 2023 15:41:39 +0300 Subject: [PATCH 3/3] Fix after review Closes #98 --- .../containers/TarantoolCartridgeContainer.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/testcontainers/containers/TarantoolCartridgeContainer.java b/src/main/java/org/testcontainers/containers/TarantoolCartridgeContainer.java index e00f977..fd5c7f7 100644 --- a/src/main/java/org/testcontainers/containers/TarantoolCartridgeContainer.java +++ b/src/main/java/org/testcontainers/containers/TarantoolCartridgeContainer.java @@ -107,6 +107,7 @@ public class TarantoolCartridgeContainer extends GenericContainer