1 ##############################################################################
2 # Copyright (c) 2016 Huawei Technologies Co.,Ltd and others.
4 # All rights reserved. This program and the accompanying materials
5 # are made available under the terms of the Apache License, Version 2.0
6 # which accompanies this distribution, and is available at
7 # http://www.apache.org/licenses/LICENSE-2.0
8 ##############################################################################
13 from oslo_utils import uuidutils
18 from yardstick.common import constants
19 from yardstick.common import openstack_utils
22 class GetCredentialsTestCase(unittest.TestCase):
24 @mock.patch('yardstick.common.openstack_utils.os')
25 def test_get_credentials(self, _):
26 with mock.patch.dict('os.environ', {'OS_IDENTITY_API_VERSION': '2'},
28 openstack_utils.get_credentials()
31 class GetHeatApiVersionTestCase(unittest.TestCase):
33 @mock.patch.object(openstack_utils, 'log')
34 def test_get_heat_api_version_check_result(self, *args):
35 API = 'HEAT_API_VERSION'
38 with mock.patch.dict(os.environ, {API: '2'}, clear=True):
39 api_version = openstack_utils.get_heat_api_version()
40 self.assertEqual(api_version, expected_result)
43 class GetShadeClientTestCase(unittest.TestCase):
45 @mock.patch.object(shade, 'openstack_cloud', return_value='os_client')
46 def test_get_shade_client(self, mock_openstack_cloud):
47 os_cloud_config = {'param1': True, 'param2': 'value2'}
48 self.assertEqual('os_client',
49 openstack_utils.get_shade_client(**os_cloud_config))
50 os_cloud_config.update(constants.OS_CLOUD_DEFAULT_CONFIG)
51 mock_openstack_cloud.assert_called_once_with(**os_cloud_config)
53 mock_openstack_cloud.reset_mock()
54 os_cloud_config = {'verify': True, 'param2': 'value2'}
55 self.assertEqual('os_client',
56 openstack_utils.get_shade_client(**os_cloud_config))
57 mock_openstack_cloud.assert_called_once_with(**os_cloud_config)
59 @mock.patch.object(shade, 'openstack_cloud', return_value='os_client')
60 def test_get_shade_client_no_parameters(self, mock_openstack_cloud):
61 self.assertEqual('os_client', openstack_utils.get_shade_client())
62 mock_openstack_cloud.assert_called_once_with(
63 **constants.OS_CLOUD_DEFAULT_CONFIG)
65 @mock.patch.object(shade, 'operator_cloud', return_value='os_client')
66 def test_get_shade_operator_client(self, mock_operator_cloud):
67 self.assertEqual('os_client', openstack_utils.get_shade_operator_client())
68 mock_operator_cloud.assert_called_once_with(
69 **constants.OS_CLOUD_DEFAULT_CONFIG)
72 class DeleteNeutronNetTestCase(unittest.TestCase):
75 self.mock_shade_client = mock.Mock()
77 def test_delete_neutron_net(self):
78 self.mock_shade_client.delete_network.return_value = True
79 output = openstack_utils.delete_neutron_net(self.mock_shade_client,
81 self.assertTrue(output)
83 def test_delete_neutron_net_fail(self):
84 self.mock_shade_client.delete_network.return_value = False
85 output = openstack_utils.delete_neutron_net(self.mock_shade_client,
87 self.assertFalse(output)
89 @mock.patch.object(openstack_utils, 'log')
90 def test_delete_neutron_net_exception(self, mock_logger):
91 self.mock_shade_client.delete_network.side_effect = (
92 exc.OpenStackCloudException('error message'))
93 output = openstack_utils.delete_neutron_net(self.mock_shade_client,
95 self.assertFalse(output)
96 mock_logger.error.assert_called_once()
99 class CreateNeutronNetTestCase(unittest.TestCase):
102 self.mock_shade_client = mock.Mock()
103 self.network_name = 'name'
104 self.mock_shade_client.create_network = mock.Mock()
106 def test_create_neutron_net(self):
107 _uuid = uuidutils.generate_uuid()
108 self.mock_shade_client.create_network.return_value = {'id': _uuid}
109 output = openstack_utils.create_neutron_net(self.mock_shade_client,
111 self.assertEqual(_uuid, output)
113 @mock.patch.object(openstack_utils, 'log')
114 def test_create_neutron_net_exception(self, mock_logger):
115 self.mock_shade_client.create_network.side_effect = (
116 exc.OpenStackCloudException('error message'))
118 output = openstack_utils.create_neutron_net(self.mock_shade_client,
120 mock_logger.error.assert_called_once()
121 self.assertIsNone(output)
124 class CreateNeutronSubnetTestCase(unittest.TestCase):
127 self.mock_shade_client = mock.Mock()
128 self.network_name_or_id = 'name_or_id'
129 self.mock_shade_client.create_subnet = mock.Mock()
131 def test_create_neutron_subnet(self):
132 _uuid = uuidutils.generate_uuid()
133 self.mock_shade_client.create_subnet.return_value = {'id': _uuid}
134 output = openstack_utils.create_neutron_subnet(
135 self.mock_shade_client, self.network_name_or_id)
136 self.assertEqual(_uuid, output)
138 @mock.patch.object(openstack_utils, 'log')
139 def test_create_neutron_subnet_exception(self, mock_logger):
140 self.mock_shade_client.create_subnet.side_effect = (
141 exc.OpenStackCloudException('error message'))
143 output = openstack_utils.create_neutron_subnet(
144 self.mock_shade_client, self.network_name_or_id)
145 mock_logger.error.assert_called_once()
146 self.assertIsNone(output)
149 class DeleteNeutronRouterTestCase(unittest.TestCase):
152 self.mock_shade_client = mock.Mock()
153 self.mock_shade_client.delete_router = mock.Mock()
155 def test_delete_neutron_router(self):
156 self.mock_shade_client.delete_router.return_value = True
157 output = openstack_utils.delete_neutron_router(self.mock_shade_client,
159 self.assertTrue(output)
161 def test_delete_neutron_router_fail(self):
162 self.mock_shade_client.delete_router.return_value = False
163 output = openstack_utils.delete_neutron_router(self.mock_shade_client,
165 self.assertFalse(output)
167 @mock.patch.object(openstack_utils, 'log')
168 def test_delete_neutron_router_exception(self, mock_logger):
169 self.mock_shade_client.delete_router.side_effect = (
170 exc.OpenStackCloudException('error message'))
171 output = openstack_utils.delete_neutron_router(self.mock_shade_client,
173 mock_logger.error.assert_called_once()
174 self.assertFalse(output)
177 class CreateNeutronRouterTestCase(unittest.TestCase):
180 self.mock_shade_client = mock.Mock()
181 self.mock_shade_client.create_subnet = mock.Mock()
183 def test_create_neutron_router(self):
184 _uuid = uuidutils.generate_uuid()
185 self.mock_shade_client.create_router.return_value = {'id': _uuid}
186 output = openstack_utils.create_neutron_router(
187 self.mock_shade_client)
188 self.assertEqual(_uuid, output)
190 @mock.patch.object(openstack_utils, 'log')
191 def test_create_neutron_subnet_exception(self, mock_logger):
192 self.mock_shade_client.create_router.side_effect = (
193 exc.OpenStackCloudException('error message'))
195 output = openstack_utils.create_neutron_router(
196 self.mock_shade_client)
197 mock_logger.error.assert_called_once()
198 self.assertIsNone(output)
201 class RemoveRouterInterfaceTestCase(unittest.TestCase):
204 self.mock_shade_client = mock.Mock()
205 self.router = 'router'
206 self.mock_shade_client.remove_router_interface = mock.Mock()
208 def test_remove_router_interface(self):
209 self.mock_shade_client.remove_router_interface.return_value = True
210 output = openstack_utils.remove_router_interface(
211 self.mock_shade_client, self.router)
212 self.assertTrue(output)
214 @mock.patch.object(openstack_utils, 'log')
215 def test_remove_router_interface_exception(self, mock_logger):
216 self.mock_shade_client.remove_router_interface.side_effect = (
217 exc.OpenStackCloudException('error message'))
218 output = openstack_utils.remove_router_interface(
219 self.mock_shade_client, self.router)
220 mock_logger.error.assert_called_once()
221 self.assertFalse(output)
224 class CreateFloatingIpTestCase(unittest.TestCase):
227 self.mock_shade_client = mock.Mock()
228 self.network_name_or_id = 'name'
229 self.mock_shade_client.create_floating_ip = mock.Mock()
231 def test_create_floating_ip(self):
232 self.mock_shade_client.create_floating_ip.return_value = \
233 {'floating_ip_address': 'value1', 'id': 'value2'}
234 output = openstack_utils.create_floating_ip(self.mock_shade_client,
235 self.network_name_or_id)
236 self.assertEqual({'fip_addr': 'value1', 'fip_id': 'value2'}, output)
238 @mock.patch.object(openstack_utils, 'log')
239 def test_create_floating_ip_exception(self, mock_logger):
240 self.mock_shade_client.create_floating_ip.side_effect = (
241 exc.OpenStackCloudException('error message'))
242 output = openstack_utils.create_floating_ip(
243 self.mock_shade_client, self.network_name_or_id)
244 mock_logger.error.assert_called_once()
245 self.assertIsNone(output)
248 class DeleteFloatingIpTestCase(unittest.TestCase):
251 self.mock_shade_client = mock.Mock()
252 self.floating_ip_id = 'floating_ip_id'
253 self.mock_shade_client.delete_floating_ip = mock.Mock()
255 def test_delete_floating_ip(self):
256 self.mock_shade_client.delete_floating_ip.return_value = True
257 output = openstack_utils.delete_floating_ip(self.mock_shade_client,
259 self.assertTrue(output)
261 def test_delete_floating_ip_fail(self):
262 self.mock_shade_client.delete_floating_ip.return_value = False
263 output = openstack_utils.delete_floating_ip(self.mock_shade_client,
265 self.assertFalse(output)
267 @mock.patch.object(openstack_utils, 'log')
268 def test_delete_floating_ip_exception(self, mock_logger):
269 self.mock_shade_client.delete_floating_ip.side_effect = (
270 exc.OpenStackCloudException('error message'))
271 output = openstack_utils.delete_floating_ip(self.mock_shade_client,
273 mock_logger.error.assert_called_once()
274 self.assertFalse(output)
277 class CreateSecurityGroupRuleTestCase(unittest.TestCase):
280 self.mock_shade_client = mock.Mock()
281 self.secgroup_name_or_id = 'sg_name_id'
282 self.mock_shade_client.create_security_group_rule = mock.Mock()
283 self._mock_log = mock.patch.object(openstack_utils, 'log')
284 self.mock_log = self._mock_log.start()
285 self.addCleanup(self._stop_mock)
287 def _stop_mock(self):
288 self._mock_log.stop()
290 def test_create_security_group_rule(self):
291 self.mock_shade_client.create_security_group_rule.return_value = (
292 {'security_group_rule'})
293 output = openstack_utils.create_security_group_rule(
294 self.mock_shade_client, self.secgroup_name_or_id)
295 self.assertTrue(output)
297 def test_create_security_group_rule_exception(self):
298 self.mock_shade_client.create_security_group_rule.side_effect = (
299 exc.OpenStackCloudException('error message'))
301 output = openstack_utils.create_security_group_rule(
302 self.mock_shade_client, self.secgroup_name_or_id)
303 self.mock_log.error.assert_called_once()
304 self.assertFalse(output)
307 class ListImageTestCase(unittest.TestCase):
309 def test_list_images(self):
310 mock_shade_client = mock.MagicMock()
311 mock_shade_client.list_images.return_value = []
312 openstack_utils.list_images(mock_shade_client)
314 @mock.patch.object(openstack_utils, 'log')
315 def test_list_images_exception(self, mock_logger):
316 mock_shade_client = mock.MagicMock()
317 mock_shade_client.list_images = mock.MagicMock()
318 mock_shade_client.list_images.side_effect = (
319 exc.OpenStackCloudException('error message'))
320 images = openstack_utils.list_images(mock_shade_client)
321 mock_logger.error.assert_called_once()
322 self.assertFalse(images)
325 class SecurityGroupTestCase(unittest.TestCase):
328 self.mock_shade_client = mock.Mock()
329 self.sg_name = 'sg_name'
330 self.sg_description = 'sg_description'
331 self._uuid = uuidutils.generate_uuid()
332 self._mock_log = mock.patch.object(openstack_utils, 'log')
333 self.mock_log = self._mock_log.start()
334 self.addCleanup(self._stop_mock)
336 def _stop_mock(self):
337 self._mock_log.stop()
339 def test_create_security_group_full_existing_security_group(self):
340 self.mock_shade_client.get_security_group.return_value = (
341 {'name': 'name', 'id': self._uuid})
342 output = openstack_utils.create_security_group_full(
343 self.mock_shade_client, self.sg_name, self.sg_description)
344 self.mock_shade_client.get_security_group.assert_called_once()
345 self.assertEqual(self._uuid, output)
347 def test_create_security_group_full_non_existing_security_group(self):
348 self.mock_shade_client.get_security_group.return_value = None
349 self.mock_shade_client.create_security_group.side_effect = (
350 exc.OpenStackCloudException('error message'))
351 output = openstack_utils.create_security_group_full(
352 self.mock_shade_client, self.sg_name, self.sg_description)
353 self.mock_log.error.assert_called_once()
354 self.assertIsNone(output)
356 @mock.patch.object(openstack_utils, 'create_security_group_rule')
357 def test_create_security_group_full_create_rule_fail(
358 self, mock_create_security_group_rule):
359 self.mock_shade_client.get_security_group.return_value = None
360 self.mock_shade_client.create_security_group.return_value = (
361 {'name': 'name', 'id': self._uuid})
362 mock_create_security_group_rule.return_value = False
363 output = openstack_utils.create_security_group_full(
364 self.mock_shade_client, self.sg_name, self.sg_description)
365 mock_create_security_group_rule.assert_called()
366 self.mock_shade_client.delete_security_group(self.sg_name)
367 self.mock_log.error.assert_called_once()
368 self.assertIsNone(output)
370 @mock.patch.object(openstack_utils, 'create_security_group_rule')
371 def test_create_security_group_full(
372 self, mock_create_security_group_rule):
373 self.mock_shade_client.get_security_group.return_value = None
374 self.mock_shade_client.create_security_group.return_value = (
375 {'name': 'name', 'id': self._uuid})
376 mock_create_security_group_rule.return_value = True
377 output = openstack_utils.create_security_group_full(
378 self.mock_shade_client, self.sg_name, self.sg_description)
379 mock_create_security_group_rule.assert_called()
380 self.mock_shade_client.delete_security_group(self.sg_name)
381 self.assertEqual(self._uuid, output)
384 class CreateInstanceTestCase(unittest.TestCase):
386 def test_create_instance_and_wait_for_active(self):
387 self.mock_shade_client = mock.Mock()
390 flavor = 'flavor_name'
391 self.mock_shade_client.create_server.return_value = (
392 {'name': name, 'image': image, 'flavor': flavor})
393 output = openstack_utils.create_instance_and_wait_for_active(
394 self.mock_shade_client, name, image, flavor)
396 {'name': name, 'image': image, 'flavor': flavor}, output)
398 @mock.patch.object(openstack_utils, 'log')
399 def test_create_instance_and_wait_for_active_fail(self, mock_logger):
400 self.mock_shade_client = mock.Mock()
401 self.mock_shade_client.create_server.side_effect = (
402 exc.OpenStackCloudException('error message'))
403 output = openstack_utils.create_instance_and_wait_for_active(
404 self.mock_shade_client, 'server_name', 'image_name', 'flavor_name')
405 mock_logger.error.assert_called_once()
406 self.assertIsNone(output)
409 class DeleteInstanceTestCase(unittest.TestCase):
412 self.mock_shade_client = mock.Mock()
414 def test_delete_instance(self):
415 self.mock_shade_client.delete_server.return_value = True
416 output = openstack_utils.delete_instance(self.mock_shade_client,
418 self.assertTrue(output)
420 def test_delete_instance_fail(self):
421 self.mock_shade_client.delete_server.return_value = False
422 output = openstack_utils.delete_instance(self.mock_shade_client,
424 self.assertFalse(output)
426 @mock.patch.object(openstack_utils, 'log')
427 def test_delete_instance_exception(self, mock_logger):
428 self.mock_shade_client.delete_server.side_effect = (
429 exc.OpenStackCloudException('error message'))
430 output = openstack_utils.delete_instance(self.mock_shade_client,
432 mock_logger.error.assert_called_once()
433 self.assertFalse(output)
436 class CreateKeypairTestCase(unittest.TestCase):
439 self.mock_shade_client = mock.Mock()
440 self.name = 'key_name'
442 def test_create_keypair(self):
443 self.mock_shade_client.create_keypair.return_value = (
444 {'name': 'key-name', 'type': 'ssh'})
445 output = openstack_utils.create_keypair(
446 self.mock_shade_client, self.name)
448 {'name': 'key-name', 'type': 'ssh'},
451 @mock.patch.object(openstack_utils, 'log')
452 def test_create_keypair_fail(self, mock_logger):
453 self.mock_shade_client.create_keypair.side_effect = (
454 exc.OpenStackCloudException('error message'))
455 output = openstack_utils.create_keypair(
456 self.mock_shade_client, self.name)
457 mock_logger.error.assert_called_once()
458 self.assertIsNone(output)
461 class DeleteKeypairTestCase(unittest.TestCase):
464 self.mock_shade_client = mock.Mock()
466 def test_delete_keypair(self):
467 self.mock_shade_client.delete_keypair.return_value = True
468 output = openstack_utils.delete_keypair(self.mock_shade_client,
470 self.assertTrue(output)
472 def test_delete_keypair_fail(self):
473 self.mock_shade_client.delete_keypair.return_value = False
474 output = openstack_utils.delete_keypair(self.mock_shade_client,
476 self.assertFalse(output)
478 @mock.patch.object(openstack_utils, 'log')
479 def test_delete_keypair_exception(self, mock_logger):
480 self.mock_shade_client.delete_keypair.side_effect = (
481 exc.OpenStackCloudException('error message'))
482 output = openstack_utils.delete_keypair(self.mock_shade_client,
484 mock_logger.error.assert_called_once()
485 self.assertFalse(output)
488 class AttachVolumeToServerTestCase(unittest.TestCase):
490 def test_attach_volume_to_server(self):
491 self.mock_shade_client = mock.Mock()
492 self.mock_shade_client.get_server.return_value = {'server_dict'}
493 self.mock_shade_client.get_volume.return_value = {'volume_dict'}
494 self.mock_shade_client.attach_volume.return_value = True
495 output = openstack_utils.attach_volume_to_server(
496 self.mock_shade_client, 'server_name_or_id', 'volume_name_or_id')
497 self.assertTrue(output)
499 @mock.patch.object(openstack_utils, 'log')
500 def test_attach_volume_to_server_fail(self, mock_logger):
501 self.mock_shade_client = mock.Mock()
502 self.mock_shade_client.attach_volume.side_effect = (
503 exc.OpenStackCloudException('error message'))
504 output = openstack_utils.attach_volume_to_server(
505 self.mock_shade_client, 'server_name_or_id', 'volume_name_or_id')
506 mock_logger.error.assert_called_once()
507 self.assertFalse(output)
510 class GetServerTestCase(unittest.TestCase):
512 def test_get_server(self):
513 self.mock_shade_client = mock.Mock()
514 _uuid = uuidutils.generate_uuid()
515 self.mock_shade_client.get_server.return_value = {
516 'name': 'server_name', 'id': _uuid}
517 output = openstack_utils.get_server(self.mock_shade_client,
519 self.assertEqual({'name': 'server_name', 'id': _uuid}, output)
521 @mock.patch.object(openstack_utils, 'log')
522 def test_get_server_exception(self, mock_logger):
523 self.mock_shade_client = mock.Mock()
524 self.mock_shade_client.get_server.side_effect = (
525 exc.OpenStackCloudException('error message'))
526 output = openstack_utils.get_server(self.mock_shade_client,
528 mock_logger.error.assert_called_once()
529 self.assertIsNone(output)
532 class GetFlavorTestCase(unittest.TestCase):
534 def test_get_flavor(self):
535 self.mock_shade_client = mock.Mock()
536 _uuid = uuidutils.generate_uuid()
537 self.mock_shade_client.get_flavor.return_value = {
538 'name': 'flavor_name', 'id': _uuid}
539 output = openstack_utils.get_flavor(self.mock_shade_client,
541 self.assertEqual({'name': 'flavor_name', 'id': _uuid}, output)
543 @mock.patch.object(openstack_utils, 'log')
544 def test_get_flavor_exception(self, mock_logger):
545 self.mock_shade_client = mock.Mock()
546 self.mock_shade_client.get_flavor.side_effect = (
547 exc.OpenStackCloudException('error message'))
548 output = openstack_utils.get_flavor(self.mock_shade_client,
550 mock_logger.error.assert_called_once()
551 self.assertIsNone(output)
554 class GetVolumeIDTestCase(unittest.TestCase):
556 def test_get_volume_id(self):
557 self.mock_shade_client = mock.Mock()
558 _uuid = uuidutils.generate_uuid()
559 self.mock_shade_client.get_volume_id.return_value = _uuid
560 output = openstack_utils.get_volume_id(self.mock_shade_client,
562 self.assertEqual(_uuid, output)
564 def test_get_volume_id_None(self):
565 self.mock_shade_client = mock.Mock()
566 self.mock_shade_client.get_volume_id.return_value = None
567 output = openstack_utils.get_volume_id(self.mock_shade_client,
569 self.assertIsNone(output)
572 class GetVolumeTestCase(unittest.TestCase):
575 self.mock_shade_client = mock.Mock()
576 self.mock_shade_client.get_volume = mock.Mock()
578 def test_get_volume(self):
579 self.mock_shade_client.get_volume.return_value = {'volume'}
580 output = openstack_utils.get_volume(self.mock_shade_client,
582 self.assertEqual({'volume'}, output)
584 def test_get_volume_None(self):
585 self.mock_shade_client.get_volume.return_value = None
586 output = openstack_utils.get_volume(self.mock_shade_client,
588 self.assertIsNone(output)
591 class CreateVolumeTestCase(unittest.TestCase):
594 self.mock_shade_client = mock.Mock()
597 def test_create_volume(self):
598 self.mock_shade_client.create_volume.return_value = (
599 {'name': 'volume-name', 'size': self.size})
600 output = openstack_utils.create_volume(
601 self.mock_shade_client, self.size)
603 {'name': 'volume-name', 'size': self.size},
606 @mock.patch.object(openstack_utils, 'log')
607 def test_create_volume_fail(self, mock_logger):
608 self.mock_shade_client.create_volume.side_effect = (
609 exc.OpenStackCloudException('error message'))
610 output = openstack_utils.create_volume(self.mock_shade_client,
612 mock_logger.error.assert_called_once()
613 self.assertIsNone(output)
616 class DeleteVolumeTestCase(unittest.TestCase):
619 self.mock_shade_client = mock.Mock()
621 def test_delete_volume(self):
622 self.mock_shade_client.delete_volume.return_value = True
623 output = openstack_utils.delete_volume(self.mock_shade_client,
625 self.assertTrue(output)
627 def test_delete_volume_fail(self):
628 self.mock_shade_client.delete_volume.return_value = False
629 output = openstack_utils.delete_volume(self.mock_shade_client,
631 self.assertFalse(output)
633 @mock.patch.object(openstack_utils, 'log')
634 def test_delete_volume_exception(self, mock_logger):
635 self.mock_shade_client.delete_volume.side_effect = (
636 exc.OpenStackCloudException('error message'))
637 output = openstack_utils.delete_volume(self.mock_shade_client,
639 mock_logger.error.assert_called_once()
640 self.assertFalse(output)
643 class DetachVolumeTestCase(unittest.TestCase):
645 @mock.patch.object(openstack_utils, 'get_server')
646 def test_detach_volume(self, mock_get_server):
647 self.mock_shade_client = mock.Mock()
648 mock_get_server.return_value = {'server_dict'}
649 self.mock_shade_client.get_volume.return_value = {'volume_dict'}
650 output = openstack_utils.detach_volume(self.mock_shade_client,
653 self.assertTrue(output)
655 @mock.patch.object(openstack_utils, 'get_server')
656 @mock.patch.object(openstack_utils, 'log')
657 def test_detach_volume_exception(self, mock_logger, mock_get_server):
658 self.mock_shade_client = mock.Mock()
659 mock_get_server.return_value = {'server_dict'}
660 self.mock_shade_client.get_volume.return_value = {'volume_dict'}
661 self.mock_shade_client.detach_volume.side_effect = (
662 exc.OpenStackCloudException('error message'))
663 output = openstack_utils.detach_volume(self.mock_shade_client,
666 mock_logger.error.assert_called_once()
667 self.assertFalse(output)
670 class CreateImageTestCase(unittest.TestCase):
673 self.mock_shade_client = mock.Mock()
674 self._uuid = uuidutils.generate_uuid()
675 self.name = 'image_name'
676 self._mock_log = mock.patch.object(openstack_utils, 'log')
677 self.mock_log = self._mock_log.start()
678 self.addCleanup(self._stop_mock)
680 def _stop_mock(self):
681 self._mock_log.stop()
683 def test_create_image_already_exit(self):
684 self.mock_shade_client.get_image_id.return_value = self._uuid
685 output = openstack_utils.create_image(self.mock_shade_client, self.name)
686 self.mock_log.info.assert_called_once()
687 self.assertEqual(self._uuid, output)
689 def test_create_image(self):
690 self.mock_shade_client.get_image_id.return_value = None
691 self.mock_shade_client.create_image.return_value = {'id': self._uuid}
692 output = openstack_utils.create_image(self.mock_shade_client, self.name)
693 self.assertEqual(self._uuid, output)
695 def test_create_image_exception(self):
696 self.mock_shade_client.get_image_id.return_value = None
697 self.mock_shade_client.create_image.side_effect = (
698 exc.OpenStackCloudException('error message'))
700 output = openstack_utils.create_image(self.mock_shade_client,
702 self.mock_log.error.assert_called_once()
703 self.assertIsNone(output)
706 class DeleteImageTestCase(unittest.TestCase):
708 def test_delete_image(self):
709 self.mock_shade_client = mock.Mock()
710 self.mock_shade_client.delete_image.return_value = True
711 output = openstack_utils.delete_image(self.mock_shade_client,
713 self.assertTrue(output)
715 def test_delete_image_fail(self):
716 self.mock_shade_client = mock.Mock()
717 self.mock_shade_client.delete_image.return_value = False
718 output = openstack_utils.delete_image(self.mock_shade_client,
720 self.assertFalse(output)
722 @mock.patch.object(openstack_utils, 'log')
723 def test_delete_image_exception(self, mock_logger):
724 self.mock_shade_client = mock.Mock()
725 self.mock_shade_client.delete_image.side_effect = (
726 exc.OpenStackCloudException('error message'))
727 output = openstack_utils.delete_image(self.mock_shade_client,
729 mock_logger.error.assert_called_once()
730 self.assertFalse(output)