From d9b7c43aa794f5d75528c70e39f432c52c35e4a8 Mon Sep 17 00:00:00 2001 From: Belonogov Nikolay Date: Tue, 12 Dec 2023 20:40:38 +0300 Subject: [PATCH 1/2] Add support for tarantool version in ENV - Add environment variable support for Tarantool version when using TarantoolContainer default constructor. Closes #51 --- .../containers/TarantoolContainer.java | 18 ++++- .../containers/TarantoolContainerTest.java | 78 ++++++++++++++++--- 2 files changed, 83 insertions(+), 13 deletions(-) diff --git a/src/main/java/org/testcontainers/containers/TarantoolContainer.java b/src/main/java/org/testcontainers/containers/TarantoolContainer.java index 0fe607a..1add03c 100644 --- a/src/main/java/org/testcontainers/containers/TarantoolContainer.java +++ b/src/main/java/org/testcontainers/containers/TarantoolContainer.java @@ -18,9 +18,9 @@ public class TarantoolContainer extends GenericContainer implements TarantoolContainerOperations { public static final String TARANTOOL_IMAGE = "tarantool/tarantool"; - public static final String DEFAULT_IMAGE_VERSION = "2.x-centos7"; - public static final String DEFAULT_TARANTOOL_BASE_IMAGE = - String.format("%s:%s", TARANTOOL_IMAGE, DEFAULT_IMAGE_VERSION); + public static final String DEFAULT_IMAGE_VERSION = "2.x"; + public static final String DEFAULT_TARANTOOL_BASE_IMAGE; + private static final String DEFAULT_HOST = "localhost"; private static final int DEFAULT_PORT = 3301; @@ -46,11 +46,20 @@ public class TarantoolContainer extends GenericContainer private final TarantoolContainerClientHelper clientHelper; + static { + String version = System.getenv("TARANTOOL_VERSION"); + if (version == null || version.trim().isEmpty()) { + DEFAULT_TARANTOOL_BASE_IMAGE = String.format("%s:%s-centos7", TARANTOOL_IMAGE, DEFAULT_IMAGE_VERSION); + } else { + DEFAULT_TARANTOOL_BASE_IMAGE = String.format("%s:%s-centos7", TARANTOOL_IMAGE, version); + } + } + /** * Constructor for {@link TarantoolContainer} */ public TarantoolContainer() { - this(String.format("%s:%s", TARANTOOL_IMAGE, DEFAULT_IMAGE_VERSION)); + this(DEFAULT_TARANTOOL_BASE_IMAGE); } /** @@ -381,4 +390,5 @@ public Container.ExecResult executeCommand(String command) throws Exception { public T executeCommandDecoded(String command) throws Exception { return clientHelper.executeCommandDecoded(command, this.sslContext); } + } diff --git a/src/test/java/org/testcontainers/containers/TarantoolContainerTest.java b/src/test/java/org/testcontainers/containers/TarantoolContainerTest.java index b2d68f3..2bde83c 100644 --- a/src/test/java/org/testcontainers/containers/TarantoolContainerTest.java +++ b/src/test/java/org/testcontainers/containers/TarantoolContainerTest.java @@ -1,9 +1,11 @@ package org.testcontainers.containers; +import java.lang.reflect.Field; import java.util.List; +import java.util.Map; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; /** * @author Alexey Kuzin @@ -11,14 +13,33 @@ */ class TarantoolContainerTest { + private static final String ENV_TARANTOOL_VERSION = "TARANTOOL_VERSION"; + + private void addEnv (String key, String value) throws NoSuchFieldException, IllegalAccessException { + Class classOfMap = System.getenv().getClass(); + Field field = classOfMap.getDeclaredField("m"); + field.setAccessible(true); + Map writeableEnvironmentVariables = (Map) field.get(System.getenv()); + writeableEnvironmentVariables.put(key, value); + field.setAccessible(false); + } + + private void removeEnv (String key, String value) throws NoSuchFieldException, IllegalAccessException { + Class classOfMap = System.getenv().getClass(); + Field field = classOfMap.getDeclaredField("m"); + field.setAccessible(true); + Map writeableEnvironmentVariables = (Map) field.get(System.getenv()); + writeableEnvironmentVariables.remove(key); + field.setAccessible(false); + } @Test public void testExecuteScript() throws Exception { try (TarantoolContainer container = new TarantoolContainer()) { container.start(); container.executeScript("org/testcontainers/containers/test.lua"); List result = container.executeCommandDecoded("return user_function_no_param()"); - assertEquals(1, result.size()); - assertEquals(5, result.get(0)); + Assertions.assertEquals(1, result.size()); + Assertions.assertEquals(5, result.get(0)); } } @@ -35,16 +56,55 @@ public void testContainerWithParameters() throws Exception { container.start(); List result = container.executeCommandDecoded("return box.cfg.memtx_memory"); - assertEquals(1, result.size()); - assertEquals(memory, result.get(0)); + Assertions.assertEquals(1, result.size()); + Assertions.assertEquals(memory, result.get(0)); result = container.executeCommandDecoded("return box.cfg.log_level"); - assertEquals(1, result.size()); - assertEquals(5, result.get(0)); + Assertions.assertEquals(1, result.size()); + Assertions.assertEquals(5, result.get(0)); result = container.executeCommandDecoded("return user_function_no_param()"); - assertEquals(result.size(), 1); - assertEquals(result.get(0), 5); + Assertions.assertEquals(result.size(), 1); + Assertions.assertEquals(result.get(0), 5); + } + } + + @Test + public void testContainerWithTrueVersion() throws Exception { + final String version = "2.11.0"; + addEnv(ENV_TARANTOOL_VERSION, version); + try (TarantoolContainer container = new TarantoolContainer()) { + container.start(); + } + removeEnv(ENV_TARANTOOL_VERSION, version); + } + + @Test + public void testContainerWithDefaultVersionVersion() throws Exception { + try (TarantoolContainer container = new TarantoolContainer()) { + container.start(); + } + } + + @Test + public void testContainerWithEmptyVersion() throws Exception { + final String version = " "; + addEnv(ENV_TARANTOOL_VERSION, version); + try (TarantoolContainer container = new TarantoolContainer()) { + container.start(); + } + removeEnv(ENV_TARANTOOL_VERSION, version); + } + + @Test + public void testContainerWithWrongVersion() throws Exception { + final String version = "wrong_version"; + addEnv(ENV_TARANTOOL_VERSION, version); + try (TarantoolContainer container = new TarantoolContainer()) { + container.start(); + }catch (Exception exc) { + Assertions.assertEquals(ContainerFetchException.class, exc.getClass()); } + removeEnv(ENV_TARANTOOL_VERSION, version); } } From 9fec18c5ae6379ab7d42d7b1e97d4c4356ec014d Mon Sep 17 00:00:00 2001 From: Belonogov Nikolay Date: Wed, 13 Dec 2023 11:35:05 +0300 Subject: [PATCH 2/2] Fix after review - CHANGELOG.md Closes #51 --- CHANGELOG.md | 3 ++ .../containers/TarantoolContainer.java | 20 +++++----- .../containers/TarantoolContainerTest.java | 38 +++++++++++++------ 3 files changed, 38 insertions(+), 23 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b8e8efb..8817379 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,9 @@ ## [1.1.1] - 2023-12-13 - Change private to protected in TarantoolCartridgeContainer +- Add support for the `TARANTOOL_VERSION` environment variable to specify the version in the image name +`tarantool/tarantool:-centos7 when calling the constructor without arguments +([#51](https://github.com/tarantool/testcontainers-java-tarantool/pull/102)) ## [1.1.0] - 2023-12-12 diff --git a/src/main/java/org/testcontainers/containers/TarantoolContainer.java b/src/main/java/org/testcontainers/containers/TarantoolContainer.java index 1add03c..e9d9856 100644 --- a/src/main/java/org/testcontainers/containers/TarantoolContainer.java +++ b/src/main/java/org/testcontainers/containers/TarantoolContainer.java @@ -18,8 +18,8 @@ public class TarantoolContainer extends GenericContainer implements TarantoolContainerOperations { public static final String TARANTOOL_IMAGE = "tarantool/tarantool"; - public static final String DEFAULT_IMAGE_VERSION = "2.x"; - public static final String DEFAULT_TARANTOOL_BASE_IMAGE; + public static final String DEFAULT_IMAGE_VERSION = "2.10.5"; + public static final String DEFAULT_TARANTOOL_BASE_IMAGE = String.format("%s:%s-centos7", TARANTOOL_IMAGE, DEFAULT_IMAGE_VERSION); private static final String DEFAULT_HOST = "localhost"; @@ -46,20 +46,12 @@ public class TarantoolContainer extends GenericContainer private final TarantoolContainerClientHelper clientHelper; - static { - String version = System.getenv("TARANTOOL_VERSION"); - if (version == null || version.trim().isEmpty()) { - DEFAULT_TARANTOOL_BASE_IMAGE = String.format("%s:%s-centos7", TARANTOOL_IMAGE, DEFAULT_IMAGE_VERSION); - } else { - DEFAULT_TARANTOOL_BASE_IMAGE = String.format("%s:%s-centos7", TARANTOOL_IMAGE, version); - } - } - /** * Constructor for {@link TarantoolContainer} */ public TarantoolContainer() { this(DEFAULT_TARANTOOL_BASE_IMAGE); + setImageNameFromEnv(); } /** @@ -391,4 +383,10 @@ public T executeCommandDecoded(String command) throws Exception { return clientHelper.executeCommandDecoded(command, this.sslContext); } + private void setImageNameFromEnv() { + String version = System.getenv("TARANTOOL_VERSION"); + if (version != null && !version.trim().isEmpty()) { + setDockerImageName(String.format("%s:%s-centos7", TARANTOOL_IMAGE, version)); + } + } } diff --git a/src/test/java/org/testcontainers/containers/TarantoolContainerTest.java b/src/test/java/org/testcontainers/containers/TarantoolContainerTest.java index 2bde83c..0f0573f 100644 --- a/src/test/java/org/testcontainers/containers/TarantoolContainerTest.java +++ b/src/test/java/org/testcontainers/containers/TarantoolContainerTest.java @@ -4,7 +4,8 @@ import java.util.List; import java.util.Map; -import org.junit.jupiter.api.Assertions; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; /** @@ -15,7 +16,7 @@ class TarantoolContainerTest { private static final String ENV_TARANTOOL_VERSION = "TARANTOOL_VERSION"; - private void addEnv (String key, String value) throws NoSuchFieldException, IllegalAccessException { + private void addEnv(String key, String value) throws NoSuchFieldException, IllegalAccessException { Class classOfMap = System.getenv().getClass(); Field field = classOfMap.getDeclaredField("m"); field.setAccessible(true); @@ -24,7 +25,7 @@ private void addEnv (String key, String value) throws NoSuchFieldException, Ille field.setAccessible(false); } - private void removeEnv (String key, String value) throws NoSuchFieldException, IllegalAccessException { + private void removeEnv(String key, String value) throws NoSuchFieldException, IllegalAccessException { Class classOfMap = System.getenv().getClass(); Field field = classOfMap.getDeclaredField("m"); field.setAccessible(true); @@ -32,14 +33,15 @@ private void removeEnv (String key, String value) throws NoSuchFieldException, I writeableEnvironmentVariables.remove(key); field.setAccessible(false); } + @Test public void testExecuteScript() throws Exception { try (TarantoolContainer container = new TarantoolContainer()) { container.start(); container.executeScript("org/testcontainers/containers/test.lua"); List result = container.executeCommandDecoded("return user_function_no_param()"); - Assertions.assertEquals(1, result.size()); - Assertions.assertEquals(5, result.get(0)); + assertEquals(1, result.size()); + assertEquals(5, result.get(0)); } } @@ -56,16 +58,16 @@ public void testContainerWithParameters() throws Exception { container.start(); List result = container.executeCommandDecoded("return box.cfg.memtx_memory"); - Assertions.assertEquals(1, result.size()); - Assertions.assertEquals(memory, result.get(0)); + assertEquals(1, result.size()); + assertEquals(memory, result.get(0)); result = container.executeCommandDecoded("return box.cfg.log_level"); - Assertions.assertEquals(1, result.size()); - Assertions.assertEquals(5, result.get(0)); + assertEquals(1, result.size()); + assertEquals(5, result.get(0)); result = container.executeCommandDecoded("return user_function_no_param()"); - Assertions.assertEquals(result.size(), 1); - Assertions.assertEquals(result.get(0), 5); + assertEquals(result.size(), 1); + assertEquals(result.get(0), 5); } } @@ -73,17 +75,29 @@ public void testContainerWithParameters() throws Exception { public void testContainerWithTrueVersion() throws Exception { final String version = "2.11.0"; addEnv(ENV_TARANTOOL_VERSION, version); + + List result; try (TarantoolContainer container = new TarantoolContainer()) { container.start(); + result = container.executeCommandDecoded("return _TARANTOOL"); } + removeEnv(ENV_TARANTOOL_VERSION, version); + assertEquals(1, result.size()); + assertTrue(result.get(0).startsWith(version)); } @Test public void testContainerWithDefaultVersionVersion() throws Exception { + + List result; try (TarantoolContainer container = new TarantoolContainer()) { container.start(); + result = container.executeCommandDecoded("return _TARANTOOL"); } + + assertEquals(1, result.size()); + assertTrue(result.get(0).startsWith(TarantoolContainer.DEFAULT_IMAGE_VERSION)); } @Test @@ -103,7 +117,7 @@ public void testContainerWithWrongVersion() throws Exception { try (TarantoolContainer container = new TarantoolContainer()) { container.start(); }catch (Exception exc) { - Assertions.assertEquals(ContainerFetchException.class, exc.getClass()); + assertEquals(ContainerFetchException.class, exc.getClass()); } removeEnv(ENV_TARANTOOL_VERSION, version); }