From da24ad07a348d2c753246579c9a4b657baf965a8 Mon Sep 17 00:00:00 2001 From: Al Bailey Date: Fri, 2 Nov 2018 13:09:45 -0500 Subject: [PATCH] Prevent NFV unit tests from randomly failing Several unit tests were declaring a table as a class variable. Depending on the order of the tests, there could be unexpected data in those tables causing tests to randomly fail. The change is to make those tables instance variables in the test classes. Story: 2004241 Task: 27764 Change-Id: I0157f297f5d2a7a0ab5ada4f58623850cbfb72ff Signed-off-by: Al Bailey --- .../nfv_unit_tests/tests/test_instance.py | 38 ++++----- .../tests/test_instance_director.py | 80 +++++++++---------- .../tests/test_plugin_kubernetes_client.py | 2 +- .../tests/test_sw_patch_strategy.py | 55 +++++++------ .../tests/test_sw_upgrade_strategy.py | 54 +++++++------ 5 files changed, 118 insertions(+), 111 deletions(-) diff --git a/nfv/nfv-tests/nfv_unit_tests/tests/test_instance.py b/nfv/nfv-tests/nfv_unit_tests/tests/test_instance.py index b05d210c..bd8e8e57 100755 --- a/nfv/nfv-tests/nfv_unit_tests/tests/test_instance.py +++ b/nfv/nfv-tests/nfv_unit_tests/tests/test_instance.py @@ -42,30 +42,30 @@ def fake_event_issue(a, b, c, d): # nova/tests/unit/virt/libvirt/test_driver.py class TestInstance(testcase.NFVTestCase): - _tenant_table = Table() - _instance_type_table = InstanceTypeTable() - _image_table = ImageTable() - _instance_table = InstanceTable() - _instance_group_table = InstanceGroupTable() - _host_table = HostTable() - _host_group_table = HostGroupTable() - _host_aggregate_table = HostAggregateTable() - - # Don't attempt to write to the database while unit testing - _tenant_table.persist = False - _image_table.persist = False - _instance_type_table.persist = False - _instance_table.persist = False - _instance_group_table.persist = False - _host_table.persist = False - _host_group_table.persist = False - _host_aggregate_table.persist = False - def setUp(self): """ Setup for testing. """ super(TestInstance, self).setUp() + self._tenant_table = Table() + self._instance_type_table = InstanceTypeTable() + self._image_table = ImageTable() + self._instance_table = InstanceTable() + self._instance_group_table = InstanceGroupTable() + self._host_table = HostTable() + self._host_group_table = HostGroupTable() + self._host_aggregate_table = HostAggregateTable() + + # Don't attempt to write to the database while unit testing + self._tenant_table.persist = False + self._image_table.persist = False + self._instance_type_table.persist = False + self._instance_table.persist = False + self._instance_group_table.persist = False + self._host_table.persist = False + self._host_group_table.persist = False + self._host_aggregate_table.persist = False + self.useFixture(fixtures.MonkeyPatch('nfv_vim.tables._tenant_table._tenant_table', self._tenant_table)) self.useFixture(fixtures.MonkeyPatch('nfv_vim.tables._host_table._host_table', diff --git a/nfv/nfv-tests/nfv_unit_tests/tests/test_instance_director.py b/nfv/nfv-tests/nfv_unit_tests/tests/test_instance_director.py index 53ca1ae0..f8b1e8a4 100755 --- a/nfv/nfv-tests/nfv_unit_tests/tests/test_instance_director.py +++ b/nfv/nfv-tests/nfv_unit_tests/tests/test_instance_director.py @@ -30,28 +30,29 @@ def fake_timer(a, b, c, d): class TestInstanceDirector(testcase.NFVTestCase): - _image_table = ImageTable() - _instance_table = Table() - _instance_type_table = Table() - _tenant_table = Table() - - # Don't attempt to write to the database while unit testing - _image_table.persist = False - _instance_table.persist = False - _instance_type_table.persist = False - _tenant_table.persist = False - - _director = None def setUp(self): super(TestInstanceDirector, self).setUp() + self._image_table = ImageTable() + self._instance_table = Table() + self._instance_type_table = Table() + self._tenant_table = Table() + + # Don't attempt to write to the database while unit testing + self._image_table.persist = False + self._instance_table.persist = False + self._instance_type_table.persist = False + self._tenant_table.persist = False + self._director = None + self.instance_setup_func() def tearDown(self): super(TestInstanceDirector, self).tearDown() - self._tenant_table.clear() + self._image_table.clear() self._instance_table.clear() self._instance_type_table.clear() + self._tenant_table.clear() self._director = None def create_instance(self, instance_type_name, instance_name, recovery_priority=None): @@ -91,34 +92,33 @@ class TestInstanceDirector(testcase.NFVTestCase): """ instance_type_uuid = uuid.uuid4() - if 0 == len(self._instance_type_table): - instance_type = objects.InstanceType(instance_type_uuid, 'small') - instance_type.update_details(vcpus=1, mem_mb=64, disk_gb=1, ephemeral_gb=0, - swap_gb=0, guest_services=None, - auto_recovery=True, - live_migration_timeout=800, - live_migration_max_downtime=500, - storage_type='local_image') - self._instance_type_table[instance_type_uuid] = instance_type + instance_type = objects.InstanceType(instance_type_uuid, 'small') + instance_type.update_details(vcpus=1, + mem_mb=64, + disk_gb=1, + ephemeral_gb=0, + swap_gb=0, + guest_services=None, + auto_recovery=True, + live_migration_timeout=800, + live_migration_max_downtime=500, + storage_type='local_image') + self._instance_type_table[instance_type_uuid] = instance_type - self._instance_table.clear() - - if self._director is None: - self._director = InstanceDirector( - max_concurrent_recovering_instances=4, - max_concurrent_migrates_per_host=1, - max_concurrent_evacuates_per_host=1, - recovery_audit_interval=_audit_interval, - recovery_audit_cooldown=_audit_cooldown, - recovery_audit_batch_interval=2, - recovery_cooldown=_recovery_cooldown, - rebuild_timeout=_rebuild_timeout, - reboot_timeout=_reboot_timeout, - migrate_timeout=_migrate_timeout, - single_hypervisor=False, - recovery_threshold=250, - max_throttled_recovering_instances=2 - ) + self._director = InstanceDirector( + max_concurrent_recovering_instances=4, + max_concurrent_migrates_per_host=1, + max_concurrent_evacuates_per_host=1, + recovery_audit_interval=_audit_interval, + recovery_audit_cooldown=_audit_cooldown, + recovery_audit_batch_interval=2, + recovery_cooldown=_recovery_cooldown, + rebuild_timeout=_rebuild_timeout, + reboot_timeout=_reboot_timeout, + migrate_timeout=_migrate_timeout, + single_hypervisor=False, + recovery_threshold=250, + max_throttled_recovering_instances=2) @mock.patch('nfv_vim.tables.tables_get_tenant_table') @mock.patch('nfv_vim.tables.tables_get_instance_type_table') diff --git a/nfv/nfv-tests/nfv_unit_tests/tests/test_plugin_kubernetes_client.py b/nfv/nfv-tests/nfv_unit_tests/tests/test_plugin_kubernetes_client.py index 9d498fc2..575b06c4 100755 --- a/nfv/nfv-tests/nfv_unit_tests/tests/test_plugin_kubernetes_client.py +++ b/nfv/nfv-tests/nfv_unit_tests/tests/test_plugin_kubernetes_client.py @@ -48,10 +48,10 @@ class TestNFVPluginsK8SNodeTaint(testcase.NFVTestCase): test_value1 = 'testValue1' test_key2 = 'testKey2' test_value2 = 'testValue2' - test_node_repo = {} def setUp(self): super(TestNFVPluginsK8SNodeTaint, self).setUp() + self.test_node_repo = {} self.setup_node_repo(self.test_node_name) def mock_patch_node(obj, node_name, body): diff --git a/nfv/nfv-tests/nfv_unit_tests/tests/test_sw_patch_strategy.py b/nfv/nfv-tests/nfv_unit_tests/tests/test_sw_patch_strategy.py index 2939483b..5c861206 100755 --- a/nfv/nfv-tests/nfv_unit_tests/tests/test_sw_patch_strategy.py +++ b/nfv/nfv-tests/nfv_unit_tests/tests/test_sw_patch_strategy.py @@ -149,28 +149,28 @@ def fake_event_issue(a, b, c, d): @mock.patch('nfv_vim.event_log._instance._event_issue', fake_event_issue) class TestSwPatchStrategy(testcase.NFVTestCase): - _tenant_table = Table() - _instance_type_table = Table() - _instance_table = InstanceTable() - _instance_group_table = InstanceGroupTable() - _host_table = HostTable() - _host_group_table = HostGroupTable() - _host_aggregate_table = HostAggregateTable() - - # Don't attempt to write to the database while unit testing - _tenant_table.persist = False - _instance_type_table.persist = False - _instance_table.persist = False - _instance_group_table.persist = False - _host_table.persist = False - _host_group_table.persist = False - _host_aggregate_table.persist = False - def setUp(self): """ Setup for testing. """ super(TestSwPatchStrategy, self).setUp() + self._tenant_table = Table() + self._instance_type_table = Table() + self._instance_table = InstanceTable() + self._instance_group_table = InstanceGroupTable() + self._host_table = HostTable() + self._host_group_table = HostGroupTable() + self._host_aggregate_table = HostAggregateTable() + + # Don't attempt to write to the database while unit testing + self._tenant_table.persist = False + self._instance_type_table.persist = False + self._instance_table.persist = False + self._instance_group_table.persist = False + self._host_table.persist = False + self._host_group_table.persist = False + self._host_aggregate_table.persist = False + self.useFixture(fixtures.MonkeyPatch('nfv_vim.tables._tenant_table._tenant_table', self._tenant_table)) self.useFixture(fixtures.MonkeyPatch('nfv_vim.tables._host_table._host_table', @@ -187,15 +187,18 @@ class TestSwPatchStrategy(testcase.NFVTestCase): self._instance_type_table)) instance_type_uuid = str(uuid.uuid4()) - if 0 == len(self._instance_type_table): - instance_type = objects.InstanceType(instance_type_uuid, 'small') - instance_type.update_details(vcpus=1, mem_mb=64, disk_gb=1, ephemeral_gb=0, - swap_gb=0, guest_services=None, - auto_recovery=True, - live_migration_timeout=800, - live_migration_max_downtime=500, - storage_type='local_image') - self._instance_type_table[instance_type_uuid] = instance_type + instance_type = objects.InstanceType(instance_type_uuid, 'small') + instance_type.update_details(vcpus=1, + mem_mb=64, + disk_gb=1, + ephemeral_gb=0, + swap_gb=0, + guest_services=None, + auto_recovery=True, + live_migration_timeout=800, + live_migration_max_downtime=500, + storage_type='local_image') + self._instance_type_table[instance_type_uuid] = instance_type def tearDown(self): """ diff --git a/nfv/nfv-tests/nfv_unit_tests/tests/test_sw_upgrade_strategy.py b/nfv/nfv-tests/nfv_unit_tests/tests/test_sw_upgrade_strategy.py index 67c21da8..73592be9 100755 --- a/nfv/nfv-tests/nfv_unit_tests/tests/test_sw_upgrade_strategy.py +++ b/nfv/nfv-tests/nfv_unit_tests/tests/test_sw_upgrade_strategy.py @@ -128,25 +128,26 @@ def fake_event_issue(a, b, c, d): @mock.patch('nfv_vim.objects._sw_update.SwUpdate.save', fake_save) @mock.patch('nfv_vim.objects._sw_update.timers.timers_create_timer', fake_timer) class TestSwUpgradeStrategy(testcase.NFVTestCase): - _tenant_table = Table() - _instance_type_table = Table() - _instance_table = InstanceTable() - _instance_group_table = InstanceGroupTable() - _host_table = HostTable() - _host_group_table = HostGroupTable() - _host_aggregate_table = HostAggregateTable() - - # Don't attempt to write to the database while unit testing - _tenant_table.persist = False - _instance_type_table.persist = False - _instance_table.persist = False - _instance_group_table.persist = False - _host_table.persist = False - _host_group_table.persist = False - _host_aggregate_table.persist = False def setUp(self): super(TestSwUpgradeStrategy, self).setUp() + self._tenant_table = Table() + self._instance_type_table = Table() + self._instance_table = InstanceTable() + self._instance_group_table = InstanceGroupTable() + self._host_table = HostTable() + self._host_group_table = HostGroupTable() + self._host_aggregate_table = HostAggregateTable() + + # Don't attempt to write to the database while unit testing + self._tenant_table.persist = False + self._instance_type_table.persist = False + self._instance_table.persist = False + self._instance_group_table.persist = False + self._host_table.persist = False + self._host_group_table.persist = False + self._host_aggregate_table.persist = False + self.useFixture(fixtures.MonkeyPatch('nfv_vim.tables._host_aggregate_table._host_aggregate_table', self._host_aggregate_table)) self.useFixture(fixtures.MonkeyPatch('nfv_vim.tables._host_group_table._host_group_table', @@ -164,15 +165,18 @@ class TestSwUpgradeStrategy(testcase.NFVTestCase): instance_type_uuid = str(uuid.uuid4()) - if 0 == len(self._instance_type_table): - instance_type = objects.InstanceType(instance_type_uuid, 'small') - instance_type.update_details(vcpus=1, mem_mb=64, disk_gb=1, ephemeral_gb=0, - swap_gb=0, guest_services=None, - auto_recovery=True, - live_migration_timeout=800, - live_migration_max_downtime=500, - storage_type='local_image') - self._instance_type_table[instance_type_uuid] = instance_type + instance_type = objects.InstanceType(instance_type_uuid, 'small') + instance_type.update_details(vcpus=1, + mem_mb=64, + disk_gb=1, + ephemeral_gb=0, + swap_gb=0, + guest_services=None, + auto_recovery=True, + live_migration_timeout=800, + live_migration_max_downtime=500, + storage_type='local_image') + self._instance_type_table[instance_type_uuid] = instance_type def tearDown(self): """