From 0d9a8c036b0c36bfa5ce07cd0e5ba773257d7a3a Mon Sep 17 00:00:00 2001 From: Joshua Hesketh Date: Wed, 14 Aug 2013 12:38:14 +1000 Subject: [PATCH] work on tests concurrently --- tests/etc/config.json | 2 +- tests/fakes.py | 18 ++++++++++++++++++ tests/test_worker_manager.py | 28 ++++++++++++++++++++++++++-- 3 files changed, 45 insertions(+), 3 deletions(-) diff --git a/tests/etc/config.json b/tests/etc/config.json index 2b6451c..a04218b 100644 --- a/tests/etc/config.json +++ b/tests/etc/config.json @@ -2,7 +2,7 @@ "zuul_server": { "git_url": "/home/josh/var/lib/zuul/git/", "gearman_host": "localhost", - "gearman_port": 14730 + "gearman_port": 0 }, "debug_log": "/home/josh/var/log/turbo-hipster/debug.log", "jobs_working_dir": "/home/josh/var/lib/turbo-hipster/jobs", diff --git a/tests/fakes.py b/tests/fakes.py index 5a2f972..ff2fe87 100644 --- a/tests/fakes.py +++ b/tests/fakes.py @@ -19,6 +19,8 @@ import threading import os from turbo_hipster.worker_manager import GearmanManager +from turbo_hipster.task_plugins.gate_real_db_upgrade.task import Runner\ + as RealDbUpgradeRunner class FakeGearmanManager(GearmanManager): @@ -148,6 +150,22 @@ class FakeWorker(gear.Worker): (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): def __init__(self, worker, job, number, node): threading.Thread.__init__(self) diff --git a/tests/test_worker_manager.py b/tests/test_worker_manager.py index 11b1a22..fe4eaa7 100644 --- a/tests/test_worker_manager.py +++ b/tests/test_worker_manager.py @@ -18,7 +18,8 @@ import json import os 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') with open(os.path.join(CONFIG_DIR, 'config.json'), 'r') as config_stream: @@ -29,9 +30,12 @@ class TestGearmanManager(testtools.TestCase): def setUp(self): super(TestGearmanManager, self).setUp() self.config = CONFIG - self.tasks = [] self.gearman_server = FakeGearmanServer( 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.tasks, @@ -40,6 +44,26 @@ class TestGearmanManager(testtools.TestCase): def test_manager_function_registered(self): """ Check the manager is set up correctly and registered with the 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 if __name__ == '__main__':