diff --git a/tempest_lib/api_schema/response/compute/v2_1/instance_usage_audit_logs.py b/tempest_lib/api_schema/response/compute/v2_1/instance_usage_audit_logs.py new file mode 100644 index 0000000..c6c4deb --- /dev/null +++ b/tempest_lib/api_schema/response/compute/v2_1/instance_usage_audit_logs.py @@ -0,0 +1,62 @@ +# Copyright 2014 NEC Corporation. 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. + +common_instance_usage_audit_log = { + 'type': 'object', + 'properties': { + 'hosts_not_run': { + 'type': 'array', + 'items': {'type': 'string'} + }, + 'log': {'type': 'object'}, + 'num_hosts': {'type': 'integer'}, + 'num_hosts_done': {'type': 'integer'}, + 'num_hosts_not_run': {'type': 'integer'}, + 'num_hosts_running': {'type': 'integer'}, + 'overall_status': {'type': 'string'}, + 'period_beginning': {'type': 'string'}, + 'period_ending': {'type': 'string'}, + 'total_errors': {'type': 'integer'}, + 'total_instances': {'type': 'integer'} + }, + 'additionalProperties': False, + 'required': ['hosts_not_run', 'log', 'num_hosts', 'num_hosts_done', + 'num_hosts_not_run', 'num_hosts_running', 'overall_status', + 'period_beginning', 'period_ending', 'total_errors', + 'total_instances'] +} + +get_instance_usage_audit_log = { + 'status_code': [200], + 'response_body': { + 'type': 'object', + 'properties': { + 'instance_usage_audit_log': common_instance_usage_audit_log + }, + 'additionalProperties': False, + 'required': ['instance_usage_audit_log'] + } +} + +list_instance_usage_audit_log = { + 'status_code': [200], + 'response_body': { + 'type': 'object', + 'properties': { + 'instance_usage_audit_logs': common_instance_usage_audit_log + }, + 'additionalProperties': False, + 'required': ['instance_usage_audit_logs'] + } +} diff --git a/tempest_lib/services/compute/instance_usage_audit_log_client.py b/tempest_lib/services/compute/instance_usage_audit_log_client.py new file mode 100644 index 0000000..1b4c61d --- /dev/null +++ b/tempest_lib/services/compute/instance_usage_audit_log_client.py @@ -0,0 +1,38 @@ +# Copyright 2013 IBM Corporation +# 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 tempest_lib.api_schema.response.compute.v2_1 import \ + instance_usage_audit_logs as schema +from tempest_lib.common import rest_client + + +class InstanceUsagesAuditLogClient(rest_client.RestClient): + + def list_instance_usage_audit_logs(self): + url = 'os-instance_usage_audit_log' + resp, body = self.get(url) + body = json.loads(body) + self.validate_response(schema.list_instance_usage_audit_log, + resp, body) + return rest_client.ResponseBody(resp, body) + + def show_instance_usage_audit_log(self, time_before): + url = 'os-instance_usage_audit_log/%s' % time_before + resp, body = self.get(url) + body = json.loads(body) + self.validate_response(schema.get_instance_usage_audit_log, resp, body) + return rest_client.ResponseBody(resp, body) diff --git a/tempest_lib/tests/services/compute/test_instance_usage_audit_log_client.py b/tempest_lib/tests/services/compute/test_instance_usage_audit_log_client.py new file mode 100644 index 0000000..78ade47 --- /dev/null +++ b/tempest_lib/tests/services/compute/test_instance_usage_audit_log_client.py @@ -0,0 +1,73 @@ +# Copyright 2015 NEC Corporation. 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. + +import datetime + +from tempest_lib.services.compute import instance_usage_audit_log_client +from tempest_lib.tests import fake_auth_provider +from tempest_lib.tests.services.compute import base + + +class TestInstanceUsagesAuditLogClient(base.BaseComputeServiceTest): + + FAKE_AUDIT_LOG = { + "hosts_not_run": [ + "f4eb7cfd155f4574967f8b55a7faed75" + ], + "log": {}, + "num_hosts": 1, + "num_hosts_done": 0, + "num_hosts_not_run": 1, + "num_hosts_running": 0, + "overall_status": "0 of 1 hosts done. 0 errors.", + "period_beginning": "2012-12-01 00:00:00", + "period_ending": "2013-01-01 00:00:00", + "total_errors": 0, + "total_instances": 0 + } + + def setUp(self): + super(TestInstanceUsagesAuditLogClient, self).setUp() + fake_auth = fake_auth_provider.FakeAuthProvider() + self.client = (instance_usage_audit_log_client. + InstanceUsagesAuditLogClient(fake_auth, 'compute', + 'regionOne')) + + def _test_list_instance_usage_audit_logs(self, bytes_body=False): + self.check_service_client_function( + self.client.list_instance_usage_audit_logs, + 'tempest_lib.common.rest_client.RestClient.get', + {"instance_usage_audit_logs": self.FAKE_AUDIT_LOG}, + bytes_body) + + def test_list_instance_usage_audit_logs_with_str_body(self): + self._test_list_instance_usage_audit_logs() + + def test_list_instance_usage_audit_logs_with_bytes_body(self): + self._test_list_instance_usage_audit_logs(bytes_body=True) + + def _test_show_instance_usage_audit_log(self, bytes_body=False): + before_time = datetime.datetime(2012, 12, 1, 0, 0) + self.check_service_client_function( + self.client.show_instance_usage_audit_log, + 'tempest_lib.common.rest_client.RestClient.get', + {"instance_usage_audit_log": self.FAKE_AUDIT_LOG}, + bytes_body, + time_before=before_time) + + def test_show_instance_usage_audit_log_with_str_body(self): + self._test_show_instance_usage_audit_log() + + def test_show_network_with_bytes_body_with_bytes_body(self): + self._test_show_instance_usage_audit_log(bytes_body=True)