Fix for tests run with no .ssh user dir

When building in automated build systems, there are sometimes cases
where the user doing the building does not have a .ssh directory.  In
this case, we need to mock out some os.path functions so that the
add_host_key() function we're testing won't complain or try to create
one.
This commit is contained in:
Toshio Kuratomi 2017-03-28 16:21:06 -07:00
parent 28704114b3
commit ade3fc2893

View file

@ -16,12 +16,13 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>. # along with Ansible. If not, see <http://www.gnu.org/licenses/>.
from ansible.compat.tests import unittest
from ansible.module_utils import known_hosts
import json import json
import os.path
import ansible.module_utils.basic import ansible.module_utils.basic
from ansible.compat.tests.mock import Mock from ansible.compat.tests import unittest
from ansible.compat.tests.mock import Mock, patch
from ansible.module_utils import known_hosts
from units.mock.procenv import swap_stdin_and_argv from units.mock.procenv import swap_stdin_and_argv
@ -91,15 +92,21 @@ class TestAnsibleModuleKnownHosts(unittest.TestCase):
ansible.module_utils.basic._ANSIBLE_ARGS = None ansible.module_utils.basic._ANSIBLE_ARGS = None
self.module = ansible.module_utils.basic.AnsibleModule(argument_spec=dict()) self.module = ansible.module_utils.basic.AnsibleModule(argument_spec=dict())
run_command = Mock()
run_command.return_value = (0, "Needs output, otherwise thinks ssh-keyscan timed out'", "")
self.module.run_command = run_command
get_bin_path = Mock() get_bin_path = Mock()
get_bin_path.return_value = keyscan_cmd = "/custom/path/ssh-keyscan" get_bin_path.return_value = keyscan_cmd = "/custom/path/ssh-keyscan"
self.module.get_bin_path = get_bin_path self.module.get_bin_path = get_bin_path
for u in self.urls: run_command = Mock()
if self.urls[u]['is_ssh_url']: run_command.return_value = (0, "Needs output, otherwise thinks ssh-keyscan timed out'", "")
known_hosts.add_host_key(self.module, self.urls[u]['get_fqdn'], port=self.urls[u]['port']) self.module.run_command = run_command
run_command.assert_called_with(keyscan_cmd + self.urls[u]['add_host_key_cmd'])
append_to_file = Mock()
append_to_file.return_value = (None,)
self.module.append_to_file = append_to_file
with patch('os.path.isdir', return_value=True):
with patch('os.path.exists', return_value=True):
for u in self.urls:
if self.urls[u]['is_ssh_url']:
known_hosts.add_host_key(self.module, self.urls[u]['get_fqdn'], port=self.urls[u]['port'])
run_command.assert_called_with(keyscan_cmd + self.urls[u]['add_host_key_cmd'])