package com.lambdaworks.redis.event; import static org.assertj.core.api.Assertions.assertThat; import java.util.List; import org.assertj.core.api.Condition; import org.junit.Test; import rx.Subscription; import rx.observers.TestSubscriber; import com.lambdaworks.Wait; import com.lambdaworks.redis.AbstractRedisClientTest; import com.lambdaworks.redis.event.connection.*; /** * @author Mark Paluch */ public class ConnectionEventsTriggeredTest extends AbstractRedisClientTest { @Test public void testConnectionEvents() throws Exception { TestSubscriber<Object> subscriber = TestSubscriber.create(); Subscription subscription = client.getResources().eventBus().get().filter( event -> event instanceof ConnectionEvent) .subscribe(subscriber); try { client.connect().close(); Wait.untilTrue(() -> subscriber.getOnNextEvents().size() > 3).waitOrTimeout(); } finally { subscription.unsubscribe(); } List<Object> events = subscriber.getOnNextEvents(); assertThat(events).areAtLeast(1, new ExpectedClassCondition(ConnectedEvent.class)); assertThat(events).areAtLeast(1, new ExpectedClassCondition(ConnectionActivatedEvent.class)); assertThat(events).areAtLeast(1, new ExpectedClassCondition(DisconnectedEvent.class)); assertThat(events).areAtLeast(1, new ExpectedClassCondition(ConnectionDeactivatedEvent.class)); ConnectionEvent event = (ConnectionEvent) events.get(0); assertThat(event.remoteAddress()).isNotNull(); assertThat(event.localAddress()).isNotNull(); assertThat(event.toString()).contains("->"); } private static class ExpectedClassCondition extends Condition<Object> { private final Class<?> expectedClass; public ExpectedClassCondition(Class<?> expectedClass) { this.expectedClass = expectedClass; } @Override public boolean matches(Object value) { return value != null && value.getClass().equals(expectedClass); } } }