blob: 9292dcbfbe59b3f89d19ca380a8717e377a46650 [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
Andrea Frittoli422fbdf2014-03-20 10:05:18 +000020from tempest import clients
Andrea Frittoli2095d242014-03-20 08:36:23 +000021from tempest.common import http
Matthew Treinishcb058062014-03-13 18:27:07 -040022from tempest.common import isolated_creds
23from tempest import config
Matthew Treinish23433a02014-03-17 16:43:50 -040024from tempest import exceptions
Matthew Treinishcb058062014-03-13 18:27:07 -040025from tempest.openstack.common.fixture import mockpatch
26from tempest.services.identity.json import identity_client as json_iden_client
27from tempest.services.identity.xml import identity_client as xml_iden_client
28from tempest.services.network.json import network_client as json_network_client
29from tempest.services.network.xml import network_client as xml_network_client
30from tempest.tests import base
31from tempest.tests import fake_config
Andrea Frittoli2095d242014-03-20 08:36:23 +000032from tempest.tests import fake_http
33from tempest.tests import fake_identity
Matthew Treinishcb058062014-03-13 18:27:07 -040034
35
36class TestTenantIsolation(base.TestCase):
37
38 def setUp(self):
39 super(TestTenantIsolation, self).setUp()
40 self.useFixture(fake_config.ConfigFixture())
41 self.stubs.Set(config, 'TempestConfigPrivate', fake_config.FakePrivate)
Andrea Frittoli2095d242014-03-20 08:36:23 +000042 self.fake_http = fake_http.fake_httplib2(return_type=200)
43 self.stubs.Set(http.ClosingHttp, 'request',
44 fake_identity._fake_v2_response)
Matthew Treinishcb058062014-03-13 18:27:07 -040045
46 def test_tempest_client(self):
47 iso_creds = isolated_creds.IsolatedCreds('test class')
48 self.assertTrue(isinstance(iso_creds.identity_admin_client,
49 json_iden_client.IdentityClientJSON))
50 self.assertTrue(isinstance(iso_creds.network_admin_client,
51 json_network_client.NetworkClientJSON))
52
53 def test_official_client(self):
54 self.useFixture(mockpatch.PatchObject(keystoneclient.Client,
55 'authenticate'))
Andrea Frittoli422fbdf2014-03-20 10:05:18 +000056 self.useFixture(mockpatch.PatchObject(clients.OfficialClientManager,
57 '_get_image_client'))
58 self.useFixture(mockpatch.PatchObject(clients.OfficialClientManager,
59 '_get_object_storage_client'))
60 self.useFixture(mockpatch.PatchObject(clients.OfficialClientManager,
61 '_get_orchestration_client'))
Matthew Treinishcb058062014-03-13 18:27:07 -040062 iso_creds = isolated_creds.IsolatedCreds('test class',
63 tempest_client=False)
64 self.assertTrue(isinstance(iso_creds.identity_admin_client,
65 keystoneclient.Client))
66 self.assertTrue(isinstance(iso_creds.network_admin_client,
67 neutronclient.Client))
68
69 def test_tempest_client_xml(self):
70 iso_creds = isolated_creds.IsolatedCreds('test class', interface='xml')
71 self.assertEqual(iso_creds.interface, 'xml')
72 self.assertTrue(isinstance(iso_creds.identity_admin_client,
73 xml_iden_client.IdentityClientXML))
74 self.assertTrue(isinstance(iso_creds.network_admin_client,
75 xml_network_client.NetworkClientXML))
76
77 def _mock_user_create(self, id, name):
78 user_fix = self.useFixture(mockpatch.PatchObject(
79 json_iden_client.IdentityClientJSON,
80 'create_user',
81 return_value=({'status': 200},
82 {'id': id, 'name': name})))
83 return user_fix
84
85 def _mock_tenant_create(self, id, name):
86 tenant_fix = self.useFixture(mockpatch.PatchObject(
87 json_iden_client.IdentityClientJSON,
88 'create_tenant',
89 return_value=({'status': 200},
90 {'id': id, 'name': name})))
91 return tenant_fix
92
Matthew Treinishe6723262014-03-14 13:16:52 -040093 def _mock_network_create(self, iso_creds, id, name):
94 net_fix = self.useFixture(mockpatch.PatchObject(
95 iso_creds.network_admin_client,
96 'create_network',
97 return_value=({'status': 200},
98 {'network': {'id': id, 'name': name}})))
99 return net_fix
100
101 def _mock_subnet_create(self, iso_creds, id, name):
102 subnet_fix = self.useFixture(mockpatch.PatchObject(
103 iso_creds.network_admin_client,
104 'create_subnet',
105 return_value=({'status': 200},
106 {'subnet': {'id': id, 'name': name}})))
107 return subnet_fix
108
109 def _mock_router_create(self, id, name):
110 router_fix = self.useFixture(mockpatch.PatchObject(
111 json_network_client.NetworkClientJSON,
112 'create_router',
113 return_value=({'status': 200},
114 {'router': {'id': id, 'name': name}})))
115 return router_fix
116
Matthew Treinishcb058062014-03-13 18:27:07 -0400117 @patch('tempest.common.rest_client.RestClient')
118 def test_primary_creds(self, MockRestClient):
119 cfg.CONF.set_default('neutron', False, 'service_available')
120 iso_creds = isolated_creds.IsolatedCreds('test class',
121 password='fake_password')
122 self._mock_tenant_create('1234', 'fake_prim_tenant')
123 self._mock_user_create('1234', 'fake_prim_user')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000124 primary_creds = iso_creds.get_primary_creds()
Andrea Frittolifc315902014-03-20 09:21:44 +0000125 self.assertEqual(primary_creds.username, 'fake_prim_user')
126 self.assertEqual(primary_creds.tenant_name, 'fake_prim_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000127 # Verify IDs
128 self.assertEqual(primary_creds.tenant_id, '1234')
129 self.assertEqual(primary_creds.user_id, '1234')
Matthew Treinishcb058062014-03-13 18:27:07 -0400130
131 @patch('tempest.common.rest_client.RestClient')
132 def test_admin_creds(self, MockRestClient):
133 cfg.CONF.set_default('neutron', False, 'service_available')
134 iso_creds = isolated_creds.IsolatedCreds('test class',
135 password='fake_password')
136 self._mock_user_create('1234', 'fake_admin_user')
137 self._mock_tenant_create('1234', 'fake_admin_tenant')
138 self.useFixture(mockpatch.PatchObject(
139 json_iden_client.IdentityClientJSON,
140 'list_roles',
141 return_value=({'status': 200},
142 [{'id': '1234', 'name': 'admin'}])))
143
144 user_mock = patch.object(json_iden_client.IdentityClientJSON,
145 'assign_user_role')
146 user_mock.start()
147 self.addCleanup(user_mock.stop)
148 with patch.object(json_iden_client.IdentityClientJSON,
149 'assign_user_role') as user_mock:
Andrea Frittoli422fbdf2014-03-20 10:05:18 +0000150 admin_creds = iso_creds.get_admin_creds()
Matthew Treinishcb058062014-03-13 18:27:07 -0400151 user_mock.assert_called_once_with('1234', '1234', '1234')
Andrea Frittolifc315902014-03-20 09:21:44 +0000152 self.assertEqual(admin_creds.username, 'fake_admin_user')
153 self.assertEqual(admin_creds.tenant_name, 'fake_admin_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000154 # Verify IDs
155 self.assertEqual(admin_creds.tenant_id, '1234')
156 self.assertEqual(admin_creds.user_id, '1234')
Matthew Treinishcb058062014-03-13 18:27:07 -0400157
158 @patch('tempest.common.rest_client.RestClient')
159 def test_all_cred_cleanup(self, MockRestClient):
160 cfg.CONF.set_default('neutron', False, 'service_available')
161 iso_creds = isolated_creds.IsolatedCreds('test class',
162 password='fake_password')
163 tenant_fix = self._mock_tenant_create('1234', 'fake_prim_tenant')
164 user_fix = self._mock_user_create('1234', 'fake_prim_user')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000165 iso_creds.get_primary_creds()
Matthew Treinishcb058062014-03-13 18:27:07 -0400166 tenant_fix.cleanUp()
167 user_fix.cleanUp()
168 tenant_fix = self._mock_tenant_create('12345', 'fake_alt_tenant')
169 user_fix = self._mock_user_create('12345', 'fake_alt_user')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000170 iso_creds.get_alt_creds()
Matthew Treinishcb058062014-03-13 18:27:07 -0400171 tenant_fix.cleanUp()
172 user_fix.cleanUp()
173 tenant_fix = self._mock_tenant_create('123456', 'fake_admin_tenant')
174 user_fix = self._mock_user_create('123456', 'fake_admin_user')
175 self.useFixture(mockpatch.PatchObject(
176 json_iden_client.IdentityClientJSON,
177 'list_roles',
178 return_value=({'status': 200},
179 [{'id': '123456', 'name': 'admin'}])))
180 with patch.object(json_iden_client.IdentityClientJSON,
181 'assign_user_role'):
Andrea Frittoli422fbdf2014-03-20 10:05:18 +0000182 iso_creds.get_admin_creds()
Matthew Treinishcb058062014-03-13 18:27:07 -0400183 user_mock = self.patch(
184 'tempest.services.identity.json.identity_client.'
185 'IdentityClientJSON.delete_user')
186 tenant_mock = self.patch(
187 'tempest.services.identity.json.identity_client.'
188 'IdentityClientJSON.delete_tenant')
189 iso_creds.clear_isolated_creds()
190 # Verify user delete calls
191 calls = user_mock.mock_calls
192 self.assertEqual(len(calls), 3)
193 args = map(lambda x: x[1][0], calls)
194 self.assertIn('1234', args)
195 self.assertIn('12345', args)
196 self.assertIn('123456', args)
197 # Verify tenant delete calls
198 calls = tenant_mock.mock_calls
199 self.assertEqual(len(calls), 3)
200 args = map(lambda x: x[1][0], calls)
201 self.assertIn('1234', args)
202 self.assertIn('12345', args)
203 self.assertIn('123456', args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400204
205 @patch('tempest.common.rest_client.RestClient')
206 def test_alt_creds(self, MockRestClient):
207 cfg.CONF.set_default('neutron', False, 'service_available')
208 iso_creds = isolated_creds.IsolatedCreds('test class',
209 password='fake_password')
210 self._mock_user_create('1234', 'fake_alt_user')
211 self._mock_tenant_create('1234', 'fake_alt_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000212 alt_creds = iso_creds.get_alt_creds()
Andrea Frittolifc315902014-03-20 09:21:44 +0000213 self.assertEqual(alt_creds.username, 'fake_alt_user')
214 self.assertEqual(alt_creds.tenant_name, 'fake_alt_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000215 # Verify IDs
216 self.assertEqual(alt_creds.tenant_id, '1234')
217 self.assertEqual(alt_creds.user_id, '1234')
Matthew Treinishe6723262014-03-14 13:16:52 -0400218
219 @patch('tempest.common.rest_client.RestClient')
220 def test_network_creation(self, MockRestClient):
221 iso_creds = isolated_creds.IsolatedCreds('test class',
222 password='fake_password')
223 self._mock_user_create('1234', 'fake_prim_user')
224 self._mock_tenant_create('1234', 'fake_prim_tenant')
225 self._mock_network_create(iso_creds, '1234', 'fake_net')
226 self._mock_subnet_create(iso_creds, '1234', 'fake_subnet')
227 self._mock_router_create('1234', 'fake_router')
228 router_interface_mock = self.patch(
229 'tempest.services.network.json.network_client.NetworkClientJSON.'
230 'add_router_interface_with_subnet_id')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000231 iso_creds.get_primary_creds()
Matthew Treinishe6723262014-03-14 13:16:52 -0400232 router_interface_mock.called_once_with('1234', '1234')
233 network = iso_creds.get_primary_network()
234 subnet = iso_creds.get_primary_subnet()
235 router = iso_creds.get_primary_router()
236 self.assertEqual(network['id'], '1234')
237 self.assertEqual(network['name'], 'fake_net')
238 self.assertEqual(subnet['id'], '1234')
239 self.assertEqual(subnet['name'], 'fake_subnet')
240 self.assertEqual(router['id'], '1234')
241 self.assertEqual(router['name'], 'fake_router')
242
243 @patch('tempest.common.rest_client.RestClient')
244 def test_network_cleanup(self, MockRestClient):
245 iso_creds = isolated_creds.IsolatedCreds('test class',
246 password='fake_password')
247 # Create primary tenant and network
248 user_fix = self._mock_user_create('1234', 'fake_prim_user')
249 tenant_fix = self._mock_tenant_create('1234', 'fake_prim_tenant')
250 net_fix = self._mock_network_create(iso_creds, '1234', 'fake_net')
251 subnet_fix = self._mock_subnet_create(iso_creds, '1234', 'fake_subnet')
252 router_fix = self._mock_router_create('1234', 'fake_router')
253 router_interface_mock = self.patch(
254 'tempest.services.network.json.network_client.NetworkClientJSON.'
255 'add_router_interface_with_subnet_id')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000256 iso_creds.get_primary_creds()
Matthew Treinishe6723262014-03-14 13:16:52 -0400257 router_interface_mock.called_once_with('1234', '1234')
258 router_interface_mock.reset_mock()
259 tenant_fix.cleanUp()
260 user_fix.cleanUp()
261 net_fix.cleanUp()
262 subnet_fix.cleanUp()
263 router_fix.cleanUp()
264 # Create alternate tenant and network
265 user_fix = self._mock_user_create('12345', 'fake_alt_user')
266 tenant_fix = self._mock_tenant_create('12345', 'fake_alt_tenant')
267 net_fix = self._mock_network_create(iso_creds, '12345', 'fake_alt_net')
268 subnet_fix = self._mock_subnet_create(iso_creds, '12345',
269 'fake_alt_subnet')
270 router_fix = self._mock_router_create('12345', 'fake_alt_router')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000271 iso_creds.get_alt_creds()
Matthew Treinishe6723262014-03-14 13:16:52 -0400272 router_interface_mock.called_once_with('12345', '12345')
273 router_interface_mock.reset_mock()
274 tenant_fix.cleanUp()
275 user_fix.cleanUp()
276 net_fix.cleanUp()
277 subnet_fix.cleanUp()
278 router_fix.cleanUp()
279 # Create admin tenant and networks
280 user_fix = self._mock_user_create('123456', 'fake_admin_user')
281 tenant_fix = self._mock_tenant_create('123456', 'fake_admin_tenant')
282 net_fix = self._mock_network_create(iso_creds, '123456',
283 'fake_admin_net')
284 subnet_fix = self._mock_subnet_create(iso_creds, '123456',
285 'fake_admin_subnet')
286 router_fix = self._mock_router_create('123456', 'fake_admin_router')
287 self.useFixture(mockpatch.PatchObject(
288 json_iden_client.IdentityClientJSON,
289 'list_roles',
290 return_value=({'status': 200},
291 [{'id': '123456', 'name': 'admin'}])))
292 with patch.object(json_iden_client.IdentityClientJSON,
293 'assign_user_role'):
Andrea Frittoli422fbdf2014-03-20 10:05:18 +0000294 iso_creds.get_admin_creds()
Matthew Treinishe6723262014-03-14 13:16:52 -0400295 self.patch('tempest.services.identity.json.identity_client.'
296 'IdentityClientJSON.delete_user')
297 self.patch('tempest.services.identity.json.identity_client.'
298 'IdentityClientJSON.delete_tenant')
299 net = patch.object(iso_creds.network_admin_client,
300 'delete_network')
301 net_mock = net.start()
302 subnet = patch.object(iso_creds.network_admin_client,
303 'delete_subnet')
304 subnet_mock = subnet.start()
305 router = patch.object(iso_creds.network_admin_client,
306 'delete_router')
307 router_mock = router.start()
308 remove_router_interface_mock = self.patch(
309 'tempest.services.network.json.network_client.NetworkClientJSON.'
310 'remove_router_interface_with_subnet_id')
311 port_list_mock = patch.object(iso_creds.network_admin_client,
312 'list_ports', return_value=(
313 {'status': 200}, {'ports': []}))
314 port_list_mock.start()
315 iso_creds.clear_isolated_creds()
316 # Verify remove router interface calls
317 calls = remove_router_interface_mock.mock_calls
318 self.assertEqual(len(calls), 3)
319 args = map(lambda x: x[1], calls)
320 self.assertIn(('1234', '1234'), args)
321 self.assertIn(('12345', '12345'), args)
322 self.assertIn(('123456', '123456'), args)
323 # Verify network delete calls
324 calls = net_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 subnet delete calls
331 calls = subnet_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)
337 # Verify router delete calls
338 calls = router_mock.mock_calls
339 self.assertEqual(len(calls), 3)
340 args = map(lambda x: x[1][0], calls)
341 self.assertIn('1234', args)
342 self.assertIn('12345', args)
343 self.assertIn('123456', args)
Matthew Treinish23433a02014-03-17 16:43:50 -0400344
345 @patch('tempest.common.rest_client.RestClient')
346 def test_network_alt_creation(self, MockRestClient):
347 iso_creds = isolated_creds.IsolatedCreds('test class',
348 password='fake_password')
349 self._mock_user_create('1234', 'fake_alt_user')
350 self._mock_tenant_create('1234', 'fake_alt_tenant')
351 self._mock_network_create(iso_creds, '1234', 'fake_alt_net')
352 self._mock_subnet_create(iso_creds, '1234', 'fake_alt_subnet')
353 self._mock_router_create('1234', 'fake_alt_router')
354 router_interface_mock = self.patch(
355 'tempest.services.network.json.network_client.NetworkClientJSON.'
356 'add_router_interface_with_subnet_id')
Andrea Frittoli422fbdf2014-03-20 10:05:18 +0000357 iso_creds.get_alt_creds()
Matthew Treinish23433a02014-03-17 16:43:50 -0400358 router_interface_mock.called_once_with('1234', '1234')
359 network = iso_creds.get_alt_network()
360 subnet = iso_creds.get_alt_subnet()
361 router = iso_creds.get_alt_router()
362 self.assertEqual(network['id'], '1234')
363 self.assertEqual(network['name'], 'fake_alt_net')
364 self.assertEqual(subnet['id'], '1234')
365 self.assertEqual(subnet['name'], 'fake_alt_subnet')
366 self.assertEqual(router['id'], '1234')
367 self.assertEqual(router['name'], 'fake_alt_router')
368
369 @patch('tempest.common.rest_client.RestClient')
370 def test_network_admin_creation(self, MockRestClient):
371 iso_creds = isolated_creds.IsolatedCreds('test class',
372 password='fake_password')
373 self._mock_user_create('1234', 'fake_admin_user')
374 self._mock_tenant_create('1234', 'fake_admin_tenant')
375 self._mock_network_create(iso_creds, '1234', 'fake_admin_net')
376 self._mock_subnet_create(iso_creds, '1234', 'fake_admin_subnet')
377 self._mock_router_create('1234', 'fake_admin_router')
378 router_interface_mock = self.patch(
379 'tempest.services.network.json.network_client.NetworkClientJSON.'
380 'add_router_interface_with_subnet_id')
381 self.useFixture(mockpatch.PatchObject(
382 json_iden_client.IdentityClientJSON,
383 'list_roles',
384 return_value=({'status': 200},
385 [{'id': '123456', 'name': 'admin'}])))
386 with patch.object(json_iden_client.IdentityClientJSON,
387 'assign_user_role'):
Andrea Frittoli422fbdf2014-03-20 10:05:18 +0000388 iso_creds.get_admin_creds()
Matthew Treinish23433a02014-03-17 16:43:50 -0400389 router_interface_mock.called_once_with('1234', '1234')
390 network = iso_creds.get_admin_network()
391 subnet = iso_creds.get_admin_subnet()
392 router = iso_creds.get_admin_router()
393 self.assertEqual(network['id'], '1234')
394 self.assertEqual(network['name'], 'fake_admin_net')
395 self.assertEqual(subnet['id'], '1234')
396 self.assertEqual(subnet['name'], 'fake_admin_subnet')
397 self.assertEqual(router['id'], '1234')
398 self.assertEqual(router['name'], 'fake_admin_router')
399
400 @patch('tempest.common.rest_client.RestClient')
401 def test_no_network_resources(self, MockRestClient):
402 net_dict = {
403 'network': False,
404 'router': False,
405 'subnet': False,
406 'dhcp': False,
407 }
408 iso_creds = isolated_creds.IsolatedCreds('test class',
409 password='fake_password',
410 network_resources=net_dict)
411 self._mock_user_create('1234', 'fake_prim_user')
412 self._mock_tenant_create('1234', 'fake_prim_tenant')
413 net = patch.object(iso_creds.network_admin_client,
414 'delete_network')
415 net_mock = net.start()
416 subnet = patch.object(iso_creds.network_admin_client,
417 'delete_subnet')
418 subnet_mock = subnet.start()
419 router = patch.object(iso_creds.network_admin_client,
420 'delete_router')
421 router_mock = router.start()
422
Andrea Frittoli422fbdf2014-03-20 10:05:18 +0000423 iso_creds.get_primary_creds()
Matthew Treinish23433a02014-03-17 16:43:50 -0400424 self.assertEqual(net_mock.mock_calls, [])
425 self.assertEqual(subnet_mock.mock_calls, [])
426 self.assertEqual(router_mock.mock_calls, [])
427 network = iso_creds.get_primary_network()
428 subnet = iso_creds.get_primary_subnet()
429 router = iso_creds.get_primary_router()
430 self.assertIsNone(network)
431 self.assertIsNone(subnet)
432 self.assertIsNone(router)
433
434 @patch('tempest.common.rest_client.RestClient')
435 def test_router_without_network(self, MockRestClient):
436 net_dict = {
437 'network': False,
438 'router': True,
439 'subnet': False,
440 'dhcp': False,
441 }
442 iso_creds = isolated_creds.IsolatedCreds('test class',
443 password='fake_password',
444 network_resources=net_dict)
445 self._mock_user_create('1234', 'fake_prim_user')
446 self._mock_tenant_create('1234', 'fake_prim_tenant')
447 self.assertRaises(exceptions.InvalidConfiguration,
448 iso_creds.get_primary_creds)
449
450 @patch('tempest.common.rest_client.RestClient')
451 def test_subnet_without_network(self, MockRestClient):
452 net_dict = {
453 'network': False,
454 'router': False,
455 'subnet': True,
456 'dhcp': False,
457 }
458 iso_creds = isolated_creds.IsolatedCreds('test class',
459 password='fake_password',
460 network_resources=net_dict)
461 self._mock_user_create('1234', 'fake_prim_user')
462 self._mock_tenant_create('1234', 'fake_prim_tenant')
463 self.assertRaises(exceptions.InvalidConfiguration,
464 iso_creds.get_primary_creds)
465
466 @patch('tempest.common.rest_client.RestClient')
467 def test_dhcp_without_subnet(self, MockRestClient):
468 net_dict = {
469 'network': False,
470 'router': False,
471 'subnet': False,
472 'dhcp': True,
473 }
474 iso_creds = isolated_creds.IsolatedCreds('test class',
475 password='fake_password',
476 network_resources=net_dict)
477 self._mock_user_create('1234', 'fake_prim_user')
478 self._mock_tenant_create('1234', 'fake_prim_tenant')
479 self.assertRaises(exceptions.InvalidConfiguration,
480 iso_creds.get_primary_creds)