From a317aa6a3191a1a6c259191f57b200996841c3f4 Mon Sep 17 00:00:00 2001 From: Wayne Witzel III Date: Wed, 6 Apr 2016 15:18:51 -0400 Subject: [PATCH] added Network Credential unit tests --- .../tests/unit/test_network_credential.py | 50 +++++++++++++++---- 1 file changed, 41 insertions(+), 9 deletions(-) diff --git a/awx/main/tests/unit/test_network_credential.py b/awx/main/tests/unit/test_network_credential.py index aaf263fc6c..00621fb0a3 100644 --- a/awx/main/tests/unit/test_network_credential.py +++ b/awx/main/tests/unit/test_network_credential.py @@ -1,29 +1,61 @@ +import pytest + from awx.main.models.credential import Credential from awx.main.models.jobs import Job from awx.main.models.inventory import Inventory from awx.main.tasks import RunJob -ssh_key_data = """-----BEGIN PRIVATE KEY-----\nstuff==\n-----END PRIVATE KEY-----""" -def test_net_cred_parse(mocker): - opts = { +@pytest.fixture +def options(): + return { 'username':'test', 'password':'test', - 'ssh_key_data': ssh_key_data, + 'ssh_key_data': """-----BEGIN PRIVATE KEY-----\nstuff==\n-----END PRIVATE KEY-----""", 'become_method': 'sudo', 'become_password': 'passwd', } + +def test_net_cred_parse(mocker, options): with mocker.patch('django.db.ConnectionRouter.db_for_write'): job = Job(id=1) job.inventory = mocker.MagicMock(spec=Inventory, id=2) - job.network_credential = Credential(**opts) + job.network_credential = Credential(**options) run_job = RunJob() - run_job.should_use_proot = False + mocker.patch.object(run_job, 'should_use_proot', return_value=False) env = run_job.build_env(job, private_data_dir='/tmp') - assert env['ANSIBLE_NET_USERNAME'] == opts['username'] - assert env['ANSIBLE_NET_PASSWORD'] == opts['password'] + assert env['ANSIBLE_NET_USERNAME'] == options['username'] + assert env['ANSIBLE_NET_PASSWORD'] == options['password'] assert env['ANSIBLE_NET_AUTHORIZE'] == '1' - assert env['ANSIBLE_NET_AUTHORIZE_PASSWORD'] == opts['become_password'] + assert env['ANSIBLE_NET_AUTHORIZE_PASSWORD'] == options['become_password'] + + +def test_net_cred_ssh_agent(mocker, options): + with mocker.patch('django.db.ConnectionRouter.db_for_write'): + run_job = RunJob() + + mock_job_attrs = {'forks': False, 'id': 1, 'cancel_flag': False, 'status': 'running', 'job_type': 'normal', + 'credential': None, 'cloud_credential': None, 'network_credential': Credential(**options), + 'become_enabled': False, 'become_method': None, 'become_username': None, + 'inventory': mocker.MagicMock(spec=Inventory, id=2), 'force_handlers': False, + 'limit': None, 'verbosity': None, 'job_tags': None, 'skip_tags': False, + 'start_at_task': False, 'pk': 1, 'launch_type': 'normal', 'job_template':None, + 'created_by': None, 'extra_vars_dict': None, 'project':None, 'playbook': 'test.yml'} + mock_job = mocker.MagicMock(spec=Job, **mock_job_attrs) + + mocker.patch.object(run_job, 'update_model', return_value=mock_job) + mocker.patch.object(run_job, 'build_cwd', return_value='/tmp') + mocker.patch.object(run_job, 'should_use_proot', return_value=False) + mocker.patch.object(run_job, 'run_pexpect', return_value=('successful', 0)) + mocker.patch.object(run_job, 'open_fifo_write', return_value=None) + + run_job.run(mock_job.id) + assert run_job.update_model.call_count == 3 + + job_args = run_job.update_model.call_args_list[1][1].get('job_args') + assert 'ssh-add' in job_args + assert 'ssh-agent' in job_args + assert 'network_credential' in job_args