@@ -82,6 +82,8 @@ def stop(self):
8282
8383
8484class BaseTestCase (unittest .TestCase ):
85+
86+ # Optional tuple (certfile, keyfile, password) to use for HTTPS servers.
8587 tls = None
8688
8789 def setUp (self ):
@@ -335,10 +337,26 @@ def test_head_via_send_error(self):
335337def certdata_file (* path ):
336338 return os .path .join (os .path .dirname (__file__ ), "certdata" , * path )
337339
340+ class DummyRequestHandler (NoLogRequestHandler , SimpleHTTPRequestHandler ):
341+ pass
342+
343+ def create_https_server (
344+ certfile ,
345+ keyfile = None ,
346+ password = None ,
347+ * ,
348+ address = ('localhost' , 0 ),
349+ request_handler = DummyRequestHandler ,
350+
351+ ):
352+ return HTTPSServer (
353+ address , request_handler ,
354+ certfile = certfile , keyfile = keyfile , password = password
355+ )
356+
338357
339358@unittest .skipIf (ssl is None , "requires ssl" )
340359class BaseHTTPSServerTestCase (BaseTestCase ):
341-
342360 CERTFILE = certdata_file ("keycert.pem" )
343361 ONLYCERT = certdata_file ("ssl_cert.pem" )
344362 ONLYKEY = certdata_file ("ssl_key.pem" )
@@ -374,15 +392,10 @@ def test_valid_certdata(self):
374392 (self .ONLYCERT , self .ONLYKEY_PROTECTED , self .KEY_PASSWORD ),
375393 ]
376394 for certfile , keyfile , password in valid_certdata :
377- server = HTTPSServer (
378- ('localhost' , 0 ),
379- BaseHTTPRequestHandler ,
380- certfile = certfile ,
381- keyfile = keyfile ,
382- password = password ,
383- )
384- self .assertIsInstance (server , HTTPSServer )
385- server .server_close ()
395+ with self .subTest (certfile = certfile , keyfile = keyfile ):
396+ server = create_https_server (certfile , keyfile , password )
397+ self .assertIsInstance (server , HTTPSServer )
398+ server .server_close ()
386399
387400 def test_invalid_certdata (self ):
388401 invalid_certdata = [
@@ -393,15 +406,10 @@ def test_invalid_certdata(self):
393406 (self .ONLYKEY , self .ONLYCERT , None ),
394407 (self .CERTFILE_PROTECTED , None , self .BADPASSWORD ),
395408 ]
396- for cerfile , keyfile , password in invalid_certdata :
397- with self .assertRaises (ssl .SSLError ):
398- HTTPSServer (
399- ('localhost' , 0 ),
400- self .request_handler ,
401- certfile = cerfile ,
402- keyfile = keyfile ,
403- password = password ,
404- )
409+ for certfile , keyfile , password in invalid_certdata :
410+ with self .subTest (certfile = certfile , keyfile = keyfile ):
411+ with self .assertRaises (ssl .SSLError ):
412+ create_https_server (certfile , keyfile , password )
405413
406414
407415class RequestHandlerLoggingTestCase (BaseTestCase ):
0 commit comments