blob: 5f5726845806778ef82bc2ff22759998682984a5 [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
Matthew Treinish5c660ab2014-05-18 21:14:36 -040015import mock
Doug Hellmann583ce2c2015-03-11 14:55:46 +000016from oslo_config import cfg
17from oslotest import mockpatch
andreafb8a52282015-03-19 22:21:54 +000018from tempest_lib.services.identity.v2 import token_client as json_token_client
Matthew Treinishcb058062014-03-13 18:27:07 -040019
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -070020from tempest.common import dynamic_creds
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +000021from tempest.common import service_client
Matthew Treinishcb058062014-03-13 18:27:07 -040022from tempest import config
Matthew Treinish23433a02014-03-17 16:43:50 -040023from tempest import exceptions
Jamie Lennoxc429e6a2015-02-24 10:42:42 +110024from tempest.services.identity.v2.json import identity_client as \
25 json_iden_client
Matthew Treinishcb058062014-03-13 18:27:07 -040026from tempest.services.network.json import network_client as json_network_client
Matthew Treinishcb058062014-03-13 18:27:07 -040027from tempest.tests import base
28from tempest.tests import fake_config
Andrea Frittoli2095d242014-03-20 08:36:23 +000029from tempest.tests import fake_http
30from tempest.tests import fake_identity
Matthew Treinishcb058062014-03-13 18:27:07 -040031
32
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -070033class TestDynamicCredentialProvider(base.TestCase):
Matthew Treinishcb058062014-03-13 18:27:07 -040034
35 def setUp(self):
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -070036 super(TestDynamicCredentialProvider, self).setUp()
Matthew Treinishcb058062014-03-13 18:27:07 -040037 self.useFixture(fake_config.ConfigFixture())
38 self.stubs.Set(config, 'TempestConfigPrivate', fake_config.FakePrivate)
Andrea Frittoli2095d242014-03-20 08:36:23 +000039 self.fake_http = fake_http.fake_httplib2(return_type=200)
Ken'ichi Ohmichi96e72792015-09-09 04:05:41 +000040 self.stubs.Set(json_token_client.TokenClient, 'raw_request',
Andrea Frittoli2095d242014-03-20 08:36:23 +000041 fake_identity._fake_v2_response)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +040042 cfg.CONF.set_default('operator_role', 'FakeRole',
43 group='object-storage')
Andrea Frittoli32d74992015-03-06 17:01:07 +000044 self._mock_list_ec2_credentials('fake_user_id', 'fake_tenant_id')
Matthew Treinishcb058062014-03-13 18:27:07 -040045
46 def test_tempest_client(self):
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -070047 creds = dynamic_creds.DynamicCredentialProvider(name='test class')
48 self.assertTrue(isinstance(creds.identity_admin_client,
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +000049 json_iden_client.IdentityClient))
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -070050 self.assertTrue(isinstance(creds.network_admin_client,
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +000051 json_network_client.NetworkClient))
Matthew Treinishcb058062014-03-13 18:27:07 -040052
Matthew Treinishcb058062014-03-13 18:27:07 -040053 def _mock_user_create(self, id, name):
54 user_fix = self.useFixture(mockpatch.PatchObject(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +000055 json_iden_client.IdentityClient,
Matthew Treinishcb058062014-03-13 18:27:07 -040056 'create_user',
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +000057 return_value=(service_client.ResponseBody
Anusha Ramineni0cfb4612015-08-24 08:49:10 +053058 (200, {'user': {'id': id, 'name': name}}))))
Matthew Treinishcb058062014-03-13 18:27:07 -040059 return user_fix
60
61 def _mock_tenant_create(self, id, name):
62 tenant_fix = self.useFixture(mockpatch.PatchObject(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +000063 json_iden_client.IdentityClient,
Matthew Treinishcb058062014-03-13 18:27:07 -040064 'create_tenant',
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +000065 return_value=(service_client.ResponseBody
Anusha Ramineni0cfb4612015-08-24 08:49:10 +053066 (200, {'tenant': {'id': id, 'name': name}}))))
Matthew Treinishcb058062014-03-13 18:27:07 -040067 return tenant_fix
68
Andrey Pavlovaf1fb702014-05-29 17:08:10 +040069 def _mock_list_roles(self, id, name):
70 roles_fix = self.useFixture(mockpatch.PatchObject(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +000071 json_iden_client.IdentityClient,
Andrey Pavlovaf1fb702014-05-29 17:08:10 +040072 'list_roles',
Anusha Ramineni0cfb4612015-08-24 08:49:10 +053073 return_value=(service_client.ResponseBody
David Kranzb7afa922014-12-30 10:56:26 -050074 (200,
Anusha Ramineni0cfb4612015-08-24 08:49:10 +053075 {'roles': [{'id': id, 'name': name},
76 {'id': '1', 'name': 'FakeRole'},
77 {'id': '2', 'name': 'Member'}]}))))
Andrey Pavlovaf1fb702014-05-29 17:08:10 +040078 return roles_fix
79
Matthew Treinish976e8df2014-12-19 14:21:54 -050080 def _mock_list_2_roles(self):
81 roles_fix = self.useFixture(mockpatch.PatchObject(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +000082 json_iden_client.IdentityClient,
Matthew Treinish976e8df2014-12-19 14:21:54 -050083 'list_roles',
Anusha Ramineni0cfb4612015-08-24 08:49:10 +053084 return_value=(service_client.ResponseBody
Matthew Treinish976e8df2014-12-19 14:21:54 -050085 (200,
Anusha Ramineni0cfb4612015-08-24 08:49:10 +053086 {'roles': [{'id': '1234', 'name': 'role1'},
Matthew Treinish976e8df2014-12-19 14:21:54 -050087 {'id': '1', 'name': 'FakeRole'},
Anusha Ramineni0cfb4612015-08-24 08:49:10 +053088 {'id': '12345', 'name': 'role2'}]}))))
Matthew Treinish976e8df2014-12-19 14:21:54 -050089 return roles_fix
90
Andrey Pavlovaf1fb702014-05-29 17:08:10 +040091 def _mock_assign_user_role(self):
92 tenant_fix = self.useFixture(mockpatch.PatchObject(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +000093 json_iden_client.IdentityClient,
Andrey Pavlovaf1fb702014-05-29 17:08:10 +040094 'assign_user_role',
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +000095 return_value=(service_client.ResponseBody
David Kranzb7afa922014-12-30 10:56:26 -050096 (200, {}))))
Andrey Pavlovaf1fb702014-05-29 17:08:10 +040097 return tenant_fix
98
99 def _mock_list_role(self):
100 roles_fix = self.useFixture(mockpatch.PatchObject(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000101 json_iden_client.IdentityClient,
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400102 'list_roles',
Anusha Ramineni0cfb4612015-08-24 08:49:10 +0530103 return_value=(service_client.ResponseBody
104 (200, {'roles': [{'id': '1',
105 'name': 'FakeRole'}]}))))
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400106 return roles_fix
107
Andrea Frittoli32d74992015-03-06 17:01:07 +0000108 def _mock_list_ec2_credentials(self, user_id, tenant_id):
109 ec2_creds_fix = self.useFixture(mockpatch.PatchObject(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000110 json_iden_client.IdentityClient,
Andrea Frittoli32d74992015-03-06 17:01:07 +0000111 'list_user_ec2_credentials',
Anusha Ramineni0cfb4612015-08-24 08:49:10 +0530112 return_value=(service_client.ResponseBody
113 (200, {'credentials': [{
114 'access': 'fake_access',
115 'secret': 'fake_secret',
116 'tenant_id': tenant_id,
117 'user_id': user_id,
118 'trust_id': None}]}))))
Andrea Frittoli32d74992015-03-06 17:01:07 +0000119 return ec2_creds_fix
120
Matthew Treinishe6723262014-03-14 13:16:52 -0400121 def _mock_network_create(self, iso_creds, id, name):
122 net_fix = self.useFixture(mockpatch.PatchObject(
John Warren94d8faf2015-09-15 12:22:24 -0400123 iso_creds.networks_admin_client,
Matthew Treinishe6723262014-03-14 13:16:52 -0400124 'create_network',
David Kranz34e88122014-12-11 15:24:05 -0500125 return_value={'network': {'id': id, 'name': name}}))
Matthew Treinishe6723262014-03-14 13:16:52 -0400126 return net_fix
127
128 def _mock_subnet_create(self, iso_creds, id, name):
129 subnet_fix = self.useFixture(mockpatch.PatchObject(
130 iso_creds.network_admin_client,
131 'create_subnet',
David Kranz34e88122014-12-11 15:24:05 -0500132 return_value={'subnet': {'id': id, 'name': name}}))
Matthew Treinishe6723262014-03-14 13:16:52 -0400133 return subnet_fix
134
135 def _mock_router_create(self, id, name):
136 router_fix = self.useFixture(mockpatch.PatchObject(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000137 json_network_client.NetworkClient,
Matthew Treinishe6723262014-03-14 13:16:52 -0400138 'create_router',
David Kranz34e88122014-12-11 15:24:05 -0500139 return_value={'router': {'id': id, 'name': name}}))
Matthew Treinishe6723262014-03-14 13:16:52 -0400140 return router_fix
141
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000142 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinishcb058062014-03-13 18:27:07 -0400143 def test_primary_creds(self, MockRestClient):
144 cfg.CONF.set_default('neutron', False, 'service_available')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700145 creds = dynamic_creds.DynamicCredentialProvider(name='test class')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400146 self._mock_assign_user_role()
147 self._mock_list_role()
Matthew Treinishcb058062014-03-13 18:27:07 -0400148 self._mock_tenant_create('1234', 'fake_prim_tenant')
149 self._mock_user_create('1234', 'fake_prim_user')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700150 primary_creds = creds.get_primary_creds()
Andrea Frittolifc315902014-03-20 09:21:44 +0000151 self.assertEqual(primary_creds.username, 'fake_prim_user')
152 self.assertEqual(primary_creds.tenant_name, 'fake_prim_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000153 # Verify IDs
154 self.assertEqual(primary_creds.tenant_id, '1234')
155 self.assertEqual(primary_creds.user_id, '1234')
Matthew Treinishcb058062014-03-13 18:27:07 -0400156
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000157 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinishcb058062014-03-13 18:27:07 -0400158 def test_admin_creds(self, MockRestClient):
159 cfg.CONF.set_default('neutron', False, 'service_available')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700160 creds = dynamic_creds.DynamicCredentialProvider(name='test class')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400161 self._mock_list_roles('1234', 'admin')
Matthew Treinishcb058062014-03-13 18:27:07 -0400162 self._mock_user_create('1234', 'fake_admin_user')
163 self._mock_tenant_create('1234', 'fake_admin_tenant')
Matthew Treinishcb058062014-03-13 18:27:07 -0400164
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000165 user_mock = mock.patch.object(json_iden_client.IdentityClient,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400166 'assign_user_role')
Matthew Treinishcb058062014-03-13 18:27:07 -0400167 user_mock.start()
168 self.addCleanup(user_mock.stop)
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000169 with mock.patch.object(json_iden_client.IdentityClient,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400170 'assign_user_role') as user_mock:
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700171 admin_creds = creds.get_admin_creds()
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400172 user_mock.assert_has_calls([
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400173 mock.call('1234', '1234', '1234')])
Andrea Frittolifc315902014-03-20 09:21:44 +0000174 self.assertEqual(admin_creds.username, 'fake_admin_user')
175 self.assertEqual(admin_creds.tenant_name, 'fake_admin_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000176 # Verify IDs
177 self.assertEqual(admin_creds.tenant_id, '1234')
178 self.assertEqual(admin_creds.user_id, '1234')
Matthew Treinishcb058062014-03-13 18:27:07 -0400179
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000180 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish976e8df2014-12-19 14:21:54 -0500181 def test_role_creds(self, MockRestClient):
182 cfg.CONF.set_default('neutron', False, 'service_available')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700183 creds = dynamic_creds.DynamicCredentialProvider('v2', 'test class')
Matthew Treinish976e8df2014-12-19 14:21:54 -0500184 self._mock_list_2_roles()
185 self._mock_user_create('1234', 'fake_role_user')
186 self._mock_tenant_create('1234', 'fake_role_tenant')
187
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000188 user_mock = mock.patch.object(json_iden_client.IdentityClient,
Matthew Treinish976e8df2014-12-19 14:21:54 -0500189 'assign_user_role')
190 user_mock.start()
191 self.addCleanup(user_mock.stop)
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000192 with mock.patch.object(json_iden_client.IdentityClient,
Matthew Treinish976e8df2014-12-19 14:21:54 -0500193 'assign_user_role') as user_mock:
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700194 role_creds = creds.get_creds_by_roles(
195 roles=['role1', 'role2'])
Matthew Treinish976e8df2014-12-19 14:21:54 -0500196 calls = user_mock.mock_calls
197 # Assert that the role creation is called with the 2 specified roles
Matthew Treinish8f268292015-02-24 20:01:36 -0500198 self.assertEqual(len(calls), 2)
Matthew Treinish976e8df2014-12-19 14:21:54 -0500199 args = map(lambda x: x[1], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400200 args = list(args)
Matthew Treinish976e8df2014-12-19 14:21:54 -0500201 self.assertIn(('1234', '1234', '1234'), args)
202 self.assertIn(('1234', '1234', '12345'), args)
203 self.assertEqual(role_creds.username, 'fake_role_user')
204 self.assertEqual(role_creds.tenant_name, 'fake_role_tenant')
205 # Verify IDs
206 self.assertEqual(role_creds.tenant_id, '1234')
207 self.assertEqual(role_creds.user_id, '1234')
208
209 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinishcb058062014-03-13 18:27:07 -0400210 def test_all_cred_cleanup(self, MockRestClient):
211 cfg.CONF.set_default('neutron', False, 'service_available')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700212 creds = dynamic_creds.DynamicCredentialProvider(name='test class')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400213 self._mock_assign_user_role()
Matthew Treinishbe15b872015-06-29 14:29:30 -0400214 self._mock_list_role()
215 self._mock_tenant_create('1234', 'fake_prim_tenant')
216 self._mock_user_create('1234', 'fake_prim_user')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700217 creds.get_primary_creds()
Matthew Treinishbe15b872015-06-29 14:29:30 -0400218 self._mock_tenant_create('12345', 'fake_alt_tenant')
219 self._mock_user_create('12345', 'fake_alt_user')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700220 creds.get_alt_creds()
Matthew Treinishbe15b872015-06-29 14:29:30 -0400221 self._mock_tenant_create('123456', 'fake_admin_tenant')
222 self._mock_user_create('123456', 'fake_admin_user')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400223 self._mock_list_roles('123456', 'admin')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700224 creds.get_admin_creds()
Matthew Treinishcb058062014-03-13 18:27:07 -0400225 user_mock = self.patch(
Jamie Lennoxc429e6a2015-02-24 10:42:42 +1100226 'tempest.services.identity.v2.json.identity_client.'
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000227 'IdentityClient.delete_user')
Matthew Treinishcb058062014-03-13 18:27:07 -0400228 tenant_mock = self.patch(
Jamie Lennoxc429e6a2015-02-24 10:42:42 +1100229 'tempest.services.identity.v2.json.identity_client.'
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000230 'IdentityClient.delete_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700231 creds.clear_creds()
Matthew Treinishcb058062014-03-13 18:27:07 -0400232 # Verify user delete calls
233 calls = user_mock.mock_calls
234 self.assertEqual(len(calls), 3)
235 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400236 args = list(args)
Matthew Treinishcb058062014-03-13 18:27:07 -0400237 self.assertIn('1234', args)
238 self.assertIn('12345', args)
239 self.assertIn('123456', args)
240 # Verify tenant delete calls
241 calls = tenant_mock.mock_calls
242 self.assertEqual(len(calls), 3)
243 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400244 args = list(args)
Matthew Treinishcb058062014-03-13 18:27:07 -0400245 self.assertIn('1234', args)
246 self.assertIn('12345', args)
247 self.assertIn('123456', args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400248
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000249 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinishe6723262014-03-14 13:16:52 -0400250 def test_alt_creds(self, MockRestClient):
251 cfg.CONF.set_default('neutron', False, 'service_available')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700252 creds = dynamic_creds.DynamicCredentialProvider(name='test class')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400253 self._mock_assign_user_role()
254 self._mock_list_role()
Matthew Treinishe6723262014-03-14 13:16:52 -0400255 self._mock_user_create('1234', 'fake_alt_user')
256 self._mock_tenant_create('1234', 'fake_alt_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700257 alt_creds = creds.get_alt_creds()
Andrea Frittolifc315902014-03-20 09:21:44 +0000258 self.assertEqual(alt_creds.username, 'fake_alt_user')
259 self.assertEqual(alt_creds.tenant_name, 'fake_alt_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000260 # Verify IDs
261 self.assertEqual(alt_creds.tenant_id, '1234')
262 self.assertEqual(alt_creds.user_id, '1234')
Matthew Treinishe6723262014-03-14 13:16:52 -0400263
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000264 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish2219d382015-04-24 10:33:04 -0400265 def test_no_network_creation_with_config_set(self, MockRestClient):
266 cfg.CONF.set_default('create_isolated_networks', False, group='auth')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700267 creds = dynamic_creds.DynamicCredentialProvider(name='test class')
Matthew Treinish2219d382015-04-24 10:33:04 -0400268 self._mock_assign_user_role()
269 self._mock_list_role()
270 self._mock_user_create('1234', 'fake_prim_user')
271 self._mock_tenant_create('1234', 'fake_prim_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700272 net = mock.patch.object(creds.networks_admin_client,
Matthew Treinish2219d382015-04-24 10:33:04 -0400273 'delete_network')
274 net_mock = net.start()
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700275 subnet = mock.patch.object(creds.network_admin_client,
Matthew Treinish2219d382015-04-24 10:33:04 -0400276 'delete_subnet')
277 subnet_mock = subnet.start()
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700278 router = mock.patch.object(creds.network_admin_client,
Matthew Treinish2219d382015-04-24 10:33:04 -0400279 'delete_router')
280 router_mock = router.start()
281
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700282 primary_creds = creds.get_primary_creds()
Matthew Treinish2219d382015-04-24 10:33:04 -0400283 self.assertEqual(net_mock.mock_calls, [])
284 self.assertEqual(subnet_mock.mock_calls, [])
285 self.assertEqual(router_mock.mock_calls, [])
286 network = primary_creds.network
287 subnet = primary_creds.subnet
288 router = primary_creds.router
289 self.assertIsNone(network)
290 self.assertIsNone(subnet)
291 self.assertIsNone(router)
292
293 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinishe6723262014-03-14 13:16:52 -0400294 def test_network_creation(self, MockRestClient):
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700295 creds = dynamic_creds.DynamicCredentialProvider(name='test class')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400296 self._mock_assign_user_role()
297 self._mock_list_role()
Matthew Treinishe6723262014-03-14 13:16:52 -0400298 self._mock_user_create('1234', 'fake_prim_user')
299 self._mock_tenant_create('1234', 'fake_prim_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700300 self._mock_network_create(creds, '1234', 'fake_net')
301 self._mock_subnet_create(creds, '1234', 'fake_subnet')
Matthew Treinishe6723262014-03-14 13:16:52 -0400302 self._mock_router_create('1234', 'fake_router')
303 router_interface_mock = self.patch(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000304 'tempest.services.network.json.network_client.NetworkClient.'
Matthew Treinishe6723262014-03-14 13:16:52 -0400305 'add_router_interface_with_subnet_id')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700306 primary_creds = creds.get_primary_creds()
Matthew Treinishe6723262014-03-14 13:16:52 -0400307 router_interface_mock.called_once_with('1234', '1234')
Andrea Frittoli (andreaf)9540dfd2015-03-25 17:06:50 -0400308 network = primary_creds.network
309 subnet = primary_creds.subnet
310 router = primary_creds.router
Matthew Treinishe6723262014-03-14 13:16:52 -0400311 self.assertEqual(network['id'], '1234')
312 self.assertEqual(network['name'], 'fake_net')
313 self.assertEqual(subnet['id'], '1234')
314 self.assertEqual(subnet['name'], 'fake_subnet')
315 self.assertEqual(router['id'], '1234')
316 self.assertEqual(router['name'], 'fake_router')
317
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000318 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinishe6723262014-03-14 13:16:52 -0400319 def test_network_cleanup(self, MockRestClient):
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100320 def side_effect(**args):
David Kranz34e88122014-12-11 15:24:05 -0500321 return {"security_groups": [{"tenant_id": args['tenant_id'],
322 "name": args['name'],
323 "description": args['name'],
324 "security_group_rules": [],
325 "id": "sg-%s" % args['tenant_id']}]}
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700326 creds = dynamic_creds.DynamicCredentialProvider(name='test class')
Matthew Treinishe6723262014-03-14 13:16:52 -0400327 # Create primary tenant and network
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400328 self._mock_assign_user_role()
Matthew Treinishbe15b872015-06-29 14:29:30 -0400329 self._mock_list_role()
330 self._mock_user_create('1234', 'fake_prim_user')
331 self._mock_tenant_create('1234', 'fake_prim_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700332 self._mock_network_create(creds, '1234', 'fake_net')
333 self._mock_subnet_create(creds, '1234', 'fake_subnet')
Matthew Treinishbe15b872015-06-29 14:29:30 -0400334 self._mock_router_create('1234', 'fake_router')
Matthew Treinishe6723262014-03-14 13:16:52 -0400335 router_interface_mock = self.patch(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000336 'tempest.services.network.json.network_client.NetworkClient.'
Matthew Treinishe6723262014-03-14 13:16:52 -0400337 'add_router_interface_with_subnet_id')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700338 creds.get_primary_creds()
Matthew Treinishe6723262014-03-14 13:16:52 -0400339 router_interface_mock.called_once_with('1234', '1234')
340 router_interface_mock.reset_mock()
Matthew Treinishe6723262014-03-14 13:16:52 -0400341 # Create alternate tenant and network
Matthew Treinishbe15b872015-06-29 14:29:30 -0400342 self._mock_user_create('12345', 'fake_alt_user')
343 self._mock_tenant_create('12345', 'fake_alt_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700344 self._mock_network_create(creds, '12345', 'fake_alt_net')
345 self._mock_subnet_create(creds, '12345', 'fake_alt_subnet')
Matthew Treinishbe15b872015-06-29 14:29:30 -0400346 self._mock_router_create('12345', 'fake_alt_router')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700347 creds.get_alt_creds()
Matthew Treinishe6723262014-03-14 13:16:52 -0400348 router_interface_mock.called_once_with('12345', '12345')
349 router_interface_mock.reset_mock()
Matthew Treinishe6723262014-03-14 13:16:52 -0400350 # Create admin tenant and networks
Matthew Treinishbe15b872015-06-29 14:29:30 -0400351 self._mock_user_create('123456', 'fake_admin_user')
352 self._mock_tenant_create('123456', 'fake_admin_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700353 self._mock_network_create(creds, '123456', 'fake_admin_net')
354 self._mock_subnet_create(creds, '123456', 'fake_admin_subnet')
Matthew Treinishbe15b872015-06-29 14:29:30 -0400355 self._mock_router_create('123456', 'fake_admin_router')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400356 self._mock_list_roles('123456', 'admin')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700357 creds.get_admin_creds()
Jamie Lennoxc429e6a2015-02-24 10:42:42 +1100358 self.patch('tempest.services.identity.v2.json.identity_client.'
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000359 'IdentityClient.delete_user')
Jamie Lennoxc429e6a2015-02-24 10:42:42 +1100360 self.patch('tempest.services.identity.v2.json.identity_client.'
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000361 'IdentityClient.delete_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700362 net = mock.patch.object(creds.networks_admin_client,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400363 'delete_network')
Matthew Treinishe6723262014-03-14 13:16:52 -0400364 net_mock = net.start()
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700365 subnet = mock.patch.object(creds.network_admin_client,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400366 'delete_subnet')
Matthew Treinishe6723262014-03-14 13:16:52 -0400367 subnet_mock = subnet.start()
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700368 router = mock.patch.object(creds.network_admin_client,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400369 'delete_router')
Matthew Treinishe6723262014-03-14 13:16:52 -0400370 router_mock = router.start()
371 remove_router_interface_mock = self.patch(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000372 'tempest.services.network.json.network_client.NetworkClient.'
Matthew Treinishe6723262014-03-14 13:16:52 -0400373 'remove_router_interface_with_subnet_id')
Matthew Treinish96e9e882014-06-09 18:37:19 -0400374 return_values = ({'status': 200}, {'ports': []})
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700375 port_list_mock = mock.patch.object(creds.network_admin_client,
Matthew Treinish96e9e882014-06-09 18:37:19 -0400376 'list_ports',
377 return_value=return_values)
378
Matthew Treinishe6723262014-03-14 13:16:52 -0400379 port_list_mock.start()
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700380 secgroup_list_mock = mock.patch.object(
381 creds.network_admin_client,
382 'list_security_groups',
383 side_effect=side_effect)
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100384 secgroup_list_mock.start()
385
386 return_values = (fake_http.fake_httplib({}, status=204), {})
387 remove_secgroup_mock = self.patch(
Ken'ichi Ohmichi88f12c12014-12-24 01:02:58 +0000388 'tempest.services.network.json.network_client.'
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000389 'NetworkClient.delete', return_value=return_values)
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700390 creds.clear_creds()
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100391 # Verify default security group delete
392 calls = remove_secgroup_mock.mock_calls
393 self.assertEqual(len(calls), 3)
394 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400395 args = list(args)
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100396 self.assertIn('v2.0/security-groups/sg-1234', args)
397 self.assertIn('v2.0/security-groups/sg-12345', args)
398 self.assertIn('v2.0/security-groups/sg-123456', args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400399 # Verify remove router interface calls
400 calls = remove_router_interface_mock.mock_calls
401 self.assertEqual(len(calls), 3)
402 args = map(lambda x: x[1], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400403 args = list(args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400404 self.assertIn(('1234', '1234'), args)
405 self.assertIn(('12345', '12345'), args)
406 self.assertIn(('123456', '123456'), args)
407 # Verify network delete calls
408 calls = net_mock.mock_calls
409 self.assertEqual(len(calls), 3)
410 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400411 args = list(args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400412 self.assertIn('1234', args)
413 self.assertIn('12345', args)
414 self.assertIn('123456', args)
415 # Verify subnet delete calls
416 calls = subnet_mock.mock_calls
417 self.assertEqual(len(calls), 3)
418 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400419 args = list(args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400420 self.assertIn('1234', args)
421 self.assertIn('12345', args)
422 self.assertIn('123456', args)
423 # Verify router delete calls
424 calls = router_mock.mock_calls
425 self.assertEqual(len(calls), 3)
426 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400427 args = list(args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400428 self.assertIn('1234', args)
429 self.assertIn('12345', args)
430 self.assertIn('123456', args)
Matthew Treinish23433a02014-03-17 16:43:50 -0400431
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000432 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400433 def test_network_alt_creation(self, MockRestClient):
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700434 creds = dynamic_creds.DynamicCredentialProvider(name='test class')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400435 self._mock_assign_user_role()
436 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400437 self._mock_user_create('1234', 'fake_alt_user')
438 self._mock_tenant_create('1234', 'fake_alt_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700439 self._mock_network_create(creds, '1234', 'fake_alt_net')
440 self._mock_subnet_create(creds, '1234', 'fake_alt_subnet')
Matthew Treinish23433a02014-03-17 16:43:50 -0400441 self._mock_router_create('1234', 'fake_alt_router')
442 router_interface_mock = self.patch(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000443 'tempest.services.network.json.network_client.NetworkClient.'
Matthew Treinish23433a02014-03-17 16:43:50 -0400444 'add_router_interface_with_subnet_id')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700445 alt_creds = creds.get_alt_creds()
Matthew Treinish23433a02014-03-17 16:43:50 -0400446 router_interface_mock.called_once_with('1234', '1234')
Andrea Frittoli (andreaf)9540dfd2015-03-25 17:06:50 -0400447 network = alt_creds.network
448 subnet = alt_creds.subnet
449 router = alt_creds.router
Matthew Treinish23433a02014-03-17 16:43:50 -0400450 self.assertEqual(network['id'], '1234')
451 self.assertEqual(network['name'], 'fake_alt_net')
452 self.assertEqual(subnet['id'], '1234')
453 self.assertEqual(subnet['name'], 'fake_alt_subnet')
454 self.assertEqual(router['id'], '1234')
455 self.assertEqual(router['name'], 'fake_alt_router')
456
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000457 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400458 def test_network_admin_creation(self, MockRestClient):
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700459 creds = dynamic_creds.DynamicCredentialProvider(name='test class')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400460 self._mock_assign_user_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400461 self._mock_user_create('1234', 'fake_admin_user')
462 self._mock_tenant_create('1234', 'fake_admin_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700463 self._mock_network_create(creds, '1234', 'fake_admin_net')
464 self._mock_subnet_create(creds, '1234', 'fake_admin_subnet')
Matthew Treinish23433a02014-03-17 16:43:50 -0400465 self._mock_router_create('1234', 'fake_admin_router')
466 router_interface_mock = self.patch(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000467 'tempest.services.network.json.network_client.NetworkClient.'
Matthew Treinish23433a02014-03-17 16:43:50 -0400468 'add_router_interface_with_subnet_id')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400469 self._mock_list_roles('123456', 'admin')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700470 admin_creds = creds.get_admin_creds()
Matthew Treinish23433a02014-03-17 16:43:50 -0400471 router_interface_mock.called_once_with('1234', '1234')
Andrea Frittoli (andreaf)9540dfd2015-03-25 17:06:50 -0400472 network = admin_creds.network
473 subnet = admin_creds.subnet
474 router = admin_creds.router
Matthew Treinish23433a02014-03-17 16:43:50 -0400475 self.assertEqual(network['id'], '1234')
476 self.assertEqual(network['name'], 'fake_admin_net')
477 self.assertEqual(subnet['id'], '1234')
478 self.assertEqual(subnet['name'], 'fake_admin_subnet')
479 self.assertEqual(router['id'], '1234')
480 self.assertEqual(router['name'], 'fake_admin_router')
481
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000482 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400483 def test_no_network_resources(self, MockRestClient):
484 net_dict = {
485 'network': False,
486 'router': False,
487 'subnet': False,
488 'dhcp': False,
489 }
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700490 creds = dynamic_creds.DynamicCredentialProvider(
491 name='test class', network_resources=net_dict)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400492 self._mock_assign_user_role()
493 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400494 self._mock_user_create('1234', 'fake_prim_user')
495 self._mock_tenant_create('1234', 'fake_prim_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700496 net = mock.patch.object(creds.networks_admin_client,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400497 'delete_network')
Matthew Treinish23433a02014-03-17 16:43:50 -0400498 net_mock = net.start()
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700499 subnet = mock.patch.object(creds.network_admin_client,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400500 'delete_subnet')
Matthew Treinish23433a02014-03-17 16:43:50 -0400501 subnet_mock = subnet.start()
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700502 router = mock.patch.object(creds.network_admin_client,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400503 'delete_router')
Matthew Treinish23433a02014-03-17 16:43:50 -0400504 router_mock = router.start()
505
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700506 primary_creds = creds.get_primary_creds()
Matthew Treinish23433a02014-03-17 16:43:50 -0400507 self.assertEqual(net_mock.mock_calls, [])
508 self.assertEqual(subnet_mock.mock_calls, [])
509 self.assertEqual(router_mock.mock_calls, [])
Andrea Frittoli (andreaf)9540dfd2015-03-25 17:06:50 -0400510 network = primary_creds.network
511 subnet = primary_creds.subnet
512 router = primary_creds.router
Matthew Treinish23433a02014-03-17 16:43:50 -0400513 self.assertIsNone(network)
514 self.assertIsNone(subnet)
515 self.assertIsNone(router)
516
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000517 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400518 def test_router_without_network(self, MockRestClient):
519 net_dict = {
520 'network': False,
521 'router': True,
522 'subnet': False,
523 'dhcp': False,
524 }
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700525 creds = dynamic_creds.DynamicCredentialProvider(
526 name='test class', network_resources=net_dict)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400527 self._mock_assign_user_role()
528 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400529 self._mock_user_create('1234', 'fake_prim_user')
530 self._mock_tenant_create('1234', 'fake_prim_tenant')
531 self.assertRaises(exceptions.InvalidConfiguration,
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700532 creds.get_primary_creds)
Matthew Treinish23433a02014-03-17 16:43:50 -0400533
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000534 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400535 def test_subnet_without_network(self, MockRestClient):
536 net_dict = {
537 'network': False,
538 'router': False,
539 'subnet': True,
540 'dhcp': False,
541 }
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700542 creds = dynamic_creds.DynamicCredentialProvider(
543 name='test class', network_resources=net_dict)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400544 self._mock_assign_user_role()
545 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400546 self._mock_user_create('1234', 'fake_prim_user')
547 self._mock_tenant_create('1234', 'fake_prim_tenant')
548 self.assertRaises(exceptions.InvalidConfiguration,
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700549 creds.get_primary_creds)
Matthew Treinish23433a02014-03-17 16:43:50 -0400550
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000551 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400552 def test_dhcp_without_subnet(self, MockRestClient):
553 net_dict = {
554 'network': False,
555 'router': False,
556 'subnet': False,
557 'dhcp': True,
558 }
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700559 creds = dynamic_creds.DynamicCredentialProvider(
560 name='test class', network_resources=net_dict)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400561 self._mock_assign_user_role()
562 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400563 self._mock_user_create('1234', 'fake_prim_user')
564 self._mock_tenant_create('1234', 'fake_prim_tenant')
565 self.assertRaises(exceptions.InvalidConfiguration,
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700566 creds.get_primary_creds)