diff options
author | Nathan Kinder <nkinder@redhat.com> | 2015-04-03 12:53:01 -0700 |
---|---|---|
committer | Nathan Kinder <nkinder@redhat.com> | 2015-04-03 12:53:01 -0700 |
commit | 384c3f9100c4a69fe4300a1db9cd5cb233d1ed60 (patch) | |
tree | 39343c8fec4e789da181d723e4a5e98161b3cae7 | |
parent | eb1b4381a8243af0744be47027d795a0f4418cba (diff) | |
download | keystone-384c3f9100c4a69fe4300a1db9cd5cb233d1ed60.tar.gz |
Allow identity provider to be created with remote_ids set to None
When support was added for multiple remote_ids, identity provider
creation was broken when remote_ids are specified as None instead
of an empty list. The remote_ids are supposed to be optional. This
causes 400 errors when using python-openstackclient to create an
identity provider without any remote_ids.
Change-Id: I9a4d1206f6df95636ae350236f6e704ca37f7b73
Closes-bug: #1440185
-rw-r--r-- | keystone/contrib/federation/backends/sql.py | 4 | ||||
-rw-r--r-- | keystone/tests/unit/test_v3_federation.py | 15 |
2 files changed, 18 insertions, 1 deletions
diff --git a/keystone/contrib/federation/backends/sql.py b/keystone/contrib/federation/backends/sql.py index 324cd1d58..eb157008f 100644 --- a/keystone/contrib/federation/backends/sql.py +++ b/keystone/contrib/federation/backends/sql.py @@ -58,7 +58,9 @@ class IdentityProviderModel(sql.ModelBase, sql.DictBase): @classmethod def from_dict(cls, dictionary): new_dictionary = dictionary.copy() - remote_ids_list = new_dictionary.pop('remote_ids', []) + remote_ids_list = new_dictionary.pop('remote_ids', None) + if not remote_ids_list: + remote_ids_list = [] identity_provider = cls(**new_dictionary) remote_ids = [] # NOTE(fmarco76): the remote_ids_list contains only remote ids diff --git a/keystone/tests/unit/test_v3_federation.py b/keystone/tests/unit/test_v3_federation.py index e19086338..2207f3500 100644 --- a/keystone/tests/unit/test_v3_federation.py +++ b/keystone/tests/unit/test_v3_federation.py @@ -856,6 +856,21 @@ class FederatedIdentityProviderTests(FederationTests): keys_to_check=keys_to_check, ref=body) + def test_create_idp_remote_none(self): + """Creates an IdP with a None remote_ids.""" + + keys_to_check = list(self.idp_keys) + keys_to_check.append('remote_ids') + body = self.default_body.copy() + body['description'] = uuid.uuid4().hex + body['remote_ids'] = None + resp = self._create_default_idp(body=body) + expected = body.copy() + expected['remote_ids'] = [] + self.assertValidResponse(resp, 'identity_provider', dummy_validator, + keys_to_check=keys_to_check, + ref=expected) + def test_update_idp_remote_ids(self): """Update IdP's remote_ids parameter.""" body = self.default_body.copy() |