Files
mongo/buildscripts/resmokelib/testing/hooks/queryable_server_hook.py

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

65 lines
2.0 KiB
Python
Raw Normal View History

import threading
from http.server import BaseHTTPRequestHandler, HTTPServer
from buildscripts.resmokelib.testing.hooks import interface
from buildscripts.resmokelib.testing.hooks import jsfile
from buildscripts.resmokelib.testing import queryable_server
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 = {}