
Когда на моем компьютере включен IPv6, между запуском нового процесса JUnit и появлением тестового дерева в представлении JUnit проходит полминуты.
Когда я отключаю IPv6, тесты появляются сразу.
Я вижу, что процесс создается, а затем зависает примерно на 30 секунд в SocketImpl.connect()
. С netstat
, я вижу такую строку:
tcp6 0 1 fe80::xxxx:xxxx:x:51019 ::1:48469 SYN_SENT
Почему это происходит?
решение1
Одна из возможностей:
Процесс runner прослушивает только 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.