Files
httpie-cli/tests/test_cookie.py
Ahmed TAHRI 4f3b468970 code cleanup
2024-03-20 06:45:56 +01:00

59 lines
2.1 KiB
Python

from http.cookies import SimpleCookie
from http.server import BaseHTTPRequestHandler, HTTPServer
from threading import Thread
from .utils import http
class TestIntegration:
def setup_mock_server(self, handler):
"""Configure mock server."""
# Passing 0 as the port will cause a random free port to be chosen.
self.mock_server = HTTPServer(('localhost', 0), handler)
_, self.mock_server_port = self.mock_server.server_address
# Start running mock server in a separate thread.
# Daemon threads automatically shut down when the main process exits.
self.mock_server_thread = Thread(target=self.mock_server.serve_forever)
self.mock_server_thread.daemon = True
self.mock_server_thread.start()
def shutdown_mock_server(self):
if self.mock_server is None:
return
self.mock_server.socket.close()
self.mock_server.shutdown()
self.mock_server_thread.join()
self.mock_server = None
self.mock_server_port = None
def test_cookie_parser(self):
"""Not directly testing HTTPie but `requests` to ensure their cookies handling
is still as expected by `get_expired_cookies()`.
"""
class MockServerRequestHandler(BaseHTTPRequestHandler):
""""HTTP request handler."""
def do_GET(self):
"""Handle GET requests."""
# Craft multiple cookies
cookie = SimpleCookie()
cookie['hello'] = 'world'
cookie['hello']['path'] = self.path
cookie['oatmeal_raisin'] = 'is the best'
cookie['oatmeal_raisin']['path'] = self.path
# Send HTTP headers
self.send_response(200)
self.send_header('Set-Cookie', cookie.output())
self.end_headers()
self.setup_mock_server(MockServerRequestHandler)
response = http(f'http://localhost:{self.mock_server_port}/')
assert 'Set-Cookie: hello=world; Path=/' in response
assert 'Set-Cookie: oatmeal_raisin="is the best"; Path=/' in response
self.shutdown_mock_server()