summaryrefslogtreecommitdiffstats
path: root/nova/tests
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2012-05-16 23:02:30 +0000
committerGerrit Code Review <review@openstack.org>2012-05-16 23:02:30 +0000
commit7d1571bae1bd7c96f580965782e614b2be9efba0 (patch)
tree0ec9568f51117b117324f0499652367d9d714598 /nova/tests
parent5d90b39c36e8e8e1db82318e1d43129a8d2e1108 (diff)
parent7b75fe7f571dd95287307f9d1138fb476a6bf721 (diff)
Merge "Optional timeout for servers stuck in build"
Diffstat (limited to 'nova/tests')
-rw-r--r--nova/tests/test_compute.py104
1 files changed, 104 insertions, 0 deletions
diff --git a/nova/tests/test_compute.py b/nova/tests/test_compute.py
index a40162613..265edf8a9 100644
--- a/nova/tests/test_compute.py
+++ b/nova/tests/test_compute.py
@@ -1873,6 +1873,110 @@ class ComputeTestCase(BaseTestCase):
for uuid, status in expected_migration_status.iteritems():
self.assertEqual(status, fetch_instance_migration_status(uuid))
+ def test_instance_build_timeout_disabled(self):
+ self.flags(instance_build_timeout=0)
+ ctxt = context.get_admin_context()
+ called = {'get_all': False, 'set_error_state': 0}
+ created_at = utils.utcnow() + datetime.timedelta(seconds=-60)
+
+ def fake_instance_get_all_by_filters(*args, **kwargs):
+ called['get_all'] = True
+ return instances[:]
+
+ self.stubs.Set(db, 'instance_get_all_by_filters',
+ fake_instance_get_all_by_filters)
+
+ def fake_set_instance_error_state(_ctxt, instance_uuid, **kwargs):
+ called['set_error_state'] += 1
+
+ self.stubs.Set(self.compute, '_set_instance_error_state',
+ fake_set_instance_error_state)
+
+ instance_map = {}
+ instances = []
+ for x in xrange(5):
+ uuid = 'fake-uuid-%s' % x
+ instance_map[uuid] = {'uuid': uuid, 'host': FLAGS.host,
+ 'vm_state': vm_states.BUILDING,
+ 'created_at': created_at}
+ instances.append(instance_map[uuid])
+
+ self.compute._check_instance_build_time(ctxt)
+ self.assertFalse(called['get_all'])
+ self.assertEqual(called['set_error_state'], 0)
+
+ def test_instance_build_timeout(self):
+ self.flags(instance_build_timeout=30)
+ ctxt = context.get_admin_context()
+ called = {'get_all': False, 'set_error_state': 0}
+ created_at = utils.utcnow() + datetime.timedelta(seconds=-60)
+
+ def fake_instance_get_all_by_filters(*args, **kwargs):
+ called['get_all'] = True
+ return instances[:]
+
+ self.stubs.Set(db, 'instance_get_all_by_filters',
+ fake_instance_get_all_by_filters)
+
+ def fake_set_instance_error_state(_ctxt, instance_uuid, **kwargs):
+ called['set_error_state'] += 1
+
+ self.stubs.Set(self.compute, '_set_instance_error_state',
+ fake_set_instance_error_state)
+
+ instance_map = {}
+ instances = []
+ for x in xrange(5):
+ uuid = 'fake-uuid-%s' % x
+ instance_map[uuid] = {'uuid': uuid, 'host': FLAGS.host,
+ 'vm_state': vm_states.BUILDING,
+ 'created_at': created_at}
+ instances.append(instance_map[uuid])
+
+ self.compute._check_instance_build_time(ctxt)
+ self.assertTrue(called['get_all'])
+ self.assertEqual(called['set_error_state'], 5)
+
+ def test_instance_build_timeout_mixed_instances(self):
+ self.flags(instance_build_timeout=30)
+ ctxt = context.get_admin_context()
+ called = {'get_all': False, 'set_error_state': 0}
+ created_at = utils.utcnow() + datetime.timedelta(seconds=-60)
+
+ def fake_instance_get_all_by_filters(*args, **kwargs):
+ called['get_all'] = True
+ return instances[:]
+
+ self.stubs.Set(db, 'instance_get_all_by_filters',
+ fake_instance_get_all_by_filters)
+
+ def fake_set_instance_error_state(_ctxt, instance_uuid, **kwargs):
+ called['set_error_state'] += 1
+
+ self.stubs.Set(self.compute, '_set_instance_error_state',
+ fake_set_instance_error_state)
+
+ instance_map = {}
+ instances = []
+ #expired instances
+ for x in xrange(4):
+ uuid = 'fake-uuid-%s' % x
+ instance_map[uuid] = {'uuid': uuid, 'host': FLAGS.host,
+ 'vm_state': vm_states.BUILDING,
+ 'created_at': created_at}
+ instances.append(instance_map[uuid])
+
+ #not expired
+ uuid = 'fake-uuid-5'
+ instance_map[uuid] = {'uuid': uuid, 'host': FLAGS.host,
+ 'vm_state': vm_states.BUILDING,
+ 'created_at': utils.utcnow()}
+ instances.append(instance_map[uuid])
+
+ self.compute._check_instance_build_time(ctxt)
+ self.assertTrue(called['get_all'])
+ self.assertEqual(called['set_error_state'], 4)
+
class ComputeAPITestCase(BaseTestCase):