Ejemplo n.º 1
0
  @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);
  }
Ejemplo n.º 2
0
  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;
  }