def test_retry_limited(self): inet4_servers = [ self.mox.CreateMock(wsgi_server._SingleAddressWsgiServer) for _ in range(wsgi_server._PORT_0_RETRIES) ] inet6_servers = [ self.mox.CreateMock(wsgi_server._SingleAddressWsgiServer) for _ in range(wsgi_server._PORT_0_RETRIES) ] self.mox.StubOutWithMock(wsgi_server, '_SingleAddressWsgiServer') self.mox.StubOutWithMock(socket, 'getaddrinfo') socket.getaddrinfo('localhost', 0, socket.AF_UNSPEC, socket.SOCK_STREAM, 0, socket.AI_PASSIVE).AndReturn([ (None, None, None, None, ('127.0.0.1', 0, 'baz')), (None, None, None, None, ('::1', 0, 'baz')) ]) for offset, (inet4_server, inet6_server) in enumerate( zip(inet4_servers, inet6_servers)): wsgi_server._SingleAddressWsgiServer(('127.0.0.1', 0), None).AndReturn(inet4_server) inet4_server.start() inet4_server.port = offset + 1 wsgi_server._SingleAddressWsgiServer(('::1', offset + 1), None).AndReturn(inet6_server) inet6_server.start().AndRaise( wsgi_server.BindError('message', (errno.EADDRINUSE, 'in use'))) inet4_server.quit() self.mox.ReplayAll() self.assertRaises(wsgi_server.BindError, self.server.start) self.mox.VerifyAll()
def test_ignore_other_errors(self): inet4_server = self.mox.CreateMock( wsgi_server._SingleAddressWsgiServer) inet6_server = self.mox.CreateMock( wsgi_server._SingleAddressWsgiServer) self.mox.StubOutWithMock(wsgi_server, '_SingleAddressWsgiServer') self.mox.StubOutWithMock(socket, 'getaddrinfo') socket.getaddrinfo('localhost', 0, socket.AF_UNSPEC, socket.SOCK_STREAM, 0, socket.AI_PASSIVE).AndReturn([ (None, None, None, None, ('127.0.0.1', 0, 'baz')), (None, None, None, None, ('::1', 0, 'baz')) ]) wsgi_server._SingleAddressWsgiServer(('127.0.0.1', 0), None).AndReturn(inet4_server) inet4_server.start() inet4_server.port = 123 wsgi_server._SingleAddressWsgiServer(('::1', 123), None).AndReturn(inet6_server) inet6_server.start().AndRaise( wsgi_server.BindError('message', (errno.ENOPROTOOPT, 'no protocol'))) self.mox.ReplayAll() self.server.start() self.mox.VerifyAll() self.assertItemsEqual([inet4_server], self.server._servers)
def test_retry_eaddrinuse(self): inet4_server = self.mox.CreateMock( wsgi_server._SingleAddressWsgiServer) inet6_server = self.mox.CreateMock( wsgi_server._SingleAddressWsgiServer) inet4_server_retry = self.mox.CreateMock( wsgi_server._SingleAddressWsgiServer) inet6_server_retry = self.mox.CreateMock( wsgi_server._SingleAddressWsgiServer) self.mox.StubOutWithMock(wsgi_server, '_SingleAddressWsgiServer') self.mox.StubOutWithMock(socket, 'getaddrinfo') socket.getaddrinfo('localhost', 0, socket.AF_UNSPEC, socket.SOCK_STREAM, 0, socket.AI_PASSIVE).AndReturn([ (None, None, None, None, ('127.0.0.1', 0, 'baz')), (None, None, None, None, ('::1', 0, 'baz')) ]) # First try wsgi_server._SingleAddressWsgiServer(('127.0.0.1', 0), None).AndReturn(inet4_server) inet4_server.start() inet4_server.port = 123 wsgi_server._SingleAddressWsgiServer(('::1', 123), None).AndReturn(inet6_server) inet6_server.start().AndRaise( wsgi_server.BindError('message', (errno.EADDRINUSE, 'in use'))) inet4_server.quit() # Retry wsgi_server._SingleAddressWsgiServer( ('127.0.0.1', 0), None).AndReturn(inet4_server_retry) inet4_server_retry.start() inet4_server_retry.port = 456 wsgi_server._SingleAddressWsgiServer( ('::1', 456), None).AndReturn(inet6_server_retry) inet6_server_retry.start() self.mox.ReplayAll() self.server.start() self.mox.VerifyAll() self.assertItemsEqual([inet4_server_retry, inet6_server_retry], self.server._servers)