From: Zane Bitter Date: Wed, 12 Sep 2012 14:12:45 +0000 (+0200) Subject: tests: Clean up after a failed functional test X-Git-Tag: 2014.1~1417 X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=ab754ba493a282c0790e72a73d0f09d26cb50cf3;p=openstack-build%2Fheat-build.git tests: Clean up after a failed functional test Ensure that whenever a stack is created, we delete it after the test by putting the cleanup() call into the tearDown() method. For this to work, we must also move the actual creation into the test itself, since an exception during setUp() will mean that tearDown is not called. Change-Id: I481e691f07c1af9e931258d7ba4453b2037c62ad Signed-off-by: Zane Bitter --- diff --git a/heat/tests/functional/test_WordPress_2_Instances_With_EBS.py b/heat/tests/functional/test_WordPress_2_Instances_With_EBS.py index e8083199..2af7b115 100644 --- a/heat/tests/functional/test_WordPress_2_Instances_With_EBS.py +++ b/heat/tests/functional/test_WordPress_2_Instances_With_EBS.py @@ -30,16 +30,23 @@ class WordPress2InstancesWithEBS(unittest.TestCase): template = 'WordPress_2_Instances_With_EBS.template' self.stack = util.Stack(template, 'F17', 'x86_64', 'cfntools') - self.WikiDatabase = util.Instance('WikiDatabase') + self.WebServer = util.Instance('WebServer') + + def tearDown(self): + self.stack.cleanup() + + def test_instance(self): + self.stack.create() + + self.WikiDatabase.wait_for_boot() self.WikiDatabase.check_cfntools() self.WikiDatabase.wait_for_provisioning() - self.WebServer = util.Instance('WebServer') + self.WebServer.wait_for_boot() self.WebServer.check_cfntools() self.WebServer.wait_for_provisioning() - def test_instance(self): # ensure wordpress was installed self.assertTrue(self.WebServer.file_present ('/etc/wordpress/wp-config.php')) @@ -62,5 +69,3 @@ class WordPress2InstancesWithEBS(unittest.TestCase): self.assertEqual(devname, '/dev/vdc1') mountpoint = result.split()[1] self.assertEqual(mountpoint, '/var/lib/mysql') - - self.stack.cleanup() diff --git a/heat/tests/functional/test_WordPress_2_Instances_With_EBS_EIP.py b/heat/tests/functional/test_WordPress_2_Instances_With_EBS_EIP.py index 4fb1be3c..0da6adcc 100644 --- a/heat/tests/functional/test_WordPress_2_Instances_With_EBS_EIP.py +++ b/heat/tests/functional/test_WordPress_2_Instances_With_EBS_EIP.py @@ -34,16 +34,25 @@ class WordPress2EBSEIPFunctionalTest(unittest.TestCase): stack_paramstr) self.webserver = util.Instance('WebServer') + + self.database = util.Instance('WikiDatabase') + + def tearDown(self): + self.stack.cleanup() + + def test_instance(self): + self.stack.create() + + self.webserver.wait_for_boot() self.webserver.check_cfntools() self.webserver.wait_for_provisioning() self.webserver.check_user_data(template) - self.database = util.Instance('WikiDatabase') + self.database.wait_for_boot() self.database.check_cfntools() self.database.wait_for_provisioning() self.database.check_user_data(template) - def test_instance(self): # Check wordpress installation wp_config_file = '/etc/wordpress/wp-config.php' self.assertTrue(self.webserver.file_present(wp_config_file), @@ -78,7 +87,3 @@ class WordPress2EBSEIPFunctionalTest(unittest.TestCase): ver = verify.VerifyStack() self.assertTrue(ver.verify_wordpress(stack_url), 'Wordpress is not accessible at: %s' % stack_url) - - def tearDown(self): - self.stack.cleanup() - pass diff --git a/heat/tests/functional/test_WordPress_2_Intances.py b/heat/tests/functional/test_WordPress_2_Intances.py index 339058b0..d277c2e6 100644 --- a/heat/tests/functional/test_WordPress_2_Intances.py +++ b/heat/tests/functional/test_WordPress_2_Intances.py @@ -36,16 +36,23 @@ class WordPress2Instances(unittest.TestCase): self.stack = util.Stack(template, 'F17', 'x86_64', 'cfntools', stack_paramstr) - self.DatabaseServer = util.Instance('DatabaseServer') + self.WebServer = util.Instance('WebServer') + + def tearDown(self): + self.stack.cleanup() + + def test_instance(self): + self.stack.create() + + self.DatabaseServer.wait_for_boot() self.DatabaseServer.check_cfntools() self.DatabaseServer.wait_for_provisioning() - self.WebServer = util.Instance('WebServer') + self.WebServer.wait_for_boot() self.WebServer.check_cfntools() self.WebServer.wait_for_provisioning() - def test_instance(self): # ensure wordpress was installed self.assertTrue(self.WebServer.file_present ('/etc/wordpress/wp-config.php')) @@ -57,5 +64,3 @@ class WordPress2Instances(unittest.TestCase): print "Got stack output WebsiteURL=%s, verifying" % stack_url ver = verify.VerifyStack() self.assertTrue(ver.verify_wordpress(stack_url)) - - self.stack.cleanup() diff --git a/heat/tests/functional/test_WordPress_Composed_Instances.py b/heat/tests/functional/test_WordPress_Composed_Instances.py index d6fb391b..5d6155d4 100644 --- a/heat/tests/functional/test_WordPress_Composed_Instances.py +++ b/heat/tests/functional/test_WordPress_Composed_Instances.py @@ -34,14 +34,24 @@ class WordPressComposedInstancesFunctionalTest(unittest.TestCase): stack_paramstr) self.WebServer = util.Instance('WebServer') + + self.MySqlDatabaseServer = util.Instance('MySqlDatabaseServer') + + def tearDown(self): + self.stack.cleanup() + + def test_instance(self): + self.stack.create() + + self.WebServer.wait_for_boot() + self.MySqlDatabaseServer.wait_for_boot() + self.WebServer.check_cfntools() self.WebServer.wait_for_provisioning() - self.MySqlDatabaseServer = util.Instance('MySqlDatabaseServer') self.MySqlDatabaseServer.check_cfntools() self.MySqlDatabaseServer.wait_for_provisioning() - def test_instance(self): self.assertTrue(self.WebServer.file_present ('/etc/wordpress/wp-config.php')) print 'Wordpress installation detected.' @@ -52,5 +62,3 @@ class WordPressComposedInstancesFunctionalTest(unittest.TestCase): print "Verifying stack output from WebsiteUrl=(%s)." % stack_url ver = verify.VerifyStack() self.assertTrue(ver.verify_wordpress(stack_url)) - - self.stack.cleanup() diff --git a/heat/tests/functional/test_WordPress_Single_Instance.py b/heat/tests/functional/test_WordPress_Single_Instance.py index 9fd8a357..d9384272 100644 --- a/heat/tests/functional/test_WordPress_Single_Instance.py +++ b/heat/tests/functional/test_WordPress_Single_Instance.py @@ -33,10 +33,16 @@ class WordPressFunctionalTest(unittest.TestCase): self.stack = util.Stack(template, 'F17', 'x86_64', 'cfntools', stack_paramstr) self.WikiDatabase = util.Instance('WikiDatabase') + + def tearDown(self): + self.stack.cleanup() + + def test_instance(self): + self.stack.create() + self.WikiDatabase.wait_for_boot() self.WikiDatabase.check_cfntools() self.WikiDatabase.wait_for_provisioning() - def test_instance(self): # ensure wordpress was installed by checking for expected # configuration file over ssh self.assertTrue(self.WikiDatabase.file_present @@ -49,5 +55,3 @@ class WordPressFunctionalTest(unittest.TestCase): print "Got stack output WebsiteURL=%s, verifying" % stack_url ver = verify.VerifyStack() self.assertTrue(ver.verify_wordpress(stack_url)) - - self.stack.cleanup() diff --git a/heat/tests/functional/test_WordPress_Single_Instance_Boto.py b/heat/tests/functional/test_WordPress_Single_Instance_Boto.py index 9fda3fad..bd734f38 100644 --- a/heat/tests/functional/test_WordPress_Single_Instance_Boto.py +++ b/heat/tests/functional/test_WordPress_Single_Instance_Boto.py @@ -33,10 +33,17 @@ class WordPressBotoFunctionalTest(unittest.TestCase): self.stack = util.StackBoto(template, 'F17', 'x86_64', 'cfntools', stack_paramstr) self.WikiDatabase = util.Instance('WikiDatabase') + + def tearDown(self): + self.stack.cleanup() + + def test_instance(self): + self.stack.create() + + self.WikiDatabase.wait_for_boot() self.WikiDatabase.check_cfntools() self.WikiDatabase.wait_for_provisioning() - def test_instance(self): # ensure wordpress was installed by checking for expected # configuration file over ssh self.assertTrue(self.WikiDatabase.file_present diff --git a/heat/tests/functional/test_WordPress_Single_Instance_With_EBS.py b/heat/tests/functional/test_WordPress_Single_Instance_With_EBS.py index 0d8a8c48..79d67921 100644 --- a/heat/tests/functional/test_WordPress_Single_Instance_With_EBS.py +++ b/heat/tests/functional/test_WordPress_Single_Instance_With_EBS.py @@ -37,10 +37,16 @@ class WordPressSingleEBSFunctionalTest(unittest.TestCase): self.stack = util.Stack(template, 'F17', 'x86_64', 'cfntools', stack_paramstr) self.WikiDatabase = util.Instance('WikiDatabase') + + def tearDown(self): + self.stack.cleanup() + + def test_instance(self): + self.stack.create() + self.WikiDatabase.wait_for_boot() self.WikiDatabase.check_cfntools() self.WikiDatabase.wait_for_provisioning() - def test_instance(self): # ensure wordpress was installed self.assertTrue(self.WikiDatabase.file_present ('/etc/wordpress/wp-config.php')) @@ -63,5 +69,3 @@ class WordPressSingleEBSFunctionalTest(unittest.TestCase): self.assertEqual(devname, '/dev/vdc1') mountpoint = result.split()[1] self.assertEqual(mountpoint, '/var/lib/mysql') - - self.stack.cleanup() diff --git a/heat/tests/functional/test_WordPress_Single_Instance_With_EBS_EIP.py b/heat/tests/functional/test_WordPress_Single_Instance_With_EBS_EIP.py index 51cd8b66..3490dec3 100644 --- a/heat/tests/functional/test_WordPress_Single_Instance_With_EBS_EIP.py +++ b/heat/tests/functional/test_WordPress_Single_Instance_With_EBS_EIP.py @@ -36,10 +36,16 @@ class WordPressEBSEIPFunctionalTest(unittest.TestCase): self.stack = util.Stack(template, 'F17', 'x86_64', 'cfntools', stack_paramstr) self.WikiDatabase = util.Instance('WikiDatabase') + + def tearDown(self): + self.stack.cleanup() + + def test_instance(self): + self.stack.create() + self.WikiDatabase.wait_for_boot() self.WikiDatabase.check_cfntools() self.WikiDatabase.wait_for_provisioning() - def test_instance(self): # ensure wordpress was installed self.assertTrue(self.WikiDatabase.file_present ('/etc/wordpress/wp-config.php')) @@ -86,5 +92,3 @@ class WordPressEBSEIPFunctionalTest(unittest.TestCase): self.assertEqual(devname, '/dev/vdc1') mountpoint = result.split()[1] self.assertEqual(mountpoint, '/var/lib/mysql') - - self.stack.cleanup() diff --git a/heat/tests/functional/test_WordPress_Single_Instance_With_EIP.py b/heat/tests/functional/test_WordPress_Single_Instance_With_EIP.py index 6e189a2e..212a4da3 100644 --- a/heat/tests/functional/test_WordPress_Single_Instance_With_EIP.py +++ b/heat/tests/functional/test_WordPress_Single_Instance_With_EIP.py @@ -36,10 +36,16 @@ class WordPressEIPFunctionalTest(unittest.TestCase): self.stack = util.Stack(template, 'F17', 'x86_64', 'cfntools', stack_paramstr) self.WikiDatabase = util.Instance('WikiDatabase') + + def tearDown(self): + self.stack.cleanup() + + def test_instance(self): + self.stack.create() + self.WikiDatabase.wait_for_boot() self.WikiDatabase.check_cfntools() self.WikiDatabase.wait_for_provisioning() - def test_instance(self): # ensure wordpress was installed self.assertTrue(self.WikiDatabase.file_present ('/etc/wordpress/wp-config.php')) @@ -75,5 +81,3 @@ class WordPressEIPFunctionalTest(unittest.TestCase): print "Got stack output InstanceIPAddress=%s, verifying url %s" %\ (stack_eip, eip_url) self.assertTrue(ver.verify_wordpress(eip_url)) - - self.stack.cleanup() diff --git a/heat/tests/functional/test_WordPress_Single_Instance_With_HA.py b/heat/tests/functional/test_WordPress_Single_Instance_With_HA.py index cf266745..408c52d8 100644 --- a/heat/tests/functional/test_WordPress_Single_Instance_With_HA.py +++ b/heat/tests/functional/test_WordPress_Single_Instance_With_HA.py @@ -33,8 +33,9 @@ class HaFunctionalTest(unittest.TestCase): self.stack = util.Stack(template, 'F17', 'x86_64', 'cfntools', stack_paramstr) self.WikiDatabase = util.Instance('WikiDatabase') - self.WikiDatabase.check_cfntools() - self.WikiDatabase.wait_for_provisioning() + + def tearDown(self): + self.stack.cleanup() def service_is_running(self, name): stdin, stdout, sterr = \ @@ -48,6 +49,10 @@ class HaFunctionalTest(unittest.TestCase): return False def test_instance(self): + self.stack.create() + self.WikiDatabase.wait_for_boot() + self.WikiDatabase.check_cfntools() + self.WikiDatabase.wait_for_provisioning() # ensure wordpress was installed self.assertTrue(self.WikiDatabase.file_present @@ -67,5 +72,3 @@ class HaFunctionalTest(unittest.TestCase): tries += 1 self.assertTrue(tries < 8) time.sleep(10) - - self.stack.cleanup() diff --git a/heat/tests/functional/test_WordPress_With_LB.py b/heat/tests/functional/test_WordPress_With_LB.py index 7c4af4a4..44a042f8 100644 --- a/heat/tests/functional/test_WordPress_With_LB.py +++ b/heat/tests/functional/test_WordPress_With_LB.py @@ -38,6 +38,16 @@ class WordPressWithLBFunctionalTest(unittest.TestCase): self.MySqlDatabaseServer = util.Instance( 'DatabaseServer.MySqlDatabaseServer') + def tearDown(self): + self.stack.cleanup() + + def test_instance(self): + self.stack.create() + + self.WikiServerOne.wait_for_boot() + self.LBInstance.wait_for_boot() + self.MySqlDatabaseServer.wait_for_boot() + self.WikiServerOne.check_cfntools() self.LBInstance.check_cfntools() self.MySqlDatabaseServer.check_cfntools() @@ -46,7 +56,6 @@ class WordPressWithLBFunctionalTest(unittest.TestCase): self.LBInstance.wait_for_provisioning() self.MySqlDatabaseServer.wait_for_provisioning() - def test_instance(self): self.assertTrue(self.WikiServerOne.file_present ('/etc/wordpress/wp-config.php')) print 'Wordpress installation detected.' @@ -57,5 +66,3 @@ class WordPressWithLBFunctionalTest(unittest.TestCase): print "Verifying stack output from WebsiteUrl=(%s)." % stack_url ver = verify.VerifyStack() self.assertTrue(ver.verify_wordpress(stack_url)) - - self.stack.cleanup() diff --git a/heat/tests/functional/util.py b/heat/tests/functional/util.py index a5944235..e44bba10 100644 --- a/heat/tests/functional/util.py +++ b/heat/tests/functional/util.py @@ -76,6 +76,8 @@ class Instance(object): self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) self.ip = None + + def wait_for_boot(self): tries = 0 while self.ip is None: servers = self.novaclient.servers.list() @@ -286,26 +288,31 @@ class Stack(object): def __init__(self, template_file, distribution, arch, jeos_type, stack_paramstr): + self.template_file = template_file + self.distribution = distribution + self.stack_paramstr = stack_paramstr self.prepare_jeos(distribution, arch, jeos_type) self.novaclient = nova_client.Client(self.creds['username'], self.creds['password'], self.creds['tenant'], self.creds['auth_url'], service_type='compute') - keyname = self.novaclient.keypairs.list().pop().name - self.heatclient = self._create_heat_client() + def create(self): + keyname = self.novaclient.keypairs.list().pop().name + assert self.heatclient - full_paramstr = stack_paramstr + ';' + ';'.join(['KeyName=' + keyname, - 'LinuxDistribution=' + distribution]) + full_paramstr = ';'.join([self.stack_paramstr, + 'KeyName=' + keyname, + 'LinuxDistribution=' + self.distribution]) template_params = optparse.Values({'parameters': full_paramstr}) # Format parameters and create the stack parameters = {} parameters['StackName'] = self.stackname - template_path = self.basepath + '/templates/' + template_file + template_path = self.basepath + '/templates/' + self.template_file parameters['TemplateBody'] = open(template_path).read() parameters.update(self.heatclient.format_parameters(template_params)) result = self.heatclient.create_stack(**parameters)