Search in sources :

Example 1 with WatchResponse

use of io.etcd.jetcd.api.WatchResponse in project jetcd by coreos.

the class WatchUnitTest method testWatcherListenForMultiplePuts.

@Test
public void testWatcherListenForMultiplePuts() throws InterruptedException {
    CountDownLatch latch = new CountDownLatch(2);
    List<io.etcd.jetcd.watch.WatchResponse> responses = new ArrayList<>();
    Watch.Listener listener = Watch.listener(r -> {
        responses.add(r);
        latch.countDown();
    });
    try (Watch.Watcher watcher = watchClient.watch(KEY, listener)) {
        WatchResponse createdResponse = createWatchResponse(0);
        responseObserverRef.get().onNext(createdResponse);
        WatchResponse resp1 = WatchResponse.newBuilder().setWatchId(0).addEvents(Event.newBuilder().setType(EventType.PUT).setKv(io.etcd.jetcd.api.KeyValue.newBuilder().setModRevision(2).build()).build()).build();
        WatchResponse resp2 = WatchResponse.newBuilder().setWatchId(0).addEvents(Event.newBuilder().setType(EventType.PUT).setKv(io.etcd.jetcd.api.KeyValue.newBuilder().setModRevision(3).build()).build()).build();
        responseObserverRef.get().onNext(resp1);
        responseObserverRef.get().onNext(resp2);
        latch.await(4, TimeUnit.SECONDS);
        assertThat(responses).hasSize(2);
        assertEqualOnWatchResponses(responses.get(0), new io.etcd.jetcd.watch.WatchResponse(resp1));
        assertEqualOnWatchResponses(responses.get(1), new io.etcd.jetcd.watch.WatchResponse(resp2));
    }
}
Also used : ArrayList(java.util.ArrayList) Watch(io.etcd.jetcd.Watch) CountDownLatch(java.util.concurrent.CountDownLatch) WatchResponse(io.etcd.jetcd.api.WatchResponse) Test(org.junit.jupiter.api.Test)

Example 2 with WatchResponse

use of io.etcd.jetcd.api.WatchResponse in project jetcd by coreos.

the class WatchUnitTest method testWatcherCreateOnCompactionError.

@Test
public void testWatcherCreateOnCompactionError() throws InterruptedException {
    CountDownLatch latch = new CountDownLatch(1);
    AtomicReference<Throwable> ref = new AtomicReference<>();
    Watch.Listener listener = Watch.listener(r -> {
    }, t -> {
        ref.set(t);
        latch.countDown();
    });
    try (Watch.Watcher watcher = watchClient.watch(KEY, listener)) {
        WatchResponse createdResponse = createWatchResponse(0);
        responseObserverRef.get().onNext(createdResponse);
        WatchResponse compactedResponse = WatchResponse.newBuilder().setCanceled(true).setCompactRevision(2).build();
        responseObserverRef.get().onNext(compactedResponse);
        latch.await(4, TimeUnit.SECONDS);
        assertThat(ref.get()).isNotNull();
        assertThat(ref.get()).isInstanceOf(EtcdException.class).hasFieldOrPropertyWithValue("compactedRevision", 2L);
    }
}
Also used : Watch(io.etcd.jetcd.Watch) AtomicReference(java.util.concurrent.atomic.AtomicReference) CountDownLatch(java.util.concurrent.CountDownLatch) WatchResponse(io.etcd.jetcd.api.WatchResponse) EtcdException(io.etcd.jetcd.common.exception.EtcdException) Test(org.junit.jupiter.api.Test)

Example 3 with WatchResponse

use of io.etcd.jetcd.api.WatchResponse in project jetcd by coreos.

the class WatchUnitTest method testWatcherCreateOnCancellationWithNoReason.

@Test
public void testWatcherCreateOnCancellationWithNoReason() throws InterruptedException {
    CountDownLatch latch = new CountDownLatch(1);
    AtomicReference<Throwable> ref = new AtomicReference<>();
    Watch.Listener listener = Watch.listener(r -> {
    }, t -> {
        ref.set(t);
        latch.countDown();
    });
    try (Watch.Watcher watcher = watchClient.watch(KEY, listener)) {
        WatchResponse createdResponse = createWatchResponse(0);
        responseObserverRef.get().onNext(createdResponse);
        WatchResponse canceledResponse = WatchResponse.newBuilder().setCanceled(true).build();
        responseObserverRef.get().onNext(canceledResponse);
        latch.await(4, TimeUnit.SECONDS);
        assertThat(ref.get()).isNotNull();
        assertThat(ref.get()).isInstanceOf(EtcdException.class).hasMessageContaining("etcdserver: mvcc: required revision is a future revision");
    }
}
Also used : Watch(io.etcd.jetcd.Watch) AtomicReference(java.util.concurrent.atomic.AtomicReference) CountDownLatch(java.util.concurrent.CountDownLatch) WatchResponse(io.etcd.jetcd.api.WatchResponse) EtcdException(io.etcd.jetcd.common.exception.EtcdException) Test(org.junit.jupiter.api.Test)

