Bug fix: Allow name update for domains

We were not passing the 'name' argument through to the client for
updating a domain. Fix that and add tests to verify it is passed.

Also add missing domain API unit tests.

Change-Id: I62a7d6de0a4890ca9f58aaa3de5090e395baf850
This commit is contained in:
David Shrewsbury 2015-12-08 15:18:27 -05:00
parent 4c8cfe4b18
commit d38af94bed
4 changed files with 81 additions and 1 deletions

View File

@ -0,0 +1,3 @@
---
fixes:
- Fix for update_domain() where 'name' was not updatable.

View File

@ -1030,7 +1030,8 @@ class OperatorCloud(openstackcloud.OpenStackCloud):
with _utils.shade_exceptions( with _utils.shade_exceptions(
"Error in updating domain {domain}".format(domain=domain_id)): "Error in updating domain {domain}".format(domain=domain_id)):
domain = self.manager.submitTask(_tasks.DomainUpdate( domain = self.manager.submitTask(_tasks.DomainUpdate(
domain=domain_id, description=description, enabled=enabled)) domain=domain_id, name=name, description=description,
enabled=enabled))
return _utils.normalize_domains([domain])[0] return _utils.normalize_domains([domain])[0]
def delete_domain(self, domain_id): def delete_domain(self, domain_id):

View File

@ -63,3 +63,15 @@ class TestDomain(base.TestCase):
results = self.cloud.search_domains(filters=dict(name=domain_name)) results = self.cloud.search_domains(filters=dict(name=domain_name))
self.assertEqual(1, len(results)) self.assertEqual(1, len(results))
self.assertEqual(domain_name, results[0]['name']) self.assertEqual(domain_name, results[0]['name'])
def test_update_domain(self):
domain = self.cloud.create_domain(self.domain_prefix, 'description')
self.assertEqual(self.domain_prefix, domain['name'])
self.assertEqual('description', domain['description'])
self.assertTrue(domain['enabled'])
updated = self.cloud.update_domain(domain['id'], name='updated name',
description='updated description',
enabled=False)
self.assertEqual('updated name', updated['name'])
self.assertEqual('updated description', updated['description'])
self.assertFalse(updated['enabled'])

View File

@ -14,8 +14,10 @@
# limitations under the License. # limitations under the License.
import mock import mock
import testtools
import shade import shade
from shade import meta
from shade.tests.unit import base from shade.tests.unit import base
from shade.tests import fakes from shade.tests import fakes
@ -46,3 +48,65 @@ class TestDomains(base.TestCase):
self.assertFalse(mock_keystone.domains.list.called) self.assertFalse(mock_keystone.domains.list.called)
self.assertTrue(mock_keystone.domains.get.called) self.assertTrue(mock_keystone.domains.get.called)
self.assertEqual(domain['name'], 'a-domain') self.assertEqual(domain['name'], 'a-domain')
@mock.patch.object(shade._utils, 'normalize_domains')
@mock.patch.object(shade.OpenStackCloud, 'keystone_client')
def test_create_domain(self, mock_keystone, mock_normalize):
mock_keystone.domains.create.return_value = domain_obj
self.cloud.create_domain(domain_obj.name,
domain_obj.description)
mock_keystone.domains.create.assert_called_once_with(
name=domain_obj.name, description=domain_obj.description,
enabled=True)
mock_normalize.assert_called_once_with([meta.obj_to_dict(domain_obj)])
@mock.patch.object(shade.OpenStackCloud, 'keystone_client')
def test_create_domain_exception(self, mock_keystone):
mock_keystone.domains.create.side_effect = Exception()
with testtools.ExpectedException(
shade.OpenStackCloudException,
"Failed to create domain domain_name"
):
self.cloud.create_domain('domain_name')
@mock.patch.object(shade.OperatorCloud, 'update_domain')
@mock.patch.object(shade.OpenStackCloud, 'keystone_client')
def test_delete_domain(self, mock_keystone, mock_update):
mock_update.return_value = dict(id='update_domain_id')
self.cloud.delete_domain('domain_id')
mock_update.assert_called_once_with('domain_id', enabled=False)
mock_keystone.domains.delete.assert_called_once_with(
domain='update_domain_id')
@mock.patch.object(shade.OperatorCloud, 'update_domain')
@mock.patch.object(shade.OpenStackCloud, 'keystone_client')
def test_delete_domain_exception(self, mock_keystone, mock_update):
mock_keystone.domains.delete.side_effect = Exception()
with testtools.ExpectedException(
shade.OpenStackCloudException,
"Failed to delete domain domain_id"
):
self.cloud.delete_domain('domain_id')
@mock.patch.object(shade._utils, 'normalize_domains')
@mock.patch.object(shade.OpenStackCloud, 'keystone_client')
def test_update_domain(self, mock_keystone, mock_normalize):
mock_keystone.domains.update.return_value = domain_obj
self.cloud.update_domain('domain_id',
name='new name',
description='new description',
enabled=False)
mock_keystone.domains.update.assert_called_once_with(
domain='domain_id', name='new name',
description='new description', enabled=False)
mock_normalize.assert_called_once_with(
[meta.obj_to_dict(domain_obj)])
@mock.patch.object(shade.OpenStackCloud, 'keystone_client')
def test_update_domain_exception(self, mock_keystone):
mock_keystone.domains.update.side_effect = Exception()
with testtools.ExpectedException(
shade.OpenStackCloudException,
"Error in updating domain domain_id"
):
self.cloud.delete_domain('domain_id')