Delegate tearDown logic to addCleanup method

tearDown doesn't work if setUp is failed, for ex.
https://bugs.launchpad.net/searchlight/+bug/1557287
https://bugs.launchpad.net/horizon/+bug/1405553

Change-Id: I4e02dfbd6dc902d50dd47f8441919aa5e29b3101
Closed-Bug: #1405553
This commit is contained in:
Sergei Chipiga 2016-06-01 18:39:19 +03:00
parent 63be880cc2
commit c3da75ab5a
6 changed files with 65 additions and 61 deletions

View File

@ -107,6 +107,9 @@ class BaseTestCase(testtools.TestCase):
else: else:
self.vdisplay.xvfb_cmd.extend(args) self.vdisplay.xvfb_cmd.extend(args)
self.vdisplay.start() self.vdisplay.start()
self.addCleanup(self.vdisplay.stop)
# Increase the default Python socket timeout from nothing # Increase the default Python socket timeout from nothing
# to something that will cope with slow webdriver startup times. # to something that will cope with slow webdriver startup times.
# This *just* affects the communication between this test process # This *just* affects the communication between this test process
@ -123,6 +126,9 @@ class BaseTestCase(testtools.TestCase):
self.driver.implicitly_wait(self.CONFIG.selenium.implicit_wait) self.driver.implicitly_wait(self.CONFIG.selenium.implicit_wait)
self.driver.set_page_load_timeout( self.driver.set_page_load_timeout(
self.CONFIG.selenium.page_timeout) self.CONFIG.selenium.page_timeout)
self.addCleanup(self.driver.quit)
self.addOnException(self._attach_page_source) self.addOnException(self._attach_page_source)
self.addOnException(self._attach_screenshot) self.addOnException(self._attach_screenshot)
self.addOnException(self._attach_browser_log) self.addOnException(self._attach_browser_log)
@ -214,13 +220,6 @@ class BaseTestCase(testtools.TestCase):
html_elem = self.driver.find_element_by_tag_name("html") html_elem = self.driver.find_element_by_tag_name("html")
return html_elem.get_attribute("innerHTML").encode("utf-8") return html_elem.get_attribute("innerHTML").encode("utf-8")
def tearDown(self):
if os.environ.get('INTEGRATION_TESTS', False):
self.driver.quit()
if hasattr(self, 'vdisplay'):
self.vdisplay.stop()
super(BaseTestCase, self).tearDown()
class TestCase(BaseTestCase, AssertsMixin): class TestCase(BaseTestCase, AssertsMixin):
@ -241,13 +240,12 @@ class TestCase(BaseTestCase, AssertsMixin):
self.assertFalse( self.assertFalse(
self.home_pg.find_message_and_dismiss(messages.ERROR)) self.home_pg.find_message_and_dismiss(messages.ERROR))
def tearDown(self): def cleanup():
try:
if self.home_pg.is_logged_in: if self.home_pg.is_logged_in:
self.home_pg.go_to_home_page() self.home_pg.go_to_home_page()
self.home_pg.log_out() self.home_pg.log_out()
finally:
super(TestCase, self).tearDown() self.addCleanup(cleanup)
class AdminTestCase(TestCase, AssertsMixin): class AdminTestCase(TestCase, AssertsMixin):

View File

@ -34,6 +34,13 @@ class TestDownloadRCFile(helpers.AdminTestCase):
'OS_TENANT_NAME': tenant_name, 'OS_TENANT_NAME': tenant_name,
'OS_TENANT_ID': tenant_id} 'OS_TENANT_ID': tenant_id}
def cleanup():
temporary_files = listdir(self._directory)
if len(temporary_files):
remove(join(self._directory, temporary_files[0]))
self.addCleanup(cleanup)
def test_download_rc_v2_file(self): def test_download_rc_v2_file(self):
"""This is a basic scenario test: """This is a basic scenario test:
Steps: Steps:
@ -70,9 +77,3 @@ class TestDownloadRCFile(helpers.AdminTestCase):
cred_dict = api_access_page.get_credentials_from_file( cred_dict = api_access_page.get_credentials_from_file(
3, self._directory, self._openrc_template) 3, self._directory, self._openrc_template)
self.assertEqual(cred_dict, self.actual_dict) self.assertEqual(cred_dict, self.actual_dict)
def tearDown(self):
super(TestDownloadRCFile, self).tearDown()
temporary_files = listdir(self._directory)
if len(temporary_files):
remove(join(self._directory, temporary_files[0]))

View File

