61 lines
1.4 KiB
Python
61 lines
1.4 KiB
Python
import os
|
|
import os.path
|
|
import threading
|
|
|
|
import pytest
|
|
|
|
try:
|
|
# python2
|
|
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
|
|
from SimpleHTTPServer import SimpleHTTPRequestHandler
|
|
except:
|
|
# python3
|
|
from http.server import (BaseHTTPRequestHandler, HTTPServer,
|
|
SimpleHTTPRequestHandler)
|
|
|
|
class HTTPReplayHandler(SimpleHTTPRequestHandler):
|
|
" Serves pages saved alongside with headers. See `curl --http1.1 -is http://...` "
|
|
|
|
directory = os.path.join(os.path.dirname(__file__), './samples/')
|
|
|
|
__init__ = BaseHTTPRequestHandler.__init__
|
|
|
|
def do_GET(self):
|
|
path = self.translate_path(self.path)
|
|
|
|
if os.path.isdir(path):
|
|
f = self.list_directory(path)
|
|
|
|
else:
|
|
f = open(path, 'rb')
|
|
|
|
try:
|
|
self.copyfile(f, self.wfile)
|
|
|
|
finally:
|
|
f.close()
|
|
|
|
class MuteHTTPServer(HTTPServer):
|
|
def handle_error(self, request, client_address):
|
|
# mute errors
|
|
pass
|
|
|
|
def make_server(port=8888):
|
|
print('Serving http://localhost:%s/' % port)
|
|
return MuteHTTPServer(('', port), RequestHandlerClass=HTTPReplayHandler)
|
|
|
|
@pytest.fixture
|
|
def replay_server():
|
|
httpd = make_server()
|
|
thread = threading.Thread(target=httpd.serve_forever)
|
|
thread.start()
|
|
|
|
yield
|
|
|
|
httpd.shutdown()
|
|
thread.join()
|
|
|
|
if __name__ == '__main__':
|
|
httpd = make_server()
|
|
httpd.serve_forever()
|