From cb8e1c37b722b2a345dc7215cd68012827cccbb2 Mon Sep 17 00:00:00 2001 From: Alessandro Pilotti Date: Mon, 8 Sep 2014 19:04:14 +0300 Subject: [PATCH] Test module patching refactoring Replaces module reloading in tearDown() with explicit mock patch start and stop. --- .../metadata/services/test_configdrive.py | 30 ++++++++-------- .../plugins/windows/test_extendvolumes.py | 35 +++++++++++-------- .../plugins/windows/test_userdatautils.py | 9 ++--- .../windows/test_winrmcertificateauth.py | 22 ++++++------ .../plugins/windows/test_winrmlistener.py | 23 +++++++----- cloudbaseinit/tests/test_init.py | 33 +++++++++-------- 6 files changed, 84 insertions(+), 68 deletions(-) diff --git a/cloudbaseinit/tests/metadata/services/test_configdrive.py b/cloudbaseinit/tests/metadata/services/test_configdrive.py index 97eed673..49621420 100644 --- a/cloudbaseinit/tests/metadata/services/test_configdrive.py +++ b/cloudbaseinit/tests/metadata/services/test_configdrive.py @@ -22,30 +22,32 @@ import unittest import uuid from oslo.config import cfg -from six import moves CONF = cfg.CONF -_win32com_mock = mock.MagicMock() -_ctypes_mock = mock.MagicMock() -_ctypes_util_mock = mock.MagicMock() -_win32com_client_mock = mock.MagicMock() -_pywintypes_mock = mock.MagicMock() -_mock_dict = {'win32com': _win32com_mock, - 'ctypes': _ctypes_mock, - 'ctypes.util': _ctypes_util_mock, - 'win32com.client': _win32com_client_mock, - 'pywintypes': _pywintypes_mock} - class ConfigDriveServiceTest(unittest.TestCase): - @mock.patch.dict(sys.modules, _mock_dict) def setUp(self): + self._win32com_mock = mock.MagicMock() + self._ctypes_mock = mock.MagicMock() + self._ctypes_util_mock = mock.MagicMock() + self._win32com_client_mock = mock.MagicMock() + self._pywintypes_mock = mock.MagicMock() + + self._module_patcher = mock.patch.dict( + 'sys.modules', + {'win32com': self._win32com_mock, + 'ctypes': self._ctypes_mock, + 'ctypes.util': self._ctypes_util_mock, + 'win32com.client': self._win32com_client_mock, + 'pywintypes': self._pywintypes_mock}) + self._module_patcher.start() + configdrive = importlib.import_module('cloudbaseinit.metadata.services' '.configdrive') self._config_drive = configdrive.ConfigDriveService() def tearDown(self): - moves.reload_module(uuid) + self._module_patcher.stop() @mock.patch('tempfile.gettempdir') @mock.patch('cloudbaseinit.metadata.services.osconfigdrive.factory.' diff --git a/cloudbaseinit/tests/plugins/windows/test_extendvolumes.py b/cloudbaseinit/tests/plugins/windows/test_extendvolumes.py index 8588b359..b3eb0a4a 100644 --- a/cloudbaseinit/tests/plugins/windows/test_extendvolumes.py +++ b/cloudbaseinit/tests/plugins/windows/test_extendvolumes.py @@ -21,24 +21,28 @@ import sys import unittest from oslo.config import cfg -from six import moves CONF = cfg.CONF -_ctypes_mock = mock.MagicMock() -_comtypes_mock = mock.MagicMock() - class ExtendVolumesPluginTests(unittest.TestCase): - @mock.patch.dict(sys.modules, {'comtypes': _comtypes_mock, - 'ctypes': _ctypes_mock}) def setUp(self): + self._ctypes_mock = mock.MagicMock() + self._comtypes_mock = mock.MagicMock() + + self._module_patcher = mock.patch.dict( + 'sys.modules', + {'comtypes': self._comtypes_mock, + 'ctypes': self._ctypes_mock}) + + self._module_patcher.start() + extendvolumes = importlib.import_module('cloudbaseinit.plugins.' 'windows.extendvolumes') self._extend_volumes = extendvolumes.ExtendVolumesPlugin() def tearDown(self): - moves.reload_module(sys) + self._module_patcher.stop() @mock.patch('cloudbaseinit.plugins.windows.extendvolumes' '.ExtendVolumesPlugin._get_volume_index') @@ -58,18 +62,18 @@ class ExtendVolumesPluginTests(unittest.TestCase): mock_enum.Next.side_effect = [(mock_unk, mock_c), (None, None)] mock_unk.QueryInterface.return_value = mock_volume mock_volume.GetProperties.return_value = mock_properties - _ctypes_mock.wstring_at.return_value = 'fake name' + self._ctypes_mock.wstring_at.return_value = 'fake name' mock_get_volume_index.return_value = mock_volume_idxs self._extend_volumes._extend_volumes(mock_pack, [mock_volume_idxs]) mock_pack.QueryVolumes.assert_called_once_with() mock_enum.Next.assert_called_with(1) mock_unk.QueryInterface.assert_called_once_with(_vds_mock) mock_volume.GetProperties.assert_called_once_with() - _ctypes_mock.wstring_at.assert_called_with(mock_properties.pwszName) + self._ctypes_mock.wstring_at.assert_called_with(mock_properties.pwszName) mock_get_volume_index.assert_called_once_with('fake name') mock_extend_volume.assert_called_once_with(mock_pack, mock_volume, mock_properties) - _ctypes_mock.windll.ole32.CoTaskMemFree.assert_called_once_with( + self._ctypes_mock.windll.ole32.CoTaskMemFree.assert_called_once_with( mock_properties.pwszName) def test_get_volume_index(self): @@ -101,7 +105,8 @@ class ExtendVolumesPluginTests(unittest.TestCase): mock_get_volume_extents_to_resize.assert_called_once_with( mock_pack, mock_properties.id) - _ctypes_mock.wstring_at.assert_called_with(mock_properties.pwszName) + self._ctypes_mock.wstring_at.assert_called_with( + mock_properties.pwszName) mock_volume.Extend.assert_called_once_with( mock_VDS_INPUT_DISK.__mul__()(), 1) mock_async.Wait.assert_called_once_with() @@ -132,15 +137,15 @@ class ExtendVolumesPluginTests(unittest.TestCase): mock_pack.QueryDisks.assert_called_once_with() mock_enum.Next.assert_called_with(1) mock_unk.QueryInterface.assert_called_once_with(mock_IVdsDisk) - _ctypes_mock.addressof.assert_called_with(mock_extents_p.contents) + self._ctypes_mock.addressof.assert_called_with(mock_extents_p.contents) mock_VDS_DISK_EXTENT.__mul__().from_address.assert_called_with( - _ctypes_mock.addressof(mock_extents_p.contents)) + self._ctypes_mock.addressof(mock_extents_p.contents)) - _ctypes_mock.pointer.assert_called_once_with( + self._ctypes_mock.pointer.assert_called_once_with( mock_VDS_DISK_EXTENT()) self.assertEqual(response, []) - _ctypes_mock.windll.ole32.CoTaskMemFree.assert_called_with( + self._ctypes_mock.windll.ole32.CoTaskMemFree.assert_called_with( mock_extents_p) @mock.patch('cloudbaseinit.utils.windows.vds.' diff --git a/cloudbaseinit/tests/plugins/windows/test_userdatautils.py b/cloudbaseinit/tests/plugins/windows/test_userdatautils.py index ccddf7d1..a97d4cc4 100644 --- a/cloudbaseinit/tests/plugins/windows/test_userdatautils.py +++ b/cloudbaseinit/tests/plugins/windows/test_userdatautils.py @@ -18,7 +18,6 @@ import uuid import unittest from oslo.config import cfg -from six import moves from cloudbaseinit.plugins.windows import userdatautils from cloudbaseinit.tests.metadata import fake_json_response @@ -32,23 +31,21 @@ class UserDataUtilsTest(unittest.TestCase): self.fake_data = fake_json_response.get_fake_metadata_json( '2013-04-04') - def tearDown(self): - moves.reload_module(uuid) - @mock.patch('re.search') @mock.patch('tempfile.gettempdir') @mock.patch('os.remove') @mock.patch('os.path.exists') @mock.patch('os.path.expandvars') @mock.patch('cloudbaseinit.osutils.factory.get_os_utils') - def _test_execute_user_data_script(self, mock_get_os_utils, + @mock.patch('uuid.uuid4') + def _test_execute_user_data_script(self, mock_uuid4, mock_get_os_utils, mock_path_expandvars, mock_path_exists, mock_os_remove, mock_gettempdir, mock_re_search, fake_user_data): mock_osutils = mock.MagicMock() mock_gettempdir.return_value = 'fake_temp' - uuid.uuid4 = mock.MagicMock(return_value='randomID') + mock_uuid4.return_value = 'randomID' match_instance = mock.MagicMock() path = os.path.join('fake_temp', 'randomID') args = None diff --git a/cloudbaseinit/tests/plugins/windows/test_winrmcertificateauth.py b/cloudbaseinit/tests/plugins/windows/test_winrmcertificateauth.py index 8a1e7924..09f6881a 100644 --- a/cloudbaseinit/tests/plugins/windows/test_winrmcertificateauth.py +++ b/cloudbaseinit/tests/plugins/windows/test_winrmcertificateauth.py @@ -19,31 +19,33 @@ import mock import sys import unittest -from six import moves - from cloudbaseinit.plugins import base from cloudbaseinit.plugins import constants from oslo.config import cfg CONF = cfg.CONF -_ctypes_mock = mock.MagicMock() -_win32com_mock = mock.MagicMock() -_pywintypes_mock = mock.MagicMock() -mock_dict = {'ctypes': _ctypes_mock, - 'win32com': _win32com_mock, - 'pywintypes': _pywintypes_mock} class ConfigWinRMCertificateAuthPluginTests(unittest.TestCase): - @mock.patch.dict(sys.modules, mock_dict) def setUp(self): + self._ctypes_mock = mock.MagicMock() + self._win32com_mock = mock.MagicMock() + self._pywintypes_mock = mock.MagicMock() + + self._module_patcher = mock.patch.dict( + 'sys.modules', + {'ctypes': self._ctypes_mock, + 'win32com': self._win32com_mock, + 'pywintypes': self._pywintypes_mock}) + self._module_patcher.start() + self.winrmcert = importlib.import_module( 'cloudbaseinit.plugins.windows.winrmcertificateauth') self._certif_auth = self.winrmcert.ConfigWinRMCertificateAuthPlugin() def tearDown(self): - moves.reload_module(sys) + self._module_patcher.stop() def _test_get_credentials(self, fake_user, fake_password): mock_shared_data = mock.MagicMock() diff --git a/cloudbaseinit/tests/plugins/windows/test_winrmlistener.py b/cloudbaseinit/tests/plugins/windows/test_winrmlistener.py index 5ec5b08b..14026791 100644 --- a/cloudbaseinit/tests/plugins/windows/test_winrmlistener.py +++ b/cloudbaseinit/tests/plugins/windows/test_winrmlistener.py @@ -23,22 +23,29 @@ from cloudbaseinit.plugins import base from oslo.config import cfg CONF = cfg.CONF -_mock_wintypes = mock.MagicMock() -_mock_pywintypes = mock.MagicMock() -_mock_win32 = mock.MagicMock() -mock_dict = {'ctypes': _mock_wintypes, - 'ctypes.wintypes': _mock_wintypes, - 'pywintypes': _mock_pywintypes, - 'win32com': _mock_win32} class ConfigWinRMListenerPluginTests(unittest.TestCase): - @mock.patch.dict(sys.modules, mock_dict) def setUp(self): + self._mock_wintypes = mock.MagicMock() + self._mock_pywintypes = mock.MagicMock() + self._mock_win32 = mock.MagicMock() + + self._module_patcher = mock.patch.dict( + 'sys.modules', + {'ctypes': self._mock_wintypes, + 'ctypes.wintypes': self._mock_wintypes, + 'pywintypes': self._mock_pywintypes, + 'win32com': self._mock_win32}) + self._module_patcher.start() + winrmlistener = importlib.import_module('cloudbaseinit.plugins.' 'windows.winrmlistener') self._winrmlistener = winrmlistener.ConfigWinRMListenerPlugin() + def tearDown(self): + self._module_patcher.stop() + def _test_check_winrm_service(self, service_exists): mock_osutils = mock.MagicMock() mock_osutils.check_service_exists.return_value = service_exists diff --git a/cloudbaseinit/tests/test_init.py b/cloudbaseinit/tests/test_init.py index 614f9979..bd3e6da7 100644 --- a/cloudbaseinit/tests/test_init.py +++ b/cloudbaseinit/tests/test_init.py @@ -19,34 +19,37 @@ import sys import unittest from oslo.config import cfg -from six import moves from cloudbaseinit import init from cloudbaseinit.plugins import base CONF = cfg.CONF -_win32com_mock = mock.MagicMock() -_comtypes_mock = mock.MagicMock() -_pywintypes_mock = mock.MagicMock() -_ctypes_mock = mock.MagicMock() -_ctypes_util_mock = mock.MagicMock() -mock_dict = {'ctypes.util': _ctypes_util_mock, - 'win32com': _win32com_mock, - 'comtypes': _comtypes_mock, - 'pywintypes': _pywintypes_mock, - 'ctypes': _ctypes_mock} - class InitManagerTest(unittest.TestCase): - @mock.patch.dict(sys.modules, mock_dict) def setUp(self): + self._win32com_mock = mock.MagicMock() + self._comtypes_mock = mock.MagicMock() + self._pywintypes_mock = mock.MagicMock() + self._ctypes_mock = mock.MagicMock() + self._ctypes_util_mock = mock.MagicMock() + + self._module_patcher = mock.patch.dict( + 'sys.modules', + {'ctypes.util': self._ctypes_util_mock, + 'win32com': self._win32com_mock, + 'comtypes': self._comtypes_mock, + 'pywintypes': self._pywintypes_mock, + 'ctypes': self._ctypes_mock}) + + self._module_patcher.start() + self.osutils = mock.MagicMock() self.plugin = mock.MagicMock() + self._init = init.InitManager() def tearDown(self): - moves.reload_module(sys) - moves.reload_module(init) + self._module_patcher.stop() def _test_get_plugin_section(self, instance_id): response = self._init._get_plugins_section(instance_id=instance_id)