에서 이전 블로그 사용 방법을 설명한 게시물 Docker 컨테이너를 실행하여 테스트합니다. 두 게시물 모두 클러스터와 데이터가 이미 구성된 상태에서 자체 Couchbase Docker 이미지를 빌드해야 한다는 요구 사항이 있었습니다. 이 게시물에서는 테스트 설정 단계에서 공식 Docker 이미지를 사용하여 원하는 대로 클러스터를 설정하는 방법을 알려드리겠습니다.
사용자 정의 카우치베이스 테스트 컨테이너
테스트 컨테이너는 이미 몇 가지 특정 유형의 컨테이너를 지원하는데, 특히 관계형 세계에서 볼 수 있듯이 문서. 기본 데이터베이스를 직접 사용할 수 있는 JDBC 연결과 같은 몇 가지 고급 기능을 제공합니다. 같은 맥락에서 테스트 중에 클러스터와 버킷을 구성할 수 있는 사용자 정의 CouchbaseContainer를 만들 수도 있습니다.
이 함수는 도커 이미지를 시작하고 구성된 CouchbaseCluster 인스턴스를 반환합니다. 먼저 기본 도커 이미지 식별자를 정의하고 Liveness 포트를 포트 8091로 정의합니다. 이 포트는 '/ui/index.html#/' 경로에 대한 기본 HTTP 대기 전략에 의해 테스트될 포트입니다. 이 페이지에 도달하면 클러스터 설정을 시작할 수 있습니다.
|
1 2 3 4 5 6 7 8 9 |
public CouchbaseContainer() { super("couchbase:4.5.0"); } @Override protected Integer getLivenessCheckPort() { return getMappedPort(8091); } |
두 번째 단계는 구성 메서드를 재정의하여 필요한 모든 포트를 노출하고 HTTP 대기 전략을 설정하는 것입니다,
|
1 2 3 4 5 6 |
@Override protected void configure() { addExposedPorts(8091, 8092, 8093, 8094, 11207, 11210, 11211, 18091, 18092, 18093); setWaitStrategy(new HttpWaitStrategy().forPath("/ui/index.html#/")); } |
이 시점에서 일반 컨테이너를 테스트할 수 있습니다. Couchbase를 구성해야 하는 상태에서 이미지를 실행할 수 있습니다. 마법사의 모든 단계를 거쳐야 합니다. 이러한 단계는 CLI 도구 또는 REST API를 통해 자동화할 수 있습니다. 여기서는 API를 사용하여 클러스터를 설정하겠습니다.
세 가지 필수 호출을 수행해야 합니다. 하나는 램 할당량을 설정하는 것이고, 하나는 관리자 사용자의 사용자 이름과 비밀번호를 설정하는 것이고, 다른 하나는 클러스터에서 사용 가능한 서비스(키/값, 인덱스, 쿼리 및 fts)를 설정하는 것입니다.
curl을 사용하면 이러한 호출은 다음과 같이 표시됩니다:
|
1 2 3 4 |
curl -v -X POST https://192.168.99.100:8091/pools/default -d memoryQuota=300 -d indexMemoryQuota=300 curl -v https://192.168.99.100:8091/node/controller/setupServices -d 'services=kv%2Cn1ql%2Cindex' curl -v -X POST curl -v -X POST https://192.168.99.100:8091/settings/web -d port=8091 -d username=Administrator -d password=password |
Java에서 POST를 수행하는 방법은 여러 가지가 있으며, 다음은 그 예입니다:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
public void callCouchbaseRestAPI(String url, String payload, String username, String password) throws IOException { HttpURLConnection httpConnection = (HttpURLConnection) ((new URL(url).openConnection())); httpConnection.setDoOutput(true); httpConnection.setDoInput(true); httpConnection.setRequestMethod("POST"); httpConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); if (username != null) { String encoded = Base64.encode((username + ":" + password).getBytes("UTF-8")); httpConnection.setRequestProperty("Authorization", "Basic "+encoded); } DataOutputStream out = new DataOutputStream(httpConnection.getOutputStream()); out.writeBytes(payload); out.flush(); out.close(); httpConnection.getResponseCode(); httpConnection.disconnect(); } |
이 모든 통화는 initCluster 메서드를 호출합니다. 이러한 호출의 내용은 컨테이너에 제공된 구성에 따라 달라집니다. 몇 가지 메서드를 추가하여 활성화할 서비스, 사용자 이름과 비밀번호, 램 할당량 또는 설치할 샘플 버킷을 정의할 수 있습니다.
이 메서드를 구현한 후, CouchbaseEnvironment와 CouchbaseCluster를 노출해 보겠습니다. 환경 가져오는 함수는 initCluster 를 초기화하지 않은 경우 이 메서드를 사용하려면 맞춤형 대기 전략 가 이전 글에서 설명한 대로입니다. 기본적으로 첫 번째 노드가 정상 상태를 나타낼 때까지 '/pools/default'에서 폴링합니다.
전체 클래스의 코드는 다음과 같습니다:
사용법
CouchbaseContainer를 사용하려면 다음과 같이 하면 됩니다:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
@ClassRule public static CouchbaseContainer couchbase = new CouchbaseContainer(); @Test public void testSimple() throws Exception { CouchbaseCluster cc = couchbase.geCouchbaseCluster(); ClusterManager cm = cc.clusterManager("Administrator","password"); BucketSettings settings = DefaultBucketSettings.builder() .enableFlush(true).name("default").quota(100).replicas(0).type(BucketType.COUCHBASE).build(); settings = cm.insertBucket(settings); CouchbaseWaitStrategy s = new CouchbaseWaitStrategy(); s.withBasicCredentials("Administrator", "password"); s.waitUntilReady(couchbase); Bucket bucket = cc.openBucket("default"); Assert.assertNotNull(bucket); } |
모든 데이터 샘플을 가져온 상태에서 K/V 서비스만 실행하려는 경우:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
public class CouchbaseDriverTest { @ClassRule public static CouchbaseContainer couchbase = new CouchbaseContainer() .withBeerSample(true) .withGamesIMSample(true) .withTravelSample(true) .withFTS(false) .withIndex(false) .withQuery(false); @Test public void testSimple() throws Exception { CouchbaseCluster cc = couchbase.geCouchbaseCluster(); ClusterManager cm = cc.clusterManager("Administrator","password"); List buckets = cm.getBuckets(); Assert.assertNotNull(buckets); Assert.assertTrue(buckets.size() == 3); } } |
보시다시피 이것은 매우 간단하며 Docker만 설치되어 있으면 누구나 Couchbase에 대해 테스트를 실행할 수 있습니다.
결론
이 기능이 마음에 드시고 테스트 중에 Couchbase 클러스터를 설정하기 위한 추가 구성 및 바로 가기를 원하시면 아래 댓글로 알려주세요.