Functional tests for OpenstackTelemetry plugin (Events part)

Testing Ceilometer Event API in OpenstackTelemetry plugin when Events API
is available

Change-Id: I57f3b23926a84116bbeba300c9e616ed36c89b64
This commit is contained in:
Igor Degtiarov
2016-09-19 18:08:24 +03:00
parent 44c9956f45
commit 6dbc85b2f3
2 changed files with 164 additions and 70 deletions

View File

@@ -32,27 +32,29 @@ class OpenstackTelemeteryPluginApi(base_test.PluginApi):
@property
def ceilometer_client(self):
if self._ceilometer is None:
keystone_access = self.helpers.os_conn.keystone
keystone_access = self.helpers.os_conn.keystone_access
endpoint = keystone_access.service_catalog.url_for(
service_type='metering',
service_name='ceilometer',
endpoint_type='internalURL'
)
service_type='metering', service_name='ceilometer',
interface='internal')
if not endpoint:
raise self.helpers.NotFound(
"Cannot find Ceilometer endpoint")
aodh_endpoint = keystone_access.service_catalog.url_for(
service_type='alarming',
service_name='aodh',
endpoint_type='internalURL'
)
service_type='alarming', service_name='aodh',
interface='internal')
if not aodh_endpoint:
raise self.helpers.NotFound(
"Cannot find AODH (alarm) endpoint")
auth_url = keystone_access.service_catalog.url_for(
service_type='identity', service_name='keystone',
interface='internal')
if not auth_url:
raise self.helpers.NotFound(
"Cannot find Keystone endpoint")
self._ceilometer = ceilometerclient.v2.Client(
aodh_endpoint=aodh_endpoint,
auth_url=keystone_access.auth_url,
auth_url=auth_url,
endpoint=endpoint,
token=lambda: keystone_access.auth_token)
return self._ceilometer
@@ -130,63 +132,105 @@ class OpenstackTelemeteryPluginApi(base_test.PluginApi):
self.settings.name, self.settings.version)
def check_ceilometer_sample_functionality(self):
fail_msg = 'Failed to get sample list.'
msg = 'getting samples list'
logger.info("Start checking Ceilometer Samples API")
fail_msg = "Failed to get sample list."
msg = "getting samples list"
self.helpers.verify(60, self.ceilometer_client.new_samples.list, 1,
fail_msg, msg, limit=10)
fail_msg = 'Failed to get statistic of metric.'
msg = 'getting statistic of metric'
fail_msg = "Failed to get statistic of metric."
msg = "getting statistic of metric"
an_hour_ago = (datetime.datetime.now() -
datetime.timedelta(hours=1)).isoformat()
query = [{'field': 'timestamp', 'op': 'gt', 'value': an_hour_ago}]
query = [{"field": "timestamp", "op": "gt", "value": an_hour_ago}]
self.helpers.verify(600, self.ceilometer_client.statistics.list, 2,
fail_msg, msg, meter_name='image', q=query)
fail_msg, msg, meter_name="image", q=query)
def check_ceilometer_alarm_functionality(self):
fail_msg = 'Failed to create alarm.'
msg = 'creating alarm'
alarm = self.helpers.verify(60, self.create_alarm, 1, fail_msg, msg,
meter_name='image',
threshold=0.9,
name='ceilometer-fake-alarm',
period=600,
statistic='avg',
comparison_operator='lt')
logger.info("Start checking Ceilometer AODH(Alarms) API")
fail_msg = 'Failed to get alarm.'
msg = 'getting alarm'
fail_msg = "Failed to create alarm."
msg = "creating alarm"
alarm = self.helpers.verify(60, self.create_alarm, 1, fail_msg, msg,
meter_name="image",
threshold=0.9,
name="ceilometer-fake-alarm",
period=600,
statistic="avg",
comparison_operator="lt")
fail_msg = "Failed to get alarm."
msg = "getting alarm"
self.helpers.verify(60, self.ceilometer_client.alarms.get, 2,
fail_msg, msg, alarm_id=alarm.alarm_id)
fail_msg = 'Failed while waiting for alarm state to become "ok".'
msg = 'waiting for alarm state to become "ok"'
fail_msg = "Failed while waiting for alarm state to become 'ok'."
msg = "waiting for alarm state to become 'ok'"
self.helpers.verify(1000, self.check_alarm_state, 3,
fail_msg, msg, alarm_id=alarm.alarm_id, state='ok')
fail_msg, msg, alarm_id=alarm.alarm_id, state="ok")
fail_msg = 'Failed to update alarm.'
msg = 'updating alarm'
fail_msg = "Failed to update alarm."
msg = "updating alarm"
self.helpers.verify(60, self.ceilometer_client.alarms.update, 4,
fail_msg, msg, alarm_id=alarm.alarm_id,
threshold=1.1)
fail_msg = 'Failed while waiting for alarm state to become "alarm".'
msg = 'waiting for alarm state to become "alarm"'
fail_msg = "Failed while waiting for alarm state to become 'alarm'."
msg = "waiting for alarm state to become 'alarm'"
self.helpers.verify(1000, self.check_alarm_state, 5,
fail_msg, msg, alarm_id=alarm.alarm_id,
state='alarm')
state="alarm")
fail_msg = 'Failed to get alarm history.'
msg = 'getting alarm history'
fail_msg = "Failed to get alarm history."
msg = "getting alarm history"
self.helpers.verify(60, self.ceilometer_client.alarms.get_history, 6,
fail_msg, msg, alarm_id=alarm.alarm_id)
fail_msg = 'Failed to delete alarm.'
msg = 'deleting alarm'
fail_msg = "Failed to delete alarm."
msg = "deleting alarm"
self.helpers.verify(60, self.ceilometer_client.alarms.delete, 7,
fail_msg, msg, alarm_id=alarm.alarm_id)
def check_ceilometer_event_functionality(self):
logger.info("Start checking Ceilometer Events API")
fail_msg = "Failed to get event list."
msg = "getting event list"
events_list = self.helpers.verify(
600, self.ceilometer_client.events.list, 1, fail_msg, msg,
limit=10
)
event_type = events_list[0].event_type
message_id = events_list[0].message_id
traits = events_list[0].traits
fail_msg = ("Failed to find '{event_type}' event type in certain "
"'{message_id}' event.".format(event_type=event_type,
message_id=message_id))
msg = ("searching '{event_type}' event type in certain "
"'{message_id}' event.".format(event_type=event_type,
message_id=message_id))
self.helpers.verify(60, self.ceilometer_client.events.get, 2, fail_msg,
msg, message_id=message_id)
fail_msg = "Failed to get event types list."
msg = "getting event types list"
self.helpers.verify(60, self.ceilometer_client.event_types.list, 3,
fail_msg, msg)
fail_msg = "Failed to get trait list."
msg = "getting trait list"
self.helpers.verify(60, self.ceilometer_client.traits.list, 4,
fail_msg, msg, event_type=event_type,
trait_name=traits[0]["name"])
fail_msg = "Failed to check event traits description."
msg = "checking event traits description"
self.helpers.verify(60, self.ceilometer_client.trait_descriptions.list,
5, fail_msg, msg, event_type=event_type)
def create_alarm(self, **kwargs):
for alarm in self.ceilometer_client.alarms.list():
if alarm.name == kwargs['name']:

