summaryrefslogtreecommitdiff
path: root/tests/unittests/test_handler/test_handler_ntp.py
diff options
context:
space:
mode:
authorRyan Harper <ryan.harper@canonical.com>2017-05-19 16:49:11 -0400
committerScott Moser <smoser@ubuntu.com>2017-05-19 16:55:08 -0400
commite11d3899d47ec5fcb545e0c7820af9d3995cb574 (patch)
treea36c05438254df94b410ff88fba2c672709b5673 /tests/unittests/test_handler/test_handler_ntp.py
parentafdddf8eea34866b43d1fc92624f9ac175802f36 (diff)
downloadvyos-cloud-init-e11d3899d47ec5fcb545e0c7820af9d3995cb574.tar.gz
vyos-cloud-init-e11d3899d47ec5fcb545e0c7820af9d3995cb574.zip
cc_ntp: write template before installing and add service restart
On systems which installed ntp and specified servers or pools in the config ntpd didn't notice the updated configuration file and didn't use the correct configuration. Resolve this by rendering the template first which allows the package install to use the existing configuration. Additionally add a service restart to handle the case where ntp does not need to be installed but it may not have started. Add an integration test to confirm that cc_ntp enables ntp to use the specific servers and pools in the cloud-config. LP: #1645644
Diffstat (limited to 'tests/unittests/test_handler/test_handler_ntp.py')
-rw-r--r--tests/unittests/test_handler/test_handler_ntp.py78
1 files changed, 76 insertions, 2 deletions
diff --git a/tests/unittests/test_handler/test_handler_ntp.py b/tests/unittests/test_handler/test_handler_ntp.py
index ec600077..02bd3046 100644
--- a/tests/unittests/test_handler/test_handler_ntp.py
+++ b/tests/unittests/test_handler/test_handler_ntp.py
@@ -249,6 +249,8 @@ class TestNtp(FilesystemMockingTestCase):
}
}
mycloud = self._get_cloud('ubuntu')
+ mycloud.distro = mock.MagicMock()
+ mycloud.distro.uses_systemd.return_value = True
side_effect = [NTP_TEMPLATE.lstrip()]
with mock.patch.object(util, 'which', return_value=None):
@@ -259,13 +261,70 @@ class TestNtp(FilesystemMockingTestCase):
with mock.patch.object(os.path, 'isfile',
return_value=True):
with mock.patch.object(util, 'rename'):
- cc_ntp.handle("notimportant", cfg,
- mycloud, LOG, None)
+ with mock.patch.object(util, 'subp') as msubp:
+ cc_ntp.handle("notimportant", cfg,
+ mycloud, LOG, None)
mockwrite.assert_called_once_with(
'/etc/ntp.conf',
NTP_EXPECTED_UBUNTU,
mode=420)
+ msubp.assert_any_call(['systemctl', 'reload-or-restart', 'ntp'],
+ capture=True)
+
+ @mock.patch("cloudinit.config.cc_ntp.install_ntp")
+ @mock.patch("cloudinit.config.cc_ntp.write_ntp_config_template")
+ @mock.patch("cloudinit.config.cc_ntp.rename_ntp_conf")
+ def test_write_config_before_install(self, mock_ntp_rename,
+ mock_ntp_write_config,
+ mock_install_ntp):
+ pools = ['0.mycompany.pool.ntp.org']
+ servers = ['192.168.23.3']
+ cfg = {
+ 'ntp': {
+ 'pools': pools,
+ 'servers': servers,
+ }
+ }
+ cc = self._get_cloud('ubuntu')
+ cc.distro = mock.MagicMock()
+ mock_parent = mock.MagicMock()
+ mock_parent.attach_mock(mock_ntp_rename, 'mock_ntp_rename')
+ mock_parent.attach_mock(mock_ntp_write_config, 'mock_ntp_write_config')
+ mock_parent.attach_mock(mock_install_ntp, 'mock_install_ntp')
+
+ cc_ntp.handle('cc_ntp', cfg, cc, LOG, None)
+
+ """Check call order"""
+ mock_parent.assert_has_calls([
+ mock.call.mock_ntp_rename(),
+ mock.call.mock_ntp_write_config(cfg.get('ntp'), cc),
+ mock.call.mock_install_ntp(cc.distro.install_packages,
+ packages=['ntp'], check_exe="ntpd")])
+
+ @mock.patch("cloudinit.config.cc_ntp.reload_ntp")
+ @mock.patch("cloudinit.config.cc_ntp.install_ntp")
+ @mock.patch("cloudinit.config.cc_ntp.write_ntp_config_template")
+ @mock.patch("cloudinit.config.cc_ntp.rename_ntp_conf")
+ def test_reload_ntp_fail_raises_exception(self, mock_rename,
+ mock_write_conf,
+ mock_install,
+ mock_reload):
+ pools = ['0.mycompany.pool.ntp.org']
+ servers = ['192.168.23.3']
+ cfg = {
+ 'ntp': {
+ 'pools': pools,
+ 'servers': servers,
+ }
+ }
+ cc = self._get_cloud('ubuntu')
+ cc.distro = mock.MagicMock()
+
+ mock_reload.side_effect = [util.ProcessExecutionError]
+ self.assertRaises(util.ProcessExecutionError,
+ cc_ntp.handle, 'cc_ntp',
+ cfg, cc, LOG, None)
@mock.patch("cloudinit.config.cc_ntp.util")
def test_no_ntpcfg_does_nothing(self, mock_util):
@@ -275,4 +334,19 @@ class TestNtp(FilesystemMockingTestCase):
self.assertFalse(cc.distro.install_packages.called)
self.assertFalse(mock_util.subp.called)
+ @mock.patch("cloudinit.config.cc_ntp.util")
+ def test_reload_ntp_systemd(self, mock_util):
+ cc_ntp.reload_ntp(systemd=True)
+ self.assertTrue(mock_util.subp.called)
+ mock_util.subp.assert_called_with(
+ ['systemctl', 'reload-or-restart', 'ntp'], capture=True)
+
+ @mock.patch("cloudinit.config.cc_ntp.util")
+ def test_reload_ntp_service(self, mock_util):
+ cc_ntp.reload_ntp(systemd=False)
+ self.assertTrue(mock_util.subp.called)
+ mock_util.subp.assert_called_with(
+ ['service', 'ntp', 'restart'], capture=True)
+
+
# vi: ts=4 expandtab