Add importlib for python 2.6 *only*
Also fixes up a bunch of test issues that are now being triggered on py2.6 Change-Id: I28b13ee3e1c47e2eb5266bc72c8f2da31220b99f
This commit is contained in:
parent
2557d66fa4
commit
bf5c513472
@ -58,7 +58,7 @@ class HttpOpenStackSource(baseopenstack.BaseOpenStackSource):
|
||||
|
||||
for version in versions:
|
||||
if not self._valid_api_version(version):
|
||||
msg = 'Invalid API version {!r}'.format(version)
|
||||
msg = 'Invalid API version %r' % (version,)
|
||||
raise exceptions.CloudInitError(msg)
|
||||
|
||||
return versions
|
||||
|
@ -5,16 +5,18 @@
|
||||
|
||||
import importlib
|
||||
import subprocess
|
||||
import unittest
|
||||
|
||||
from cloudinit import exceptions
|
||||
from cloudinit import test
|
||||
from cloudinit.tests.util import LogSnatcher
|
||||
from cloudinit.tests.util import mock
|
||||
|
||||
|
||||
class TestNetworkWindows(unittest.TestCase):
|
||||
class TestNetworkWindows(test.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(TestNetworkWindows, self).setUp()
|
||||
|
||||
self._ctypes_mock = mock.MagicMock()
|
||||
self._winreg_mock = mock.Mock()
|
||||
self._win32com_mock = mock.Mock()
|
||||
@ -41,6 +43,8 @@ class TestNetworkWindows(unittest.TestCase):
|
||||
self._network = self._network_module.Network()
|
||||
|
||||
def tearDown(self):
|
||||
super(TestNetworkWindows, self).tearDown()
|
||||
|
||||
self._module_patcher.stop()
|
||||
|
||||
def _test__heap_alloc(self, fail):
|
||||
@ -50,12 +54,12 @@ class TestNetworkWindows(unittest.TestCase):
|
||||
if fail:
|
||||
self._kernel32.HeapAlloc.return_value = None
|
||||
|
||||
with self.assertRaises(exceptions.CloudInitError) as cm:
|
||||
self._network_module._heap_alloc(mock_heap, mock_size)
|
||||
e = self.assertRaises(exceptions.CloudInitError,
|
||||
self._network_module._heap_alloc,
|
||||
mock_heap, mock_size)
|
||||
|
||||
self.assertEqual('Unable to allocate memory for the IP '
|
||||
'forward table',
|
||||
str(cm.exception))
|
||||
'forward table', str(e))
|
||||
else:
|
||||
result = self._network_module._heap_alloc(mock_heap, mock_size)
|
||||
self.assertEqual(self._kernel32.HeapAlloc.return_value, result)
|
||||
@ -69,17 +73,20 @@ class TestNetworkWindows(unittest.TestCase):
|
||||
def test__heap_alloc_no_error(self):
|
||||
self._test__heap_alloc(fail=False)
|
||||
|
||||
def _check_raises_forward(self):
|
||||
with self._network._get_forward_table():
|
||||
pass
|
||||
|
||||
def test__get_forward_table_no_memory(self):
|
||||
self._network_module._heap_alloc = mock.Mock()
|
||||
error_msg = 'Unable to allocate memory for the IP forward table'
|
||||
exc = exceptions.CloudInitError(error_msg)
|
||||
self._network_module._heap_alloc.side_effect = exc
|
||||
|
||||
with self.assertRaises(exceptions.CloudInitError) as cm:
|
||||
with self._network._get_forward_table():
|
||||
pass
|
||||
e = self.assertRaises(exceptions.CloudInitError,
|
||||
self._check_raises_forward)
|
||||
|
||||
self.assertEqual(error_msg, str(cm.exception))
|
||||
self.assertEqual(error_msg, str(e))
|
||||
self._network_module._heap_alloc.assert_called_once_with(
|
||||
self._kernel32.GetProcessHeap.return_value,
|
||||
self._ctypes_mock.wintypes.ULONG.return_value)
|
||||
@ -89,9 +96,8 @@ class TestNetworkWindows(unittest.TestCase):
|
||||
self._iphlpapi.GetIpForwardTable.return_value = (
|
||||
self._iphlpapi.ERROR_INSUFFICIENT_BUFFER)
|
||||
|
||||
with self.assertRaises(exceptions.CloudInitError):
|
||||
with self._network._get_forward_table():
|
||||
pass
|
||||
self.assertRaises(exceptions.CloudInitError,
|
||||
self._check_raises_forward)
|
||||
|
||||
table = self._ctypes_mock.cast.return_value
|
||||
self._iphlpapi.GetIpForwardTable.assert_called_once_with(
|
||||
@ -107,13 +113,11 @@ class TestNetworkWindows(unittest.TestCase):
|
||||
insufficient_buffer=False,
|
||||
fail=False):
|
||||
if fail:
|
||||
with self.assertRaises(exceptions.CloudInitError) as cm:
|
||||
with self._network._get_forward_table():
|
||||
pass
|
||||
|
||||
e = self.assertRaises(exceptions.CloudInitError,
|
||||
self._check_raises_forward)
|
||||
msg = ('Unable to get IP forward table. Error: %s'
|
||||
% mock.sentinel.error)
|
||||
self.assertEqual(msg, str(cm.exception))
|
||||
self.assertEqual(msg, str(e))
|
||||
else:
|
||||
with self._network._get_forward_table() as table:
|
||||
pass
|
||||
@ -207,11 +211,11 @@ class TestNetworkWindows(unittest.TestCase):
|
||||
mock_popen.return_value.communicate.return_value = (None, err)
|
||||
|
||||
if err:
|
||||
with self.assertRaises(exceptions.CloudInitError) as cm:
|
||||
self._network_module.Route.add(mock_route)
|
||||
|
||||
e = self.assertRaises(exceptions.CloudInitError,
|
||||
self._network_module.Route.add,
|
||||
mock_route)
|
||||
msg = "Unable to add route: %s" % err
|
||||
self.assertEqual(msg, str(cm.exception))
|
||||
self.assertEqual(msg, str(e))
|
||||
|
||||
else:
|
||||
self._network_module.Route.add(mock_route)
|
||||
|
@ -75,7 +75,7 @@ class TestHttpOpenStackSource(test.TestCase):
|
||||
|
||||
exc = self.assertRaises(exceptions.CloudInitError,
|
||||
self._source._available_versions)
|
||||
expected = 'Invalid API version {!r}'.format(version)
|
||||
expected = 'Invalid API version %r' % (version,)
|
||||
self.assertEqual(expected, str(exc))
|
||||
|
||||
def test__available_versions_invalid_versions(self):
|
||||
|
@ -4,6 +4,7 @@
|
||||
# vi: ts=4 expandtab
|
||||
|
||||
import logging
|
||||
import sys
|
||||
|
||||
try:
|
||||
from unittest import mock
|
||||
@ -11,11 +12,21 @@ except ImportError:
|
||||
import mock # noqa
|
||||
|
||||
|
||||
_IS_PY26 = sys.version_info[0:2] == (2, 6)
|
||||
|
||||
|
||||
# This is similar with unittest.TestCase.assertLogs from Python 3.4.
|
||||
class SnatchHandler(logging.Handler):
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(SnatchHandler, self).__init__(*args, **kwargs)
|
||||
self.output = []
|
||||
|
||||
if _IS_PY26:
|
||||
# Old style junk is required on 2.6...
|
||||
def __init__(self, *args, **kwargs):
|
||||
logging.Handler.__init__(self, *args, **kwargs)
|
||||
self.output = []
|
||||
else:
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(SnatchHandler, self).__init__(*args, **kwargs)
|
||||
self.output = []
|
||||
|
||||
def emit(self, record):
|
||||
msg = self.format(record)
|
||||
|
6
tox.ini
6
tox.ini
@ -1,7 +1,7 @@
|
||||
[tox]
|
||||
minversion = 1.6
|
||||
skipsdist = True
|
||||
envlist = py27, py34, docs, pep8, py27-coverage, py34-coverage
|
||||
envlist = py26, py27, py34, docs, pep8, py27-coverage, py34-coverage
|
||||
|
||||
[tox:jenkins]
|
||||
downloadcache = ~/cache/pip
|
||||
@ -15,6 +15,10 @@ deps = -r{toxinidir}/test-requirements.txt
|
||||
-r{toxinidir}/requirements.txt
|
||||
commands = {envpython} {toxinidir}/tools/noproxy nosetests {posargs}
|
||||
|
||||
[testenv:py26]
|
||||
deps = {[testenv]deps}
|
||||
importlib
|
||||
|
||||
[testenv:py27-coverage]
|
||||
commands = {envpython} {toxinidir}/tools/noproxy nosetests --with-coverage --cover-erase --cover-package=cloudinit --cover-min-percentage=90 --cover-html {posargs}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user