View File

@@ -22,9 +22,35 @@ from stacklight_tests.toolchain import api
class TestOpenstackTelemetry(api.ToolchainApi):
"""Class for testing the Openstack Telemetry Plugin."""
@test(depends_on_groups=['prepare_slaves_5'],
groups=["deploy_openstack_telemetry", "deploy",
"openstack_telemetry", "smoke"])
def _deploy_telemetry_plugin(self, caller, snapshot="ready_with_5_slaves",
advanced_options=None, additional_tests=None):
self.check_run(caller)
self.env.revert_snapshot(snapshot)
self.add_plugin(self.OPENSTACK_TELEMETRY)
self.disable_plugin(self.LMA_COLLECTOR)
self.disable_plugin(self.LMA_INFRASTRUCTURE_ALERTING)
self.prepare_plugins()
self.helpers.create_cluster(name=self.__class__.__name__)
self.activate_plugins()
if advanced_options:
self.OPENSTACK_TELEMETRY.activate_plugin(options=advanced_options)
roles = ["elasticsearch_kibana", "influxdb_grafana"]
self.helpers.deploy_cluster(
{"slave-01": ["controller"],
"slave-02": ["controller"],
"slave-03": ["controller"],
"slave-04": ["compute", "cinder"],
"slave-05": roles})
self.check_plugins_online()
self.helpers.run_ostf()
if additional_tests:
for ostf_test in additional_tests:
ostf_test()
self.env.make_snapshot(caller, is_make=True)
@test(depends_on_groups=["prepare_slaves_5"],
groups=["deploy_openstack_telemetry", "deploy", "smoke",
"openstack_telemetry"])
@log_snapshot_after_test
def deploy_openstack_telemetry(self):
"""Deploy an environment with Openstack-Telemetry plugin
@@ -43,31 +69,9 @@ class TestOpenstackTelemetry(api.ToolchainApi):
Duration 90m
"""
self.check_run("deploy_openstack_telemetry")
self.env.revert_snapshot("ready_with_5_slaves")
self.add_plugin(self.OPENSTACK_TELEMETRY)
self.disable_plugin(self.LMA_COLLECTOR)
self.disable_plugin(self.LMA_INFRASTRUCTURE_ALERTING)
self.prepare_plugins()
self.helpers.create_cluster(name=self.__class__.__name__)
self.activate_plugins()
roles = ["elasticsearch_kibana", "influxdb_grafana"]
self.helpers.deploy_cluster(
{'slave-01': ['controller'],
'slave-02': ['controller'],
'slave-03': ['controller'],
'slave-04': ['compute', 'cinder'],
'slave-05': roles})
self.check_plugins_online()
self.helpers.run_ostf()
self.env.make_snapshot("deploy_openstack_telemetry", is_make=True)
self._deploy_telemetry_plugin("deploy_openstack_telemetry")
@test(groups=["openstack_telemetry"])
class TestOpenstackTelemetryFunctional(api.ToolchainApi):
"""Class for functional testing the Openstack Telemetry Plugin."""
@test(depends_on_groups=['deploy_openstack_telemetry'],
@test(depends_on_groups=["deploy_openstack_telemetry"],
groups=["openstack_telemetry_default_functional", "functional"])
def openstack_telemetry_default_functional(self):
"""Deploy an environment with Openstack-Telemetry plugin with
@@ -80,7 +84,53 @@ class TestOpenstackTelemetryFunctional(api.ToolchainApi):
Duration 90m
"""
self.check_run("openstack_telemetry_default_functional")
self.env.revert_snapshot("deploy_openstack_telemetry")
self.OPENSTACK_TELEMETRY.check_ceilometer_sample_functionality()
self.OPENSTACK_TELEMETRY.check_ceilometer_alarm_functionality()
additional_tests = (
self.OPENSTACK_TELEMETRY.check_ceilometer_sample_functionality,
self.OPENSTACK_TELEMETRY.check_ceilometer_alarm_functionality
)
self._deploy_telemetry_plugin("openstack_telemetry_default_functional",
snapshot="deploy_openstack_telemetry",
additional_tests=additional_tests
)
@test(depends_on_groups=["prepare_slaves_5"],
groups=["openstack_telemetry_event_functional",
"deploy_openstack_telemetry", "functional"])
@log_snapshot_after_test
def openstack_telemetry_event_functional(self):
"""Deploy an environment with Openstack-Telemetry plugin with
enabled Ceilometer Event API and check its functionality
1. Upload the Openstack-Telemetry, Elasticsearch-Kibana and
InfluxDB-Grafana plugins to the master node
2. Install the plugins
3. Create the cluster
4. Add 3 nodes with controller role
5. Add 1 nodes with compute and cinder roles
6. Add 1 nodes with elasticsearch_kibana and influxdb_grafana roles
7. Enable Ceilometer Event API
8. Deploy the cluster
9. Check that plugins are running
10. Run OSTF
11. Check Ceilometer Sample API
12. Check Ceilometer Alarm API
13. Check Ceilometer Events API
Duration 90m
"""
additional_tests = (
self.OPENSTACK_TELEMETRY.check_ceilometer_sample_functionality,
self.OPENSTACK_TELEMETRY.check_ceilometer_alarm_functionality,
self.OPENSTACK_TELEMETRY.check_ceilometer_event_functionality,
)
options = {
"advanced_settings/value": True,
"event_api/value": True,
}
self._deploy_telemetry_plugin("openstack_telemetry_event_functional",
additional_tests=additional_tests,
advanced_options=options
)