blob: 98a896f9c8a1980c0c748de34398516ce2ea37d7 [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 Frittolifc315902014-03-20 09:21:44 +0000124 primary_creds = iso_creds.get_primary_creds(old_style=False)
125 self.assertEqual(primary_creds.username, 'fake_prim_user')
126 self.assertEqual(primary_creds.tenant_name, 'fake_prim_tenant')
Matthew Treinishcb058062014-03-13 18:27:07 -0400127 # Verify helper methods
128 tenant = iso_creds.get_primary_tenant()
129 user = iso_creds.get_primary_user()
130 self.assertEqual(tenant['id'], '1234')
131 self.assertEqual(user['id'], '1234')
132
133 @patch('tempest.common.rest_client.RestClient')
134 def test_admin_creds(self, MockRestClient):
135 cfg.CONF.set_default('neutron', False, 'service_available')
136 iso_creds = isolated_creds.IsolatedCreds('test class',
137 password='fake_password')
138 self._mock_user_create('1234', 'fake_admin_user')
139 self._mock_tenant_create('1234', 'fake_admin_tenant')
140 self.useFixture(mockpatch.PatchObject(
141 json_iden_client.IdentityClientJSON,
142 'list_roles',
143 return_value=({'status': 200},
144 [{'id': '1234', 'name': 'admin'}])))
145
146 user_mock = patch.object(json_iden_client.IdentityClientJSON,
147 'assign_user_role')
148 user_mock.start()
149 self.addCleanup(user_mock.stop)
150 with patch.object(json_iden_client.IdentityClientJSON,
151 'assign_user_role') as user_mock:
Andrea Frittoli422fbdf2014-03-20 10:05:18 +0000152 admin_creds = iso_creds.get_admin_creds()
Matthew Treinishcb058062014-03-13 18:27:07 -0400153 user_mock.assert_called_once_with('1234', '1234', '1234')
Andrea Frittolifc315902014-03-20 09:21:44 +0000154 self.assertEqual(admin_creds.username, 'fake_admin_user')
155 self.assertEqual(admin_creds.tenant_name, 'fake_admin_tenant')
Matthew Treinishcb058062014-03-13 18:27:07 -0400156 # Verify helper methods
157 tenant = iso_creds.get_admin_tenant()
158 user = iso_creds.get_admin_user()
159 self.assertEqual(tenant['id'], '1234')
160 self.assertEqual(user['id'], '1234')
161
162 @patch('tempest.common.rest_client.RestClient')
163 def test_all_cred_cleanup(self, MockRestClient):
164 cfg.CONF.set_default('neutron', False, 'service_available')
165 iso_creds = isolated_creds.IsolatedCreds('test class',
166 password='fake_password')
167 tenant_fix = self._mock_tenant_create('1234', 'fake_prim_tenant')
168 user_fix = self._mock_user_create('1234', 'fake_prim_user')
Andrea Frittolifc315902014-03-20 09:21:44 +0000169 iso_creds.get_primary_creds(old_style=False)
Matthew Treinishcb058062014-03-13 18:27:07 -0400170 tenant_fix.cleanUp()
171 user_fix.cleanUp()
172 tenant_fix = self._mock_tenant_create('12345', 'fake_alt_tenant')
173 user_fix = self._mock_user_create('12345', 'fake_alt_user')
Andrea Frittolifc315902014-03-20 09:21:44 +0000174 iso_creds.get_alt_creds(old_style=False)
Matthew Treinishcb058062014-03-13 18:27:07 -0400175 tenant_fix.cleanUp()
176 user_fix.cleanUp()
177 tenant_fix = self._mock_tenant_create('123456', 'fake_admin_tenant')
178 user_fix = self._mock_user_create('123456', 'fake_admin_user')
179 self.useFixture(mockpatch.PatchObject(
180 json_iden_client.IdentityClientJSON,
181 'list_roles',
182 return_value=({'status': 200},
183 [{'id': '123456', 'name': 'admin'}])))
184 with patch.object(json_iden_client.IdentityClientJSON,
185 'assign_user_role'):
Andrea Frittoli422fbdf2014-03-20 10:05:18 +0000186 iso_creds.get_admin_creds()
Matthew Treinishcb058062014-03-13 18:27:07 -0400187 user_mock = self.patch(
188 'tempest.services.identity.json.identity_client.'
189 'IdentityClientJSON.delete_user')
190 tenant_mock = self.patch(
191 'tempest.services.identity.json.identity_client.'
192 'IdentityClientJSON.delete_tenant')
193 iso_creds.clear_isolated_creds()
194 # Verify user delete calls
195 calls = user_mock.mock_calls
196 self.assertEqual(len(calls), 3)
197 args = map(lambda x: x[1][0], calls)
198 self.assertIn('1234', args)
199 self.assertIn('12345', args)
200 self.assertIn('123456', args)
201 # Verify tenant delete calls
202 calls = tenant_mock.mock_calls
203 self.assertEqual(len(calls), 3)
204 args = map(lambda x: x[1][0], calls)
205 self.assertIn('1234', args)
206 self.assertIn('12345', args)
207 self.assertIn('123456', args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400208
209 @patch('tempest.common.rest_client.RestClient')
210 def test_alt_creds(self, MockRestClient):
211 cfg.CONF.set_default('neutron', False, 'service_available')
212 iso_creds = isolated_creds.IsolatedCreds('test class',
213 password='fake_password')
214 self._mock_user_create('1234', 'fake_alt_user')
215 self._mock_tenant_create('1234', 'fake_alt_tenant')
Andrea Frittolifc315902014-03-20 09:21:44 +0000216 alt_creds = iso_creds.get_alt_creds(old_style=False)
217 self.assertEqual(alt_creds.username, 'fake_alt_user')
218 self.assertEqual(alt_creds.tenant_name, 'fake_alt_tenant')
Matthew Treinishe6723262014-03-14 13:16:52 -0400219 # Verify helper methods
220 tenant = iso_creds.get_alt_tenant()
221 user = iso_creds.get_alt_user()
222 self.assertEqual(tenant['id'], '1234')
223 self.assertEqual(user['id'], '1234')
224
225 @patch('tempest.common.rest_client.RestClient')
226 def test_network_creation(self, MockRestClient):
227 iso_creds = isolated_creds.IsolatedCreds('test class',
228 password='fake_password')
229 self._mock_user_create('1234', 'fake_prim_user')
230 self._mock_tenant_create('1234', 'fake_prim_tenant')
231 self._mock_network_create(iso_creds, '1234', 'fake_net')
232 self._mock_subnet_create(iso_creds, '1234', 'fake_subnet')
233 self._mock_router_create('1234', 'fake_router')
234 router_interface_mock = self.patch(
235 'tempest.services.network.json.network_client.NetworkClientJSON.'
236 'add_router_interface_with_subnet_id')
Andrea Frittolifc315902014-03-20 09:21:44 +0000237 iso_creds.get_primary_creds(old_style=False)
Matthew Treinishe6723262014-03-14 13:16:52 -0400238 router_interface_mock.called_once_with('1234', '1234')
239 network = iso_creds.get_primary_network()
240 subnet = iso_creds.get_primary_subnet()
241 router = iso_creds.get_primary_router()
242 self.assertEqual(network['id'], '1234')
243 self.assertEqual(network['name'], 'fake_net')
244 self.assertEqual(subnet['id'], '1234')
245 self.assertEqual(subnet['name'], 'fake_subnet')
246 self.assertEqual(router['id'], '1234')
247 self.assertEqual(router['name'], 'fake_router')
248
249 @patch('tempest.common.rest_client.RestClient')
250 def test_network_cleanup(self, MockRestClient):
251 iso_creds = isolated_creds.IsolatedCreds('test class',
252 password='fake_password')
253 # Create primary tenant and network
254 user_fix = self._mock_user_create('1234', 'fake_prim_user')
255 tenant_fix = self._mock_tenant_create('1234', 'fake_prim_tenant')
256 net_fix = self._mock_network_create(iso_creds, '1234', 'fake_net')
257 subnet_fix = self._mock_subnet_create(iso_creds, '1234', 'fake_subnet')
258 router_fix = self._mock_router_create('1234', 'fake_router')
259 router_interface_mock = self.patch(
260 'tempest.services.network.json.network_client.NetworkClientJSON.'
261 'add_router_interface_with_subnet_id')
Andrea Frittolifc315902014-03-20 09:21:44 +0000262 iso_creds.get_primary_creds(old_style=False)
Matthew Treinishe6723262014-03-14 13:16:52 -0400263 router_interface_mock.called_once_with('1234', '1234')
264 router_interface_mock.reset_mock()
265 tenant_fix.cleanUp()
266 user_fix.cleanUp()
267 net_fix.cleanUp()
268 subnet_fix.cleanUp()
269 router_fix.cleanUp()
270 # Create alternate tenant and network
271 user_fix = self._mock_user_create('12345', 'fake_alt_user')
272 tenant_fix = self._mock_tenant_create('12345', 'fake_alt_tenant')
273 net_fix = self._mock_network_create(iso_creds, '12345', 'fake_alt_net')
274 subnet_fix = self._mock_subnet_create(iso_creds, '12345',
275 'fake_alt_subnet')
276 router_fix = self._mock_router_create('12345', 'fake_alt_router')
Andrea Frittolifc315902014-03-20 09:21:44 +0000277 iso_creds.get_alt_creds(old_style=False)
Matthew Treinishe6723262014-03-14 13:16:52 -0400278 router_interface_mock.called_once_with('12345', '12345')
279 router_interface_mock.reset_mock()
280 tenant_fix.cleanUp()
281 user_fix.cleanUp()
282 net_fix.cleanUp()
283 subnet_fix.cleanUp()
284 router_fix.cleanUp()
285 # Create admin tenant and networks
286 user_fix = self._mock_user_create('123456', 'fake_admin_user')
287 tenant_fix = self._mock_tenant_create('123456', 'fake_admin_tenant')
288 net_fix = self._mock_network_create(iso_creds, '123456',
289 'fake_admin_net')
290 subnet_fix = self._mock_subnet_create(iso_creds, '123456',
291 'fake_admin_subnet')
292 router_fix = self._mock_router_create('123456', 'fake_admin_router')
293 self.useFixture(mockpatch.PatchObject(
294 json_iden_client.IdentityClientJSON,
295 'list_roles',
296 return_value=({'status': 200},
297 [{'id': '123456', 'name': 'admin'}])))
298 with patch.object(json_iden_client.IdentityClientJSON,
299 'assign_user_role'):
Andrea Frittoli422fbdf2014-03-20 10:05:18 +0000300 iso_creds.get_admin_creds()
Matthew Treinishe6723262014-03-14 13:16:52 -0400301 self.patch('tempest.services.identity.json.identity_client.'
302 'IdentityClientJSON.delete_user')
303 self.patch('tempest.services.identity.json.identity_client.'
304 'IdentityClientJSON.delete_tenant')
305 net = patch.object(iso_creds.network_admin_client,
306 'delete_network')
307 net_mock = net.start()
308 subnet = patch.object(iso_creds.network_admin_client,
309 'delete_subnet')
310 subnet_mock = subnet.start()
311 router = patch.object(iso_creds.network_admin_client,
312 'delete_router')
313 router_mock = router.start()
314 remove_router_interface_mock = self.patch(
315 'tempest.services.network.json.network_client.NetworkClientJSON.'
316 'remove_router_interface_with_subnet_id')
317 port_list_mock = patch.object(iso_creds.network_admin_client,
318 'list_ports', return_value=(
319 {'status': 200}, {'ports': []}))
320 port_list_mock.start()
321 iso_creds.clear_isolated_creds()
322 # Verify remove router interface calls
323 calls = remove_router_interface_mock.mock_calls
324 self.assertEqual(len(calls), 3)
325 args = map(lambda x: x[1], calls)
326 self.assertIn(('1234', '1234'), args)
327 self.assertIn(('12345', '12345'), args)
328 self.assertIn(('123456', '123456'), args)
329 # Verify network delete calls
330 calls = net_mock.mock_calls
331 self.assertEqual(len(calls), 3)
332 args = map(lambda x: x[1][0], calls)
333 self.assertIn('1234', args)
334 self.assertIn('12345', args)
335 self.assertIn('123456', args)
336 # Verify subnet delete calls
337 calls = subnet_mock.mock_calls
338 self.assertEqual(len(calls), 3)
339 args = map(lambda x: x[1][0], calls)
340 self.assertIn('1234', args)
341 self.assertIn('12345', args)
342 self.assertIn('123456', args)
343 # Verify router delete calls
344 calls = router_mock.mock_calls
345 self.assertEqual(len(calls), 3)
346 args = map(lambda x: x[1][0], calls)
347 self.assertIn('1234', args)
348 self.assertIn('12345', args)
349 self.assertIn('123456', args)
Matthew Treinish23433a02014-03-17 16:43:50 -0400350
351 @patch('tempest.common.rest_client.RestClient')
352 def test_network_alt_creation(self, MockRestClient):
353 iso_creds = isolated_creds.IsolatedCreds('test class',
354 password='fake_password')
355 self._mock_user_create('1234', 'fake_alt_user')
356 self._mock_tenant_create('1234', 'fake_alt_tenant')
357 self._mock_network_create(iso_creds, '1234', 'fake_alt_net')
358 self._mock_subnet_create(iso_creds, '1234', 'fake_alt_subnet')
359 self._mock_router_create('1234', 'fake_alt_router')
360 router_interface_mock = self.patch(
361 'tempest.services.network.json.network_client.NetworkClientJSON.'
362 'add_router_interface_with_subnet_id')
Andrea Frittoli422fbdf2014-03-20 10:05:18 +0000363 iso_creds.get_alt_creds()
Matthew Treinish23433a02014-03-17 16:43:50 -0400364 router_interface_mock.called_once_with('1234', '1234')
365 network = iso_creds.get_alt_network()
366 subnet = iso_creds.get_alt_subnet()
367 router = iso_creds.get_alt_router()
368 self.assertEqual(network['id'], '1234')
369 self.assertEqual(network['name'], 'fake_alt_net')
370 self.assertEqual(subnet['id'], '1234')
371 self.assertEqual(subnet['name'], 'fake_alt_subnet')
372 self.assertEqual(router['id'], '1234')
373 self.assertEqual(router['name'], 'fake_alt_router')
374
375 @patch('tempest.common.rest_client.RestClient')
376 def test_network_admin_creation(self, MockRestClient):
377 iso_creds = isolated_creds.IsolatedCreds('test class',
378 password='fake_password')
379 self._mock_user_create('1234', 'fake_admin_user')
380 self._mock_tenant_create('1234', 'fake_admin_tenant')
381 self._mock_network_create(iso_creds, '1234', 'fake_admin_net')
382 self._mock_subnet_create(iso_creds, '1234', 'fake_admin_subnet')
383 self._mock_router_create('1234', 'fake_admin_router')
384 router_interface_mock = self.patch(
385 'tempest.services.network.json.network_client.NetworkClientJSON.'
386 'add_router_interface_with_subnet_id')
387 self.useFixture(mockpatch.PatchObject(
388 json_iden_client.IdentityClientJSON,
389 'list_roles',
390 return_value=({'status': 200},
391 [{'id': '123456', 'name': 'admin'}])))
392 with patch.object(json_iden_client.IdentityClientJSON,
393 'assign_user_role'):
Andrea Frittoli422fbdf2014-03-20 10:05:18 +0000394 iso_creds.get_admin_creds()
Matthew Treinish23433a02014-03-17 16:43:50 -0400395 router_interface_mock.called_once_with('1234', '1234')
396 network = iso_creds.get_admin_network()
397 subnet = iso_creds.get_admin_subnet()
398 router = iso_creds.get_admin_router()
399 self.assertEqual(network['id'], '1234')
400 self.assertEqual(network['name'], 'fake_admin_net')
401 self.assertEqual(subnet['id'], '1234')
402 self.assertEqual(subnet['name'], 'fake_admin_subnet')
403 self.assertEqual(router['id'], '1234')
404 self.assertEqual(router['name'], 'fake_admin_router')
405
406 @patch('tempest.common.rest_client.RestClient')
407 def test_no_network_resources(self, MockRestClient):
408 net_dict = {
409 'network': False,
410 'router': False,
411 'subnet': False,
412 'dhcp': False,
413 }
414 iso_creds = isolated_creds.IsolatedCreds('test class',
415 password='fake_password',
416 network_resources=net_dict)
417 self._mock_user_create('1234', 'fake_prim_user')
418 self._mock_tenant_create('1234', 'fake_prim_tenant')
419 net = patch.object(iso_creds.network_admin_client,
420 'delete_network')
421 net_mock = net.start()
422 subnet = patch.object(iso_creds.network_admin_client,
423 'delete_subnet')
424 subnet_mock = subnet.start()
425 router = patch.object(iso_creds.network_admin_client,
426 'delete_router')
427 router_mock = router.start()
428
Andrea Frittoli422fbdf2014-03-20 10:05:18 +0000429 iso_creds.get_primary_creds()
Matthew Treinish23433a02014-03-17 16:43:50 -0400430 self.assertEqual(net_mock.mock_calls, [])
431 self.assertEqual(subnet_mock.mock_calls, [])
432 self.assertEqual(router_mock.mock_calls, [])
433 network = iso_creds.get_primary_network()
434 subnet = iso_creds.get_primary_subnet()
435 router = iso_creds.get_primary_router()
436 self.assertIsNone(network)
437 self.assertIsNone(subnet)
438 self.assertIsNone(router)
439
440 @patch('tempest.common.rest_client.RestClient')
441 def test_router_without_network(self, MockRestClient):
442 net_dict = {
443 'network': False,
444 'router': True,
445 'subnet': False,
446 'dhcp': False,
447 }
448 iso_creds = isolated_creds.IsolatedCreds('test class',
449 password='fake_password',
450 network_resources=net_dict)
451 self._mock_user_create('1234', 'fake_prim_user')
452 self._mock_tenant_create('1234', 'fake_prim_tenant')
453 self.assertRaises(exceptions.InvalidConfiguration,
454 iso_creds.get_primary_creds)
455
456 @patch('tempest.common.rest_client.RestClient')
457 def test_subnet_without_network(self, MockRestClient):
458 net_dict = {
459 'network': False,
460 'router': False,
461 'subnet': True,
462 'dhcp': False,
463 }
464 iso_creds = isolated_creds.IsolatedCreds('test class',
465 password='fake_password',
466 network_resources=net_dict)
467 self._mock_user_create('1234', 'fake_prim_user')
468 self._mock_tenant_create('1234', 'fake_prim_tenant')
469 self.assertRaises(exceptions.InvalidConfiguration,
470 iso_creds.get_primary_creds)
471
472 @patch('tempest.common.rest_client.RestClient')
473 def test_dhcp_without_subnet(self, MockRestClient):
474 net_dict = {
475 'network': False,
476 'router': False,
477 'subnet': False,
478 'dhcp': True,
479 }
480 iso_creds = isolated_creds.IsolatedCreds('test class',
481 password='fake_password',
482 network_resources=net_dict)
483 self._mock_user_create('1234', 'fake_prim_user')
484 self._mock_tenant_create('1234', 'fake_prim_tenant')
485 self.assertRaises(exceptions.InvalidConfiguration,
486 iso_creds.get_primary_creds)