Fix to solve None user id in existing_users context

This fix contains following changes
 - removed keystone version specific tenant_id fetch logic
 - called get_user_id api to fetch correct value of user_id
 - Updated Unittest case to cover modified code.

Change-Id: Id0c8135abe9d980b5a5f11e0123d7e9904c4f473
Closes-Bug: #1602157
This commit is contained in:
chandidas 2016-07-28 03:01:45 -05:00
parent 1960263f5b
commit a5025142ff
2 changed files with 19 additions and 56 deletions

View File

@ -52,15 +52,10 @@ class ExistingUsers(users.UserContextMixin, context.Context):
user_credential = objects.Credential(**user)
user_kclient = osclients.Clients(user_credential).keystone()
if user_kclient.version == "2.0":
tenant_id = user_kclient.tenant_id
tenant_name = user_kclient.tenant_name
else:
tenant_name = user_kclient.project_name
tenant_id = user_kclient.project_id
if not tenant_id:
tenant_id = user_kclient.get_project_id(tenant_name)
user_name = user_kclient.username
tenant_name = user_kclient.project_name
user_id = user_kclient.get_user_id(user_name)
tenant_id = user_kclient.get_project_id(tenant_name)
if tenant_id not in self.context["tenants"]:
self.context["tenants"][tenant_id] = {
@ -70,7 +65,7 @@ class ExistingUsers(users.UserContextMixin, context.Context):
self.context["users"].append({
"credential": user_credential,
"id": user_kclient.user_id,
"id": user_id,
"tenant_id": tenant_id
})

View File

@ -24,19 +24,25 @@ class ExistingUserTestCase(test.TestCase):
@mock.patch("%s.keystone.existing_users.osclients.Clients" % CTX)
@mock.patch("%s.keystone.existing_users.objects.Credential" % CTX)
def test_setup_keystonev2(self, mock_credential, mock_clients):
user1 = mock.MagicMock(tenant_id="1", version="2.0")
user2 = mock.MagicMock(tenant_id="1", version="2.0")
user3 = mock.MagicMock(tenant_id="2", version="2.0")
def test_setup(self, mock_credential, mock_clients):
user1 = mock.MagicMock(tenant_id="1", user_id="1",
project_name="proj", username="usr")
user2 = mock.MagicMock(tenant_id="1", user_id="2",
project_name="proj", username="usr")
user3 = mock.MagicMock(tenant_id="2", user_id="3",
project_name="proj", username="usr")
mock_clients.return_value.keystone.side_effect = [
user1, user2, user3
]
user_list = [user1, user2, user3]
for u in user_list:
u.get_user_id.return_value = u.user_id
u.get_project_id.return_value = u.tenant_id
mock_clients.return_value.keystone.side_effect = user_list
context = {
"task": mock.MagicMock(),
"config": {
"existing_users": [user1, user2, user3]
"existing_users": user_list
}
}
existing_users.ExistingUsers(context).setup()
@ -53,44 +59,6 @@ class ExistingUserTestCase(test.TestCase):
context["users"][0]
)
self.assertEqual(["1", "2"], sorted(context["tenants"].keys()))
self.assertEqual({"id": "1", "name": user1.tenant_name},
context["tenants"]["1"])
self.assertEqual({"id": "2", "name": user3.tenant_name},
context["tenants"]["2"])
@mock.patch("%s.keystone.existing_users.osclients.Clients" % CTX)
@mock.patch("%s.keystone.existing_users.objects.Credential" % CTX)
def test_setup_keystonev3(self, mock_credential, mock_clients):
user1 = mock.MagicMock(project_id="1", version="3")
user2 = mock.MagicMock(project_id="1", version="3")
user3 = mock.MagicMock(project_id=None, version="3")
user3.get_project_id.return_value = "2"
mock_clients.return_value.keystone.side_effect = [
user1, user2, user3
]
context = {
"task": mock.MagicMock(),
"config": {
"existing_users": [user1, user2, user3]
}
}
existing_users.ExistingUsers(context).setup()
self.assertIn("users", context)
self.assertIn("tenants", context)
self.assertEqual(3, len(context["users"]))
self.assertEqual(
{
"id": user1.user_id,
"credential": mock_credential.return_value,
"tenant_id": "1"
},
context["users"][0]
)
self.assertEqual(["1", "2"], sorted(context["tenants"].keys()))
self.assertEqual({"id": "1", "name": user1.project_name},
context["tenants"]["1"])
self.assertEqual({"id": "2", "name": user3.project_name},