diff --git a/shade/tests/unit/base.py b/shade/tests/unit/base.py index 242e44ef6..c47eaf352 100644 --- a/shade/tests/unit/base.py +++ b/shade/tests/unit/base.py @@ -43,7 +43,13 @@ _UserData = collections.namedtuple( _GroupData = collections.namedtuple( 'GroupData', - 'group_id, group_name, domain_id, description, json_response') + 'group_id, group_name, domain_id, description, json_response, ' + 'json_request') + +_DomainData = collections.namedtuple( + 'DomainData', + 'domain_id, domain_name, description, json_response, ' + 'json_request') class BaseTestCase(base.TestCase): @@ -233,11 +239,13 @@ class RequestsMockTestCase(BaseTestCase): name or self.getUniqueString('groupname') domain_id = uuid.UUID(domain_id or uuid.uuid4().hex).hex response = {'id': group_id, 'name': name, 'domain_id': domain_id} + request = {'name': name} if description is not None: response['description'] = description + request['description'] = description return _GroupData(group_id, name, domain_id, description, - {'group': response}) + {'group': response}, {'group': request}) def _get_user_data(self, name=None, password=None, **kwargs): @@ -270,6 +278,22 @@ class RequestsMockTestCase(BaseTestCase): response.get('enabled'), {'user': response}, {'user': request}) + def _get_domain_data(self, domain_name=None, description=None, + enabled=None): + domain_id = uuid.uuid4().hex + domain_name = domain_name or self.getUniqueString('domainName') + response = {'id': domain_id, 'name': domain_name} + request = {'name': domain_name} + if enabled is not None: + request['enabled'] = bool(enabled) + response['enabled'] = bool(enabled) + if description: + response['description'] = description + request['description'] = description + response.setdefault('enabled', True) + return _DomainData(domain_id, domain_name, description, + {'domain': response}, {'domain': request}) + def use_keystone_v3(self): self.adapter = self.useFixture(rm_fixture.Fixture()) self.calls = [] diff --git a/shade/tests/unit/test_domains.py b/shade/tests/unit/test_domains.py index eec700b2c..c63f045dd 100644 --- a/shade/tests/unit/test_domains.py +++ b/shade/tests/unit/test_domains.py @@ -13,7 +13,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -import collections import uuid import testtools @@ -21,21 +20,6 @@ from testtools import matchers import shade from shade.tests.unit import base -from shade.tests import fakes - - -domain_obj = fakes.FakeDomain( - id='1', - name='a-domain', - description='A wonderful keystone domain', - enabled=True, -) - - -_DomainData = collections.namedtuple( - 'DomainData', - 'domain_id, domain_name, description, json_response, ' - 'json_request') class TestDomains(base.RequestsMockTestCase): @@ -47,22 +31,6 @@ class TestDomains(base.RequestsMockTestCase): service_type=service_type, interface=interface, resource=resource, append=append, base_url_append=base_url_append) - def _get_domain_data(self, domain_name=None, description=None, - enabled=None): - domain_id = uuid.uuid4().hex - domain_name = domain_name or self.getUniqueString('domainName') - response = {'id': domain_id, 'name': domain_name} - request = {'name': domain_name} - if enabled is not None: - request['enabled'] = bool(enabled) - response['enabled'] = bool(enabled) - if description: - response['description'] = description - request['description'] = description - response.setdefault('enabled', True) - return _DomainData(domain_id, domain_name, description, - {'domain': response}, {'domain': request}) - def test_list_domains(self): self._add_discovery_uri_call() domain_data = self._get_domain_data() diff --git a/shade/tests/unit/test_groups.py b/shade/tests/unit/test_groups.py index 7acd23655..80b5aa2af 100644 --- a/shade/tests/unit/test_groups.py +++ b/shade/tests/unit/test_groups.py @@ -11,50 +11,94 @@ # See the License for the specific language governing permissions and # limitations under the License. -import mock - -import shade from shade.tests.unit import base -from shade.tests import fakes -class TestGroups(base.TestCase): +class TestGroups(base.RequestsMockTestCase): + def setUp(self, cloud_config_fixture='clouds.yaml'): + super(TestGroups, self).setUp( + cloud_config_fixture=cloud_config_fixture) + self._add_discovery_uri_call() + self.addCleanup(self.assert_calls) - @mock.patch.object(shade.OpenStackCloud, 'keystone_client') - def test_list_groups(self, mock_keystone): + def get_mock_url(self, service_type='identity', interface='admin', + resource='groups', append=None, base_url_append='v3'): + return super(TestGroups, self).get_mock_url( + service_type='identity', interface='admin', resource=resource, + append=append, base_url_append=base_url_append) + + def test_list_groups(self): + group_data = self._get_group_data() + self.register_uris([ + dict(method='GET', + uri=self.get_mock_url(), + status_code=200, + json={'groups': [group_data.json_response['group']]}) + ]) self.op_cloud.list_groups() - mock_keystone.groups.list.assert_called_once_with() - @mock.patch.object(shade.OpenStackCloud, 'keystone_client') - def test_get_group(self, mock_keystone): - self.op_cloud.get_group('1234') - mock_keystone.groups.list.assert_called_once_with() + def test_get_group(self): + group_data = self._get_group_data() + self.register_uris([ + dict(method='GET', + uri=self.get_mock_url(), + status_code=200, + json={'groups': [group_data.json_response['group']]}), + ]) + self.op_cloud.get_group(group_data.group_id) - @mock.patch.object(shade.OpenStackCloud, 'keystone_client') - def test_delete_group(self, mock_keystone): - mock_keystone.groups.list.return_value = [ - fakes.FakeGroup('1234', 'name', 'desc') - ] - self.assertTrue(self.op_cloud.delete_group('1234')) - mock_keystone.groups.list.assert_called_once_with() - mock_keystone.groups.delete.assert_called_once_with( - group='1234' - ) + def test_delete_group(self): + group_data = self._get_group_data() + self.register_uris([ + dict(method='GET', + uri=self.get_mock_url(), + status_code=200, + json={'groups': [group_data.json_response['group']]}), + dict(method='DELETE', + uri=self.get_mock_url(append=[group_data.group_id]), + status_code=204), + ]) + self.assertTrue(self.op_cloud.delete_group(group_data.group_id)) - @mock.patch.object(shade.OpenStackCloud, 'keystone_client') - def test_create_group(self, mock_keystone): - self.op_cloud.create_group('test-group', 'test desc') - mock_keystone.groups.create.assert_called_once_with( - name='test-group', description='test desc', domain=None - ) + def test_create_group(self): + domain_data = self._get_domain_data() + group_data = self._get_group_data(domain_id=domain_data.domain_id) + self.register_uris([ + dict(method='GET', + uri=self.get_mock_url(resource='domains', + append=[domain_data.domain_id]), + status_code=200, + json=domain_data.json_response), + dict(method='POST', + uri=self.get_mock_url(), + status_code=200, + json=group_data.json_response, + validate=group_data.json_request), + dict(method='GET', + uri=self.get_mock_url(append=[group_data.group_id]), + status_code=200, + json=group_data.json_response) + ]) + self.op_cloud.create_group( + name=group_data.group_name, description=group_data.description, + domain=group_data.domain_id) - @mock.patch.object(shade.OpenStackCloud, 'keystone_client') - def test_update_group(self, mock_keystone): - mock_keystone.groups.list.return_value = [ - fakes.FakeGroup('1234', 'name', 'desc') - ] - self.op_cloud.update_group('1234', 'test-group', 'test desc') - mock_keystone.groups.list.assert_called_once_with() - mock_keystone.groups.update.assert_called_once_with( - group='1234', name='test-group', description='test desc' - ) + def test_update_group(self): + group_data = self._get_group_data() + self.register_uris([ + dict(method='GET', + uri=self.get_mock_url(), + status_code=200, + json={'groups': [group_data.json_response['group']]}), + dict(method='PATCH', + uri=self.get_mock_url(append=[group_data.group_id]), + status_code=200, + json=group_data.json_response, + validate=group_data.json_request), + dict(method='GET', + uri=self.get_mock_url(append=[group_data.group_id]), + status_code=200, + json=group_data.json_response) + ]) + self.op_cloud.update_group(group_data.group_id, group_data.group_name, + group_data.description)