package io.reactivex.netty.protocol.tcp.client.events;
import io.netty.buffer.ByteBuf;
import io.reactivex.netty.client.pool.PooledConnection;
import io.reactivex.netty.protocol.tcp.client.MockTcpClientEventListener;
import io.reactivex.netty.protocol.tcp.client.TcpClientRule;
import io.reactivex.netty.test.util.MockClientEventListener.ClientEvent;
import io.reactivex.netty.test.util.MockConnectionEventListener.Event;
import org.junit.Rule;
import org.junit.Test;
import rx.Observable;
import rx.observers.TestSubscriber;
public class TcpClientEventsTest {
@Rule
public final TcpClientRule clientRule = new TcpClientRule();
@Test(timeout = 60000)
public void testEventsPublished() throws Exception {
MockTcpClientEventListener listener = sendRequests();
listener.assertMethodCalled(ClientEvent.AcquireStart);
listener.assertMethodCalled(ClientEvent.AcquireSuccess);
listener.assertMethodCalled(ClientEvent.ConnectStart);
listener.assertMethodCalled(ClientEvent.ConnectSuccess);
listener.assertMethodCalled(Event.WriteStart);
listener.assertMethodCalled(Event.WriteSuccess);
listener.assertMethodCalled(Event.FlushStart);
listener.assertMethodCalled(Event.FlushSuccess);
listener.assertMethodCalled(Event.BytesRead);
}
protected MockTcpClientEventListener sendRequests() {
clientRule.startServer(10);
MockTcpClientEventListener listener = new MockTcpClientEventListener();
clientRule.getClient().subscribe(listener);
PooledConnection<ByteBuf, ByteBuf> connection = clientRule.connect();
TestSubscriber<ByteBuf> testSubscriber = new TestSubscriber<>();
connection.writeStringAndFlushOnEach(Observable.just("Hello"))
.toCompletable()
.<ByteBuf>toObservable()
.concatWith(connection.getInput())
.take(1)
.subscribe(testSubscriber);
testSubscriber.awaitTerminalEvent();
testSubscriber.assertNoErrors();
return listener;
}
}