@@ -1478,31 +1478,26 @@ def fetch_file(self, path, context=None):
14781478return res .read ()
14791479
14801480def parse_cli_output (self ,output ):
1481- matches = re .search (r'Serving (HTTP|HTTPS) on (.+) port (\d+)' ,output )
1482- if matches is None :
1481+ match = re .search (r'Serving (HTTP|HTTPS) on (.+) port (\d+)' ,output )
1482+ if match is None :
14831483return None ,None ,None
1484- return matches .group (1 ).lower (),matches .group (2 ),int (matches .group (3 ))
1484+ return match .group (1 ).lower (),match .group (2 ),int (match .group (3 ))
14851485
1486- def wait_for_server (self ,proc ,protocol ,port ):
1487- """Extract the serverbind address once it has been started."""
1486+ def wait_for_server (self ,proc ,protocol ,bind , port ):
1487+ """Check that the server has been successfully started."""
14881488line = proc .stdout .readline ().strip ()
14891489if support .verbose :
14901490print ()
14911491print ('python -m http.server: ' ,line )
1492- parsed_protocol ,host ,parsed_port = self .parse_cli_output (line )
1493- if protocol == parsed_protocol and parsed_port == port :
1494- return host
1495- return None
1492+ return self .parse_cli_output (line )== (protocol ,bind ,port )
14961493
14971494def test_http_client (self ):
1498- port = find_unused_port ()
1499- proc = spawn_python ('-u' ,'-m' ,'http.server' ,str (port ),
1495+ bind , port = '127.0.0.1' , find_unused_port ()
1496+ proc = spawn_python ('-u' ,'-m' ,'http.server' ,str (port ),'-b' , bind ,
15001497bufsize = 1 ,text = True )
15011498self .addCleanup (kill_python ,proc )
15021499self .addCleanup (proc .terminate )
1503- bind = self .wait_for_server (proc ,'http' ,port )
1504- self .assertIsNotNone (bind )
1505- # localhost may be redirected to something else for whatever reason
1500+ self .assertTrue (self .wait_for_server (proc ,'http' ,bind ,port ))
15061501res = self .fetch_file (f'http://{ bind } :{ port } /{ self .served_filename } ' )
15071502self .assertEqual (res ,self .served_data )
15081503
@@ -1514,16 +1509,14 @@ def test_https_client(self):
15141509context .verify_mode = ssl .CERT_NONE
15151510
15161511bind ,port = '127.0.0.1' ,find_unused_port ()
1517- proc = spawn_python ('-u' ,'-m' ,'http.server' ,str (port ),
1518- '-b' ,bind ,
1512+ proc = spawn_python ('-u' ,'-m' ,'http.server' ,str (port ),'-b' ,bind ,
15191513'--tls-cert' ,self .tls_cert ,
15201514'--tls-key' ,self .tls_key ,
15211515'--tls-password-file' ,self .tls_password_file ,
15221516bufsize = 1 ,text = True )
15231517self .addCleanup (kill_python ,proc )
15241518self .addCleanup (proc .terminate )
1525- bind = self .wait_for_server (proc ,'https' ,port )
1526- self .assertIsNotNone (bind )
1519+ self .assertTrue (self .wait_for_server (proc ,'https' ,bind ,port ))
15271520url = f'https://{ bind } :{ port } /{ self .served_filename } '
15281521res = self .fetch_file (url ,context = context )
15291522self .assertEqual (res ,self .served_data )