Example 4 with WatchResponse

use of io.etcd.jetcd.api.WatchResponse in project jetcd by coreos.

the class WatchUnitTest method testWatcherWithRequireLeaderErrsOutOnNoLeader.

@Test
public void testWatcherWithRequireLeaderErrsOutOnNoLeader() throws InterruptedException {
    CountDownLatch latch = new CountDownLatch(1);
    AtomicReference<Throwable> ref = new AtomicReference<>();
    Watch.Listener listener = Watch.listener(r -> {
    }, t -> {
        ref.set(t);
        latch.countDown();
    });
    try (Watch.Watcher watcher = watchClient.watch(KEY, listener)) {
        WatchResponse createdResponse = createWatchResponse(0);
        responseObserverRef.get().onNext(createdResponse);
        responseObserverRef.get().onError(Status.UNAVAILABLE.withDescription(Errors.NO_LEADER_ERROR_MESSAGE).asRuntimeException());
        latch.await(4, TimeUnit.SECONDS);
        assertThat(ref.get()).isNotNull();
        assertThat(ref.get()).isNotNull();
        assertThat(ref.get()).isInstanceOf(EtcdException.class).hasMessageContaining(Errors.NO_LEADER_ERROR_MESSAGE);
        final WatchImpl.WatcherImpl wimpl = (WatchImpl.WatcherImpl) watcher;
        assertThat(wimpl.isClosed()).isTrue();
    }
}
Also used : Watch(io.etcd.jetcd.Watch) AtomicReference(java.util.concurrent.atomic.AtomicReference) CountDownLatch(java.util.concurrent.CountDownLatch) WatchResponse(io.etcd.jetcd.api.WatchResponse) EtcdException(io.etcd.jetcd.common.exception.EtcdException) Test(org.junit.jupiter.api.Test)

Example 5 with WatchResponse

use of io.etcd.jetcd.api.WatchResponse in project jetcd by coreos.

the class WatchUnitTest method testWatcherCreateOnCancellationWithReason.

@Test
public void testWatcherCreateOnCancellationWithReason() throws InterruptedException {
    CountDownLatch latch = new CountDownLatch(1);
    AtomicReference<Throwable> ref = new AtomicReference<>();
    Watch.Listener listener = Watch.listener(r -> {
    }, t -> {
        ref.set(t);
        latch.countDown();
    });
    try (Watch.Watcher watcher = watchClient.watch(KEY, listener)) {
        WatchResponse createdResponse = createWatchResponse(0);
        responseObserverRef.get().onNext(createdResponse);
        WatchResponse canceledResponse = WatchResponse.newBuilder().setCanceled(true).setCancelReason("bad reason").build();
        responseObserverRef.get().onNext(canceledResponse);
        latch.await(4, TimeUnit.SECONDS);
        assertThat(ref.get()).isNotNull();
        assertThat(ref.get()).isInstanceOf(EtcdException.class).hasMessageContaining(canceledResponse.getCancelReason());
    }
}
Also used : Watch(io.etcd.jetcd.Watch) AtomicReference(java.util.concurrent.atomic.AtomicReference) CountDownLatch(java.util.concurrent.CountDownLatch) WatchResponse(io.etcd.jetcd.api.WatchResponse) EtcdException(io.etcd.jetcd.common.exception.EtcdException) Test(org.junit.jupiter.api.Test)

Aggregations

WatchResponse (io.etcd.jetcd.api.WatchResponse)11 CountDownLatch (java.util.concurrent.CountDownLatch)11 Test (org.junit.jupiter.api.Test)11 Watch (io.etcd.jetcd.Watch)9 AtomicReference (java.util.concurrent.atomic.AtomicReference)8 EtcdException (io.etcd.jetcd.common.exception.EtcdException)6 ByteString (com.google.protobuf.ByteString)2 Client (io.etcd.jetcd.Client)2 Event (io.etcd.jetcd.api.Event)2 WatchCreateRequest (io.etcd.jetcd.api.WatchCreateRequest)2 WatchRequest (io.etcd.jetcd.api.WatchRequest)2 ClosedClientException (io.etcd.jetcd.common.exception.ClosedClientException)2 WatchEvent (io.etcd.jetcd.watch.WatchEvent)2 ManagedChannel (io.grpc.ManagedChannel)2 WatchCancelRequest (io.etcd.jetcd.api.WatchCancelRequest)1 ArrayList (java.util.ArrayList)1 AtomicLong (java.util.concurrent.atomic.AtomicLong)1