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 ##############################################################################
10 from oslo_utils import uuidutils
16 from yardstick.common import constants
17 from yardstick.common import openstack_utils
20 class GetCredentialsTestCase(unittest.TestCase):
22 @mock.patch('yardstick.common.openstack_utils.os')
23 def test_get_credentials(self, _):
24 with mock.patch.dict('os.environ', {'OS_IDENTITY_API_VERSION': '2'},
26 openstack_utils.get_credentials()
29 class GetHeatApiVersionTestCase(unittest.TestCase):
31 def test_get_heat_api_version_check_result(self):
32 API = 'HEAT_API_VERSION'
35 with mock.patch.dict('os.environ', {API: '2'}, clear=True):
36 api_version = openstack_utils.get_heat_api_version()
37 self.assertEqual(api_version, expected_result)
40 class GetShadeClientTestCase(unittest.TestCase):
42 @mock.patch.object(shade, 'openstack_cloud', return_value='os_client')
43 def test_get_shade_client(self, mock_openstack_cloud):
44 os_cloud_config = {'param1': True, 'param2': 'value2'}
45 self.assertEqual('os_client',
46 openstack_utils.get_shade_client(**os_cloud_config))
47 os_cloud_config.update(constants.OS_CLOUD_DEFAULT_CONFIG)
48 mock_openstack_cloud.assert_called_once_with(**os_cloud_config)
50 mock_openstack_cloud.reset_mock()
51 os_cloud_config = {'verify': True, 'param2': 'value2'}
52 self.assertEqual('os_client',
53 openstack_utils.get_shade_client(**os_cloud_config))
54 mock_openstack_cloud.assert_called_once_with(**os_cloud_config)
56 @mock.patch.object(shade, 'openstack_cloud', return_value='os_client')
57 def test_get_shade_client_no_parameters(self, mock_openstack_cloud):
58 self.assertEqual('os_client', openstack_utils.get_shade_client())
59 mock_openstack_cloud.assert_called_once_with(
60 **constants.OS_CLOUD_DEFAULT_CONFIG)
62 @mock.patch.object(shade, 'operator_cloud', return_value='os_client')
63 def test_get_shade_operator_client(self, mock_operator_cloud):
64 self.assertEqual('os_client', openstack_utils.get_shade_operator_client())
65 mock_operator_cloud.assert_called_once_with(
66 **constants.OS_CLOUD_DEFAULT_CONFIG)
69 class DeleteNeutronNetTestCase(unittest.TestCase):
72 self.mock_shade_client = mock.Mock()
74 def test_delete_neutron_net(self):
75 self.mock_shade_client.delete_network.return_value = True
76 output = openstack_utils.delete_neutron_net(self.mock_shade_client,
78 self.assertTrue(output)
80 def test_delete_neutron_net_fail(self):
81 self.mock_shade_client.delete_network.return_value = False
82 output = openstack_utils.delete_neutron_net(self.mock_shade_client,
84 self.assertFalse(output)
86 @mock.patch.object(openstack_utils, 'log')
87 def test_delete_neutron_net_exception(self, mock_logger):
88 self.mock_shade_client.delete_network.side_effect = (
89 exc.OpenStackCloudException('error message'))
90 output = openstack_utils.delete_neutron_net(self.mock_shade_client,
92 self.assertFalse(output)
93 mock_logger.error.assert_called_once()
96 class CreateNeutronNetTestCase(unittest.TestCase):
99 self.mock_shade_client = mock.Mock()
100 self.network_name = 'name'
101 self.mock_shade_client.create_network = mock.Mock()
103 def test_create_neutron_net(self):
104 _uuid = uuidutils.generate_uuid()
105 self.mock_shade_client.create_network.return_value = {'id': _uuid}
106 output = openstack_utils.create_neutron_net(self.mock_shade_client,
108 self.assertEqual(_uuid, output)
110 @mock.patch.object(openstack_utils, 'log')
111 def test_create_neutron_net_exception(self, mock_logger):
112 self.mock_shade_client.create_network.side_effect = (
113 exc.OpenStackCloudException('error message'))
115 output = openstack_utils.create_neutron_net(self.mock_shade_client,
117 mock_logger.error.assert_called_once()
118 self.assertIsNone(output)
121 class CreateNeutronSubnetTestCase(unittest.TestCase):
124 self.mock_shade_client = mock.Mock()
125 self.network_name_or_id = 'name_or_id'
126 self.mock_shade_client.create_subnet = mock.Mock()
128 def test_create_neutron_subnet(self):
129 _uuid = uuidutils.generate_uuid()
130 self.mock_shade_client.create_subnet.return_value = {'id': _uuid}
131 output = openstack_utils.create_neutron_subnet(
132 self.mock_shade_client, self.network_name_or_id)
133 self.assertEqual(_uuid, output)
135 @mock.patch.object(openstack_utils, 'log')
136 def test_create_neutron_subnet_exception(self, mock_logger):
137 self.mock_shade_client.create_subnet.side_effect = (
138 exc.OpenStackCloudException('error message'))
140 output = openstack_utils.create_neutron_subnet(
141 self.mock_shade_client, self.network_name_or_id)
142 mock_logger.error.assert_called_once()
143 self.assertIsNone(output)
146 class DeleteNeutronRouterTestCase(unittest.TestCase):
149 self.mock_shade_client = mock.Mock()
150 self.mock_shade_client.delete_router = mock.Mock()
152 def test_delete_neutron_router(self):
153 self.mock_shade_client.delete_router.return_value = True
154 output = openstack_utils.delete_neutron_router(self.mock_shade_client,
156 self.assertTrue(output)
158 def test_delete_neutron_router_fail(self):
159 self.mock_shade_client.delete_router.return_value = False
160 output = openstack_utils.delete_neutron_router(self.mock_shade_client,
162 self.assertFalse(output)
164 @mock.patch.object(openstack_utils, 'log')
165 def test_delete_neutron_router_exception(self, mock_logger):
166 self.mock_shade_client.delete_router.side_effect = (
167 exc.OpenStackCloudException('error message'))
168 output = openstack_utils.delete_neutron_router(self.mock_shade_client,
170 mock_logger.error.assert_called_once()
171 self.assertFalse(output)
174 class CreateNeutronRouterTestCase(unittest.TestCase):
177 self.mock_shade_client = mock.Mock()
178 self.mock_shade_client.create_subnet = mock.Mock()
180 def test_create_neutron_router(self):
181 _uuid = uuidutils.generate_uuid()
182 self.mock_shade_client.create_router.return_value = {'id': _uuid}
183 output = openstack_utils.create_neutron_router(
184 self.mock_shade_client)
185 self.assertEqual(_uuid, output)
187 @mock.patch.object(openstack_utils, 'log')
188 def test_create_neutron_subnet_exception(self, mock_logger):
189 self.mock_shade_client.create_router.side_effect = (
190 exc.OpenStackCloudException('error message'))
192 output = openstack_utils.create_neutron_router(
193 self.mock_shade_client)
194 mock_logger.error.assert_called_once()
195 self.assertIsNone(output)
198 class RemoveRouterInterfaceTestCase(unittest.TestCase):
201 self.mock_shade_client = mock.Mock()
202 self.router = 'router'
203 self.mock_shade_client.remove_router_interface = mock.Mock()
205 def test_remove_router_interface(self):
206 self.mock_shade_client.remove_router_interface.return_value = True
207 output = openstack_utils.remove_router_interface(
208 self.mock_shade_client, self.router)
209 self.assertTrue(output)
211 @mock.patch.object(openstack_utils, 'log')
212 def test_remove_router_interface_exception(self, mock_logger):
213 self.mock_shade_client.remove_router_interface.side_effect = (
214 exc.OpenStackCloudException('error message'))
215 output = openstack_utils.remove_router_interface(
216 self.mock_shade_client, self.router)
217 mock_logger.error.assert_called_once()
218 self.assertFalse(output)
221 class CreateFloatingIpTestCase(unittest.TestCase):
224 self.mock_shade_client = mock.Mock()
225 self.network_name_or_id = 'name'
226 self.mock_shade_client.create_floating_ip = mock.Mock()
228 def test_create_floating_ip(self):
229 self.mock_shade_client.create_floating_ip.return_value = \
230 {'floating_ip_address': 'value1', 'id': 'value2'}
231 output = openstack_utils.create_floating_ip(self.mock_shade_client,
232 self.network_name_or_id)
233 self.assertEqual({'fip_addr': 'value1', 'fip_id': 'value2'}, output)
235 @mock.patch.object(openstack_utils, 'log')
236 def test_create_floating_ip_exception(self, mock_logger):
237 self.mock_shade_client.create_floating_ip.side_effect = (
238 exc.OpenStackCloudException('error message'))
239 output = openstack_utils.create_floating_ip(
240 self.mock_shade_client, self.network_name_or_id)
241 mock_logger.error.assert_called_once()
242 self.assertIsNone(output)
245 class DeleteFloatingIpTestCase(unittest.TestCase):
248 self.mock_shade_client = mock.Mock()
249 self.floating_ip_id = 'floating_ip_id'
250 self.mock_shade_client.delete_floating_ip = mock.Mock()
252 def test_delete_floating_ip(self):
253 self.mock_shade_client.delete_floating_ip.return_value = True
254 output = openstack_utils.delete_floating_ip(self.mock_shade_client,
256 self.assertTrue(output)
258 def test_delete_floating_ip_fail(self):
259 self.mock_shade_client.delete_floating_ip.return_value = False
260 output = openstack_utils.delete_floating_ip(self.mock_shade_client,
262 self.assertFalse(output)
264 @mock.patch.object(openstack_utils, 'log')
265 def test_delete_floating_ip_exception(self, mock_logger):
266 self.mock_shade_client.delete_floating_ip.side_effect = (
267 exc.OpenStackCloudException('error message'))
268 output = openstack_utils.delete_floating_ip(self.mock_shade_client,
270 mock_logger.error.assert_called_once()
271 self.assertFalse(output)
274 class CreateSecurityGroupRuleTestCase(unittest.TestCase):
277 self.mock_shade_client = mock.Mock()
278 self.secgroup_name_or_id = 'sg_name_id'
279 self.mock_shade_client.create_security_group_rule = mock.Mock()
281 def test_create_security_group_rule(self):
282 self.mock_shade_client.create_security_group_rule.return_value = (
283 {'security_group_rule'})
284 output = openstack_utils.create_security_group_rule(
285 self.mock_shade_client, self.secgroup_name_or_id)
286 self.assertTrue(output)
288 @mock.patch.object(openstack_utils, 'log')
289 def test_create_security_group_rule_exception(self, mock_logger):
290 self.mock_shade_client.create_security_group_rule.side_effect = (
291 exc.OpenStackCloudException('error message'))
293 output = openstack_utils.create_security_group_rule(
294 self.mock_shade_client, self.secgroup_name_or_id)
295 mock_logger.error.assert_called_once()
296 self.assertFalse(output)
299 class ListImageTestCase(unittest.TestCase):
301 def test_list_images(self):
302 mock_shade_client = mock.MagicMock()
303 mock_shade_client.list_images.return_value = []
304 openstack_utils.list_images(mock_shade_client)
306 @mock.patch.object(openstack_utils, 'log')
307 def test_list_images_exception(self, mock_logger):
308 mock_shade_client = mock.MagicMock()
309 mock_shade_client.list_images = mock.MagicMock()
310 mock_shade_client.list_images.side_effect = (
311 exc.OpenStackCloudException('error message'))
312 images = openstack_utils.list_images(mock_shade_client)
313 mock_logger.error.assert_called_once()
314 self.assertFalse(images)
317 class SecurityGroupTestCase(unittest.TestCase):
320 self.mock_shade_client = mock.Mock()
321 self.sg_name = 'sg_name'
322 self.sg_description = 'sg_description'
323 self._uuid = uuidutils.generate_uuid()
325 def test_create_security_group_full_existing_security_group(self):
326 self.mock_shade_client.get_security_group.return_value = (
327 {'name': 'name', 'id': self._uuid})
328 output = openstack_utils.create_security_group_full(
329 self.mock_shade_client, self.sg_name, self.sg_description)
330 self.mock_shade_client.get_security_group.assert_called_once()
331 self.assertEqual(self._uuid, output)
333 @mock.patch.object(openstack_utils, 'log')
334 def test_create_security_group_full_non_existing_security_group(
336 self.mock_shade_client.get_security_group.return_value = None
337 self.mock_shade_client.create_security_group.side_effect = (
338 exc.OpenStackCloudException('error message'))
339 output = openstack_utils.create_security_group_full(
340 self.mock_shade_client, self.sg_name, self.sg_description)
341 mock_logger.error.assert_called_once()
342 self.assertIsNone(output)
344 @mock.patch.object(openstack_utils, 'create_security_group_rule')
345 @mock.patch.object(openstack_utils, 'log')
346 def test_create_security_group_full_create_rule_fail(
347 self, mock_logger, mock_create_security_group_rule):
348 self.mock_shade_client.get_security_group.return_value = None
349 self.mock_shade_client.create_security_group.return_value = (
350 {'name': 'name', 'id': self._uuid})
351 mock_create_security_group_rule.return_value = False
352 output = openstack_utils.create_security_group_full(
353 self.mock_shade_client, self.sg_name, self.sg_description)
354 mock_create_security_group_rule.assert_called()
355 self.mock_shade_client.delete_security_group(self.sg_name)
356 mock_logger.error.assert_called_once()
357 self.assertIsNone(output)
359 @mock.patch.object(openstack_utils, 'create_security_group_rule')
360 def test_create_security_group_full(
361 self, mock_create_security_group_rule):
362 self.mock_shade_client.get_security_group.return_value = None
363 self.mock_shade_client.create_security_group.return_value = (
364 {'name': 'name', 'id': self._uuid})
365 mock_create_security_group_rule.return_value = True
366 output = openstack_utils.create_security_group_full(
367 self.mock_shade_client, self.sg_name, self.sg_description)
368 mock_create_security_group_rule.assert_called()
369 self.mock_shade_client.delete_security_group(self.sg_name)
370 self.assertEqual(self._uuid, output)
372 # *********************************************
374 # *********************************************
377 class CreateInstanceTestCase(unittest.TestCase):
379 def test_create_instance_and_wait_for_active(self):
380 self.mock_shade_client = mock.Mock()
383 flavor = 'flavor_name'
384 self.mock_shade_client.create_server.return_value = (
385 {'name': name, 'image': image, 'flavor': flavor})
386 output = openstack_utils.create_instance_and_wait_for_active(
387 self.mock_shade_client, name, image, flavor)
389 {'name': name, 'image': image, 'flavor': flavor}, output)
391 @mock.patch.object(openstack_utils, 'log')
392 def test_create_instance_and_wait_for_active_fail(self, mock_logger):
393 self.mock_shade_client = mock.Mock()
394 self.mock_shade_client.create_server.side_effect = (
395 exc.OpenStackCloudException('error message'))
396 output = openstack_utils.create_instance_and_wait_for_active(
397 self.mock_shade_client, 'server_name', 'image_name', 'flavor_name')
398 mock_logger.error.assert_called_once()
399 self.assertIsNone(output)
402 class DeleteInstanceTestCase(unittest.TestCase):
405 self.mock_shade_client = mock.Mock()
407 def test_delete_instance(self):
408 self.mock_shade_client.delete_server.return_value = True
409 output = openstack_utils.delete_instance(self.mock_shade_client,
411 self.assertTrue(output)
413 def test_delete_instance_fail(self):
414 self.mock_shade_client.delete_server.return_value = False
415 output = openstack_utils.delete_instance(self.mock_shade_client,
417 self.assertFalse(output)
419 @mock.patch.object(openstack_utils, 'log')
420 def test_delete_instance_exception(self, mock_logger):
421 self.mock_shade_client.delete_server.side_effect = (
422 exc.OpenStackCloudException('error message'))
423 output = openstack_utils.delete_instance(self.mock_shade_client,
425 mock_logger.error.assert_called_once()
426 self.assertFalse(output)
429 class CreateKeypairTestCase(unittest.TestCase):
432 self.mock_shade_client = mock.Mock()
433 self.name = 'key_name'
435 def test_create_keypair(self):
436 self.mock_shade_client.create_keypair.return_value = (
437 {'name': 'key-name', 'type': 'ssh'})
438 output = openstack_utils.create_keypair(
439 self.mock_shade_client, self.name)
441 {'name': 'key-name', 'type': 'ssh'},
444 @mock.patch.object(openstack_utils, 'log')
445 def test_create_keypair_fail(self, mock_logger):
446 self.mock_shade_client.create_keypair.side_effect = (
447 exc.OpenStackCloudException('error message'))
448 output = openstack_utils.create_keypair(
449 self.mock_shade_client, self.name)
450 mock_logger.error.assert_called_once()
451 self.assertIsNone(output)
454 class DeleteKeypairTestCase(unittest.TestCase):
457 self.mock_shade_client = mock.Mock()
459 def test_delete_keypair(self):
460 self.mock_shade_client.delete_keypair.return_value = True
461 output = openstack_utils.delete_keypair(self.mock_shade_client,
463 self.assertTrue(output)
465 def test_delete_keypair_fail(self):
466 self.mock_shade_client.delete_keypair.return_value = False
467 output = openstack_utils.delete_keypair(self.mock_shade_client,
469 self.assertFalse(output)
471 @mock.patch.object(openstack_utils, 'log')
472 def test_delete_keypair_exception(self, mock_logger):
473 self.mock_shade_client.delete_keypair.side_effect = (
474 exc.OpenStackCloudException('error message'))
475 output = openstack_utils.delete_keypair(self.mock_shade_client,
477 mock_logger.error.assert_called_once()
478 self.assertFalse(output)
481 class AttachVolumeToServerTestCase(unittest.TestCase):
483 def test_attach_volume_to_server(self):
484 self.mock_shade_client = mock.Mock()
485 self.mock_shade_client.get_server.return_value = {'server_dict'}
486 self.mock_shade_client.get_volume.return_value = {'volume_dict'}
487 self.mock_shade_client.attach_volume.return_value = True
488 output = openstack_utils.attach_volume_to_server(
489 self.mock_shade_client, 'server_name_or_id', 'volume_name_or_id')
490 self.assertTrue(output)
492 @mock.patch.object(openstack_utils, 'log')
493 def test_attach_volume_to_server_fail(self, mock_logger):
494 self.mock_shade_client = mock.Mock()
495 self.mock_shade_client.attach_volume.side_effect = (
496 exc.OpenStackCloudException('error message'))
497 output = openstack_utils.attach_volume_to_server(
498 self.mock_shade_client, 'server_name_or_id', 'volume_name_or_id')
499 mock_logger.error.assert_called_once()
500 self.assertFalse(output)
503 class GetServerTestCase(unittest.TestCase):
505 def test_get_server(self):
506 self.mock_shade_client = mock.Mock()
507 _uuid = uuidutils.generate_uuid()
508 self.mock_shade_client.get_server.return_value = {
509 'name': 'server_name', 'id': _uuid}
510 output = openstack_utils.get_server(self.mock_shade_client,
512 self.assertEqual({'name': 'server_name', 'id': _uuid}, output)
514 @mock.patch.object(openstack_utils, 'log')
515 def test_get_server_exception(self, mock_logger):
516 self.mock_shade_client = mock.Mock()
517 self.mock_shade_client.get_server.side_effect = (
518 exc.OpenStackCloudException('error message'))
519 output = openstack_utils.get_server(self.mock_shade_client,
521 mock_logger.error.assert_called_once()
522 self.assertIsNone(output)
525 class GetFlavorTestCase(unittest.TestCase):
527 def test_get_flavor(self):
528 self.mock_shade_client = mock.Mock()
529 _uuid = uuidutils.generate_uuid()
530 self.mock_shade_client.get_flavor.return_value = {
531 'name': 'flavor_name', 'id': _uuid}
532 output = openstack_utils.get_flavor(self.mock_shade_client,
534 self.assertEqual({'name': 'flavor_name', 'id': _uuid}, output)
536 @mock.patch.object(openstack_utils, 'log')
537 def test_get_flavor_exception(self, mock_logger):
538 self.mock_shade_client = mock.Mock()
539 self.mock_shade_client.get_flavor.side_effect = (
540 exc.OpenStackCloudException('error message'))
541 output = openstack_utils.get_flavor(self.mock_shade_client,
543 mock_logger.error.assert_called_once()
544 self.assertIsNone(output)
546 # *********************************************
548 # *********************************************
551 class GetVolumeIDTestCase(unittest.TestCase):
553 def test_get_volume_id(self):
554 self.mock_shade_client = mock.Mock()
555 _uuid = uuidutils.generate_uuid()
556 self.mock_shade_client.get_volume_id.return_value = _uuid
557 output = openstack_utils.get_volume_id(self.mock_shade_client,
559 self.assertEqual(_uuid, output)
561 def test_get_volume_id_None(self):
562 self.mock_shade_client = mock.Mock()
563 self.mock_shade_client.get_volume_id.return_value = None
564 output = openstack_utils.get_volume_id(self.mock_shade_client,
566 self.assertIsNone(output)
569 class GetVolumeTestCase(unittest.TestCase):
572 self.mock_shade_client = mock.Mock()
573 self.mock_shade_client.get_volume = mock.Mock()
575 def test_get_volume(self):
576 self.mock_shade_client.get_volume.return_value = {'volume'}
577 output = openstack_utils.get_volume(self.mock_shade_client,
579 self.assertEqual({'volume'}, output)
581 def test_get_volume_None(self):
582 self.mock_shade_client.get_volume.return_value = None
583 output = openstack_utils.get_volume(self.mock_shade_client,
585 self.assertIsNone(output)
588 class CreateVolumeTestCase(unittest.TestCase):
591 self.mock_shade_client = mock.Mock()
594 def test_create_volume(self):
595 self.mock_shade_client.create_volume.return_value = (
596 {'name': 'volume-name', 'size': self.size})
597 output = openstack_utils.create_volume(
598 self.mock_shade_client, self.size)
600 {'name': 'volume-name', 'size': self.size},
603 @mock.patch.object(openstack_utils, 'log')
604 def test_create_volume_fail(self, mock_logger):
605 self.mock_shade_client.create_volume.side_effect = (
606 exc.OpenStackCloudException('error message'))
607 output = openstack_utils.create_volume(self.mock_shade_client,
609 mock_logger.error.assert_called_once()
610 self.assertIsNone(output)
613 class DeleteVolumeTestCase(unittest.TestCase):
616 self.mock_shade_client = mock.Mock()
618 def test_delete_volume(self):
619 self.mock_shade_client.delete_volume.return_value = True
620 output = openstack_utils.delete_volume(self.mock_shade_client,
622 self.assertTrue(output)
624 def test_delete_volume_fail(self):
625 self.mock_shade_client.delete_volume.return_value = False
626 output = openstack_utils.delete_volume(self.mock_shade_client,
628 self.assertFalse(output)
630 @mock.patch.object(openstack_utils, 'log')
631 def test_delete_volume_exception(self, mock_logger):
632 self.mock_shade_client.delete_volume.side_effect = (
633 exc.OpenStackCloudException('error message'))
634 output = openstack_utils.delete_volume(self.mock_shade_client,
636 mock_logger.error.assert_called_once()
637 self.assertFalse(output)
640 class DetachVolumeTestCase(unittest.TestCase):
642 @mock.patch.object(openstack_utils, 'get_server')
643 def test_detach_volume(self, mock_get_server):
644 self.mock_shade_client = mock.Mock()
645 mock_get_server.return_value = {'server_dict'}
646 self.mock_shade_client.get_volume.return_value = {'volume_dict'}
647 output = openstack_utils.detach_volume(self.mock_shade_client,
650 self.assertTrue(output)
652 @mock.patch.object(openstack_utils, 'get_server')
653 @mock.patch.object(openstack_utils, 'log')
654 def test_detach_volume_exception(self, mock_logger, mock_get_server):
655 self.mock_shade_client = mock.Mock()
656 mock_get_server.return_value = {'server_dict'}
657 self.mock_shade_client.get_volume.return_value = {'volume_dict'}
658 self.mock_shade_client.detach_volume.side_effect = (
659 exc.OpenStackCloudException('error message'))
660 output = openstack_utils.detach_volume(self.mock_shade_client,
663 mock_logger.error.assert_called_once()
664 self.assertFalse(output)
667 # *********************************************
669 # *********************************************
671 class CreateImageTestCase(unittest.TestCase):
674 self.mock_shade_client = mock.Mock()
675 self._uuid = uuidutils.generate_uuid()
676 self.name = 'image_name'
678 @mock.patch.object(openstack_utils, 'log')
679 def test_create_image_already_exit(self, mock_logger):
680 self.mock_shade_client.get_image_id.return_value = self._uuid
681 output = openstack_utils.create_image(self.mock_shade_client, self.name)
682 mock_logger.info.assert_called_once()
683 self.assertEqual(self._uuid, output)
685 def test_create_image(self):
686 self.mock_shade_client.get_image_id.return_value = None
687 self.mock_shade_client.create_image.return_value = {'id': self._uuid}
688 output = openstack_utils.create_image(self.mock_shade_client, self.name)
689 self.assertEqual(self._uuid, output)
691 @mock.patch.object(openstack_utils, 'log')
692 def test_create_image_exception(self, mock_logger):
693 self.mock_shade_client.get_image_id.return_value = None
694 self.mock_shade_client.create_image.side_effect = (
695 exc.OpenStackCloudException('error message'))
697 output = openstack_utils.create_image(self.mock_shade_client,
699 mock_logger.error.assert_called_once()
700 self.assertIsNone(output)
703 class DeleteImageTestCase(unittest.TestCase):
705 def test_delete_image(self):
706 self.mock_shade_client = mock.Mock()
707 self.mock_shade_client.delete_image.return_value = True
708 output = openstack_utils.delete_image(self.mock_shade_client,
710 self.assertTrue(output)
712 def test_delete_image_fail(self):
713 self.mock_shade_client = mock.Mock()
714 self.mock_shade_client.delete_image.return_value = False
715 output = openstack_utils.delete_image(self.mock_shade_client,
717 self.assertFalse(output)
719 @mock.patch.object(openstack_utils, 'log')
720 def test_delete_image_exception(self, mock_logger):
721 self.mock_shade_client = mock.Mock()
722 self.mock_shade_client.delete_image.side_effect = (
723 exc.OpenStackCloudException('error message'))
724 output = openstack_utils.delete_image(self.mock_shade_client,
726 mock_logger.error.assert_called_once()
727 self.assertFalse(output)