Создание исключения SocketTimeout в тестах Junit в Netty - PullRequest
2 голосов
/ 08 мая 2019

Задача

Мне нужно протестировать сценарий, в котором мой Netty Server будет выдавать исключения SocketTimeoutException, в результате чего клиент будет повторять попытки при этих сбоях и, в конечном итоге, завершаться сбоем. Я хочу добиться этого с помощью интеграционного тестирования в Junit Java

То, что я пробовал

Я попытался использовать SO_TIMEOUT = 0 как для опции, так и для дочерней опции, и в то же время сохранил SO_KEEPALIVE = false и SO_BACKLOG = 0. Также я уменьшил CONNECT_TIMEOUT_MILLIS до 0. Но ничего не сработало. Клиент все еще может подключиться к серверу. **

Пример кода ниже

 ServerBootstrap bootstrap = new ServerBootstrap()
                    .group(NativeTransportUtil.newEventLoopGroup(),       NativeTransportUtil.newEventLoopGroup())
.channel(NativeTransportUtil.serverSocketChannelClass())
                    .option(ChannelOption.SO_BACKLOG, 0)
                    .childOption(ChannelOption.SO_KEEPALIVE, false)
                    .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 0)
                    .childOption(ChannelOption.CONNECT_TIMEOUT_MILLIS, 0)
                    .option(ChannelOption.SO_BACKLOG, 0)
                    .childOption(ChannelOption.SO_BACKLOG, 0)
                    .option(ChannelOption.SO_TIMEOUT, 0)
                    .childOption(ChannelOption.SO_TIMEOUT, 0)
                    .childHandler(new NewConnectionInitializer());

            bootstrap.bind(port).syncUninterruptibly();

            client.sendSync(request);

Результаты

Фактический результат: приведенный выше код приводит к успешному подключению клиента к серверу.

Ожидаемый результат: я хочу, чтобы сервер выбросил исключение SocketTimeoutException.

...