summaryrefslogtreecommitdiff
path: root/tests/unittests/config/test_cc_set_passwords.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unittests/config/test_cc_set_passwords.py')
-rw-r--r--tests/unittests/config/test_cc_set_passwords.py111
1 files changed, 63 insertions, 48 deletions
diff --git a/tests/unittests/config/test_cc_set_passwords.py b/tests/unittests/config/test_cc_set_passwords.py
index 9bcd0439..bc81214b 100644
--- a/tests/unittests/config/test_cc_set_passwords.py
+++ b/tests/unittests/config/test_cc_set_passwords.py
@@ -2,9 +2,9 @@
from unittest import mock
+from cloudinit import util
from cloudinit.config import cc_set_passwords as setpass
from tests.unittests.helpers import CiTestCase
-from cloudinit import util
MODPATH = "cloudinit.config.cc_set_passwords."
@@ -16,27 +16,29 @@ class TestHandleSshPwauth(CiTestCase):
@mock.patch("cloudinit.distros.subp.subp")
def test_unknown_value_logs_warning(self, m_subp):
- cloud = self.tmp_cloud(distro='ubuntu')
+ cloud = self.tmp_cloud(distro="ubuntu")
setpass.handle_ssh_pwauth("floo", cloud.distro)
- self.assertIn("Unrecognized value: ssh_pwauth=floo",
- self.logs.getvalue())
+ self.assertIn(
+ "Unrecognized value: ssh_pwauth=floo", self.logs.getvalue()
+ )
m_subp.assert_not_called()
@mock.patch(MODPATH + "update_ssh_config", return_value=True)
@mock.patch("cloudinit.distros.subp.subp")
def test_systemctl_as_service_cmd(self, m_subp, m_update_ssh_config):
"""If systemctl in service cmd: systemctl restart name."""
- cloud = self.tmp_cloud(distro='ubuntu')
- cloud.distro.init_cmd = ['systemctl']
+ cloud = self.tmp_cloud(distro="ubuntu")
+ cloud.distro.init_cmd = ["systemctl"]
setpass.handle_ssh_pwauth(True, cloud.distro)
m_subp.assert_called_with(
- ["systemctl", "restart", "ssh"], capture=True)
+ ["systemctl", "restart", "ssh"], capture=True
+ )
@mock.patch(MODPATH + "update_ssh_config", return_value=False)
@mock.patch("cloudinit.distros.subp.subp")
def test_not_restarted_if_not_updated(self, m_subp, m_update_ssh_config):
"""If config is not updated, then no system restart should be done."""
- cloud = self.tmp_cloud(distro='ubuntu')
+ cloud = self.tmp_cloud(distro="ubuntu")
setpass.handle_ssh_pwauth(True, cloud.distro)
m_subp.assert_not_called()
self.assertIn("No need to restart SSH", self.logs.getvalue())
@@ -45,7 +47,7 @@ class TestHandleSshPwauth(CiTestCase):
@mock.patch("cloudinit.distros.subp.subp")
def test_unchanged_does_nothing(self, m_subp, m_update_ssh_config):
"""If 'unchanged', then no updates to config and no restart."""
- cloud = self.tmp_cloud(distro='ubuntu')
+ cloud = self.tmp_cloud(distro="ubuntu")
setpass.handle_ssh_pwauth("unchanged", cloud.distro)
m_update_ssh_config.assert_not_called()
m_subp.assert_not_called()
@@ -53,7 +55,7 @@ class TestHandleSshPwauth(CiTestCase):
@mock.patch("cloudinit.distros.subp.subp")
def test_valid_change_values(self, m_subp):
"""If value is a valid changen value, then update should be called."""
- cloud = self.tmp_cloud(distro='ubuntu')
+ cloud = self.tmp_cloud(distro="ubuntu")
upname = MODPATH + "update_ssh_config"
optname = "PasswordAuthentication"
for value in util.FALSE_STRINGS + util.TRUE_STRINGS:
@@ -71,52 +73,65 @@ class TestSetPasswordsHandle(CiTestCase):
def test_handle_on_empty_config(self, *args):
"""handle logs that no password has changed when config is empty."""
- cloud = self.tmp_cloud(distro='ubuntu')
+ cloud = self.tmp_cloud(distro="ubuntu")
setpass.handle(
- 'IGNORED', cfg={}, cloud=cloud, log=self.logger, args=[])
+ "IGNORED", cfg={}, cloud=cloud, log=self.logger, args=[]
+ )
self.assertEqual(
"DEBUG: Leaving SSH config 'PasswordAuthentication' unchanged. "
- 'ssh_pwauth=None\n',
- self.logs.getvalue())
+ "ssh_pwauth=None\n",
+ self.logs.getvalue(),
+ )
def test_handle_on_chpasswd_list_parses_common_hashes(self):
"""handle parses command password hashes."""
- cloud = self.tmp_cloud(distro='ubuntu')
+ cloud = self.tmp_cloud(distro="ubuntu")
valid_hashed_pwds = [
- 'root:$2y$10$8BQjxjVByHA/Ee.O1bCXtO8S7Y5WojbXWqnqYpUW.BrPx/'
- 'Dlew1Va',
- 'ubuntu:$6$5hOurLPO$naywm3Ce0UlmZg9gG2Fl9acWCVEoakMMC7dR52q'
- 'SDexZbrN9z8yHxhUM2b.sxpguSwOlbOQSW/HpXazGGx3oo1']
- cfg = {'chpasswd': {'list': valid_hashed_pwds}}
- with mock.patch.object(setpass, 'chpasswd') as chpasswd:
+ "root:$2y$10$8BQjxjVByHA/Ee.O1bCXtO8S7Y5WojbXWqnqYpUW.BrPx/"
+ "Dlew1Va",
+ "ubuntu:$6$5hOurLPO$naywm3Ce0UlmZg9gG2Fl9acWCVEoakMMC7dR52q"
+ "SDexZbrN9z8yHxhUM2b.sxpguSwOlbOQSW/HpXazGGx3oo1",
+ ]
+ cfg = {"chpasswd": {"list": valid_hashed_pwds}}
+ with mock.patch.object(setpass, "chpasswd") as chpasswd:
setpass.handle(
- 'IGNORED', cfg=cfg, cloud=cloud, log=self.logger, args=[])
+ "IGNORED", cfg=cfg, cloud=cloud, log=self.logger, args=[]
+ )
self.assertIn(
- 'DEBUG: Handling input for chpasswd as list.',
- self.logs.getvalue())
+ "DEBUG: Handling input for chpasswd as list.", self.logs.getvalue()
+ )
self.assertIn(
"DEBUG: Setting hashed password for ['root', 'ubuntu']",
- self.logs.getvalue())
- valid = '\n'.join(valid_hashed_pwds) + '\n'
+ self.logs.getvalue(),
+ )
+ valid = "\n".join(valid_hashed_pwds) + "\n"
called = chpasswd.call_args[0][1]
self.assertEqual(valid, called)
@mock.patch(MODPATH + "util.is_BSD")
@mock.patch(MODPATH + "subp.subp")
def test_bsd_calls_custom_pw_cmds_to_set_and_expire_passwords(
- self, m_subp, m_is_bsd):
+ self, m_subp, m_is_bsd
+ ):
"""BSD don't use chpasswd"""
m_is_bsd.return_value = True
- cloud = self.tmp_cloud(distro='freebsd')
- valid_pwds = ['ubuntu:passw0rd']
- cfg = {'chpasswd': {'list': valid_pwds}}
+ cloud = self.tmp_cloud(distro="freebsd")
+ valid_pwds = ["ubuntu:passw0rd"]
+ cfg = {"chpasswd": {"list": valid_pwds}}
setpass.handle(
- 'IGNORED', cfg=cfg, cloud=cloud, log=self.logger, args=[])
- self.assertEqual([
- mock.call(['pw', 'usermod', 'ubuntu', '-h', '0'], data='passw0rd',
- logstring="chpasswd for ubuntu"),
- mock.call(['pw', 'usermod', 'ubuntu', '-p', '01-Jan-1970'])],
- m_subp.call_args_list)
+ "IGNORED", cfg=cfg, cloud=cloud, log=self.logger, args=[]
+ )
+ self.assertEqual(
+ [
+ mock.call(
+ ["pw", "usermod", "ubuntu", "-h", "0"],
+ data="passw0rd",
+ logstring="chpasswd for ubuntu",
+ ),
+ mock.call(["pw", "usermod", "ubuntu", "-p", "01-Jan-1970"]),
+ ],
+ m_subp.call_args_list,
+ )
@mock.patch(MODPATH + "util.multi_log")
@mock.patch(MODPATH + "subp.subp")
@@ -124,29 +139,29 @@ class TestSetPasswordsHandle(CiTestCase):
self, m_subp, m_multi_log
):
"""handle parses command set random passwords."""
- cloud = self.tmp_cloud(distro='ubuntu')
- valid_random_pwds = [
- 'root:R',
- 'ubuntu:RANDOM']
- cfg = {'chpasswd': {'expire': 'false', 'list': valid_random_pwds}}
- with mock.patch.object(setpass, 'chpasswd') as chpasswd:
+ cloud = self.tmp_cloud(distro="ubuntu")
+ valid_random_pwds = ["root:R", "ubuntu:RANDOM"]
+ cfg = {"chpasswd": {"expire": "false", "list": valid_random_pwds}}
+ with mock.patch.object(setpass, "chpasswd") as chpasswd:
setpass.handle(
- 'IGNORED', cfg=cfg, cloud=cloud, log=self.logger, args=[])
+ "IGNORED", cfg=cfg, cloud=cloud, log=self.logger, args=[]
+ )
self.assertIn(
- 'DEBUG: Handling input for chpasswd as list.',
- self.logs.getvalue())
+ "DEBUG: Handling input for chpasswd as list.", self.logs.getvalue()
+ )
self.assertEqual(1, chpasswd.call_count)
passwords, _ = chpasswd.call_args
user_pass = {
user: password
- for user, password
- in (line.split(":") for line in passwords[1].splitlines())
+ for user, password in (
+ line.split(":") for line in passwords[1].splitlines()
+ )
}
self.assertEqual(1, m_multi_log.call_count)
self.assertEqual(
mock.call(mock.ANY, stderr=False, fallback_to_stdout=False),
- m_multi_log.call_args
+ m_multi_log.call_args,
)
self.assertEqual(set(["root", "ubuntu"]), set(user_pass.keys()))