Как использовать клиент rxNetty с EmbeddedChannel для тестирования - PullRequest
0 голосов
/ 18 мая 2018

Учитывая, что у меня есть TcpClient, например:

TcpClient.newClient(...)
         .pipelineConfigurator(...)
         .createConnectionRequest()
         .flatMap(c -> c.getInput())

Я бы хотел протестировать его, используя Netty's EmbeddedChannel, чтобы смоделировать взаимодействия между сервером и клиентом и сделать утверждения на обоих * 1006.* и TestSubscriber.

Я изо всех сил пытаюсь найти способ передать EmbeddedChannel, чтобы достигнуть этого.Я смотрел на channelProvider(), чтобы сделать это так:

EmbeddedChannel channel = new EmbeddedChannel()
ChannelPorivderFactory providerFactory = (a,b,c,d) -> n -> Observable.just(channel);

TestSubscriber<Object> subscriber = new TestSubscriber<>();

TcpClient.newClient(...)
         .pipelineConfigurator(...)
         .channelProvider(providerFactory)
         .createConnectionRequest()
         .flatMap(c -> c.getInput())
         .subscribe(subscriber);

embeddedChannel.writeInbound(serverMessage);
subscriber.assertValueCount(1);

Теперь я могу channel.writeInbound(someServerResponse), и я вижу в журналах проводов Netty, что байты записаны, но я получаю это сообщение

Data received on channel, but no subscriber registered. Discarding data.

Я записываю данные после подписки

что мне не хватает?

...