blob: b8c996993648e7b67af915ccdf7f6891361d009a [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
Joe H. Rahmefe75f932015-03-19 11:30:05 +010017
18from tempest.cmd import javelin
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -050019from tempest.lib import exceptions as lib_exc
Jordan Pittier41129042016-03-29 21:21:16 +020020from tempest.tests.lib import base
Joe H. Rahmefe75f932015-03-19 11:30:05 +010021
22
23class JavelinUnitTest(base.TestCase):
24
25 def setUp(self):
26 super(JavelinUnitTest, self).setUp()
Joe H. Rahme9aefd792016-01-05 17:16:02 +010027 javelin.LOG = mock.MagicMock()
Joe H. Rahmefe75f932015-03-19 11:30:05 +010028 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'],
Ghanshyam8fc0ed22015-12-18 10:25:14 +090081 instance_uuid=self.fake_object.server['id'],
82 mountpoint=self.fake_object['device'])
Joe H. Rahme5a4da642015-06-09 17:24:12 +020083
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)
Daniel Mellado82c83a52015-12-09 15:16:49 +0000122 mocked_function = self.fake_client.users.create_user
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100123 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
Daniel Mellado82c83a52015-12-09 15:16:49 +0000138 mocked_function = self.fake_client.users.create_user
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100139 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
Yaroslav Lobankoved3a35b2016-03-24 22:41:30 -0500216 @mock.patch("tempest.common.waiters.wait_for_volume_status")
217 def test_create_volumes(self, mock_wait_for_volume_status):
Joe H. Rahme5a4da642015-06-09 17:24:12 +0200218 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'])
Yaroslav Lobankoved3a35b2016-03-24 22:41:30 -0500231 mock_wait_for_volume_status.assert_called_once_with(
232 self.fake_client.volumes, self.fake_object.body['volume']['id'],
Joe H. Rahme5a4da642015-06-09 17:24:12 +0200233 'available')
234
Yaroslav Lobankoved3a35b2016-03-24 22:41:30 -0500235 @mock.patch("tempest.common.waiters.wait_for_volume_status")
236 def test_create_volume_existing(self, mock_wait_for_volume_status):
Joe H. Rahme5a4da642015-06-09 17:24:12 +0200237 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)
Yaroslav Lobankoved3a35b2016-03-24 22:41:30 -0500248 self.assertFalse(mock_wait_for_volume_status.called)
Joe H. Rahme5a4da642015-06-09 17:24:12 +0200249
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200250 def test_create_router(self):
251
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +0000252 self.fake_client.routers.list_routers.return_value = {'routers': []}
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200253 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
254 return_value=self.fake_client))
255
256 javelin.create_routers([self.fake_object])
257
258 mocked_function = self.fake_client.networks.create_router
Ken'ichi Ohmichi6665c972016-02-24 13:09:09 -0800259 mocked_function.assert_called_once_with(name=self.fake_object['name'])
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200260
261 def test_create_router_existing(self):
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +0000262 self.fake_client.routers.list_routers.return_value = {
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200263 'routers': [self.fake_object]}
264 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
265 return_value=self.fake_client))
266
267 javelin.create_routers([self.fake_object])
268
269 mocked_function = self.fake_client.networks.create_router
270 self.assertFalse(mocked_function.called)
271
272 def test_create_secgroup(self):
273 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
274 return_value=self.fake_client))
ghanshyamb610b772015-08-24 17:29:38 +0900275 self.fake_client.secgroups.list_security_groups.return_value = (
276 {'security_groups': []})
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200277 self.fake_client.secgroups.create_security_group.return_value = \
ghanshyamb610b772015-08-24 17:29:38 +0900278 {'security_group': {'id': self.fake_object['secgroup_id']}}
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200279
280 javelin.create_secgroups([self.fake_object])
281
282 mocked_function = self.fake_client.secgroups.create_security_group
283 mocked_function.assert_called_once_with(
Ken'ichi Ohmichi34563cc2015-07-21 00:53:17 +0000284 name=self.fake_object['name'],
285 description=self.fake_object['description'])
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200286
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100287
288class TestDestroyResources(JavelinUnitTest):
289
290 def test_destroy_tenants(self):
291
292 fake_tenant = self.fake_object['tenant']
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200293 fake_auth = self.fake_client
Ken'ichi Ohmichi6ea3f982015-11-09 12:41:13 +0000294 self.useFixture(mockpatch.Patch(
295 'tempest.common.identity.get_tenant_by_name',
296 return_value=fake_tenant))
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100297 self.useFixture(mockpatch.PatchObject(javelin, "keystone_admin",
298 return_value=fake_auth))
299 javelin.destroy_tenants([fake_tenant])
300
Daniel Melladob04da902015-11-20 17:43:12 +0100301 mocked_function = fake_auth.tenants.delete_tenant
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100302 mocked_function.assert_called_once_with(fake_tenant['id'])
303
304 def test_destroy_users(self):
305
306 fake_user = self.fake_object['user']
307 fake_tenant = self.fake_object['tenant']
308
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200309 fake_auth = self.fake_client
Daniel Melladob04da902015-11-20 17:43:12 +0100310 fake_auth.tenants.list_tenants.return_value = \
Ken'ichi Ohmichi6ea3f982015-11-09 12:41:13 +0000311 {'tenants': [fake_tenant]}
Daniel Mellado82c83a52015-12-09 15:16:49 +0000312 fake_auth.users.list_users.return_value = {'users': [fake_user]}
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100313
Ken'ichi Ohmichid9fed312015-11-09 13:05:32 +0000314 self.useFixture(mockpatch.Patch(
315 'tempest.common.identity.get_user_by_username',
316 return_value=fake_user))
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100317 self.useFixture(mockpatch.PatchObject(javelin, "keystone_admin",
318 return_value=fake_auth))
319
320 javelin.destroy_users([fake_user])
321
Daniel Mellado82c83a52015-12-09 15:16:49 +0000322 mocked_function = fake_auth.users.delete_user
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100323 mocked_function.assert_called_once_with(fake_user['id'])
324
325 def test_destroy_objects(self):
326
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200327 self.fake_client.objects.delete_object.return_value = \
328 {'status': "200"}, ""
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100329 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200330 return_value=self.fake_client))
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100331 javelin.destroy_objects([self.fake_object])
332
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200333 mocked_function = self.fake_client.objects.delete_object
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100334 mocked_function.asswert_called_once(self.fake_object['container'],
335 self.fake_object['name'])
336
337 def test_destroy_images(self):
338
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100339 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200340 return_value=self.fake_client))
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100341 self.useFixture(mockpatch.PatchObject(javelin, "_get_image_by_name",
342 return_value=self.fake_object['image']))
343
344 javelin.destroy_images([self.fake_object])
345
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200346 mocked_function = self.fake_client.images.delete_image
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100347 mocked_function.assert_called_once_with(
348 self.fake_object['image']['id'])
349
350 def test_destroy_networks(self):
351
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100352 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200353 return_value=self.fake_client))
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100354 self.useFixture(mockpatch.PatchObject(
355 javelin, "_get_resource_by_name",
356 return_value=self.fake_object['resource']))
357
358 javelin.destroy_networks([self.fake_object])
359
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200360 mocked_function = self.fake_client.networks.delete_network
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100361 mocked_function.assert_called_once_with(
362 self.fake_object['resource']['id'])
Joe H. Rahme5a4da642015-06-09 17:24:12 +0200363
364 def test_destroy_volumes(self):
365 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
366 return_value=self.fake_client))
367
368 self.useFixture(mockpatch.PatchObject(
369 javelin, "_get_volume_by_name",
370 return_value=self.fake_object.volume))
371
372 javelin.destroy_volumes([self.fake_object])
373
374 mocked_function = self.fake_client.volumes.detach_volume
375 mocked_function.assert_called_once_with(self.fake_object.volume['id'])
376 mocked_function = self.fake_client.volumes.delete_volume
377 mocked_function.assert_called_once_with(self.fake_object.volume['id'])
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200378
379 def test_destroy_subnets(self):
380
381 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
382 return_value=self.fake_client))
383 fake_subnet_id = self.fake_object['subnet_id']
384 self.useFixture(mockpatch.PatchObject(javelin, "_get_resource_by_name",
385 return_value={
386 'id': fake_subnet_id}))
387
388 javelin.destroy_subnets([self.fake_object])
389
John Warren3961acd2015-10-02 14:38:53 -0400390 mocked_function = self.fake_client.subnets.delete_subnet
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200391 mocked_function.assert_called_once_with(fake_subnet_id)
392
393 def test_destroy_routers(self):
394 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
395 return_value=self.fake_client))
396
397 # this function is used on 2 different occasions in the code
398 def _fake_get_resource_by_name(*args):
399 if args[1] == "routers":
400 return {"id": self.fake_object['router_id']}
401 elif args[1] == "subnets":
402 return {"id": self.fake_object['subnet_id']}
403 javelin._get_resource_by_name = _fake_get_resource_by_name
404
405 javelin.destroy_routers([self.fake_object])
406
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +0000407 mocked_function = self.fake_client.routers.delete_router
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200408 mocked_function.assert_called_once_with(
409 self.fake_object['router_id'])
410
411 def test_destroy_secgroup(self):
412 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
413 return_value=self.fake_client))
414 fake_secgroup = {'id': self.fake_object['id']}
415 self.useFixture(mockpatch.PatchObject(javelin, "_get_resource_by_name",
416 return_value=fake_secgroup))
417
418 javelin.destroy_secgroups([self.fake_object])
419
420 mocked_function = self.fake_client.secgroups.delete_security_group
421 mocked_function.assert_called_once_with(self.fake_object['id'])