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..fd5c7f7 100644 --- a/src/main/java/org/testcontainers/containers/TarantoolCartridgeContainer.java +++ b/src/main/java/org/testcontainers/containers/TarantoolCartridgeContainer.java @@ -106,6 +106,8 @@ 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"; + 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()"; + 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