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
	 Igor Degtiarov
					Igor Degtiarov