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:
@@ -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']:
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user