에서 이전 블로그 사용 방법을 설명한 게시물 Docker 컨테이너를 실행하여 테스트합니다. 두 게시물 모두 클러스터와 데이터가 이미 구성된 상태에서 자체 Couchbase Docker 이미지를 빌드해야 한다는 요구 사항이 있었습니다. 이 게시물에서는 테스트 설정 단계에서 공식 Docker 이미지를 사용하여 원하는 대로 클러스터를 설정하는 방법을 알려드리겠습니다.
사용자 정의 카우치베이스 테스트 컨테이너
테스트 컨테이너는 이미 몇 가지 특정 유형의 컨테이너를 지원하는데, 특히 관계형 세계에서 볼 수 있듯이 문서. 기본 데이터베이스를 직접 사용할 수 있는 JDBC 연결과 같은 몇 가지 고급 기능을 제공합니다. 같은 맥락에서 테스트 중에 클러스터와 버킷을 구성할 수 있는 사용자 정의 CouchbaseContainer를 만들 수도 있습니다.
이 함수는 도커 이미지를 시작하고 구성된 CouchbaseCluster 인스턴스를 반환합니다. 먼저 기본 도커 이미지 식별자를 정의하고 Liveness 포트를 포트 8091로 정의합니다. 이 포트는 '/ui/index.html#/' 경로에 대한 기본 HTTP 대기 전략에 의해 테스트될 포트입니다. 이 페이지에 도달하면 클러스터 설정을 시작할 수 있습니다.
1 2 3 4 5 6 7 8 9 |
public 카우치베이스 컨테이너() { super("couchbase:4.5.0"); } @오버라이드 보호됨 정수 getLivenessCheckPort() { 반환 getMappedPort(8091); } |
두 번째 단계는 구성 메서드를 재정의하여 필요한 모든 포트를 노출하고 HTTP 대기 전략을 설정하는 것입니다,
1 2 3 4 5 6 |
@오버라이드 보호됨 void 구성() { 추가 노출된 포트(8091, 8092, 8093, 8094, 11207, 11210, 11211, 18091, 18092, 18093); 설정 대기 전략(new HttpWaitStrategy().forPath("/ui/index.html#/")); } |
이 시점에서 일반 컨테이너를 테스트할 수 있습니다. Couchbase를 구성해야 하는 상태에서 이미지를 실행할 수 있습니다. 마법사의 모든 단계를 거쳐야 합니다. 이러한 단계는 CLI 도구 또는 REST API를 통해 자동화할 수 있습니다. 여기서는 API를 사용하여 클러스터를 설정하겠습니다.
세 가지 필수 호출을 수행해야 합니다. 하나는 램 할당량을 설정하는 것이고, 하나는 관리자 사용자의 사용자 이름과 비밀번호를 설정하는 것이고, 다른 하나는 클러스터에서 사용 가능한 서비스(키/값, 인덱스, 쿼리 및 fts)를 설정하는 것입니다.
curl을 사용하면 이러한 호출은 다음과 같이 표시됩니다:
1 2 3 4 |
curl -v -X POST http://192.168.99.100:8091/pools/default -d memoryQuota=300 -d indexMemoryQuota=300 curl -v http://192.168.99.100:8091/node/controller/setupServices -d 'services=kv%2Cn1ql%2Cindex' curl -v -X POST curl -v -X POST http://192.168.99.100:8091/settings/web -d 포트=8091 -d 사용자 이름=관리자 -d 비밀번호=비밀번호 |
Java에서 POST를 수행하는 방법은 여러 가지가 있으며, 다음은 그 예입니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
public void callCouchbaseRestAPI(문자열 URL, 문자열 페이로드, 문자열 사용자 이름, 문자열 비밀번호) 던지기 IOException { HttpURLConnection httpConnection = (HttpURLConnection) ((new URL(URL).오픈커넥션())); httpConnection.setDoOutput(true); httpConnection.setDoInput(true); httpConnection.설정 요청 방법("POST"); httpConnection.설정 요청 속성("콘텐츠 유형", "application/x-www-form-urlencoded"); 만약 (사용자 이름 != null) { 문자열 인코딩 = Base64.encode((사용자 이름 + ":" + 비밀번호).getBytes("UTF-8")); httpConnection.설정 요청 속성("권한 부여", "기본 "+인코딩); } 데이터 출력 스트림 out = new 데이터 출력 스트림(httpConnection.getOutputStream()); out.쓰기 바이트(페이로드); out.플러시(); out.닫기(); httpConnection.getResponseCode(); httpConnection.연결 끊기(); } |
이 모든 통화는 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 정적 카우치베이스 컨테이너 카우치베이스 = new 카우치베이스 컨테이너(); @테스트 public void testSimple() 던지기 예외 { 카우치베이스클러스터 cc = 카우치베이스.geCouchbaseCluster(); ClusterManager cm = cc.클러스터 관리자("관리자","비밀번호"); 버킷 설정 설정 = 기본 버킷 설정.빌더() .활성화Flush(true).이름("default").할당량(100).복제본(0).유형(버킷 유형.터치베이스).빌드(); 설정 = cm.삽입 버킷(설정); 카우치베이스 대기 전략 s = new 카우치베이스 대기 전략(); s.withBasicCredentials("관리자", "비밀번호"); s.waitUntilReady(카우치베이스); 버킷 버킷 = cc.오픈버킷("default"); Assert.assertNotNull(버킷); } |
모든 데이터 샘플을 가져온 상태에서 K/V 서비스만 실행하려는 경우:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
public 클래스 카우치베이스 드라이버 테스트 { @ClassRule public 정적 카우치베이스 컨테이너 카우치베이스 = new 카우치베이스 컨테이너() .withBeerSample(true) .withGamesIMSample(true) .위드 트래블 샘플(true) .withFTS(false) .withIndex(false) .withQuery(false); @테스트 public void testSimple() 던지기 예외 { 카우치베이스클러스터 cc = 카우치베이스.geCouchbaseCluster(); ClusterManager cm = cc.클러스터 관리자("관리자","비밀번호"); 목록 버킷 = cm.getBuckets(); Assert.assertNotNull(버킷); Assert.assertTrue(버킷.크기() == 3); } } |
보시다시피 이것은 매우 간단하며 Docker만 설치되어 있으면 누구나 Couchbase에 대해 테스트를 실행할 수 있습니다.
결론
이 기능이 마음에 드시고 테스트 중에 Couchbase 클러스터를 설정하기 위한 추가 구성 및 바로 가기를 원하시면 아래 댓글로 알려주세요.