Skip to content

Commit bc3e7f8

Browse files
authored
Add support for tarantool version in ENV
- Add environment variable support for Tarantool version when using TarantoolContainer default constructor. - CHANGELOG.md Closes #51
1 parent 820f4c1 commit bc3e7f8

File tree

3 files changed

+90
-5
lines changed

3 files changed

+90
-5
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
## [1.1.1] - 2023-12-13
66

77
- Change private to protected in TarantoolCartridgeContainer
8+
- Add support for the `TARANTOOL_VERSION` environment variable to specify the version in the image name
9+
`tarantool/tarantool:<TARANTOOL_VERSION>-centos7 when calling the constructor without arguments
10+
([#51](https://github.com/tarantool/testcontainers-java-tarantool/pull/102))
811

912
## [1.1.0] - 2023-12-12
1013

src/main/java/org/testcontainers/containers/TarantoolContainer.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ public class TarantoolContainer extends GenericContainer<TarantoolContainer>
1818
implements TarantoolContainerOperations<TarantoolContainer> {
1919

2020
public static final String TARANTOOL_IMAGE = "tarantool/tarantool";
21-
public static final String DEFAULT_IMAGE_VERSION = "2.x-centos7";
22-
public static final String DEFAULT_TARANTOOL_BASE_IMAGE =
23-
String.format("%s:%s", TARANTOOL_IMAGE, DEFAULT_IMAGE_VERSION);
21+
public static final String DEFAULT_IMAGE_VERSION = "2.10.5";
22+
public static final String DEFAULT_TARANTOOL_BASE_IMAGE = String.format("%s:%s-centos7", TARANTOOL_IMAGE, DEFAULT_IMAGE_VERSION);
23+
2424

2525
private static final String DEFAULT_HOST = "localhost";
2626
private static final int DEFAULT_PORT = 3301;
@@ -50,7 +50,8 @@ public class TarantoolContainer extends GenericContainer<TarantoolContainer>
5050
* Constructor for {@link TarantoolContainer}
5151
*/
5252
public TarantoolContainer() {
53-
this(String.format("%s:%s", TARANTOOL_IMAGE, DEFAULT_IMAGE_VERSION));
53+
this(DEFAULT_TARANTOOL_BASE_IMAGE);
54+
setImageNameFromEnv();
5455
}
5556

5657
/**
@@ -381,4 +382,11 @@ public Container.ExecResult executeCommand(String command) throws Exception {
381382
public <T> T executeCommandDecoded(String command) throws Exception {
382383
return clientHelper.executeCommandDecoded(command, this.sslContext);
383384
}
385+
386+
private void setImageNameFromEnv() {
387+
String version = System.getenv("TARANTOOL_VERSION");
388+
if (version != null && !version.trim().isEmpty()) {
389+
setDockerImageName(String.format("%s:%s-centos7", TARANTOOL_IMAGE, version));
390+
}
391+
}
384392
}

src/test/java/org/testcontainers/containers/TarantoolContainerTest.java

Lines changed: 75 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,39 @@
11
package org.testcontainers.containers;
22

3+
import java.lang.reflect.Field;
34
import java.util.List;
5+
import java.util.Map;
46

7+
import static org.junit.jupiter.api.Assertions.assertEquals;
8+
import static org.junit.jupiter.api.Assertions.assertTrue;
59
import org.junit.jupiter.api.Test;
6-
import static org.junit.Assert.assertEquals;
710

811
/**
912
* @author Alexey Kuzin
1013
* @author Ivan Dneprov
1114
*/
1215
class TarantoolContainerTest {
1316

17+
private static final String ENV_TARANTOOL_VERSION = "TARANTOOL_VERSION";
18+
19+
private void addEnv(String key, String value) throws NoSuchFieldException, IllegalAccessException {
20+
Class<?> classOfMap = System.getenv().getClass();
21+
Field field = classOfMap.getDeclaredField("m");
22+
field.setAccessible(true);
23+
Map<String, String> writeableEnvironmentVariables = (Map<String, String>) field.get(System.getenv());
24+
writeableEnvironmentVariables.put(key, value);
25+
field.setAccessible(false);
26+
}
27+
28+
private void removeEnv(String key, String value) throws NoSuchFieldException, IllegalAccessException {
29+
Class<?> classOfMap = System.getenv().getClass();
30+
Field field = classOfMap.getDeclaredField("m");
31+
field.setAccessible(true);
32+
Map<String, String> writeableEnvironmentVariables = (Map<String, String>) field.get(System.getenv());
33+
writeableEnvironmentVariables.remove(key);
34+
field.setAccessible(false);
35+
}
36+
1437
@Test
1538
public void testExecuteScript() throws Exception {
1639
try (TarantoolContainer container = new TarantoolContainer()) {
@@ -47,4 +70,55 @@ public void testContainerWithParameters() throws Exception {
4770
assertEquals(result.get(0), 5);
4871
}
4972
}
73+
74+
@Test
75+
public void testContainerWithTrueVersion() throws Exception {
76+
final String version = "2.11.0";
77+
addEnv(ENV_TARANTOOL_VERSION, version);
78+
79+
List<String> result;
80+
try (TarantoolContainer container = new TarantoolContainer()) {
81+
container.start();
82+
result = container.executeCommandDecoded("return _TARANTOOL");
83+
}
84+
85+
removeEnv(ENV_TARANTOOL_VERSION, version);
86+
assertEquals(1, result.size());
87+
assertTrue(result.get(0).startsWith(version));
88+
}
89+
90+
@Test
91+
public void testContainerWithDefaultVersionVersion() throws Exception {
92+
93+
List<String> result;
94+
try (TarantoolContainer container = new TarantoolContainer()) {
95+
container.start();
96+
result = container.executeCommandDecoded("return _TARANTOOL");
97+
}
98+
99+
assertEquals(1, result.size());
100+
assertTrue(result.get(0).startsWith(TarantoolContainer.DEFAULT_IMAGE_VERSION));
101+
}
102+
103+
@Test
104+
public void testContainerWithEmptyVersion() throws Exception {
105+
final String version = " ";
106+
addEnv(ENV_TARANTOOL_VERSION, version);
107+
try (TarantoolContainer container = new TarantoolContainer()) {
108+
container.start();
109+
}
110+
removeEnv(ENV_TARANTOOL_VERSION, version);
111+
}
112+
113+
@Test
114+
public void testContainerWithWrongVersion() throws Exception {
115+
final String version = "wrong_version";
116+
addEnv(ENV_TARANTOOL_VERSION, version);
117+
try (TarantoolContainer container = new TarantoolContainer()) {
118+
container.start();
119+
}catch (Exception exc) {
120+
assertEquals(ContainerFetchException.class, exc.getClass());
121+
}
122+
removeEnv(ENV_TARANTOOL_VERSION, version);
123+
}
50124
}

0 commit comments

Comments
 (0)