Search in sources :

Example 1 with Event

use of io.lettuce.core.event.Event in project lettuce-core by lettuce-io.

the class DefaultClientResourcesUnitTests method testEventBus.

@Test
void testEventBus() {
    DefaultClientResources sut = DefaultClientResources.create();
    EventBus eventBus = sut.eventBus();
    Event event = mock(Event.class);
    StepVerifier.create(eventBus.get()).then(() -> eventBus.publish(event)).expectNext(event).thenCancel().verify();
    assertThat(TestFutures.getOrTimeout(sut.shutdown(0, 0, TimeUnit.MILLISECONDS))).isTrue();
}
Also used : Event(io.lettuce.core.event.Event) EventBus(io.lettuce.core.event.EventBus) Test(org.junit.jupiter.api.Test)

Example 2 with Event

use of io.lettuce.core.event.Event in project lettuce-core by lettuce-io.

the class ConnectionFailureIntegrationTests method emitEventOnReconnectFailure.

@Test
void emitEventOnReconnectFailure() throws Exception {
    RandomResponseServer ts = getRandomResponseServer();
    Queue<Event> queue = new ConcurrentLinkedQueue<>();
    ClientResources clientResources = ClientResources.create();
    RedisURI redisUri = RedisURI.create(defaultRedisUri.toURI());
    RedisClient client = RedisClient.create(clientResources);
    client.setOptions(ClientOptions.builder().build());
    try {
        RedisAsyncCommandsImpl<String, String> connection = (RedisAsyncCommandsImpl<String, String>) client.connect(redisUri).async();
        ConnectionWatchdog connectionWatchdog = ConnectionTestUtil.getConnectionWatchdog(connection.getStatefulConnection());
        redisUri.setPort(TestSettings.nonexistentPort());
        client.getResources().eventBus().get().subscribe(queue::add);
        connection.quit();
        Wait.untilTrue(() -> !connection.getStatefulConnection().isOpen()).waitOrTimeout();
        connectionWatchdog.run(0);
        Delay.delay(Duration.ofMillis(500));
        connection.getStatefulConnection().close();
        assertThat(queue).isNotEmpty();
        List<ReconnectFailedEvent> failures = queue.stream().filter(ReconnectFailedEvent.class::isInstance).map(ReconnectFailedEvent.class::cast).sorted(Comparator.comparingInt(ReconnectFailedEvent::getAttempt)).collect(Collectors.toList());
        assertThat(failures.size()).isGreaterThanOrEqualTo(2);
        ReconnectFailedEvent failure1 = failures.get(0);
        assertThat(failure1.localAddress()).isEqualTo(LocalAddress.ANY);
        assertThat(failure1.remoteAddress()).isInstanceOf(InetSocketAddress.class);
        assertThat(failure1.getCause()).hasMessageContaining("Invalid first byte");
        assertThat(failure1.getAttempt()).isZero();
        ReconnectFailedEvent failure2 = failures.get(1);
        assertThat(failure2.localAddress()).isEqualTo(LocalAddress.ANY);
        assertThat(failure2.remoteAddress()).isInstanceOf(InetSocketAddress.class);
        assertThat(failure2.getCause()).hasMessageContaining("Invalid first byte");
        assertThat(failure2.getAttempt()).isOne();
    } finally {
        ts.shutdown();
        FastShutdown.shutdown(client);
        FastShutdown.shutdown(clientResources);
    }
}
Also used : ClientResources(io.lettuce.core.resource.ClientResources) ReconnectFailedEvent(io.lettuce.core.event.connection.ReconnectFailedEvent) RandomResponseServer(io.lettuce.test.server.RandomResponseServer) Event(io.lettuce.core.event.Event) ReconnectFailedEvent(io.lettuce.core.event.connection.ReconnectFailedEvent) Test(org.junit.jupiter.api.Test)

Aggregations

Event (io.lettuce.core.event.Event)2 Test (org.junit.jupiter.api.Test)2 EventBus (io.lettuce.core.event.EventBus)1 ReconnectFailedEvent (io.lettuce.core.event.connection.ReconnectFailedEvent)1 ClientResources (io.lettuce.core.resource.ClientResources)1 RandomResponseServer (io.lettuce.test.server.RandomResponseServer)1