diff --git a/keystone/identity/core.py b/keystone/identity/core.py index 8a38198cd4..d601d95282 100644 --- a/keystone/identity/core.py +++ b/keystone/identity/core.py @@ -1239,8 +1239,8 @@ class Manager(manager.Manager): try: user_dict = self.shadow_users_api.get_federated_user( idp_id, protocol_id, unique_id) - self.update_federated_user_display_name(idp_id, protocol_id, - unique_id, display_name) + self.shadow_users_api.update_federated_user_display_name( + idp_id, protocol_id, unique_id, display_name) except exception.UserNotFound: federated_dict = { 'idp_id': idp_id, diff --git a/keystone/tests/unit/test_v3_identity.py b/keystone/tests/unit/test_v3_identity.py index d853afc337..fee606a98b 100644 --- a/keystone/tests/unit/test_v3_identity.py +++ b/keystone/tests/unit/test_v3_identity.py @@ -499,6 +499,34 @@ class IdentityTestCase(test_v3.RestfulTestCase): self.assertIsNone(user['domain_id']) self.assertEqual(user['enabled'], True) + def test_shadow_existing_federated_user(self): + fed_user = unit.new_federated_user_ref() + + # introduce the user to keystone for the first time + shadow_user1 = self.identity_api.shadow_federated_user( + fed_user["idp_id"], + fed_user["protocol_id"], + fed_user["unique_id"], + fed_user["display_name"]) + self.assertEqual(fed_user['display_name'], shadow_user1['name']) + + # shadow the user again, with another name to invalidate the cache + # internally, this operation causes request to the driver. It should + # not fail. + fed_user['display_name'] = uuid.uuid4().hex + shadow_user2 = self.identity_api.shadow_federated_user( + fed_user["idp_id"], + fed_user["protocol_id"], + fed_user["unique_id"], + fed_user["display_name"]) + # FIXME(dolph): These assertEqual / assertNotEqual should be reversed, + # to illustrate that the display name has been updated as expected. + self.assertNotEqual(fed_user['display_name'], shadow_user2['name']) + self.assertEqual(shadow_user1['name'], shadow_user2['name']) + + # The shadowed users still share the same unique ID. + self.assertEqual(shadow_user1['id'], shadow_user2['id']) + # group crud tests def test_create_group(self):