mirror of https://github.com/mongodb/mongo
64 lines
1.9 KiB
Python
64 lines
1.9 KiB
Python
import threading
|
|
from http.server import HTTPServer
|
|
|
|
from buildscripts.resmokelib.testing import queryable_server
|
|
from buildscripts.resmokelib.testing.hooks import interface
|
|
|
|
|
|
class QueryableServerHook(interface.Hook):
|
|
DESCRIPTION = "Starts the queryable server before each test for queryable restores. Restarts the queryable server between tests."
|
|
|
|
IS_BACKGROUND = True
|
|
|
|
def __init__(self, hook_logger, fixture, queryable_dbpath=None):
|
|
interface.Hook.__init__(self, hook_logger, fixture, QueryableServerHook.DESCRIPTION)
|
|
|
|
assert queryable_dbpath
|
|
|
|
self._queryable_dbpath = queryable_dbpath
|
|
self._stop_event = None
|
|
self._queryable_server_thread = None
|
|
|
|
def before_suite(self, test_report):
|
|
return
|
|
|
|
def after_suite(self, test_report, teardown_flag=None):
|
|
return
|
|
|
|
def before_test(self, test, test_report):
|
|
self.logger.info("Starting queryable server")
|
|
self._queryable_server_thread = QueryableServerThread(self._queryable_dbpath)
|
|
self._queryable_server_thread.start()
|
|
|
|
def after_test(self, test, test_report):
|
|
self.logger.info("Stopping queryable server")
|
|
self._queryable_server_thread.stop()
|
|
|
|
|
|
class QueryableServerThread(threading.Thread):
|
|
def __init__(self, queryable_dbpath):
|
|
threading.Thread.__init__(self, name="QueryableServerThread")
|
|
self._queryable_dbpath = queryable_dbpath
|
|
self._stop_event = threading.Event()
|
|
|
|
def run(self):
|
|
server_address = ("", 8080)
|
|
|
|
handler = queryable_server.QueryableHandler
|
|
handler.dbpath = self._queryable_dbpath
|
|
handler.verbose = False
|
|
|
|
httpd = HTTPServer(server_address, handler)
|
|
httpd.timeout = 1
|
|
|
|
while not self._stop_event.is_set():
|
|
httpd.handle_request()
|
|
|
|
httpd.server_close()
|
|
|
|
def stop(self):
|
|
self._stop_event.set()
|
|
self.join()
|
|
|
|
queryable_server.QueryableHandler.ephemeral_files = {}
|