Skip to content

Commit e7d9250

Browse files
committed
Add test case for pass certdata
1 parent 8a7f316 commit e7d9250

File tree

1 file changed

+51
-4
lines changed

1 file changed

+51
-4
lines changed

Lib/test/test_httpservers.py

Lines changed: 51 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ def run(self):
6464
self.request_handler,
6565
certfile=self.tls[0],
6666
keyfile=self.tls[1],
67+
password=self.tls[2],
6768
)
6869
else:
6970
self.server = HTTPServer(('localhost', 0), self.request_handler)
@@ -333,10 +334,19 @@ def test_head_via_send_error(self):
333334

334335
@unittest.skipIf(ssl is None, 'No ssl module')
335336
class BaseHTTPSServerTestCase(BaseTestCase):
336-
tls = (
337-
os.path.join(os.path.dirname(__file__), "certdata", "ssl_cert.pem"),
338-
os.path.join(os.path.dirname(__file__), "certdata", "ssl_key.pem"),
339-
)
337+
def _data_file(*name):
338+
return os.path.join(os.path.dirname(__file__), "certdata", *name)
339+
340+
CERTFILE = _data_file("keycert.pem")
341+
ONLYCERT = _data_file("ssl_cert.pem")
342+
ONLYKEY = _data_file("ssl_key.pem")
343+
CERTFILE_PROTECTED = _data_file("keycert.passwd.pem")
344+
ONLYKEY_PROTECTED = _data_file("ssl_key.passwd.pem")
345+
KEY_PASSWORD = "somepass"
346+
EMPTYCERT = _data_file("nullcert.pem")
347+
BADCERT = _data_file("badcert.pem")
348+
349+
tls = (ONLYCERT, ONLYKEY, None) # values by default
340350

341351
class request_handler(NoLogRequestHandler, SimpleHTTPRequestHandler):
342352
pass
@@ -354,6 +364,43 @@ def request(self, uri, method='GET', body=None, headers={}):
354364
self.connection.request(method, uri, body, headers)
355365
return self.connection.getresponse()
356366

367+
def test_valid_certdata(self):
368+
valid_certdata_examples = (
369+
(self.CERTFILE, None, None),
370+
(self.CERTFILE, self.CERTFILE, None),
371+
(self.CERTFILE_PROTECTED, None, self.KEY_PASSWORD),
372+
(self.ONLYCERT, self.ONLYKEY_PROTECTED, self.KEY_PASSWORD),
373+
)
374+
for data in valid_certdata_examples:
375+
server = HTTPSServer(
376+
('localhost', 0),
377+
BaseHTTPRequestHandler,
378+
certfile=data[0],
379+
keyfile=data[1],
380+
password=data[2],
381+
)
382+
self.assertIsInstance(server, HTTPSServer)
383+
server.server_close()
384+
385+
def test_invalid_certdata(self):
386+
invalid_certdata_examples = (
387+
(self.BADCERT, None, None),
388+
(self.EMPTYCERT, None, None),
389+
(self.ONLYCERT, None, None),
390+
(self.ONLYKEY, None, None),
391+
(self.ONLYKEY, self.ONLYCERT, None),
392+
(self.CERTFILE_PROTECTED, None, "badpass"),
393+
)
394+
for data in invalid_certdata_examples:
395+
with self.assertRaises(ssl.SSLError):
396+
HTTPSServer(
397+
('localhost', 0),
398+
self.request_handler,
399+
certfile=data[0],
400+
keyfile=data[1],
401+
password=data[2],
402+
)
403+
357404

358405
class RequestHandlerLoggingTestCase(BaseTestCase):
359406
class request_handler(BaseHTTPRequestHandler):

0 commit comments

Comments
 (0)