Skip to content

Commit a9bfb28

Browse files
authored
Fix flaky tests (#161)
* Fix flaky tests * Fix tests for retrying client * Remove replicas for tests
1 parent 88e57b7 commit a9bfb28

12 files changed

+86
-87
lines changed

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -222,13 +222,13 @@
222222
<dependency>
223223
<groupId>org.testcontainers</groupId>
224224
<artifactId>junit-jupiter</artifactId>
225-
<version>1.15.3</version>
225+
<version>1.16.2</version>
226226
<scope>test</scope>
227227
</dependency>
228228
<dependency>
229229
<groupId>io.tarantool</groupId>
230230
<artifactId>testcontainers-java-tarantool</artifactId>
231-
<version>0.4.5</version>
231+
<version>0.4.6</version>
232232
<scope>test</scope>
233233
</dependency>
234234
</dependencies>

src/test/java/io/tarantool/driver/integration/ProxyTarantoolClientIT.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import io.tarantool.driver.api.metadata.TarantoolSpaceMetadata;
3131
import io.tarantool.driver.api.tuple.operations.TupleOperations;
3232
import org.junit.jupiter.api.BeforeAll;
33+
import org.junit.jupiter.api.BeforeEach;
3334
import org.junit.jupiter.api.Test;
3435

3536
import java.util.ArrayList;
@@ -74,10 +75,15 @@ public static void setUp() throws Exception {
7475
truncateSpace(TEST_SPACE_NAME);
7576
}
7677

78+
@BeforeEach
79+
public void truncateSpace() {
80+
truncateSpace("test_space");
81+
truncateSpace("test_space_to_join");
82+
truncateSpace("second_test_space");
83+
}
84+
7785
private static void truncateSpace(String spaceName) {
78-
TarantoolSpaceOperations<TarantoolTuple, TarantoolResult<TarantoolTuple>> testSpace =
79-
client.space(spaceName);
80-
testSpace.truncate().join();
86+
client.space(spaceName).truncate().join();
8187
}
8288

8389
private static TarantoolClusterAddressProvider getClusterAddressProvider() {
@@ -312,9 +318,6 @@ public void clusterUpsertTest() throws ExecutionException, InterruptedException
312318

313319
@Test
314320
public void functionAggregateResultViaCallTest() throws ExecutionException, InterruptedException {
315-
truncateSpace("test_space");
316-
truncateSpace("test_space_to_join");
317-
318321
List<Object> values = Arrays.asList(123000, null, "Jane Doe", 999);
319322
TarantoolTuple tarantoolTuple = tupleFactory.create(values);
320323
client.space("test_space").insert(tarantoolTuple).get();
@@ -395,8 +398,6 @@ public void singleResultWithConverterTest() throws Exception {
395398

396399
@Test
397400
public void multiResultWithConverterTest() throws Exception {
398-
truncateSpace("second_test_space");
399-
400401
TarantoolSpaceMetadata metadata = client.space("second_test_space").getMetadata();
401402
MessagePackMapper mapper = client.getConfig().getMessagePackMapper();
402403

src/test/java/io/tarantool/driver/integration/ProxyTarantoolClientMixedInstancesIT.java

Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,36 @@
11
package io.tarantool.driver.integration;
22

3-
import io.tarantool.driver.core.ClusterTarantoolTupleClient;
4-
import io.tarantool.driver.api.tuple.DefaultTarantoolTupleFactory;
5-
import io.tarantool.driver.core.ProxyTarantoolTupleClient;
3+
import io.tarantool.driver.api.SingleValueCallResult;
4+
import io.tarantool.driver.api.TarantoolClient;
65
import io.tarantool.driver.api.TarantoolClientConfig;
76
import io.tarantool.driver.api.TarantoolClusterAddressProvider;
8-
import io.tarantool.driver.api.TarantoolServerAddress;
9-
import io.tarantool.driver.api.SingleValueCallResult;
107
import io.tarantool.driver.api.TarantoolResult;
11-
import io.tarantool.driver.api.tuple.TarantoolTupleFactory;
8+
import io.tarantool.driver.api.TarantoolServerAddress;
129
import io.tarantool.driver.api.conditions.Conditions;
10+
import io.tarantool.driver.api.metadata.TarantoolIndexMetadata;
11+
import io.tarantool.driver.api.metadata.TarantoolIndexType;
12+
import io.tarantool.driver.api.metadata.TarantoolMetadataOperations;
13+
import io.tarantool.driver.api.metadata.TarantoolSpaceMetadata;
14+
import io.tarantool.driver.api.retry.TarantoolRequestRetryPolicies;
1315
import io.tarantool.driver.api.space.TarantoolSpaceOperations;
16+
import io.tarantool.driver.api.tuple.DefaultTarantoolTupleFactory;
1417
import io.tarantool.driver.api.tuple.TarantoolTuple;
18+
import io.tarantool.driver.api.tuple.TarantoolTupleFactory;
1519
import io.tarantool.driver.api.tuple.operations.TupleOperations;
1620
import io.tarantool.driver.auth.SimpleTarantoolCredentials;
1721
import io.tarantool.driver.auth.TarantoolCredentials;
1822
import io.tarantool.driver.cluster.BinaryClusterDiscoveryEndpoint;
1923
import io.tarantool.driver.cluster.BinaryDiscoveryClusterAddressProvider;
2024
import io.tarantool.driver.cluster.TarantoolClusterDiscoveryConfig;
2125
import io.tarantool.driver.cluster.TestWrappedClusterAddressProvider;
26+
import io.tarantool.driver.core.ClusterTarantoolTupleClient;
27+
import io.tarantool.driver.core.ProxyTarantoolTupleClient;
28+
import io.tarantool.driver.core.RetryingTarantoolTupleClient;
2229
import io.tarantool.driver.mappers.CallResultMapper;
2330
import io.tarantool.driver.mappers.DefaultMessagePackMapperFactory;
2431
import io.tarantool.driver.mappers.MessagePackValueMapper;
25-
import io.tarantool.driver.api.metadata.TarantoolIndexMetadata;
26-
import io.tarantool.driver.api.metadata.TarantoolIndexType;
27-
import io.tarantool.driver.api.metadata.TarantoolMetadataOperations;
28-
import io.tarantool.driver.api.metadata.TarantoolSpaceMetadata;
2932
import org.junit.jupiter.api.BeforeAll;
33+
import org.junit.jupiter.api.BeforeEach;
3034
import org.junit.jupiter.api.Test;
3135

3236
import java.util.ArrayList;
@@ -37,6 +41,7 @@
3741
import java.util.Optional;
3842
import java.util.concurrent.CompletableFuture;
3943
import java.util.concurrent.ExecutionException;
44+
import java.util.function.Function;
4045

4146
import static org.junit.jupiter.api.Assertions.assertEquals;
4247
import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -48,7 +53,7 @@
4853
*/
4954
public class ProxyTarantoolClientMixedInstancesIT extends SharedCartridgeContainerMixedInstances {
5055

51-
private static ProxyTarantoolTupleClient client;
56+
private static TarantoolClient<TarantoolTuple, TarantoolResult<TarantoolTuple>> client;
5257
private static final DefaultMessagePackMapperFactory mapperFactory = DefaultMessagePackMapperFactory.getInstance();
5358
private static final TarantoolTupleFactory tupleFactory =
5459
new DefaultTarantoolTupleFactory(mapperFactory.defaultComplexTypesMapper());
@@ -65,11 +70,11 @@ public static void setUp() throws Exception {
6570
USER_NAME = container.getUsername();
6671
PASSWORD = container.getPassword();
6772
initClient();
68-
truncateSpace(TEST_SPACE_NAME);
6973
}
7074

71-
private static void truncateSpace(String spaceName) {
72-
client.space(spaceName).truncate().join();
75+
@BeforeEach
76+
public void truncateSpace() {
77+
client.space(TEST_SPACE_NAME).truncate().join();
7378
}
7479

7580
private static TarantoolClusterAddressProvider getClusterAddressProvider() {
@@ -109,7 +114,19 @@ public static void initClient() {
109114

110115
ClusterTarantoolTupleClient clusterClient = new ClusterTarantoolTupleClient(
111116
config, getClusterAddressProvider());
112-
client = new ProxyTarantoolTupleClient(clusterClient);
117+
final ProxyTarantoolTupleClient proxyClient = new ProxyTarantoolTupleClient(clusterClient);
118+
119+
//todo: remove this hack for crud after solving https://github.com/tarantool/cartridge-java/issues/159
120+
final TarantoolRequestRetryPolicies.AttemptsBoundRetryPolicyFactory<Function<Throwable, Boolean>> retryFactory =
121+
TarantoolRequestRetryPolicies
122+
.AttemptsBoundRetryPolicyFactory.builder(10,
123+
throwable -> throwable.getMessage().contains("Procedure 'crud")
124+
&& throwable.getMessage().contains("is not defined"))
125+
.withDelay(500)
126+
.withRequestTimeout(2000)
127+
.build();
128+
129+
client = new RetryingTarantoolTupleClient(proxyClient, retryFactory);
113130
}
114131

115132
@Test

src/test/java/io/tarantool/driver/integration/ProxyTruncateIT.java

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,27 @@
11
package io.tarantool.driver.integration;
22

3-
import io.tarantool.driver.core.ClusterTarantoolTupleClient;
4-
import io.tarantool.driver.api.tuple.DefaultTarantoolTupleFactory;
5-
import io.tarantool.driver.core.ProxyTarantoolTupleClient;
63
import io.tarantool.driver.api.TarantoolClientConfig;
74
import io.tarantool.driver.api.TarantoolClusterAddressProvider;
8-
import io.tarantool.driver.api.TarantoolServerAddress;
9-
import io.tarantool.driver.api.tuple.TarantoolTupleFactory;
105
import io.tarantool.driver.api.TarantoolResult;
6+
import io.tarantool.driver.api.TarantoolServerAddress;
117
import io.tarantool.driver.api.conditions.Conditions;
128
import io.tarantool.driver.api.space.TarantoolSpaceOperations;
9+
import io.tarantool.driver.api.tuple.DefaultTarantoolTupleFactory;
1310
import io.tarantool.driver.api.tuple.TarantoolTuple;
11+
import io.tarantool.driver.api.tuple.TarantoolTupleFactory;
1412
import io.tarantool.driver.auth.SimpleTarantoolCredentials;
1513
import io.tarantool.driver.auth.TarantoolCredentials;
1614
import io.tarantool.driver.cluster.BinaryClusterDiscoveryEndpoint;
1715
import io.tarantool.driver.cluster.BinaryDiscoveryClusterAddressProvider;
1816
import io.tarantool.driver.cluster.TarantoolClusterDiscoveryConfig;
1917
import io.tarantool.driver.cluster.TestWrappedClusterAddressProvider;
20-
18+
import io.tarantool.driver.core.ClusterTarantoolTupleClient;
19+
import io.tarantool.driver.core.ProxyTarantoolTupleClient;
2120
import io.tarantool.driver.mappers.DefaultMessagePackMapperFactory;
2221
import org.junit.jupiter.api.BeforeAll;
22+
import org.junit.jupiter.api.BeforeEach;
2323
import org.junit.jupiter.api.Test;
24+
2425
import java.util.Collections;
2526

2627
import static io.tarantool.driver.integration.Utils.checkSpaceIsEmpty;
@@ -49,7 +50,11 @@ public static void setUp() throws Exception {
4950
USER_NAME = container.getUsername();
5051
PASSWORD = container.getPassword();
5152
initClient();
52-
truncateSpace(TEST_SPACE_NAME);
53+
}
54+
55+
@BeforeEach
56+
public void truncateSpace() {
57+
client.space(TEST_SPACE_NAME).truncate().join();
5358
}
5459

5560
private static TarantoolClusterAddressProvider getClusterAddressProvider() {
@@ -130,8 +135,4 @@ public void test_truncateEmptySpace_shouldNotThrowExceptionsAndSpaceShouldBeEmpt
130135
assertDoesNotThrow(() -> testSpace.truncate().join());
131136
checkSpaceIsEmpty(testSpace);
132137
}
133-
134-
private static void truncateSpace(String spaceName) {
135-
client.space(spaceName).truncate().join();
136-
}
137138
}

src/test/java/io/tarantool/driver/integration/RetryingTarantoolTupleClientIT.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ void testInfiniteRetryTimeoutReached_withTarantoolException() throws Exception {
179179
TarantoolRequestRetryPolicies
180180
.unbound(t -> true)
181181
.withRequestTimeout(20) //requestTimeout
182-
.withOperationTimeout(200) //operationTimeout
182+
.withOperationTimeout(500) //operationTimeout
183183
.build());
184184

185185
CompletableFuture<List<?>> f = retryingClient
@@ -207,7 +207,7 @@ void testInfiniteRetryTimeoutReached_withTimeout() throws Exception {
207207
TarantoolRequestRetryPolicies
208208
.unbound()
209209
.withRequestTimeout(20) //requestTimeout
210-
.withOperationTimeout(200) //operationTimeout
210+
.withOperationTimeout(500) //operationTimeout
211211
.build());
212212

213213
client.call("reset_request_counters");

src/test/java/io/tarantool/driver/integration/SharedCartridgeContainer.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44
import org.slf4j.LoggerFactory;
55
import org.testcontainers.containers.TarantoolCartridgeContainer;
66
import org.testcontainers.containers.output.Slf4jLogConsumer;
7+
import org.testcontainers.containers.wait.strategy.Wait;
8+
import org.testcontainers.containers.wait.strategy.WaitStrategy;
9+
10+
import java.time.Duration;
711

812
abstract class SharedCartridgeContainer {
913

@@ -14,7 +18,9 @@ abstract class SharedCartridgeContainer {
1418
"cartridge/instances.yml",
1519
"cartridge/topology.lua")
1620
.withDirectoryBinding("cartridge")
17-
.withLogConsumer(new Slf4jLogConsumer(logger));
21+
.withLogConsumer(new Slf4jLogConsumer(logger))
22+
.waitingFor(Wait.forLogMessage(".*Listening HTTP on.*", 4))
23+
.withStartupTimeout(Duration.ofMinutes(2));
1824

1925
protected static void startCluster() {
2026
if (!container.isRunning()) {

src/test/java/io/tarantool/driver/integration/SharedCartridgeContainerMixedInstances.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
import org.slf4j.LoggerFactory;
55
import org.testcontainers.containers.TarantoolCartridgeContainer;
66
import org.testcontainers.containers.output.Slf4jLogConsumer;
7+
import org.testcontainers.containers.wait.strategy.Wait;
8+
9+
import java.time.Duration;
710

811
abstract class SharedCartridgeContainerMixedInstances {
912

@@ -14,7 +17,9 @@ abstract class SharedCartridgeContainerMixedInstances {
1417
"cartridge/instances.yml",
1518
"cartridge/topology_mixed.lua")
1619
.withDirectoryBinding("cartridge")
17-
.withLogConsumer(new Slf4jLogConsumer(logger));
20+
.withLogConsumer(new Slf4jLogConsumer(logger))
21+
.waitingFor(Wait.forLogMessage(".*Listening HTTP on.*", 4))
22+
.withStartupTimeout(Duration.ofMinutes(2));
1823

1924
protected static void startCluster() {
2025
if (!container.isRunning()) {

src/test/resources/cartridge/instances.yml

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,21 +18,6 @@ testapp.s1-master:
1818
advertise_uri: localhost:3302
1919
http_port: 8082
2020

21-
testapp.s1-replica:
22-
workdir: ./tmp/db_dev/3303
23-
advertise_uri: localhost:3303
24-
http_port: 8083
25-
26-
testapp.s2-master:
27-
workdir: ./tmp/db_dev/3304
28-
advertise_uri: localhost:3304
29-
http_port: 8084
30-
31-
testapp.s2-replica:
32-
workdir: ./tmp/db_dev/3305
33-
advertise_uri: localhost:3305
34-
http_port: 8085
35-
3621
testapp-stateboard:
3722
workdir: ./tmp/db_dev/3310
3823
listen: localhost:3310

src/test/resources/cartridge/replicasets.yml

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,6 @@ app-router-second:
1919
s1-storage:
2020
instances:
2121
- s1-master
22-
- s1-replica
23-
roles:
24-
- vshard-storage
25-
- crud-storage
26-
- app.roles.api_storage
27-
weight: 1
28-
all_rw: false
29-
vshard_group: default
30-
s2-storage:
31-
instances:
32-
- s2-master
33-
- s2-replica
3422
roles:
3523
- vshard-storage
3624
- crud-storage

src/test/resources/cartridge/topology.lua

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,6 @@ replicasets = { {
1414
}, {
1515
alias = 's1-storage',
1616
roles = { 'vshard-storage', 'app.roles.api_storage' },
17-
join_servers = { { uri = 'localhost:3302' }, { uri = 'localhost:3303' } }
18-
}, {
19-
alias = 's2-storage',
20-
roles = { 'vshard-storage', 'app.roles.api_storage' },
21-
join_servers = { { uri = 'localhost:3304' }, { uri = 'localhost:3305' } }
17+
join_servers = { { uri = 'localhost:3302' } }
2218
} }
2319
return cartridge.admin_edit_topology({ replicasets = replicasets })

0 commit comments

Comments
 (0)