# -*- coding: utf-8; -*- from unittest import TestCase from unittest.mock import MagicMock, call from wuttamess import ssh as mod class TestCacheHostKey(TestCase): def test_root_already_cached(self): c = MagicMock() # assume the first command runs okay c.run.return_value.failed = False mod.cache_host_key(c, "example.com") c.run.assert_called_once_with("ssh example.com whoami", warn=True) def test_root_commands_not_allowed(self): c = MagicMock() # assume the first command fails b/c "disallowed" c.run.return_value.failed = True c.run.return_value.stderr = "Disallowed command" mod.cache_host_key(c, "example.com") c.run.assert_called_once_with("ssh example.com whoami", warn=True) def test_root_cache_key(self): c = MagicMock() # first command fails; second command caches host key c.run.return_value.failed = True mod.cache_host_key(c, "example.com") c.run.assert_has_calls([call("ssh example.com whoami", warn=True)]) c.run.assert_called_with( "ssh -o StrictHostKeyChecking=no example.com whoami", warn=True ) def test_user_already_cached(self): c = MagicMock() # assume the first command runs okay c.sudo.return_value.failed = False mod.cache_host_key(c, "example.com", user="foo") c.sudo.assert_called_once_with("ssh example.com whoami", user="foo", warn=True) def test_user_commands_not_allowed(self): c = MagicMock() # assume the first command fails b/c "disallowed" c.sudo.return_value.failed = True c.sudo.return_value.stderr = "Disallowed command" mod.cache_host_key(c, "example.com", user="foo") c.sudo.assert_called_once_with("ssh example.com whoami", user="foo", warn=True) def test_user_cache_key(self): c = MagicMock() # first command fails; second command caches host key c.sudo.return_value.failed = True mod.cache_host_key(c, "example.com", user="foo") c.sudo.assert_has_calls([call("ssh example.com whoami", user="foo", warn=True)]) c.sudo.assert_called_with( "ssh -o StrictHostKeyChecking=no example.com whoami", user="foo", warn=True )