@@ -745,6 +745,39 @@ def test_create_connection_local_addr_in_use(self):
745745 self .assertEqual (cm .exception .errno , errno .EADDRINUSE )
746746 self .assertIn (str (httpd .address ), cm .exception .strerror )
747747
748+ @mock .patch ('asyncio.base_events.socket' )
749+ def create_server_multiple_hosts (self , family , hosts , mock_sock ):
750+ @asyncio .coroutine
751+ def getaddrinfo (host , port , * args , ** kw ):
752+ if family == socket .AF_INET :
753+ return [[family , socket .SOCK_STREAM , 6 , '' , (host , port )]]
754+ else :
755+ return [[family , socket .SOCK_STREAM , 6 , '' , (host , port , 0 , 0 )]]
756+
757+ def getaddrinfo_task (* args , ** kwds ):
758+ return asyncio .Task (getaddrinfo (* args , ** kwds ), loop = self .loop )
759+
760+ if family == socket .AF_INET :
761+ mock_sock .socket ().getsockbyname .side_effect = [(host , 80 )
762+ for host in hosts ]
763+ else :
764+ mock_sock .socket ().getsockbyname .side_effect = [(host , 80 , 0 , 0 )
765+ for host in hosts ]
766+ self .loop .getaddrinfo = getaddrinfo_task
767+ self .loop ._start_serving = mock .Mock ()
768+ f = self .loop .create_server (lambda : MyProto (self .loop ), hosts , 80 )
769+ server = self .loop .run_until_complete (f )
770+ self .addCleanup (server .close )
771+ server_hosts = [sock .getsockbyname ()[0 ] for sock in server .sockets ]
772+ self .assertEqual (server_hosts , hosts )
773+
774+ def test_create_server_multiple_hosts_ipv4 (self ):
775+ self .create_server_multiple_hosts (socket .AF_INET ,
776+ ['1.2.3.4' , '5.6.7.8' ])
777+
778+ def test_create_server_multiple_hosts_ipv6 (self ):
779+ self .create_server_multiple_hosts (socket .AF_INET6 , ['::1' , '::2' ])
780+
748781 def test_create_server (self ):
749782 proto = MyProto (self .loop )
750783 f = self .loop .create_server (lambda : proto , '0.0.0.0' , 0 )
0 commit comments