1# -*- coding: utf-8 -*- 2# Copyright (c) 2017 Pierre-Louis Bonicoli <pierre-louis@libregerbil.fr> 3# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) 4 5from __future__ import (absolute_import, division, print_function) 6__metaclass__ = type 7 8import json 9 10from ansible_collections.community.general.plugins.modules.packaging.os import rhn_channel 11 12import pytest 13 14 15pytestmark = pytest.mark.usefixtures('patch_ansible_module') 16 17 18@pytest.mark.parametrize('patch_ansible_module', [{}], indirect=['patch_ansible_module']) 19def test_without_required_parameters(capfd): 20 with pytest.raises(SystemExit): 21 rhn_channel.main() 22 out, err = capfd.readouterr() 23 results = json.loads(out) 24 assert results['failed'] 25 assert 'missing required arguments' in results['msg'] 26 27 28TESTED_MODULE = rhn_channel.__name__ 29TEST_CASES = [ 30 [ 31 # add channel already added, check that result isn't changed 32 { 33 'name': 'rhel-x86_64-server-6', 34 'sysname': 'server01', 35 'url': 'https://rhn.redhat.com/rpc/api', 36 'user': 'user', 37 'password': 'pass', 38 }, 39 { 40 'calls': [ 41 ('auth.login', ['X' * 43]), 42 ('system.listUserSystems', 43 [[{'last_checkin': '2017-08-06 19:49:52.0', 'id': '0123456789', 'name': 'server01'}]]), 44 ('channel.software.listSystemChannels', 45 [[{'channel_name': 'Red Hat Enterprise Linux Server (v. 6 for 64-bit x86_64)', 'channel_label': 'rhel-x86_64-server-6'}]]), 46 ('auth.logout', [1]), 47 ], 48 'changed': False, 49 'msg': 'Channel rhel-x86_64-server-6 already exists', 50 } 51 ], 52 [ 53 # add channel, check that result is changed 54 { 55 'name': 'rhel-x86_64-server-6-debuginfo', 56 'sysname': 'server01', 57 'url': 'https://rhn.redhat.com/rpc/api', 58 'user': 'user', 59 'password': 'pass', 60 }, 61 { 62 'calls': [ 63 ('auth.login', ['X' * 43]), 64 ('system.listUserSystems', 65 [[{'last_checkin': '2017-08-06 19:49:52.0', 'id': '0123456789', 'name': 'server01'}]]), 66 ('channel.software.listSystemChannels', 67 [[{'channel_name': 'Red Hat Enterprise Linux Server (v. 6 for 64-bit x86_64)', 'channel_label': 'rhel-x86_64-server-6'}]]), 68 ('channel.software.listSystemChannels', 69 [[{'channel_name': 'Red Hat Enterprise Linux Server (v. 6 for 64-bit x86_64)', 'channel_label': 'rhel-x86_64-server-6'}]]), 70 ('system.setChildChannels', [1]), 71 ('auth.logout', [1]), 72 ], 73 'changed': True, 74 'msg': 'Channel rhel-x86_64-server-6-debuginfo added', 75 } 76 ], 77 [ 78 # remove inexistent channel, check that result isn't changed 79 { 80 'name': 'rhel-x86_64-server-6-debuginfo', 81 'state': 'absent', 82 'sysname': 'server01', 83 'url': 'https://rhn.redhat.com/rpc/api', 84 'user': 'user', 85 'password': 'pass', 86 }, 87 { 88 'calls': [ 89 ('auth.login', ['X' * 43]), 90 ('system.listUserSystems', 91 [[{'last_checkin': '2017-08-06 19:49:52.0', 'id': '0123456789', 'name': 'server01'}]]), 92 ('channel.software.listSystemChannels', 93 [[{'channel_name': 'Red Hat Enterprise Linux Server (v. 6 for 64-bit x86_64)', 'channel_label': 'rhel-x86_64-server-6'}]]), 94 ('auth.logout', [1]), 95 ], 96 'changed': False, 97 'msg': 'Not subscribed to channel rhel-x86_64-server-6-debuginfo.', 98 } 99 ], 100 [ 101 # remove channel, check that result is changed 102 { 103 'name': 'rhel-x86_64-server-6-debuginfo', 104 'state': 'absent', 105 'sysname': 'server01', 106 'url': 'https://rhn.redhat.com/rpc/api', 107 'user': 'user', 108 'password': 'pass', 109 }, 110 { 111 'calls': [ 112 ('auth.login', ['X' * 43]), 113 ('system.listUserSystems', 114 [[{'last_checkin': '2017-08-06 19:49:52.0', 'id': '0123456789', 'name': 'server01'}]]), 115 ('channel.software.listSystemChannels', [[ 116 {'channel_name': 'RHEL Server Debuginfo (v.6 for x86_64)', 'channel_label': 'rhel-x86_64-server-6-debuginfo'}, 117 {'channel_name': 'Red Hat Enterprise Linux Server (v. 6 for 64-bit x86_64)', 'channel_label': 'rhel-x86_64-server-6'} 118 ]]), 119 ('channel.software.listSystemChannels', [[ 120 {'channel_name': 'RHEL Server Debuginfo (v.6 for x86_64)', 'channel_label': 'rhel-x86_64-server-6-debuginfo'}, 121 {'channel_name': 'Red Hat Enterprise Linux Server (v. 6 for 64-bit x86_64)', 'channel_label': 'rhel-x86_64-server-6'} 122 ]]), 123 ('system.setChildChannels', [1]), 124 ('auth.logout', [1]), 125 ], 126 'changed': True, 127 'msg': 'Channel rhel-x86_64-server-6-debuginfo removed' 128 } 129 ] 130] 131 132 133@pytest.mark.parametrize('patch_ansible_module, testcase', TEST_CASES, indirect=['patch_ansible_module']) 134def test_rhn_channel(capfd, mocker, testcase, mock_request): 135 """Check 'msg' and 'changed' results""" 136 137 with pytest.raises(SystemExit): 138 rhn_channel.main() 139 140 out, err = capfd.readouterr() 141 results = json.loads(out) 142 assert results['changed'] == testcase['changed'] 143 assert results['msg'] == testcase['msg'] 144 assert not testcase['calls'] # all calls should have been consumed 145