blob: e1d9023b24feb0f9b33ec93436b71ae27d0058a6 [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
Matthew Treinishcb058062014-03-13 18:27:07 -040018
Andrea Frittoli (andreaf)290b3e12015-10-08 10:25:02 +010019from tempest.common import credentials_factory as credentials
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -070020from tempest.common import dynamic_creds
Matthew Treinishcb058062014-03-13 18:27:07 -040021from tempest import config
Matthew Treinish23433a02014-03-17 16:43:50 -040022from tempest import exceptions
Ken'ichi Ohmichi54030522016-03-02 11:01:34 -080023from tempest.lib.common import rest_client
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -050024from tempest.lib.services.identity.v2 import token_client as json_token_client
Jamie Lennoxc429e6a2015-02-24 10:42:42 +110025from tempest.services.identity.v2.json import identity_client as \
26 json_iden_client
Daniel Mellado6b16b922015-12-07 12:43:08 +000027from tempest.services.identity.v2.json import roles_client as \
28 json_roles_client
Daniel Melladob04da902015-11-20 17:43:12 +010029from tempest.services.identity.v2.json import tenants_client as \
30 json_tenants_client
Daniel Mellado82c83a52015-12-09 15:16:49 +000031from tempest.services.identity.v2.json import users_client as \
32 json_users_client
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +000033from tempest.services.network.json import routers_client
Matthew Treinishcb058062014-03-13 18:27:07 -040034from tempest.tests import fake_config
Jordan Pittier41129042016-03-29 21:21:16 +020035from tempest.tests.lib import base
Jordan Pittier00f25962016-03-18 17:10:07 +010036from tempest.tests.lib import fake_http
37from tempest.tests.lib import fake_identity
Matthew Treinishcb058062014-03-13 18:27:07 -040038
39
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -070040class TestDynamicCredentialProvider(base.TestCase):
Matthew Treinishcb058062014-03-13 18:27:07 -040041
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +010042 fixed_params = {'name': 'test class',
Andrea Frittoli (andreaf)29491a72015-10-13 11:24:17 +010043 'identity_version': 'v2',
44 'admin_role': 'admin'}
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +010045
Matthew Treinishcb058062014-03-13 18:27:07 -040046 def setUp(self):
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -070047 super(TestDynamicCredentialProvider, self).setUp()
Matthew Treinishcb058062014-03-13 18:27:07 -040048 self.useFixture(fake_config.ConfigFixture())
49 self.stubs.Set(config, 'TempestConfigPrivate', fake_config.FakePrivate)
Ken'ichi Ohmichi96e72792015-09-09 04:05:41 +000050 self.stubs.Set(json_token_client.TokenClient, 'raw_request',
Andrea Frittoli2095d242014-03-20 08:36:23 +000051 fake_identity._fake_v2_response)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +040052 cfg.CONF.set_default('operator_role', 'FakeRole',
53 group='object-storage')
Andrea Frittoli32d74992015-03-06 17:01:07 +000054 self._mock_list_ec2_credentials('fake_user_id', 'fake_tenant_id')
Andrea Frittoli (andreaf)290b3e12015-10-08 10:25:02 +010055 self.fixed_params.update(
56 admin_creds=self._get_fake_admin_creds())
Matthew Treinishcb058062014-03-13 18:27:07 -040057
58 def test_tempest_client(self):
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +010059 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Shuquan Huang29e9cab2015-12-30 22:43:49 +080060 self.assertIsInstance(creds.identity_admin_client,
61 json_iden_client.IdentityClient)
Matthew Treinishcb058062014-03-13 18:27:07 -040062
Andrea Frittoli (andreaf)290b3e12015-10-08 10:25:02 +010063 def _get_fake_admin_creds(self):
64 return credentials.get_credentials(
65 fill_in=False,
66 identity_version=self.fixed_params['identity_version'],
67 username='fake_username', password='fake_password',
68 tenant_name='fake_tenant')
69
Matthew Treinishcb058062014-03-13 18:27:07 -040070 def _mock_user_create(self, id, name):
71 user_fix = self.useFixture(mockpatch.PatchObject(
Daniel Mellado82c83a52015-12-09 15:16:49 +000072 json_users_client.UsersClient,
Matthew Treinishcb058062014-03-13 18:27:07 -040073 'create_user',
Ken'ichi Ohmichi54030522016-03-02 11:01:34 -080074 return_value=(rest_client.ResponseBody
Anusha Ramineni0cfb4612015-08-24 08:49:10 +053075 (200, {'user': {'id': id, 'name': name}}))))
Matthew Treinishcb058062014-03-13 18:27:07 -040076 return user_fix
77
78 def _mock_tenant_create(self, id, name):
79 tenant_fix = self.useFixture(mockpatch.PatchObject(
Daniel Melladob04da902015-11-20 17:43:12 +010080 json_tenants_client.TenantsClient,
Matthew Treinishcb058062014-03-13 18:27:07 -040081 'create_tenant',
Ken'ichi Ohmichi54030522016-03-02 11:01:34 -080082 return_value=(rest_client.ResponseBody
Anusha Ramineni0cfb4612015-08-24 08:49:10 +053083 (200, {'tenant': {'id': id, 'name': name}}))))
Matthew Treinishcb058062014-03-13 18:27:07 -040084 return tenant_fix
85
Andrey Pavlovaf1fb702014-05-29 17:08:10 +040086 def _mock_list_roles(self, id, name):
87 roles_fix = self.useFixture(mockpatch.PatchObject(
Daniel Mellado6b16b922015-12-07 12:43:08 +000088 json_roles_client.RolesClient,
Andrey Pavlovaf1fb702014-05-29 17:08:10 +040089 'list_roles',
Ken'ichi Ohmichi54030522016-03-02 11:01:34 -080090 return_value=(rest_client.ResponseBody
David Kranzb7afa922014-12-30 10:56:26 -050091 (200,
Anusha Ramineni0cfb4612015-08-24 08:49:10 +053092 {'roles': [{'id': id, 'name': name},
93 {'id': '1', 'name': 'FakeRole'},
94 {'id': '2', 'name': 'Member'}]}))))
Andrey Pavlovaf1fb702014-05-29 17:08:10 +040095 return roles_fix
96
Matthew Treinish976e8df2014-12-19 14:21:54 -050097 def _mock_list_2_roles(self):
98 roles_fix = self.useFixture(mockpatch.PatchObject(
Daniel Mellado6b16b922015-12-07 12:43:08 +000099 json_roles_client.RolesClient,
Matthew Treinish976e8df2014-12-19 14:21:54 -0500100 'list_roles',
Ken'ichi Ohmichi54030522016-03-02 11:01:34 -0800101 return_value=(rest_client.ResponseBody
Matthew Treinish976e8df2014-12-19 14:21:54 -0500102 (200,
Anusha Ramineni0cfb4612015-08-24 08:49:10 +0530103 {'roles': [{'id': '1234', 'name': 'role1'},
Matthew Treinish976e8df2014-12-19 14:21:54 -0500104 {'id': '1', 'name': 'FakeRole'},
Anusha Ramineni0cfb4612015-08-24 08:49:10 +0530105 {'id': '12345', 'name': 'role2'}]}))))
Matthew Treinish976e8df2014-12-19 14:21:54 -0500106 return roles_fix
107
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400108 def _mock_assign_user_role(self):
109 tenant_fix = self.useFixture(mockpatch.PatchObject(
Daniel Mellado6b16b922015-12-07 12:43:08 +0000110 json_roles_client.RolesClient,
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400111 'assign_user_role',
Ken'ichi Ohmichi54030522016-03-02 11:01:34 -0800112 return_value=(rest_client.ResponseBody
David Kranzb7afa922014-12-30 10:56:26 -0500113 (200, {}))))
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400114 return tenant_fix
115
116 def _mock_list_role(self):
117 roles_fix = self.useFixture(mockpatch.PatchObject(
Daniel Mellado6b16b922015-12-07 12:43:08 +0000118 json_roles_client.RolesClient,
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400119 'list_roles',
Ken'ichi Ohmichi54030522016-03-02 11:01:34 -0800120 return_value=(rest_client.ResponseBody
Anusha Ramineni0cfb4612015-08-24 08:49:10 +0530121 (200, {'roles': [{'id': '1',
122 'name': 'FakeRole'}]}))))
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400123 return roles_fix
124
Andrea Frittoli32d74992015-03-06 17:01:07 +0000125 def _mock_list_ec2_credentials(self, user_id, tenant_id):
126 ec2_creds_fix = self.useFixture(mockpatch.PatchObject(
Daniel Mellado82c83a52015-12-09 15:16:49 +0000127 json_users_client.UsersClient,
Andrea Frittoli32d74992015-03-06 17:01:07 +0000128 'list_user_ec2_credentials',
Ken'ichi Ohmichi54030522016-03-02 11:01:34 -0800129 return_value=(rest_client.ResponseBody
Anusha Ramineni0cfb4612015-08-24 08:49:10 +0530130 (200, {'credentials': [{
131 'access': 'fake_access',
132 'secret': 'fake_secret',
133 'tenant_id': tenant_id,
134 'user_id': user_id,
135 'trust_id': None}]}))))
Andrea Frittoli32d74992015-03-06 17:01:07 +0000136 return ec2_creds_fix
137
Matthew Treinishe6723262014-03-14 13:16:52 -0400138 def _mock_network_create(self, iso_creds, id, name):
139 net_fix = self.useFixture(mockpatch.PatchObject(
John Warren94d8faf2015-09-15 12:22:24 -0400140 iso_creds.networks_admin_client,
Matthew Treinishe6723262014-03-14 13:16:52 -0400141 'create_network',
David Kranz34e88122014-12-11 15:24:05 -0500142 return_value={'network': {'id': id, 'name': name}}))
Matthew Treinishe6723262014-03-14 13:16:52 -0400143 return net_fix
144
145 def _mock_subnet_create(self, iso_creds, id, name):
146 subnet_fix = self.useFixture(mockpatch.PatchObject(
John Warren3961acd2015-10-02 14:38:53 -0400147 iso_creds.subnets_admin_client,
Matthew Treinishe6723262014-03-14 13:16:52 -0400148 'create_subnet',
David Kranz34e88122014-12-11 15:24:05 -0500149 return_value={'subnet': {'id': id, 'name': name}}))
Matthew Treinishe6723262014-03-14 13:16:52 -0400150 return subnet_fix
151
152 def _mock_router_create(self, id, name):
153 router_fix = self.useFixture(mockpatch.PatchObject(
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +0000154 routers_client.RoutersClient,
Matthew Treinishe6723262014-03-14 13:16:52 -0400155 'create_router',
David Kranz34e88122014-12-11 15:24:05 -0500156 return_value={'router': {'id': id, 'name': name}}))
Matthew Treinishe6723262014-03-14 13:16:52 -0400157 return router_fix
158
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500159 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinishcb058062014-03-13 18:27:07 -0400160 def test_primary_creds(self, MockRestClient):
161 cfg.CONF.set_default('neutron', False, 'service_available')
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100162 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400163 self._mock_assign_user_role()
164 self._mock_list_role()
Matthew Treinishcb058062014-03-13 18:27:07 -0400165 self._mock_tenant_create('1234', 'fake_prim_tenant')
166 self._mock_user_create('1234', 'fake_prim_user')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700167 primary_creds = creds.get_primary_creds()
Andrea Frittolifc315902014-03-20 09:21:44 +0000168 self.assertEqual(primary_creds.username, 'fake_prim_user')
169 self.assertEqual(primary_creds.tenant_name, 'fake_prim_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000170 # Verify IDs
171 self.assertEqual(primary_creds.tenant_id, '1234')
172 self.assertEqual(primary_creds.user_id, '1234')
Matthew Treinishcb058062014-03-13 18:27:07 -0400173
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500174 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinishcb058062014-03-13 18:27:07 -0400175 def test_admin_creds(self, MockRestClient):
176 cfg.CONF.set_default('neutron', False, 'service_available')
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100177 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400178 self._mock_list_roles('1234', 'admin')
Matthew Treinishcb058062014-03-13 18:27:07 -0400179 self._mock_user_create('1234', 'fake_admin_user')
180 self._mock_tenant_create('1234', 'fake_admin_tenant')
Matthew Treinishcb058062014-03-13 18:27:07 -0400181
Daniel Mellado6b16b922015-12-07 12:43:08 +0000182 user_mock = mock.patch.object(json_roles_client.RolesClient,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400183 'assign_user_role')
Matthew Treinishcb058062014-03-13 18:27:07 -0400184 user_mock.start()
185 self.addCleanup(user_mock.stop)
Daniel Mellado6b16b922015-12-07 12:43:08 +0000186 with mock.patch.object(json_roles_client.RolesClient,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400187 'assign_user_role') as user_mock:
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700188 admin_creds = creds.get_admin_creds()
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400189 user_mock.assert_has_calls([
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400190 mock.call('1234', '1234', '1234')])
Andrea Frittolifc315902014-03-20 09:21:44 +0000191 self.assertEqual(admin_creds.username, 'fake_admin_user')
192 self.assertEqual(admin_creds.tenant_name, 'fake_admin_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000193 # Verify IDs
194 self.assertEqual(admin_creds.tenant_id, '1234')
195 self.assertEqual(admin_creds.user_id, '1234')
Matthew Treinishcb058062014-03-13 18:27:07 -0400196
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500197 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinish976e8df2014-12-19 14:21:54 -0500198 def test_role_creds(self, MockRestClient):
199 cfg.CONF.set_default('neutron', False, 'service_available')
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100200 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Matthew Treinish976e8df2014-12-19 14:21:54 -0500201 self._mock_list_2_roles()
202 self._mock_user_create('1234', 'fake_role_user')
203 self._mock_tenant_create('1234', 'fake_role_tenant')
204
Daniel Mellado6b16b922015-12-07 12:43:08 +0000205 user_mock = mock.patch.object(json_roles_client.RolesClient,
Matthew Treinish976e8df2014-12-19 14:21:54 -0500206 'assign_user_role')
207 user_mock.start()
208 self.addCleanup(user_mock.stop)
Daniel Mellado6b16b922015-12-07 12:43:08 +0000209 with mock.patch.object(json_roles_client.RolesClient,
Matthew Treinish976e8df2014-12-19 14:21:54 -0500210 'assign_user_role') as user_mock:
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700211 role_creds = creds.get_creds_by_roles(
212 roles=['role1', 'role2'])
Matthew Treinish976e8df2014-12-19 14:21:54 -0500213 calls = user_mock.mock_calls
214 # Assert that the role creation is called with the 2 specified roles
Matthew Treinish8f268292015-02-24 20:01:36 -0500215 self.assertEqual(len(calls), 2)
Matthew Treinish976e8df2014-12-19 14:21:54 -0500216 args = map(lambda x: x[1], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400217 args = list(args)
Matthew Treinish976e8df2014-12-19 14:21:54 -0500218 self.assertIn(('1234', '1234', '1234'), args)
219 self.assertIn(('1234', '1234', '12345'), args)
220 self.assertEqual(role_creds.username, 'fake_role_user')
221 self.assertEqual(role_creds.tenant_name, 'fake_role_tenant')
222 # Verify IDs
223 self.assertEqual(role_creds.tenant_id, '1234')
224 self.assertEqual(role_creds.user_id, '1234')
225
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500226 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinishcb058062014-03-13 18:27:07 -0400227 def test_all_cred_cleanup(self, MockRestClient):
228 cfg.CONF.set_default('neutron', False, 'service_available')
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100229 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400230 self._mock_assign_user_role()
Matthew Treinishbe15b872015-06-29 14:29:30 -0400231 self._mock_list_role()
232 self._mock_tenant_create('1234', 'fake_prim_tenant')
233 self._mock_user_create('1234', 'fake_prim_user')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700234 creds.get_primary_creds()
Matthew Treinishbe15b872015-06-29 14:29:30 -0400235 self._mock_tenant_create('12345', 'fake_alt_tenant')
236 self._mock_user_create('12345', 'fake_alt_user')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700237 creds.get_alt_creds()
Matthew Treinishbe15b872015-06-29 14:29:30 -0400238 self._mock_tenant_create('123456', 'fake_admin_tenant')
239 self._mock_user_create('123456', 'fake_admin_user')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400240 self._mock_list_roles('123456', 'admin')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700241 creds.get_admin_creds()
Matthew Treinishcb058062014-03-13 18:27:07 -0400242 user_mock = self.patch(
Daniel Mellado82c83a52015-12-09 15:16:49 +0000243 'tempest.services.identity.v2.json.users_client.'
244 'UsersClient.delete_user')
Matthew Treinishcb058062014-03-13 18:27:07 -0400245 tenant_mock = self.patch(
Daniel Melladob04da902015-11-20 17:43:12 +0100246 'tempest.services.identity.v2.json.tenants_client.'
247 'TenantsClient.delete_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700248 creds.clear_creds()
Matthew Treinishcb058062014-03-13 18:27:07 -0400249 # Verify user delete calls
250 calls = user_mock.mock_calls
251 self.assertEqual(len(calls), 3)
252 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400253 args = list(args)
Matthew Treinishcb058062014-03-13 18:27:07 -0400254 self.assertIn('1234', args)
255 self.assertIn('12345', args)
256 self.assertIn('123456', args)
257 # Verify tenant delete calls
258 calls = tenant_mock.mock_calls
259 self.assertEqual(len(calls), 3)
260 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400261 args = list(args)
Matthew Treinishcb058062014-03-13 18:27:07 -0400262 self.assertIn('1234', args)
263 self.assertIn('12345', args)
264 self.assertIn('123456', args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400265
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500266 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinishe6723262014-03-14 13:16:52 -0400267 def test_alt_creds(self, MockRestClient):
268 cfg.CONF.set_default('neutron', False, 'service_available')
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100269 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400270 self._mock_assign_user_role()
271 self._mock_list_role()
Matthew Treinishe6723262014-03-14 13:16:52 -0400272 self._mock_user_create('1234', 'fake_alt_user')
273 self._mock_tenant_create('1234', 'fake_alt_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700274 alt_creds = creds.get_alt_creds()
Andrea Frittolifc315902014-03-20 09:21:44 +0000275 self.assertEqual(alt_creds.username, 'fake_alt_user')
276 self.assertEqual(alt_creds.tenant_name, 'fake_alt_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000277 # Verify IDs
278 self.assertEqual(alt_creds.tenant_id, '1234')
279 self.assertEqual(alt_creds.user_id, '1234')
Matthew Treinishe6723262014-03-14 13:16:52 -0400280
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500281 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinish2219d382015-04-24 10:33:04 -0400282 def test_no_network_creation_with_config_set(self, MockRestClient):
283 cfg.CONF.set_default('create_isolated_networks', False, group='auth')
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100284 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Matthew Treinish2219d382015-04-24 10:33:04 -0400285 self._mock_assign_user_role()
286 self._mock_list_role()
287 self._mock_user_create('1234', 'fake_prim_user')
288 self._mock_tenant_create('1234', 'fake_prim_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700289 net = mock.patch.object(creds.networks_admin_client,
Matthew Treinish2219d382015-04-24 10:33:04 -0400290 'delete_network')
291 net_mock = net.start()
John Warren3961acd2015-10-02 14:38:53 -0400292 subnet = mock.patch.object(creds.subnets_admin_client,
Matthew Treinish2219d382015-04-24 10:33:04 -0400293 'delete_subnet')
294 subnet_mock = subnet.start()
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +0000295 router = mock.patch.object(creds.routers_admin_client,
Matthew Treinish2219d382015-04-24 10:33:04 -0400296 'delete_router')
297 router_mock = router.start()
298
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700299 primary_creds = creds.get_primary_creds()
Matthew Treinish2219d382015-04-24 10:33:04 -0400300 self.assertEqual(net_mock.mock_calls, [])
301 self.assertEqual(subnet_mock.mock_calls, [])
302 self.assertEqual(router_mock.mock_calls, [])
303 network = primary_creds.network
304 subnet = primary_creds.subnet
305 router = primary_creds.router
306 self.assertIsNone(network)
307 self.assertIsNone(subnet)
308 self.assertIsNone(router)
309
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500310 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinishe6723262014-03-14 13:16:52 -0400311 def test_network_creation(self, MockRestClient):
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100312 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400313 self._mock_assign_user_role()
314 self._mock_list_role()
Matthew Treinishe6723262014-03-14 13:16:52 -0400315 self._mock_user_create('1234', 'fake_prim_user')
316 self._mock_tenant_create('1234', 'fake_prim_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700317 self._mock_network_create(creds, '1234', 'fake_net')
318 self._mock_subnet_create(creds, '1234', 'fake_subnet')
Matthew Treinishe6723262014-03-14 13:16:52 -0400319 self._mock_router_create('1234', 'fake_router')
320 router_interface_mock = self.patch(
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +0000321 'tempest.services.network.json.routers_client.RoutersClient.'
piyush11078694aca952015-12-17 12:54:44 +0530322 'add_router_interface')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700323 primary_creds = creds.get_primary_creds()
piyush11078694aca952015-12-17 12:54:44 +0530324 router_interface_mock.assert_called_once_with('1234', subnet_id='1234')
Andrea Frittoli (andreaf)9540dfd2015-03-25 17:06:50 -0400325 network = primary_creds.network
326 subnet = primary_creds.subnet
327 router = primary_creds.router
Matthew Treinishe6723262014-03-14 13:16:52 -0400328 self.assertEqual(network['id'], '1234')
329 self.assertEqual(network['name'], 'fake_net')
330 self.assertEqual(subnet['id'], '1234')
331 self.assertEqual(subnet['name'], 'fake_subnet')
332 self.assertEqual(router['id'], '1234')
333 self.assertEqual(router['name'], 'fake_router')
334
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500335 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinishe6723262014-03-14 13:16:52 -0400336 def test_network_cleanup(self, MockRestClient):
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100337 def side_effect(**args):
David Kranz34e88122014-12-11 15:24:05 -0500338 return {"security_groups": [{"tenant_id": args['tenant_id'],
339 "name": args['name'],
340 "description": args['name'],
341 "security_group_rules": [],
342 "id": "sg-%s" % args['tenant_id']}]}
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100343 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Matthew Treinishe6723262014-03-14 13:16:52 -0400344 # Create primary tenant and network
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400345 self._mock_assign_user_role()
Matthew Treinishbe15b872015-06-29 14:29:30 -0400346 self._mock_list_role()
347 self._mock_user_create('1234', 'fake_prim_user')
348 self._mock_tenant_create('1234', 'fake_prim_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700349 self._mock_network_create(creds, '1234', 'fake_net')
350 self._mock_subnet_create(creds, '1234', 'fake_subnet')
Matthew Treinishbe15b872015-06-29 14:29:30 -0400351 self._mock_router_create('1234', 'fake_router')
Matthew Treinishe6723262014-03-14 13:16:52 -0400352 router_interface_mock = self.patch(
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +0000353 'tempest.services.network.json.routers_client.RoutersClient.'
piyush11078694aca952015-12-17 12:54:44 +0530354 'add_router_interface')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700355 creds.get_primary_creds()
piyush11078694aca952015-12-17 12:54:44 +0530356 router_interface_mock.assert_called_once_with('1234', subnet_id='1234')
Matthew Treinishe6723262014-03-14 13:16:52 -0400357 router_interface_mock.reset_mock()
Matthew Treinishe6723262014-03-14 13:16:52 -0400358 # Create alternate tenant and network
Matthew Treinishbe15b872015-06-29 14:29:30 -0400359 self._mock_user_create('12345', 'fake_alt_user')
360 self._mock_tenant_create('12345', 'fake_alt_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700361 self._mock_network_create(creds, '12345', 'fake_alt_net')
362 self._mock_subnet_create(creds, '12345', 'fake_alt_subnet')
Matthew Treinishbe15b872015-06-29 14:29:30 -0400363 self._mock_router_create('12345', 'fake_alt_router')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700364 creds.get_alt_creds()
piyush11078694aca952015-12-17 12:54:44 +0530365 router_interface_mock.assert_called_once_with('12345',
366 subnet_id='12345')
Matthew Treinishe6723262014-03-14 13:16:52 -0400367 router_interface_mock.reset_mock()
Matthew Treinishe6723262014-03-14 13:16:52 -0400368 # Create admin tenant and networks
Matthew Treinishbe15b872015-06-29 14:29:30 -0400369 self._mock_user_create('123456', 'fake_admin_user')
370 self._mock_tenant_create('123456', 'fake_admin_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700371 self._mock_network_create(creds, '123456', 'fake_admin_net')
372 self._mock_subnet_create(creds, '123456', 'fake_admin_subnet')
Matthew Treinishbe15b872015-06-29 14:29:30 -0400373 self._mock_router_create('123456', 'fake_admin_router')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400374 self._mock_list_roles('123456', 'admin')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700375 creds.get_admin_creds()
Daniel Mellado82c83a52015-12-09 15:16:49 +0000376 self.patch('tempest.services.identity.v2.json.users_client.'
377 'UsersClient.delete_user')
Daniel Melladob04da902015-11-20 17:43:12 +0100378 self.patch('tempest.services.identity.v2.json.tenants_client.'
379 'TenantsClient.delete_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700380 net = mock.patch.object(creds.networks_admin_client,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400381 'delete_network')
Matthew Treinishe6723262014-03-14 13:16:52 -0400382 net_mock = net.start()
John Warren3961acd2015-10-02 14:38:53 -0400383 subnet = mock.patch.object(creds.subnets_admin_client,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400384 'delete_subnet')
Matthew Treinishe6723262014-03-14 13:16:52 -0400385 subnet_mock = subnet.start()
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +0000386 router = mock.patch.object(creds.routers_admin_client,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400387 'delete_router')
Matthew Treinishe6723262014-03-14 13:16:52 -0400388 router_mock = router.start()
389 remove_router_interface_mock = self.patch(
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +0000390 'tempest.services.network.json.routers_client.RoutersClient.'
piyush11078694aca952015-12-17 12:54:44 +0530391 'remove_router_interface')
Matthew Treinish96e9e882014-06-09 18:37:19 -0400392 return_values = ({'status': 200}, {'ports': []})
John Warren49c0fe52015-10-22 12:35:54 -0400393 port_list_mock = mock.patch.object(creds.ports_admin_client,
Matthew Treinish96e9e882014-06-09 18:37:19 -0400394 'list_ports',
395 return_value=return_values)
396
Matthew Treinishe6723262014-03-14 13:16:52 -0400397 port_list_mock.start()
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700398 secgroup_list_mock = mock.patch.object(
John Warrenf9606e92015-12-10 12:12:42 -0500399 creds.security_groups_admin_client,
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700400 'list_security_groups',
401 side_effect=side_effect)
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100402 secgroup_list_mock.start()
403
Jordan Pittier00f25962016-03-18 17:10:07 +0100404 return_values = fake_http.fake_http_response({}, status=204), ''
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100405 remove_secgroup_mock = self.patch(
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500406 'tempest.lib.services.network.security_groups_client.'
John Warrenf9606e92015-12-10 12:12:42 -0500407 'SecurityGroupsClient.delete', return_value=return_values)
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700408 creds.clear_creds()
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100409 # Verify default security group delete
410 calls = remove_secgroup_mock.mock_calls
411 self.assertEqual(len(calls), 3)
412 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400413 args = list(args)
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100414 self.assertIn('v2.0/security-groups/sg-1234', args)
415 self.assertIn('v2.0/security-groups/sg-12345', args)
416 self.assertIn('v2.0/security-groups/sg-123456', args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400417 # Verify remove router interface calls
418 calls = remove_router_interface_mock.mock_calls
419 self.assertEqual(len(calls), 3)
piyush11078694aca952015-12-17 12:54:44 +0530420 args = map(lambda x: (x[1][0], x[2]), calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400421 args = list(args)
piyush11078694aca952015-12-17 12:54:44 +0530422 self.assertIn(('1234', {'subnet_id': '1234'}), args)
423 self.assertIn(('12345', {'subnet_id': '12345'}), args)
424 self.assertIn(('123456', {'subnet_id': '123456'}), args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400425 # Verify network delete calls
426 calls = net_mock.mock_calls
427 self.assertEqual(len(calls), 3)
428 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400429 args = list(args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400430 self.assertIn('1234', args)
431 self.assertIn('12345', args)
432 self.assertIn('123456', args)
433 # Verify subnet delete calls
434 calls = subnet_mock.mock_calls
435 self.assertEqual(len(calls), 3)
436 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400437 args = list(args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400438 self.assertIn('1234', args)
439 self.assertIn('12345', args)
440 self.assertIn('123456', args)
441 # Verify router delete calls
442 calls = router_mock.mock_calls
443 self.assertEqual(len(calls), 3)
444 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400445 args = list(args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400446 self.assertIn('1234', args)
447 self.assertIn('12345', args)
448 self.assertIn('123456', args)
Matthew Treinish23433a02014-03-17 16:43:50 -0400449
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500450 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400451 def test_network_alt_creation(self, MockRestClient):
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100452 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400453 self._mock_assign_user_role()
454 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400455 self._mock_user_create('1234', 'fake_alt_user')
456 self._mock_tenant_create('1234', 'fake_alt_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700457 self._mock_network_create(creds, '1234', 'fake_alt_net')
458 self._mock_subnet_create(creds, '1234', 'fake_alt_subnet')
Matthew Treinish23433a02014-03-17 16:43:50 -0400459 self._mock_router_create('1234', 'fake_alt_router')
460 router_interface_mock = self.patch(
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +0000461 'tempest.services.network.json.routers_client.RoutersClient.'
piyush11078694aca952015-12-17 12:54:44 +0530462 'add_router_interface')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700463 alt_creds = creds.get_alt_creds()
piyush11078694aca952015-12-17 12:54:44 +0530464 router_interface_mock.assert_called_once_with('1234', subnet_id='1234')
Andrea Frittoli (andreaf)9540dfd2015-03-25 17:06:50 -0400465 network = alt_creds.network
466 subnet = alt_creds.subnet
467 router = alt_creds.router
Matthew Treinish23433a02014-03-17 16:43:50 -0400468 self.assertEqual(network['id'], '1234')
469 self.assertEqual(network['name'], 'fake_alt_net')
470 self.assertEqual(subnet['id'], '1234')
471 self.assertEqual(subnet['name'], 'fake_alt_subnet')
472 self.assertEqual(router['id'], '1234')
473 self.assertEqual(router['name'], 'fake_alt_router')
474
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500475 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400476 def test_network_admin_creation(self, MockRestClient):
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100477 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400478 self._mock_assign_user_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400479 self._mock_user_create('1234', 'fake_admin_user')
480 self._mock_tenant_create('1234', 'fake_admin_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700481 self._mock_network_create(creds, '1234', 'fake_admin_net')
482 self._mock_subnet_create(creds, '1234', 'fake_admin_subnet')
Matthew Treinish23433a02014-03-17 16:43:50 -0400483 self._mock_router_create('1234', 'fake_admin_router')
484 router_interface_mock = self.patch(
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +0000485 'tempest.services.network.json.routers_client.RoutersClient.'
piyush11078694aca952015-12-17 12:54:44 +0530486 'add_router_interface')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400487 self._mock_list_roles('123456', 'admin')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700488 admin_creds = creds.get_admin_creds()
piyush11078694aca952015-12-17 12:54:44 +0530489 router_interface_mock.assert_called_once_with('1234', subnet_id='1234')
Andrea Frittoli (andreaf)9540dfd2015-03-25 17:06:50 -0400490 network = admin_creds.network
491 subnet = admin_creds.subnet
492 router = admin_creds.router
Matthew Treinish23433a02014-03-17 16:43:50 -0400493 self.assertEqual(network['id'], '1234')
494 self.assertEqual(network['name'], 'fake_admin_net')
495 self.assertEqual(subnet['id'], '1234')
496 self.assertEqual(subnet['name'], 'fake_admin_subnet')
497 self.assertEqual(router['id'], '1234')
498 self.assertEqual(router['name'], 'fake_admin_router')
499
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500500 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400501 def test_no_network_resources(self, MockRestClient):
502 net_dict = {
503 'network': False,
504 'router': False,
505 'subnet': False,
506 'dhcp': False,
507 }
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700508 creds = dynamic_creds.DynamicCredentialProvider(
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100509 network_resources=net_dict,
510 **self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400511 self._mock_assign_user_role()
512 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400513 self._mock_user_create('1234', 'fake_prim_user')
514 self._mock_tenant_create('1234', 'fake_prim_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700515 net = mock.patch.object(creds.networks_admin_client,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400516 'delete_network')
Matthew Treinish23433a02014-03-17 16:43:50 -0400517 net_mock = net.start()
John Warren3961acd2015-10-02 14:38:53 -0400518 subnet = mock.patch.object(creds.subnets_admin_client,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400519 'delete_subnet')
Matthew Treinish23433a02014-03-17 16:43:50 -0400520 subnet_mock = subnet.start()
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +0000521 router = mock.patch.object(creds.routers_admin_client,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400522 'delete_router')
Matthew Treinish23433a02014-03-17 16:43:50 -0400523 router_mock = router.start()
524
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700525 primary_creds = creds.get_primary_creds()
Matthew Treinish23433a02014-03-17 16:43:50 -0400526 self.assertEqual(net_mock.mock_calls, [])
527 self.assertEqual(subnet_mock.mock_calls, [])
528 self.assertEqual(router_mock.mock_calls, [])
Andrea Frittoli (andreaf)9540dfd2015-03-25 17:06:50 -0400529 network = primary_creds.network
530 subnet = primary_creds.subnet
531 router = primary_creds.router
Matthew Treinish23433a02014-03-17 16:43:50 -0400532 self.assertIsNone(network)
533 self.assertIsNone(subnet)
534 self.assertIsNone(router)
535
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500536 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400537 def test_router_without_network(self, MockRestClient):
538 net_dict = {
539 'network': False,
540 'router': True,
541 'subnet': False,
542 'dhcp': False,
543 }
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700544 creds = dynamic_creds.DynamicCredentialProvider(
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100545 network_resources=net_dict,
546 **self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400547 self._mock_assign_user_role()
548 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400549 self._mock_user_create('1234', 'fake_prim_user')
550 self._mock_tenant_create('1234', 'fake_prim_tenant')
551 self.assertRaises(exceptions.InvalidConfiguration,
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700552 creds.get_primary_creds)
Matthew Treinish23433a02014-03-17 16:43:50 -0400553
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500554 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400555 def test_subnet_without_network(self, MockRestClient):
556 net_dict = {
557 'network': False,
558 'router': False,
559 'subnet': True,
560 'dhcp': False,
561 }
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700562 creds = dynamic_creds.DynamicCredentialProvider(
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100563 network_resources=net_dict,
564 **self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400565 self._mock_assign_user_role()
566 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400567 self._mock_user_create('1234', 'fake_prim_user')
568 self._mock_tenant_create('1234', 'fake_prim_tenant')
569 self.assertRaises(exceptions.InvalidConfiguration,
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700570 creds.get_primary_creds)
Matthew Treinish23433a02014-03-17 16:43:50 -0400571
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500572 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400573 def test_dhcp_without_subnet(self, MockRestClient):
574 net_dict = {
575 'network': False,
576 'router': False,
577 'subnet': False,
578 'dhcp': True,
579 }
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700580 creds = dynamic_creds.DynamicCredentialProvider(
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100581 network_resources=net_dict,
582 **self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400583 self._mock_assign_user_role()
584 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400585 self._mock_user_create('1234', 'fake_prim_user')
586 self._mock_tenant_create('1234', 'fake_prim_tenant')
587 self.assertRaises(exceptions.InvalidConfiguration,
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700588 creds.get_primary_creds)