summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScott Moser <smoser@ubuntu.com>2018-02-12 13:54:50 -0700
committerChad Smith <chad.smith@canonical.com>2018-02-12 13:54:50 -0700
commit754f54037aca0f604b8b57ab71b30dad5e5066cf (patch)
tree0c849988ab451b74088713daa53b7a73190426b1
parenta1ca220d137cf7b3f79b516980a042ec800a8d91 (diff)
downloadvyos-cloud-init-754f54037aca0f604b8b57ab71b30dad5e5066cf.tar.gz
vyos-cloud-init-754f54037aca0f604b8b57ab71b30dad5e5066cf.zip
tests: run nosetests in cloudinit/ directory, fix py26 fallout.
When we moved some tests to live under cloudinit/ we inadvertantly failed to change all things that would run nose to include that directory. This changes all the 'nose' invocations to consistently run with tests/unittests and cloudinit/. Also, it works around, more correctly this time, a python2.6-ism with the following code: with assertRaises(SystemExit) as cm: sys.exit(2)
-rw-r--r--cloudinit/cmd/tests/test_clean.py3
-rw-r--r--cloudinit/cmd/tests/test_status.py3
-rw-r--r--cloudinit/tests/helpers.py20
-rw-r--r--tests/unittests/test_handler/test_schema.py12
-rwxr-xr-xtools/run-centos3
-rw-r--r--tox.ini6
6 files changed, 25 insertions, 22 deletions
diff --git a/cloudinit/cmd/tests/test_clean.py b/cloudinit/cmd/tests/test_clean.py
index 6713af4f..5a3ec3bf 100644
--- a/cloudinit/cmd/tests/test_clean.py
+++ b/cloudinit/cmd/tests/test_clean.py
@@ -165,10 +165,11 @@ class TestClean(CiTestCase):
wrap_and_call(
'cloudinit.cmd.clean',
{'Init': {'side_effect': self.init_class},
+ 'sys.exit': {'side_effect': self.sys_exit},
'sys.argv': {'new': ['clean', '--logs']}},
clean.main)
- self.assertRaisesCodeEqual(0, context_manager.exception.code)
+ self.assertEqual(0, context_manager.exception.code)
self.assertFalse(
os.path.exists(self.log1), 'Unexpected log {0}'.format(self.log1))
diff --git a/cloudinit/cmd/tests/test_status.py b/cloudinit/cmd/tests/test_status.py
index 4a5a8c06..37a89936 100644
--- a/cloudinit/cmd/tests/test_status.py
+++ b/cloudinit/cmd/tests/test_status.py
@@ -380,10 +380,11 @@ class TestStatus(CiTestCase):
wrap_and_call(
'cloudinit.cmd.status',
{'sys.argv': {'new': ['status']},
+ 'sys.exit': {'side_effect': self.sys_exit},
'_is_cloudinit_disabled': (False, ''),
'Init': {'side_effect': self.init_class}},
status.main)
- self.assertRaisesCodeEqual(0, context_manager.exception.code)
+ self.assertEqual(0, context_manager.exception.code)
self.assertEqual('status: running\n', m_stdout.getvalue())
# vi: ts=4 expandtab syntax=python
diff --git a/cloudinit/tests/helpers.py b/cloudinit/tests/helpers.py
index 0080c729..41d9a8ee 100644
--- a/cloudinit/tests/helpers.py
+++ b/cloudinit/tests/helpers.py
@@ -173,17 +173,15 @@ class CiTestCase(TestCase):
dir = self.tmp_dir()
return os.path.normpath(os.path.abspath(os.path.join(dir, path)))
- def assertRaisesCodeEqual(self, expected, found):
- """Handle centos6 having different context manager for assertRaises.
- with assertRaises(Exception) as e:
- raise Exception("BOO")
-
- centos6 will have e.exception as an integer.
- anything nwere will have it as something with a '.code'"""
- if isinstance(found, int):
- self.assertEqual(expected, found)
- else:
- self.assertEqual(expected, found.code)
+ def sys_exit(self, code):
+ """Provide a wrapper around sys.exit for python 2.6
+
+ In 2.6, this code would produce 'cm.exception' with value int(2)
+ rather than the SystemExit that was raised by sys.exit(2).
+ with assertRaises(SystemExit) as cm:
+ sys.exit(2)
+ """
+ raise SystemExit(code)
class ResourceUsingTestCase(CiTestCase):
diff --git a/tests/unittests/test_handler/test_schema.py b/tests/unittests/test_handler/test_schema.py
index 648573f6..df67a0e0 100644
--- a/tests/unittests/test_handler/test_schema.py
+++ b/tests/unittests/test_handler/test_schema.py
@@ -336,11 +336,13 @@ class MainTest(CiTestCase):
def test_main_missing_args(self):
"""Main exits non-zero and reports an error on missing parameters."""
- with mock.patch('sys.argv', ['mycmd']):
- with mock.patch('sys.stderr', new_callable=StringIO) as m_stderr:
- with self.assertRaises(SystemExit) as context_manager:
- main()
- self.assertEqual('1', str(context_manager.exception))
+ with mock.patch('sys.exit', side_effect=self.sys_exit):
+ with mock.patch('sys.argv', ['mycmd']):
+ with mock.patch('sys.stderr', new_callable=StringIO) as \
+ m_stderr:
+ with self.assertRaises(SystemExit) as context_manager:
+ main()
+ self.assertEqual(1, context_manager.exception.code)
self.assertEqual(
'Expected either --config-file argument or --doc\n',
m_stderr.getvalue())
diff --git a/tools/run-centos b/tools/run-centos
index 6ac6c11f..cb241ee5 100755
--- a/tools/run-centos
+++ b/tools/run-centos
@@ -313,7 +313,8 @@ main() {
if [ -n "$unittest" ]; then
debug 1 "running unit tests."
- inside_as_cd "$name" "$user" "$cdir" nosetests tests/unittests ||
+ inside_as_cd "$name" "$user" "$cdir" \
+ nosetests tests/unittests cloudinit ||
{ errorrc "nosetests failed."; errors=$(($errors+1)); }
fi
diff --git a/tox.ini b/tox.ini
index bb74853f..1f990af4 100644
--- a/tox.ini
+++ b/tox.ini
@@ -45,7 +45,7 @@ deps = -r{toxinidir}/test-requirements.txt
[testenv:py26]
deps = -r{toxinidir}/test-requirements.txt
-commands = nosetests {posargs:tests/unittests}
+commands = nosetests {posargs:tests/unittests cloudinit}
setenv =
LC_ALL = C
@@ -83,7 +83,7 @@ deps =
[testenv:centos6]
basepython = python2.6
-commands = nosetests {posargs:tests/unittests}
+commands = nosetests {posargs:tests/unittests cloudinit}
deps =
# requirements
argparse==1.2.1
@@ -98,7 +98,7 @@ deps =
[testenv:opensusel42]
basepython = python2.7
-commands = nosetests {posargs:tests/unittests}
+commands = nosetests {posargs:tests/unittests cloudinit}
deps =
# requirements
argparse==1.3.0