Skip to content

Commit

Permalink
Allow configuration of user settings to support couchbase community v…
Browse files Browse the repository at this point in the history
…ersion (#777)
  • Loading branch information
kstrek authored and kiview committed Sep 23, 2018
1 parent 8acee4d commit 05b3c01
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
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.BucketSettings;
import com.couchbase.client.java.cluster.DefaultBucketSettings;
import com.couchbase.client.java.query.N1qlParams;
import com.couchbase.client.java.query.N1qlQuery;
Expand Down Expand Up @@ -35,16 +36,20 @@ public void clear() {

protected static CouchbaseContainer initCouchbaseContainer(String imageName) {
CouchbaseContainer couchbaseContainer = (imageName == null) ? new CouchbaseContainer() : new CouchbaseContainer(imageName);
couchbaseContainer.withNewBucket(DefaultBucketSettings.builder()
couchbaseContainer.withNewBucket(getDefaultBucketSettings());
couchbaseContainer.start();
return couchbaseContainer;
}

protected static BucketSettings getDefaultBucketSettings() {
return DefaultBucketSettings.builder()
.enableFlush(true)
.name(TEST_BUCKET)
.password(DEFAULT_PASSWORD)
.quota(100)
.replicas(0)
.type(BucketType.COUCHBASE)
.build());
couchbaseContainer.start();
return couchbaseContainer;
.build();
}

protected synchronized Bucket getBucket() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ public class CouchbaseContainer extends GenericContainer<CouchbaseContainer> {
@Getter(lazy = true)
private final CouchbaseCluster couchbaseCluster = createCouchbaseCluster();

private List<BucketSettings> newBuckets = new ArrayList<>();
private List<BucketAndUserSettings> newBuckets = new ArrayList<>();

private String urlBase;

Expand Down Expand Up @@ -190,7 +190,12 @@ private void stopCluster() {
}

public CouchbaseContainer withNewBucket(BucketSettings bucketSettings) {
newBuckets.add(bucketSettings);
newBuckets.add(new BucketAndUserSettings(bucketSettings));
return self();
}

public CouchbaseContainer withNewBucket(BucketSettings bucketSettings, UserSettings userSettings) {
newBuckets.add(new BucketAndUserSettings(bucketSettings, userSettings));
return self();
}

Expand Down Expand Up @@ -247,15 +252,12 @@ private HttpWaitStrategy createNodeWaitStrategy() {
});
}

public void createBucket(BucketSettings bucketSetting, boolean primaryIndex) {
public void createBucket(BucketSettings bucketSetting, UserSettings userSettings, boolean primaryIndex) {
ClusterManager clusterManager = getCouchbaseCluster().clusterManager(clusterUsername, clusterPassword);
// Insert Bucket
BucketSettings bucketSettings = clusterManager.insertBucket(bucketSetting);
// Insert Bucket admin user
UserSettings userSettings = UserSettings.build()
.password(bucketSetting.password())
.roles(getAdminRoles(bucketSetting.name()));
try {
// Insert Bucket user
clusterManager.upsertUser(AuthDomain.LOCAL, bucketSetting.name(), userSettings);
} catch (Exception e) {
logger().warn("Unable to insert user '" + bucketSetting.name() + "', maybe you are using older version");
Expand All @@ -269,18 +271,6 @@ public void createBucket(BucketSettings bucketSetting, boolean primaryIndex) {
}
}

private List<UserRole> getAdminRoles(String bucketName) {
return Lists.newArrayList(
new UserRole("bucket_admin", bucketName),
new UserRole("views_admin", bucketName),
new UserRole("query_manage_index", bucketName),
new UserRole("query_update", bucketName),
new UserRole("query_select", bucketName),
new UserRole("query_insert", bucketName),
new UserRole("query_delete", bucketName)
);
}

public void callCouchbaseRestAPI(String url, String payload) throws IOException {
String fullUrl = urlBase + url;
@Cleanup("disconnect")
Expand Down Expand Up @@ -328,8 +318,8 @@ private String replaceCapiPort(String originalConfig) {
@Override
protected void containerIsStarted(InspectContainerResponse containerInfo) {
if (!newBuckets.isEmpty()) {
for (BucketSettings bucketSetting : newBuckets) {
createBucket(bucketSetting, primaryIndex);
for (BucketAndUserSettings bucket : newBuckets) {
createBucket(bucket.getBucketSettings(), bucket.getUserSettings(), primaryIndex);
}
}
}
Expand Down Expand Up @@ -414,4 +404,32 @@ protected enum CouchbasePort {

final boolean dynamic;
}

@Value
@AllArgsConstructor
private class BucketAndUserSettings {

private final BucketSettings bucketSettings;
private final UserSettings userSettings;

public BucketAndUserSettings(final BucketSettings bucketSettings) {
this.bucketSettings = bucketSettings;
this.userSettings = UserSettings.build()
.password(bucketSettings.password())
.roles(getDefaultAdminRoles(bucketSettings.name()));
}

private List<UserRole> getDefaultAdminRoles(String bucketName) {
return Lists.newArrayList(
new UserRole("bucket_admin", bucketName),
new UserRole("views_admin", bucketName),
new UserRole("query_manage_index", bucketName),
new UserRole("query_update", bucketName),
new UserRole("query_select", bucketName),
new UserRole("query_insert", bucketName),
new UserRole("query_delete", bucketName)
);
}

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package org.testcontainers.couchbase;

import java.util.Collections;

import org.junit.ClassRule;

import com.couchbase.client.java.cluster.UserRole;
import com.couchbase.client.java.cluster.UserSettings;

public class CouchbaseCommunity5_1Test extends BaseCouchbaseContainerTest {
@ClassRule
public static CouchbaseContainer container = initCouchbaseContainer();

private static CouchbaseContainer initCouchbaseContainer() {
CouchbaseContainer couchbaseContainer = new CouchbaseContainer("couchbase/server:community-5.1.1");

final UserSettings communityAdminUserSettings =
UserSettings.build()
.password(getDefaultBucketSettings().password())
.roles(Collections.singletonList(new UserRole("admin")));

couchbaseContainer.withNewBucket(getDefaultBucketSettings(), communityAdminUserSettings);
couchbaseContainer.start();
return couchbaseContainer;
}

@Override
public CouchbaseContainer getCouchbaseContainer() {
return container;
}
}

0 comments on commit 05b3c01

Please sign in to comment.