@ -48,6 +48,13 @@ class TestModifyProject(helpers.AdminTestCase):
self.assertTrue( self.assertTrue(
self.projects_page.find_message_and_dismiss(messages.SUCCESS)) self.projects_page.find_message_and_dismiss(messages.SUCCESS))
def cleanup():
if not self.projects_page.is_the_current_page():
self.home_pg.go_to_identity_projectspage()
self.projects_page.delete_project(PROJECT_NAME)
self.addCleanup(cleanup)
def test_add_member(self): def test_add_member(self):
admin_name = self.CONFIG.identity.admin_username admin_name = self.CONFIG.identity.admin_username
regular_role_name = self.CONFIG.identity.default_keystone_role regular_role_name = self.CONFIG.identity.default_keystone_role
@ -65,9 +72,3 @@ class TestModifyProject(helpers.AdminTestCase):
admin_name, PROJECT_NAME) admin_name, PROJECT_NAME)
self.assertEqual(roles2add, user_roles, self.assertEqual(roles2add, user_roles,
"The requested roles haven't been set for the user!") "The requested roles haven't been set for the user!")
def tearDown(self):
if not self.projects_page.is_the_current_page():
self.home_pg.go_to_identity_projectspage()
self.projects_page.delete_project(PROJECT_NAME)
super(TestModifyProject, self).tearDown()

View File

@ -31,6 +31,14 @@ class TestStacks(helpers.AdminTestCase):
go_to_compute_accessandsecurity_keypairspage() go_to_compute_accessandsecurity_keypairspage()
self.assertTrue(keypair_page.is_keypair_present(self.KEYPAIR_NAME)) self.assertTrue(keypair_page.is_keypair_present(self.KEYPAIR_NAME))
def cleanup():
keypair_page = self.home_pg.\
go_to_compute_accessandsecurity_keypairspage()
keypair_page.delete_keypairs(self.KEYPAIR_NAME)
keypair_page.find_message_and_dismiss(messages.SUCCESS)
self.addCleanup(cleanup)
@decorators.skip_because(bugs=['1584057']) @decorators.skip_because(bugs=['1584057'])
@decorators.services_required("heat") @decorators.services_required("heat")
def test_create_delete_stack(self): def test_create_delete_stack(self):
@ -62,10 +70,3 @@ class TestStacks(helpers.AdminTestCase):
self.assertFalse( self.assertFalse(
stacks_page.find_message_and_dismiss(messages.ERROR)) stacks_page.find_message_and_dismiss(messages.ERROR))
self.assertTrue(stacks_page.is_stack_deleted(self.STACKS_NAME)) self.assertTrue(stacks_page.is_stack_deleted(self.STACKS_NAME))
def tearDown(self):
keypair_page = self.home_pg.\
go_to_compute_accessandsecurity_keypairspage()
keypair_page.delete_keypairs(self.KEYPAIR_NAME)
keypair_page.find_message_and_dismiss(messages.SUCCESS)
super(TestStacks, self).tearDown()

View File

