blob: 73e180e69bad84cd7315a59ad17721083c090247 [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
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +010035 fixed_params = {'name': 'test class',
Andrea Frittoli (andreaf)29491a72015-10-13 11:24:17 +010036 'identity_version': 'v2',
37 'admin_role': 'admin'}
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +010038
Matthew Treinishcb058062014-03-13 18:27:07 -040039 def setUp(self):
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -070040 super(TestDynamicCredentialProvider, self).setUp()
Matthew Treinishcb058062014-03-13 18:27:07 -040041 self.useFixture(fake_config.ConfigFixture())
42 self.stubs.Set(config, 'TempestConfigPrivate', fake_config.FakePrivate)
Andrea Frittoli2095d242014-03-20 08:36:23 +000043 self.fake_http = fake_http.fake_httplib2(return_type=200)
Ken'ichi Ohmichi96e72792015-09-09 04:05:41 +000044 self.stubs.Set(json_token_client.TokenClient, 'raw_request',
Andrea Frittoli2095d242014-03-20 08:36:23 +000045 fake_identity._fake_v2_response)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +040046 cfg.CONF.set_default('operator_role', 'FakeRole',
47 group='object-storage')
Andrea Frittoli32d74992015-03-06 17:01:07 +000048 self._mock_list_ec2_credentials('fake_user_id', 'fake_tenant_id')
Matthew Treinishcb058062014-03-13 18:27:07 -040049
50 def test_tempest_client(self):
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +010051 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -070052 self.assertTrue(isinstance(creds.identity_admin_client,
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +000053 json_iden_client.IdentityClient))
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -070054 self.assertTrue(isinstance(creds.network_admin_client,
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +000055 json_network_client.NetworkClient))
Matthew Treinishcb058062014-03-13 18:27:07 -040056
Matthew Treinishcb058062014-03-13 18:27:07 -040057 def _mock_user_create(self, id, name):
58 user_fix = self.useFixture(mockpatch.PatchObject(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +000059 json_iden_client.IdentityClient,
Matthew Treinishcb058062014-03-13 18:27:07 -040060 'create_user',
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +000061 return_value=(service_client.ResponseBody
Anusha Ramineni0cfb4612015-08-24 08:49:10 +053062 (200, {'user': {'id': id, 'name': name}}))))
Matthew Treinishcb058062014-03-13 18:27:07 -040063 return user_fix
64
65 def _mock_tenant_create(self, id, name):
66 tenant_fix = self.useFixture(mockpatch.PatchObject(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +000067 json_iden_client.IdentityClient,
Matthew Treinishcb058062014-03-13 18:27:07 -040068 'create_tenant',
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +000069 return_value=(service_client.ResponseBody
Anusha Ramineni0cfb4612015-08-24 08:49:10 +053070 (200, {'tenant': {'id': id, 'name': name}}))))
Matthew Treinishcb058062014-03-13 18:27:07 -040071 return tenant_fix
72
Andrey Pavlovaf1fb702014-05-29 17:08:10 +040073 def _mock_list_roles(self, id, name):
74 roles_fix = self.useFixture(mockpatch.PatchObject(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +000075 json_iden_client.IdentityClient,
Andrey Pavlovaf1fb702014-05-29 17:08:10 +040076 'list_roles',
Anusha Ramineni0cfb4612015-08-24 08:49:10 +053077 return_value=(service_client.ResponseBody
David Kranzb7afa922014-12-30 10:56:26 -050078 (200,
Anusha Ramineni0cfb4612015-08-24 08:49:10 +053079 {'roles': [{'id': id, 'name': name},
80 {'id': '1', 'name': 'FakeRole'},
81 {'id': '2', 'name': 'Member'}]}))))
Andrey Pavlovaf1fb702014-05-29 17:08:10 +040082 return roles_fix
83
Matthew Treinish976e8df2014-12-19 14:21:54 -050084 def _mock_list_2_roles(self):
85 roles_fix = self.useFixture(mockpatch.PatchObject(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +000086 json_iden_client.IdentityClient,
Matthew Treinish976e8df2014-12-19 14:21:54 -050087 'list_roles',
Anusha Ramineni0cfb4612015-08-24 08:49:10 +053088 return_value=(service_client.ResponseBody
Matthew Treinish976e8df2014-12-19 14:21:54 -050089 (200,
Anusha Ramineni0cfb4612015-08-24 08:49:10 +053090 {'roles': [{'id': '1234', 'name': 'role1'},
Matthew Treinish976e8df2014-12-19 14:21:54 -050091 {'id': '1', 'name': 'FakeRole'},
Anusha Ramineni0cfb4612015-08-24 08:49:10 +053092 {'id': '12345', 'name': 'role2'}]}))))
Matthew Treinish976e8df2014-12-19 14:21:54 -050093 return roles_fix
94
Andrey Pavlovaf1fb702014-05-29 17:08:10 +040095 def _mock_assign_user_role(self):
96 tenant_fix = self.useFixture(mockpatch.PatchObject(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +000097 json_iden_client.IdentityClient,
Andrey Pavlovaf1fb702014-05-29 17:08:10 +040098 'assign_user_role',
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +000099 return_value=(service_client.ResponseBody
David Kranzb7afa922014-12-30 10:56:26 -0500100 (200, {}))))
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400101 return tenant_fix
102
103 def _mock_list_role(self):
104 roles_fix = self.useFixture(mockpatch.PatchObject(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000105 json_iden_client.IdentityClient,
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400106 'list_roles',
Anusha Ramineni0cfb4612015-08-24 08:49:10 +0530107 return_value=(service_client.ResponseBody
108 (200, {'roles': [{'id': '1',
109 'name': 'FakeRole'}]}))))
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400110 return roles_fix
111
Andrea Frittoli32d74992015-03-06 17:01:07 +0000112 def _mock_list_ec2_credentials(self, user_id, tenant_id):
113 ec2_creds_fix = self.useFixture(mockpatch.PatchObject(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000114 json_iden_client.IdentityClient,
Andrea Frittoli32d74992015-03-06 17:01:07 +0000115 'list_user_ec2_credentials',
Anusha Ramineni0cfb4612015-08-24 08:49:10 +0530116 return_value=(service_client.ResponseBody
117 (200, {'credentials': [{
118 'access': 'fake_access',
119 'secret': 'fake_secret',
120 'tenant_id': tenant_id,
121 'user_id': user_id,
122 'trust_id': None}]}))))
Andrea Frittoli32d74992015-03-06 17:01:07 +0000123 return ec2_creds_fix
124
Matthew Treinishe6723262014-03-14 13:16:52 -0400125 def _mock_network_create(self, iso_creds, id, name):
126 net_fix = self.useFixture(mockpatch.PatchObject(
John Warren94d8faf2015-09-15 12:22:24 -0400127 iso_creds.networks_admin_client,
Matthew Treinishe6723262014-03-14 13:16:52 -0400128 'create_network',
David Kranz34e88122014-12-11 15:24:05 -0500129 return_value={'network': {'id': id, 'name': name}}))
Matthew Treinishe6723262014-03-14 13:16:52 -0400130 return net_fix
131
132 def _mock_subnet_create(self, iso_creds, id, name):
133 subnet_fix = self.useFixture(mockpatch.PatchObject(
John Warren3961acd2015-10-02 14:38:53 -0400134 iso_creds.subnets_admin_client,
Matthew Treinishe6723262014-03-14 13:16:52 -0400135 'create_subnet',
David Kranz34e88122014-12-11 15:24:05 -0500136 return_value={'subnet': {'id': id, 'name': name}}))
Matthew Treinishe6723262014-03-14 13:16:52 -0400137 return subnet_fix
138
139 def _mock_router_create(self, id, name):
140 router_fix = self.useFixture(mockpatch.PatchObject(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000141 json_network_client.NetworkClient,
Matthew Treinishe6723262014-03-14 13:16:52 -0400142 'create_router',
David Kranz34e88122014-12-11 15:24:05 -0500143 return_value={'router': {'id': id, 'name': name}}))
Matthew Treinishe6723262014-03-14 13:16:52 -0400144 return router_fix
145
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000146 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinishcb058062014-03-13 18:27:07 -0400147 def test_primary_creds(self, MockRestClient):
148 cfg.CONF.set_default('neutron', False, 'service_available')
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100149 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400150 self._mock_assign_user_role()
151 self._mock_list_role()
Matthew Treinishcb058062014-03-13 18:27:07 -0400152 self._mock_tenant_create('1234', 'fake_prim_tenant')
153 self._mock_user_create('1234', 'fake_prim_user')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700154 primary_creds = creds.get_primary_creds()
Andrea Frittolifc315902014-03-20 09:21:44 +0000155 self.assertEqual(primary_creds.username, 'fake_prim_user')
156 self.assertEqual(primary_creds.tenant_name, 'fake_prim_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000157 # Verify IDs
158 self.assertEqual(primary_creds.tenant_id, '1234')
159 self.assertEqual(primary_creds.user_id, '1234')
Matthew Treinishcb058062014-03-13 18:27:07 -0400160
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000161 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinishcb058062014-03-13 18:27:07 -0400162 def test_admin_creds(self, MockRestClient):
163 cfg.CONF.set_default('neutron', False, 'service_available')
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100164 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400165 self._mock_list_roles('1234', 'admin')
Matthew Treinishcb058062014-03-13 18:27:07 -0400166 self._mock_user_create('1234', 'fake_admin_user')
167 self._mock_tenant_create('1234', 'fake_admin_tenant')
Matthew Treinishcb058062014-03-13 18:27:07 -0400168
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000169 user_mock = mock.patch.object(json_iden_client.IdentityClient,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400170 'assign_user_role')
Matthew Treinishcb058062014-03-13 18:27:07 -0400171 user_mock.start()
172 self.addCleanup(user_mock.stop)
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000173 with mock.patch.object(json_iden_client.IdentityClient,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400174 'assign_user_role') as user_mock:
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700175 admin_creds = creds.get_admin_creds()
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400176 user_mock.assert_has_calls([
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400177 mock.call('1234', '1234', '1234')])
Andrea Frittolifc315902014-03-20 09:21:44 +0000178 self.assertEqual(admin_creds.username, 'fake_admin_user')
179 self.assertEqual(admin_creds.tenant_name, 'fake_admin_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000180 # Verify IDs
181 self.assertEqual(admin_creds.tenant_id, '1234')
182 self.assertEqual(admin_creds.user_id, '1234')
Matthew Treinishcb058062014-03-13 18:27:07 -0400183
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000184 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish976e8df2014-12-19 14:21:54 -0500185 def test_role_creds(self, MockRestClient):
186 cfg.CONF.set_default('neutron', False, 'service_available')
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100187 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Matthew Treinish976e8df2014-12-19 14:21:54 -0500188 self._mock_list_2_roles()
189 self._mock_user_create('1234', 'fake_role_user')
190 self._mock_tenant_create('1234', 'fake_role_tenant')
191
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000192 user_mock = mock.patch.object(json_iden_client.IdentityClient,
Matthew Treinish976e8df2014-12-19 14:21:54 -0500193 'assign_user_role')
194 user_mock.start()
195 self.addCleanup(user_mock.stop)
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000196 with mock.patch.object(json_iden_client.IdentityClient,
Matthew Treinish976e8df2014-12-19 14:21:54 -0500197 'assign_user_role') as user_mock:
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700198 role_creds = creds.get_creds_by_roles(
199 roles=['role1', 'role2'])
Matthew Treinish976e8df2014-12-19 14:21:54 -0500200 calls = user_mock.mock_calls
201 # Assert that the role creation is called with the 2 specified roles
Matthew Treinish8f268292015-02-24 20:01:36 -0500202 self.assertEqual(len(calls), 2)
Matthew Treinish976e8df2014-12-19 14:21:54 -0500203 args = map(lambda x: x[1], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400204 args = list(args)
Matthew Treinish976e8df2014-12-19 14:21:54 -0500205 self.assertIn(('1234', '1234', '1234'), args)
206 self.assertIn(('1234', '1234', '12345'), args)
207 self.assertEqual(role_creds.username, 'fake_role_user')
208 self.assertEqual(role_creds.tenant_name, 'fake_role_tenant')
209 # Verify IDs
210 self.assertEqual(role_creds.tenant_id, '1234')
211 self.assertEqual(role_creds.user_id, '1234')
212
213 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinishcb058062014-03-13 18:27:07 -0400214 def test_all_cred_cleanup(self, MockRestClient):
215 cfg.CONF.set_default('neutron', False, 'service_available')
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100216 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400217 self._mock_assign_user_role()
Matthew Treinishbe15b872015-06-29 14:29:30 -0400218 self._mock_list_role()
219 self._mock_tenant_create('1234', 'fake_prim_tenant')
220 self._mock_user_create('1234', 'fake_prim_user')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700221 creds.get_primary_creds()
Matthew Treinishbe15b872015-06-29 14:29:30 -0400222 self._mock_tenant_create('12345', 'fake_alt_tenant')
223 self._mock_user_create('12345', 'fake_alt_user')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700224 creds.get_alt_creds()
Matthew Treinishbe15b872015-06-29 14:29:30 -0400225 self._mock_tenant_create('123456', 'fake_admin_tenant')
226 self._mock_user_create('123456', 'fake_admin_user')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400227 self._mock_list_roles('123456', 'admin')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700228 creds.get_admin_creds()
Matthew Treinishcb058062014-03-13 18:27:07 -0400229 user_mock = self.patch(
Jamie Lennoxc429e6a2015-02-24 10:42:42 +1100230 'tempest.services.identity.v2.json.identity_client.'
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000231 'IdentityClient.delete_user')
Matthew Treinishcb058062014-03-13 18:27:07 -0400232 tenant_mock = self.patch(
Jamie Lennoxc429e6a2015-02-24 10:42:42 +1100233 'tempest.services.identity.v2.json.identity_client.'
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000234 'IdentityClient.delete_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700235 creds.clear_creds()
Matthew Treinishcb058062014-03-13 18:27:07 -0400236 # Verify user delete calls
237 calls = user_mock.mock_calls
238 self.assertEqual(len(calls), 3)
239 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400240 args = list(args)
Matthew Treinishcb058062014-03-13 18:27:07 -0400241 self.assertIn('1234', args)
242 self.assertIn('12345', args)
243 self.assertIn('123456', args)
244 # Verify tenant delete calls
245 calls = tenant_mock.mock_calls
246 self.assertEqual(len(calls), 3)
247 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400248 args = list(args)
Matthew Treinishcb058062014-03-13 18:27:07 -0400249 self.assertIn('1234', args)
250 self.assertIn('12345', args)
251 self.assertIn('123456', args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400252
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000253 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinishe6723262014-03-14 13:16:52 -0400254 def test_alt_creds(self, MockRestClient):
255 cfg.CONF.set_default('neutron', False, 'service_available')
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100256 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400257 self._mock_assign_user_role()
258 self._mock_list_role()
Matthew Treinishe6723262014-03-14 13:16:52 -0400259 self._mock_user_create('1234', 'fake_alt_user')
260 self._mock_tenant_create('1234', 'fake_alt_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700261 alt_creds = creds.get_alt_creds()
Andrea Frittolifc315902014-03-20 09:21:44 +0000262 self.assertEqual(alt_creds.username, 'fake_alt_user')
263 self.assertEqual(alt_creds.tenant_name, 'fake_alt_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000264 # Verify IDs
265 self.assertEqual(alt_creds.tenant_id, '1234')
266 self.assertEqual(alt_creds.user_id, '1234')
Matthew Treinishe6723262014-03-14 13:16:52 -0400267
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000268 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish2219d382015-04-24 10:33:04 -0400269 def test_no_network_creation_with_config_set(self, MockRestClient):
270 cfg.CONF.set_default('create_isolated_networks', False, group='auth')
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100271 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Matthew Treinish2219d382015-04-24 10:33:04 -0400272 self._mock_assign_user_role()
273 self._mock_list_role()
274 self._mock_user_create('1234', 'fake_prim_user')
275 self._mock_tenant_create('1234', 'fake_prim_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700276 net = mock.patch.object(creds.networks_admin_client,
Matthew Treinish2219d382015-04-24 10:33:04 -0400277 'delete_network')
278 net_mock = net.start()
John Warren3961acd2015-10-02 14:38:53 -0400279 subnet = mock.patch.object(creds.subnets_admin_client,
Matthew Treinish2219d382015-04-24 10:33:04 -0400280 'delete_subnet')
281 subnet_mock = subnet.start()
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700282 router = mock.patch.object(creds.network_admin_client,
Matthew Treinish2219d382015-04-24 10:33:04 -0400283 'delete_router')
284 router_mock = router.start()
285
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700286 primary_creds = creds.get_primary_creds()
Matthew Treinish2219d382015-04-24 10:33:04 -0400287 self.assertEqual(net_mock.mock_calls, [])
288 self.assertEqual(subnet_mock.mock_calls, [])
289 self.assertEqual(router_mock.mock_calls, [])
290 network = primary_creds.network
291 subnet = primary_creds.subnet
292 router = primary_creds.router
293 self.assertIsNone(network)
294 self.assertIsNone(subnet)
295 self.assertIsNone(router)
296
297 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinishe6723262014-03-14 13:16:52 -0400298 def test_network_creation(self, MockRestClient):
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100299 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400300 self._mock_assign_user_role()
301 self._mock_list_role()
Matthew Treinishe6723262014-03-14 13:16:52 -0400302 self._mock_user_create('1234', 'fake_prim_user')
303 self._mock_tenant_create('1234', 'fake_prim_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700304 self._mock_network_create(creds, '1234', 'fake_net')
305 self._mock_subnet_create(creds, '1234', 'fake_subnet')
Matthew Treinishe6723262014-03-14 13:16:52 -0400306 self._mock_router_create('1234', 'fake_router')
307 router_interface_mock = self.patch(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000308 'tempest.services.network.json.network_client.NetworkClient.'
Matthew Treinishe6723262014-03-14 13:16:52 -0400309 'add_router_interface_with_subnet_id')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700310 primary_creds = creds.get_primary_creds()
Matthew Treinishe6723262014-03-14 13:16:52 -0400311 router_interface_mock.called_once_with('1234', '1234')
Andrea Frittoli (andreaf)9540dfd2015-03-25 17:06:50 -0400312 network = primary_creds.network
313 subnet = primary_creds.subnet
314 router = primary_creds.router
Matthew Treinishe6723262014-03-14 13:16:52 -0400315 self.assertEqual(network['id'], '1234')
316 self.assertEqual(network['name'], 'fake_net')
317 self.assertEqual(subnet['id'], '1234')
318 self.assertEqual(subnet['name'], 'fake_subnet')
319 self.assertEqual(router['id'], '1234')
320 self.assertEqual(router['name'], 'fake_router')
321
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000322 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinishe6723262014-03-14 13:16:52 -0400323 def test_network_cleanup(self, MockRestClient):
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100324 def side_effect(**args):
David Kranz34e88122014-12-11 15:24:05 -0500325 return {"security_groups": [{"tenant_id": args['tenant_id'],
326 "name": args['name'],
327 "description": args['name'],
328 "security_group_rules": [],
329 "id": "sg-%s" % args['tenant_id']}]}
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100330 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Matthew Treinishe6723262014-03-14 13:16:52 -0400331 # Create primary tenant and network
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400332 self._mock_assign_user_role()
Matthew Treinishbe15b872015-06-29 14:29:30 -0400333 self._mock_list_role()
334 self._mock_user_create('1234', 'fake_prim_user')
335 self._mock_tenant_create('1234', 'fake_prim_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700336 self._mock_network_create(creds, '1234', 'fake_net')
337 self._mock_subnet_create(creds, '1234', 'fake_subnet')
Matthew Treinishbe15b872015-06-29 14:29:30 -0400338 self._mock_router_create('1234', 'fake_router')
Matthew Treinishe6723262014-03-14 13:16:52 -0400339 router_interface_mock = self.patch(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000340 'tempest.services.network.json.network_client.NetworkClient.'
Matthew Treinishe6723262014-03-14 13:16:52 -0400341 'add_router_interface_with_subnet_id')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700342 creds.get_primary_creds()
Matthew Treinishe6723262014-03-14 13:16:52 -0400343 router_interface_mock.called_once_with('1234', '1234')
344 router_interface_mock.reset_mock()
Matthew Treinishe6723262014-03-14 13:16:52 -0400345 # Create alternate tenant and network
Matthew Treinishbe15b872015-06-29 14:29:30 -0400346 self._mock_user_create('12345', 'fake_alt_user')
347 self._mock_tenant_create('12345', 'fake_alt_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700348 self._mock_network_create(creds, '12345', 'fake_alt_net')
349 self._mock_subnet_create(creds, '12345', 'fake_alt_subnet')
Matthew Treinishbe15b872015-06-29 14:29:30 -0400350 self._mock_router_create('12345', 'fake_alt_router')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700351 creds.get_alt_creds()
Matthew Treinishe6723262014-03-14 13:16:52 -0400352 router_interface_mock.called_once_with('12345', '12345')
353 router_interface_mock.reset_mock()
Matthew Treinishe6723262014-03-14 13:16:52 -0400354 # Create admin tenant and networks
Matthew Treinishbe15b872015-06-29 14:29:30 -0400355 self._mock_user_create('123456', 'fake_admin_user')
356 self._mock_tenant_create('123456', 'fake_admin_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700357 self._mock_network_create(creds, '123456', 'fake_admin_net')
358 self._mock_subnet_create(creds, '123456', 'fake_admin_subnet')
Matthew Treinishbe15b872015-06-29 14:29:30 -0400359 self._mock_router_create('123456', 'fake_admin_router')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400360 self._mock_list_roles('123456', 'admin')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700361 creds.get_admin_creds()
Jamie Lennoxc429e6a2015-02-24 10:42:42 +1100362 self.patch('tempest.services.identity.v2.json.identity_client.'
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000363 'IdentityClient.delete_user')
Jamie Lennoxc429e6a2015-02-24 10:42:42 +1100364 self.patch('tempest.services.identity.v2.json.identity_client.'
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000365 'IdentityClient.delete_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700366 net = mock.patch.object(creds.networks_admin_client,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400367 'delete_network')
Matthew Treinishe6723262014-03-14 13:16:52 -0400368 net_mock = net.start()
John Warren3961acd2015-10-02 14:38:53 -0400369 subnet = mock.patch.object(creds.subnets_admin_client,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400370 'delete_subnet')
Matthew Treinishe6723262014-03-14 13:16:52 -0400371 subnet_mock = subnet.start()
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700372 router = mock.patch.object(creds.network_admin_client,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400373 'delete_router')
Matthew Treinishe6723262014-03-14 13:16:52 -0400374 router_mock = router.start()
375 remove_router_interface_mock = self.patch(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000376 'tempest.services.network.json.network_client.NetworkClient.'
Matthew Treinishe6723262014-03-14 13:16:52 -0400377 'remove_router_interface_with_subnet_id')
Matthew Treinish96e9e882014-06-09 18:37:19 -0400378 return_values = ({'status': 200}, {'ports': []})
John Warren49c0fe52015-10-22 12:35:54 -0400379 port_list_mock = mock.patch.object(creds.ports_admin_client,
Matthew Treinish96e9e882014-06-09 18:37:19 -0400380 'list_ports',
381 return_value=return_values)
382
Matthew Treinishe6723262014-03-14 13:16:52 -0400383 port_list_mock.start()
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700384 secgroup_list_mock = mock.patch.object(
385 creds.network_admin_client,
386 'list_security_groups',
387 side_effect=side_effect)
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100388 secgroup_list_mock.start()
389
390 return_values = (fake_http.fake_httplib({}, status=204), {})
391 remove_secgroup_mock = self.patch(
Ken'ichi Ohmichi88f12c12014-12-24 01:02:58 +0000392 'tempest.services.network.json.network_client.'
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000393 'NetworkClient.delete', return_value=return_values)
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700394 creds.clear_creds()
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100395 # Verify default security group delete
396 calls = remove_secgroup_mock.mock_calls
397 self.assertEqual(len(calls), 3)
398 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400399 args = list(args)
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100400 self.assertIn('v2.0/security-groups/sg-1234', args)
401 self.assertIn('v2.0/security-groups/sg-12345', args)
402 self.assertIn('v2.0/security-groups/sg-123456', args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400403 # Verify remove router interface calls
404 calls = remove_router_interface_mock.mock_calls
405 self.assertEqual(len(calls), 3)
406 args = map(lambda x: x[1], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400407 args = list(args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400408 self.assertIn(('1234', '1234'), args)
409 self.assertIn(('12345', '12345'), args)
410 self.assertIn(('123456', '123456'), args)
411 # Verify network delete calls
412 calls = net_mock.mock_calls
413 self.assertEqual(len(calls), 3)
414 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400415 args = list(args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400416 self.assertIn('1234', args)
417 self.assertIn('12345', args)
418 self.assertIn('123456', args)
419 # Verify subnet delete calls
420 calls = subnet_mock.mock_calls
421 self.assertEqual(len(calls), 3)
422 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400423 args = list(args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400424 self.assertIn('1234', args)
425 self.assertIn('12345', args)
426 self.assertIn('123456', args)
427 # Verify router delete calls
428 calls = router_mock.mock_calls
429 self.assertEqual(len(calls), 3)
430 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400431 args = list(args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400432 self.assertIn('1234', args)
433 self.assertIn('12345', args)
434 self.assertIn('123456', args)
Matthew Treinish23433a02014-03-17 16:43:50 -0400435
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000436 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400437 def test_network_alt_creation(self, MockRestClient):
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100438 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400439 self._mock_assign_user_role()
440 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400441 self._mock_user_create('1234', 'fake_alt_user')
442 self._mock_tenant_create('1234', 'fake_alt_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700443 self._mock_network_create(creds, '1234', 'fake_alt_net')
444 self._mock_subnet_create(creds, '1234', 'fake_alt_subnet')
Matthew Treinish23433a02014-03-17 16:43:50 -0400445 self._mock_router_create('1234', 'fake_alt_router')
446 router_interface_mock = self.patch(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000447 'tempest.services.network.json.network_client.NetworkClient.'
Matthew Treinish23433a02014-03-17 16:43:50 -0400448 'add_router_interface_with_subnet_id')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700449 alt_creds = creds.get_alt_creds()
Matthew Treinish23433a02014-03-17 16:43:50 -0400450 router_interface_mock.called_once_with('1234', '1234')
Andrea Frittoli (andreaf)9540dfd2015-03-25 17:06:50 -0400451 network = alt_creds.network
452 subnet = alt_creds.subnet
453 router = alt_creds.router
Matthew Treinish23433a02014-03-17 16:43:50 -0400454 self.assertEqual(network['id'], '1234')
455 self.assertEqual(network['name'], 'fake_alt_net')
456 self.assertEqual(subnet['id'], '1234')
457 self.assertEqual(subnet['name'], 'fake_alt_subnet')
458 self.assertEqual(router['id'], '1234')
459 self.assertEqual(router['name'], 'fake_alt_router')
460
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000461 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400462 def test_network_admin_creation(self, MockRestClient):
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100463 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400464 self._mock_assign_user_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400465 self._mock_user_create('1234', 'fake_admin_user')
466 self._mock_tenant_create('1234', 'fake_admin_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700467 self._mock_network_create(creds, '1234', 'fake_admin_net')
468 self._mock_subnet_create(creds, '1234', 'fake_admin_subnet')
Matthew Treinish23433a02014-03-17 16:43:50 -0400469 self._mock_router_create('1234', 'fake_admin_router')
470 router_interface_mock = self.patch(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000471 'tempest.services.network.json.network_client.NetworkClient.'
Matthew Treinish23433a02014-03-17 16:43:50 -0400472 'add_router_interface_with_subnet_id')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400473 self._mock_list_roles('123456', 'admin')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700474 admin_creds = creds.get_admin_creds()
Matthew Treinish23433a02014-03-17 16:43:50 -0400475 router_interface_mock.called_once_with('1234', '1234')
Andrea Frittoli (andreaf)9540dfd2015-03-25 17:06:50 -0400476 network = admin_creds.network
477 subnet = admin_creds.subnet
478 router = admin_creds.router
Matthew Treinish23433a02014-03-17 16:43:50 -0400479 self.assertEqual(network['id'], '1234')
480 self.assertEqual(network['name'], 'fake_admin_net')
481 self.assertEqual(subnet['id'], '1234')
482 self.assertEqual(subnet['name'], 'fake_admin_subnet')
483 self.assertEqual(router['id'], '1234')
484 self.assertEqual(router['name'], 'fake_admin_router')
485
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000486 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400487 def test_no_network_resources(self, MockRestClient):
488 net_dict = {
489 'network': False,
490 'router': False,
491 'subnet': False,
492 'dhcp': False,
493 }
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700494 creds = dynamic_creds.DynamicCredentialProvider(
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100495 network_resources=net_dict,
496 **self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400497 self._mock_assign_user_role()
498 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400499 self._mock_user_create('1234', 'fake_prim_user')
500 self._mock_tenant_create('1234', 'fake_prim_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700501 net = mock.patch.object(creds.networks_admin_client,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400502 'delete_network')
Matthew Treinish23433a02014-03-17 16:43:50 -0400503 net_mock = net.start()
John Warren3961acd2015-10-02 14:38:53 -0400504 subnet = mock.patch.object(creds.subnets_admin_client,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400505 'delete_subnet')
Matthew Treinish23433a02014-03-17 16:43:50 -0400506 subnet_mock = subnet.start()
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700507 router = mock.patch.object(creds.network_admin_client,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400508 'delete_router')
Matthew Treinish23433a02014-03-17 16:43:50 -0400509 router_mock = router.start()
510
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700511 primary_creds = creds.get_primary_creds()
Matthew Treinish23433a02014-03-17 16:43:50 -0400512 self.assertEqual(net_mock.mock_calls, [])
513 self.assertEqual(subnet_mock.mock_calls, [])
514 self.assertEqual(router_mock.mock_calls, [])
Andrea Frittoli (andreaf)9540dfd2015-03-25 17:06:50 -0400515 network = primary_creds.network
516 subnet = primary_creds.subnet
517 router = primary_creds.router
Matthew Treinish23433a02014-03-17 16:43:50 -0400518 self.assertIsNone(network)
519 self.assertIsNone(subnet)
520 self.assertIsNone(router)
521
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000522 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400523 def test_router_without_network(self, MockRestClient):
524 net_dict = {
525 'network': False,
526 'router': True,
527 'subnet': False,
528 'dhcp': False,
529 }
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700530 creds = dynamic_creds.DynamicCredentialProvider(
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100531 network_resources=net_dict,
532 **self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400533 self._mock_assign_user_role()
534 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400535 self._mock_user_create('1234', 'fake_prim_user')
536 self._mock_tenant_create('1234', 'fake_prim_tenant')
537 self.assertRaises(exceptions.InvalidConfiguration,
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700538 creds.get_primary_creds)
Matthew Treinish23433a02014-03-17 16:43:50 -0400539
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000540 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400541 def test_subnet_without_network(self, MockRestClient):
542 net_dict = {
543 'network': False,
544 'router': False,
545 'subnet': True,
546 'dhcp': False,
547 }
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700548 creds = dynamic_creds.DynamicCredentialProvider(
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100549 network_resources=net_dict,
550 **self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400551 self._mock_assign_user_role()
552 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400553 self._mock_user_create('1234', 'fake_prim_user')
554 self._mock_tenant_create('1234', 'fake_prim_tenant')
555 self.assertRaises(exceptions.InvalidConfiguration,
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700556 creds.get_primary_creds)
Matthew Treinish23433a02014-03-17 16:43:50 -0400557
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000558 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400559 def test_dhcp_without_subnet(self, MockRestClient):
560 net_dict = {
561 'network': False,
562 'router': False,
563 'subnet': False,
564 'dhcp': True,
565 }
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700566 creds = dynamic_creds.DynamicCredentialProvider(
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100567 network_resources=net_dict,
568 **self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400569 self._mock_assign_user_role()
570 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400571 self._mock_user_create('1234', 'fake_prim_user')
572 self._mock_tenant_create('1234', 'fake_prim_tenant')
573 self.assertRaises(exceptions.InvalidConfiguration,
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700574 creds.get_primary_creds)