blob: 3064989c2790ed920a7219e1b698a299307749cf [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
88 self.fake_client.identity.list_tenants.return_value = []
89 self.useFixture(mockpatch.PatchObject(javelin, "keystone_admin",
90 return_value=self.fake_client))
91
92 javelin.create_tenants([self.fake_object['name']])
93
94 mocked_function = self.fake_client.identity.create_tenant
95 mocked_function.assert_called_once_with(self.fake_object['name'])
96
97 def test_create_duplicate_tenant(self):
98 self.fake_client.identity.list_tenants.return_value = [
99 {'name': self.fake_object['name']}]
100 self.useFixture(mockpatch.PatchObject(javelin, "keystone_admin",
101 return_value=self.fake_client))
102
103 javelin.create_tenants([self.fake_object['name']])
104
105 mocked_function = self.fake_client.identity.create_tenant
106 self.assertFalse(mocked_function.called)
107
108 def test_create_users(self):
109 self.fake_client.identity.get_tenant_by_name.return_value = \
110 self.fake_object['tenant']
111 self.fake_client.identity.get_user_by_username.side_effect = \
112 lib_exc.NotFound()
113 self.useFixture(mockpatch.PatchObject(javelin, "keystone_admin",
114 return_value=self.fake_client))
115
116 javelin.create_users([self.fake_object])
117
118 fake_tenant_id = self.fake_object['tenant']['id']
119 fake_email = "%s@%s" % (self.fake_object['user'], fake_tenant_id)
120 mocked_function = self.fake_client.identity.create_user
121 mocked_function.assert_called_once_with(self.fake_object['name'],
122 self.fake_object['password'],
123 fake_tenant_id,
124 fake_email,
125 enabled=True)
126
127 def test_create_user_missing_tenant(self):
128 self.fake_client.identity.get_tenant_by_name.side_effect = \
129 lib_exc.NotFound()
130 self.useFixture(mockpatch.PatchObject(javelin, "keystone_admin",
131 return_value=self.fake_client))
132
133 javelin.create_users([self.fake_object])
134
135 mocked_function = self.fake_client.identity.create_user
136 self.assertFalse(mocked_function.called)
137
138 def test_create_objects(self):
139
140 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
141 return_value=self.fake_client))
142 self.useFixture(mockpatch.PatchObject(javelin, "_assign_swift_role"))
143 self.useFixture(mockpatch.PatchObject(javelin, "_file_contents",
144 return_value=self.fake_object.content))
145
146 javelin.create_objects([self.fake_object])
147
148 mocked_function = self.fake_client.containers.create_container
149 mocked_function.assert_called_once_with(self.fake_object['container'])
150 mocked_function = self.fake_client.objects.create_object
151 mocked_function.assert_called_once_with(self.fake_object['container'],
152 self.fake_object['name'],
153 self.fake_object.content)
154
155 def test_create_images(self):
156 self.fake_client.images.create_image.return_value = \
157 self.fake_object['body']
158
159 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
160 return_value=self.fake_client))
161 self.useFixture(mockpatch.PatchObject(javelin, "_get_image_by_name",
162 return_value=[]))
163 self.useFixture(mockpatch.PatchObject(javelin, "_resolve_image",
164 return_value=(None, None)))
165
166 with mock.patch('six.moves.builtins.open', mock.mock_open(),
167 create=True) as open_mock:
168 javelin.create_images([self.fake_object])
169
170 mocked_function = self.fake_client.images.create_image
171 mocked_function.assert_called_once_with(self.fake_object['name'],
172 self.fake_object['format'],
173 self.fake_object['format'])
174
Ken'ichi Ohmichi66494e92015-06-08 04:28:10 +0000175 mocked_function = self.fake_client.images.store_image_file
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100176 fake_image_id = self.fake_object['body'].get('id')
177 mocked_function.assert_called_once_with(fake_image_id, open_mock())
178
179 def test_create_networks(self):
180 self.fake_client.networks.list_networks.return_value = {
181 'networks': []}
182
183 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
184 return_value=self.fake_client))
185
186 javelin.create_networks([self.fake_object])
187
188 mocked_function = self.fake_client.networks.create_network
189 mocked_function.assert_called_once_with(name=self.fake_object['name'])
190
191 def test_create_subnet(self):
192
193 fake_network = self.fake_object['network']
194
195 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
196 return_value=self.fake_client))
197 self.useFixture(mockpatch.PatchObject(javelin, "_get_resource_by_name",
198 return_value=fake_network))
199
200 fake_netaddr = mock.MagicMock()
201 self.useFixture(mockpatch.PatchObject(javelin, "netaddr",
202 return_value=fake_netaddr))
203 fake_version = javelin.netaddr.IPNetwork().version
204
205 javelin.create_subnets([self.fake_object])
206
207 mocked_function = self.fake_client.networks.create_subnet
208 mocked_function.assert_called_once_with(network_id=fake_network['id'],
209 cidr=self.fake_object['range'],
210 name=self.fake_object['name'],
211 ip_version=fake_version)
212
Joe H. Rahme5a4da642015-06-09 17:24:12 +0200213 def test_create_volumes(self):
214
215 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
216 return_value=self.fake_client))
217 self.useFixture(mockpatch.PatchObject(javelin, "_get_volume_by_name",
218 return_value=None))
219 self.fake_client.volumes.create_volume.return_value = \
220 self.fake_object.body
221
222 javelin.create_volumes([self.fake_object])
223
224 mocked_function = self.fake_client.volumes.create_volume
225 mocked_function.assert_called_once_with(
226 size=self.fake_object['gb'],
227 display_name=self.fake_object['name'])
228 mocked_function = self.fake_client.volumes.wait_for_volume_status
229 mocked_function.assert_called_once_with(
230 self.fake_object.body['id'],
231 'available')
232
233 def test_create_volume_existing(self):
234 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
235 return_value=self.fake_client))
236 self.useFixture(mockpatch.PatchObject(javelin, "_get_volume_by_name",
237 return_value=self.fake_object))
238 self.fake_client.volumes.create_volume.return_value = \
239 self.fake_object.body
240
241 javelin.create_volumes([self.fake_object])
242
243 mocked_function = self.fake_client.volumes.create_volume
244 self.assertFalse(mocked_function.called)
245 mocked_function = self.fake_client.volumes.wait_for_volume_status
246 self.assertFalse(mocked_function.called)
247
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200248 def test_create_router(self):
249
250 self.fake_client.networks.list_routers.return_value = {'routers': []}
251 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
252 return_value=self.fake_client))
253
254 javelin.create_routers([self.fake_object])
255
256 mocked_function = self.fake_client.networks.create_router
257 mocked_function.assert_called_once_with(self.fake_object['name'])
258
259 def test_create_router_existing(self):
260 self.fake_client.networks.list_routers.return_value = {
261 'routers': [self.fake_object]}
262 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
263 return_value=self.fake_client))
264
265 javelin.create_routers([self.fake_object])
266
267 mocked_function = self.fake_client.networks.create_router
268 self.assertFalse(mocked_function.called)
269
270 def test_create_secgroup(self):
271 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
272 return_value=self.fake_client))
273 self.fake_client.secgroups.list_security_groups.return_value = []
274 self.fake_client.secgroups.create_security_group.return_value = \
275 {'id': self.fake_object['secgroup_id']}
276
277 javelin.create_secgroups([self.fake_object])
278
279 mocked_function = self.fake_client.secgroups.create_security_group
280 mocked_function.assert_called_once_with(
281 self.fake_object['name'],
282 self.fake_object['description'])
283
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100284
285class TestDestroyResources(JavelinUnitTest):
286
287 def test_destroy_tenants(self):
288
289 fake_tenant = self.fake_object['tenant']
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200290 fake_auth = self.fake_client
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100291 fake_auth.identity.get_tenant_by_name.return_value = fake_tenant
292
293 self.useFixture(mockpatch.PatchObject(javelin, "keystone_admin",
294 return_value=fake_auth))
295 javelin.destroy_tenants([fake_tenant])
296
297 mocked_function = fake_auth.identity.delete_tenant
298 mocked_function.assert_called_once_with(fake_tenant['id'])
299
300 def test_destroy_users(self):
301
302 fake_user = self.fake_object['user']
303 fake_tenant = self.fake_object['tenant']
304
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200305 fake_auth = self.fake_client
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100306 fake_auth.identity.get_tenant_by_name.return_value = fake_tenant
307 fake_auth.identity.get_user_by_username.return_value = fake_user
308
309 self.useFixture(mockpatch.PatchObject(javelin, "keystone_admin",
310 return_value=fake_auth))
311
312 javelin.destroy_users([fake_user])
313
314 mocked_function = fake_auth.identity.delete_user
315 mocked_function.assert_called_once_with(fake_user['id'])
316
317 def test_destroy_objects(self):
318
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200319 self.fake_client.objects.delete_object.return_value = \
320 {'status': "200"}, ""
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100321 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200322 return_value=self.fake_client))
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100323 javelin.destroy_objects([self.fake_object])
324
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200325 mocked_function = self.fake_client.objects.delete_object
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100326 mocked_function.asswert_called_once(self.fake_object['container'],
327 self.fake_object['name'])
328
329 def test_destroy_images(self):
330
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100331 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200332 return_value=self.fake_client))
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100333 self.useFixture(mockpatch.PatchObject(javelin, "_get_image_by_name",
334 return_value=self.fake_object['image']))
335
336 javelin.destroy_images([self.fake_object])
337
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200338 mocked_function = self.fake_client.images.delete_image
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100339 mocked_function.assert_called_once_with(
340 self.fake_object['image']['id'])
341
342 def test_destroy_networks(self):
343
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100344 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200345 return_value=self.fake_client))
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100346 self.useFixture(mockpatch.PatchObject(
347 javelin, "_get_resource_by_name",
348 return_value=self.fake_object['resource']))
349
350 javelin.destroy_networks([self.fake_object])
351
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200352 mocked_function = self.fake_client.networks.delete_network
Joe H. Rahmefe75f932015-03-19 11:30:05 +0100353 mocked_function.assert_called_once_with(
354 self.fake_object['resource']['id'])
Joe H. Rahme5a4da642015-06-09 17:24:12 +0200355
356 def test_destroy_volumes(self):
357 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
358 return_value=self.fake_client))
359
360 self.useFixture(mockpatch.PatchObject(
361 javelin, "_get_volume_by_name",
362 return_value=self.fake_object.volume))
363
364 javelin.destroy_volumes([self.fake_object])
365
366 mocked_function = self.fake_client.volumes.detach_volume
367 mocked_function.assert_called_once_with(self.fake_object.volume['id'])
368 mocked_function = self.fake_client.volumes.delete_volume
369 mocked_function.assert_called_once_with(self.fake_object.volume['id'])
Joe H. Rahme94fd9692015-05-22 16:55:25 +0200370
371 def test_destroy_subnets(self):
372
373 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
374 return_value=self.fake_client))
375 fake_subnet_id = self.fake_object['subnet_id']
376 self.useFixture(mockpatch.PatchObject(javelin, "_get_resource_by_name",
377 return_value={
378 'id': fake_subnet_id}))
379
380 javelin.destroy_subnets([self.fake_object])
381
382 mocked_function = self.fake_client.networks.delete_subnet
383 mocked_function.assert_called_once_with(fake_subnet_id)
384
385 def test_destroy_routers(self):
386 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
387 return_value=self.fake_client))
388
389 # this function is used on 2 different occasions in the code
390 def _fake_get_resource_by_name(*args):
391 if args[1] == "routers":
392 return {"id": self.fake_object['router_id']}
393 elif args[1] == "subnets":
394 return {"id": self.fake_object['subnet_id']}
395 javelin._get_resource_by_name = _fake_get_resource_by_name
396
397 javelin.destroy_routers([self.fake_object])
398
399 mocked_function = self.fake_client.networks.delete_router
400 mocked_function.assert_called_once_with(
401 self.fake_object['router_id'])
402
403 def test_destroy_secgroup(self):
404 self.useFixture(mockpatch.PatchObject(javelin, "client_for_user",
405 return_value=self.fake_client))
406 fake_secgroup = {'id': self.fake_object['id']}
407 self.useFixture(mockpatch.PatchObject(javelin, "_get_resource_by_name",
408 return_value=fake_secgroup))
409
410 javelin.destroy_secgroups([self.fake_object])
411
412 mocked_function = self.fake_client.secgroups.delete_security_group
413 mocked_function.assert_called_once_with(self.fake_object['id'])