blob: 2e50cfd764f7415b276c60c7886ebe9dac2b7eea [file] [log] [blame]
Matthew Treinishcb058062014-03-13 18:27:07 -04001# Copyright 2014 IBM Corp.
2#
3# Licensed under the Apache License, Version 2.0 (the "License"); you may
4# not use this file except in compliance with the License. You may obtain
5# a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12# License for the specific language governing permissions and limitations
13# under the License.
14
15import keystoneclient.v2_0.client as keystoneclient
16from mock import patch
17import neutronclient.v2_0.client as neutronclient
18from oslo.config import cfg
19
20from tempest.common import isolated_creds
21from tempest import config
22from tempest.openstack.common.fixture import mockpatch
23from tempest.services.identity.json import identity_client as json_iden_client
24from tempest.services.identity.xml import identity_client as xml_iden_client
25from tempest.services.network.json import network_client as json_network_client
26from tempest.services.network.xml import network_client as xml_network_client
27from tempest.tests import base
28from tempest.tests import fake_config
29
30
31class TestTenantIsolation(base.TestCase):
32
33 def setUp(self):
34 super(TestTenantIsolation, self).setUp()
35 self.useFixture(fake_config.ConfigFixture())
36 self.stubs.Set(config, 'TempestConfigPrivate', fake_config.FakePrivate)
37
38 def test_tempest_client(self):
39 iso_creds = isolated_creds.IsolatedCreds('test class')
40 self.assertTrue(isinstance(iso_creds.identity_admin_client,
41 json_iden_client.IdentityClientJSON))
42 self.assertTrue(isinstance(iso_creds.network_admin_client,
43 json_network_client.NetworkClientJSON))
44
45 def test_official_client(self):
46 self.useFixture(mockpatch.PatchObject(keystoneclient.Client,
47 'authenticate'))
48 iso_creds = isolated_creds.IsolatedCreds('test class',
49 tempest_client=False)
50 self.assertTrue(isinstance(iso_creds.identity_admin_client,
51 keystoneclient.Client))
52 self.assertTrue(isinstance(iso_creds.network_admin_client,
53 neutronclient.Client))
54
55 def test_tempest_client_xml(self):
56 iso_creds = isolated_creds.IsolatedCreds('test class', interface='xml')
57 self.assertEqual(iso_creds.interface, 'xml')
58 self.assertTrue(isinstance(iso_creds.identity_admin_client,
59 xml_iden_client.IdentityClientXML))
60 self.assertTrue(isinstance(iso_creds.network_admin_client,
61 xml_network_client.NetworkClientXML))
62
63 def _mock_user_create(self, id, name):
64 user_fix = self.useFixture(mockpatch.PatchObject(
65 json_iden_client.IdentityClientJSON,
66 'create_user',
67 return_value=({'status': 200},
68 {'id': id, 'name': name})))
69 return user_fix
70
71 def _mock_tenant_create(self, id, name):
72 tenant_fix = self.useFixture(mockpatch.PatchObject(
73 json_iden_client.IdentityClientJSON,
74 'create_tenant',
75 return_value=({'status': 200},
76 {'id': id, 'name': name})))
77 return tenant_fix
78
Matthew Treinishe6723262014-03-14 13:16:52 -040079 def _mock_network_create(self, iso_creds, id, name):
80 net_fix = self.useFixture(mockpatch.PatchObject(
81 iso_creds.network_admin_client,
82 'create_network',
83 return_value=({'status': 200},
84 {'network': {'id': id, 'name': name}})))
85 return net_fix
86
87 def _mock_subnet_create(self, iso_creds, id, name):
88 subnet_fix = self.useFixture(mockpatch.PatchObject(
89 iso_creds.network_admin_client,
90 'create_subnet',
91 return_value=({'status': 200},
92 {'subnet': {'id': id, 'name': name}})))
93 return subnet_fix
94
95 def _mock_router_create(self, id, name):
96 router_fix = self.useFixture(mockpatch.PatchObject(
97 json_network_client.NetworkClientJSON,
98 'create_router',
99 return_value=({'status': 200},
100 {'router': {'id': id, 'name': name}})))
101 return router_fix
102
Matthew Treinishcb058062014-03-13 18:27:07 -0400103 @patch('tempest.common.rest_client.RestClient')
104 def test_primary_creds(self, MockRestClient):
105 cfg.CONF.set_default('neutron', False, 'service_available')
106 iso_creds = isolated_creds.IsolatedCreds('test class',
107 password='fake_password')
108 self._mock_tenant_create('1234', 'fake_prim_tenant')
109 self._mock_user_create('1234', 'fake_prim_user')
110 username, tenant_name, password = iso_creds.get_primary_creds()
111 self.assertEqual(username, 'fake_prim_user')
112 self.assertEqual(tenant_name, 'fake_prim_tenant')
113 # Verify helper methods
114 tenant = iso_creds.get_primary_tenant()
115 user = iso_creds.get_primary_user()
116 self.assertEqual(tenant['id'], '1234')
117 self.assertEqual(user['id'], '1234')
118
119 @patch('tempest.common.rest_client.RestClient')
120 def test_admin_creds(self, MockRestClient):
121 cfg.CONF.set_default('neutron', False, 'service_available')
122 iso_creds = isolated_creds.IsolatedCreds('test class',
123 password='fake_password')
124 self._mock_user_create('1234', 'fake_admin_user')
125 self._mock_tenant_create('1234', 'fake_admin_tenant')
126 self.useFixture(mockpatch.PatchObject(
127 json_iden_client.IdentityClientJSON,
128 'list_roles',
129 return_value=({'status': 200},
130 [{'id': '1234', 'name': 'admin'}])))
131
132 user_mock = patch.object(json_iden_client.IdentityClientJSON,
133 'assign_user_role')
134 user_mock.start()
135 self.addCleanup(user_mock.stop)
136 with patch.object(json_iden_client.IdentityClientJSON,
137 'assign_user_role') as user_mock:
138 username, tenant_name, password = iso_creds.get_admin_creds()
139 user_mock.assert_called_once_with('1234', '1234', '1234')
140 self.assertEqual(username, 'fake_admin_user')
141 self.assertEqual(tenant_name, 'fake_admin_tenant')
142 # Verify helper methods
143 tenant = iso_creds.get_admin_tenant()
144 user = iso_creds.get_admin_user()
145 self.assertEqual(tenant['id'], '1234')
146 self.assertEqual(user['id'], '1234')
147
148 @patch('tempest.common.rest_client.RestClient')
149 def test_all_cred_cleanup(self, MockRestClient):
150 cfg.CONF.set_default('neutron', False, 'service_available')
151 iso_creds = isolated_creds.IsolatedCreds('test class',
152 password='fake_password')
153 tenant_fix = self._mock_tenant_create('1234', 'fake_prim_tenant')
154 user_fix = self._mock_user_create('1234', 'fake_prim_user')
155 username, tenant_name, password = iso_creds.get_primary_creds()
156 tenant_fix.cleanUp()
157 user_fix.cleanUp()
158 tenant_fix = self._mock_tenant_create('12345', 'fake_alt_tenant')
159 user_fix = self._mock_user_create('12345', 'fake_alt_user')
160 alt_username, alt_tenant, alt_password = iso_creds.get_alt_creds()
161 tenant_fix.cleanUp()
162 user_fix.cleanUp()
163 tenant_fix = self._mock_tenant_create('123456', 'fake_admin_tenant')
164 user_fix = self._mock_user_create('123456', 'fake_admin_user')
165 self.useFixture(mockpatch.PatchObject(
166 json_iden_client.IdentityClientJSON,
167 'list_roles',
168 return_value=({'status': 200},
169 [{'id': '123456', 'name': 'admin'}])))
170 with patch.object(json_iden_client.IdentityClientJSON,
171 'assign_user_role'):
172 admin_username, admin_tenant, admin_pass = \
173 iso_creds.get_admin_creds()
174 user_mock = self.patch(
175 'tempest.services.identity.json.identity_client.'
176 'IdentityClientJSON.delete_user')
177 tenant_mock = self.patch(
178 'tempest.services.identity.json.identity_client.'
179 'IdentityClientJSON.delete_tenant')
180 iso_creds.clear_isolated_creds()
181 # Verify user delete calls
182 calls = user_mock.mock_calls
183 self.assertEqual(len(calls), 3)
184 args = map(lambda x: x[1][0], calls)
185 self.assertIn('1234', args)
186 self.assertIn('12345', args)
187 self.assertIn('123456', args)
188 # Verify tenant delete calls
189 calls = tenant_mock.mock_calls
190 self.assertEqual(len(calls), 3)
191 args = map(lambda x: x[1][0], calls)
192 self.assertIn('1234', args)
193 self.assertIn('12345', args)
194 self.assertIn('123456', args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400195
196 @patch('tempest.common.rest_client.RestClient')
197 def test_alt_creds(self, MockRestClient):
198 cfg.CONF.set_default('neutron', False, 'service_available')
199 iso_creds = isolated_creds.IsolatedCreds('test class',
200 password='fake_password')
201 self._mock_user_create('1234', 'fake_alt_user')
202 self._mock_tenant_create('1234', 'fake_alt_tenant')
203 username, tenant_name, password = iso_creds.get_alt_creds()
204 self.assertEqual(username, 'fake_alt_user')
205 self.assertEqual(tenant_name, 'fake_alt_tenant')
206 # Verify helper methods
207 tenant = iso_creds.get_alt_tenant()
208 user = iso_creds.get_alt_user()
209 self.assertEqual(tenant['id'], '1234')
210 self.assertEqual(user['id'], '1234')
211
212 @patch('tempest.common.rest_client.RestClient')
213 def test_network_creation(self, MockRestClient):
214 iso_creds = isolated_creds.IsolatedCreds('test class',
215 password='fake_password')
216 self._mock_user_create('1234', 'fake_prim_user')
217 self._mock_tenant_create('1234', 'fake_prim_tenant')
218 self._mock_network_create(iso_creds, '1234', 'fake_net')
219 self._mock_subnet_create(iso_creds, '1234', 'fake_subnet')
220 self._mock_router_create('1234', 'fake_router')
221 router_interface_mock = self.patch(
222 'tempest.services.network.json.network_client.NetworkClientJSON.'
223 'add_router_interface_with_subnet_id')
224 username, tenant_name, password = iso_creds.get_primary_creds()
225 router_interface_mock.called_once_with('1234', '1234')
226 network = iso_creds.get_primary_network()
227 subnet = iso_creds.get_primary_subnet()
228 router = iso_creds.get_primary_router()
229 self.assertEqual(network['id'], '1234')
230 self.assertEqual(network['name'], 'fake_net')
231 self.assertEqual(subnet['id'], '1234')
232 self.assertEqual(subnet['name'], 'fake_subnet')
233 self.assertEqual(router['id'], '1234')
234 self.assertEqual(router['name'], 'fake_router')
235
236 @patch('tempest.common.rest_client.RestClient')
237 def test_network_cleanup(self, MockRestClient):
238 iso_creds = isolated_creds.IsolatedCreds('test class',
239 password='fake_password')
240 # Create primary tenant and network
241 user_fix = self._mock_user_create('1234', 'fake_prim_user')
242 tenant_fix = self._mock_tenant_create('1234', 'fake_prim_tenant')
243 net_fix = self._mock_network_create(iso_creds, '1234', 'fake_net')
244 subnet_fix = self._mock_subnet_create(iso_creds, '1234', 'fake_subnet')
245 router_fix = self._mock_router_create('1234', 'fake_router')
246 router_interface_mock = self.patch(
247 'tempest.services.network.json.network_client.NetworkClientJSON.'
248 'add_router_interface_with_subnet_id')
249 username, tenant_name, password = iso_creds.get_primary_creds()
250 router_interface_mock.called_once_with('1234', '1234')
251 router_interface_mock.reset_mock()
252 tenant_fix.cleanUp()
253 user_fix.cleanUp()
254 net_fix.cleanUp()
255 subnet_fix.cleanUp()
256 router_fix.cleanUp()
257 # Create alternate tenant and network
258 user_fix = self._mock_user_create('12345', 'fake_alt_user')
259 tenant_fix = self._mock_tenant_create('12345', 'fake_alt_tenant')
260 net_fix = self._mock_network_create(iso_creds, '12345', 'fake_alt_net')
261 subnet_fix = self._mock_subnet_create(iso_creds, '12345',
262 'fake_alt_subnet')
263 router_fix = self._mock_router_create('12345', 'fake_alt_router')
264 alt_username, alt_tenant_name, password = iso_creds.get_alt_creds()
265 router_interface_mock.called_once_with('12345', '12345')
266 router_interface_mock.reset_mock()
267 tenant_fix.cleanUp()
268 user_fix.cleanUp()
269 net_fix.cleanUp()
270 subnet_fix.cleanUp()
271 router_fix.cleanUp()
272 # Create admin tenant and networks
273 user_fix = self._mock_user_create('123456', 'fake_admin_user')
274 tenant_fix = self._mock_tenant_create('123456', 'fake_admin_tenant')
275 net_fix = self._mock_network_create(iso_creds, '123456',
276 'fake_admin_net')
277 subnet_fix = self._mock_subnet_create(iso_creds, '123456',
278 'fake_admin_subnet')
279 router_fix = self._mock_router_create('123456', 'fake_admin_router')
280 self.useFixture(mockpatch.PatchObject(
281 json_iden_client.IdentityClientJSON,
282 'list_roles',
283 return_value=({'status': 200},
284 [{'id': '123456', 'name': 'admin'}])))
285 with patch.object(json_iden_client.IdentityClientJSON,
286 'assign_user_role'):
287 admin_user, admin_tenant, password = iso_creds.get_admin_creds()
288 self.patch('tempest.services.identity.json.identity_client.'
289 'IdentityClientJSON.delete_user')
290 self.patch('tempest.services.identity.json.identity_client.'
291 'IdentityClientJSON.delete_tenant')
292 net = patch.object(iso_creds.network_admin_client,
293 'delete_network')
294 net_mock = net.start()
295 subnet = patch.object(iso_creds.network_admin_client,
296 'delete_subnet')
297 subnet_mock = subnet.start()
298 router = patch.object(iso_creds.network_admin_client,
299 'delete_router')
300 router_mock = router.start()
301 remove_router_interface_mock = self.patch(
302 'tempest.services.network.json.network_client.NetworkClientJSON.'
303 'remove_router_interface_with_subnet_id')
304 port_list_mock = patch.object(iso_creds.network_admin_client,
305 'list_ports', return_value=(
306 {'status': 200}, {'ports': []}))
307 port_list_mock.start()
308 iso_creds.clear_isolated_creds()
309 # Verify remove router interface calls
310 calls = remove_router_interface_mock.mock_calls
311 self.assertEqual(len(calls), 3)
312 args = map(lambda x: x[1], calls)
313 self.assertIn(('1234', '1234'), args)
314 self.assertIn(('12345', '12345'), args)
315 self.assertIn(('123456', '123456'), args)
316 # Verify network delete calls
317 calls = net_mock.mock_calls
318 self.assertEqual(len(calls), 3)
319 args = map(lambda x: x[1][0], calls)
320 self.assertIn('1234', args)
321 self.assertIn('12345', args)
322 self.assertIn('123456', args)
323 # Verify subnet delete calls
324 calls = subnet_mock.mock_calls
325 self.assertEqual(len(calls), 3)
326 args = map(lambda x: x[1][0], calls)
327 self.assertIn('1234', args)
328 self.assertIn('12345', args)
329 self.assertIn('123456', args)
330 # Verify router delete calls
331 calls = router_mock.mock_calls
332 self.assertEqual(len(calls), 3)
333 args = map(lambda x: x[1][0], calls)
334 self.assertIn('1234', args)
335 self.assertIn('12345', args)
336 self.assertIn('123456', args)