work on tests concurrently

This commit is contained in:
Joshua Hesketh 2013-08-14 12:38:14 +10:00
parent 8ed742ee2e
commit 0d9a8c036b
3 changed files with 45 additions and 3 deletions

View File

@ -2,7 +2,7 @@
"zuul_server": { "zuul_server": {
"git_url": "/home/josh/var/lib/zuul/git/", "git_url": "/home/josh/var/lib/zuul/git/",
"gearman_host": "localhost", "gearman_host": "localhost",
"gearman_port": 14730 "gearman_port": 0
}, },
"debug_log": "/home/josh/var/log/turbo-hipster/debug.log", "debug_log": "/home/josh/var/log/turbo-hipster/debug.log",
"jobs_working_dir": "/home/josh/var/lib/turbo-hipster/jobs", "jobs_working_dir": "/home/josh/var/lib/turbo-hipster/jobs",

View File

@ -19,6 +19,8 @@ import threading
import os import os
from turbo_hipster.worker_manager import GearmanManager from turbo_hipster.worker_manager import GearmanManager
from turbo_hipster.task_plugins.gate_real_db_upgrade.task import Runner\
as RealDbUpgradeRunner
class FakeGearmanManager(GearmanManager): class FakeGearmanManager(GearmanManager):
@ -148,6 +150,22 @@ class FakeWorker(gear.Worker):
(regex, len(self.running_builds))) (regex, len(self.running_builds)))
class FakeRealDbUpgradeRunner(RealDbUpgradeRunner):
def __init__(self, config, test):
self.test = test
super(FakeRealDbUpgradeRunner, self).__init__(config)
def setup_gearman(self):
self.log.debug("Set up real_db gearman worker")
self.gearman_worker = FakeWorker('FakeRealDbUpgradeRunner_worker',
self.test)
self.gearman_worker.addServer(
self.config['zuul_server']['gearman_host'],
self.config['zuul_server']['gearman_port']
)
self.register_functions()
class FakeBuild(threading.Thread): class FakeBuild(threading.Thread):
def __init__(self, worker, job, number, node): def __init__(self, worker, job, number, node):
threading.Thread.__init__(self) threading.Thread.__init__(self)

View File

@ -18,7 +18,8 @@
import json import json
import os import os
import testtools import testtools
from fakes import FakeGearmanManager, FakeGearmanServer import time
from fakes import FakeGearmanManager, FakeGearmanServer, FakeRealDbUpgradeRunner
CONFIG_DIR = os.path.join(os.path.dirname(__file__), 'etc') CONFIG_DIR = os.path.join(os.path.dirname(__file__), 'etc')
with open(os.path.join(CONFIG_DIR, 'config.json'), 'r') as config_stream: with open(os.path.join(CONFIG_DIR, 'config.json'), 'r') as config_stream:
@ -29,9 +30,12 @@ class TestGearmanManager(testtools.TestCase):
def setUp(self): def setUp(self):
super(TestGearmanManager, self).setUp() super(TestGearmanManager, self).setUp()
self.config = CONFIG self.config = CONFIG
self.tasks = []
self.gearman_server = FakeGearmanServer( self.gearman_server = FakeGearmanServer(
self.config['zuul_server']['gearman_port']) self.config['zuul_server']['gearman_port'])
self.config['zuul_server']['gearman_port'] = self.gearman_server.port
self.task = FakeRealDbUpgradeRunner(self.config, self)
self.tasks = dict(FakeRealDbUpgradeRunner_worker=self.task)
self.gearman_manager = FakeGearmanManager(self.config, self.gearman_manager = FakeGearmanManager(self.config,
self.tasks, self.tasks,
@ -40,6 +44,26 @@ class TestGearmanManager(testtools.TestCase):
def test_manager_function_registered(self): def test_manager_function_registered(self):
""" Check the manager is set up correctly and registered with the """ Check the manager is set up correctly and registered with the
gearman server with an appropriate function """ gearman server with an appropriate function """
# Give the gearman server up to 5 seconds to register the function
for x in range(500):
time.sleep(0.01)
if len(self.gearman_server.functions) > 0:
break
hostname = os.uname()[1]
function_name = 'stop:turbo-hipster-manager-%s' % hostname
self.assertIn(function_name, self.gearman_server.functions)
def test_task_registered_with_manager(self):
""" Check the FakeRealDbUpgradeRunner_worker task is registered """
self.assertIn('FakeRealDbUpgradeRunner_worker',
self.gearman_manager.tasks.keys())
def test_stop_task(self):
""" Check that the manager successfully stops a task when requested
"""
pass pass
if __name__ == '__main__': if __name__ == '__main__':