blob: de2000dd9d11c7324874c96bc7943e645d19afcb [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)290b3e12015-10-08 10:25:02 +010020from tempest.common import credentials_factory as credentials
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -070021from tempest.common import dynamic_creds
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +000022from tempest.common import service_client
Matthew Treinishcb058062014-03-13 18:27:07 -040023from tempest import config
Matthew Treinish23433a02014-03-17 16:43:50 -040024from tempest import exceptions
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
Matthew Treinishcb058062014-03-13 18:27:07 -040033from tempest.services.network.json import network_client as json_network_client
Matthew Treinishcb058062014-03-13 18:27:07 -040034from tempest.tests import base
35from tempest.tests import fake_config
Andrea Frittoli2095d242014-03-20 08:36:23 +000036from tempest.tests import fake_http
37from tempest.tests 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)
Andrea Frittoli2095d242014-03-20 08:36:23 +000050 self.fake_http = fake_http.fake_httplib2(return_type=200)
Ken'ichi Ohmichi96e72792015-09-09 04:05:41 +000051 self.stubs.Set(json_token_client.TokenClient, 'raw_request',
Andrea Frittoli2095d242014-03-20 08:36:23 +000052 fake_identity._fake_v2_response)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +040053 cfg.CONF.set_default('operator_role', 'FakeRole',
54 group='object-storage')
Andrea Frittoli32d74992015-03-06 17:01:07 +000055 self._mock_list_ec2_credentials('fake_user_id', 'fake_tenant_id')
Andrea Frittoli (andreaf)290b3e12015-10-08 10:25:02 +010056 self.fixed_params.update(
57 admin_creds=self._get_fake_admin_creds())
Matthew Treinishcb058062014-03-13 18:27:07 -040058
59 def test_tempest_client(self):
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +010060 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -070061 self.assertTrue(isinstance(creds.identity_admin_client,
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +000062 json_iden_client.IdentityClient))
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -070063 self.assertTrue(isinstance(creds.network_admin_client,
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +000064 json_network_client.NetworkClient))
Matthew Treinishcb058062014-03-13 18:27:07 -040065
Andrea Frittoli (andreaf)290b3e12015-10-08 10:25:02 +010066 def _get_fake_admin_creds(self):
67 return credentials.get_credentials(
68 fill_in=False,
69 identity_version=self.fixed_params['identity_version'],
70 username='fake_username', password='fake_password',
71 tenant_name='fake_tenant')
72
Matthew Treinishcb058062014-03-13 18:27:07 -040073 def _mock_user_create(self, id, name):
74 user_fix = self.useFixture(mockpatch.PatchObject(
Daniel Mellado82c83a52015-12-09 15:16:49 +000075 json_users_client.UsersClient,
Matthew Treinishcb058062014-03-13 18:27:07 -040076 'create_user',
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +000077 return_value=(service_client.ResponseBody
Anusha Ramineni0cfb4612015-08-24 08:49:10 +053078 (200, {'user': {'id': id, 'name': name}}))))
Matthew Treinishcb058062014-03-13 18:27:07 -040079 return user_fix
80
81 def _mock_tenant_create(self, id, name):
82 tenant_fix = self.useFixture(mockpatch.PatchObject(
Daniel Melladob04da902015-11-20 17:43:12 +010083 json_tenants_client.TenantsClient,
Matthew Treinishcb058062014-03-13 18:27:07 -040084 'create_tenant',
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +000085 return_value=(service_client.ResponseBody
Anusha Ramineni0cfb4612015-08-24 08:49:10 +053086 (200, {'tenant': {'id': id, 'name': name}}))))
Matthew Treinishcb058062014-03-13 18:27:07 -040087 return tenant_fix
88
Andrey Pavlovaf1fb702014-05-29 17:08:10 +040089 def _mock_list_roles(self, id, name):
90 roles_fix = self.useFixture(mockpatch.PatchObject(
Daniel Mellado6b16b922015-12-07 12:43:08 +000091 json_roles_client.RolesClient,
Andrey Pavlovaf1fb702014-05-29 17:08:10 +040092 'list_roles',
Anusha Ramineni0cfb4612015-08-24 08:49:10 +053093 return_value=(service_client.ResponseBody
David Kranzb7afa922014-12-30 10:56:26 -050094 (200,
Anusha Ramineni0cfb4612015-08-24 08:49:10 +053095 {'roles': [{'id': id, 'name': name},
96 {'id': '1', 'name': 'FakeRole'},
97 {'id': '2', 'name': 'Member'}]}))))
Andrey Pavlovaf1fb702014-05-29 17:08:10 +040098 return roles_fix
99
Matthew Treinish976e8df2014-12-19 14:21:54 -0500100 def _mock_list_2_roles(self):
101 roles_fix = self.useFixture(mockpatch.PatchObject(
Daniel Mellado6b16b922015-12-07 12:43:08 +0000102 json_roles_client.RolesClient,
Matthew Treinish976e8df2014-12-19 14:21:54 -0500103 'list_roles',
Anusha Ramineni0cfb4612015-08-24 08:49:10 +0530104 return_value=(service_client.ResponseBody
Matthew Treinish976e8df2014-12-19 14:21:54 -0500105 (200,
Anusha Ramineni0cfb4612015-08-24 08:49:10 +0530106 {'roles': [{'id': '1234', 'name': 'role1'},
Matthew Treinish976e8df2014-12-19 14:21:54 -0500107 {'id': '1', 'name': 'FakeRole'},
Anusha Ramineni0cfb4612015-08-24 08:49:10 +0530108 {'id': '12345', 'name': 'role2'}]}))))
Matthew Treinish976e8df2014-12-19 14:21:54 -0500109 return roles_fix
110
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400111 def _mock_assign_user_role(self):
112 tenant_fix = self.useFixture(mockpatch.PatchObject(
Daniel Mellado6b16b922015-12-07 12:43:08 +0000113 json_roles_client.RolesClient,
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400114 'assign_user_role',
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000115 return_value=(service_client.ResponseBody
David Kranzb7afa922014-12-30 10:56:26 -0500116 (200, {}))))
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400117 return tenant_fix
118
119 def _mock_list_role(self):
120 roles_fix = self.useFixture(mockpatch.PatchObject(
Daniel Mellado6b16b922015-12-07 12:43:08 +0000121 json_roles_client.RolesClient,
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400122 'list_roles',
Anusha Ramineni0cfb4612015-08-24 08:49:10 +0530123 return_value=(service_client.ResponseBody
124 (200, {'roles': [{'id': '1',
125 'name': 'FakeRole'}]}))))
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400126 return roles_fix
127
Andrea Frittoli32d74992015-03-06 17:01:07 +0000128 def _mock_list_ec2_credentials(self, user_id, tenant_id):
129 ec2_creds_fix = self.useFixture(mockpatch.PatchObject(
Daniel Mellado82c83a52015-12-09 15:16:49 +0000130 json_users_client.UsersClient,
Andrea Frittoli32d74992015-03-06 17:01:07 +0000131 'list_user_ec2_credentials',
Anusha Ramineni0cfb4612015-08-24 08:49:10 +0530132 return_value=(service_client.ResponseBody
133 (200, {'credentials': [{
134 'access': 'fake_access',
135 'secret': 'fake_secret',
136 'tenant_id': tenant_id,
137 'user_id': user_id,
138 'trust_id': None}]}))))
Andrea Frittoli32d74992015-03-06 17:01:07 +0000139 return ec2_creds_fix
140
Matthew Treinishe6723262014-03-14 13:16:52 -0400141 def _mock_network_create(self, iso_creds, id, name):
142 net_fix = self.useFixture(mockpatch.PatchObject(
John Warren94d8faf2015-09-15 12:22:24 -0400143 iso_creds.networks_admin_client,
Matthew Treinishe6723262014-03-14 13:16:52 -0400144 'create_network',
David Kranz34e88122014-12-11 15:24:05 -0500145 return_value={'network': {'id': id, 'name': name}}))
Matthew Treinishe6723262014-03-14 13:16:52 -0400146 return net_fix
147
148 def _mock_subnet_create(self, iso_creds, id, name):
149 subnet_fix = self.useFixture(mockpatch.PatchObject(
John Warren3961acd2015-10-02 14:38:53 -0400150 iso_creds.subnets_admin_client,
Matthew Treinishe6723262014-03-14 13:16:52 -0400151 'create_subnet',
David Kranz34e88122014-12-11 15:24:05 -0500152 return_value={'subnet': {'id': id, 'name': name}}))
Matthew Treinishe6723262014-03-14 13:16:52 -0400153 return subnet_fix
154
155 def _mock_router_create(self, id, name):
156 router_fix = self.useFixture(mockpatch.PatchObject(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000157 json_network_client.NetworkClient,
Matthew Treinishe6723262014-03-14 13:16:52 -0400158 'create_router',
David Kranz34e88122014-12-11 15:24:05 -0500159 return_value={'router': {'id': id, 'name': name}}))
Matthew Treinishe6723262014-03-14 13:16:52 -0400160 return router_fix
161
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000162 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinishcb058062014-03-13 18:27:07 -0400163 def test_primary_creds(self, MockRestClient):
164 cfg.CONF.set_default('neutron', False, 'service_available')
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100165 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400166 self._mock_assign_user_role()
167 self._mock_list_role()
Matthew Treinishcb058062014-03-13 18:27:07 -0400168 self._mock_tenant_create('1234', 'fake_prim_tenant')
169 self._mock_user_create('1234', 'fake_prim_user')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700170 primary_creds = creds.get_primary_creds()
Andrea Frittolifc315902014-03-20 09:21:44 +0000171 self.assertEqual(primary_creds.username, 'fake_prim_user')
172 self.assertEqual(primary_creds.tenant_name, 'fake_prim_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000173 # Verify IDs
174 self.assertEqual(primary_creds.tenant_id, '1234')
175 self.assertEqual(primary_creds.user_id, '1234')
Matthew Treinishcb058062014-03-13 18:27:07 -0400176
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000177 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinishcb058062014-03-13 18:27:07 -0400178 def test_admin_creds(self, MockRestClient):
179 cfg.CONF.set_default('neutron', False, 'service_available')
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100180 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400181 self._mock_list_roles('1234', 'admin')
Matthew Treinishcb058062014-03-13 18:27:07 -0400182 self._mock_user_create('1234', 'fake_admin_user')
183 self._mock_tenant_create('1234', 'fake_admin_tenant')
Matthew Treinishcb058062014-03-13 18:27:07 -0400184
Daniel Mellado6b16b922015-12-07 12:43:08 +0000185 user_mock = mock.patch.object(json_roles_client.RolesClient,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400186 'assign_user_role')
Matthew Treinishcb058062014-03-13 18:27:07 -0400187 user_mock.start()
188 self.addCleanup(user_mock.stop)
Daniel Mellado6b16b922015-12-07 12:43:08 +0000189 with mock.patch.object(json_roles_client.RolesClient,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400190 'assign_user_role') as user_mock:
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700191 admin_creds = creds.get_admin_creds()
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400192 user_mock.assert_has_calls([
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400193 mock.call('1234', '1234', '1234')])
Andrea Frittolifc315902014-03-20 09:21:44 +0000194 self.assertEqual(admin_creds.username, 'fake_admin_user')
195 self.assertEqual(admin_creds.tenant_name, 'fake_admin_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000196 # Verify IDs
197 self.assertEqual(admin_creds.tenant_id, '1234')
198 self.assertEqual(admin_creds.user_id, '1234')
Matthew Treinishcb058062014-03-13 18:27:07 -0400199
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000200 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish976e8df2014-12-19 14:21:54 -0500201 def test_role_creds(self, MockRestClient):
202 cfg.CONF.set_default('neutron', False, 'service_available')
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100203 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Matthew Treinish976e8df2014-12-19 14:21:54 -0500204 self._mock_list_2_roles()
205 self._mock_user_create('1234', 'fake_role_user')
206 self._mock_tenant_create('1234', 'fake_role_tenant')
207
Daniel Mellado6b16b922015-12-07 12:43:08 +0000208 user_mock = mock.patch.object(json_roles_client.RolesClient,
Matthew Treinish976e8df2014-12-19 14:21:54 -0500209 'assign_user_role')
210 user_mock.start()
211 self.addCleanup(user_mock.stop)
Daniel Mellado6b16b922015-12-07 12:43:08 +0000212 with mock.patch.object(json_roles_client.RolesClient,
Matthew Treinish976e8df2014-12-19 14:21:54 -0500213 'assign_user_role') as user_mock:
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700214 role_creds = creds.get_creds_by_roles(
215 roles=['role1', 'role2'])
Matthew Treinish976e8df2014-12-19 14:21:54 -0500216 calls = user_mock.mock_calls
217 # Assert that the role creation is called with the 2 specified roles
Matthew Treinish8f268292015-02-24 20:01:36 -0500218 self.assertEqual(len(calls), 2)
Matthew Treinish976e8df2014-12-19 14:21:54 -0500219 args = map(lambda x: x[1], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400220 args = list(args)
Matthew Treinish976e8df2014-12-19 14:21:54 -0500221 self.assertIn(('1234', '1234', '1234'), args)
222 self.assertIn(('1234', '1234', '12345'), args)
223 self.assertEqual(role_creds.username, 'fake_role_user')
224 self.assertEqual(role_creds.tenant_name, 'fake_role_tenant')
225 # Verify IDs
226 self.assertEqual(role_creds.tenant_id, '1234')
227 self.assertEqual(role_creds.user_id, '1234')
228
229 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinishcb058062014-03-13 18:27:07 -0400230 def test_all_cred_cleanup(self, MockRestClient):
231 cfg.CONF.set_default('neutron', False, 'service_available')
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100232 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400233 self._mock_assign_user_role()
Matthew Treinishbe15b872015-06-29 14:29:30 -0400234 self._mock_list_role()
235 self._mock_tenant_create('1234', 'fake_prim_tenant')
236 self._mock_user_create('1234', 'fake_prim_user')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700237 creds.get_primary_creds()
Matthew Treinishbe15b872015-06-29 14:29:30 -0400238 self._mock_tenant_create('12345', 'fake_alt_tenant')
239 self._mock_user_create('12345', 'fake_alt_user')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700240 creds.get_alt_creds()
Matthew Treinishbe15b872015-06-29 14:29:30 -0400241 self._mock_tenant_create('123456', 'fake_admin_tenant')
242 self._mock_user_create('123456', 'fake_admin_user')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400243 self._mock_list_roles('123456', 'admin')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700244 creds.get_admin_creds()
Matthew Treinishcb058062014-03-13 18:27:07 -0400245 user_mock = self.patch(
Daniel Mellado82c83a52015-12-09 15:16:49 +0000246 'tempest.services.identity.v2.json.users_client.'
247 'UsersClient.delete_user')
Matthew Treinishcb058062014-03-13 18:27:07 -0400248 tenant_mock = self.patch(
Daniel Melladob04da902015-11-20 17:43:12 +0100249 'tempest.services.identity.v2.json.tenants_client.'
250 'TenantsClient.delete_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700251 creds.clear_creds()
Matthew Treinishcb058062014-03-13 18:27:07 -0400252 # Verify user delete calls
253 calls = user_mock.mock_calls
254 self.assertEqual(len(calls), 3)
255 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400256 args = list(args)
Matthew Treinishcb058062014-03-13 18:27:07 -0400257 self.assertIn('1234', args)
258 self.assertIn('12345', args)
259 self.assertIn('123456', args)
260 # Verify tenant delete calls
261 calls = tenant_mock.mock_calls
262 self.assertEqual(len(calls), 3)
263 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400264 args = list(args)
Matthew Treinishcb058062014-03-13 18:27:07 -0400265 self.assertIn('1234', args)
266 self.assertIn('12345', args)
267 self.assertIn('123456', args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400268
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000269 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinishe6723262014-03-14 13:16:52 -0400270 def test_alt_creds(self, MockRestClient):
271 cfg.CONF.set_default('neutron', False, 'service_available')
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100272 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400273 self._mock_assign_user_role()
274 self._mock_list_role()
Matthew Treinishe6723262014-03-14 13:16:52 -0400275 self._mock_user_create('1234', 'fake_alt_user')
276 self._mock_tenant_create('1234', 'fake_alt_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700277 alt_creds = creds.get_alt_creds()
Andrea Frittolifc315902014-03-20 09:21:44 +0000278 self.assertEqual(alt_creds.username, 'fake_alt_user')
279 self.assertEqual(alt_creds.tenant_name, 'fake_alt_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000280 # Verify IDs
281 self.assertEqual(alt_creds.tenant_id, '1234')
282 self.assertEqual(alt_creds.user_id, '1234')
Matthew Treinishe6723262014-03-14 13:16:52 -0400283
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000284 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish2219d382015-04-24 10:33:04 -0400285 def test_no_network_creation_with_config_set(self, MockRestClient):
286 cfg.CONF.set_default('create_isolated_networks', False, group='auth')
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100287 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Matthew Treinish2219d382015-04-24 10:33:04 -0400288 self._mock_assign_user_role()
289 self._mock_list_role()
290 self._mock_user_create('1234', 'fake_prim_user')
291 self._mock_tenant_create('1234', 'fake_prim_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700292 net = mock.patch.object(creds.networks_admin_client,
Matthew Treinish2219d382015-04-24 10:33:04 -0400293 'delete_network')
294 net_mock = net.start()
John Warren3961acd2015-10-02 14:38:53 -0400295 subnet = mock.patch.object(creds.subnets_admin_client,
Matthew Treinish2219d382015-04-24 10:33:04 -0400296 'delete_subnet')
297 subnet_mock = subnet.start()
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700298 router = mock.patch.object(creds.network_admin_client,
Matthew Treinish2219d382015-04-24 10:33:04 -0400299 'delete_router')
300 router_mock = router.start()
301
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700302 primary_creds = creds.get_primary_creds()
Matthew Treinish2219d382015-04-24 10:33:04 -0400303 self.assertEqual(net_mock.mock_calls, [])
304 self.assertEqual(subnet_mock.mock_calls, [])
305 self.assertEqual(router_mock.mock_calls, [])
306 network = primary_creds.network
307 subnet = primary_creds.subnet
308 router = primary_creds.router
309 self.assertIsNone(network)
310 self.assertIsNone(subnet)
311 self.assertIsNone(router)
312
313 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinishe6723262014-03-14 13:16:52 -0400314 def test_network_creation(self, MockRestClient):
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100315 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400316 self._mock_assign_user_role()
317 self._mock_list_role()
Matthew Treinishe6723262014-03-14 13:16:52 -0400318 self._mock_user_create('1234', 'fake_prim_user')
319 self._mock_tenant_create('1234', 'fake_prim_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700320 self._mock_network_create(creds, '1234', 'fake_net')
321 self._mock_subnet_create(creds, '1234', 'fake_subnet')
Matthew Treinishe6723262014-03-14 13:16:52 -0400322 self._mock_router_create('1234', 'fake_router')
323 router_interface_mock = self.patch(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000324 'tempest.services.network.json.network_client.NetworkClient.'
piyush11078694aca952015-12-17 12:54:44 +0530325 'add_router_interface')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700326 primary_creds = creds.get_primary_creds()
piyush11078694aca952015-12-17 12:54:44 +0530327 router_interface_mock.assert_called_once_with('1234', subnet_id='1234')
Andrea Frittoli (andreaf)9540dfd2015-03-25 17:06:50 -0400328 network = primary_creds.network
329 subnet = primary_creds.subnet
330 router = primary_creds.router
Matthew Treinishe6723262014-03-14 13:16:52 -0400331 self.assertEqual(network['id'], '1234')
332 self.assertEqual(network['name'], 'fake_net')
333 self.assertEqual(subnet['id'], '1234')
334 self.assertEqual(subnet['name'], 'fake_subnet')
335 self.assertEqual(router['id'], '1234')
336 self.assertEqual(router['name'], 'fake_router')
337
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000338 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinishe6723262014-03-14 13:16:52 -0400339 def test_network_cleanup(self, MockRestClient):
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100340 def side_effect(**args):
David Kranz34e88122014-12-11 15:24:05 -0500341 return {"security_groups": [{"tenant_id": args['tenant_id'],
342 "name": args['name'],
343 "description": args['name'],
344 "security_group_rules": [],
345 "id": "sg-%s" % args['tenant_id']}]}
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100346 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Matthew Treinishe6723262014-03-14 13:16:52 -0400347 # Create primary tenant and network
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400348 self._mock_assign_user_role()
Matthew Treinishbe15b872015-06-29 14:29:30 -0400349 self._mock_list_role()
350 self._mock_user_create('1234', 'fake_prim_user')
351 self._mock_tenant_create('1234', 'fake_prim_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700352 self._mock_network_create(creds, '1234', 'fake_net')
353 self._mock_subnet_create(creds, '1234', 'fake_subnet')
Matthew Treinishbe15b872015-06-29 14:29:30 -0400354 self._mock_router_create('1234', 'fake_router')
Matthew Treinishe6723262014-03-14 13:16:52 -0400355 router_interface_mock = self.patch(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000356 'tempest.services.network.json.network_client.NetworkClient.'
piyush11078694aca952015-12-17 12:54:44 +0530357 'add_router_interface')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700358 creds.get_primary_creds()
piyush11078694aca952015-12-17 12:54:44 +0530359 router_interface_mock.assert_called_once_with('1234', subnet_id='1234')
Matthew Treinishe6723262014-03-14 13:16:52 -0400360 router_interface_mock.reset_mock()
Matthew Treinishe6723262014-03-14 13:16:52 -0400361 # Create alternate tenant and network
Matthew Treinishbe15b872015-06-29 14:29:30 -0400362 self._mock_user_create('12345', 'fake_alt_user')
363 self._mock_tenant_create('12345', 'fake_alt_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700364 self._mock_network_create(creds, '12345', 'fake_alt_net')
365 self._mock_subnet_create(creds, '12345', 'fake_alt_subnet')
Matthew Treinishbe15b872015-06-29 14:29:30 -0400366 self._mock_router_create('12345', 'fake_alt_router')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700367 creds.get_alt_creds()
piyush11078694aca952015-12-17 12:54:44 +0530368 router_interface_mock.assert_called_once_with('12345',
369 subnet_id='12345')
Matthew Treinishe6723262014-03-14 13:16:52 -0400370 router_interface_mock.reset_mock()
Matthew Treinishe6723262014-03-14 13:16:52 -0400371 # Create admin tenant and networks
Matthew Treinishbe15b872015-06-29 14:29:30 -0400372 self._mock_user_create('123456', 'fake_admin_user')
373 self._mock_tenant_create('123456', 'fake_admin_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700374 self._mock_network_create(creds, '123456', 'fake_admin_net')
375 self._mock_subnet_create(creds, '123456', 'fake_admin_subnet')
Matthew Treinishbe15b872015-06-29 14:29:30 -0400376 self._mock_router_create('123456', 'fake_admin_router')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400377 self._mock_list_roles('123456', 'admin')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700378 creds.get_admin_creds()
Daniel Mellado82c83a52015-12-09 15:16:49 +0000379 self.patch('tempest.services.identity.v2.json.users_client.'
380 'UsersClient.delete_user')
Daniel Melladob04da902015-11-20 17:43:12 +0100381 self.patch('tempest.services.identity.v2.json.tenants_client.'
382 'TenantsClient.delete_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700383 net = mock.patch.object(creds.networks_admin_client,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400384 'delete_network')
Matthew Treinishe6723262014-03-14 13:16:52 -0400385 net_mock = net.start()
John Warren3961acd2015-10-02 14:38:53 -0400386 subnet = mock.patch.object(creds.subnets_admin_client,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400387 'delete_subnet')
Matthew Treinishe6723262014-03-14 13:16:52 -0400388 subnet_mock = subnet.start()
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700389 router = mock.patch.object(creds.network_admin_client,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400390 'delete_router')
Matthew Treinishe6723262014-03-14 13:16:52 -0400391 router_mock = router.start()
392 remove_router_interface_mock = self.patch(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000393 'tempest.services.network.json.network_client.NetworkClient.'
piyush11078694aca952015-12-17 12:54:44 +0530394 'remove_router_interface')
Matthew Treinish96e9e882014-06-09 18:37:19 -0400395 return_values = ({'status': 200}, {'ports': []})
John Warren49c0fe52015-10-22 12:35:54 -0400396 port_list_mock = mock.patch.object(creds.ports_admin_client,
Matthew Treinish96e9e882014-06-09 18:37:19 -0400397 'list_ports',
398 return_value=return_values)
399
Matthew Treinishe6723262014-03-14 13:16:52 -0400400 port_list_mock.start()
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700401 secgroup_list_mock = mock.patch.object(
John Warrenf9606e92015-12-10 12:12:42 -0500402 creds.security_groups_admin_client,
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700403 'list_security_groups',
404 side_effect=side_effect)
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100405 secgroup_list_mock.start()
406
407 return_values = (fake_http.fake_httplib({}, status=204), {})
408 remove_secgroup_mock = self.patch(
John Warrenf9606e92015-12-10 12:12:42 -0500409 'tempest.services.network.json.security_groups_client.'
410 'SecurityGroupsClient.delete', return_value=return_values)
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700411 creds.clear_creds()
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100412 # Verify default security group delete
413 calls = remove_secgroup_mock.mock_calls
414 self.assertEqual(len(calls), 3)
415 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400416 args = list(args)
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100417 self.assertIn('v2.0/security-groups/sg-1234', args)
418 self.assertIn('v2.0/security-groups/sg-12345', args)
419 self.assertIn('v2.0/security-groups/sg-123456', args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400420 # Verify remove router interface calls
421 calls = remove_router_interface_mock.mock_calls
422 self.assertEqual(len(calls), 3)
piyush11078694aca952015-12-17 12:54:44 +0530423 args = map(lambda x: (x[1][0], x[2]), calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400424 args = list(args)
piyush11078694aca952015-12-17 12:54:44 +0530425 self.assertIn(('1234', {'subnet_id': '1234'}), args)
426 self.assertIn(('12345', {'subnet_id': '12345'}), args)
427 self.assertIn(('123456', {'subnet_id': '123456'}), args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400428 # Verify network delete calls
429 calls = net_mock.mock_calls
430 self.assertEqual(len(calls), 3)
431 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400432 args = list(args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400433 self.assertIn('1234', args)
434 self.assertIn('12345', args)
435 self.assertIn('123456', args)
436 # Verify subnet delete calls
437 calls = subnet_mock.mock_calls
438 self.assertEqual(len(calls), 3)
439 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400440 args = list(args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400441 self.assertIn('1234', args)
442 self.assertIn('12345', args)
443 self.assertIn('123456', args)
444 # Verify router delete calls
445 calls = router_mock.mock_calls
446 self.assertEqual(len(calls), 3)
447 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400448 args = list(args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400449 self.assertIn('1234', args)
450 self.assertIn('12345', args)
451 self.assertIn('123456', args)
Matthew Treinish23433a02014-03-17 16:43:50 -0400452
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000453 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400454 def test_network_alt_creation(self, MockRestClient):
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100455 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400456 self._mock_assign_user_role()
457 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400458 self._mock_user_create('1234', 'fake_alt_user')
459 self._mock_tenant_create('1234', 'fake_alt_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700460 self._mock_network_create(creds, '1234', 'fake_alt_net')
461 self._mock_subnet_create(creds, '1234', 'fake_alt_subnet')
Matthew Treinish23433a02014-03-17 16:43:50 -0400462 self._mock_router_create('1234', 'fake_alt_router')
463 router_interface_mock = self.patch(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000464 'tempest.services.network.json.network_client.NetworkClient.'
piyush11078694aca952015-12-17 12:54:44 +0530465 'add_router_interface')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700466 alt_creds = creds.get_alt_creds()
piyush11078694aca952015-12-17 12:54:44 +0530467 router_interface_mock.assert_called_once_with('1234', subnet_id='1234')
Andrea Frittoli (andreaf)9540dfd2015-03-25 17:06:50 -0400468 network = alt_creds.network
469 subnet = alt_creds.subnet
470 router = alt_creds.router
Matthew Treinish23433a02014-03-17 16:43:50 -0400471 self.assertEqual(network['id'], '1234')
472 self.assertEqual(network['name'], 'fake_alt_net')
473 self.assertEqual(subnet['id'], '1234')
474 self.assertEqual(subnet['name'], 'fake_alt_subnet')
475 self.assertEqual(router['id'], '1234')
476 self.assertEqual(router['name'], 'fake_alt_router')
477
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000478 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400479 def test_network_admin_creation(self, MockRestClient):
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100480 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400481 self._mock_assign_user_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400482 self._mock_user_create('1234', 'fake_admin_user')
483 self._mock_tenant_create('1234', 'fake_admin_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700484 self._mock_network_create(creds, '1234', 'fake_admin_net')
485 self._mock_subnet_create(creds, '1234', 'fake_admin_subnet')
Matthew Treinish23433a02014-03-17 16:43:50 -0400486 self._mock_router_create('1234', 'fake_admin_router')
487 router_interface_mock = self.patch(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000488 'tempest.services.network.json.network_client.NetworkClient.'
piyush11078694aca952015-12-17 12:54:44 +0530489 'add_router_interface')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400490 self._mock_list_roles('123456', 'admin')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700491 admin_creds = creds.get_admin_creds()
piyush11078694aca952015-12-17 12:54:44 +0530492 router_interface_mock.assert_called_once_with('1234', subnet_id='1234')
Andrea Frittoli (andreaf)9540dfd2015-03-25 17:06:50 -0400493 network = admin_creds.network
494 subnet = admin_creds.subnet
495 router = admin_creds.router
Matthew Treinish23433a02014-03-17 16:43:50 -0400496 self.assertEqual(network['id'], '1234')
497 self.assertEqual(network['name'], 'fake_admin_net')
498 self.assertEqual(subnet['id'], '1234')
499 self.assertEqual(subnet['name'], 'fake_admin_subnet')
500 self.assertEqual(router['id'], '1234')
501 self.assertEqual(router['name'], 'fake_admin_router')
502
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000503 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400504 def test_no_network_resources(self, MockRestClient):
505 net_dict = {
506 'network': False,
507 'router': False,
508 'subnet': False,
509 'dhcp': False,
510 }
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700511 creds = dynamic_creds.DynamicCredentialProvider(
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100512 network_resources=net_dict,
513 **self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400514 self._mock_assign_user_role()
515 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400516 self._mock_user_create('1234', 'fake_prim_user')
517 self._mock_tenant_create('1234', 'fake_prim_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700518 net = mock.patch.object(creds.networks_admin_client,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400519 'delete_network')
Matthew Treinish23433a02014-03-17 16:43:50 -0400520 net_mock = net.start()
John Warren3961acd2015-10-02 14:38:53 -0400521 subnet = mock.patch.object(creds.subnets_admin_client,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400522 'delete_subnet')
Matthew Treinish23433a02014-03-17 16:43:50 -0400523 subnet_mock = subnet.start()
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700524 router = mock.patch.object(creds.network_admin_client,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400525 'delete_router')
Matthew Treinish23433a02014-03-17 16:43:50 -0400526 router_mock = router.start()
527
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700528 primary_creds = creds.get_primary_creds()
Matthew Treinish23433a02014-03-17 16:43:50 -0400529 self.assertEqual(net_mock.mock_calls, [])
530 self.assertEqual(subnet_mock.mock_calls, [])
531 self.assertEqual(router_mock.mock_calls, [])
Andrea Frittoli (andreaf)9540dfd2015-03-25 17:06:50 -0400532 network = primary_creds.network
533 subnet = primary_creds.subnet
534 router = primary_creds.router
Matthew Treinish23433a02014-03-17 16:43:50 -0400535 self.assertIsNone(network)
536 self.assertIsNone(subnet)
537 self.assertIsNone(router)
538
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000539 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400540 def test_router_without_network(self, MockRestClient):
541 net_dict = {
542 'network': False,
543 'router': True,
544 'subnet': False,
545 'dhcp': False,
546 }
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700547 creds = dynamic_creds.DynamicCredentialProvider(
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100548 network_resources=net_dict,
549 **self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400550 self._mock_assign_user_role()
551 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400552 self._mock_user_create('1234', 'fake_prim_user')
553 self._mock_tenant_create('1234', 'fake_prim_tenant')
554 self.assertRaises(exceptions.InvalidConfiguration,
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700555 creds.get_primary_creds)
Matthew Treinish23433a02014-03-17 16:43:50 -0400556
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000557 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400558 def test_subnet_without_network(self, MockRestClient):
559 net_dict = {
560 'network': False,
561 'router': False,
562 'subnet': True,
563 'dhcp': False,
564 }
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700565 creds = dynamic_creds.DynamicCredentialProvider(
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100566 network_resources=net_dict,
567 **self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400568 self._mock_assign_user_role()
569 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400570 self._mock_user_create('1234', 'fake_prim_user')
571 self._mock_tenant_create('1234', 'fake_prim_tenant')
572 self.assertRaises(exceptions.InvalidConfiguration,
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700573 creds.get_primary_creds)
Matthew Treinish23433a02014-03-17 16:43:50 -0400574
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000575 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400576 def test_dhcp_without_subnet(self, MockRestClient):
577 net_dict = {
578 'network': False,
579 'router': False,
580 'subnet': False,
581 'dhcp': True,
582 }
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700583 creds = dynamic_creds.DynamicCredentialProvider(
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100584 network_resources=net_dict,
585 **self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400586 self._mock_assign_user_role()
587 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400588 self._mock_user_create('1234', 'fake_prim_user')
589 self._mock_tenant_create('1234', 'fake_prim_tenant')
590 self.assertRaises(exceptions.InvalidConfiguration,
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700591 creds.get_primary_creds)