Skip to content

Commit 5621fae

Browse files
committed
Remove cartridge-java from dependencies
- [breaking change] Remove io.tarantool.cartridge-driver dependency - [breaking change] Update executeScript and executeCommand methods to execute code viva execInContainer (now it returns yaml string in Container.ExecResult not CompletableFuture) - Add executeScriptDecoded and executeCommandDecoded methods to return parsed yaml not string. - Add SslContext class - Add withSslContext method to TarantoolContainer and TarantoolCartridgeContainer. - Update org.yaml.snakeyaml to 2.0 version. Closes #69
1 parent d6f21a6 commit 5621fae

28 files changed

+735
-210
lines changed

CHANGELOG.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,14 @@
33
## [Unreleased]
44
- Fix problem if topology isn't applied correctly
55
- Bump testcontainers to 1.18.0
6-
- Move rocks building in build phase
6+
- Move rocks building to the build phase
7+
- **[breaking change]** Remove io.tarantool.cartridge-driver dependency
8+
- **[breaking change]** Update executeScript and executeCommand methods to execute code viva execInContainer
9+
(now it returns yaml string in Container.ExecResult not CompletableFuture)
10+
- Add executeScriptDecoded and executeCommandDecoded methods to return parsed yaml not string.
11+
- Add SslContext class
12+
- Add withSslContext method to TarantoolContainer and TarantoolCartridgeContainer.
13+
- Update org.yaml.snakeyaml to 2.0 version.
714

