diff --git a/pom.xml b/pom.xml
index 0cf92191..94e1aa1c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -396,9 +396,6 @@
**/integration/**/*Crud*Test.java
**/crud/**/*Test.java
-
- **/io/tarantool/spring/data*/integration/**/*Test.java
-
@{argLine} -Xmx1024m
diff --git a/tarantool-client/src/test/java/io/tarantool/client/integration/TarantoolCrudClientTest.java b/tarantool-client/src/test/java/io/tarantool/client/integration/TarantoolCrudClientTest.java
index 580fd194..b1e817b8 100644
--- a/tarantool-client/src/test/java/io/tarantool/client/integration/TarantoolCrudClientTest.java
+++ b/tarantool-client/src/test/java/io/tarantool/client/integration/TarantoolCrudClientTest.java
@@ -35,7 +35,6 @@
import com.fasterxml.jackson.core.type.TypeReference;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Timeout;
import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable;
@@ -46,10 +45,12 @@
import org.junit.jupiter.params.provider.MethodSource;
import org.msgpack.value.ValueFactory;
import org.slf4j.LoggerFactory;
+import org.testcontainers.containers.ClusterContainer;
+import org.testcontainers.containers.Network;
import org.testcontainers.containers.TarantoolCartridgeContainer;
-import org.testcontainers.containers.TarantoolContainerOperations;
import org.testcontainers.containers.VshardClusterContainer;
import org.testcontainers.containers.output.Slf4jLogConsumer;
+import org.testcontainers.containers.wait.strategy.HostPortWaitStrategy;
import org.testcontainers.junit.jupiter.Testcontainers;
import static io.tarantool.client.crud.ConditionOperator.EQ;
@@ -88,7 +89,6 @@
import io.tarantool.pool.IProtoClientPool;
import io.tarantool.pool.InstanceConnectionGroup;
-@Disabled("Refactor TarantoolCartridgeContainer and VshardClusterContainer")
@Timeout(value = 10)
@Testcontainers
public class TarantoolCrudClientTest extends BaseTest {
@@ -105,7 +105,8 @@ public class TarantoolCrudClientTest extends BaseTest {
public static final Person STUB_PERSON = new Person(0, true, String.valueOf(0));
private static TarantoolCartridgeContainer cartridgeContainer;
private static VshardClusterContainer vshardClusterContainer;
- private static TarantoolContainerOperations clusterContainer;
+ private static ClusterContainer clusterContainer;
+ private static final Network NETWORK = Network.newNetwork();
public static final String ROUTER_1 = "ROUTER_1";
public static final String ROUTER_2 = "ROUTER_2";
private static TarantoolCrudClient client;
@@ -135,16 +136,19 @@ public static void setUp() throws Exception {
if (!isCartridgeAvailable()) {
vshardClusterContainer =
new VshardClusterContainer(
- "vshard_cluster/Dockerfile",
- dockerRegistry + "vshard-cluster-java",
- "vshard_cluster/instances.yaml",
- "vshard_cluster/config.yaml",
- "tarantool/tarantool");
+ "vshard_cluster/Dockerfile",
+ dockerRegistry + "vshard-cluster-java",
+ "vshard_cluster/instances.yaml",
+ "vshard_cluster/config.yaml",
+ "tarantool/tarantool")
+ .withNetwork(NETWORK)
+ .withWaitingStrategy(new HostPortWaitStrategy().forPorts(3301));
if (!vshardClusterContainer.isRunning()) {
vshardClusterContainer
.withCreateContainerCmdModifier(cmd -> cmd.withUser("root"))
- .withPrivilegedMode(true);
+ .withPrivilegedMode(true)
+ .withStartupTimeout(Duration.ofMinutes(5));
vshardClusterContainer.start();
}
clusterContainer = vshardClusterContainer;
diff --git a/tarantool-client/src/test/java/io/tarantool/client/integration/TarantoolCrudClientWithRetryTest.java b/tarantool-client/src/test/java/io/tarantool/client/integration/TarantoolCrudClientWithRetryTest.java
index b9f31030..9157e2e5 100644
--- a/tarantool-client/src/test/java/io/tarantool/client/integration/TarantoolCrudClientWithRetryTest.java
+++ b/tarantool-client/src/test/java/io/tarantool/client/integration/TarantoolCrudClientWithRetryTest.java
@@ -21,7 +21,6 @@
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Timeout;
import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable;
@@ -36,7 +35,6 @@
import io.tarantool.core.exceptions.BoxError;
import io.tarantool.mapping.Tuple;
-@Disabled("Refactor TarantoolCartridgeContainer and VshardClusterContainer")
@Timeout(value = 5)
@Testcontainers
public class TarantoolCrudClientWithRetryTest {
diff --git a/tarantool-jackson-mapping/src/main/java/io/tarantool/mapping/crud/CrudResponse.java b/tarantool-jackson-mapping/src/main/java/io/tarantool/mapping/crud/CrudResponse.java
index 77adeba6..8ac54936 100644
--- a/tarantool-jackson-mapping/src/main/java/io/tarantool/mapping/crud/CrudResponse.java
+++ b/tarantool-jackson-mapping/src/main/java/io/tarantool/mapping/crud/CrudResponse.java
@@ -69,6 +69,9 @@ public List getMetadata() throws CrudException {
if (error != null) {
throw new CrudException(error);
}
+ if (response == null) {
+ return null;
+ }
return response.getMetadata();
}
diff --git a/tarantool-shared-resources/cartridge/app/api/crud_aux.lua b/tarantool-shared-resources/cartridge/app/api/crud_aux.lua
index 0980fbc9..048d19a4 100644
--- a/tarantool-shared-resources/cartridge/app/api/crud_aux.lua
+++ b/tarantool-shared-resources/cartridge/app/api/crud_aux.lua
@@ -11,8 +11,11 @@ local crud_methods_to_patch = {
'update',
'upsert',
'insert_many',
+ 'insert_object_many',
'replace_many',
+ 'replace_object_many',
'upsert_many',
+ 'upsert_object_many',
'truncate',
'count',
'len',
diff --git a/tarantool-shared-resources/vshard_cluster/Dockerfile b/tarantool-shared-resources/vshard_cluster/Dockerfile
index 5b17e584..5d334e8c 100644
--- a/tarantool-shared-resources/vshard_cluster/Dockerfile
+++ b/tarantool-shared-resources/vshard_cluster/Dockerfile
@@ -12,7 +12,7 @@ RUN sed -i 's|http://archive.ubuntu.com/ubuntu/|http://mirror.yandex.ru/ubuntu/|
# install dependencies
RUN apt-get -y update && \
- apt-get -y install build-essential cmake make gcc git unzip cartridge-cli && \
+ apt-get -y install build-essential cmake make gcc git unzip && \
apt-get -y clean
CMD tt init && tt build && tt start && sleep infinity
diff --git a/tarantool-shared-resources/vshard_cluster/crud_aux.lua b/tarantool-shared-resources/vshard_cluster/crud_aux.lua
index 0980fbc9..048d19a4 100644
--- a/tarantool-shared-resources/vshard_cluster/crud_aux.lua
+++ b/tarantool-shared-resources/vshard_cluster/crud_aux.lua
@@ -11,8 +11,11 @@ local crud_methods_to_patch = {
'update',
'upsert',
'insert_many',
+ 'insert_object_many',
'replace_many',
+ 'replace_object_many',
'upsert_many',
+ 'upsert_object_many',
'truncate',
'count',
'len',
diff --git a/tarantool-spring-data/tarantool-spring-data-27/src/test/java/io/tarantool/spring/data27/integration/BaseIntegrationTest.java b/tarantool-spring-data/tarantool-spring-data-27/src/test/java/io/tarantool/spring/data27/integration/BaseIntegrationTest.java
index 219f104f..1de9f452 100644
--- a/tarantool-spring-data/tarantool-spring-data-27/src/test/java/io/tarantool/spring/data27/integration/BaseIntegrationTest.java
+++ b/tarantool-spring-data/tarantool-spring-data-27/src/test/java/io/tarantool/spring/data27/integration/BaseIntegrationTest.java
@@ -11,24 +11,26 @@
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Timeout;
import org.slf4j.LoggerFactory;
+import org.testcontainers.containers.ClusterContainer;
+import org.testcontainers.containers.Network;
import org.testcontainers.containers.TarantoolCartridgeContainer;
-import org.testcontainers.containers.TarantoolContainerOperations;
import org.testcontainers.containers.VshardClusterContainer;
import org.testcontainers.containers.output.Slf4jLogConsumer;
+import org.testcontainers.containers.wait.strategy.HostPortWaitStrategy;
import static io.tarantool.spring.data.utils.Constants.DEFAULT_PROPERTY_FILE_NAME;
import static io.tarantool.spring.data27.utils.TarantoolTestSupport.DEFAULT_TEST_PROPERTY_DIR;
import static io.tarantool.spring.data27.utils.TarantoolTestSupport.writeTestPropertiesYaml;
import io.tarantool.spring.data27.config.properties.TarantoolProperties;
-@Disabled("Refactor TarantoolCartridgeContainer and VshardClusterContainer")
@Timeout(60)
public abstract class BaseIntegrationTest {
- protected static TarantoolContainerOperations> clusterContainer;
+ protected static ClusterContainer clusterContainer;
+
+ private static final Network NETWORK = Network.newNetwork();
private static final String dockerRegistry =
System.getenv().getOrDefault("TESTCONTAINERS_HUB_IMAGE_NAME_PREFIX", "");
@@ -43,14 +45,16 @@ private static void configureContainer() {
if (!isCartridgeAvailable()) {
VshardClusterContainer vshardClusterContainer =
new VshardClusterContainer(
- "vshard_cluster/Dockerfile",
- dockerRegistry + "vshard-cluster-java",
- "vshard_cluster/instances.yaml",
- "vshard_cluster/config.yaml",
- "tarantool/tarantool");
+ "vshard_cluster/Dockerfile",
+ dockerRegistry + "vshard-cluster-java",
+ "vshard_cluster/instances.yaml",
+ "vshard_cluster/config.yaml",
+ "tarantool/tarantool")
+ .withNetwork(NETWORK)
+ .withWaitingStrategy(new HostPortWaitStrategy().forPorts(3301));
if (!vshardClusterContainer.isRunning()) {
- vshardClusterContainer.withPrivilegedMode(true);
+ vshardClusterContainer.withPrivilegedMode(true).withStartupTimeout(Duration.ofMinutes(5));
vshardClusterContainer.start();
}
clusterContainer = vshardClusterContainer;
diff --git a/tarantool-spring-data/tarantool-spring-data-27/src/test/java/io/tarantool/spring/data27/integration/crud/CrudConfigurations.java b/tarantool-spring-data/tarantool-spring-data-27/src/test/java/io/tarantool/spring/data27/integration/crud/CrudConfigurations.java
index f304dc4d..cd6363aa 100644
--- a/tarantool-spring-data/tarantool-spring-data-27/src/test/java/io/tarantool/spring/data27/integration/crud/CrudConfigurations.java
+++ b/tarantool-spring-data/tarantool-spring-data-27/src/test/java/io/tarantool/spring/data27/integration/crud/CrudConfigurations.java
@@ -13,7 +13,6 @@
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
@@ -34,7 +33,6 @@
import io.tarantool.spring.data27.integration.BaseIntegrationTest;
import io.tarantool.spring.data27.repository.config.EnableTarantoolRepositories;
-@Disabled("Refactor TarantoolCartridgeContainer and VshardClusterContainer")
@TestPropertySource(properties = {DEFAULT_PROPERTY_FILE_LOCATION_CLASSPATH})
abstract class CrudConfigurations extends BaseIntegrationTest {
diff --git a/tarantool-spring-data/tarantool-spring-data-31/src/test/java/io/tarantool/spring/data31/integration/BaseIntegrationTest.java b/tarantool-spring-data/tarantool-spring-data-31/src/test/java/io/tarantool/spring/data31/integration/BaseIntegrationTest.java
index 14a9cd72..55349f80 100644
--- a/tarantool-spring-data/tarantool-spring-data-31/src/test/java/io/tarantool/spring/data31/integration/BaseIntegrationTest.java
+++ b/tarantool-spring-data/tarantool-spring-data-31/src/test/java/io/tarantool/spring/data31/integration/BaseIntegrationTest.java
@@ -11,24 +11,26 @@
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Timeout;
import org.slf4j.LoggerFactory;
+import org.testcontainers.containers.ClusterContainer;
+import org.testcontainers.containers.Network;
import org.testcontainers.containers.TarantoolCartridgeContainer;
-import org.testcontainers.containers.TarantoolContainerOperations;
import org.testcontainers.containers.VshardClusterContainer;
import org.testcontainers.containers.output.Slf4jLogConsumer;
+import org.testcontainers.containers.wait.strategy.HostPortWaitStrategy;
import static io.tarantool.spring.data.utils.Constants.DEFAULT_PROPERTY_FILE_NAME;
import static io.tarantool.spring.data31.utils.TarantoolTestSupport.DEFAULT_TEST_PROPERTY_DIR;
import static io.tarantool.spring.data31.utils.TarantoolTestSupport.writeTestPropertiesYaml;
import io.tarantool.spring.data31.config.properties.TarantoolProperties;
-@Disabled("Refactor TarantoolCartridgeContainer and VshardClusterContainer")
@Timeout(60)
public abstract class BaseIntegrationTest {
- protected static TarantoolContainerOperations> clusterContainer;
+ protected static ClusterContainer clusterContainer;
+
+ private static final Network NETWORK = Network.newNetwork();
private static final String dockerRegistry =
System.getenv().getOrDefault("TESTCONTAINERS_HUB_IMAGE_NAME_PREFIX", "");
@@ -43,14 +45,16 @@ private static void configureContainer() {
if (!isCartridgeAvailable()) {
VshardClusterContainer vshardClusterContainer =
new VshardClusterContainer(
- "vshard_cluster/Dockerfile",
- dockerRegistry + "vshard-cluster-java",
- "vshard_cluster/instances.yaml",
- "vshard_cluster/config.yaml",
- "tarantool/tarantool");
+ "vshard_cluster/Dockerfile",
+ dockerRegistry + "vshard-cluster-java",
+ "vshard_cluster/instances.yaml",
+ "vshard_cluster/config.yaml",
+ "tarantool/tarantool")
+ .withNetwork(NETWORK)
+ .withWaitingStrategy(new HostPortWaitStrategy().forPorts(3301));
if (!vshardClusterContainer.isRunning()) {
- vshardClusterContainer.withPrivilegedMode(true);
+ vshardClusterContainer.withPrivilegedMode(true).withStartupTimeout(Duration.ofMinutes(5));
vshardClusterContainer.start();
}
clusterContainer = vshardClusterContainer;
diff --git a/tarantool-spring-data/tarantool-spring-data-31/src/test/java/io/tarantool/spring/data31/integration/crud/CrudConfigurations.java b/tarantool-spring-data/tarantool-spring-data-31/src/test/java/io/tarantool/spring/data31/integration/crud/CrudConfigurations.java
index 3095faba..9d0914df 100644
--- a/tarantool-spring-data/tarantool-spring-data-31/src/test/java/io/tarantool/spring/data31/integration/crud/CrudConfigurations.java
+++ b/tarantool-spring-data/tarantool-spring-data-31/src/test/java/io/tarantool/spring/data31/integration/crud/CrudConfigurations.java
@@ -13,7 +13,6 @@
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
@@ -34,7 +33,6 @@
import io.tarantool.spring.data31.integration.BaseIntegrationTest;
import io.tarantool.spring.data31.repository.config.EnableTarantoolRepositories;
-@Disabled("Refactor TarantoolCartridgeContainer and VshardClusterContainer")
@TestPropertySource(properties = {DEFAULT_PROPERTY_FILE_LOCATION_CLASSPATH})
abstract class CrudConfigurations extends BaseIntegrationTest {
diff --git a/tarantool-spring-data/tarantool-spring-data-32/src/test/java/io/tarantool/spring/data32/integration/BaseIntegrationTest.java b/tarantool-spring-data/tarantool-spring-data-32/src/test/java/io/tarantool/spring/data32/integration/BaseIntegrationTest.java
index 38f94c5d..911fa403 100644
--- a/tarantool-spring-data/tarantool-spring-data-32/src/test/java/io/tarantool/spring/data32/integration/BaseIntegrationTest.java
+++ b/tarantool-spring-data/tarantool-spring-data-32/src/test/java/io/tarantool/spring/data32/integration/BaseIntegrationTest.java
@@ -11,24 +11,26 @@
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Timeout;
import org.slf4j.LoggerFactory;
+import org.testcontainers.containers.ClusterContainer;
+import org.testcontainers.containers.Network;
import org.testcontainers.containers.TarantoolCartridgeContainer;
-import org.testcontainers.containers.TarantoolContainerOperations;
import org.testcontainers.containers.VshardClusterContainer;
import org.testcontainers.containers.output.Slf4jLogConsumer;
+import org.testcontainers.containers.wait.strategy.HostPortWaitStrategy;
import static io.tarantool.spring.data.utils.Constants.DEFAULT_PROPERTY_FILE_NAME;
import static io.tarantool.spring.data32.utils.TarantoolTestSupport.DEFAULT_TEST_PROPERTY_DIR;
import static io.tarantool.spring.data32.utils.TarantoolTestSupport.writeTestPropertiesYaml;
import io.tarantool.spring.data32.config.properties.TarantoolProperties;
-@Disabled("Refactor TarantoolCartridgeContainer and VshardClusterContainer")
@Timeout(60)
public abstract class BaseIntegrationTest {
- protected static TarantoolContainerOperations> clusterContainer;
+ protected static ClusterContainer clusterContainer;
+
+ private static final Network NETWORK = Network.newNetwork();
private static final String dockerRegistry =
System.getenv().getOrDefault("TESTCONTAINERS_HUB_IMAGE_NAME_PREFIX", "");
@@ -43,14 +45,16 @@ private static void configureContainer() {
if (!isCartridgeAvailable()) {
VshardClusterContainer vshardClusterContainer =
new VshardClusterContainer(
- "vshard_cluster/Dockerfile",
- dockerRegistry + "vshard-cluster-java",
- "vshard_cluster/instances.yaml",
- "vshard_cluster/config.yaml",
- "tarantool/tarantool");
+ "vshard_cluster/Dockerfile",
+ dockerRegistry + "vshard-cluster-java",
+ "vshard_cluster/instances.yaml",
+ "vshard_cluster/config.yaml",
+ "tarantool/tarantool")
+ .withNetwork(NETWORK)
+ .withWaitingStrategy(new HostPortWaitStrategy().forPorts(3301));
if (!vshardClusterContainer.isRunning()) {
- vshardClusterContainer.withPrivilegedMode(true);
+ vshardClusterContainer.withPrivilegedMode(true).withStartupTimeout(Duration.ofMinutes(5));
vshardClusterContainer.start();
}
clusterContainer = vshardClusterContainer;
diff --git a/tarantool-spring-data/tarantool-spring-data-32/src/test/java/io/tarantool/spring/data32/integration/crud/CrudConfigurations.java b/tarantool-spring-data/tarantool-spring-data-32/src/test/java/io/tarantool/spring/data32/integration/crud/CrudConfigurations.java
index 448bfb5b..510cf921 100644
--- a/tarantool-spring-data/tarantool-spring-data-32/src/test/java/io/tarantool/spring/data32/integration/crud/CrudConfigurations.java
+++ b/tarantool-spring-data/tarantool-spring-data-32/src/test/java/io/tarantool/spring/data32/integration/crud/CrudConfigurations.java
@@ -13,7 +13,6 @@
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
@@ -34,7 +33,6 @@
import io.tarantool.spring.data32.integration.BaseIntegrationTest;
import io.tarantool.spring.data32.repository.config.EnableTarantoolRepositories;
-@Disabled("Refactor TarantoolCartridgeContainer and VshardClusterContainer")
@TestPropertySource(properties = {DEFAULT_PROPERTY_FILE_LOCATION_CLASSPATH})
abstract class CrudConfigurations extends BaseIntegrationTest {
diff --git a/tarantool-spring-data/tarantool-spring-data-33/src/test/java/io/tarantool/spring/data33/integration/BaseIntegrationTest.java b/tarantool-spring-data/tarantool-spring-data-33/src/test/java/io/tarantool/spring/data33/integration/BaseIntegrationTest.java
index 9bfacbc1..f87b9f48 100644
--- a/tarantool-spring-data/tarantool-spring-data-33/src/test/java/io/tarantool/spring/data33/integration/BaseIntegrationTest.java
+++ b/tarantool-spring-data/tarantool-spring-data-33/src/test/java/io/tarantool/spring/data33/integration/BaseIntegrationTest.java
@@ -11,24 +11,26 @@
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Timeout;
import org.slf4j.LoggerFactory;
+import org.testcontainers.containers.ClusterContainer;
+import org.testcontainers.containers.Network;
import org.testcontainers.containers.TarantoolCartridgeContainer;
-import org.testcontainers.containers.TarantoolContainerOperations;
import org.testcontainers.containers.VshardClusterContainer;
import org.testcontainers.containers.output.Slf4jLogConsumer;
+import org.testcontainers.containers.wait.strategy.HostPortWaitStrategy;
import static io.tarantool.spring.data.utils.Constants.DEFAULT_PROPERTY_FILE_NAME;
import static io.tarantool.spring.data33.utils.TarantoolTestSupport.DEFAULT_TEST_PROPERTY_DIR;
import static io.tarantool.spring.data33.utils.TarantoolTestSupport.writeTestPropertiesYaml;
import io.tarantool.spring.data33.config.properties.TarantoolProperties;
-@Disabled("Refactor TarantoolCartridgeContainer and VshardClusterContainer")
@Timeout(60)
public abstract class BaseIntegrationTest {
- protected static TarantoolContainerOperations> clusterContainer;
+ protected static ClusterContainer clusterContainer;
+
+ private static final Network NETWORK = Network.newNetwork();
private static final String dockerRegistry =
System.getenv().getOrDefault("TESTCONTAINERS_HUB_IMAGE_NAME_PREFIX", "");
@@ -43,14 +45,16 @@ private static void configureContainer() {
if (!isCartridgeAvailable()) {
VshardClusterContainer vshardClusterContainer =
new VshardClusterContainer(
- "vshard_cluster/Dockerfile",
- dockerRegistry + "vshard-cluster-java",
- "vshard_cluster/instances.yaml",
- "vshard_cluster/config.yaml",
- "tarantool/tarantool");
+ "vshard_cluster/Dockerfile",
+ dockerRegistry + "vshard-cluster-java",
+ "vshard_cluster/instances.yaml",
+ "vshard_cluster/config.yaml",
+ "tarantool/tarantool")
+ .withNetwork(NETWORK)
+ .withWaitingStrategy(new HostPortWaitStrategy().forPorts(3301));
if (!vshardClusterContainer.isRunning()) {
- vshardClusterContainer.withPrivilegedMode(true);
+ vshardClusterContainer.withPrivilegedMode(true).withStartupTimeout(Duration.ofMinutes(5));
vshardClusterContainer.start();
}
clusterContainer = vshardClusterContainer;
diff --git a/tarantool-spring-data/tarantool-spring-data-33/src/test/java/io/tarantool/spring/data33/integration/crud/CrudConfigurations.java b/tarantool-spring-data/tarantool-spring-data-33/src/test/java/io/tarantool/spring/data33/integration/crud/CrudConfigurations.java
index a46ac0d9..e5575911 100644
--- a/tarantool-spring-data/tarantool-spring-data-33/src/test/java/io/tarantool/spring/data33/integration/crud/CrudConfigurations.java
+++ b/tarantool-spring-data/tarantool-spring-data-33/src/test/java/io/tarantool/spring/data33/integration/crud/CrudConfigurations.java
@@ -13,7 +13,6 @@
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
@@ -34,7 +33,6 @@
import io.tarantool.spring.data33.integration.BaseIntegrationTest;
import io.tarantool.spring.data33.repository.config.EnableTarantoolRepositories;
-@Disabled("Refactor TarantoolCartridgeContainer and VshardClusterContainer")
@TestPropertySource(properties = {DEFAULT_PROPERTY_FILE_LOCATION_CLASSPATH})
abstract class CrudConfigurations extends BaseIntegrationTest {
diff --git a/tarantool-spring-data/tarantool-spring-data-34/src/test/java/io/tarantool/spring/data34/integration/BaseIntegrationTest.java b/tarantool-spring-data/tarantool-spring-data-34/src/test/java/io/tarantool/spring/data34/integration/BaseIntegrationTest.java
index 2c9d5c66..88e1a244 100644
--- a/tarantool-spring-data/tarantool-spring-data-34/src/test/java/io/tarantool/spring/data34/integration/BaseIntegrationTest.java
+++ b/tarantool-spring-data/tarantool-spring-data-34/src/test/java/io/tarantool/spring/data34/integration/BaseIntegrationTest.java
@@ -11,24 +11,26 @@
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Timeout;
import org.slf4j.LoggerFactory;
+import org.testcontainers.containers.ClusterContainer;
+import org.testcontainers.containers.Network;
import org.testcontainers.containers.TarantoolCartridgeContainer;
-import org.testcontainers.containers.TarantoolContainerOperations;
import org.testcontainers.containers.VshardClusterContainer;
import org.testcontainers.containers.output.Slf4jLogConsumer;
+import org.testcontainers.containers.wait.strategy.HostPortWaitStrategy;
import static io.tarantool.spring.data.utils.Constants.DEFAULT_PROPERTY_FILE_NAME;
import static io.tarantool.spring.data34.utils.TarantoolTestSupport.DEFAULT_TEST_PROPERTY_DIR;
import static io.tarantool.spring.data34.utils.TarantoolTestSupport.writeTestPropertiesYaml;
import io.tarantool.spring.data34.config.properties.TarantoolProperties;
-@Disabled("Refactor TarantoolCartridgeContainer and VshardClusterContainer")
@Timeout(60)
public abstract class BaseIntegrationTest {
- protected static TarantoolContainerOperations> clusterContainer;
+ protected static ClusterContainer clusterContainer;
+
+ private static final Network NETWORK = Network.newNetwork();
private static final String dockerRegistry =
System.getenv().getOrDefault("TESTCONTAINERS_HUB_IMAGE_NAME_PREFIX", "");
@@ -43,14 +45,16 @@ private static void configureContainer() {
if (!isCartridgeAvailable()) {
VshardClusterContainer vshardClusterContainer =
new VshardClusterContainer(
- "vshard_cluster/Dockerfile",
- dockerRegistry + "vshard-cluster-java",
- "vshard_cluster/instances.yaml",
- "vshard_cluster/config.yaml",
- "tarantool/tarantool");
+ "vshard_cluster/Dockerfile",
+ dockerRegistry + "vshard-cluster-java",
+ "vshard_cluster/instances.yaml",
+ "vshard_cluster/config.yaml",
+ "tarantool/tarantool")
+ .withNetwork(NETWORK)
+ .withWaitingStrategy(new HostPortWaitStrategy().forPorts(3301));
if (!vshardClusterContainer.isRunning()) {
- vshardClusterContainer.withPrivilegedMode(true);
+ vshardClusterContainer.withPrivilegedMode(true).withStartupTimeout(Duration.ofMinutes(5));
vshardClusterContainer.start();
}
clusterContainer = vshardClusterContainer;
diff --git a/tarantool-spring-data/tarantool-spring-data-34/src/test/java/io/tarantool/spring/data34/integration/crud/CrudConfigurations.java b/tarantool-spring-data/tarantool-spring-data-34/src/test/java/io/tarantool/spring/data34/integration/crud/CrudConfigurations.java
index 504d9867..cbb15317 100644
--- a/tarantool-spring-data/tarantool-spring-data-34/src/test/java/io/tarantool/spring/data34/integration/crud/CrudConfigurations.java
+++ b/tarantool-spring-data/tarantool-spring-data-34/src/test/java/io/tarantool/spring/data34/integration/crud/CrudConfigurations.java
@@ -13,7 +13,6 @@
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
@@ -34,7 +33,6 @@
import io.tarantool.spring.data34.integration.BaseIntegrationTest;
import io.tarantool.spring.data34.repository.config.EnableTarantoolRepositories;
-@Disabled("Refactor TarantoolCartridgeContainer and VshardClusterContainer")
@TestPropertySource(properties = {DEFAULT_PROPERTY_FILE_LOCATION_CLASSPATH})
abstract class CrudConfigurations extends BaseIntegrationTest {
diff --git a/tarantool-spring-data/tarantool-spring-data-35/src/test/java/io/tarantool/spring/data35/integration/BaseIntegrationTest.java b/tarantool-spring-data/tarantool-spring-data-35/src/test/java/io/tarantool/spring/data35/integration/BaseIntegrationTest.java
index 2fd20f50..4f010289 100644
--- a/tarantool-spring-data/tarantool-spring-data-35/src/test/java/io/tarantool/spring/data35/integration/BaseIntegrationTest.java
+++ b/tarantool-spring-data/tarantool-spring-data-35/src/test/java/io/tarantool/spring/data35/integration/BaseIntegrationTest.java
@@ -11,24 +11,26 @@
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Timeout;
import org.slf4j.LoggerFactory;
+import org.testcontainers.containers.ClusterContainer;
+import org.testcontainers.containers.Network;
import org.testcontainers.containers.TarantoolCartridgeContainer;
-import org.testcontainers.containers.TarantoolContainerOperations;
import org.testcontainers.containers.VshardClusterContainer;
import org.testcontainers.containers.output.Slf4jLogConsumer;
+import org.testcontainers.containers.wait.strategy.HostPortWaitStrategy;
import static io.tarantool.spring.data.utils.Constants.DEFAULT_PROPERTY_FILE_NAME;
import static io.tarantool.spring.data35.utils.TarantoolTestSupport.DEFAULT_TEST_PROPERTY_DIR;
import static io.tarantool.spring.data35.utils.TarantoolTestSupport.writeTestPropertiesYaml;
import io.tarantool.spring.data35.config.properties.TarantoolProperties;
-@Disabled("Refactor TarantoolCartridgeContainer and VshardClusterContainer")
@Timeout(60)
public abstract class BaseIntegrationTest {
- protected static TarantoolContainerOperations> clusterContainer;
+ protected static ClusterContainer clusterContainer;
+
+ private static final Network NETWORK = Network.newNetwork();
private static final String dockerRegistry =
System.getenv().getOrDefault("TESTCONTAINERS_HUB_IMAGE_NAME_PREFIX", "");
@@ -43,14 +45,16 @@ private static void configureContainer() {
if (!isCartridgeAvailable()) {
VshardClusterContainer vshardClusterContainer =
new VshardClusterContainer(
- "vshard_cluster/Dockerfile",
- dockerRegistry + "vshard-cluster-java",
- "vshard_cluster/instances.yaml",
- "vshard_cluster/config.yaml",
- "tarantool/tarantool");
+ "vshard_cluster/Dockerfile",
+ dockerRegistry + "vshard-cluster-java",
+ "vshard_cluster/instances.yaml",
+ "vshard_cluster/config.yaml",
+ "tarantool/tarantool")
+ .withNetwork(NETWORK)
+ .withWaitingStrategy(new HostPortWaitStrategy().forPorts(3301));
if (!vshardClusterContainer.isRunning()) {
- vshardClusterContainer.withPrivilegedMode(true);
+ vshardClusterContainer.withPrivilegedMode(true).withStartupTimeout(Duration.ofMinutes(5));
vshardClusterContainer.start();
}
clusterContainer = vshardClusterContainer;
diff --git a/tarantool-spring-data/tarantool-spring-data-35/src/test/java/io/tarantool/spring/data35/integration/crud/CrudConfigurations.java b/tarantool-spring-data/tarantool-spring-data-35/src/test/java/io/tarantool/spring/data35/integration/crud/CrudConfigurations.java
index 1ccf47b5..3639f66c 100644
--- a/tarantool-spring-data/tarantool-spring-data-35/src/test/java/io/tarantool/spring/data35/integration/crud/CrudConfigurations.java
+++ b/tarantool-spring-data/tarantool-spring-data-35/src/test/java/io/tarantool/spring/data35/integration/crud/CrudConfigurations.java
@@ -13,7 +13,6 @@
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
@@ -34,7 +33,6 @@
import io.tarantool.spring.data35.integration.BaseIntegrationTest;
import io.tarantool.spring.data35.repository.config.EnableTarantoolRepositories;
-@Disabled("Refactor TarantoolCartridgeContainer and VshardClusterContainer")
@TestPropertySource(properties = {DEFAULT_PROPERTY_FILE_LOCATION_CLASSPATH})
abstract class CrudConfigurations extends BaseIntegrationTest {
diff --git a/testcontainers/src/main/java/org/testcontainers/containers/ClusterContainer.java b/testcontainers/src/main/java/org/testcontainers/containers/ClusterContainer.java
new file mode 100644
index 00000000..bb798ad6
--- /dev/null
+++ b/testcontainers/src/main/java/org/testcontainers/containers/ClusterContainer.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2025 VK DIGITAL TECHNOLOGIES LIMITED LIABILITY COMPANY
+ * All Rights Reserved.
+ */
+
+package org.testcontainers.containers;
+
+/**
+ * Common interface for Tarantool cluster containers (vshard-based and cartridge-based). Provides
+ * access to the router endpoint and command execution.
+ */
+public interface ClusterContainer {
+
+ /**
+ * Get the router host.
+ *
+ * @return router hostname
+ */
+ String getHost();
+
+ /**
+ * Get the mapped router port (default router port 3301).
+ *
+ * @return mapped router port
+ */
+ int getPort();
+
+ /**
+ * Get the mapped port for the given original container port.
+ *
+ * @param originalPort the container-internal port
+ * @return the mapped host port
+ */
+ Integer getMappedPort(int originalPort);
+
+ /**
+ * Execute a Lua command inside the cluster router.
+ *
+ * @param command a valid Lua command or sequence of Lua commands
+ * @return command execution result
+ */
+ Container.ExecResult executeCommand(String command);
+}
diff --git a/testcontainers/src/main/java/org/testcontainers/containers/TarantoolCartridgeContainer.java b/testcontainers/src/main/java/org/testcontainers/containers/TarantoolCartridgeContainer.java
index 85e06816..7f37b938 100644
--- a/testcontainers/src/main/java/org/testcontainers/containers/TarantoolCartridgeContainer.java
+++ b/testcontainers/src/main/java/org/testcontainers/containers/TarantoolCartridgeContainer.java
@@ -5,7 +5,9 @@
package org.testcontainers.containers;
+import java.io.IOException;
import java.net.URL;
+import java.nio.file.Paths;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
@@ -19,13 +21,12 @@
import com.github.dockerjava.api.command.InspectContainerResponse;
import org.apache.commons.lang3.ArrayUtils;
import org.testcontainers.containers.utils.CartridgeConfigParser;
-import org.testcontainers.containers.utils.SslContext;
-import org.testcontainers.containers.utils.TarantoolContainerClientHelper;
import org.testcontainers.images.builder.ImageFromDockerfile;
+import org.testcontainers.utility.MountableFile;
+import org.yaml.snakeyaml.Yaml;
-@Deprecated
public class TarantoolCartridgeContainer extends GenericContainer
- implements TarantoolContainerOperations {
+ implements ClusterContainer {
protected static final String ROUTER_HOST = "localhost";
protected static final int ROUTER_PORT = 3301;
@@ -52,6 +53,31 @@ public class TarantoolCartridgeContainer extends GenericContainer /tmp/container-cmd.lua && tarantool /tmp/container-cmd.lua";
+
+ private static final Yaml yaml = new Yaml();
+
protected final CartridgeConfigParser instanceFileParser;
protected final String TARANTOOL_RUN_DIR;
@@ -65,7 +91,6 @@ public class TarantoolCartridgeContainer extends GenericContainer waitFunc) {
}
protected boolean routerIsUp() {
- ExecResult result;
try {
- result = executeCommand(healthyCmd);
+ ExecResult result = executeCommand(healthyCmd);
if (result.getExitCode() != 0
&& result.getStderr().contains("Connection refused")
&& result.getStdout().isEmpty()) {
@@ -613,9 +606,8 @@ protected boolean routerIsUp() {
}
protected boolean isCartridgeHealthy() {
- ExecResult result;
try {
- result = executeCommand(healthyCmd);
+ ExecResult result = executeCommand(healthyCmd);
if (result.getExitCode() != 0) {
logger()
.error(
@@ -643,24 +635,69 @@ protected boolean isCartridgeHealthy() {
}
}
- @Override
public ExecResult executeScript(String scriptResourcePath) throws Exception {
- return TarantoolContainerClientHelper.executeScript(this, scriptResourcePath, this.sslContext);
+ String scriptName = Paths.get(scriptResourcePath).getFileName().toString();
+ String containerPath = normalizePath(Paths.get(TMP_DIR, scriptName));
+ copyFileToContainer(MountableFile.forClasspathResource(scriptResourcePath), containerPath);
+ return executeCommand(String.format("return dofile('%s')", containerPath));
}
- @Override
public T executeScriptDecoded(String scriptResourcePath) throws Exception {
- return TarantoolContainerClientHelper.executeScriptDecoded(
- this, scriptResourcePath, this.sslContext);
+ ExecResult result = executeScript(scriptResourcePath);
+
+ if (result.getExitCode() != 0) {
+ String message =
+ String.format(
+ "Executed script %s with exit code %d, stderr: \"%s\", stdout: \"%s\"",
+ scriptResourcePath, result.getExitCode(), result.getStderr(), result.getStdout());
+
+ if (result.getExitCode() == 3 || result.getExitCode() == 1) {
+ throw new ExecutionException(message, new Throwable());
+ }
+
+ throw new IllegalStateException(message);
+ }
+
+ return yaml.load(result.getStdout());
}
@Override
- public ExecResult executeCommand(String command) throws Exception {
- return TarantoolContainerClientHelper.executeCommand(this, command, this.sslContext);
+ public ExecResult executeCommand(String command) {
+ try {
+ if (!isRunning()) {
+ throw new IllegalStateException("Cannot execute commands in stopped container");
+ }
+ command = command.replace("\"", "\\\"").replace("\'", "\\\'");
+ String bashCommand;
+ if (IS_TARANTOOL2) {
+ bashCommand =
+ String.format(COMMAND_TEMPLATE, routerPort, routerUsername, routerPassword, command);
+ } else {
+ bashCommand =
+ String.format(
+ ECHO_COMMAND_TEMPLATE,
+ command,
+ TT_COMMAND,
+ routerUsername,
+ routerPassword,
+ routerPort);
+ }
+ return execInContainer("sh", "-c", bashCommand);
+ } catch (IOException | InterruptedException e) {
+ throw new RuntimeException(e);
+ }
}
- @Override
- public T executeCommandDecoded(String command) throws Exception {
- return TarantoolContainerClientHelper.executeCommandDecoded(this, command, this.sslContext);
+ public T executeCommandDecoded(String command) {
+ ExecResult result = executeCommand(command);
+
+ if (result.getExitCode() != 0) {
+ throw new IllegalStateException(
+ String.format(
+ "Executed command \"%s\" with exit code %d, stderr: \"%s\", stdout: \"%s\"",
+ command, result.getExitCode(), result.getStderr(), result.getStdout()));
+ }
+
+ return yaml.load(result.getStdout());
}
}
diff --git a/testcontainers/src/main/java/org/testcontainers/containers/TarantoolContainerOperations.java b/testcontainers/src/main/java/org/testcontainers/containers/TarantoolContainerOperations.java
deleted file mode 100644
index 1ae91f32..00000000
--- a/testcontainers/src/main/java/org/testcontainers/containers/TarantoolContainerOperations.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (c) 2025 VK DIGITAL TECHNOLOGIES LIMITED LIABILITY COMPANY
- * All Rights Reserved.
- */
-
-package org.testcontainers.containers;
-
-@Deprecated
-public interface TarantoolContainerOperations> extends Container {
- /**
- * Get the Tarantool server exposed port for connecting the client to
- *
- * @return a port
- */
- int getPort();
-
- /**
- * Get the Tarantool user name for connecting the client with
- *
- * @return a user name
- */
- String getUsername();
-
- /**
- * Get the Tarantool user password for connecting the client with
- *
- * @return a user password
- */
- String getPassword();
-
- /**
- * Get the app scripts directory
- *
- * @return the app directory
- */
- String getDirectoryBinding();
-
- /**
- * Get the app scripts directory in the container
- *
- * @return the app scripts directory
- */
- String getInstanceDir();
-
- /**
- * Get the Tarantool server internal port for client connections
- *
- * @return a port
- */
- int getInternalPort();
-
- /**
- * Execute a local script in the Tarantool instance. The path must be classpath-relative.
- * `dofile()` function is executed internally, so possible exceptions will be caught as the client
- * exceptions.
- *
- * @param scriptResourcePath the classpath resource path to a script
- * @return script execution result
- * @throws Exception if failed to connect to the instance or execution fails
- */
- Container.ExecResult executeScript(String scriptResourcePath) throws Exception;
-
- /**
- * Execute a local script in the Tarantool instance. The path must be classpath-relative.
- * `dofile()` function is executed internally, so possible exceptions will be caught as the client
- * exceptions.
- *
- * @param the result of script
- * @param scriptResourcePath the classpath resource path to a script
- * @return script execution result in {@link Container.ExecResult}
- * @throws Exception if failed to connect to the instance or execution fails
- */
- V executeScriptDecoded(String scriptResourcePath) throws Exception;
-
- /**
- * Execute a command in the Tarantool instance. Example of a command: `return 1 + 2, 'foo'`
- *
- * @param command a valid Lua command or a sequence of Lua commands
- * @return command execution result
- * @throws Exception if failed to connect to the instance or execution fails
- */
- Container.ExecResult executeCommand(String command) throws Exception;
-
- /**
- * Execute a command in the Tarantool instance. Example of a command: `return 1 + 2, 'foo'`
- *
- * @param the result of script
- * @param command a valid Lua command or a sequence of Lua commands
- * @return command execution result in {@link Container.ExecResult}
- * @throws Exception if failed to connect to the instance or execution fails
- */
- V executeCommandDecoded(String command) throws Exception;
-}
diff --git a/testcontainers/src/main/java/org/testcontainers/containers/VshardClusterContainer.java b/testcontainers/src/main/java/org/testcontainers/containers/VshardClusterContainer.java
index 43b2dffc..1f7ef893 100644
--- a/testcontainers/src/main/java/org/testcontainers/containers/VshardClusterContainer.java
+++ b/testcontainers/src/main/java/org/testcontainers/containers/VshardClusterContainer.java
@@ -7,28 +7,27 @@
import java.io.IOException;
import java.net.URL;
+import java.nio.file.Paths;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
-import java.util.concurrent.ExecutionException;
import java.util.function.Supplier;
import static org.testcontainers.containers.utils.PathUtils.normalizePath;
import com.github.dockerjava.api.command.InspectContainerResponse;
import lombok.Getter;
import org.apache.commons.lang3.ArrayUtils;
-import org.testcontainers.containers.utils.SslContext;
-import org.testcontainers.containers.utils.TarantoolContainerClientHelper;
+import org.testcontainers.containers.wait.strategy.WaitStrategy;
import org.testcontainers.images.builder.ImageFromDockerfile;
+import org.testcontainers.utility.MountableFile;
/**
* @author Artyom Dubinin
*/
-@Deprecated
public class VshardClusterContainer extends GenericContainer
- implements TarantoolContainerOperations {
+ implements ClusterContainer {
protected static final String ROUTER_HOST = "localhost";
protected static final int ROUTER_PORT = 3301;
@@ -52,6 +51,13 @@ public class VshardClusterContainer extends GenericContainer mergeBuildArguments(Map buildArgs) {
Map args = new HashMap<>(buildArgs);
@@ -189,34 +199,24 @@ protected static ImageFromDockerfile buildImage(
: buildArgs.get("CLUSTER_SRC_DIR"));
}
- public int getRouterPort() {
- if (useFixedPorts) {
- return routerPort;
- }
- return getMappedPort(routerPort);
- }
-
@Override
public String getHost() {
- return getRouterHost();
+ return super.getHost();
}
@Override
- public int getPort() {
- return getRouterPort();
+ public Integer getMappedPort(int originalPort) {
+ return super.getMappedPort(originalPort);
}
@Override
- public String getUsername() {
- return getRouterUsername();
- }
-
- @Override
- public String getPassword() {
- return getRouterPassword();
+ public int getPort() {
+ if (useFixedPorts) {
+ return routerPort;
+ }
+ return getMappedPort(routerPort);
}
- @Override
public String getDirectoryBinding() {
return directoryResourcePath;
}
@@ -227,16 +227,10 @@ public VshardClusterContainer withInstanceDir(String instanceDir) {
return this;
}
- @Override
public String getInstanceDir() {
return instanceDir;
}
- @Override
- public int getInternalPort() {
- return routerPort;
- }
-
public String getAPIHost() {
return routerHost;
}
@@ -316,10 +310,7 @@ protected void containerIsStarted(InspectContainerResponse containerInfo, boolea
logger().info("Tarantool vshard cluster cluster is started");
logger()
- .info(
- "Tarantool vshard cluster router is listening at {}:{}",
- getRouterHost(),
- getRouterPort());
+ .info("Tarantool vshard cluster router is listening at {}:{}", getRouterHost(), getPort());
}
protected void waitUntilCrudIsUp(int secondsToWait) {
@@ -345,9 +336,18 @@ protected boolean waitUntilTrue(int secondsToWait, Supplier waitFunc) {
}
protected boolean crudIsUp() {
- ExecResult result;
try {
- result = TarantoolContainerClientHelper.executeCommand(this, "return crud._VERSION", null);
+ ExecResult result =
+ execInContainer(
+ "/bin/sh",
+ "-c",
+ String.format(
+ ECHO_COMMAND_TEMPLATE,
+ "return require('crud')._VERSION",
+ TT_COMMAND,
+ routerUsername,
+ routerPassword,
+ routerPort));
if (result.getExitCode() != 0) {
logger()
.error(
@@ -356,48 +356,37 @@ protected boolean crudIsUp() {
result.getStdout(),
result.getStderr());
return false;
- } else {
- return true;
}
+ return true;
} catch (Exception e) {
logger().error(e.getMessage());
return false;
}
}
- @Override
public ExecResult executeScript(String scriptResourcePath) {
- try {
- return TarantoolContainerClientHelper.executeScript(
- this, scriptResourcePath, this.sslContext);
- } catch (IOException | InterruptedException e) {
- throw new RuntimeException(e);
- }
- }
-
- @Override
- public T executeScriptDecoded(String scriptResourcePath) {
- try {
- return TarantoolContainerClientHelper.executeScriptDecoded(
- this, scriptResourcePath, this.sslContext);
- } catch (IOException | InterruptedException | ExecutionException e) {
- throw new RuntimeException(e);
- }
+ String scriptName = Paths.get(scriptResourcePath).getFileName().toString();
+ String containerPath = normalizePath(Paths.get(TMP_DIR, scriptName));
+ copyFileToContainer(MountableFile.forClasspathResource(scriptResourcePath), containerPath);
+ return executeCommand(String.format("return dofile('%s')", containerPath));
}
@Override
public ExecResult executeCommand(String command) {
try {
- return TarantoolContainerClientHelper.executeCommand(this, command, this.sslContext);
- } catch (IOException | InterruptedException e) {
- throw new RuntimeException(e);
- }
- }
-
- @Override
- public T executeCommandDecoded(String command) {
- try {
- return TarantoolContainerClientHelper.executeCommandDecoded(this, command, this.sslContext);
+ if (!isRunning()) {
+ throw new IllegalStateException("Cannot execute commands in stopped container");
+ }
+ command = command.replace("\"", "\\\"");
+ String bashCommand =
+ String.format(
+ ECHO_COMMAND_TEMPLATE,
+ command,
+ TT_COMMAND,
+ routerUsername,
+ routerPassword,
+ routerPort);
+ return execInContainer("/bin/sh", "-c", bashCommand);
} catch (IOException | InterruptedException e) {
throw new RuntimeException(e);
}
@@ -423,8 +412,7 @@ public boolean equals(Object o) {
&& directoryResourcePath.equals(that.directoryResourcePath)
&& instanceDir.equals(that.instanceDir)
&& configFile.equals(that.configFile)
- && instancesFile.equals(that.instancesFile)
- && Objects.equals(sslContext, that.sslContext);
+ && instancesFile.equals(that.instancesFile);
}
@Override
@@ -441,7 +429,6 @@ public int hashCode() {
directoryResourcePath,
instanceDir,
configFile,
- instancesFile,
- sslContext);
+ instancesFile);
}
}
diff --git a/testcontainers/src/main/java/org/testcontainers/containers/utils/TarantoolContainerClientHelper.java b/testcontainers/src/main/java/org/testcontainers/containers/utils/TarantoolContainerClientHelper.java
index 676a343c..23e080a1 100644
--- a/testcontainers/src/main/java/org/testcontainers/containers/utils/TarantoolContainerClientHelper.java
+++ b/testcontainers/src/main/java/org/testcontainers/containers/utils/TarantoolContainerClientHelper.java
@@ -24,7 +24,6 @@
import lombok.SneakyThrows;
import org.testcontainers.containers.Container;
import org.testcontainers.containers.Network;
-import org.testcontainers.containers.TarantoolContainerOperations;
import org.testcontainers.containers.tarantool.Tarantool2Container;
import org.testcontainers.containers.tarantool.Tarantool3Container;
import org.testcontainers.containers.tarantool.Tarantool3WaitStrategy;
@@ -372,112 +371,4 @@ public static Container.ExecResult execInitScript(TarantoolContainer> containe
throw new RuntimeException(e);
}
}
-
- public static Container.ExecResult executeScript(
- TarantoolContainerOperations> container, String scriptResourcePath, SslContext sslContext)
- throws IOException, InterruptedException {
- if (!container.isRunning()) {
- throw new IllegalStateException("Cannot execute scripts in stopped container");
- }
-
- String scriptName = Paths.get(scriptResourcePath).getFileName().toString();
- String containerPath = normalizePath(Paths.get(TMP_DIR, scriptName));
- container.copyFileToContainer(
- MountableFile.forClasspathResource(scriptResourcePath), containerPath);
- return executeCommand(
- container, String.format("return dofile('%s')", containerPath), sslContext);
- }
-
- public static T executeScriptDecoded(
- TarantoolContainerOperations> container, String scriptResourcePath, SslContext sslContext)
- throws IOException, InterruptedException, ExecutionException {
- Container.ExecResult result = executeScript(container, scriptResourcePath, sslContext);
-
- if (result.getExitCode() != 0) {
-
- if (result.getExitCode() == 3 || result.getExitCode() == 1) {
- throw new ExecutionException(
- String.format(
- EXECUTE_SCRIPT_ERROR_TEMPLATE,
- scriptResourcePath,
- result.getExitCode(),
- result.getStderr(),
- result.getStdout()),
- new Throwable());
- }
-
- throw new IllegalStateException(
- String.format(
- EXECUTE_SCRIPT_ERROR_TEMPLATE,
- scriptResourcePath,
- result.getExitCode(),
- result.getStderr(),
- result.getStdout()));
- }
-
- return yaml.load(result.getStdout());
- }
-
- public static Container.ExecResult executeCommand(
- TarantoolContainerOperations> container, String command, SslContext sslContext)
- throws IOException, InterruptedException {
- if (!container.isRunning()) {
- throw new IllegalStateException("Cannot execute commands in stopped container");
- }
-
- command = command.replace("\"", "\\\"");
- command = command.replace("\'", "\\\'");
-
- String bashCommand;
- if (sslContext == null) { // No SSL
- bashCommand =
- String.format(
- COMMAND_TEMPLATE,
- container.getHost(),
- container.getInternalPort(),
- container.getUsername(),
- container.getPassword(),
- command);
- } else if (sslContext.getKeyFile() != null && sslContext.getCertFile() != null) { // mTLS
- bashCommand =
- String.format(
- MTLS_COMMAND_TEMPLATE,
- container.getHost(),
- container.getInternalPort(),
- sslContext.getKeyFile(),
- sslContext.getCertFile(),
- container.getUsername(),
- container.getPassword(),
- command);
- } else { // SSL
- bashCommand =
- String.format(
- SSL_COMMAND_TEMPLATE,
- container.getHost(),
- container.getInternalPort(),
- container.getUsername(),
- container.getPassword(),
- command);
- }
-
- return container.execInContainer("sh", "-c", bashCommand);
- }
-
- public static T executeCommandDecoded(
- TarantoolContainerOperations> container, String command, SslContext sslContext)
- throws IOException, InterruptedException {
- Container.ExecResult result = executeCommand(container, command, sslContext);
-
- if (result.getExitCode() != 0) {
- throw new IllegalStateException(
- String.format(
- EXECUTE_COMMAND_ERROR_TEMPLATE,
- command,
- result.getExitCode(),
- result.getStderr(),
- result.getStdout()));
- }
-
- return yaml.load(result.getStdout());
- }
}