package io.reactivex.netty.protocol.http.client.events;
import io.netty.buffer.ByteBuf;
import io.reactivex.netty.client.Host;
import io.reactivex.netty.client.pool.SingleHostPoolingProviderFactory;
import io.reactivex.netty.protocol.http.client.HttpClient;
import io.reactivex.netty.protocol.http.client.HttpClientRequest;
import io.reactivex.netty.protocol.http.client.HttpClientResponse;
import io.reactivex.netty.protocol.http.server.HttpServerRule;
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;
public class HttpClientEventsTest {
@Rule
public final HttpServerRule serverRule = new HttpServerRule();
@Test(timeout = 60000)
public void testEventsPublished() throws Exception {
HttpClientEventsListenerImpl listener = sendRequests(false);
listener.getTcpDelegate().assertMethodCalled(ClientEvent.ConnectStart);
listener.getTcpDelegate().assertMethodCalled(ClientEvent.ConnectSuccess);
listener.getTcpDelegate().assertMethodCalled(Event.WriteStart);
listener.getTcpDelegate().assertMethodCalled(Event.WriteSuccess);
listener.getTcpDelegate().assertMethodCalled(Event.FlushStart);
listener.getTcpDelegate().assertMethodCalled(Event.FlushSuccess);
listener.getTcpDelegate().assertMethodCalled(Event.BytesRead);
}
@Test(timeout = 60000)
public void testPooledEventsPublished() throws Exception {
HttpClientEventsListenerImpl listener = sendRequests(true);
listener.getTcpDelegate().assertMethodCalled(ClientEvent.AcquireStart);
listener.getTcpDelegate().assertMethodCalled(ClientEvent.AcquireSuccess);
listener.getTcpDelegate().assertMethodCalled(ClientEvent.ConnectStart);
listener.getTcpDelegate().assertMethodCalled(ClientEvent.ConnectSuccess);
listener.getTcpDelegate().assertMethodCalled(Event.WriteStart);
listener.getTcpDelegate().assertMethodCalled(Event.WriteSuccess);
listener.getTcpDelegate().assertMethodCalled(Event.FlushStart);
listener.getTcpDelegate().assertMethodCalled(Event.FlushSuccess);
listener.getTcpDelegate().assertMethodCalled(Event.BytesRead);
}
protected HttpClientEventsListenerImpl sendRequests(boolean pool) {
serverRule.startServer();
HttpClientEventsListenerImpl listener = new HttpClientEventsListenerImpl();
if (pool) {
SingleHostPoolingProviderFactory<ByteBuf, ByteBuf> provider =
SingleHostPoolingProviderFactory.createBounded(10);
Host host = new Host(serverRule.getServerAddress());
serverRule.setupClient(HttpClient.newClient(provider, Observable.just(host)));
}
serverRule.getClient().subscribe(listener);
HttpClientRequest<ByteBuf, ByteBuf> request = serverRule.getClient().createGet("/");
HttpClientResponse<ByteBuf> resp = serverRule.sendRequest(request);
serverRule.assertResponseContent(resp);
return listener;
}
}