From 3d51b2576245c03eb35acc3e87d68eb5707fabaf Mon Sep 17 00:00:00 2001 From: Luke Sneeringer Date: Fri, 14 Nov 2014 11:57:26 -0600 Subject: [PATCH] Unit tests now start their own Redis. --- awx/main/tests/base.py | 18 +++++++++++++++++- awx/main/tests/commands.py | 10 ++++++++++ awx/main/tests/inventory.py | 6 +++++- awx/main/tests/jobs.py | 8 ++++++++ awx/main/tests/licenses.py | 5 +++++ awx/main/tests/schedules.py | 5 +++++ awx/main/tests/scripts.py | 5 +++++ 7 files changed, 55 insertions(+), 2 deletions(-) diff --git a/awx/main/tests/base.py b/awx/main/tests/base.py index c9ce7884a1..3a354d53e9 100644 --- a/awx/main/tests/base.py +++ b/awx/main/tests/base.py @@ -13,6 +13,7 @@ import sys import tempfile import time from multiprocessing import Process +from subprocess import Popen # PyYAML import yaml @@ -445,6 +446,7 @@ class BaseTestMixin(object): self.assertTrue(set(obj.keys()) <= set(fields), msg) def start_taskmanager(self, command_port): + self.start_redis() self.taskmanager_process = Process(target=run_taskmanager, args=(command_port,)) self.taskmanager_process.start() @@ -452,8 +454,10 @@ class BaseTestMixin(object): def terminate_taskmanager(self): if hasattr(self, 'taskmanager_process'): self.taskmanager_process.terminate() + self.stop_redis() def start_queue(self): + self.start_redis() receiver = CallbackReceiver() self.queue_process = Process(target=receiver.run_subscriber, args=(False,)) @@ -462,9 +466,21 @@ class BaseTestMixin(object): def terminate_queue(self): if hasattr(self, 'queue_process'): self.queue_process.terminate() + self.stop_redis() + + def start_redis(self): + if not getattr(self, 'redis_process', None): + self.redis_process = Popen('redis-server --port 16379 > /dev/null', + shell=True, executable='/bin/bash') + + def stop_redis(self): + if getattr(self, 'redis_process', None): + self.redis_process.kill() + self.redis_process = None -@override_settings(SYSTEM_UUID='00000000-0000-0000-0000-000000000000') +@override_settings(SYSTEM_UUID='00000000-0000-0000-0000-000000000000', + BROKER_URL='redis://localhost:16379/') class BaseTest(BaseTestMixin, django.test.TestCase): ''' Base class for unit tests. diff --git a/awx/main/tests/commands.py b/awx/main/tests/commands.py index c7970526e5..e015885296 100644 --- a/awx/main/tests/commands.py +++ b/awx/main/tests/commands.py @@ -194,9 +194,14 @@ class CleanupDeletedTest(BaseCommandMixin, BaseTest): ''' def setUp(self): + self.start_redis() super(CleanupDeletedTest, self).setUp() self.create_test_inventories() + def tearDown(self): + super(CleanupDeletedTest, self).tearDown() + self.stop_redis() + def get_model_counts(self): def get_models(m): if not m._meta.abstract: @@ -415,10 +420,15 @@ class InventoryImportTest(BaseCommandMixin, BaseLiveServerTest): def setUp(self): super(InventoryImportTest, self).setUp() + self.start_redis() self.create_test_inventories() self.create_test_ini() self.create_test_license_file() + def tearDown(self): + super(InventoryImportTest, self).tearDown() + self.stop_redis() + def create_test_ini(self, inv_dir=None, ini_content=None): ini_content = ini_content or TEST_INVENTORY_INI handle, self.ini_path = tempfile.mkstemp(suffix='.txt', dir=inv_dir) diff --git a/awx/main/tests/inventory.py b/awx/main/tests/inventory.py index 65aa6e1b84..80d36d8f98 100644 --- a/awx/main/tests/inventory.py +++ b/awx/main/tests/inventory.py @@ -26,7 +26,7 @@ TEST_SIMPLE_INVENTORY_SCRIPT = "#!/usr/bin/env python\nimport json\nprint json.d class InventoryTest(BaseTest): def setUp(self): - + self.start_redis() super(InventoryTest, self).setUp() self.setup_users() self.organizations = self.make_organizations(self.super_django_user, 3) @@ -47,6 +47,10 @@ class InventoryTest(BaseTest): permission_type = 'read' ) + def tearDown(self): + super(InventoryTest, self).tearDown() + self.stop_redis() + def test_get_inventory_list(self): url = reverse('api:inventory_list') qs = Inventory.objects.filter(active=True).distinct() diff --git a/awx/main/tests/jobs.py b/awx/main/tests/jobs.py index 7d848cf05b..80ff23beff 100644 --- a/awx/main/tests/jobs.py +++ b/awx/main/tests/jobs.py @@ -198,6 +198,14 @@ TEST_SURVEY_REQUIREMENTS = ''' class BaseJobTestMixin(BaseTestMixin): '''''' + def setUp(self): + self.start_redis() + super(BaseJobTestMixin, self).setUp() + + def tearDown(self): + self.stop_redis() + super(BaseJobTestMixin, self).tearDown() + def _create_inventory(self, name, organization, created_by, groups_hosts_dict): '''Helper method for creating inventory with groups and hosts.''' diff --git a/awx/main/tests/licenses.py b/awx/main/tests/licenses.py index 87ed867021..e7271b7704 100644 --- a/awx/main/tests/licenses.py +++ b/awx/main/tests/licenses.py @@ -16,6 +16,7 @@ from awx.main.task_engine import * class LicenseTests(BaseTest): def setUp(self): + self.start_redis() super(LicenseTests, self).setUp() self.setup_users() u = self.super_django_user @@ -34,6 +35,10 @@ class LicenseTests(BaseTest): host = Host.objects.create(name='a11', inventory=inventory, created_by=u) host = Host.objects.create(name='a12', inventory=inventory, created_by=u) + def tearDown(self): + super(LicenseTests, self).tearDown() + self.stop_redis() + def test_license_writer(self): writer = TaskEngager( diff --git a/awx/main/tests/schedules.py b/awx/main/tests/schedules.py index 9319a73ce5..c6883c37ce 100644 --- a/awx/main/tests/schedules.py +++ b/awx/main/tests/schedules.py @@ -57,6 +57,7 @@ class ScheduleTest(BaseTest): def setUp(self): super(ScheduleTest, self).setUp() + self.start_redis() self.setup_users() self.organizations = self.make_organizations(self.super_django_user, 2) self.organizations[0].admins.add(self.normal_django_user) @@ -99,6 +100,10 @@ class ScheduleTest(BaseTest): self.without_valid_source_inventory_group = self.without_valid_source_inventory.groups.create(name='not valid source') self.without_valid_source_inventory_source = self.without_valid_source_inventory_group.inventory_source + def tearDown(self): + super(ScheduleTest, self).tearDown() + self.stop_redis() + def test_schedules_list(self): url = reverse('api:schedule_list') enabled_schedules = Schedule.objects.filter(enabled=True).distinct() diff --git a/awx/main/tests/scripts.py b/awx/main/tests/scripts.py index 56fb50575c..4908e59cb2 100644 --- a/awx/main/tests/scripts.py +++ b/awx/main/tests/scripts.py @@ -68,6 +68,7 @@ class InventoryScriptTest(BaseScriptTest): def setUp(self): super(InventoryScriptTest, self).setUp() + self.start_redis() self.setup_users() self.organizations = self.make_organizations(self.super_django_user, 2) self.projects = self.make_projects(self.normal_django_user, 2) @@ -120,6 +121,10 @@ class InventoryScriptTest(BaseScriptTest): group.hosts.add(local) self.groups.extend(groups) + def tearDown(self): + super(InventoryScriptTest, self).tearDown() + self.stop_redis() + def run_inventory_script(self, *args, **options): rest_api_url = self.live_server_url parts = urlparse.urlsplit(rest_api_url)