From 46c9b132f9146f1bfd79580f13e41a466ee11b05 Mon Sep 17 00:00:00 2001 From: tchlyah Date: Wed, 12 Feb 2020 16:02:42 +0100 Subject: [PATCH 1/4] Fix Couchbase FTS support --- .../couchbase/CouchbaseContainer.java | 11 +++- ...java => CouchbaseServiceWaitStrategy.java} | 17 +++--- .../BaseCouchbaseContainerFtsTest.java | 60 +++++++++++++++++++ .../couchbase/Couchbase6_0Test.java | 14 +++++ .../couchbase/Couchbase6_5Test.java | 14 +++++ 5 files changed, 106 insertions(+), 10 deletions(-) rename modules/couchbase/src/main/java/org/testcontainers/couchbase/{CouchbaseQueryServiceWaitStrategy.java => CouchbaseServiceWaitStrategy.java} (72%) create mode 100644 modules/couchbase/src/test/java/org/testcontainers/couchbase/BaseCouchbaseContainerFtsTest.java create mode 100644 modules/couchbase/src/test/java/org/testcontainers/couchbase/Couchbase6_0Test.java create mode 100644 modules/couchbase/src/test/java/org/testcontainers/couchbase/Couchbase6_5Test.java diff --git a/modules/couchbase/src/main/java/org/testcontainers/couchbase/CouchbaseContainer.java b/modules/couchbase/src/main/java/org/testcontainers/couchbase/CouchbaseContainer.java index 19583d5a0e4..8e759a7c676 100644 --- a/modules/couchbase/src/main/java/org/testcontainers/couchbase/CouchbaseContainer.java +++ b/modules/couchbase/src/main/java/org/testcontainers/couchbase/CouchbaseContainer.java @@ -15,6 +15,7 @@ */ package org.testcontainers.couchbase; +import com.couchbase.client.core.service.ServiceType; import com.couchbase.client.core.utils.Base64; import com.couchbase.client.java.Bucket; import com.couchbase.client.java.CouchbaseCluster; @@ -289,13 +290,16 @@ public void createBucket(BucketSettings bucketSetting, UserSettings userSettings } catch (Exception e) { logger().warn("Unable to insert user '" + bucketSetting.name() + "', maybe you are using older version"); } + Bucket bucket = getCouchbaseCluster().openBucket(bucketSettings.name(), bucketSettings.password()); if (index) { - Bucket bucket = getCouchbaseCluster().openBucket(bucketSettings.name(), bucketSettings.password()); - new CouchbaseQueryServiceWaitStrategy(bucket).waitUntilReady(this); + new CouchbaseServiceWaitStrategy(bucket, ServiceType.QUERY).waitUntilReady(this); if (primaryIndex) { bucket.query(Index.createPrimaryIndex().on(bucketSetting.name())); } } + if (fts) { + new CouchbaseServiceWaitStrategy(bucket, ServiceType.SEARCH).waitUntilReady(this); + } } public void callCouchbaseRestAPI(String url, String payload) throws IOException { @@ -454,7 +458,8 @@ private List getDefaultAdminRoles(String bucketName) { new UserRole("query_update", bucketName), new UserRole("query_select", bucketName), new UserRole("query_insert", bucketName), - new UserRole("query_delete", bucketName) + new UserRole("query_delete", bucketName), + new UserRole("fts_admin", bucketName) ); } diff --git a/modules/couchbase/src/main/java/org/testcontainers/couchbase/CouchbaseQueryServiceWaitStrategy.java b/modules/couchbase/src/main/java/org/testcontainers/couchbase/CouchbaseServiceWaitStrategy.java similarity index 72% rename from modules/couchbase/src/main/java/org/testcontainers/couchbase/CouchbaseQueryServiceWaitStrategy.java rename to modules/couchbase/src/main/java/org/testcontainers/couchbase/CouchbaseServiceWaitStrategy.java index 853dd7d8eb7..d09459ef335 100644 --- a/modules/couchbase/src/main/java/org/testcontainers/couchbase/CouchbaseQueryServiceWaitStrategy.java +++ b/modules/couchbase/src/main/java/org/testcontainers/couchbase/CouchbaseServiceWaitStrategy.java @@ -19,18 +19,21 @@ * Created on 06/06/2017 */ @Slf4j -public class CouchbaseQueryServiceWaitStrategy extends AbstractWaitStrategy { +public class CouchbaseServiceWaitStrategy extends AbstractWaitStrategy { private final Bucket bucket; - public CouchbaseQueryServiceWaitStrategy(Bucket bucket) { + private final ServiceType serviceType; + + public CouchbaseServiceWaitStrategy(Bucket bucket, ServiceType serviceType) { this.bucket = bucket; + this.serviceType = serviceType; startupTimeout = Duration.ofSeconds(120); } @Override protected void waitUntilReady() { - log.info("Waiting for {} seconds for QUERY service", startupTimeout.getSeconds()); + log.info("Waiting for {} seconds for {} service", startupTimeout.getSeconds(), serviceType); // try to connect to the URL try { @@ -39,11 +42,11 @@ protected void waitUntilReady() { GetClusterConfigResponse clusterConfig = bucket.core() .send(new GetClusterConfigRequest()) .toBlocking().single(); - boolean queryServiceEnabled = clusterConfig.config() + boolean serviceEnabled = clusterConfig.config() .bucketConfig(bucket.name()) - .serviceEnabled(ServiceType.QUERY); - if (!queryServiceEnabled) { - throw new ContainerLaunchException("Query service not ready yet"); + .serviceEnabled(serviceType); + if (!serviceEnabled) { + throw new ContainerLaunchException(serviceType + " service not ready yet"); } }); return true; diff --git a/modules/couchbase/src/test/java/org/testcontainers/couchbase/BaseCouchbaseContainerFtsTest.java b/modules/couchbase/src/test/java/org/testcontainers/couchbase/BaseCouchbaseContainerFtsTest.java new file mode 100644 index 00000000000..b33e7343103 --- /dev/null +++ b/modules/couchbase/src/test/java/org/testcontainers/couchbase/BaseCouchbaseContainerFtsTest.java @@ -0,0 +1,60 @@ +package org.testcontainers.couchbase; + +import com.couchbase.client.core.message.search.GetSearchIndexRequest; +import com.couchbase.client.core.message.search.GetSearchIndexResponse; +import com.couchbase.client.core.message.search.UpsertSearchIndexRequest; +import com.couchbase.client.core.message.search.UpsertSearchIndexResponse; +import org.junit.Assert; +import org.junit.Test; + +public abstract class BaseCouchbaseContainerFtsTest extends BaseCouchbaseContainerTest { + private static final String FTS_INDEX_NAME = "testIndex"; + private static final String FTS_INDEX = + "{\n" + + " \"name\": \"name\",\n" + + " \"type\": \"fulltext-index\",\n" + + " \"params\": {\n" + + " \"mapping\": {\n" + + " \"default_mapping\": {\n" + + " \"enabled\": true,\n" + + " \"dynamic\": true\n" + + " },\n" + + " \"default_type\": \"_default\",\n" + + " \"default_analyzer\": \"standard\",\n" + + " \"default_datetime_parser\": \"dateTimeOptional\",\n" + + " \"default_field\": \"_all\",\n" + + " \"store_dynamic\": false,\n" + + " \"index_dynamic\": true\n" + + " },\n" + + " \"store\": {\n" + + " \"indexType\": \"scorch\",\n" + + " \"kvStoreName\": \"\"\n" + + " },\n" + + " \"doc_config\": {\n" + + " \"mode\": \"type_field\",\n" + + " \"type_field\": \"type\",\n" + + " \"docid_prefix_delim\": \"\",\n" + + " \"docid_regexp\": \"\"\n" + + " }\n" + + " },\n" + + " \"sourceType\": \"couchbase\",\n" + + " \"sourceName\": \"" + TEST_BUCKET + "\"\n" + + "}"; + + @Test + public void shouldCreateFtsIndex() { + UpsertSearchIndexResponse upsertSearchIndexResponse = getBucket().core() + .send(new UpsertSearchIndexRequest(FTS_INDEX_NAME, FTS_INDEX, TEST_BUCKET, DEFAULT_PASSWORD)) + .map(UpsertSearchIndexResponse.class::cast) + .toBlocking() + .single(); + Assert.assertTrue(upsertSearchIndexResponse.status().isSuccess()); + + GetSearchIndexResponse getSearchIndexResponse = getBucket().core() + .send(new GetSearchIndexRequest(FTS_INDEX_NAME, TEST_BUCKET, DEFAULT_PASSWORD)) + .map(GetSearchIndexResponse.class::cast) + .toBlocking() + .single(); + Assert.assertTrue(getSearchIndexResponse.status().isSuccess()); + } +} diff --git a/modules/couchbase/src/test/java/org/testcontainers/couchbase/Couchbase6_0Test.java b/modules/couchbase/src/test/java/org/testcontainers/couchbase/Couchbase6_0Test.java new file mode 100644 index 00000000000..5af37f78f4c --- /dev/null +++ b/modules/couchbase/src/test/java/org/testcontainers/couchbase/Couchbase6_0Test.java @@ -0,0 +1,14 @@ +package org.testcontainers.couchbase; + +import org.junit.Rule; + +public class Couchbase6_0Test extends BaseCouchbaseContainerFtsTest { + + @Rule + public CouchbaseContainer container = initCouchbaseContainer("couchbase:6.0.3").withFts(true); + + @Override + public CouchbaseContainer getCouchbaseContainer() { + return container; + } +} diff --git a/modules/couchbase/src/test/java/org/testcontainers/couchbase/Couchbase6_5Test.java b/modules/couchbase/src/test/java/org/testcontainers/couchbase/Couchbase6_5Test.java new file mode 100644 index 00000000000..c8b504b2f7a --- /dev/null +++ b/modules/couchbase/src/test/java/org/testcontainers/couchbase/Couchbase6_5Test.java @@ -0,0 +1,14 @@ +package org.testcontainers.couchbase; + +import org.junit.Rule; + +public class Couchbase6_5Test extends BaseCouchbaseContainerFtsTest { + + @Rule + public CouchbaseContainer container = initCouchbaseContainer("couchbase:6.5.0").withFts(true); + + @Override + public CouchbaseContainer getCouchbaseContainer() { + return container; + } +} From 88be13d01f136db756fdb61eee9baf0e340cd7fa Mon Sep 17 00:00:00 2001 From: tchlyah Date: Wed, 12 Feb 2020 16:17:15 +0100 Subject: [PATCH 2/4] Code review changes --- .../couchbase/CouchbaseContainer.java | 2 +- .../CouchbaseQueryServiceWaitStrategy.java | 17 +++++++++++++++++ .../couchbase/CouchbaseServiceWaitStrategy.java | 6 +----- 3 files changed, 19 insertions(+), 6 deletions(-) create mode 100644 modules/couchbase/src/main/java/org/testcontainers/couchbase/CouchbaseQueryServiceWaitStrategy.java diff --git a/modules/couchbase/src/main/java/org/testcontainers/couchbase/CouchbaseContainer.java b/modules/couchbase/src/main/java/org/testcontainers/couchbase/CouchbaseContainer.java index 8e759a7c676..92448a79046 100644 --- a/modules/couchbase/src/main/java/org/testcontainers/couchbase/CouchbaseContainer.java +++ b/modules/couchbase/src/main/java/org/testcontainers/couchbase/CouchbaseContainer.java @@ -292,7 +292,7 @@ public void createBucket(BucketSettings bucketSetting, UserSettings userSettings } Bucket bucket = getCouchbaseCluster().openBucket(bucketSettings.name(), bucketSettings.password()); if (index) { - new CouchbaseServiceWaitStrategy(bucket, ServiceType.QUERY).waitUntilReady(this); + new CouchbaseQueryServiceWaitStrategy(bucket).waitUntilReady(this); if (primaryIndex) { bucket.query(Index.createPrimaryIndex().on(bucketSetting.name())); } diff --git a/modules/couchbase/src/main/java/org/testcontainers/couchbase/CouchbaseQueryServiceWaitStrategy.java b/modules/couchbase/src/main/java/org/testcontainers/couchbase/CouchbaseQueryServiceWaitStrategy.java new file mode 100644 index 00000000000..bfaec348a8a --- /dev/null +++ b/modules/couchbase/src/main/java/org/testcontainers/couchbase/CouchbaseQueryServiceWaitStrategy.java @@ -0,0 +1,17 @@ +package org.testcontainers.couchbase; + +import com.couchbase.client.core.service.ServiceType; +import com.couchbase.client.java.Bucket; +import lombok.extern.slf4j.Slf4j; + +/** + * @author tchlyah + * Created on 12/02/2020 + */ +@Slf4j +public class CouchbaseQueryServiceWaitStrategy extends CouchbaseServiceWaitStrategy { + + public CouchbaseQueryServiceWaitStrategy(Bucket bucket) { + super(bucket, ServiceType.QUERY); + } +} diff --git a/modules/couchbase/src/main/java/org/testcontainers/couchbase/CouchbaseServiceWaitStrategy.java b/modules/couchbase/src/main/java/org/testcontainers/couchbase/CouchbaseServiceWaitStrategy.java index d09459ef335..92546542923 100644 --- a/modules/couchbase/src/main/java/org/testcontainers/couchbase/CouchbaseServiceWaitStrategy.java +++ b/modules/couchbase/src/main/java/org/testcontainers/couchbase/CouchbaseServiceWaitStrategy.java @@ -14,12 +14,8 @@ import static org.rnorth.ducttape.unreliables.Unreliables.retryUntilSuccess; -/** - * @author ctayeb - * Created on 06/06/2017 - */ @Slf4j -public class CouchbaseServiceWaitStrategy extends AbstractWaitStrategy { +class CouchbaseServiceWaitStrategy extends AbstractWaitStrategy { private final Bucket bucket; From 28d90086c496af1edeb1a0500c6287afe54ce2f1 Mon Sep 17 00:00:00 2001 From: tchlyah Date: Fri, 13 Mar 2020 11:44:33 +0100 Subject: [PATCH 3/4] Code review changes --- .../couchbase/CouchbaseQueryServiceWaitStrategy.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/couchbase/src/main/java/org/testcontainers/couchbase/CouchbaseQueryServiceWaitStrategy.java b/modules/couchbase/src/main/java/org/testcontainers/couchbase/CouchbaseQueryServiceWaitStrategy.java index bfaec348a8a..e5105b8ad38 100644 --- a/modules/couchbase/src/main/java/org/testcontainers/couchbase/CouchbaseQueryServiceWaitStrategy.java +++ b/modules/couchbase/src/main/java/org/testcontainers/couchbase/CouchbaseQueryServiceWaitStrategy.java @@ -5,8 +5,8 @@ import lombok.extern.slf4j.Slf4j; /** - * @author tchlyah - * Created on 12/02/2020 + * @author ctayeb + * Created on 06/06/2017 */ @Slf4j public class CouchbaseQueryServiceWaitStrategy extends CouchbaseServiceWaitStrategy { From ec0d43aa9291e260bca12ee598e243a38c3755fe Mon Sep 17 00:00:00 2001 From: tchlyah Date: Fri, 13 Mar 2020 15:19:55 +0100 Subject: [PATCH 4/4] Remove test Couchbase v6.0 --- .../testcontainers/couchbase/Couchbase6_0Test.java | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 modules/couchbase/src/test/java/org/testcontainers/couchbase/Couchbase6_0Test.java diff --git a/modules/couchbase/src/test/java/org/testcontainers/couchbase/Couchbase6_0Test.java b/modules/couchbase/src/test/java/org/testcontainers/couchbase/Couchbase6_0Test.java deleted file mode 100644 index 5af37f78f4c..00000000000 --- a/modules/couchbase/src/test/java/org/testcontainers/couchbase/Couchbase6_0Test.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.testcontainers.couchbase; - -import org.junit.Rule; - -public class Couchbase6_0Test extends BaseCouchbaseContainerFtsTest { - - @Rule - public CouchbaseContainer container = initCouchbaseContainer("couchbase:6.0.3").withFts(true); - - @Override - public CouchbaseContainer getCouchbaseContainer() { - return container; - } -}