-
-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* First implementation * Activate primary index by default * Add compatibility with Couchbase v5 * Fix backward compatibility with older version * Use more lombok annotations to reduce boilerplate code * Move src to modules/couchbase * Add build with gradle * Replace shaded libraries with real ones * Fix waiting for Couchbase start * Add AUTHORS and README * Fix Couchbase version * Add Cleanup lombok annotation to auto close resources * Update README * Use new AbstractWaitStrategy implementation * Respect Codacy quality standards * Some optimizations * Update CHANGELOG * Replace CouchbaseWaitStrategy by HttpWaitStrategy and ResponsePredicate
- Loading branch information
Showing
9 changed files
with
527 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
Tayeb Chlyah <tayebchlyah@gmail.com> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
<img src="https://cdn.worldvectorlogo.com/logos/couchbase.svg" width="300" /> | ||
|
||
# TestContainers Couchbase Module | ||
Testcontainers module for Couchbase. [Couchbase](https://www.couchbase.com/) is a Document oriented NoSQL database. | ||
|
||
## Usage example | ||
|
||
Running Couchbase as a stand-in in a test: | ||
|
||
### Create you own bucket | ||
|
||
```java | ||
public class SomeTest { | ||
|
||
@Rule | ||
public CouchbaseContainer couchbase = new CouchbaseContainer() | ||
.withNewBucket(DefaultBucketSettings.builder() | ||
.enableFlush(true) | ||
.name('bucket-name') | ||
.quota(100) | ||
.type(BucketType.COUCHBASE) | ||
.build()); | ||
|
||
@Test | ||
public void someTestMethod() { | ||
Bucket bucket = couchbase.getCouchbaseCluster().openBucket('bucket-name') | ||
|
||
... interact with client as if using Couchbase normally | ||
``` | ||
|
||
### Use preconfigured default bucket | ||
|
||
Bucket is cleared after each test | ||
|
||
```java | ||
public class SomeTest extends AbstractCouchbaseTest { | ||
|
||
@Test | ||
public void someTestMethod() { | ||
Bucket bucket = getBucket(); | ||
|
||
... interact with client as if using Couchbase normally | ||
``` | ||
|
||
### Special consideration | ||
|
||
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 : | ||
- **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-)) | ||
- **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-)) | ||
- **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-)) | ||
- **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-)) | ||
|
||
All other ports cannot be changed by Java SDK, there are sadly fixed : | ||
- **8092** : Queries, views, XDCR | ||
- **8093** : REST/HTTP Query service | ||
- **8094** : REST/HTTP Search Service | ||
- **8095** : REST/HTTP Analytic service | ||
|
||
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. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
description = "Testcontainers :: Couchbase" | ||
|
||
dependencies { | ||
compile project(':testcontainers') | ||
compile 'com.couchbase.client:java-client:2.5.7' | ||
} |
59 changes: 59 additions & 0 deletions
59
modules/couchbase/src/main/java/org/testcontainers/couchbase/AbstractCouchbaseTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
package org.testcontainers.couchbase; | ||
|
||
import com.couchbase.client.java.Bucket; | ||
import com.couchbase.client.java.CouchbaseCluster; | ||
import com.couchbase.client.java.bucket.BucketType; | ||
import com.couchbase.client.java.cluster.DefaultBucketSettings; | ||
import com.couchbase.client.java.query.N1qlParams; | ||
import com.couchbase.client.java.query.N1qlQuery; | ||
import com.couchbase.client.java.query.consistency.ScanConsistency; | ||
import lombok.Getter; | ||
import org.junit.After; | ||
|
||
/** | ||
* @author ctayeb | ||
*/ | ||
public abstract class AbstractCouchbaseTest { | ||
|
||
public static final String TEST_BUCKET = "test"; | ||
|
||
public static final String DEFAULT_PASSWORD = "password"; | ||
|
||
@Getter(lazy = true) | ||
private final static CouchbaseContainer couchbaseContainer = initCouchbaseContainer(); | ||
|
||
@Getter(lazy = true) | ||
private final static Bucket bucket = openBucket(TEST_BUCKET, DEFAULT_PASSWORD); | ||
|
||
@After | ||
public void clear() { | ||
if (getCouchbaseContainer().isIndex() && getCouchbaseContainer().isQuery() && getCouchbaseContainer().isPrimaryIndex()) { | ||
getBucket().query( | ||
N1qlQuery.simple(String.format("DELETE FROM `%s`", getBucket().name()), | ||
N1qlParams.build().consistency(ScanConsistency.STATEMENT_PLUS))); | ||
} else { | ||
getBucket().bucketManager().flush(); | ||
} | ||
} | ||
|
||
private static CouchbaseContainer initCouchbaseContainer() { | ||
CouchbaseContainer couchbaseContainer = new CouchbaseContainer() | ||
.withNewBucket(DefaultBucketSettings.builder() | ||
.enableFlush(true) | ||
.name(TEST_BUCKET) | ||
.password(DEFAULT_PASSWORD) | ||
.quota(100) | ||
.replicas(0) | ||
.type(BucketType.COUCHBASE) | ||
.build()); | ||
couchbaseContainer.start(); | ||
return couchbaseContainer; | ||
} | ||
|
||
private static Bucket openBucket(String bucketName, String password) { | ||
CouchbaseCluster cluster = getCouchbaseContainer().getCouchbaseCluster(); | ||
Bucket bucket = cluster.openBucket(bucketName, password); | ||
Runtime.getRuntime().addShutdownHook(new Thread(bucket::close)); | ||
return bucket; | ||
} | ||
} |
Oops, something went wrong.