815
## [0.5.4] - 2023-03-31
916
- Use tarantool image as base instead of centos in cartridge container

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,9 @@ public class SomeTest {
5252
@BeforeAll
5353
public void setUp() {
5454
// Run some setup commands
55-
container.executeCommand("return 1, 2").get();
55+
container.executeCommand("return 1, 2");
5656
// Or execute a script
57-
container.executeScript("org/testcontainers/containers/test.lua").get();
57+
container.executeScript("org/testcontainers/containers/test.lua");
5858
}
5959

6060
@Test
@@ -72,7 +72,7 @@ public class SomeTest {
7272
...
7373

7474
// Execute some commands in Tarantool instance for verification
75-
List<Object> result = container.executeCommand("return 1, 2").get();
75+
List<Object> result = container.executeCommand("return 1, 2");
7676
...
7777
}
7878
...
@@ -181,7 +181,7 @@ public class SomeOtherTest {
181181
// Use the created container in tests
182182
public void testFoo() {
183183
// Execute Lua commands in the router instance
184-
List<Object> result = container.executeCommand("return profile_get(...)", 1).get();
184+
List<Object> result = container.executeCommand("return profile_get(1)");
185185

186186
// Instantiate a client connected to the router node
187187
TarantoolCredentials credentials = new SimpleTarantoolCredentials(getRouterUsername(), getRouterPassword());

pom.xml

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -81,15 +81,10 @@
8181
<artifactId>testcontainers</artifactId>
8282
<version>${testcontainers.version}</version>
8383
</dependency>
84-
<dependency>
85-
<groupId>io.tarantool</groupId>
86-
<artifactId>cartridge-driver</artifactId>
87-
<version>0.9.1</version>
88-
</dependency>
8984
<dependency>
9085
<groupId>org.yaml</groupId>
9186
<artifactId>snakeyaml</artifactId>
92-
<version>1.33</version>
87+
<version>2.0</version>
9388
</dependency>
9489
<dependency>
9590
<groupId>org.slf4j</groupId>
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package org.testcontainers.containers;
2+
3+
public class SslContext {
4+
private String keyFile;
5+
private String certFile;
6+
7+
private SslContext() {
8+
}
9+
10+
private SslContext(String keyFile, String certFile) {
11+
this.keyFile = keyFile;
12+
this.certFile = certFile;
13+
}
14+
15+
public static SslContext getSslContext(){
16+
return new SslContext();
17+
}
18+
19+
public static SslContext getSslContext(String keyFile, String certFile){
20+
return new SslContext(keyFile, certFile);
21+
}
22+
23+
String getKeyFile() {
24+
return this.keyFile;
25+
}
26+
27+
String getCertFile() {
28+
return this.certFile;
29+
}
30+
}

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

Lines changed: 32 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package org.testcontainers.containers;
22

33
import com.github.dockerjava.api.command.InspectContainerResponse;
4-
import io.tarantool.driver.exceptions.TarantoolConnectionException;
54

65
import org.testcontainers.containers.exceptions.CartridgeTopologyException;
76
import org.testcontainers.images.builder.ImageFromDockerfile;
@@ -12,7 +11,6 @@
1211
import java.util.HashMap;
1312
import java.util.List;
1413
import java.util.Map;
15-
import java.util.concurrent.CompletableFuture;
1614
import java.util.concurrent.ExecutionException;
1715
import java.util.concurrent.TimeoutException;
1816
import java.util.function.Supplier;
@@ -82,6 +80,9 @@
8280
* specified in the http_port options, will be exposed.
8381
*
8482
* @author Alexey Kuzin
83+
* @authorm Artyom Dubinin
84+
* @author Ivan Dneprov
85+
*
8586
*/
8687
public class TarantoolCartridgeContainer extends GenericContainer<TarantoolCartridgeContainer>
8788
implements TarantoolContainerOperations<TarantoolCartridgeContainer> {
@@ -119,6 +120,7 @@ public class TarantoolCartridgeContainer extends GenericContainer<TarantoolCartr
119120
private String directoryResourcePath = SCRIPT_RESOURCE_DIRECTORY;
120121
private String instanceDir = INSTANCE_DIR;
121122
private String topologyConfigurationFile;
123+
private SslContext sslContext;
122124

123125
/**
124126
* Create a container with default image and specified instances file from the classpath resources. Assumes that
@@ -333,6 +335,11 @@ public String getInstanceDir() {
333335
return instanceDir;
334336
}
335337

338+
@Override
339+
public int getInternalPort() {
340+
return routerPort;
341+
}
342+
336343
/**
337344
* Get Cartridge router HTTP API hostname
338345
*
@@ -480,7 +487,7 @@ private boolean setupTopology() {
480487
.substring(topologyConfigurationFile.lastIndexOf('/') + 1);
481488

482489
try {
483-
Container.ExecResult result = execInContainer("cartridge",
490+
ExecResult result = execInContainer("cartridge",
484491
"replicasets",
485492
"--run-dir=" + TARANTOOL_RUN_DIR,
486493
"--file=" + replicasetsFileName, "setup", "--bootstrap-vshard");
@@ -494,7 +501,7 @@ private boolean setupTopology() {
494501

495502
} else {
496503
try {
497-
List<?> res = executeScript(topologyConfigurationFile).get();
504+
List<?> res = executeScriptDecoded(topologyConfigurationFile);
498505
if (res.size() >= 2 && res.get(1) != null && res.get(1) instanceof Map) {
499506
HashMap<?, ?> error = ((HashMap<?, ?>) res.get(1));
500507
// that means topology already exists
@@ -506,10 +513,6 @@ private boolean setupTopology() {
506513
if (e.getCause() instanceof TimeoutException) {
507514
return true;
508515
// Do nothing, the cluster is reloading
509-
} else if (e.getCause() instanceof TarantoolConnectionException) {
510-
// Probably cluster is not ready
511-
logger().error("Failed to setup topology: {}", e.getMessage());
512-
return false;
513516
}
514517
} else {
515518
throw new CartridgeTopologyException(e);
@@ -535,7 +538,7 @@ private void retryingSetupTopology() {
535538

536539
private void bootstrapVshard() {
537540
try {
538-
executeCommand(VSHARD_BOOTSTRAP_COMMAND).get();
541+
executeCommand(VSHARD_BOOTSTRAP_COMMAND);
539542
} catch (Exception e) {
540543
logger().error("Failed to bootstrap vshard cluster", e);
541544
throw new RuntimeException(e);
@@ -583,10 +586,10 @@ private void waitUntilTrue(int secondsToWait, Supplier<Boolean> waitFunc) {
583586

584587
private boolean routerIsUp() {
585588
String healthyCmd = " local cartridge = package.loaded['cartridge']" +
586-
" return assert(cartridge ~= nil)";
589+
" return cartridge ~= nil";
587590
try {
588-
List<?> result = executeCommand(healthyCmd).get();
589-
return (Boolean) result.get(0);
591+
List<?> result = executeCommandDecoded(healthyCmd);
592+
return result.get(0).getClass() == Boolean.class && (Boolean) result.get(0);
590593
} catch (Exception e) {
591594
logger().warn("Error while waiting for router instance to be up: " + e.getMessage());
592595
return false;
@@ -595,23 +598,33 @@ private boolean routerIsUp() {
595598

596599
private boolean isCartridgeHealthy() {
597600
String healthyCmd = " local cartridge = package.loaded['cartridge']" +
598-
" return assert(cartridge) and assert(cartridge.is_healthy())";
601+
" return cartridge ~= nil and cartridge.is_healthy()";
599602
try {
600-
List<?> result = executeCommand(healthyCmd).get();
601-
return (Boolean) result.get(0);
603+
List<?> result = executeCommandDecoded(healthyCmd);
604+
return result.get(0).getClass() == Boolean.class && (Boolean) result.get(0);
602605
} catch (Exception e) {
603606
logger().warn("Error while waiting for cartridge healthy state: " + e.getMessage());
604607
return false;
605608
}
606609
}
607610

608611
@Override
609-
public CompletableFuture<List<?>> executeScript(String scriptResourcePath) throws Exception {
610-
return clientHelper.executeScript(scriptResourcePath);
612+
public ExecResult executeScript(String scriptResourcePath) throws Exception {
613+
return clientHelper.executeScript(scriptResourcePath, this.sslContext);
614+
}
615+
616+
@Override
617+
public <T> T executeScriptDecoded(String scriptResourcePath) throws Exception {
618+
return clientHelper.executeScriptDecoded(scriptResourcePath, this.sslContext);
619+
}
620+
621+
@Override
622+
public ExecResult executeCommand(String command) throws Exception {
623+
return clientHelper.executeCommand(command, this.sslContext);
611624
}
612625

613626
@Override
614-
public CompletableFuture<List<?>> executeCommand(String command, Object... arguments) throws Exception {
615-
return clientHelper.executeCommand(command, arguments);
627+
public <T> T executeCommandDecoded(String command) throws Exception {
628+
return clientHelper.executeCommandDecoded(command, this.sslContext);
616629
}
617630
}

0 commit comments

Comments
 (0)