cloud-init/cloudinit/tests/osys/windows/test_general.py

73 lines
2.6 KiB
Python

# Copyright 2015 Canonical Ltd.
# This file is part of cloud-init. See LICENCE file for license information.
#
# vi: ts=4 expandtab
import importlib
from cloudinit import exceptions
from cloudinit.tests import TestCase
from cloudinit.tests.util import mock
class TestWindowsGeneral(TestCase):
def setUp(self):
super(TestWindowsGeneral, self).setUp()
self._ctypes_mock = mock.Mock()
self._util_mock = mock.MagicMock()
self._module_patcher = mock.patch.dict(
'sys.modules',
{'ctypes': self._ctypes_mock,
'cloudinit.osys.windows.util': self._util_mock})
self._module_patcher.start()
self._general_module = importlib.import_module(
"cloudinit.osys.windows.general")
self._kernel32 = self._general_module.kernel32
self._general = self._general_module.General()
def tearDown(self):
super(TestWindowsGeneral, self).tearDown()
self._module_patcher.stop()
def _test_check_os_version(self, ret_value, error_value=None):
verset_return = 2
self._kernel32.VerSetConditionMask.return_value = (
verset_return)
self._kernel32.VerifyVersionInfoW.return_value = ret_value
self._kernel32.GetLastError.return_value = error_value
old_version = self._kernel32.ERROR_OLD_WIN_VERSION
if error_value and error_value is not old_version:
self.assertRaises(exceptions.CloudInitError,
self._general.check_os_version, 3, 1, 2)
self._kernel32.GetLastError.assert_called_once_with()
else:
response = self._general.check_os_version(3, 1, 2)
self._ctypes_mock.sizeof.assert_called_once_with(
self._kernel32.Win32_OSVERSIONINFOEX_W)
self.assertEqual(
3, self._kernel32.VerSetConditionMask.call_count)
mask = (self._kernel32.VER_MAJORVERSION |
self._kernel32.VER_MINORVERSION |
self._kernel32.VER_BUILDNUMBER)
self._kernel32.VerifyVersionInfoW.assert_called_with(
self._ctypes_mock.byref.return_value, mask, verset_return)
if error_value is old_version:
self._kernel32.GetLastError.assert_called_with()
self.assertFalse(response)
else:
self.assertTrue(response)
def test_check_os_version(self):
m = mock.MagicMock()
self._test_check_os_version(ret_value=m)
def test_check_os_version_expect_false(self):
self._test_check_os_version(
ret_value=None, error_value=self._kernel32.ERROR_OLD_WIN_VERSION)