mirror of
https://github.com/microsoft/debugpy.git
synced 2025-12-23 08:48:12 +00:00
Add a testing helper for serving HTTP locally.
This commit is contained in:
parent
7981cc1f9e
commit
137f671ee4
2 changed files with 61 additions and 0 deletions
0
tests/helpers/__init__.py
Normal file
0
tests/helpers/__init__.py
Normal file
61
tests/helpers/http.py
Normal file
61
tests/helpers/http.py
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
import http.server
|
||||
import threading
|
||||
|
||||
|
||||
class Server:
|
||||
"""Wraps an http.server.HTTPServer in a thread."""
|
||||
|
||||
def __init__(self, handler, host='', port=8000):
|
||||
self.handler = handler
|
||||
self._addr = (host, port)
|
||||
self._server = None
|
||||
self._thread = None
|
||||
|
||||
@property
|
||||
def address(self):
|
||||
host, port = self._addr
|
||||
if host == '':
|
||||
host = 'localhost'
|
||||
return '{}:{}'.format(host, port)
|
||||
|
||||
def start(self):
|
||||
if self._server is not None:
|
||||
raise RuntimeError('already started')
|
||||
self._server = http.server.HTTPServer(self._addr, self.handler)
|
||||
self._thread = threading.Thread(
|
||||
target=lambda: self._server.serve_forever())
|
||||
self._thread.start()
|
||||
|
||||
def stop(self):
|
||||
if self._server is None:
|
||||
raise RuntimeError('not running')
|
||||
self._server.shutdown()
|
||||
self._thread.join()
|
||||
self._server.server_close()
|
||||
self._thread = None
|
||||
self._server = None
|
||||
|
||||
def __enter__(self):
|
||||
self.start()
|
||||
return self
|
||||
|
||||
def __exit__(self, *args):
|
||||
self.stop()
|
||||
|
||||
|
||||
def json_file_handler(data):
|
||||
"""Return an HTTP handler that always serves the given JSON bytes."""
|
||||
|
||||
class HTTPHandler(http.server.BaseHTTPRequestHandler):
|
||||
def do_GET(self):
|
||||
self.send_response(200)
|
||||
self.send_header('Content-Type', b'application/json')
|
||||
self.send_header('Content-Length',
|
||||
str(len(data)).encode('ascii'))
|
||||
self.end_headers()
|
||||
self.wfile.write(data)
|
||||
|
||||
def log_message(self, *args, **kwargs):
|
||||
pass
|
||||
|
||||
return HTTPHandler
|
||||
Loading…
Add table
Add a link
Reference in a new issue