Когда на моем компьютере включен протокол IPv6, между запуском нового процесса JUnit и деревом тестов, отображаемым в представлении JUnit, прошло полминуты.

Когда я отключаю IPv6, тесты появляются сразу.

То, что я вижу, это то, что процесс создается, а затем зависает ок. 30 секунд в SocketImpl.connect() . С помощью netstat я вижу такую строку:

tcp6       0      1 fe80::xxxx:xxxx:x:51019 ::1:48469               SYN_SENT

Почему это происходит?

1 ответ1

1

Одна возможность:

Процесс запуска слушает только 127.0.0.1 , адрес обратной петли IPv4, но Eclipse пытается подключиться к localhost - это может быть либо 127.0.0.1 либо ::1 , причем последняя является обратной связью IPv6. В большинстве операционных систем IPv6 включен, что предпочтительнее, в результате Eclipse сначала пытается выполнить IPv6 ::1 .

Поскольку JUnitRunner не прослушивает какой-либо IPv6-адрес, ОС должна отклонять попытки подключения с помощью TCP RST (или может быть ICMP "Порт недоступен", если он правильно установлен). Однако у вас, вероятно, есть конфигурация брандмауэра, которая молча отбрасывает такие попытки, а это означает, что клиент (Eclipse) будет ожидать ответа, который никогда не отправляется.

Сначала проверьте конфигурацию брандмауэра (ip6tables) - нет никаких причин для него каким-либо образом блокировать петлевые соединения. Тест с брандмауэром временно отключен. Если ничего не помогает, проверьте, можно ли настроить Eclipse для использования 127.0.0.1 или JUnit для прослушивания как IPv6, так и IPv4.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .