tempests changes

Change-Id: Ie765e1971428e2ba09716307eabc65c63ee90f0c
This commit is contained in:
Alexey Weyl 2016-05-03 15:00:01 +03:00
parent 9e28c41fbd
commit 63f2583070
9 changed files with 58 additions and 20 deletions

View File

@ -39,15 +39,18 @@ class AlarmTransformerBase(tbase.TransformerBase):
def _extract_action_type(self, entity_event): def _extract_action_type(self, entity_event):
# TODO(ifat_afek): this method should reside together with the cache, # TODO(ifat_afek): this method should reside together with the cache,
# in the transformer code # in the transformer code
if DSProps.EVENT_TYPE in entity_event: if DSProps.EVENT_TYPE in entity_event and \
entity_event[DSProps.EVENT_TYPE] == EventAction.DELETE_ENTITY:
return entity_event[DSProps.EVENT_TYPE] return entity_event[DSProps.EVENT_TYPE]
sync_mode = entity_event[DSProps.SYNC_MODE] sync_mode = entity_event[DSProps.SYNC_MODE]
if sync_mode in (SyncMode.UPDATE, SyncMode.SNAPSHOT): if sync_mode in (SyncMode.UPDATE, SyncMode.SNAPSHOT):
return EventAction.DELETE_ENTITY if self._ok_status(entity_event) \ return EventAction.DELETE_ENTITY if self._ok_status(entity_event) \
else EventAction.UPDATE_ENTITY else EventAction.UPDATE_ENTITY
if SyncMode.INIT_SNAPSHOT == sync_mode: if SyncMode.INIT_SNAPSHOT == sync_mode:
return EventAction.CREATE_ENTITY return EventAction.CREATE_ENTITY
raise VitrageTransformerError('Invalid sync mode: (%s)' % sync_mode) raise VitrageTransformerError('Invalid sync mode: (%s)' % sync_mode)
def _key_values(self, *args): def _key_values(self, *args):

View File

@ -60,9 +60,9 @@ class InstanceDriver(NovaDriverBase):
'compute.instance.rebuild.end', 'compute.instance.rebuild.end',
'compute.instance.resize.end', 'compute.instance.resize.end',
'compute.instance.resize.revert.end', 'compute.instance.resize.revert.end',
'compute.instance.resume', 'compute.instance.resume.end',
'compute.instance.shutdown.end', 'compute.instance.shutdown.end',
'compute.instance.suspend', 'compute.instance.suspend.end',
'compute.instance.volume.attach', 'compute.instance.volume.attach',
'compute.instance.volume.detach', 'compute.instance.volume.detach',
'compute.instance.pause.end', 'compute.instance.pause.end',

View File

@ -58,14 +58,15 @@ class BaseApiTest(base.BaseTestCase):
def _create_volume_and_attach(self, name, size, instance_id, mount_point): def _create_volume_and_attach(self, name, size, instance_id, mount_point):
volume = self.cinder_client.volumes.create(display_name=name, volume = self.cinder_client.volumes.create(display_name=name,
size=size) size=size)
time.sleep(3) time.sleep(2)
self.cinder_client.volumes.attach(volume=volume, self.cinder_client.volumes.attach(volume=volume,
instance_uuid=instance_id, instance_uuid=instance_id,
mountpoint=mount_point) mountpoint=mount_point)
self._wait_for_status(20, self._wait_for_status(30,
self._check_num_volumes, self._check_num_volumes,
num_volumes=1) num_volumes=1,
state='in-use')
time.sleep(2) time.sleep(2)
@ -80,9 +81,10 @@ class BaseApiTest(base.BaseTestCase):
flavor=flavors_list[0], flavor=flavors_list[0],
image=images_list[0]) for index in range(num_instances)] image=images_list[0]) for index in range(num_instances)]
self._wait_for_status(20, self._wait_for_status(30,
self._check_num_instances, self._check_num_instances,
num_instances=num_instances) num_instances=num_instances,
state='active')
time.sleep(2) time.sleep(2)
return resources return resources
@ -95,7 +97,7 @@ class BaseApiTest(base.BaseTestCase):
except Exception: except Exception:
pass pass
self._wait_for_status(20, self._wait_for_status(30,
self._check_num_instances, self._check_num_instances,
num_instances=0) num_instances=0)
@ -116,11 +118,20 @@ class BaseApiTest(base.BaseTestCase):
time.sleep(2) time.sleep(2)
def _check_num_instances(self, num_instances=0): def _check_num_instances(self, num_instances=0, state=''):
return len(self.nova_client.servers.list()) == num_instances if len(self.nova_client.servers.list()) != num_instances:
return False
def _check_num_volumes(self, num_volumes=0): return all(instance.__dict__['status'].upper() == state.upper()
return len(self.cinder_client.volumes.list()) == num_volumes for instance in self.nova_client.servers.list())
def _check_num_volumes(self, num_volumes=0, state=''):
if len(self.cinder_client.volumes.list()) != num_volumes:
return False
return all(volume.__dict__['status'].upper() == state.upper() and
len(volume.__dict__['attachments']) == 1
for volume in self.cinder_client.volumes.list())
@staticmethod @staticmethod
def _create_graph_from_graph_dictionary(api_graph): def _create_graph_from_graph_dictionary(api_graph):

