blob: 56bc96c061f2944c07711c0e79d79ac1df4409db [file] [log] [blame]
Joe H. Rahmefe75f932015-03-19 11:30:05 +01001#!/usr/bin/env python
2#
3# Licensed under the Apache License, Version 2.0 (the "License"); you may
4# not use this file except in compliance with the License. You may obtain
5# a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12# License for the specific language governing permissions and limitations
13# under the License.
14
15import mock
16from oslotest import mockpatch
17from tempest_lib import exceptions as lib_exc
18
19from tempest.cmd import javelin
20from tempest.tests import base
21
22
23class JavelinUnitTest(base.TestCase):
24
25 def setUp(self):
26 super(JavelinUnitTest, self).setUp()
27 javelin.setup_logging()
28 self.fake_client = mock.MagicMock()
29 self.fake_object = mock.MagicMock()
30
Joe H. Rahmeb8658f42015-05-22 14:39:37 +020031 def test_load_resources(self):
32 with mock.patch('six.moves.builtins.open', mock.mock_open(),
33 create=True) as open_mock:
34 with mock.patch('yaml.load', mock.MagicMock(),
35 create=True) as load_mock:
36 javelin.load_resources(self.fake_object)
37 load_mock.assert_called_once_with(open_mock(self.fake_object))
38
39 def test_keystone_admin(self):
40 self.useFixture(mockpatch.PatchObject(javelin, "OSClient"))
41 javelin.OPTS = self.fake_object
42 javelin.keystone_admin()
43 javelin.OSClient.assert_called_once_with(
44 self.fake_object.os_username,
45 self.fake_object.os_password,
46 self.fake_object.os_tenant_name)
47
48 def test_client_for_user(self):
49 fake_user = mock.MagicMock()
50 javelin.USERS = {fake_user['name']: fake_user}
51 self.useFixture(mockpatch.PatchObject(javelin, "OSClient"))
52 javelin.client_for_user(fake_user['name'])
53 javelin.OSClient.assert_called_once_with(
54 fake_user['name'], fake_user['pass'], fake_user['tenant'])
55
56 def test_client_for_non_existing_user(self):
57 fake_non_existing_user = self.fake_object
58 fake_user = mock.MagicMock()
59 javelin.USERS = {fake_user['name']: fake_user}
60 self.useFixture(mockpatch.PatchObject(javelin, "OSClient"))
61 javelin.client_for_user(fake_non_existing_user['name'])
62 self.assertFalse(javelin.OSClient.called)
63
Joe H. Rahme5a4da642015-06-09 17:24:12 +020064 def test_attach_volumes(self):
65 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
66 return_value=self.fake_client))
67
68 self.useFixture(mockpatch.PatchObject(
69 javelin, "_get_volume_by_name",
70 return_value=self.fake_object.volume))
71
72 self.useFixture(mockpatch.PatchObject(
73 javelin, "_get_server_by_name",
74 return_value=self.fake_object.server))
75
76 javelin.attach_volumes([self.fake_object])
77
78 mocked_function = self.fake_client.volumes.attach_volume
79 mocked_function.assert_called_once_with(
80 self.fake_object.volume['id'],
81 self.fake_object.server['id'],
82 self.fake_object['device'])
83
Joe H. Rahmefe75f932015-03-19 11:30:05 +010084
85class TestCreateResources(JavelinUnitTest):
86 def test_create_tenants(self):
87
Daniel Melladob04da902015-11-20 17:43:12 +010088 self.fake_client.tenants.list_tenants.return_value = {'tenants': []}
Joe H. Rahmefe75f932015-03-19 11:30:05 +010089 self.useFixture(mockpatch.PatchObject(javelin, "keystone_admin",
90 return_value=self.fake_client))
91
92 javelin.create_tenants([self.fake_object['name']])
93
Daniel Melladob04da902015-11-20 17:43:12 +010094 mocked_function = self.fake_client.tenants.create_tenant
Joe H. Rahmefe75f932015-03-19 11:30:05 +010095 mocked_function.assert_called_once_with(self.fake_object['name'])
96
97 def test_create_duplicate_tenant(self):
Daniel Melladob04da902015-11-20 17:43:12 +010098 self.fake_client.tenants.list_tenants.return_value = {'tenants': [
John Warrenacf00512015-08-06 16:13:58 -040099 {'name': self.fake_object['name']}]}
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100100 self.useFixture(mockpatch.PatchObject(javelin, "keystone_admin",
101 return_value=self.fake_client))
102
103 javelin.create_tenants([self.fake_object['name']])
104
Daniel Melladob04da902015-11-20 17:43:12 +0100105 mocked_function = self.fake_client.tenants.create_tenant
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100106 self.assertFalse(mocked_function.called)
107
108 def test_create_users(self):
Ken'ichi Ohmichi6ea3f982015-11-09 12:41:13 +0000109 self.useFixture(mockpatch.Patch(
110 'tempest.common.identity.get_tenant_by_name',
111 return_value=self.fake_object['tenant']))
Ken'ichi Ohmichid9fed312015-11-09 13:05:32 +0000112 self.useFixture(mockpatch.Patch(
113 'tempest.common.identity.get_user_by_username',
114 side_effect=lib_exc.NotFound("user is not found")))
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100115 self.useFixture(mockpatch.PatchObject(javelin, "keystone_admin",
116 return_value=self.fake_client))
117
118 javelin.create_users([self.fake_object])
119
120 fake_tenant_id = self.fake_object['tenant']['id']
121 fake_email = "%s@%s" % (self.fake_object['user'], fake_tenant_id)
122 mocked_function = self.fake_client.identity.create_user
123 mocked_function.assert_called_once_with(self.fake_object['name'],
124 self.fake_object['password'],
125 fake_tenant_id,
126 fake_email,
127 enabled=True)
128
129 def test_create_user_missing_tenant(self):
Ken'ichi Ohmichi6ea3f982015-11-09 12:41:13 +0000130 self.useFixture(mockpatch.Patch(
131 'tempest.common.identity.get_tenant_by_name',
132 side_effect=lib_exc.NotFound("tenant is not found")))
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100133 self.useFixture(mockpatch.PatchObject(javelin, "keystone_admin",
134 return_value=self.fake_client))
135
136 javelin.create_users([self.fake_object])
137
138 mocked_function = self.fake_client.identity.create_user
139 self.assertFalse(mocked_function.called)
140
141 def test_create_objects(self):
142
143 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
144 return_value=self.fake_client))
145 self.useFixture(mockpatch.PatchObject(javelin, "_assign_swift_role"))
146 self.useFixture(mockpatch.PatchObject(javelin, "_file_contents",
147 return_value=self.fake_object.content))
148
149 javelin.create_objects([self.fake_object])
150
151 mocked_function = self.fake_client.containers.create_container
152 mocked_function.assert_called_once_with(self.fake_object['container'])
153 mocked_function = self.fake_client.objects.create_object
154 mocked_function.assert_called_once_with(self.fake_object['container'],
155 self.fake_object['name'],
156 self.fake_object.content)
157
158 def test_create_images(self):
159 self.fake_client.images.create_image.return_value = \
160 self.fake_object['body']
161
162 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
163 return_value=self.fake_client))
164 self.useFixture(mockpatch.PatchObject(javelin, "_get_image_by_name",
165 return_value=[]))
166 self.useFixture(mockpatch.PatchObject(javelin, "_resolve_image",
167 return_value=(None, None)))
168
169 with mock.patch('six.moves.builtins.open', mock.mock_open(),
170 create=True) as open_mock:
171 javelin.create_images([self.fake_object])
172
173 mocked_function = self.fake_client.images.create_image
174 mocked_function.assert_called_once_with(self.fake_object['name'],
175 self.fake_object['format'],
176 self.fake_object['format'])
177
Ken'ichi Ohmichi66494e92015-06-08 04:28:10 +0000178 mocked_function = self.fake_client.images.store_image_file
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100179 fake_image_id = self.fake_object['body'].get('id')
180 mocked_function.assert_called_once_with(fake_image_id, open_mock())
181
182 def test_create_networks(self):
183 self.fake_client.networks.list_networks.return_value = {
184 'networks': []}
185
186 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
187 return_value=self.fake_client))
188
189 javelin.create_networks([self.fake_object])
190
191 mocked_function = self.fake_client.networks.create_network
192 mocked_function.assert_called_once_with(name=self.fake_object['name'])
193
194 def test_create_subnet(self):
195
196 fake_network = self.fake_object['network']
197
198 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
199 return_value=self.fake_client))
200 self.useFixture(mockpatch.PatchObject(javelin, "_get_resource_by_name",
201 return_value=fake_network))
202
203 fake_netaddr = mock.MagicMock()
204 self.useFixture(mockpatch.PatchObject(javelin, "netaddr",
205 return_value=fake_netaddr))
206 fake_version = javelin.netaddr.IPNetwork().version
207
208 javelin.create_subnets([self.fake_object])
209
210 mocked_function = self.fake_client.networks.create_subnet
211 mocked_function.assert_called_once_with(network_id=fake_network['id'],
212 cidr=self.fake_object['range'],
213 name=self.fake_object['name'],
214 ip_version=fake_version)
215
Joe H. Rahme5a4da642015-06-09 17:24:12 +0200216 def test_create_volumes(self):
217
218 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
219 return_value=self.fake_client))
220 self.useFixture(mockpatch.PatchObject(javelin, "_get_volume_by_name",
221 return_value=None))
222 self.fake_client.volumes.create_volume.return_value = \
223 self.fake_object.body
224
225 javelin.create_volumes([self.fake_object])
226
227 mocked_function = self.fake_client.volumes.create_volume
228 mocked_function.assert_called_once_with(
229 size=self.fake_object['gb'],
230 display_name=self.fake_object['name'])
231 mocked_function = self.fake_client.volumes.wait_for_volume_status
232 mocked_function.assert_called_once_with(
John Warren6177c9e2015-08-19 20:00:17 +0000233 self.fake_object.body['volume']['id'],
Joe H. Rahme5a4da642015-06-09 17:24:12 +0200234 'available')
235
236 def test_create_volume_existing(self):
237 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
238 return_value=self.fake_client))
239 self.useFixture(mockpatch.PatchObject(javelin, "_get_volume_by_name",
240 return_value=self.fake_object))
241 self.fake_client.volumes.create_volume.return_value = \
242 self.fake_object.body
243
244 javelin.create_volumes([self.fake_object])
245
246 mocked_function = self.fake_client.volumes.create_volume
247 self.assertFalse(mocked_function.called)
248 mocked_function = self.fake_client.volumes.wait_for_volume_status
249 self.assertFalse(mocked_function.called)
250
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200251 def test_create_router(self):
252
253 self.fake_client.networks.list_routers.return_value = {'routers': []}
254 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
255 return_value=self.fake_client))
256
257 javelin.create_routers([self.fake_object])
258
259 mocked_function = self.fake_client.networks.create_router
260 mocked_function.assert_called_once_with(self.fake_object['name'])
261
262 def test_create_router_existing(self):
263 self.fake_client.networks.list_routers.return_value = {
264 'routers': [self.fake_object]}
265 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
266 return_value=self.fake_client))
267
268 javelin.create_routers([self.fake_object])
269
270 mocked_function = self.fake_client.networks.create_router
271 self.assertFalse(mocked_function.called)
272
273 def test_create_secgroup(self):
274 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
275 return_value=self.fake_client))
ghanshyamb610b772015-08-24 17:29:38 +0900276 self.fake_client.secgroups.list_security_groups.return_value = (
277 {'security_groups': []})
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200278 self.fake_client.secgroups.create_security_group.return_value = \
ghanshyamb610b772015-08-24 17:29:38 +0900279 {'security_group': {'id': self.fake_object['secgroup_id']}}
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200280
281 javelin.create_secgroups([self.fake_object])
282
283 mocked_function = self.fake_client.secgroups.create_security_group
284 mocked_function.assert_called_once_with(
Ken'ichi Ohmichi34563cc2015-07-21 00:53:17 +0000285 name=self.fake_object['name'],
286 description=self.fake_object['description'])
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200287
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100288
289class TestDestroyResources(JavelinUnitTest):
290
291 def test_destroy_tenants(self):
292
293 fake_tenant = self.fake_object['tenant']
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200294 fake_auth = self.fake_client
Ken'ichi Ohmichi6ea3f982015-11-09 12:41:13 +0000295 self.useFixture(mockpatch.Patch(
296 'tempest.common.identity.get_tenant_by_name',
297 return_value=fake_tenant))
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100298 self.useFixture(mockpatch.PatchObject(javelin, "keystone_admin",
299 return_value=fake_auth))
300 javelin.destroy_tenants([fake_tenant])
301
Daniel Melladob04da902015-11-20 17:43:12 +0100302 mocked_function = fake_auth.tenants.delete_tenant
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100303 mocked_function.assert_called_once_with(fake_tenant['id'])
304
305 def test_destroy_users(self):
306
307 fake_user = self.fake_object['user']
308 fake_tenant = self.fake_object['tenant']
309
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200310 fake_auth = self.fake_client
Daniel Melladob04da902015-11-20 17:43:12 +0100311 fake_auth.tenants.list_tenants.return_value = \
Ken'ichi Ohmichi6ea3f982015-11-09 12:41:13 +0000312 {'tenants': [fake_tenant]}
Ken'ichi Ohmichid9fed312015-11-09 13:05:32 +0000313 fake_auth.identity.list_users.return_value = {'users': [fake_user]}
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100314
Ken'ichi Ohmichid9fed312015-11-09 13:05:32 +0000315 self.useFixture(mockpatch.Patch(
316 'tempest.common.identity.get_user_by_username',
317 return_value=fake_user))
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100318 self.useFixture(mockpatch.PatchObject(javelin, "keystone_admin",
319 return_value=fake_auth))
320
321 javelin.destroy_users([fake_user])
322
323 mocked_function = fake_auth.identity.delete_user
324 mocked_function.assert_called_once_with(fake_user['id'])
325
326 def test_destroy_objects(self):
327
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200328 self.fake_client.objects.delete_object.return_value = \
329 {'status': "200"}, ""
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100330 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200331 return_value=self.fake_client))
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100332 javelin.destroy_objects([self.fake_object])
333
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200334 mocked_function = self.fake_client.objects.delete_object
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100335 mocked_function.asswert_called_once(self.fake_object['container'],
336 self.fake_object['name'])
337
338 def test_destroy_images(self):
339
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100340 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200341 return_value=self.fake_client))
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100342 self.useFixture(mockpatch.PatchObject(javelin, "_get_image_by_name",
343 return_value=self.fake_object['image']))
344
345 javelin.destroy_images([self.fake_object])
346
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200347 mocked_function = self.fake_client.images.delete_image
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100348 mocked_function.assert_called_once_with(
349 self.fake_object['image']['id'])
350
351 def test_destroy_networks(self):
352
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100353 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200354 return_value=self.fake_client))
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100355 self.useFixture(mockpatch.PatchObject(
356 javelin, "_get_resource_by_name",
357 return_value=self.fake_object['resource']))
358
359 javelin.destroy_networks([self.fake_object])
360
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200361 mocked_function = self.fake_client.networks.delete_network
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100362 mocked_function.assert_called_once_with(
363 self.fake_object['resource']['id'])
Joe H. Rahme5a4da642015-06-09 17:24:12 +0200364
365 def test_destroy_volumes(self):
366 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
367 return_value=self.fake_client))
368
369 self.useFixture(mockpatch.PatchObject(
370 javelin, "_get_volume_by_name",
371 return_value=self.fake_object.volume))
372
373 javelin.destroy_volumes([self.fake_object])
374
375 mocked_function = self.fake_client.volumes.detach_volume
376 mocked_function.assert_called_once_with(self.fake_object.volume['id'])
377 mocked_function = self.fake_client.volumes.delete_volume
378 mocked_function.assert_called_once_with(self.fake_object.volume['id'])
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200379
380 def test_destroy_subnets(self):
381
382 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
383 return_value=self.fake_client))
384 fake_subnet_id = self.fake_object['subnet_id']
385 self.useFixture(mockpatch.PatchObject(javelin, "_get_resource_by_name",
386 return_value={
387 'id': fake_subnet_id}))
388
389 javelin.destroy_subnets([self.fake_object])
390
John Warren3961acd2015-10-02 14:38:53 -0400391 mocked_function = self.fake_client.subnets.delete_subnet
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200392 mocked_function.assert_called_once_with(fake_subnet_id)
393
394 def test_destroy_routers(self):
395 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
396 return_value=self.fake_client))
397
398 # this function is used on 2 different occasions in the code
399 def _fake_get_resource_by_name(*args):
400 if args[1] == "routers":
401 return {"id": self.fake_object['router_id']}
402 elif args[1] == "subnets":
403 return {"id": self.fake_object['subnet_id']}
404 javelin._get_resource_by_name = _fake_get_resource_by_name
405
406 javelin.destroy_routers([self.fake_object])
407
408 mocked_function = self.fake_client.networks.delete_router
409 mocked_function.assert_called_once_with(
410 self.fake_object['router_id'])
411
412 def test_destroy_secgroup(self):
413 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
414 return_value=self.fake_client))
415 fake_secgroup = {'id': self.fake_object['id']}
416 self.useFixture(mockpatch.PatchObject(javelin, "_get_resource_by_name",
417 return_value=fake_secgroup))
418
419 javelin.destroy_secgroups([self.fake_object])
420
421 mocked_function = self.fake_client.secgroups.delete_security_group
422 mocked_function.assert_called_once_with(self.fake_object['id'])