@ -33,6 +33,16 @@ class TestVolumeSnapshotsBasic(helpers.TestCase):
self.assertTrue(volumes_page.is_volume_status(self.VOLUME_NAME, self.assertTrue(volumes_page.is_volume_status(self.VOLUME_NAME,
'Available')) 'Available'))
def cleanup():
volumes_snapshot_page = \
self.home_pg.go_to_compute_volumes_volumesnapshotspage()
volumes_page = volumes_snapshot_page.switch_to_volumes_tab()
volumes_page.delete_volume(self.VOLUME_NAME)
volumes_page.find_message_and_dismiss(messages.SUCCESS)
self.assertTrue(volumes_page.is_volume_deleted(self.VOLUME_NAME))
self.addCleanup(cleanup)
def test_create_edit_delete_volume_snapshot(self): def test_create_edit_delete_volume_snapshot(self):
"""Test checks create/delete volume snapshot action """Test checks create/delete volume snapshot action
Steps: Steps:
@ -158,16 +168,6 @@ class TestVolumeSnapshotsBasic(helpers.TestCase):
for name in snapshot_names: for name in snapshot_names:
volumes_snapshot_page.is_volume_snapshot_deleted(name) volumes_snapshot_page.is_volume_snapshot_deleted(name)
def tearDown(self):
"""Clean up: delete volume"""
volumes_snapshot_page = \
self.home_pg.go_to_compute_volumes_volumesnapshotspage()
volumes_page = volumes_snapshot_page.switch_to_volumes_tab()
volumes_page.delete_volume(self.VOLUME_NAME)
volumes_page.find_message_and_dismiss(messages.SUCCESS)
self.assertTrue(volumes_page.is_volume_deleted(self.VOLUME_NAME))
super(TestVolumeSnapshotsBasic, self).tearDown()
class TestVolumeSnapshotsAdmin(helpers.AdminTestCase, class TestVolumeSnapshotsAdmin(helpers.AdminTestCase,
TestVolumeSnapshotsBasic): TestVolumeSnapshotsBasic):
@ -208,6 +208,19 @@ class TestVolumeSnapshotsAdvanced(helpers.TestCase):
self.assertTrue(volumes_page.is_volume_status(self.VOLUME_NAME, self.assertTrue(volumes_page.is_volume_status(self.VOLUME_NAME,
'Available')) 'Available'))
def cleanup():
volumes_snapshot_page = \
self.home_pg.go_to_compute_volumes_volumesnapshotspage()
volumes_page = volumes_snapshot_page.switch_to_volumes_tab()
volumes_page.delete_volume(self.VOLUME_NAME)
self.assertTrue(
volumes_page.find_message_and_dismiss(messages.SUCCESS))
self.assertFalse(
volumes_page.find_message_and_dismiss(messages.ERROR))
self.assertTrue(volumes_page.is_volume_deleted(self.VOLUME_NAME))
self.addCleanup(cleanup)
def test_create_volume_from_snapshot(self): def test_create_volume_from_snapshot(self):
"""Test checks possibility to create volume from snapshot """Test checks possibility to create volume from snapshot
Steps: Steps:
@ -248,15 +261,3 @@ class TestVolumeSnapshotsAdvanced(helpers.TestCase):
volumes_page.find_message_and_dismiss(messages.SUCCESS)) volumes_page.find_message_and_dismiss(messages.SUCCESS))
self.assertFalse(volumes_page.find_message_and_dismiss(messages.ERROR)) self.assertFalse(volumes_page.find_message_and_dismiss(messages.ERROR))
self.assertTrue(volumes_page.is_volume_deleted(new_volume)) self.assertTrue(volumes_page.is_volume_deleted(new_volume))
def tearDown(self):
"""Clean up: delete volume"""
volumes_snapshot_page = \
self.home_pg.go_to_compute_volumes_volumesnapshotspage()
volumes_page = volumes_snapshot_page.switch_to_volumes_tab()
volumes_page.delete_volume(self.VOLUME_NAME)
self.assertTrue(
volumes_page.find_message_and_dismiss(messages.SUCCESS))
self.assertFalse(volumes_page.find_message_and_dismiss(messages.ERROR))
self.assertTrue(volumes_page.is_volume_deleted(self.VOLUME_NAME))
super(TestVolumeSnapshotsAdvanced, self).tearDown()

View File

@ -239,6 +239,17 @@ class TestVolumesActions(helpers.TestCase):
self.assertTrue(self.volumes_page.is_volume_status(self.VOLUME_NAME, self.assertTrue(self.volumes_page.is_volume_status(self.VOLUME_NAME,
'Available')) 'Available'))
def cleanup():
self.volumes_page.delete_volume(self.VOLUME_NAME)
self.assertTrue(
self.volumes_page.find_message_and_dismiss(messages.SUCCESS))
self.assertFalse(
self.volumes_page.find_message_and_dismiss(messages.ERROR))
self.assertTrue(
self.volumes_page.is_volume_deleted(self.VOLUME_NAME))
self.addCleanup(cleanup)
def test_volume_extend(self): def test_volume_extend(self):
"""This test case checks extend volume functionality: """This test case checks extend volume functionality:
Steps: Steps:
@ -322,12 +333,3 @@ class TestVolumesActions(helpers.TestCase):
instances_page.find_message_and_dismiss(messages.ERROR)) instances_page.find_message_and_dismiss(messages.ERROR))
self.assertTrue(instances_page.is_instance_deleted(self.INSTANCE_NAME)) self.assertTrue(instances_page.is_instance_deleted(self.INSTANCE_NAME))
self.volumes_page = self.home_pg.go_to_compute_volumes_volumespage() self.volumes_page = self.home_pg.go_to_compute_volumes_volumespage()
def tearDown(self):
self.volumes_page.delete_volume(self.VOLUME_NAME)
self.assertTrue(
self.volumes_page.find_message_and_dismiss(messages.SUCCESS))
self.assertFalse(
self.volumes_page.find_message_and_dismiss(messages.ERROR))
self.assertTrue(self.volumes_page.is_volume_deleted(self.VOLUME_NAME))
super(TestVolumesActions, self).tearDown()