View File

@ -42,6 +42,8 @@ class TestAodhAlarm(BaseApiTest):
instance_entities=1, instance_edges=2, instance_entities=1, instance_edges=2,
aodh_entities=1, aodh_edges=1) aodh_entities=1, aodh_edges=1)
self._validate_graph_correctness(graph, 5, 4, entities) self._validate_graph_correctness(graph, 5, 4, entities)
except Exception as e:
LOG.exception(e)
finally: finally:
self._delete_ceilometer_alarms() self._delete_ceilometer_alarms()
self._delete_instances() self._delete_instances()
@ -56,28 +58,35 @@ class TestAodhAlarm(BaseApiTest):
host_entities=1, host_edges=1, host_entities=1, host_edges=1,
aodh_entities=1, aodh_edges=0) aodh_entities=1, aodh_edges=0)
self._validate_graph_correctness(graph, 4, 2, entities) self._validate_graph_correctness(graph, 4, 2, entities)
except Exception as e:
LOG.exception(e)
finally: finally:
self._delete_ceilometer_alarms() self._delete_ceilometer_alarms()
def _create_ceilometer_alarm(self, resource_id=None): def _create_ceilometer_alarm(self, resource_id=None):
aodh_request = self._aodh_request(resource_id=resource_id) aodh_request = self._aodh_request(resource_id=resource_id)
self.ceilometer_client.alarms.create(**aodh_request) self.ceilometer_client.alarms.create(**aodh_request)
self._wait_for_status(20, self._wait_for_status(30,
self._check_num_alarms, self._check_num_alarms,
num_alarms=1) num_alarms=1,
state='alarm')
time.sleep(25) time.sleep(25)
def _delete_ceilometer_alarms(self): def _delete_ceilometer_alarms(self):
alarms = self.ceilometer_client.alarms.list() alarms = self.ceilometer_client.alarms.list()
for alarm in alarms: for alarm in alarms:
self.ceilometer_client.alarms.delete(alarm.alarm_id) self.ceilometer_client.alarms.delete(alarm.alarm_id)
self._wait_for_status(20, self._wait_for_status(30,
self._check_num_alarms, self._check_num_alarms,
num_alarms=0) num_alarms=0)
time.sleep(25) time.sleep(25)
def _check_num_alarms(self, num_alarms=0): def _check_num_alarms(self, num_alarms=0, state=''):
return len(self.ceilometer_client.alarms.list()) == num_alarms if len(self.ceilometer_client.alarms.list()) != num_alarms:
return False
return all(alarm.__dict__['state'].upper() == state.upper()
for alarm in self.ceilometer_client.alarms.list())
def _aodh_request(self, resource_id=None): def _aodh_request(self, resource_id=None):
query = [] query = []

View File

@ -35,5 +35,7 @@ class TestCinderVolume(BaseTopologyTest):
instance_entities=3, instance_edges=4, instance_entities=3, instance_edges=4,
volume_entities=1, volume_edges=1) volume_entities=1, volume_edges=1)
self._validate_graph_correctness(graph, 7, 6, entities) self._validate_graph_correctness(graph, 7, 6, entities)
except Exception as e:
LOG.exception(e)
finally: finally:
self._rollback_to_default() self._rollback_to_default()

