@Test public void testClientMetrics() throws Exception { ClientBuilder<Object, Object> builder = RxNetty.newTcpClientBuilder("localhost", 9999); MetricEventsSubject<ClientMetricsEvent<?>> eventsSubject = builder.getEventsSubject(); RxClient<Object, Object> client = builder.build(); TcpClientListener<ClientMetricsEvent<ClientMetricsEvent.EventType>> listener = factory.forTcpClient(client); client.subscribe(listener); doConnectSuccess(eventsSubject, listener); Assert.assertEquals( "Invalid total connections count after connect success.", 1, listener.getConnectionCount()); doConnectCloseSuccess(eventsSubject, listener); Assert.assertEquals( "Invalid total connections count after connection close.", 1, listener.getConnectionCount()); doConnectFailed(eventsSubject, listener); Assert.assertEquals( "Invalid total connections count after connect failure.", 1, listener.getConnectionCount()); doConnectSuccess(eventsSubject, listener); Assert.assertEquals( "Invalid total connections count after connect success.", 2, listener.getConnectionCount()); doConnCloseFailed(eventsSubject, listener); doPoolAcquireSuccess(eventsSubject, listener); Assert.assertEquals( "Invalid total connections count after connect success.", 3, listener.getConnectionCount()); Assert.assertEquals("Invalid pool acquire count.", 1, listener.getPoolAcquires()); doPoolReuse(eventsSubject, listener); Assert.assertEquals( "Invalid total connections count after connect reuse.", 3, listener.getConnectionCount()); Assert.assertEquals("Invalid pool acquire count.", 2, listener.getPoolAcquires()); doEviction(eventsSubject, listener); Assert.assertEquals( "Invalid total connections count after eviction.", 3, listener.getConnectionCount()); doPoolAcquireSuccess(eventsSubject, listener); Assert.assertEquals( "Invalid total connections count after connect success.", 4, listener.getConnectionCount()); Assert.assertEquals("Invalid pool acquire count.", 3, listener.getPoolAcquires()); doPoolReleaseSuccess(eventsSubject, listener); Assert.assertEquals( "Invalid total connections count after connect success.", 4, listener.getConnectionCount()); doWrite(eventsSubject, listener); doFlush(eventsSubject, listener); doRead(eventsSubject, listener); }
public List<String> sendEchos() { RxClient<String, String> rxClient = RxNetty.<String, String>newTcpClientBuilder("localhost", port) .withSslEngineFactory(DefaultFactories.TRUST_ALL) .pipelineConfigurator(PipelineConfigurators.textOnlyConfigurator()) .build(); Iterable<Object> echos = rxClient .connect() .flatMap( new Func1<ObservableConnection<String, String>, Observable<?>>() { @Override public Observable<?> call(final ObservableConnection<String, String> connection) { // we expect the EchoServer to output a single value at the beginning // so let's take the first value ... we can do this without it closing the // connection // because the unsubscribe will hit the ChannelObservable is a PublishSubject // so we can re-subscribe to the 'hot' stream of data Observable<String> helloMessage = connection .getInput() .take(1) .map( new Func1<String, String>() { @Override public String call(String s) { return s.trim(); } }); // output 10 values at intervals and receive the echo back Observable<String> intervalOutput = Observable.interval(500, TimeUnit.MILLISECONDS) .flatMap( new Func1<Long, Observable<String>>() { @Override public Observable<String> call(Long aLong) { return connection .writeAndFlush(String.valueOf(aLong + 1)) .map( new Func1<Void, String>() { @Override public String call(Void aVoid) { return ""; } }); } }); // capture the output from the server Observable<String> echo = connection .getInput() .map( new Func1<String, String>() { @Override public String call(String s) { return s.trim(); } }); // wait for the helloMessage then start the output and receive echo input return Observable.concat(helloMessage, Observable.merge(intervalOutput, echo)); } }) .take(10) .doOnCompleted( new Action0() { @Override public void call() { System.out.println("COMPLETED!"); } }) .toBlocking() .toIterable(); List<String> result = new ArrayList<String>(); for (Object e : echos) { System.out.println(e); result.add(e.toString()); } return result; }