testcontainers-java

Форк
0
66 строк · 2.6 Кб
1
package org.testcontainers.containers;
2

3
import com.mongodb.ReadConcern;
4
import com.mongodb.ReadPreference;
5
import com.mongodb.TransactionOptions;
6
import com.mongodb.WriteConcern;
7
import com.mongodb.client.ClientSession;
8
import com.mongodb.client.MongoClient;
9
import com.mongodb.client.MongoClients;
10
import com.mongodb.client.MongoCollection;
11
import com.mongodb.client.TransactionBody;
12
import org.bson.Document;
13

14
import static org.assertj.core.api.Assertions.assertThat;
15

16
public class AbstractMongo {
17

18
    protected void executeTx(MongoDBContainer mongoDBContainer) {
19
        final MongoClient mongoSyncClientBase = MongoClients.create(mongoDBContainer.getConnectionString());
20
        final MongoClient mongoSyncClient = MongoClients.create(mongoDBContainer.getReplicaSetUrl());
21
        mongoSyncClient
22
            .getDatabase("mydb1")
23
            .getCollection("foo")
24
            .withWriteConcern(WriteConcern.MAJORITY)
25
            .insertOne(new Document("abc", 0));
26
        mongoSyncClient
27
            .getDatabase("mydb2")
28
            .getCollection("bar")
29
            .withWriteConcern(WriteConcern.MAJORITY)
30
            .insertOne(new Document("xyz", 0));
31
        mongoSyncClientBase
32
            .getDatabase("mydb3")
33
            .getCollection("baz")
34
            .withWriteConcern(WriteConcern.MAJORITY)
35
            .insertOne(new Document("def", 0));
36

37
        final ClientSession clientSession = mongoSyncClient.startSession();
38
        final TransactionOptions txnOptions = TransactionOptions
39
            .builder()
40
            .readPreference(ReadPreference.primary())
41
            .readConcern(ReadConcern.LOCAL)
42
            .writeConcern(WriteConcern.MAJORITY)
43
            .build();
44

45
        final String trxResult = "Inserted into collections in different databases";
46

47
        TransactionBody<String> txnBody = () -> {
48
            final MongoCollection<Document> coll1 = mongoSyncClient.getDatabase("mydb1").getCollection("foo");
49
            final MongoCollection<Document> coll2 = mongoSyncClient.getDatabase("mydb2").getCollection("bar");
50

51
            coll1.insertOne(clientSession, new Document("abc", 1));
52
            coll2.insertOne(clientSession, new Document("xyz", 999));
53
            return trxResult;
54
        };
55

56
        try {
57
            final String trxResultActual = clientSession.withTransaction(txnBody, txnOptions);
58
            assertThat(trxResultActual).isEqualTo(trxResult);
59
        } catch (RuntimeException re) {
60
            throw new IllegalStateException(re.getMessage(), re);
61
        } finally {
62
            clientSession.close();
63
            mongoSyncClient.close();
64
        }
65
    }
66
}
67

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.