You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

119 lines
3.1 KiB

import unittest
class WebhookTestCaseBase(unittest.TestCase):
thread = None
def setUp(self):
import sys
# Use our custom importer to replace certain modules with stub modules to
# enable testing of other parts of GAD
sys.meta_path.append(StubImporter())
def start_gad(self, test_config):
import sys
import time
import os
# Add repo root to sys path
repo_root = os.path.realpath(os.path.join(os.path.dirname(os.path.realpath(__file__)), '..'))
sys.path.insert(1, repo_root)
from gitautodeploy.cli.config import get_config_defaults, init_config
config = get_config_defaults()
config.update(test_config)
init_config(config)
# Create a GAD instance
self.thread = GADRunnerThread(config)
# Run GAD in a thread
self.thread.start()
def gad_port(self):
return self.thread.port
def await_gad(self):
"""Waits for GAD and all it's threads to complete."""
import threading
# Wait for GAD runner thread to finish
self.thread.join()
# Wait for all request handler threads to finish
main_thread = threading.currentThread()
for current_thread in threading.enumerate():
if current_thread == main_thread:
continue
# print "Waiting for thread %s to finish" % current_thread
current_thread.join()
def tearDown(self):
pass
class StubImporter(object):
overload_modules = ['gitautodeploy.wrappers.git', 'gitautodeploy.wrappers.process']
def find_module(self, full_name, package_path):
# Intervene when any wrapper module is imported
if full_name in self.overload_modules:
# Return a loader
return self
return None
def load_module(self, full_name):
"""Load matching module from stubs package (test stub) instead of main gitautodeploy package."""
import imp
import sys
import os
repo_root = os.path.realpath(os.path.join(os.path.dirname(os.path.realpath(__file__)), '..'))
module_name = full_name.split('.')[-1]
module_info = imp.find_module(module_name, [repo_root+'/test/stubs'])
module = imp.load_module(module_name, *module_info)
sys.modules[module_name] = module
# print "returning module %s" % module_name
# module.history.append('WAH')
# Return a module
return module
import threading
class GADRunnerThread(threading.Thread):
def __init__(self, config):
super(GADRunnerThread, self).__init__()
import sys
import time
from gitautodeploy import GitAutoDeploy
self._app = GitAutoDeploy()
self._app.setup(config)
# Setup HTTP server, but do not start serving
self._app.serve_http(serve_forever=False)
# Store PID and port in thread instance
self.pid = self._app._pid
self.port = self._app._http_port
def run(self):
self._app._http_server.handle_request()
def exit(self):
self._app.stop()
self._app.close()