def test_make_socket_for_ip(self): if coro.has_ipv6(): sock = coro.make_socket_for_ip('2001::1', socket.SOCK_STREAM) self.assertEquals(sock.domain, socket.AF_INET6) sock = coro.make_socket_for_ip('::', socket.SOCK_STREAM) self.assertEquals(sock.domain, socket.AF_INET6) else: sys.stderr.write('Warning: No IPv6 support; skipping tests\n') sock = coro.make_socket_for_ip('1.2.3.4', socket.SOCK_STREAM) self.assertEquals(sock.domain, socket.AF_INET) sock = coro.make_socket_for_ip('0.0.0.0', socket.SOCK_STREAM) self.assertEquals(sock.domain, socket.AF_INET) self.assertRaises(ValueError, coro.make_socket_for_ip, '123', 0)
def serve(self, address): self.s = coro.make_socket_for_ip(address, socket.SOCK_STREAM) self.s.bind((address, 0)) self.bound_ip, self.port = self.s.getsockname() self.s.set_reuse_addr() self.s.listen(5) s, addr = self.s.accept() session = TestSession(s, addr) coro.spawn(session.run) self.accepted_from = s.getsockname()[0]
def _test(self, address): server = TestServer() server_thread = coro.spawn(server.serve, address) # Give the server a chance to start. coro.yield_slice() self.assertEqual(server.bound_ip, address) sock = coro.make_socket_for_ip(address, socket.SOCK_STREAM) sock.connect((address, server.port)) coro.yield_slice() # Double checking that everyone thinks they're connected # to the same peer self.assertEqual(server.accepted_from, address) self.assertEqual(sock.getpeername()[0], server.accepted_from) self.do_work(sock)