From 4ffa6bfd666b38309c75dbbca31db2f86b8247b3 Mon Sep 17 00:00:00 2001 From: Ryota MIBU Date: Thu, 10 Dec 2015 15:17:11 +0900 Subject: [PATCH] tempest: copy telemetry client from tempest tree Change-Id: Ib1a5bb4ac819a02346befe5220af2534998758f8 Implements: blueprint tempest-plugin --- ceilometer/tests/tempest/__init__.py | 0 ceilometer/tests/tempest/client.py | 92 ++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 ceilometer/tests/tempest/__init__.py create mode 100644 ceilometer/tests/tempest/client.py diff --git a/ceilometer/tests/tempest/__init__.py b/ceilometer/tests/tempest/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ceilometer/tests/tempest/client.py b/ceilometer/tests/tempest/client.py new file mode 100644 index 0000000000..05530b15d6 --- /dev/null +++ b/ceilometer/tests/tempest/client.py @@ -0,0 +1,92 @@ +# Copyright 2014 OpenStack Foundation +# All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from oslo_serialization import jsonutils as json +from six.moves.urllib import parse as urllib + +from tempest.common import service_client + + +class TelemetryClient(service_client.ServiceClient): + + version = '2' + uri_prefix = "v2" + + def deserialize(self, body): + return json.loads(body.replace("\n", "")) + + def serialize(self, body): + return json.dumps(body) + + def add_sample(self, sample_list, meter_name, meter_unit, volume, + sample_type, resource_id, **kwargs): + sample = {"counter_name": meter_name, "counter_unit": meter_unit, + "counter_volume": volume, "counter_type": sample_type, + "resource_id": resource_id} + for key in kwargs: + sample[key] = kwargs[key] + + sample_list.append(self.serialize(sample)) + return sample_list + + def create_sample(self, meter_name, sample_list): + uri = "%s/meters/%s" % (self.uri_prefix, meter_name) + body = self.serialize(sample_list) + resp, body = self.post(uri, body) + self.expected_success(200, resp.status) + body = self.deserialize(body) + return service_client.ResponseBody(resp, body) + + def _helper_list(self, uri, query=None, period=None): + uri_dict = {} + if query: + uri_dict = {'q.field': query[0], + 'q.op': query[1], + 'q.value': query[2]} + if period: + uri_dict['period'] = period + if uri_dict: + uri += "?%s" % urllib.urlencode(uri_dict) + resp, body = self.get(uri) + self.expected_success(200, resp.status) + body = self.deserialize(body) + return service_client.ResponseBodyList(resp, body) + + def list_resources(self, query=None): + uri = '%s/resources' % self.uri_prefix + return self._helper_list(uri, query) + + def list_meters(self, query=None): + uri = '%s/meters' % self.uri_prefix + return self._helper_list(uri, query) + + def list_statistics(self, meter, period=None, query=None): + uri = "%s/meters/%s/statistics" % (self.uri_prefix, meter) + return self._helper_list(uri, query, period) + + def list_samples(self, meter_id, query=None): + uri = '%s/meters/%s' % (self.uri_prefix, meter_id) + return self._helper_list(uri, query) + + def list_events(self, query=None): + uri = '%s/events' % self.uri_prefix + return self._helper_list(uri, query) + + def show_resource(self, resource_id): + uri = '%s/resources/%s' % (self.uri_prefix, resource_id) + resp, body = self.get(uri) + self.expected_success(200, resp.status) + body = self.deserialize(body) + return service_client.ResponseBody(resp, body)