Skip to content

Commit 655110a

Browse files
Gerschtlirnorth
andauthored
Couchbase: Update to latest version, add flushEnabled flag (#4041)
Co-authored-by: Richard North <[email protected]>
1 parent 271ae2f commit 655110a

File tree

6 files changed

+78
-40
lines changed

6 files changed

+78
-40
lines changed

docs/modules/databases/couchbase.md

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,11 @@ Running Couchbase as a stand-in in a test:
1818
[Container definition](../../../modules/couchbase/src/test/java/org/testcontainers/couchbase/CouchbaseContainerTest.java) inside_block:container_definition
1919
<!--/codeinclude-->
2020

21-
3. create an environment & cluster:
21+
3. create an cluster:
2222
<!--codeinclude-->
2323
[Cluster creation](../../../modules/couchbase/src/test/java/org/testcontainers/couchbase/CouchbaseContainerTest.java) inside_block:cluster_creation
2424
<!--/codeinclude-->
2525

26-
4. authenticate:
27-
<!--codeinclude-->
28-
[Authentication](../../../modules/couchbase/src/test/java/org/testcontainers/couchbase/CouchbaseContainerTest.java) inside_block:auth
29-
<!--/codeinclude-->
30-
3126
## Adding this module to your project dependencies
3227

3328
Add the following dependency to your `pom.xml`/`build.gradle` file:

modules/couchbase/AUTHORS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
Tayeb Chlyah <[email protected]>
2+
Tobias Happ <[email protected]>

modules/couchbase/build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,6 @@ description = "Testcontainers :: Couchbase"
33
dependencies {
44
api project(':testcontainers')
55

6-
testImplementation 'com.couchbase.client:java-client:2.7.15'
6+
testImplementation 'com.couchbase.client:java-client:3.1.6'
7+
testImplementation 'org.awaitility:awaitility:3.0.0'
78
}

modules/couchbase/src/main/java/org/testcontainers/couchbase/BucketDefinition.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,25 @@
2222
public class BucketDefinition {
2323

2424
private final String name;
25+
private boolean flushEnabled = false;
2526
private boolean queryPrimaryIndex = true;
2627
private int quota = 100;
2728

2829
public BucketDefinition(final String name) {
2930
this.name = name;
3031
}
3132

33+
/**
34+
* Enables flush for this bucket (disabled by default).
35+
*
36+
* @param flushEnabled if true, the bucket can be flushed.
37+
* @return this {@link BucketDefinition} for chaining purposes.
38+
*/
39+
public BucketDefinition withFlushEnabled(final boolean flushEnabled) {
40+
this.flushEnabled = flushEnabled;
41+
return this;
42+
}
43+
3244
/**
3345
* Sets a custom bucket quota (100MB by default).
3446
*
@@ -58,6 +70,10 @@ public String getName() {
5870
return name;
5971
}
6072

73+
public boolean hasFlushEnabled() {
74+
return flushEnabled;
75+
}
76+
6177
public boolean hasPrimaryIndex() {
6278
return queryPrimaryIndex;
6379
}

modules/couchbase/src/main/java/org/testcontainers/couchbase/CouchbaseContainer.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,7 @@ private void createBuckets() {
368368
@Cleanup Response response = doHttpRequest(MGMT_PORT, "/pools/default/buckets", "POST", new FormBody.Builder()
369369
.add("name", bucket.getName())
370370
.add("ramQuotaMB", Integer.toString(bucket.getQuota()))
371+
.add("flushEnabled", bucket.hasFlushEnabled() ? "1" : "0")
371372
.build(), true);
372373

373374
checkSuccessfulResponse(response, "Could not create bucket " + bucket.getName());

modules/couchbase/src/test/java/org/testcontainers/couchbase/CouchbaseContainerTest.java

Lines changed: 57 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,17 @@
1818

1919
import com.couchbase.client.java.Bucket;
2020
import com.couchbase.client.java.Cluster;
21-
import com.couchbase.client.java.CouchbaseCluster;
22-
import com.couchbase.client.java.document.JsonDocument;
23-
import com.couchbase.client.java.document.json.JsonObject;
24-
import com.couchbase.client.java.env.CouchbaseEnvironment;
25-
import com.couchbase.client.java.env.DefaultCouchbaseEnvironment;
21+
import com.couchbase.client.java.Collection;
22+
import com.couchbase.client.java.json.JsonObject;
2623
import org.junit.Test;
2724
import org.testcontainers.utility.DockerImageName;
2825

29-
import static org.junit.Assert.assertNotNull;
30-
import static org.junit.Assert.assertTrue;
26+
import java.time.Duration;
27+
import java.util.function.Consumer;
28+
29+
import static org.awaitility.Awaitility.await;
30+
import static org.junit.Assert.assertEquals;
31+
import static org.junit.Assert.assertFalse;
3132

3233
public class CouchbaseContainerTest {
3334

@@ -45,37 +46,60 @@ public void testBasicContainerUsage() {
4546
.withBucket(bucketDefinition)
4647
// }
4748
) {
48-
container.start();
49-
50-
// cluster_creation {
51-
CouchbaseEnvironment environment = DefaultCouchbaseEnvironment
52-
.builder()
53-
.bootstrapCarrierDirectPort(container.getBootstrapCarrierDirectPort())
54-
.bootstrapHttpDirectPort(container.getBootstrapHttpDirectPort())
55-
.build();
56-
57-
Cluster cluster = CouchbaseCluster.create(
58-
environment,
59-
container.getHost()
60-
);
61-
// }
49+
setUpClient(container, cluster -> {
50+
Bucket bucket = cluster.bucket(bucketDefinition.getName());
51+
bucket.waitUntilReady(Duration.ofSeconds(10L));
52+
53+
Collection collection = bucket.defaultCollection();
54+
55+
collection.upsert("foo", JsonObject.create().put("key", "value"));
56+
57+
JsonObject fooObject = collection.get("foo").contentAsObject();
58+
59+
assertEquals("value", fooObject.getString("key"));
60+
});
61+
}
62+
}
63+
64+
@Test
65+
public void testBucketIsFlushableIfEnabled() {
66+
BucketDefinition bucketDefinition = new BucketDefinition("mybucket")
67+
.withFlushEnabled(true);
6268

63-
try {
64-
// auth {
65-
cluster.authenticate(container.getUsername(), container.getPassword());
66-
// }
69+
try (
70+
CouchbaseContainer container = new CouchbaseContainer(COUCHBASE_IMAGE)
71+
.withBucket(bucketDefinition)
72+
) {
73+
setUpClient(container, cluster -> {
74+
Bucket bucket = cluster.bucket(bucketDefinition.getName());
75+
bucket.waitUntilReady(Duration.ofSeconds(10L));
76+
77+
Collection collection = bucket.defaultCollection();
6778

68-
Bucket bucket = cluster.openBucket(bucketDefinition.getName());
79+
collection.upsert("foo", JsonObject.create().put("key", "value"));
6980

70-
bucket.upsert(JsonDocument.create("foo", JsonObject.empty()));
81+
cluster.buckets().flushBucket(bucketDefinition.getName());
7182

72-
assertTrue(bucket.exists("foo"));
73-
assertNotNull(cluster.clusterManager().getBucket(bucketDefinition.getName()));
74-
} finally {
75-
cluster.disconnect();
76-
environment.shutdown();
77-
}
83+
await().untilAsserted(() -> assertFalse(collection.exists("foo").exists()));
84+
});
7885
}
7986
}
8087

88+
private void setUpClient(CouchbaseContainer container, Consumer<Cluster> consumer) {
89+
container.start();
90+
91+
// cluster_creation {
92+
Cluster cluster = Cluster.connect(
93+
container.getConnectionString(),
94+
container.getUsername(),
95+
container.getPassword()
96+
);
97+
// }
98+
99+
try {
100+
consumer.accept(cluster);
101+
} finally {
102+
cluster.disconnect();
103+
}
104+
}
81105
}

0 commit comments

Comments
 (0)