1import json 2 3import pytest 4from units.compat import mock 5from ansible.modules.remote_management.lxca import lxca_nodes 6from ansible.module_utils.remote_management.lxca.common import setup_conn 7from ansible.module_utils.remote_management.lxca.common import close_conn 8 9 10@pytest.fixture(scope='module') 11@mock.patch("ansible.module_utils.remote_management.lxca.common.close_conn", autospec=True) 12def setup_module(close_conn): 13 close_conn.return_value = True 14 15 16class TestMyModule(): 17 @pytest.mark.parametrize('patch_ansible_module', 18 [ 19 {}, 20 { 21 "auth_url": "https://10.240.14.195", 22 "login_user": "USERID", 23 }, 24 { 25 "auth_url": "https://10.240.14.195", 26 "login_password": "Password", 27 }, 28 { 29 "login_user": "USERID", 30 "login_password": "Password", 31 }, 32 ], 33 indirect=['patch_ansible_module']) 34 @pytest.mark.usefixtures('patch_ansible_module') 35 @mock.patch("ansible.module_utils.remote_management.lxca.common.setup_conn", autospec=True) 36 @mock.patch("ansible.modules.remote_management.lxca.lxca_nodes.execute_module", autospec=True) 37 def test_without_required_parameters(self, _setup_conn, _execute_module, 38 mocker, capfd, setup_module): 39 """Failure must occurs when all parameters are missing""" 40 with pytest.raises(SystemExit): 41 _setup_conn.return_value = "Fake connection" 42 _execute_module.return_value = "Fake execution" 43 lxca_nodes.main() 44 out, err = capfd.readouterr() 45 results = json.loads(out) 46 assert results['failed'] 47 assert 'missing required arguments' in results['msg'] 48 49 @mock.patch("ansible.module_utils.remote_management.lxca.common.setup_conn", autospec=True) 50 @mock.patch("ansible.modules.remote_management.lxca.lxca_nodes.execute_module", autospec=True) 51 @mock.patch("ansible.modules.remote_management.lxca.lxca_nodes.AnsibleModule", autospec=True) 52 def test__argument_spec(self, ansible_mod_cls, _execute_module, _setup_conn, setup_module): 53 expected_arguments_spec = dict( 54 login_user=dict(required=True), 55 login_password=dict(required=True, no_log=True), 56 command_options=dict(default='nodes', choices=['nodes', 'nodes_by_uuid', 57 'nodes_by_chassis_uuid', 58 'nodes_status_managed', 59 'nodes_status_unmanaged']), 60 auth_url=dict(required=True), 61 uuid=dict(default=None), 62 chassis=dict(default=None), 63 ) 64 _setup_conn.return_value = "Fake connection" 65 _execute_module.return_value = [] 66 mod_obj = ansible_mod_cls.return_value 67 args = { 68 "auth_url": "https://10.243.30.195", 69 "login_user": "USERID", 70 "login_password": "password", 71 "command_options": "nodes", 72 } 73 mod_obj.params = args 74 lxca_nodes.main() 75 assert(mock.call(argument_spec=expected_arguments_spec, 76 supports_check_mode=False) == ansible_mod_cls.call_args) 77 78 @mock.patch("ansible.module_utils.remote_management.lxca.common.setup_conn", autospec=True) 79 @mock.patch("ansible.modules.remote_management.lxca.lxca_nodes._nodes_by_uuid", 80 autospec=True) 81 @mock.patch("ansible.modules.remote_management.lxca.lxca_nodes.AnsibleModule", 82 autospec=True) 83 def test__nodes_empty_list(self, ansible_mod_cls, _get_nodes, _setup_conn, setup_module): 84 mod_obj = ansible_mod_cls.return_value 85 args = { 86 "auth_url": "https://10.243.30.195", 87 "login_user": "USERID", 88 "login_password": "password", 89 "uuid": "3C737AA5E31640CE949B10C129A8B01F", 90 "command_options": "nodes_by_uuid", 91 } 92 mod_obj.params = args 93 _setup_conn.return_value = "Fake connection" 94 empty_nodes_list = [] 95 _get_nodes.return_value = empty_nodes_list 96 ret_nodes = _get_nodes(mod_obj, args) 97 assert mock.call(mod_obj, mod_obj.params) == _get_nodes.call_args 98 assert _get_nodes.return_value == ret_nodes 99