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 <zbitter@redhat.com>
This commit is contained in:
Zane Bitter
2012-09-12 16:12:45 +02:00
parent e7bd43657d
commit ab754ba493
12 changed files with 108 additions and 45 deletions

View File

@@ -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()

View File

@@ -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

View File

@@ -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()

View File

@@ -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()

View File

@@ -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()

View File

@@ -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

View File

@@ -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()

View File

@@ -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()

View File

@@ -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()

View File

@@ -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()

View File

@@ -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()

View File

@@ -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)