summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Kinder <nkinder@redhat.com>2015-04-03 12:53:01 -0700
committerNathan Kinder <nkinder@redhat.com>2015-04-03 12:53:01 -0700
commit384c3f9100c4a69fe4300a1db9cd5cb233d1ed60 (patch)
tree39343c8fec4e789da181d723e4a5e98161b3cae7
parenteb1b4381a8243af0744be47027d795a0f4418cba (diff)
downloadkeystone-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.py4
-rw-r--r--keystone/tests/unit/test_v3_federation.py15
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()