Как смоделировать couchbase для приемочного тестирования без встроенного сервера или нового кластера только для этого? - PullRequest
0 голосов
/ 31 января 2019

Я делаю приемочные испытания для микросервиса, который подключается к couchbase ,asticsearch и Kafka.Я не хочу использовать ни один встроенный экземпляр или какой-либо тестовый кластер.Я хочу иметь возможность имитировать вызовы couchbase, но в то же время должен проверить написанные мной запросы N1QL.

Для упругого поиска я использую Wiremock и высмеиваю вызовы REST.Но для couchbase я не знаю структуру остальных вызовов, которые клиент делает в базу данных.

Кроме того, я продолжил и написал тестовый пример.После этого я высмеял все REST-вызовы, которые сделал couchbase, из сообщения об ошибке.Но я вижу, что couchbase подключается к нетти-каналу, как мне смоделировать канал?

Если нет, то есть ли лучший способ смоделировать couchbase?

RxComputationScheduler- 3|ERROR||||c.c.c.d.i.n.u.c.D.rejectedExecution|181|Failed to submit a listener notification task. Event loop shut down?
java.util.concurrent.RejectedExecutionException: event executor terminated
at com.couchbase.client.deps.io.netty.util.concurrent.SingleThreadEventExecutor.reject(SingleThreadEventExecutor.java:796)
at com.couchbase.client.deps.io.netty.util.concurrent.SingleThreadEventExecutor.offerTask(SingleThreadEventExecutor.java:336)
at com.couchbase.client.deps.io.netty.util.concurrent.SingleThreadEventExecutor.addTask(SingleThreadEventExecutor.java:329)
at com.couchbase.client.deps.io.netty.util.concurrent.SingleThreadEventExecutor.execute(SingleThreadEventExecutor.java:739)
at com.couchbase.client.deps.io.netty.util.concurrent.DefaultPromise.safeExecute(DefaultPromise.java:760)
at com.couchbase.client.deps.io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:428)
at com.couchbase.client.deps.io.netty.util.concurrent.DefaultPromise.setFailure(DefaultPromise.java:113)
at com.couchbase.client.deps.io.netty.channel.DefaultChannelPromise.setFailure(DefaultChannelPromise.java:87)
at com.couchbase.client.core.endpoint.AbstractEndpoint$3.call(AbstractEndpoint.java:381)
at com.couchbase.client.core.endpoint.AbstractEndpoint$3.call(AbstractEndpoint.java:374)
at rx.internal.operators.SingleOperatorOnErrorResumeNext$2.onError(SingleOperatorOnErrorResumeNext.java:69)
at rx.internal.operators.SingleTimeout$TimeoutSingleSubscriber$OtherSubscriber.onError(SingleTimeout.java:133)
at rx.Single$1.call(Single.java:477)
at rx.Single$1.call(Single.java:473)
at rx.Single.subscribe(Single.java:1979)
at rx.Single$18.call(Single.java:2518)
at rx.Single$18.call(Single.java:2505)
at rx.internal.operators.SingleTimeout$TimeoutSingleSubscriber.call(SingleTimeout.java:110)
at rx.internal.schedulers.EventLoopsScheduler$EventLoopWorker$2.call(EventLoopsScheduler.java:189)
at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)

Это ошибкачто я получаю.

Ответы [ 3 ]

0 голосов
/ 31 января 2019

Вы смотрели на CouchbaseMock?https://github.com/couchbase/CouchbaseMock

Из файла readme:

CouchbaseMock - это тестовый сервер, реализующий часть протокола memcached, который используется некоторыми SDK (включая C SDK) для базового тестирования.Несмотря на то, что рекомендуется проводить тестирование на реальном сервере, CouchbaseMock полезен как автономный (нет необходимости устанавливать его в систему) и для предоставления дополнительных инструментов.

0 голосов
/ 31 января 2019

Другим вариантом может быть использование модуля Testcontainers.Здесь есть один для Couchbase: https://www.testcontainers.org/modules/databases/couchbase/

Пример с сайта для сборки ведра:

public class SomeTest {

    @Rule
    public CouchbaseContainer couchbase = new CouchbaseContainer()
             .withClusterAdmin("admin", "secret")
             .withNewBucket(DefaultBucketSettings.builder()
                        .enableFlush(true)
                        .name("bucket-name")
                        .password("secret")
                        .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
    }
}
0 голосов
/ 31 января 2019

Если бы я был полон решимости сделать это, я бы делал насмешки на уровне SDK.Создайте свои собственные версии его объектов, таких как Connection и Bucket и все остальное (я обычно не работаю с Java.) Затем найдите место для внедрения этого альтернативного уровня доступа к БД в целях тестирования.Таким образом, у вас есть собственный код приложения, работающий с вашим собственным фиктивным кодом, что дает вам полный контроль.Попытка насмехаться над уровнем HTTP-вызовов, которые SDK выполняет с базой данных, поражает меня, поскольку я слишком полагаюсь на неясный материал, который Couchbase не публикует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...