View File

@ -34,5 +34,7 @@ class TestNova(BaseTopologyTest):
host_entities=1, host_edges=4, host_entities=1, host_edges=4,
instance_entities=3, instance_edges=3) instance_entities=3, instance_edges=3)
self._validate_graph_correctness(graph, 6, 5, entities) self._validate_graph_correctness(graph, 6, 5, entities)
except Exception as e:
LOG.exception(e)
finally: finally:
self._rollback_to_default() self._rollback_to_default()

View File

@ -39,6 +39,8 @@ class TestStaticPhysical(BaseApiTest):
host_entities=1, host_edges=3, host_entities=1, host_edges=3,
switch_entities=2, switch_edges=2) switch_entities=2, switch_edges=2)
self._validate_graph_correctness(graph, 5, 4, entities) self._validate_graph_correctness(graph, 5, 4, entities)
except Exception as e:
LOG.exception(e)
finally: finally:
self._delete_switches() self._delete_switches()

View File

@ -45,6 +45,7 @@ class BaseTopologyTest(BaseApiTest):
self._create_volume_and_attach('volume-1', 1, self._create_volume_and_attach('volume-1', 1,
resources[0].__dict__['id'], resources[0].__dict__['id'],
'/tmp/vda') '/tmp/vda')
# waiting until all the entities creation were processed by the # waiting until all the entities creation were processed by the
# entity graph processor # entity graph processor
time.sleep(end_sleep) time.sleep(end_sleep)
@ -55,7 +56,7 @@ class BaseTopologyTest(BaseApiTest):
# waiting until all the entities deletion were processed by the # waiting until all the entities deletion were processed by the
# entity graph processor # entity graph processor
time.sleep(5) time.sleep(2)
@staticmethod @staticmethod
def _compare_graphs(api_graph, cli_graph): def _compare_graphs(api_graph, cli_graph):

View File

@ -45,6 +45,8 @@ class TestTopology(BaseTopologyTest):
instance_entities=3, instance_edges=4, instance_entities=3, instance_edges=4,
volume_entities=1, volume_edges=1) volume_entities=1, volume_edges=1)
self._validate_graph_correctness(graph, 7, 6, entities) self._validate_graph_correctness(graph, 7, 6, entities)
except Exception as e:
LOG.exception(e)
finally: finally:
self._rollback_to_default() self._rollback_to_default()
@ -59,6 +61,8 @@ class TestTopology(BaseTopologyTest):
host_entities=1, host_edges=4, host_entities=1, host_edges=4,
instance_entities=3, instance_edges=3) instance_entities=3, instance_edges=3)
self._validate_graph_correctness(graph, 6, 5, entities) self._validate_graph_correctness(graph, 6, 5, entities)
except Exception as e:
LOG.exception(e)
finally: finally:
self._rollback_to_default() self._rollback_to_default()
@ -72,18 +76,22 @@ class TestTopology(BaseTopologyTest):
host_entities=1, host_edges=4, host_entities=1, host_edges=4,
instance_entities=3, instance_edges=3) instance_entities=3, instance_edges=3)
self._validate_graph_correctness(graph, 6, 5, entities) self._validate_graph_correctness(graph, 6, 5, entities)
except Exception as e:
LOG.exception(e)
finally: finally:
self._rollback_to_default() self._rollback_to_default()
def test_tree_with_query(self): def test_tree_with_query(self):
try: try:
# create entities # create entities
self._create_entities(num_instances=3, end_sleep=10) self._create_entities(num_instances=3)
api_graph = self.vitrage_client.topology.get( api_graph = self.vitrage_client.topology.get(
graph_type='tree', query=self._tree_query()) graph_type='tree', query=self._tree_query())
graph = self._create_graph_from_tree_dictionary(api_graph) graph = self._create_graph_from_tree_dictionary(api_graph)
entities = self._entities_validation_data( entities = self._entities_validation_data(
host_entities=1, host_edges=1) host_entities=1, host_edges=1)
self._validate_graph_correctness(graph, 3, 2, entities) self._validate_graph_correctness(graph, 3, 2, entities)
except Exception as e:
LOG.exception(e)
finally: finally:
self._rollback_to_default() self._rollback_to_default()