test: Cleanup facts/network/* tests (#83256)

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
pull/83080/head
Abhijeet Kasurde 6 months ago committed by GitHub
parent f2435375a8
commit 153c979662
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -5,7 +5,7 @@
from __future__ import annotations from __future__ import annotations
from ansible.module_utils.facts.network import fc_wwn from ansible.module_utils.facts.network import fc_wwn
from unittest.mock import Mock import pytest
# AIX lsdev # AIX lsdev
@ -100,31 +100,45 @@ def mock_get_bin_path(cmd, required=False, opt_dirs=None, warning=None):
return cmds.get(cmd, None) return cmds.get(cmd, None)
def mock_run_command(cmd): @pytest.mark.parametrize(
rc = 0 ("test_input", "expected"),
COMMANDS = { [
'/usr/sbin/lsdev': LSDEV_OUTPUT, pytest.param(
'/usr/sbin/lscfg': LSCFG_OUTPUT, {
'/usr/sbin/fcinfo': FCINFO_OUTPUT, "platform": "aix6",
'/usr/bin/ioscan': IOSCAN_OUT, "mock_run_command": [(0, LSDEV_OUTPUT, ""), (0, LSCFG_OUTPUT, "")],
'/opt/fcms/bin/fcmsutil': FCMSUTIL_OUT, },
} ["10000090FA551508"],
result = COMMANDS.get(cmd.split()[0]) id="aix6",
if result is None: ),
rc = 1 pytest.param(
result = 'Error' {
return (rc, result, '') "platform": "sunos5",
"mock_run_command": [
(0, FCINFO_OUTPUT, ""),
def test_get_fc_wwn_info(mocker): ],
module = Mock() },
["10000090fa1658de"],
id="sunos5",
),
pytest.param(
{
"platform": "hp-ux11",
"mock_run_command": [(0, IOSCAN_OUT, ""), (0, FCMSUTIL_OUT, "")],
},
["0x50060b00006975ec"],
id="hp-ux11",
),
],
)
def test_get_fc_wwn_info(mocker, test_input, expected):
module = mocker.MagicMock()
inst = fc_wwn.FcWwnInitiatorFactCollector() inst = fc_wwn.FcWwnInitiatorFactCollector()
mocker.patch.object(module, 'get_bin_path', side_effect=mock_get_bin_path) mocker.patch("sys.platform", test_input["platform"])
mocker.patch.object(module, 'run_command', side_effect=mock_run_command) mocker.patch.object(module, "get_bin_path", side_effect=mock_get_bin_path)
mocker.patch.object(
d = {'aix6': ['10000090FA551508'], 'sunos5': ['10000090fa1658de'], 'hp-ux11': ['0x50060b00006975ec']} module, "run_command", side_effect=test_input["mock_run_command"]
for key, value in d.items(): )
mocker.patch('sys.platform', key) wwn_expected = {"fibre_channel_wwn": expected}
wwn_expected = {"fibre_channel_wwn": value}
assert wwn_expected == inst.collect(module=module) assert wwn_expected == inst.collect(module=module)

@ -1,28 +1,15 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# # Copyright: Contributors to the Ansible project
# Ansible is free software: you can redistribute it and/or modify # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
#
from __future__ import annotations from __future__ import annotations
from unittest.mock import Mock import pytest
import unittest
from ansible.module_utils.facts.network import generic_bsd from ansible.module_utils.facts.network import generic_bsd
def get_bin_path(command, warning=None): def mock_get_bin_path(command, warning=None):
cmds = { cmds = {
'ifconfig': 'fake/ifconfig', 'ifconfig': 'fake/ifconfig',
'route': 'fake/route', 'route': 'fake/route',
@ -30,7 +17,7 @@ def get_bin_path(command, warning=None):
return cmds.get(command, None) return cmds.get(command, None)
netbsd_ifconfig_a_out_7_1 = r''' NETBSD_IFCONFIG_A_OUT_7_1 = r'''
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 33624 lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 33624
inet 127.0.0.1 netmask 0xff000000 inet 127.0.0.1 netmask 0xff000000
inet6 ::1 prefixlen 128 inet6 ::1 prefixlen 128
@ -48,7 +35,7 @@ re0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet6 fe80::5054:ff:fe63:55af%re0 prefixlen 64 scopeid 0x2 inet6 fe80::5054:ff:fe63:55af%re0 prefixlen 64 scopeid 0x2
''' '''
netbsd_ifconfig_a_out_post_7_1 = r''' NETBSD_IFCONFIG_A_OUT_POST_7_1 = r'''
lo0: flags=0x8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 33624 lo0: flags=0x8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 33624
inet 127.0.0.1/8 flags 0x0 inet 127.0.0.1/8 flags 0x0
inet6 ::1/128 flags 0x20<NODAD> inet6 ::1/128 flags 0x20<NODAD>
@ -101,84 +88,81 @@ NETBSD_EXPECTED = {'all_ipv4_addresses': ['192.168.122.205'],
'type': 'ether'}} 'type': 'ether'}}
def run_command_old_ifconfig(command): @pytest.mark.parametrize(
if command == 'fake/route': ("test_input", "expected"),
return 0, 'Foo', '' [
if command == ['fake/ifconfig', '-a']: pytest.param(
return 0, netbsd_ifconfig_a_out_7_1, '' {
return 1, '', '' "mock_run_command": [
(0, "Foo", ""),
(0, "Foo", ""),
def run_command_post_7_1_ifconfig(command): (0, NETBSD_IFCONFIG_A_OUT_7_1, ""),
if command == 'fake/route': ],
return 0, 'Foo', '' },
if command == ['fake/ifconfig', '-a']: NETBSD_EXPECTED,
return 0, netbsd_ifconfig_a_out_post_7_1, '' id="old-ifconfig",
return 1, '', '' ),
pytest.param(
{
class TestGenericBsdNetworkNetBSD(unittest.TestCase): "mock_run_command": [
gather_subset = ['all'] (0, "Foo", ""),
(0, "Foo", ""),
def setUp(self): (0, NETBSD_IFCONFIG_A_OUT_POST_7_1, ""),
self.maxDiff = None ],
self.longMessage = True },
NETBSD_EXPECTED,
# TODO: extract module run_command/get_bin_path usage to methods I can mock without mocking all of run_command id="post-7-1-ifconfig",
def test(self): ),
module = self._mock_module() ],
module.get_bin_path.side_effect = get_bin_path )
module.run_command.side_effect = run_command_old_ifconfig def test_generic_bsd_ifconfig(mocker, test_input, expected):
module = mocker.MagicMock()
bsd_net = generic_bsd.GenericBsdIfconfigNetwork(module) mocker.patch.object(module, "get_bin_path", side_effect=mock_get_bin_path)
mocker.patch.object(
res = bsd_net.populate() module, "run_command", side_effect=test_input["mock_run_command"]
self.assertDictEqual(res, NETBSD_EXPECTED) )
def test_ifconfig_post_7_1(self):
module = self._mock_module()
module.get_bin_path.side_effect = get_bin_path
module.run_command.side_effect = run_command_post_7_1_ifconfig
bsd_net = generic_bsd.GenericBsdIfconfigNetwork(module) bsd_net = generic_bsd.GenericBsdIfconfigNetwork(module)
res = bsd_net.populate() res = bsd_net.populate()
self.assertDictEqual(res, NETBSD_EXPECTED) assert res == expected
def test_netbsd_ifconfig_old_and_new(self):
module_new = self._mock_module() def test_compare_old_new_ifconfig(mocker):
module_new.get_bin_path.side_effect = get_bin_path old_ifconfig_module = mocker.MagicMock()
module_new.run_command.side_effect = run_command_post_7_1_ifconfig mocker.patch.object(old_ifconfig_module, "get_bin_path", side_effect=mock_get_bin_path)
mocker.patch.object(
bsd_net_new = generic_bsd.GenericBsdIfconfigNetwork(module_new) old_ifconfig_module,
res_new = bsd_net_new.populate() "run_command",
side_effect=[
module_old = self._mock_module() (0, "Foo", ""),
module_old.get_bin_path.side_effect = get_bin_path (0, "Foo", ""),
module_old.run_command.side_effect = run_command_old_ifconfig (0, NETBSD_IFCONFIG_A_OUT_7_1, ""),
],
bsd_net_old = generic_bsd.GenericBsdIfconfigNetwork(module_old) )
res_old = bsd_net_old.populate() old_bsd_net = generic_bsd.GenericBsdIfconfigNetwork(old_ifconfig_module)
old_res = old_bsd_net.populate()
self.assertDictEqual(res_old, res_new)
self.assertDictEqual(res_old, NETBSD_EXPECTED) new_ifconfig_module = mocker.MagicMock()
self.assertDictEqual(res_new, NETBSD_EXPECTED) mocker.patch.object(new_ifconfig_module, "get_bin_path", side_effect=mock_get_bin_path)
mocker.patch.object(
def _mock_module(self): new_ifconfig_module,
mock_module = Mock() "run_command",
mock_module.params = {'gather_subset': self.gather_subset, side_effect=[
'gather_timeout': 5, (0, "Foo", ""),
'filter': '*'} (0, "Foo", ""),
mock_module.get_bin_path = Mock(return_value=None) (0, NETBSD_IFCONFIG_A_OUT_POST_7_1, ""),
return mock_module ],
)
def test_ensure_correct_netmask_parsing(self): new_bsd_net = generic_bsd.GenericBsdIfconfigNetwork(new_ifconfig_module)
n = generic_bsd.GenericBsdIfconfigNetwork(None) new_res = new_bsd_net.populate()
lines = [ assert old_res == new_res
'inet 192.168.7.113 netmask 0xffffff00 broadcast 192.168.7.255',
'inet 10.109.188.206 --> 10.109.188.206 netmask 0xffffe000',
] @pytest.mark.parametrize(
expected = [ ("test_input", "expected"),
[
pytest.param(
"inet 192.168.7.113 netmask 0xffffff00 broadcast 192.168.7.255",
( (
{ {
'ipv4': [ 'ipv4': [
@ -186,12 +170,16 @@ class TestGenericBsdNetworkNetBSD(unittest.TestCase):
'address': '192.168.7.113', 'address': '192.168.7.113',
'netmask': '255.255.255.0', 'netmask': '255.255.255.0',
'network': '192.168.7.0', 'network': '192.168.7.0',
'broadcast': '192.168.7.255' 'broadcast': '192.168.7.255',
} }
] ]
}, },
{'all_ipv4_addresses': ['192.168.7.113']}, {'all_ipv4_addresses': ['192.168.7.113']},
), ),
id="ifconfig-output-1",
),
pytest.param(
"inet 10.109.188.206 --> 10.109.188.206 netmask 0xffffe000",
( (
{ {
'ipv4': [ 'ipv4': [
@ -199,17 +187,21 @@ class TestGenericBsdNetworkNetBSD(unittest.TestCase):
'address': '10.109.188.206', 'address': '10.109.188.206',
'netmask': '255.255.224.0', 'netmask': '255.255.224.0',
'network': '10.109.160.0', 'network': '10.109.160.0',
'broadcast': '10.109.191.255' 'broadcast': '10.109.191.255',
} }
] ]
}, },
{'all_ipv4_addresses': ['10.109.188.206']}, {'all_ipv4_addresses': ['10.109.188.206']},
), ),
] id="ifconfig-output-2",
for i, line in enumerate(lines): ),
words = line.split() ],
current_if = {'ipv4': []} )
ips = {'all_ipv4_addresses': []} def test_ensure_correct_netmask_parsing(test_input, expected):
n = generic_bsd.GenericBsdIfconfigNetwork(None)
words = test_input.split()
current_if = {"ipv4": []}
ips = {"all_ipv4_addresses": []}
n.parse_inet_line(words, current_if, ips) n.parse_inet_line(words, current_if, ips)
self.assertDictEqual(current_if, expected[i][0]) assert current_if == expected[0]
self.assertDictEqual(ips, expected[i][1]) assert ips == expected[1]

@ -5,7 +5,7 @@
from __future__ import annotations from __future__ import annotations
from ansible.module_utils.facts.network import iscsi from ansible.module_utils.facts.network import iscsi
from unittest.mock import Mock import pytest
# AIX # lsattr -E -l iscsi0 # AIX # lsattr -E -l iscsi0
@ -36,18 +36,34 @@ SLP Scope list for iSLPD :
""" """
def test_get_iscsi_info(mocker): @pytest.mark.parametrize(
module = Mock() ("test_input", "expected"),
[
pytest.param(
{
"platform": "aix6",
"iscsi_path": "/usr/sbin/lsattr",
"return_command": LSATTR_OUTPUT
},
{"iscsi_iqn": "iqn.localhost.hostid.7f000002"},
id="aix",
),
pytest.param(
{
"platform": "hp-ux",
"iscsi_path": "/opt/iscsi/bin/iscsiutil",
"return_command": ISCSIUTIL_OUTPUT
},
{"iscsi_iqn": " iqn.2001-04.com.hp.stor:svcio"},
id="hpux",
)
]
)
def test_get_iscsi_info(mocker, test_input, expected):
module = mocker.MagicMock()
inst = iscsi.IscsiInitiatorNetworkCollector() inst = iscsi.IscsiInitiatorNetworkCollector()
mocker.patch('sys.platform', 'aix6') mocker.patch('sys.platform', test_input['platform'])
mocker.patch.object(module, 'get_bin_path', return_value='/usr/sbin/lsattr') mocker.patch.object(module, 'get_bin_path', return_value=test_input['iscsi_path'])
mocker.patch.object(module, 'run_command', return_value=(0, LSATTR_OUTPUT, '')) mocker.patch.object(module, 'run_command', return_value=(0, test_input['return_command'], ''))
aix_iscsi_expected = {"iscsi_iqn": "iqn.localhost.hostid.7f000002"} assert expected == inst.collect(module=module)
assert aix_iscsi_expected == inst.collect(module=module)
mocker.patch('sys.platform', 'hp-ux')
mocker.patch.object(module, 'get_bin_path', return_value='/opt/iscsi/bin/iscsiutil')
mocker.patch.object(module, 'run_command', return_value=(0, ISCSIUTIL_OUTPUT, ''))
hpux_iscsi_expected = {"iscsi_iqn": " iqn.2001-04.com.hp.stor:svcio"}
assert hpux_iscsi_expected == inst.collect(module=module)

@ -1,25 +1,8 @@
# This file is part of Ansible # Copyright: Contributors to the Ansible project
# -*- coding: utf-8 -*- # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
#
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
#
from __future__ import annotations from __future__ import annotations
from unittest.mock import Mock
import unittest
from ansible.module_utils.facts.network import linux from ansible.module_utils.facts.network import linux
# ip -4 route show table local # ip -4 route show table local
@ -58,34 +41,20 @@ IP_ROUTE_SHOW_LOCAL_EXPECTED = {
} }
class TestLocalRoutesLinux(unittest.TestCase): def mock_get_bin_path(command):
gather_subset = ['all'] cmds = {"ip": "fake/ip"}
return cmds.get(command, None)
def get_bin_path(self, command):
if command == 'ip':
return 'fake/ip'
return None
def run_command(self, command): def test_linux_local_routes(mocker):
if command == ['fake/ip', '-4', 'route', 'show', 'table', 'local']: module = mocker.MagicMock()
return 0, IP4_ROUTE_SHOW_LOCAL, '' mocker.patch.object(module, "get_bin_path", side_effect=mock_get_bin_path)
if command == ['fake/ip', '-6', 'route', 'show', 'table', 'local']: mocker.patch.object(
return 0, IP6_ROUTE_SHOW_LOCAL, '' module,
return 1, '', '' "run_command",
side_effect=[(0, IP4_ROUTE_SHOW_LOCAL, ""), (0, IP6_ROUTE_SHOW_LOCAL, "")],
def test(self): )
module = self._mock_module()
module.get_bin_path.side_effect = self.get_bin_path
module.run_command.side_effect = self.run_command
net = linux.LinuxNetwork(module) net = linux.LinuxNetwork(module)
res = net.get_locally_reachable_ips('fake/ip') res = net.get_locally_reachable_ips(mock_get_bin_path("ip"))
self.assertDictEqual(res, IP_ROUTE_SHOW_LOCAL_EXPECTED) assert res == IP_ROUTE_SHOW_LOCAL_EXPECTED
def _mock_module(self):
mock_module = Mock()
mock_module.params = {'gather_subset': self.gather_subset,
'gather_timeout': 5,
'filter': '*'}
mock_module.get_bin_path = Mock(return_value=None)
return mock_module

Loading…
Cancel
Save