summaryrefslogtreecommitdiff
path: root/nova/tests/functional/integrated_helpers.py
diff options
context:
space:
mode:
Diffstat (limited to 'nova/tests/functional/integrated_helpers.py')
-rw-r--r--nova/tests/functional/integrated_helpers.py46
1 files changed, 44 insertions, 2 deletions
diff --git a/nova/tests/functional/integrated_helpers.py b/nova/tests/functional/integrated_helpers.py
index f01993ba9a..86d3cca2a4 100644
--- a/nova/tests/functional/integrated_helpers.py
+++ b/nova/tests/functional/integrated_helpers.py
@@ -70,7 +70,6 @@ class _IntegratedTestBase(test.TestCase):
self.flags(verbose=True)
nova.tests.unit.image.fake.stub_out_image_service(self)
- self._setup_services()
self.api_fixture = self.useFixture(
nova_fixtures.OSAPIFixture(self.api_major_version))
@@ -82,8 +81,13 @@ class _IntegratedTestBase(test.TestCase):
else:
self.api = self.api_fixture.api
+ if hasattr(self, 'microversion'):
+ self.api.microversion = self.microversion
+
self.useFixture(cast_as_call.CastAsCall(self.stubs))
+ self._setup_services()
+
self.addCleanup(nova.tests.unit.image.fake.FakeImageService_reset)
def _setup_compute_service(self):
@@ -96,12 +100,13 @@ class _IntegratedTestBase(test.TestCase):
def _setup_services(self):
self.conductor = self.start_service('conductor',
manager=CONF.conductor.manager)
- self.compute = self._setup_compute_service()
self.consoleauth = self.start_service('consoleauth')
self.network = self.start_service('network')
self.scheduler = self._setup_scheduler_service()
+ self.compute = self._setup_compute_service()
+
def get_unused_server_name(self):
servers = self.api.get_servers()
server_names = [server['name'] for server in servers]
@@ -231,3 +236,40 @@ class InstanceHelperMixin(object):
server['flavorRef'] = ('http://fake.server/%s' % flavor_id)
server['name'] = name
return server
+
+ def _wait_for_action_fail_completion(
+ self, server, expected_action, event_name, api=None):
+ """Polls instance action events for the given instance, action and
+ action event name until it finds the action event with an error
+ result.
+ """
+ if api is None:
+ api = self.api
+ completion_event = None
+ for attempt in range(10):
+ actions = api.get_instance_actions(server['id'])
+ # Look for the migrate action.
+ for action in actions:
+ if action['action'] == expected_action:
+ events = (
+ api.api_get(
+ '/servers/%s/os-instance-actions/%s' %
+ (server['id'], action['request_id'])
+ ).body['instanceAction']['events'])
+ # Look for the action event being in error state.
+ for event in events:
+ if (event['event'] == event_name and
+ event['result'] is not None and
+ event['result'].lower() == 'error'):
+ completion_event = event
+ # Break out of the events loop.
+ break
+ if completion_event:
+ # Break out of the actions loop.
+ break
+ # We didn't find the completion event yet, so wait a bit.
+ time.sleep(0.5)
+
+ if completion_event is None:
+ self.fail('Timed out waiting for %s failure event. Current '
+ 'instance actions: %s' % (event_name, actions))