
It seems sane to have consistent use of a 'TestCase' class wherever possible. I stumbled on need for this in porting some code (the reporter) back to cloud-init 0.7. Change-Id: Ia10546484dfe73154a68e817129ac2f950d5fe85
73 lines
2.6 KiB
Python
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)
|