Заставить sock.accept () вызвать исключение для тестов - PullRequest
0 голосов
/ 25 декабря 2018

Как часть набора тестов, я бы хотел, чтобы server_sock.accept () вызывал исключение (это не BlockingIOError)

server_sock = socket(family=AF_INET, type=SOCK_STREAM, proto=IPPROTO_TCP)
server_sock.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
server_sock.setblocking(False)
server_sock.bind(('', 8080))
server_sock.listen(IPPROTO_TCP)

# Would like to raise an exception
server_sock.accept()

Я знаю, что могу каким-то образом исправить объектчтобы заставить его, но я хотел бы имитировать как можно ближе к реальной ситуации, чтобы исключение было вызвано фактическими условиями сети / ОС, например, некоторым поведением на удаленном сокете.Возможно ли это?

1 Ответ

0 голосов
/ 28 декабря 2018

Вы должны форсировать его через поддельное гнездо.Если вы ищете это, вы можете найти пример кода.Или вы захотите узнать, какие исключения генерирует сокет.Вы можете найти код Python и C на github.

https://github.com/python/cpython/blob/master/Lib/socket.py

https://github.com/python/cpython/blob/master/Modules/socketmodule.c

Если вы хотите углубиться, посмотрите страницу справки accept, чтобы увидеть, чтоошибки это возвращает.

http://man7.org/linux/man-pages/man2/accept.2.html

Возможно, специфичная для Linux ошибка:

Кроме того, Linux accept () может завершиться ошибкой, если:

  EPERM  Firewall rules forbid connection.
...