From 9b099798d1470f54b263151d7bd8e30eed02ea6d Mon Sep 17 00:00:00 2001 From: John Warren Date: Tue, 29 Sep 2015 10:24:48 -0400 Subject: [PATCH] Migrated security_group_default_rules_client.py This migrates the above files from tempest. This includes tempest commits: * security_group_default_rules_client.py: Ie39cb8a0d710c1412836f93ce6b3df60faad9f76 * test_security_group_default_rules_client.py: I3ad6761651cec5e66012d08e6b63322f53286a5c * security_group_default_rule.py: Ica929c402a3d042ae751302384e68853eb28b405 to see the commit history for these files refer to the above Change-Ids in the tempest repository Partially implements blueprint migrate-service-clients-to-tempest-lib Change-Id: I8b652aeb82d2a7335212ef7cc021a969ad297c6a --- .../v2_1/security_group_default_rule.py | 65 ++++++++++++++ .../security_group_default_rules_client.py | 65 ++++++++++++++ ...est_security_group_default_rules_client.py | 88 +++++++++++++++++++ 3 files changed, 218 insertions(+) create mode 100644 tempest_lib/api_schema/response/compute/v2_1/security_group_default_rule.py create mode 100644 tempest_lib/services/compute/security_group_default_rules_client.py create mode 100644 tempest_lib/tests/services/compute/test_security_group_default_rules_client.py diff --git a/tempest_lib/api_schema/response/compute/v2_1/security_group_default_rule.py b/tempest_lib/api_schema/response/compute/v2_1/security_group_default_rule.py new file mode 100644 index 0000000..2ec2826 --- /dev/null +++ b/tempest_lib/api_schema/response/compute/v2_1/security_group_default_rule.py @@ -0,0 +1,65 @@ +# 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_security_group_default_rule_info = { + 'type': 'object', + 'properties': { + 'from_port': {'type': 'integer'}, + 'id': {'type': 'integer'}, + 'ip_protocol': {'type': 'string'}, + 'ip_range': { + 'type': 'object', + 'properties': { + 'cidr': {'type': 'string'} + }, + 'additionalProperties': False, + 'required': ['cidr'], + }, + 'to_port': {'type': 'integer'}, + }, + 'additionalProperties': False, + 'required': ['from_port', 'id', 'ip_protocol', 'ip_range', 'to_port'], +} + +create_get_security_group_default_rule = { + 'status_code': [200], + 'response_body': { + 'type': 'object', + 'properties': { + 'security_group_default_rule': + common_security_group_default_rule_info + }, + 'additionalProperties': False, + 'required': ['security_group_default_rule'] + } +} + +delete_security_group_default_rule = { + 'status_code': [204] +} + +list_security_group_default_rules = { + 'status_code': [200], + 'response_body': { + 'type': 'object', + 'properties': { + 'security_group_default_rules': { + 'type': 'array', + 'items': common_security_group_default_rule_info + } + }, + 'additionalProperties': False, + 'required': ['security_group_default_rules'] + } +} diff --git a/tempest_lib/services/compute/security_group_default_rules_client.py b/tempest_lib/services/compute/security_group_default_rules_client.py new file mode 100644 index 0000000..9e0b6e4 --- /dev/null +++ b/tempest_lib/services/compute/security_group_default_rules_client.py @@ -0,0 +1,65 @@ +# 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. + +from oslo_serialization import jsonutils as json + +from tempest_lib.api_schema.response.compute.v2_1 import \ + security_group_default_rule as schema +from tempest_lib.common import rest_client + + +class SecurityGroupDefaultRulesClient(rest_client.RestClient): + + def create_security_default_group_rule(self, **kwargs): + """Creating security group default rules. + + ip_protocol : ip_protocol (icmp, tcp, udp). + from_port: Port at start of range. + to_port : Port at end of range. + cidr : CIDR for address range. + """ + post_body = json.dumps({'security_group_default_rule': kwargs}) + url = 'os-security-group-default-rules' + resp, body = self.post(url, post_body) + body = json.loads(body) + self.validate_response(schema.create_get_security_group_default_rule, + resp, body) + return rest_client.ResponseBody(resp, body) + + def delete_security_group_default_rule(self, + security_group_default_rule_id): + """Deletes the provided Security Group default rule.""" + resp, body = self.delete('os-security-group-default-rules/%s' % ( + security_group_default_rule_id)) + self.validate_response(schema.delete_security_group_default_rule, + resp, body) + return rest_client.ResponseBody(resp, body) + + def list_security_group_default_rules(self): + """List all Security Group default rules.""" + resp, body = self.get('os-security-group-default-rules') + body = json.loads(body) + self.validate_response(schema.list_security_group_default_rules, + resp, body) + return rest_client.ResponseBody(resp, body) + + def show_security_group_default_rule(self, security_group_default_rule_id): + """Return the details of provided Security Group default rule.""" + resp, body = self.get('os-security-group-default-rules/%s' % + security_group_default_rule_id) + body = json.loads(body) + self.validate_response(schema.create_get_security_group_default_rule, + resp, body) + return rest_client.ResponseBody(resp, body) diff --git a/tempest_lib/tests/services/compute/test_security_group_default_rules_client.py b/tempest_lib/tests/services/compute/test_security_group_default_rules_client.py new file mode 100644 index 0000000..d8a5f64 --- /dev/null +++ b/tempest_lib/tests/services/compute/test_security_group_default_rules_client.py @@ -0,0 +1,88 @@ +# 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. + +from tempest_lib.services.compute import security_group_default_rules_client +from tempest_lib.tests import fake_auth_provider +from tempest_lib.tests.services.compute import base + + +class TestSecurityGroupDefaultRulesClient(base.BaseComputeServiceTest): + FAKE_RULE = { + "from_port": 80, + "id": 1, + "ip_protocol": "TCP", + "ip_range": { + "cidr": "10.10.10.0/24" + }, + "to_port": 80 + } + + def setUp(self): + super(TestSecurityGroupDefaultRulesClient, self).setUp() + fake_auth = fake_auth_provider.FakeAuthProvider() + self.client = (security_group_default_rules_client. + SecurityGroupDefaultRulesClient(fake_auth, 'compute', + 'regionOne')) + + def _test_list_security_group_default_rules(self, bytes_body=False): + self.check_service_client_function( + self.client.list_security_group_default_rules, + 'tempest_lib.common.rest_client.RestClient.get', + {"security_group_default_rules": [self.FAKE_RULE]}, + to_utf=bytes_body) + + def test_list_security_group_default_rules_with_str_body(self): + self._test_list_security_group_default_rules() + + def test_list_security_group_default_rules_with_bytes_body(self): + self._test_list_security_group_default_rules(bytes_body=True) + + def _test_show_security_group_default_rule(self, bytes_body=False): + self.check_service_client_function( + self.client.show_security_group_default_rule, + 'tempest_lib.common.rest_client.RestClient.get', + {"security_group_default_rule": self.FAKE_RULE}, + to_utf=bytes_body, + security_group_default_rule_id=1) + + def test_show_security_group_default_rule_with_str_body(self): + self._test_show_security_group_default_rule() + + def test_show_security_group_default_rule_with_bytes_body(self): + self._test_show_security_group_default_rule(bytes_body=True) + + def _test_create_security_default_group_rule(self, bytes_body=False): + request_body = { + "to_port": 80, + "from_port": 80, + "ip_protocol": "TCP", + "cidr": "10.10.10.0/24" + } + self.check_service_client_function( + self.client.create_security_default_group_rule, + 'tempest_lib.common.rest_client.RestClient.post', + {"security_group_default_rule": self.FAKE_RULE}, + to_utf=bytes_body, **request_body) + + def test_create_security_default_group_rule_with_str_body(self): + self._test_create_security_default_group_rule() + + def test_create_security_default_group_rule_with_bytes_body(self): + self._test_create_security_default_group_rule(bytes_body=True) + + def test_delete_security_group_default_rule(self): + self.check_service_client_function( + self.client.delete_security_group_default_rule, + 'tempest_lib.common.rest_client.RestClient.delete', + {}, status=204, security_group_default_rule_id=1)