|
| 1 | +# -*- coding: utf-8 -*- |
| 2 | +''' |
| 3 | +:codeauthor: :email:`Alexandru Bleotu <alexandru.bleotu@morganstanley.com>` |
| 4 | +
|
| 5 | +Tests for cluster related functions in salt.utils.vmware |
| 6 | +''' |
| 7 | + |
| 8 | +# Import python libraries |
| 9 | +from __future__ import absolute_import |
| 10 | +import logging |
| 11 | +# Import Salt testing libraries |
| 12 | +from salttesting import TestCase, skipIf |
| 13 | +from salttesting.mock import NO_MOCK, NO_MOCK_REASON, patch, MagicMock |
| 14 | +# Import Salt libraries |
| 15 | +from salt.exceptions import VMwareApiError, VMwareRuntimeError |
| 16 | +import salt.utils.vmware as vmware |
| 17 | +# Import Third Party Libs |
| 18 | +try: |
| 19 | + from pyVmomi import vim, vmodl |
| 20 | + HAS_PYVMOMI = True |
| 21 | +except ImportError: |
| 22 | + HAS_PYVMOMI = False |
| 23 | + |
| 24 | +# Get Logging Started |
| 25 | +log = logging.getLogger(__name__) |
| 26 | + |
| 27 | + |
| 28 | +@skipIf(NO_MOCK, NO_MOCK_REASON) |
| 29 | +@skipIf(not HAS_PYVMOMI, 'The \'pyvmomi\' library is missing') |
| 30 | +@patch('salt.utils.vmware.get_managed_object_name', MagicMock()) |
| 31 | +@patch('salt.utils.vmware.wait_for_task', MagicMock()) |
| 32 | +class UpdateClusterTestCase(TestCase): |
| 33 | + '''Tests for salt.utils.vmware.update_cluster''' |
| 34 | + |
| 35 | + def setUp(self): |
| 36 | + self.mock_task = MagicMock() |
| 37 | + self.mock_reconfigure_compute_resource_task = \ |
| 38 | + MagicMock(return_value=self.mock_task) |
| 39 | + self.mock_cluster = MagicMock(ReconfigureComputeResource_Task= |
| 40 | + self.mock_reconfigure_compute_resource_task) |
| 41 | + self.mock_cluster_spec = MagicMock() |
| 42 | + |
| 43 | + def test_get_managed_object_name(self): |
| 44 | + mock_get_managed_object_name = MagicMock() |
| 45 | + with patch('salt.utils.vmware.get_managed_object_name', |
| 46 | + mock_get_managed_object_name): |
| 47 | + vmware.update_cluster(self.mock_cluster, self.mock_cluster_spec) |
| 48 | + mock_get_managed_object_name.assert_called_once_with(self.mock_cluster) |
| 49 | + |
| 50 | + def test_reconfigure_compute_resource_task_call(self): |
| 51 | + vmware.update_cluster(self.mock_cluster, self.mock_cluster_spec) |
| 52 | + self.mock_reconfigure_compute_resource_task.assert_called_once_with( |
| 53 | + self.mock_cluster_spec, modify=True) |
| 54 | + |
| 55 | + def test_create_cluster_raise_vim_fault(self): |
| 56 | + exc = vim.fault.VimFault() |
| 57 | + exc.msg = 'VimFault msg' |
| 58 | + self.mock_cluster.ReconfigureComputeResource_Task = \ |
| 59 | + MagicMock(side_effect=exc) |
| 60 | + with self.assertRaises(VMwareApiError) as excinfo: |
| 61 | + vmware.update_cluster(self.mock_cluster, self.mock_cluster_spec) |
| 62 | + self.assertEqual(excinfo.exception.strerror, 'VimFault msg') |
| 63 | + |
| 64 | + def test_create_cluster_raise_runtime_fault(self): |
| 65 | + exc = vmodl.RuntimeFault() |
| 66 | + exc.msg = 'RuntimeFault msg' |
| 67 | + self.mock_cluster.ReconfigureComputeResource_Task = \ |
| 68 | + MagicMock(side_effect=exc) |
| 69 | + with self.assertRaises(VMwareRuntimeError) as excinfo: |
| 70 | + vmware.update_cluster(self.mock_cluster, self.mock_cluster_spec) |
| 71 | + self.assertEqual(excinfo.exception.strerror, 'RuntimeFault msg') |
| 72 | + |
| 73 | + def test_wait_for_task_call(self): |
| 74 | + mock_wait_for_task = MagicMock() |
| 75 | + with patch('salt.utils.vmware.get_managed_object_name', |
| 76 | + MagicMock(return_value='fake_cluster')): |
| 77 | + with patch('salt.utils.vmware.wait_for_task', mock_wait_for_task): |
| 78 | + vmware.update_cluster(self.mock_cluster, |
| 79 | + self.mock_cluster_spec) |
| 80 | + mock_wait_for_task.assert_called_once_with( |
| 81 | + self.mock_task, 'fake_cluster', 'ClusterUpdateTask') |
| 82 | + |
| 83 | + |
| 84 | +if __name__ == '__main__': |
| 85 | + from integration import run_tests |
| 86 | + run_tests(UpdateClusterTestCase, needs_daemon=False) |
0 commit comments