summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoshua Powers <josh.powers@canonical.com>2017-04-27 14:31:48 -0600
committerScott Moser <smoser@brickies.net>2017-05-16 16:19:29 -0400
commit6edf0c72ce11e64627d3db6a0c4fd74a81039ed4 (patch)
treee0c41413f63e8cd9589a45f9ac2406bf5e09d9ba
parent4bcc947301bedc5ebf430cfaf6e4597bfb174aa7 (diff)
downloadvyos-cloud-init-6edf0c72ce11e64627d3db6a0c4fd74a81039ed4.tar.gz
vyos-cloud-init-6edf0c72ce11e64627d3db6a0c4fd74a81039ed4.zip
unittests: fix unittests run on centos
Apt related tests were broken when running on centos becasue apt is not available. This fixes the unit test, with a small re-work of apt_configure. Also in 'tox -e centos6' only run nose on tests/unittests as tests/ also contain integration tests that should not be run.
-rw-r--r--cloudinit/config/cc_apt_configure.py19
-rw-r--r--tests/unittests/test_handler/test_handler_apt_configure_sources_list_v3.py94
-rw-r--r--tests/unittests/test_handler/test_handler_yum_add_repo.py4
-rw-r--r--tox.ini2
4 files changed, 88 insertions, 31 deletions
diff --git a/cloudinit/config/cc_apt_configure.py b/cloudinit/config/cc_apt_configure.py
index f6885d7c..177cbcf7 100644
--- a/cloudinit/config/cc_apt_configure.py
+++ b/cloudinit/config/cc_apt_configure.py
@@ -282,16 +282,21 @@ def handle(name, ocfg, cloud, log, _):
apply_apt(cfg, cloud, target)
+def _should_configure_on_empty_apt():
+ # if no config was provided, should apt configuration be done?
+ if util.system_is_snappy():
+ return False, "system is snappy."
+ if not (util.which('apt-get') or util.which('apt')):
+ return False, "no apt commands."
+ return True, "Apt is available."
+
+
def apply_apt(cfg, cloud, target):
# cfg is the 'apt' top level dictionary already in 'v3' format.
if not cfg:
- # no config was provided. If apt configuration does not seem
- # necessary on this system, then return.
- if util.system_is_snappy():
- LOG.debug("Nothing to do: No apt config and running on snappy")
- return
- if not (util.which('apt-get') or util.which('apt')):
- LOG.debug("Nothing to do: No apt config and no apt commands")
+ should_config, msg = _should_configure_on_empty_apt()
+ if not should_config:
+ LOG.debug("Nothing to do: No apt config and %s", msg)
return
LOG.debug("handling apt config: %s", cfg)
diff --git a/tests/unittests/test_handler/test_handler_apt_configure_sources_list_v3.py b/tests/unittests/test_handler/test_handler_apt_configure_sources_list_v3.py
index 24e45233..1ca915b4 100644
--- a/tests/unittests/test_handler/test_handler_apt_configure_sources_list_v3.py
+++ b/tests/unittests/test_handler/test_handler_apt_configure_sources_list_v3.py
@@ -121,39 +121,82 @@ class TestAptSourceConfigSourceList(t_help.FilesystemMockingTestCase):
myds.metadata.update(metadata)
return cloud.Cloud(myds, paths, {}, mydist, None)
- def _apt_source_list(self, cfg, expected, distro):
- "_apt_source_list - Test rendering from template (generic)"
-
+ def _apt_source_list(self, distro, cfg, cfg_on_empty=False):
+ """_apt_source_list - Test rendering from template (generic)"""
# entry at top level now, wrap in 'apt' key
cfg = {'apt': cfg}
mycloud = self._get_cloud(distro)
- with mock.patch.object(util, 'write_file') as mockwf:
+
+ with mock.patch.object(util, 'write_file') as mock_writefile:
with mock.patch.object(util, 'load_file',
- return_value=MOCKED_APT_SRC_LIST) as mocklf:
+ return_value=MOCKED_APT_SRC_LIST
+ ) as mock_loadfile:
with mock.patch.object(os.path, 'isfile',
- return_value=True) as mockisfile:
- with mock.patch.object(util, 'rename'):
- cc_apt_configure.handle("test", cfg, mycloud,
- LOG, None)
-
- # check if it would have loaded the distro template
- mockisfile.assert_any_call(
- ('/etc/cloud/templates/sources.list.%s.tmpl' % distro))
- mocklf.assert_any_call(
- ('/etc/cloud/templates/sources.list.%s.tmpl' % distro))
- # check expected content in result
- mockwf.assert_called_once_with('/etc/apt/sources.list', expected,
- mode=0o644)
+ return_value=True) as mock_isfile:
+ cfg_func = ('cloudinit.config.cc_apt_configure.' +
+ '_should_configure_on_empty_apt')
+ with mock.patch(cfg_func,
+ return_value=(cfg_on_empty, "test")
+ ) as mock_shouldcfg:
+ cc_apt_configure.handle("test", cfg, mycloud, LOG,
+ None)
+
+ return mock_writefile, mock_loadfile, mock_isfile, mock_shouldcfg
def test_apt_v3_source_list_debian(self):
"""test_apt_v3_source_list_debian - without custom sources or parms"""
cfg = {}
- self._apt_source_list(cfg, EXPECTED_BASE_CONTENT, 'debian')
+ distro = 'debian'
+ expected = EXPECTED_BASE_CONTENT
+
+ mock_writefile, mock_load_file, mock_isfile, mock_shouldcfg = (
+ self._apt_source_list(distro, cfg, cfg_on_empty=True))
+
+ template = '/etc/cloud/templates/sources.list.%s.tmpl' % distro
+ mock_writefile.assert_called_once_with('/etc/apt/sources.list',
+ expected, mode=0o644)
+ mock_load_file.assert_called_with(template)
+ mock_isfile.assert_any_call(template)
+ self.assertEqual(1, mock_shouldcfg.call_count)
def test_apt_v3_source_list_ubuntu(self):
"""test_apt_v3_source_list_ubuntu - without custom sources or parms"""
cfg = {}
- self._apt_source_list(cfg, EXPECTED_BASE_CONTENT, 'ubuntu')
+ distro = 'ubuntu'
+ expected = EXPECTED_BASE_CONTENT
+
+ mock_writefile, mock_load_file, mock_isfile, mock_shouldcfg = (
+ self._apt_source_list(distro, cfg, cfg_on_empty=True))
+
+ template = '/etc/cloud/templates/sources.list.%s.tmpl' % distro
+ mock_writefile.assert_called_once_with('/etc/apt/sources.list',
+ expected, mode=0o644)
+ mock_load_file.assert_called_with(template)
+ mock_isfile.assert_any_call(template)
+ self.assertEqual(1, mock_shouldcfg.call_count)
+
+ def test_apt_v3_source_list_ubuntu_snappy(self):
+ """test_apt_v3_source_list_ubuntu_snappy - without custom sources or
+ parms"""
+ cfg = {'apt': {}}
+ mycloud = self._get_cloud('ubuntu')
+
+ with mock.patch.object(util, 'write_file') as mock_writefile:
+ with mock.patch.object(util, 'system_is_snappy',
+ return_value=True) as mock_issnappy:
+ cc_apt_configure.handle("test", cfg, mycloud, LOG, None)
+
+ self.assertEqual(0, mock_writefile.call_count)
+ self.assertEqual(1, mock_issnappy.call_count)
+
+ def test_apt_v3_source_list_centos(self):
+ """test_apt_v3_source_list_centos - without custom sources or parms"""
+ cfg = {}
+ distro = 'rhel'
+
+ mock_writefile, _, _, _ = self._apt_source_list(distro, cfg)
+
+ self.assertEqual(0, mock_writefile.call_count)
def test_apt_v3_source_list_psm(self):
"""test_apt_v3_source_list_psm - Test specifying prim+sec mirrors"""
@@ -164,8 +207,17 @@ class TestAptSourceConfigSourceList(t_help.FilesystemMockingTestCase):
'uri': pm}],
'security': [{'arches': ["default"],
'uri': sm}]}
+ distro = 'ubuntu'
+ expected = EXPECTED_PRIMSEC_CONTENT
+
+ mock_writefile, mock_load_file, mock_isfile, _ = (
+ self._apt_source_list(distro, cfg, cfg_on_empty=True))
- self._apt_source_list(cfg, EXPECTED_PRIMSEC_CONTENT, 'ubuntu')
+ template = '/etc/cloud/templates/sources.list.%s.tmpl' % distro
+ mock_writefile.assert_called_once_with('/etc/apt/sources.list',
+ expected, mode=0o644)
+ mock_load_file.assert_called_with(template)
+ mock_isfile.assert_any_call(template)
def test_apt_v3_srcl_custom(self):
"""test_apt_v3_srcl_custom - Test rendering a custom source template"""
diff --git a/tests/unittests/test_handler/test_handler_yum_add_repo.py b/tests/unittests/test_handler/test_handler_yum_add_repo.py
index 4815bdb6..c4396df5 100644
--- a/tests/unittests/test_handler/test_handler_yum_add_repo.py
+++ b/tests/unittests/test_handler/test_handler_yum_add_repo.py
@@ -72,7 +72,7 @@ class TestConfig(helpers.FilesystemMockingTestCase):
}
for section in expected:
self.assertTrue(parser.has_section(section),
- "Contains section {}".format(section))
+ "Contains section {0}".format(section))
for k, v in expected[section].items():
self.assertEqual(parser.get(section, k), v)
@@ -109,7 +109,7 @@ class TestConfig(helpers.FilesystemMockingTestCase):
}
for section in expected:
self.assertTrue(parser.has_section(section),
- "Contains section {}".format(section))
+ "Contains section {0}".format(section))
for k, v in expected[section].items():
self.assertEqual(parser.get(section, k), v)
diff --git a/tox.ini b/tox.ini
index bf9046af..826f554e 100644
--- a/tox.ini
+++ b/tox.ini
@@ -70,7 +70,7 @@ deps =
[testenv:centos6]
basepython = python2.6
-commands = nosetests {posargs:tests}
+commands = nosetests {posargs:tests/unittests}
deps =
# requirements
argparse==1.2.1