-
-
Notifications
You must be signed in to change notification settings - Fork 1.6k
/
MongoDBContainerTest.java
108 lines (95 loc) · 4.14 KB
/
MongoDBContainerTest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
package org.testcontainers.containers;
import com.mongodb.ReadConcern;
import com.mongodb.ReadPreference;
import com.mongodb.TransactionOptions;
import com.mongodb.WriteConcern;
import com.mongodb.client.ClientSession;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.TransactionBody;
import org.bson.Document;
import org.junit.Test;
import org.testcontainers.utility.DockerImageName;
import static org.assertj.core.api.Assertions.assertThat;
public class MongoDBContainerTest {
/**
* Taken from <a href="https://docs.mongodb.com/manual/core/transactions/">https://docs.mongodb.com</a>
*/
@Test
public void shouldExecuteTransactions() {
try (
// creatingMongoDBContainer {
final MongoDBContainer mongoDBContainer = new MongoDBContainer(DockerImageName.parse("mongo:4.0.10"))
// }
) {
// startingMongoDBContainer {
mongoDBContainer.start();
// }
final String mongoRsUrl = mongoDBContainer.getReplicaSetUrl();
assertThat(mongoRsUrl).isNotNull();
final String connectionString = mongoDBContainer.getConnectionString();
final MongoClient mongoSyncClientBase = MongoClients.create(connectionString);
final MongoClient mongoSyncClient = MongoClients.create(mongoRsUrl);
mongoSyncClient
.getDatabase("mydb1")
.getCollection("foo")
.withWriteConcern(WriteConcern.MAJORITY)
.insertOne(new Document("abc", 0));
mongoSyncClient
.getDatabase("mydb2")
.getCollection("bar")
.withWriteConcern(WriteConcern.MAJORITY)
.insertOne(new Document("xyz", 0));
mongoSyncClientBase
.getDatabase("mydb3")
.getCollection("baz")
.withWriteConcern(WriteConcern.MAJORITY)
.insertOne(new Document("def", 0));
final ClientSession clientSession = mongoSyncClient.startSession();
final TransactionOptions txnOptions = TransactionOptions
.builder()
.readPreference(ReadPreference.primary())
.readConcern(ReadConcern.LOCAL)
.writeConcern(WriteConcern.MAJORITY)
.build();
final String trxResult = "Inserted into collections in different databases";
TransactionBody<String> txnBody = () -> {
final MongoCollection<Document> coll1 = mongoSyncClient.getDatabase("mydb1").getCollection("foo");
final MongoCollection<Document> coll2 = mongoSyncClient.getDatabase("mydb2").getCollection("bar");
coll1.insertOne(clientSession, new Document("abc", 1));
coll2.insertOne(clientSession, new Document("xyz", 999));
return trxResult;
};
try {
final String trxResultActual = clientSession.withTransaction(txnBody, txnOptions);
assertThat(trxResultActual).isEqualTo(trxResult);
} catch (RuntimeException re) {
throw new IllegalStateException(re.getMessage(), re);
} finally {
clientSession.close();
mongoSyncClient.close();
}
}
}
@Test
public void supportsMongoDB_4_4() {
try (final MongoDBContainer mongoDBContainer = new MongoDBContainer(DockerImageName.parse("mongo:4.4"))) {
mongoDBContainer.start();
}
}
@Test
public void shouldTestDatabaseName() {
try (final MongoDBContainer mongoDBContainer = new MongoDBContainer(DockerImageName.parse("mongo:4.0.10"))) {
mongoDBContainer.start();
final String databaseName = "my-db";
assertThat(mongoDBContainer.getReplicaSetUrl(databaseName)).endsWith(databaseName);
}
}
@Test
public void supportsMongoDB_6() {
try (final MongoDBContainer mongoDBContainer = new MongoDBContainer("mongo:6.0.1")) {
mongoDBContainer.start();
}
}
}