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:
Joshua Harlow 2015-07-01 11:42:18 -07:00 committed by Joshua Harlow
parent 2557d66fa4
commit bf5c513472
5 changed files with 47 additions and 28 deletions

View File

@ -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

View File

@ -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)

View File

@ -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):

View File

@ -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)

View File

@ -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}