Merge "Added Test List Region and Region Groups"

This commit is contained in:
Zuul 2019-09-09 14:51:42 +00:00 committed by Gerrit Code Review
commit 972abc84f4
4 changed files with 339 additions and 274 deletions

View File

@ -13,6 +13,8 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License # under the License
# pylint: disable=C0103
_metadata = { _metadata = {
'type': 'object', 'type': 'object',
'items': { 'items': {
@ -205,3 +207,7 @@ list_region_groups = {
delete_region_group = { delete_region_group = {
'status_code': [204] 'status_code': [204]
} }
delete_region_metadata = {
'status_code': [204]
}

View File

@ -113,7 +113,7 @@ class RmsClient(base_client.RangerClientBase):
def list_regions(self, filter=None): def list_regions(self, filter=None):
uri = '%s/%s/orm/regions' % (self.rms_url, self.version) uri = '%s/%s/orm/regions' % (self.rms_url, self.version)
if filter is not None: if filter is not None:
uri += '?' + urllib.parse.urlencode(filter) uri += '?' + urllib.urlencode(filter)
return self.get_request(uri, schema.list_region) return self.get_request(uri, schema.list_region)
def delete_region(self, region_id): def delete_region(self, region_id):
@ -125,15 +125,11 @@ class RmsClient(base_client.RangerClientBase):
% (self.rms_url, self.version, region_id) % (self.rms_url, self.version, region_id)
post_body = json.dumps(kwargs) post_body = json.dumps(kwargs)
return self.post_request(uri, post_body, schema.update_metadata) return self.post_request(uri, post_body, schema.update_metadata)
#
# def delete_region_metadata(self, region_id, key): def delete_region_metadata(self, region_id, key):
# uri = '%s/%s/orm/regions/%s/metadata/%s' % ( uri = '%s/%s/orm/regions/%s/metadata/%s' % (
# self.rms_url, self.version, region_id, key) self.rms_url, self.version, region_id, key)
# ex_headers = self.get_headers() return self.delete_request(uri, schema.delete_region_metadata)
# resp, body = self.delete(uri, extra_headers=ex_headers)
# self.expected_success(200, resp.status)
# body = json.loads(body)
# return rest_client.ResponseBody(resp, body)
def create_region_group(self, **kwargs): def create_region_group(self, **kwargs):
uri = '%s/%s/orm/groups' % (self.rms_url, self.version) uri = '%s/%s/orm/groups' % (self.rms_url, self.version)

View File

@ -1,87 +1,133 @@
# Copyright 2016 AT&T Corp # Copyright 2016 AT&T Corp
# All Rights Reserved. # All Rights Reserved.
# #
# Licensed under the Apache License, Version 2.0 (the "License"); you may # 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 # not use this file except in compliance with the License. You may obtain
# a copy of the License at # a copy of the License at
# #
# http://www.apache.org/licenses/LICENSE-2.0 # http://www.apache.org/licenses/LICENSE-2.0
# #
# Unless required by applicable law or agreed to in writing, software # Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from ranger_tempest_plugin import data_utils as orm_data_utils from ranger_tempest_plugin import data_utils as orm_data_utils
from ranger_tempest_plugin.tests.api import base from ranger_tempest_plugin.tests.api import base
from tempest import config from tempest import config
from tempest.lib import decorators from tempest.lib import decorators
from tempest.lib import exceptions
from tempest.lib.common.utils import data_utils
from tempest.lib.common.utils import data_utils
CONF = config.CONF
CONF = config.CONF
class TestTempestRegionGroup(base.BaseOrmTest):
class TestTempestRegionGroup(base.BaseOrmTest):
@classmethod
def setup_credentials(cls): @classmethod
super(TestTempestRegionGroup, cls).setup_credentials() def setup_credentials(cls):
super(TestTempestRegionGroup, cls).setup_credentials()
@classmethod
def setup_clients(cls): @classmethod
super(TestTempestRegionGroup, cls).setup_clients() def setup_clients(cls):
cls.client = cls.os_primary.rms_client super(TestTempestRegionGroup, cls).setup_clients()
cls.client = cls.os_primary.rms_client
@classmethod
def resource_setup(cls): @classmethod
cls.setup_ids = [] def resource_setup(cls):
cls.group_ids = [] cls.setup_ids = []
# create standard region cls.group_ids = []
_, cls.region_1 = cls.client.create_region(data_utils.rand_name()) # create standard region
cls.setup_ids.append(cls.region_1['id']) _, cls.region_1 = cls.client.create_region(data_utils.rand_name())
# create region sharing region_1 properties cls.setup_ids.append(cls.region_1['id'])
_, cls.region_2 = cls.client.create_region(data_utils.rand_name()) # create region sharing region_1 properties
cls.setup_ids.append(cls.region_2['id']) _, cls.region_2 = cls.client.create_region(data_utils.rand_name())
cls.setup_ids.append(cls.region_2['id'])
_, cls.group_1 = cls.client.create_region_group(
**orm_data_utils.rand_region_group([cls.setup_ids[0]]) _, cls.group_1 = cls.client.create_region_group(
) **orm_data_utils.rand_region_group([cls.setup_ids[0]])
cls.group_ids.append(cls.group_1['group']['id']) )
_, cls.group_2 = cls.client.create_region_group( cls.group_ids.append(cls.group_1['group']['id'])
**orm_data_utils.rand_region_group(cls.setup_ids) _, cls.group_2 = cls.client.create_region_group(
) **orm_data_utils.rand_region_group(cls.setup_ids)
cls.group_ids.append(cls.group_2['group']['id']) )
cls.group_ids.append(cls.group_2['group']['id'])
super(TestTempestRegionGroup, cls).resource_setup()
super(TestTempestRegionGroup, cls).resource_setup()
@classmethod
def resource_cleanup(cls): @classmethod
for region_id in cls.setup_ids: def resource_cleanup(cls):
cls.client.delete_region(region_id) for region_id in cls.setup_ids:
for group_id in cls.group_ids: cls.client.delete_region(region_id)
cls.client.delete_region_group(group_id) for group_id in cls.group_ids:
super(TestTempestRegionGroup, cls).resource_cleanup() cls.client.delete_region_group(group_id)
super(TestTempestRegionGroup, cls).resource_cleanup()
@decorators.idempotent_id('0d377eb2-754d-49c1-9a4f-c7019dfe80ca')
def test_update_group(self): @decorators.idempotent_id('0d377eb2-754d-49c1-9a4f-c7019dfe80ca')
_id = self.group_ids[-1] def test_update_group(self):
group = orm_data_utils.rand_region_group(self.setup_ids, _id) _id = self.group_ids[-1]
_, body = self.client.update_region_group(_id, **group) group = orm_data_utils.rand_region_group(self.setup_ids, _id)
self.assert_expected(group, body['group'], ['regions']) _, body = self.client.update_region_group(_id, **group)
self.assert_expected(group, body['group'], ['regions'])
@decorators.idempotent_id('b946c6c4-d601-42b9-befd-ba40992a3c53')
def test_list_groups(self): @decorators.idempotent_id('b946c6c4-d601-42b9-befd-ba40992a3c53')
_, body = self.client.list_region_groups() def test_list_groups(self):
groups = [x['id'] for x in body['groups']] _, body = self.client.list_region_groups()
self.assertIn(self.group_1['group']['id'], groups) groups = [x['id'] for x in body['groups']]
self.assertIn(self.group_2['group']['id'], groups) self.assertIn(self.group_1['group']['id'], groups)
self.assertIn(self.group_2['group']['id'], groups)
@decorators.idempotent_id('9a37d966-4416-4ff3-8f3b-6847810662d7')
def test_get_group(self): @decorators.idempotent_id('9a37d966-4416-4ff3-8f3b-6847810662d7')
_id = self.group_1['group']['id'] def test_get_group(self):
_, body = self.client.get_region_group(_id) _id = self.group_1['group']['id']
self.assert_expected(self.group_1['group'], body, ['links']) _, body = self.client.get_region_group(_id)
self.assert_expected(self.group_1['group'], body, ['links'])
@decorators.idempotent_id('504cc5cb-bc19-48ea-9456-16f5b24c9529')
def test_create_region_group(self):
_, region_group = self.client.create_region_group(
**orm_data_utils.rand_region_group(self.setup_ids)
)
_, region_group_details = self.client.get_region_group(
region_group['group']['id']
)
self.assertEqual(
region_group_details['regions'],
[self.region_1['id'], self.region_2['id']]
)
# add to cleanup
self.group_ids.append(region_group['group']['id'])
@decorators.idempotent_id('504cc5cb-bc19-48ea-9456-16f5b24c9530')
def test_delete_region_group(self):
_, region_group = self.client.create_region_group(
**orm_data_utils.rand_region_group(self.setup_ids)
)
_, region_group_details = self.client.get_region_group(
region_group['group']['id']
)
self.assertEqual(
region_group_details['regions'],
[self.region_1['id'], self.region_2['id']]
)
self.client.delete_region_group(region_group['group']['id'])
self.assertRaises(
exceptions.NotFound, self.client.get_region_group,
region_group['group']['id']
)
@decorators.idempotent_id('504cc5cb-bc19-48ea-9456-16f5b24c9531')
def test_validate_region_group(self):
# Validate the Regions added to group are present in Ranger
# try to add NON-EXISTENANT Region in the payload to create Group
ids = ['some_non_existenant_region']
self.assertRaises(
exceptions.BadRequest, self.client.create_region_group,
**orm_data_utils.rand_region_group(ids)
)

View File

@ -1,177 +1,194 @@
# Copyright 2016 AT&T Corp # Copyright 2016 AT&T Corp
# All Rights Reserved. # All Rights Reserved.
# #
# Licensed under the Apache License, Version 2.0 (the "License"); you may # 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 # not use this file except in compliance with the License. You may obtain
# a copy of the License at # a copy of the License at
# #
# http://www.apache.org/licenses/LICENSE-2.0 # http://www.apache.org/licenses/LICENSE-2.0
# #
# Unless required by applicable law or agreed to in writing, software # Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from ranger_tempest_plugin import data_utils as orm_data_utils from ranger_tempest_plugin import data_utils as orm_data_utils
from ranger_tempest_plugin.tests.api import rms_base from ranger_tempest_plugin.tests.api import rms_base
from tempest import config from tempest import config
from tempest.lib import decorators from tempest.lib import decorators
from tempest.lib import exceptions from tempest.lib import exceptions
from tempest.lib.common.utils import data_utils from tempest.lib.common.utils import data_utils
CONF = config.CONF CONF = config.CONF
class TestTempestRegion(rms_base.RmsBaseOrmTest): class TestTempestRegion(rms_base.RmsBaseOrmTest):
@classmethod @classmethod
def resource_setup(cls): def resource_setup(cls):
cls.setup_ids = [] cls.setup_ids = []
# create standard region # create standard region
_, cls.region_1 = cls.client.create_region(data_utils.rand_name()) _, cls.region_1 = cls.client.create_region(data_utils.rand_name())
cls.setup_ids.append(cls.region_1['id']) cls.setup_ids.append(cls.region_1['id'])
# create region sharing region_1 properties # create region sharing region_1 properties
_, cls.region_2 = cls.client.create_region(data_utils.rand_name()) _, cls.region_2 = cls.client.create_region(data_utils.rand_name())
cls.setup_ids.append(cls.region_2['id']) cls.setup_ids.append(cls.region_2['id'])
# create region with differing properties # create region with differing properties
_, cls.region_3 = cls.client.create_region( _, cls.region_3 = cls.client.create_region(
data_utils.rand_name(), data_utils.rand_name(),
**{'status': 'down', **{'status': 'down',
'rangerAgentVersion': '3.0', 'rangerAgentVersion': '3.0',
'OSVersion': 'mitaka', 'OSVersion': 'mitaka',
'CLLI': '123450', 'CLLI': '123450',
'address': {'country': 'Mexico', 'state': 'Sonora', 'address': {'country': 'Mexico', 'state': 'Sonora',
'city': 'Nogales', 'street': '12 main', 'city': 'Nogales', 'street': '12 main',
'zip': '84000'}, 'zip': '84000'},
'metadata': {'meta1': ['val1']}, 'metadata': {'meta1': ['val1']},
'designType': 'large'}) 'designType': 'large'})
cls.setup_ids.append(cls.region_3['id']) cls.setup_ids.append(cls.region_3['id'])
super(TestTempestRegion, cls).resource_setup() super(TestTempestRegion, cls).resource_setup()
@classmethod @classmethod
def resource_cleanup(cls): def resource_cleanup(cls):
for region_id in cls.setup_ids: for region_id in cls.setup_ids:
cls.client.delete_region(region_id) cls.client.delete_region(region_id)
super(TestTempestRegion, cls).resource_cleanup() super(TestTempestRegion, cls).resource_cleanup()
@decorators.idempotent_id('829c7da0-2332-4f80-ad35-24306b67ed0e') @decorators.idempotent_id('829c7da0-2332-4f80-ad35-24306b67ed0e')
def test_create_and_delete_region(self): def test_create_and_delete_region(self):
# create new region for API test # create new region for API test
region = orm_data_utils.rand_region() region = orm_data_utils.rand_region()
_, region_body = self.client.create_region(region['id'], **region) _, region_body = self.client.create_region(region['id'], **region)
test_region_name = region_body['name'] test_region_name = region_body['name']
test_region_id = region_body['id'] test_region_id = region_body['id']
_, body = self.client.get_region(test_region_name) _, body = self.client.get_region(test_region_name)
self.assertEqual(test_region_id, body['id']) self.assertEqual(test_region_id, body['id'])
# now delete the region # now delete the region
self.client.delete_region(test_region_id) self.client.delete_region(test_region_id)
self.assertRaises(exceptions.NotFound, self.client.get_region, self.assertRaises(exceptions.NotFound, self.client.get_region,
test_region_id) test_region_id)
@decorators.idempotent_id('eecedcb0-9c96-453d-bd72-71dba26fa1c5') @decorators.idempotent_id('eecedcb0-9c96-453d-bd72-71dba26fa1c5')
def test_list_region(self): def test_list_region(self):
_, body = self.client.list_regions() _, body = self.client.list_regions()
regions = [x['id'] for x in body['regions']] regions = [x['id'] for x in body['regions']]
self.assertIn(self.region_1['id'], regions) self.assertIn(self.region_1['id'], regions)
@decorators.idempotent_id('0164e040-7775-4837-9ac2-aaa0f71cdfca') @decorators.idempotent_id('0164e040-7775-4837-9ac2-aaa0f71cdfca')
def test_list_region_v1(self): def test_list_region_v1(self):
_, body = self.client.list_regions_v1() _, body = self.client.list_regions_v1()
regions = [x['id'] for x in body] regions = [x['id'] for x in body]
self.assertIn(self.region_1['id'], regions) self.assertIn(self.region_1['id'], regions)
@decorators.idempotent_id('e6c6fdfe-5fa2-45f5-8bd8-fb9cf79e99fc') @decorators.idempotent_id('e6c6fdfe-5fa2-45f5-8bd8-fb9cf79e99fc')
def test_list_region_with_name(self): def test_list_region_with_name(self):
filter = {'regionname': self.region_1['name']} filter = {'regionname': self.region_1['name']}
self._list_regions_with_filter(filter, 'name') self._list_regions_with_filter(filter, 'name')
@decorators.idempotent_id('b3310e32-0c31-4d37-9789-cc3c4639dabe') @decorators.idempotent_id('b3310e32-0c31-4d37-9789-cc3c4639dabe')
def test_list_region_with_osversion(self): def test_list_region_with_osversion(self):
filter = {'osversion': self.region_1['OSVersion']} filter = {'osversion': self.region_1['OSVersion']}
self._list_regions_with_filter(filter, 'OSVersion') self._list_regions_with_filter(filter, 'OSVersion')
@decorators.idempotent_id('0b2d3e79-c14a-4527-94b0-04eeae053a80') @decorators.idempotent_id('0b2d3e79-c14a-4527-94b0-04eeae053a80')
def test_list_region_with_status(self): def test_list_region_with_status(self):
filter = {'status': self.region_1['status']} filter = {'status': self.region_1['status']}
self._list_regions_with_filter(filter, 'status') self._list_regions_with_filter(filter, 'status')
@decorators.idempotent_id('871be582-ecaa-4a46-a403-4d6b5e59d7de') @decorators.idempotent_id('871be582-ecaa-4a46-a403-4d6b5e59d7de')
def test_list_region_with_ranger_version(self): def test_list_region_with_ranger_version(self):
filter = {'ranger_agent_version': self.region_1['rangerAgentVersion']} filter = {'ranger_agent_version': self.region_1['rangerAgentVersion']}
self._list_regions_with_filter(filter, 'rangerAgentVersion') self._list_regions_with_filter(filter, 'rangerAgentVersion')
@decorators.idempotent_id('ac18be48-c787-4a65-913f-a0b0a80fbd1d') @decorators.idempotent_id('ac18be48-c787-4a65-913f-a0b0a80fbd1d')
def test_list_region_with_clli(self): def test_list_region_with_clli(self):
filter = {'clli': self.region_1['CLLI']} filter = {'clli': self.region_1['CLLI']}
self._list_regions_with_filter(filter, 'CLLI') self._list_regions_with_filter(filter, 'CLLI')
@decorators.idempotent_id('f2b2361d-ce71-43a8-9f01-acb529835880') @decorators.idempotent_id('f2b2361d-ce71-43a8-9f01-acb529835880')
def test_list_region_with_metadata(self): def test_list_region_with_metadata(self):
filter = {'metadata': list(self.region_1['metadata'].keys())[0]} filter = {'metadata': list(self.region_1['metadata'].keys())[0]}
self._list_regions_with_filter(filter, 'metadata') self._list_regions_with_filter(filter, 'metadata')
@decorators.idempotent_id('4533b31a-115d-466d-bf75-8ac24338c1a5') @decorators.idempotent_id('4533b31a-115d-466d-bf75-8ac24338c1a5')
def test_list_region_with_address(self): def test_list_region_with_address(self):
filter = { filter = {
'country': self.region_1['address']['country'], 'country': self.region_1['address']['country'],
'city': self.region_1['address']['city'], 'city': self.region_1['address']['city'],
'street': self.region_1['address']['street'], 'street': self.region_1['address']['street'],
'zip': self.region_1['address']['zip'] 'zip': self.region_1['address']['zip']
} }
self._list_regions_with_filter(filter, 'address') self._list_regions_with_filter(filter, 'address')
@decorators.idempotent_id('726b8215-af10-4385-83c7-32b51502dff1') @decorators.idempotent_id('726b8215-af10-4385-83c7-32b51502dff1')
def test_list_region_with_type(self): def test_list_region_with_type(self):
filter = {'type': self.region_1['designType']} filter = {'type': self.region_1['designType']}
self._list_regions_with_filter(filter, 'designType') self._list_regions_with_filter(filter, 'designType')
@decorators.idempotent_id('4875ea70-a5a1-4b46-b752-246221670d26') @decorators.idempotent_id('4875ea70-a5a1-4b46-b752-246221670d26')
def test_list_region_with_vlcp(self): def test_list_region_with_vlcp(self):
filter = {'vlcp_name': self.region_1['vlcpName']} filter = {'vlcp_name': self.region_1['vlcpName']}
self._list_regions_with_filter(filter, 'vlcpName') self._list_regions_with_filter(filter, 'vlcpName')
@decorators.idempotent_id('358f3cbc-4ae5-4b43-be36-6df55eae8fd9') @decorators.idempotent_id('358f3cbc-4ae5-4b43-be36-6df55eae8fd9')
def test_get_region(self): def test_get_region(self):
_, body = self.client.get_region(self.region_1['id']) _, body = self.client.get_region(self.region_1['id'])
self.assert_expected(self.region_1, body, []) self.assert_expected(self.region_1, body, [])
@decorators.idempotent_id('cefb952f-7777-4878-87d2-d78ac345f0d2') @decorators.idempotent_id('cefb952f-7777-4878-87d2-d78ac345f0d2')
def test_get_region_metadata(self): def test_get_region_metadata(self):
_, body = self.client.get_region_metadata(self.region_1['id']) _, body = self.client.get_region_metadata(self.region_1['id'])
self.assert_expected(self.region_1['metadata'], body['metadata'], []) self.assert_expected(self.region_1['metadata'], body['metadata'], [])
@decorators.idempotent_id('b2c3baf5-22af-4bf9-bcad-b6a1a74e82d9') @decorators.idempotent_id('b2c3baf5-22af-4bf9-bcad-b6a1a74e82d9')
def test_update_region(self): def test_update_region(self):
_id = self.setup_ids[-1] _id = self.setup_ids[-1]
region = orm_data_utils.rand_region(_id) region = orm_data_utils.rand_region(_id)
_, body = self.client.update_region(_id, **region) _, body = self.client.update_region(_id, **region)
self.assert_expected(region, body, []) self.assert_expected(region, body, [])
@decorators.idempotent_id('0d5644d8-92bc-497c-8fc5-b57417d86e6d') @decorators.idempotent_id('0d5644d8-92bc-497c-8fc5-b57417d86e6d')
def test_update_region_status(self): def test_update_region_status(self):
status = {} status = {}
status['status'] = orm_data_utils.rand_region_status( status['status'] = orm_data_utils.rand_region_status(
[self.region_1['status']]) [self.region_1['status']])
_, body = self.client.update_region_status(self.region_1['id'], status) _, body = self.client.update_region_status(self.region_1['id'], status)
self.assert_expected(status, body, ['links']) self.assert_expected(status, body, ['links'])
@decorators.idempotent_id('5c1a2624-6abe-49e7-82c8-30e8df1377d0') @decorators.idempotent_id('5c1a2624-6abe-49e7-82c8-30e8df1377d0')
def test_update_region_metadata(self): def test_update_region_metadata(self):
metadata = {} metadata = {}
metadata['metadata'] = orm_data_utils.rand_region_metadata() metadata['metadata'] = orm_data_utils.rand_region_metadata()
_, body = self.client.update_region_metadata(self.region_1['id'], _, body = self.client.update_region_metadata(self.region_1['id'],
metadata) metadata)
self.assert_expected(metadata, body, []) self.assert_expected(metadata, body, [])
def _list_regions_with_filter(self, filter, key): def _list_regions_with_filter(self, filter, key):
_, body = self.client.list_regions(filter) _, body = self.client.list_regions(filter)
regions = [x for x in body['regions']] regions = [x for x in body['regions']]
self.assertTrue( self.assertTrue(
all([region[key] == self.region_1[key] for region in regions])) all([region[key] == self.region_1[key] for region in regions]))
@decorators.idempotent_id('77257e0c-e2f8-4b98-886c-359508a4a73d')
def test_list_multiple_filter(self):
filter = {
'vlcp_name': self.region_1['vlcpName'],
'status': self.region_1['status'],
'regionname': self.region_1['name']
}
self._list_regions_with_filter(filter, 'name')
@decorators.idempotent_id('ce9bcbba-a97b-4da2-937e-69afbc5f93f8')
def test_delete_region_metadata(self):
_, body = self.client.delete_region_metadata(
self.region_1['id'], 'key'
)
_, region = self.client.get_region(self.region_1['id'])
self.assertEqual(region['metadata'], {})