Skip to content

Commit d80c94c

Browse files
committed
Revert "Rewrite Couchbase module. closes testcontainers#2447 (testcontainers#2491)"
This reverts commit c6e0cd9.
1 parent e911f4a commit d80c94c

File tree

13 files changed

+691
-513
lines changed

13 files changed

+691
-513
lines changed

docs/modules/databases/couchbase.md

Lines changed: 59 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,25 +8,65 @@ Testcontainers module for Couchbase. [Couchbase](https://www.couchbase.com/) is
88

99
Running Couchbase as a stand-in in a test:
1010

11-
1. Define a bucket:
12-
<!--codeinclude-->
13-
[Bucket Definition](../../../modules/couchbase/src/test/java/org/testcontainers/couchbase/CouchbaseContainerTest.java) inside_block:bucket_definition
14-
<!--/codeinclude-->
15-
16-
2. define a container:
17-
<!--codeinclude-->
18-
[Container definition](../../../modules/couchbase/src/test/java/org/testcontainers/couchbase/CouchbaseContainerTest.java) inside_block:container_definition
19-
<!--/codeinclude-->
20-
21-
3. create an environment & cluster:
22-
<!--codeinclude-->
23-
[Cluster creation](../../../modules/couchbase/src/test/java/org/testcontainers/couchbase/CouchbaseContainerTest.java) inside_block:cluster_creation
24-
<!--/codeinclude-->
25-
26-
4. authenticate:
27-
<!--codeinclude-->
28-
[Authentication](../../../modules/couchbase/src/test/java/org/testcontainers/couchbase/CouchbaseContainerTest.java) inside_block:auth
29-
<!--/codeinclude-->
11+
### Create your own bucket
12+
13+
```java
14+
public class SomeTest {
15+
16+
@Rule
17+
public CouchbaseContainer couchbase = new CouchbaseContainer()
18+
.withClusterAdmin("admin", "secret")
19+
.withNewBucket(DefaultBucketSettings.builder()
20+
.enableFlush(true)
21+
.name("bucket-name")
22+
.password("secret")
23+
.quota(100)
24+
.type(BucketType.COUCHBASE)
25+
.build());
26+
27+
@Test
28+
public void someTestMethod() {
29+
Bucket bucket = couchbase.getCouchbaseCluster().openBucket("bucket-name");
30+
31+
// ... interact with client as if using Couchbase normally
32+
}
33+
}
34+
```
35+
36+
### Use preconfigured default bucket
37+
38+
Bucket is cleared after each test
39+
40+
```java
41+
public class SomeTest extends AbstractCouchbaseTest {
42+
43+
@Test
44+
public void someTestMethod() {
45+
Bucket bucket = getBucket();
46+
47+
// ... interact with client as if using Couchbase normally
48+
}
49+
}
50+
```
51+
52+
### Special consideration
53+
54+
Couchbase container is configured to use random available [ports](https://developer.couchbase.com/documentation/server/current/install/install-ports.html) for some ports only, as [Couchbase Java SDK](https://developer.couchbase.com/documentation/server/current/sdk/java/start-using-sdk.html) permit to configure only some ports:
55+
56+
- **8091** : REST/HTTP traffic ([bootstrapHttpDirectPort](http://docs.couchbase.com/sdk-api/couchbase-java-client-2.4.6/com/couchbase/client/java/env/DefaultCouchbaseEnvironment.Builder.html#bootstrapCarrierDirectPort-int-))
57+
- **18091** : REST/HTTP traffic with SSL ([bootstrapHttpSslPort](http://docs.couchbase.com/sdk-api/couchbase-java-client-2.4.6/com/couchbase/client/java/env/DefaultCouchbaseEnvironment.Builder.html#bootstrapCarrierSslPort-int-))
58+
- **11210** : memcached ([bootstrapCarrierDirectPort](http://docs.couchbase.com/sdk-api/couchbase-java-client-2.4.6/com/couchbase/client/java/env/DefaultCouchbaseEnvironment.Builder.html#bootstrapCarrierDirectPort-int-))
59+
- **11207** : memcached SSL ([bootstrapCarrierSslPort](http://docs.couchbase.com/sdk-api/couchbase-java-client-2.4.6/com/couchbase/client/java/env/DefaultCouchbaseEnvironment.Builder.html#bootstrapCarrierSslPort-int-))
60+
61+
All other ports cannot be changed by Java SDK, there are sadly fixed:
62+
63+
- **8092** : Queries, views, XDCR
64+
- **8093** : REST/HTTP Query service
65+
- **8094** : REST/HTTP Search Service
66+
- **8095** : REST/HTTP Analytic service
67+
68+
So if you disable Query, Search and Analytic service, you can run multiple instance of this container, otherwise, you're stuck with one instance, for now.
69+
3070

3171
## Adding this module to your project dependencies
3272

modules/couchbase/build.gradle

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ description = "Testcontainers :: Couchbase"
22

33
dependencies {
44
compile project(':testcontainers')
5+
compile 'com.couchbase.client:java-client:2.7.13'
6+
compileOnly 'org.jetbrains:annotations:20.1.0'
57

6-
testCompile 'com.couchbase.client:java-client:2.7.13'
8+
testCompile project(':test-support')
79
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package org.testcontainers.couchbase;
2+
3+
import com.couchbase.client.java.Bucket;
4+
import com.couchbase.client.java.CouchbaseCluster;
5+
import com.couchbase.client.java.bucket.BucketType;
6+
import com.couchbase.client.java.cluster.BucketSettings;
7+
import com.couchbase.client.java.cluster.DefaultBucketSettings;
8+
import com.couchbase.client.java.query.N1qlParams;
9+
import com.couchbase.client.java.query.N1qlQuery;
10+
import com.couchbase.client.java.query.consistency.ScanConsistency;
11+
import org.junit.After;
12+
13+
import java.util.concurrent.TimeUnit;
14+
15+
/**
16+
* Basic class that can be used for couchbase tests. It will clear the database after every test.
17+
*/
18+
public abstract class AbstractCouchbaseTest {
19+
20+
public static final String TEST_BUCKET = "test";
21+
22+
public static final String DEFAULT_PASSWORD = "password";
23+
24+
Bucket bucket;
25+
26+
@After
27+
public void clear() {
28+
try {
29+
if (getCouchbaseContainer().isIndex() && getCouchbaseContainer().isQuery() && getCouchbaseContainer().isPrimaryIndex()) {
30+
getBucket().query(
31+
N1qlQuery.simple(String.format("DELETE FROM `%s`", getBucket().name()),
32+
N1qlParams.build().consistency(ScanConsistency.STATEMENT_PLUS)));
33+
} else {
34+
getBucket().bucketManager().flush();
35+
}
36+
} finally {
37+
bucket.close(60, TimeUnit.SECONDS);
38+
bucket = null;
39+
}
40+
}
41+
42+
protected abstract CouchbaseContainer getCouchbaseContainer();
43+
44+
protected static CouchbaseContainer initCouchbaseContainer(String imageName) {
45+
CouchbaseContainer couchbaseContainer = (imageName == null) ? new CouchbaseContainer() : new CouchbaseContainer(imageName);
46+
couchbaseContainer.withNewBucket(getDefaultBucketSettings());
47+
return couchbaseContainer;
48+
}
49+
50+
protected static BucketSettings getDefaultBucketSettings() {
51+
return DefaultBucketSettings.builder()
52+
.enableFlush(true)
53+
.name(TEST_BUCKET)
54+
.password(DEFAULT_PASSWORD)
55+
.quota(100)
56+
.replicas(0)
57+
.type(BucketType.COUCHBASE)
58+
.build();
59+
}
60+
61+
protected synchronized Bucket getBucket() {
62+
if (bucket == null) {
63+
bucket = openBucket(TEST_BUCKET, DEFAULT_PASSWORD);
64+
}
65+
return bucket;
66+
}
67+
68+
private Bucket openBucket(String bucketName, String password) {
69+
CouchbaseCluster cluster = getCouchbaseContainer().getCouchbaseCluster();
70+
return cluster.openBucket(bucketName, password);
71+
}
72+
}

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

Lines changed: 0 additions & 69 deletions
This file was deleted.

0 commit comments

Comments
 (0)