def test_invalid_style(self): exc = None try: service.get_listening_tcp_socket('1.2.3.4', 5678, style='invalid') except Exception as err: exc = err self.assertEqual(str(exc), "Socket style 'invalid' not understood.")
def test_uses_eventlet_sleep(self): try: import eventlet import eventlet.green.socket except ImportError: raise SkipTest() orig_sleep = eventlet.sleep orig_esocket = eventlet.green.socket.socket esleep_calls = [] try: eventlet.sleep = lambda *a: esleep_calls.append(a) eventlet.green.socket.socket = NonBindingSocket exc = None try: service.get_listening_tcp_socket( '1.2.3.4', 5678, style='eventlet') except Exception as err: exc = err self.assertEqual( str(exc), 'Could not bind to 1.2.3.4:5678 after trying for 30 seconds.') self.assertEqual(len(esleep_calls), 29) self.assertEqual(len(self.sleep_calls), 0) finally: eventlet.sleep = orig_sleep eventlet.green.socket.socket = orig_esocket
def test_no_family_raises_exception(self): self.getaddrinfo_return = ((socket.AF_APPLETALK,),) exc = None try: service.get_listening_tcp_socket('1.2.3.4', 5678) except Exception, err: exc = err
def test_odd_exception_reraised(self): socket.socket = BadBindSocket exc = None try: service.get_listening_tcp_socket('1.2.3.4', 5678) except Exception, err: exc = err
def test_odd_exception_reraised(self): socket.socket = BadBindSocket exc = None try: service.get_listening_tcp_socket('1.2.3.4', 5678) except Exception as err: exc = err self.assertEqual(str(exc), 'badbind')
def test_no_family_raises_exception(self): self.getaddrinfo_return = ((socket.AF_APPLETALK,),) exc = None try: service.get_listening_tcp_socket('1.2.3.4', 5678) except Exception as err: exc = err self.assertEqual( str(exc), 'Could not determine address family of 1.2.3.4:5678 for binding.')
def test_retries(self): socket.socket = NonBindingSocket exc = None try: service.get_listening_tcp_socket('1.2.3.4', 5678) except Exception as err: exc = err self.assertEqual( str(exc), 'Could not bind to 1.2.3.4:5678 after trying for 30 seconds.') # Calls time once before loop to calculate when to stop and once per # loop to see if it's time to stop. self.assertEqual(self.time_value, 31) self.assertEqual(len(self.time_calls), 31) # Sleeps 29 times and then sees it's been 30s (the default retry time). self.assertEqual(len(self.sleep_calls), 29)
def test_uses_eventlet_socket(self): try: import eventlet.green.socket except ImportError: raise SkipTest() orig_esocket = eventlet.green.socket.socket orig_egetaddrinfo = eventlet.green.socket.getaddrinfo egetaddrinfo_calls = [] def _getaddrinfo(*args): egetaddrinfo_calls.append(args) return self.getaddrinfo_return try: # Won't bind unless it uses eventlet's socket. socket.socket = NonBindingSocket eventlet.green.socket.socket = FakeSocket eventlet.green.socket.getaddrinfo = _getaddrinfo ip = '1.2.3.4' port = 5678 sock = service.get_listening_tcp_socket(ip, port, style='eventlet') self.assertEquals( egetaddrinfo_calls, [(ip, port, socket.AF_UNSPEC, socket.SOCK_STREAM)]) self.assertEquals(sock.init, (socket.AF_INET, socket.SOCK_STREAM)) self.assertEquals(set(sock.setsockopt_calls), set([ (socket.SOL_SOCKET, socket.SO_REUSEADDR, 1), (socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1), (socket.IPPROTO_TCP, socket.TCP_KEEPIDLE, 600)])) self.assertEquals(sock.bind_calls, [((ip, port),)]) self.assertEquals(sock.listen_calls, [(4096,)]) self.assertEquals(self.wrap_socket_calls, []) finally: eventlet.green.socket.socket = orig_esocket eventlet.green.socket.getaddrinfo = orig_egetaddrinfo
def test_uses_passed_retry(self): socket.socket = NonBindingSocket exc = None try: sock = service.get_listening_tcp_socket('1.2.3.4', 5678, retry=10) except Exception, err: exc = err
def test_retries(self): socket.socket = NonBindingSocket exc = None try: sock = service.get_listening_tcp_socket('1.2.3.4', 5678) except Exception, err: exc = err
def test_uses_passed_retry(self): socket.socket = NonBindingSocket exc = None try: service.get_listening_tcp_socket('1.2.3.4', 5678, retry=10) except Exception as err: exc = err self.assertEqual( str(exc), 'Could not bind to 1.2.3.4:5678 after trying for 10 seconds.') # Calls time once before loop to calculate when to stop and once per # loop to see if it's time to stop. self.assertEqual(self.time_value, 11) self.assertEqual(len(self.time_calls), 11) # Sleeps 9 times and then sees it's been 10s. self.assertEqual(len(self.sleep_calls), 9)
def test_wraps_socket(self): certfile = 'certfile' keyfile = 'keyfile' sock = service.get_listening_tcp_socket('1.2.3.4', 5678, certfile=certfile, keyfile=keyfile) self.assertEquals(sock, 'wrappedsock') self.assertEquals(len(self.wrap_socket_calls), 1) self.assertEquals(self.wrap_socket_calls[0][1], {'certfile': 'certfile', 'keyfile': 'keyfile'})
def test_happy_path_inet(self): ip = '1.2.3.4' port = 5678 sock = service.get_listening_tcp_socket(ip, port) self.assertEquals(self.getaddrinfo_calls, [(ip, port, socket.AF_UNSPEC, socket.SOCK_STREAM)]) self.assertEquals(sock.init, (socket.AF_INET, socket.SOCK_STREAM)) self.assertEquals(set(sock.setsockopt_calls), set([ (socket.SOL_SOCKET, socket.SO_REUSEADDR, 1), (socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1), (socket.IPPROTO_TCP, socket.TCP_KEEPIDLE, 600)])) self.assertEquals(sock.bind_calls, [((ip, port),)]) self.assertEquals(sock.listen_calls, [(4096,)]) self.assertEquals(self.wrap_socket_calls, [])
def test_uses_eventlet_wrap_socket(self): try: import eventlet.green.socket import eventlet.green.ssl except ImportError: raise SkipTest() orig_esocket = eventlet.green.socket.socket orig_egetaddrinfo = eventlet.green.socket.getaddrinfo orig_ewrap_socket = eventlet.green.ssl.wrap_socket egetaddrinfo_calls = [] ewrap_socket_calls = [] def _getaddrinfo(*args): egetaddrinfo_calls.append(args) return self.getaddrinfo_return def _ewrap_socket(*args, **kwargs): ewrap_socket_calls.append((args, kwargs)) return 'ewrappedsock' try: eventlet.green.socket.socket = FakeSocket eventlet.green.socket.getaddrinfo = _getaddrinfo eventlet.green.ssl.wrap_socket = _ewrap_socket certfile = 'certfile' keyfile = 'keyfile' sock = service.get_listening_tcp_socket( '1.2.3.4', 5678, style='eventlet', certfile=certfile, keyfile=keyfile) self.assertEqual(sock, 'ewrappedsock') self.assertEqual(len(ewrap_socket_calls), 1) self.assertEqual( ewrap_socket_calls[0][1], {'certfile': 'certfile', 'keyfile': 'keyfile'}) finally: eventlet.green.socket.socket = orig_esocket eventlet.green.socket.getaddrinfo = orig_egetaddrinfo eventlet.green.ssl.wrap_socket = orig_ewrap_socket
def test_happy_path_inet6(self): self.getaddrinfo_return = ((socket.AF_INET6,),) sock = service.get_listening_tcp_socket('1.2.3.4', 5678) self.assertEquals(sock.init, (socket.AF_INET6, socket.SOCK_STREAM))
def test_ip_as_star_is_all(self): sock = service.get_listening_tcp_socket('*', 5678) self.assertEquals(sock.bind_calls[0][0][0], '0.0.0.0')
def test_invalid_style(self): exc = None try: service.get_listening_tcp_socket('1.2.3.4', 5678, style='invalid') except Exception, err: exc = err
def test_uses_passed_backlog(self): backlog = 1000 sock = service.get_listening_tcp_socket('1.2.3.4', 5678, backlog) self.assertEquals(sock.listen_calls, [(backlog,)])
def test_ip_as_none_is_all(self): sock = service.get_listening_tcp_socket(None, 5678) self.assertEqual(sock.bind_calls[0][0][0], '0.0.0.0')