1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
import mock
import unittest
from cloudify.context import NODE_INSTANCE
from cloudify.mocks import (
MockContext,
MockNodeInstanceContext,
MockNodeContext
)
from openstack_plugin_common import (
OPENSTACK_ID_PROPERTY,
OPENSTACK_NAME_PROPERTY,
OPENSTACK_TYPE_PROPERTY
)
from keystone_plugin.project import PROJECT_OPENSTACK_TYPE
import keystone_plugin
class TestProject(unittest.TestCase):
test_id = 'test-id'
test_name = 'test-name'
test_deployment_id = 'test-deployment-id'
test_user = 'test-user'
test_role = 'test-role'
class MockProjectOS:
def __init__(self, id, name):
self._id = id
self._name = name
self._users = {}
@property
def id(self):
return self._id
@property
def name(self):
return self._name
def find(self, *_, **__):
return mock.MagicMock(id='test-role')
def grant(self, role, user, *_, **__):
self._users[user] = role
def mock_keystone_client(self, mock_project):
keystone_client = mock.MagicMock()
keystone_client.projects.create.return_value = mock_project
keystone_client.users.find.return_value = mock.MagicMock(
id=self.test_user)
keystone_client.roles = mock_project
return keystone_client
def mock_ctx(self, test_vars, test_id,
test_deployment_id, runtime_properties=None):
ctx = MockContext()
ctx.node = MockNodeContext(properties=test_vars)
ctx.instance = MockNodeInstanceContext(
id=test_id, runtime_properties=runtime_properties or {})
ctx.deployment = mock.Mock()
ctx.deployment.id = test_deployment_id
ctx.type = NODE_INSTANCE
return ctx
@mock.patch('openstack_plugin_common._put_client_in_kw',
autospec=True, return_value=None)
def test_keystone_project_create(self, *_):
test_vars = {
'project': {},
'resource_id': '',
'quota': {},
'users': {}
}
ctx = self.mock_ctx(test_vars, self.test_id, self.test_deployment_id)
keystone_plugin.project.ctx = ctx
keystone_plugin.project.create(
self.mock_keystone_client(self.MockProjectOS(self.test_id,
self.test_name)))
self.assertEqual(self.test_name,
ctx.instance.runtime_properties[
OPENSTACK_NAME_PROPERTY])
self.assertEqual(self.test_id,
ctx.instance.runtime_properties[
OPENSTACK_ID_PROPERTY])
self.assertEqual(PROJECT_OPENSTACK_TYPE,
ctx.instance.runtime_properties[
OPENSTACK_TYPE_PROPERTY])
@mock.patch('openstack_plugin_common._put_client_in_kw',
autospec=True, return_value=None)
def test_assign_user(self, *_):
test_vars = {
'project': {},
'resource_id': '',
'quota': {},
'users': [{'name': self.test_user,
'roles': [self.test_role]}]
}
ctx = self.mock_ctx(test_vars,
self.test_id,
self.test_deployment_id,
{OPENSTACK_ID_PROPERTY: self.test_id})
mock_project = self.MockProjectOS(self.test_id, self.test_name)
keystone_client = self.mock_keystone_client(mock_project)
keystone_plugin.project.ctx = ctx
keystone_plugin.project.start(
keystone_client,
mock.MagicMock(), # nova_client
mock.MagicMock(), # cinder_client
mock.MagicMock()) # neutron_client
self.assertEqual({self.test_user: self.test_role},
mock_project._users)
|