Skip to content

Commit 6f88c13

Browse files
committed
gh-135056: Add test for http.server cli --header argument
1 parent b1026d2 commit 6f88c13

2 files changed

Lines changed: 30 additions & 1 deletion

File tree

Lib/http/server.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1008,6 +1008,7 @@ def test(HandlerClass=BaseHTTPRequestHandler,
10081008
except KeyboardInterrupt:
10091009
print("\nKeyboard interrupt received, exiting.")
10101010
sys.exit(0)
1011+
return server
10111012

10121013

10131014
def _main(args=None):
@@ -1081,7 +1082,7 @@ class HTTPSDualStackServer(DualStackServerMixin, ThreadingHTTPSServer):
10811082

10821083
ServerClass = HTTPSDualStackServer if args.tls_cert else HTTPDualStackServer
10831084

1084-
test(
1085+
return test(
10851086
HandlerClass=SimpleHTTPRequestHandler,
10861087
ServerClass=ServerClass,
10871088
port=args.port,

Lib/test/test_httpservers.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1487,6 +1487,34 @@ def test_unknown_flag(self, _):
14871487
self.assertEqual(stdout.getvalue(), '')
14881488
self.assertIn('error', stderr.getvalue())
14891489

1490+
def test_response_headers_arg(self):
1491+
# with mock.patch.object(
1492+
# SimpleHTTPRequestHandler, '__init__'
1493+
# ) as mock_handler, \
1494+
# mock.patch.object(
1495+
# HTTPServer, 'serve_forever'
1496+
# ) as mock_serve_forever:
1497+
with mock.patch.object(
1498+
HTTPServer, 'serve_forever'
1499+
) as mock_serve_forever:
1500+
httpd = server._main(
1501+
['-H', 'X-Test1', 'Test1', '-H', 'X-Test2', 'Test2', '8080']
1502+
)
1503+
request_handler_class = httpd.RequestHandlerClass
1504+
with mock.patch.object(
1505+
request_handler_class, '__init__'
1506+
) as mock_handler_init:
1507+
mock_handler_init.return_value = None
1508+
# finish_request instantiates a request handler class,
1509+
# ensure response_headers are passed to it
1510+
httpd.finish_request(mock.Mock(), '127.0.0.1')
1511+
mock_handler_init.assert_called_once_with(
1512+
mock.ANY, mock.ANY, mock.ANY, directory=mock.ANY,
1513+
response_headers={
1514+
'X-Test1': 'Test1', 'X-Test2': 'Test2'
1515+
}
1516+
)
1517+
14901518

14911519
class CommandLineRunTimeTestCase(unittest.TestCase):
14921520
served_data = os.urandom(32)

0 commit comments

Comments
 (0)