Что такое неправильный IP-адрес для использования в модульных тестах?

Я пишу модульные тесты для клиентской библиотеки. Я хочу проверить соединение с неверным портом и неверным IP. Что такое хороший IP-адрес для использования, который потенциально не может быть перенаправлен куда-либо? Я не хочу делать какие-либо предположения относительно сети, на которой работает машина, на которой запущены модульные тесты. LOCALHOST кажется плохим выбором, поскольку это допустимый компьютер, на котором работает серверный компонент, и я хочу отдельно протестировать неверный порт. Есть ли недействительный IP-адрес, зарезервированный где-то в спецификации IPv4?

Ответы на вопрос(4)

Если вы ищете действительно недействительный IP-адрес (в отличие от немаршрутизируемого), вы можете воспользоваться тем, что первый байтКласс А адрес не может быть0.

Например:

0.42.42.42
 05 мая 2012 г., 09:12
Для принудительного получения «тайм-аута соединения» исключение во время модульного тестирования, более простой (и более быстрый) путь может состоять в том, чтобы смоделировать метод в вашей библиотеке сокетов, чтобы он просто генерировал это исключение. Смотрите, например.mockito.
 04 мая 2012 г., 23:08
Я думаю, что в этом случае было бы рискованно использовать неверный IP-адрес. Что, если внешний компонент / API, используемый приложением, которое тестируется, ведет себя по-разному, когда предоставляется неверный IP-адрес? (Трудно объяснить, что я имею в виду. Но допустим, что вы сохраняете IP-адрес в базе данных, в столбце с типом IP-адреса. База данных может вернуть ошибку, поскольку предоставленный IP-адрес недействителен. Когда это происходит, ваше устройство тест не пройден, но не из-за ваших собственных ошибок.)
 Ryan R.05 мая 2012 г., 01:31
Я ищу исключение для тайм-аута соединения, поэтому у @Jonathan было то, что я искал. Использование действительно & quot; неверного & quot; IP приводит к другому исключению из моей библиотеки сокетов ... может быть, проверить это тоже. Это хороший момент, хотя (+1).
 04 мая 2012 г., 23:15
@ Джонатан, я подозреваю, что спрашивающий на самом деле хочет, чтобы модульный тест вел себя таким образом (обратите внимание, что он также хочет использовать недопустимый порт, поэтому он может сначала написать отказоустойчивый тест). В любом случае это не имеет значения, так как наши ответы дополняют друг друга: ваши предоставляют технически действительные, но не подлежащие маршрутизации адреса, а мои - неверные :)
Решение Вопроса

В соответствии сRFC 5737:

The blocks 192.0.2.0/24 (TEST-NET-1), 198.51.100.0/24 (TEST-NET-2), and 203.0.113.0/24 (TEST-NET-3) are provided for use in documentation.

Это означает, что вы можете выбрать IP-адрес из следующих диапазонов:

192.0.2.0 - 192.0.2.255 198.51.100.0 - 198.51.100.255 203.0.113.0 - 203.0.113.255
 12 июн. 2015 г., 08:29
Для полноты я бы подумал2001:db8::/32 должен быть в этом ответе.
 04 мая 2012 г., 23:13
Хороший вопрос, я просто не был уверен, что ОП не хочет устанавливать какие-то фактические внутренние соединения.
 04 мая 2012 г., 23:02
Документация и модульные тесты - это две разные вещи: & quot;These blocks are not for local use, and the filters may be used in both local and public contexts.& Quot ;. Я хотел бы надеяться, что модульный тест сможет функционировать, даже если он будет действовать только на время теста. (Если этот модульный тест вообще не связан с каким-либо соединением, это будет работать.)
 04 мая 2012 г., 23:11
@ Бруно: Вопрос:"What is a good ip address to use that won't potentially be routed somewhere?" Из связанного документа:"Network operators SHOULD add [the TEST-NET-1, TEST-NET-2, and TEST-NET-3 blocks] to the list of non-routeable address spaces, and if packet filters are deployed, then this address block SHOULD be added to packet filters." Кажется, хорошо для меня.
 12 июн. 2015 г., 08:38
Я сам использовал адреса документации для модульных тестов. Но позже я начал задаваться вопросом,198.18.0.0/15 определяется вRFC 2544 может быть лучшим выбором.

Есть 3 частных IP-блока, которые вы можете использовать для таких вещей:

10/8 (10.0.0.0 - & gt; 10.255.255.255) (сетевой блок класса A старой школы)

172,16 / 12 (172,16,0 -> 172,131,255,255

196.168 / 16 (192.168.0.0 -> 192.168.255.255) (сетевой блок класса B старой школы)

254.254.254.254

Должен быть в зарезервированном для будущего использования домене ...

RFC 1700

 04 мая 2012 г., 23:00
239.0.0.0 - & gt; Все 255.255.255.255 зарезервированы для будущего использования и вообще не будут работать в любом месте.
 12 июн. 2015 г., 08:21
На самом деле255.255.255.255 был назначен смысл. Таким образом, зарезервированный диапазон только239.0.0.0 - 255.255.255.254.

Ваш ответ на вопрос