123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314 |
- # -*- coding: utf-8 -*-
- """
- :codeauthor: Jayesh Kariya <jayeshk@saltstack.com>
- """
- # Import Python Libs
- from __future__ import absolute_import, print_function, unicode_literals
- import salt.modules.win_network as win_network
- # Import Salt Libs
- import salt.utils.network
- # Import Salt Testing Libs
- from tests.support.mixins import LoaderModuleMockMixin
- from tests.support.mock import MagicMock, Mock, patch
- from tests.support.unit import TestCase, skipIf
- try:
- import wmi
- HAS_WMI = True
- except ImportError:
- HAS_WMI = False
- class Mockwmi(object):
- """
- Mock wmi class
- """
- NetConnectionID = "Ethernet"
- def __init__(self):
- pass
- class Mockwinapi(object):
- """
- Mock winapi class
- """
- def __init__(self):
- pass
- class winapi(object):
- """
- Mock winapi class
- """
- def __init__(self):
- pass
- class Com(object):
- """
- Mock Com method
- """
- def __enter__(self):
- return self
- def __exit__(self, *exc_info):
- return False
- class WinNetworkTestCase(TestCase, LoaderModuleMockMixin):
- """
- Test cases for salt.modules.win_network
- """
- def setup_loader_modules(self):
- self.WMI = Mock()
- self.addCleanup(delattr, self, "WMI")
- return {win_network: {}}
- # 'ping' function tests: 1
- def test_ping(self):
- """
- Test if it performs a ping to a host.
- """
- mock = MagicMock(return_value=True)
- with patch.dict(win_network.__salt__, {"cmd.run": mock}):
- self.assertTrue(win_network.ping("127.0.0.1"))
- # 'netstat' function tests: 1
- def test_netstat(self):
- """
- Test if it return information on open ports and states
- """
- ret = (
- " Proto Local Address Foreign Address State PID\n"
- " TCP 127.0.0.1:1434 0.0.0.0:0 LISTENING 1728\n"
- " UDP 127.0.0.1:1900 *:* 4240"
- )
- mock = MagicMock(return_value=ret)
- with patch.dict(win_network.__salt__, {"cmd.run": mock}):
- self.assertListEqual(
- win_network.netstat(),
- [
- {
- "local-address": "127.0.0.1:1434",
- "program": "1728",
- "proto": "TCP",
- "remote-address": "0.0.0.0:0",
- "state": "LISTENING",
- },
- {
- "local-address": "127.0.0.1:1900",
- "program": "4240",
- "proto": "UDP",
- "remote-address": "*:*",
- "state": None,
- },
- ],
- )
- # 'traceroute' function tests: 1
- def test_traceroute(self):
- """
- Test if it performs a traceroute to a 3rd party host
- """
- ret = (
- " 1 1 ms <1 ms <1 ms 172.27.104.1\n"
- " 2 1 ms <1 ms 1 ms 121.242.35.1.s[121.242.35.1]\n"
- " 3 3 ms 2 ms 2 ms 121.242.4.53.s[121.242.4.53]\n"
- )
- mock = MagicMock(return_value=ret)
- with patch.dict(win_network.__salt__, {"cmd.run": mock}):
- self.assertListEqual(
- win_network.traceroute("google.com"),
- [
- {
- "count": "1",
- "hostname": None,
- "ip": "172.27.104.1",
- "ms1": "1",
- "ms2": "<1",
- "ms3": "<1",
- },
- {
- "count": "2",
- "hostname": None,
- "ip": "121.242.35.1.s[121.242.35.1]",
- "ms1": "1",
- "ms2": "<1",
- "ms3": "1",
- },
- {
- "count": "3",
- "hostname": None,
- "ip": "121.242.4.53.s[121.242.4.53]",
- "ms1": "3",
- "ms2": "2",
- "ms3": "2",
- },
- ],
- )
- # 'nslookup' function tests: 1
- def test_nslookup(self):
- """
- Test if it query DNS for information about a domain or ip address
- """
- ret = (
- "Server: ct-dc-3-2.cybage.com\n"
- "Address: 172.27.172.12\n"
- "Non-authoritative answer:\n"
- "Name: google.com\n"
- "Addresses: 2404:6800:4007:806::200e\n"
- "216.58.196.110\n"
- )
- mock = MagicMock(return_value=ret)
- with patch.dict(win_network.__salt__, {"cmd.run": mock}):
- self.assertListEqual(
- win_network.nslookup("google.com"),
- [
- {"Server": "ct-dc-3-2.cybage.com"},
- {"Address": "172.27.172.12"},
- {"Name": "google.com"},
- {"Addresses": ["2404:6800:4007:806::200e", "216.58.196.110"]},
- ],
- )
- # 'dig' function tests: 1
- def test_dig(self):
- """
- Test if it performs a DNS lookup with dig
- """
- mock = MagicMock(return_value=True)
- with patch.dict(win_network.__salt__, {"cmd.run": mock}):
- self.assertTrue(win_network.dig("google.com"))
- # 'interfaces_names' function tests: 1
- @skipIf(not HAS_WMI, "WMI only available on Windows")
- def test_interfaces_names(self):
- """
- Test if it return a list of all the interfaces names
- """
- self.WMI.Win32_NetworkAdapter = MagicMock(return_value=Mockwmi)
- with patch("salt.utils.winapi.Com", MagicMock()), patch.object(
- self.WMI, "Win32_NetworkAdapter", return_value=[Mockwmi()]
- ), patch("salt.utils", Mockwinapi), patch.object(
- wmi, "WMI", Mock(return_value=self.WMI)
- ):
- self.assertListEqual(win_network.interfaces_names(), ["Ethernet"])
- # 'interfaces' function tests: 1
- def test_interfaces(self):
- """
- Test if it return information about all the interfaces on the minion
- """
- with patch.object(
- salt.utils.network, "win_interfaces", MagicMock(return_value=True)
- ):
- self.assertTrue(win_network.interfaces())
- # 'hw_addr' function tests: 1
- def test_hw_addr(self):
- """
- Test if it return the hardware address (a.k.a. MAC address)
- for a given interface
- """
- with patch.object(
- salt.utils.network, "hw_addr", MagicMock(return_value="Ethernet")
- ):
- self.assertEqual(win_network.hw_addr("Ethernet"), "Ethernet")
- # 'subnets' function tests: 1
- def test_subnets(self):
- """
- Test if it returns a list of subnets to which the host belongs
- """
- with patch.object(
- salt.utils.network, "subnets", MagicMock(return_value="10.1.1.0/24")
- ):
- self.assertEqual(win_network.subnets(), "10.1.1.0/24")
- # 'in_subnet' function tests: 1
- def test_in_subnet(self):
- """
- Test if it returns True if host is within specified subnet,
- otherwise False
- """
- with patch.object(
- salt.utils.network, "in_subnet", MagicMock(return_value=True)
- ):
- self.assertTrue(win_network.in_subnet("10.1.1.0/16"))
- # 'get_route' function tests: 1
- def test_get_route(self):
- """
- Test if it return information on open ports and states
- """
- ret = (
- "\n\n"
- "IPAddress : 10.0.0.15\n"
- "InterfaceIndex : 3\n"
- "InterfaceAlias : Wi-Fi\n"
- "AddressFamily : IPv4\n"
- "Type : Unicast\n"
- "PrefixLength : 24\n"
- "PrefixOrigin : Dhcp\n"
- "SuffixOrigin : Dhcp\n"
- "AddressState : Preferred\n"
- "ValidLifetime : 6.17:52:39\n"
- "PreferredLifetime : 6.17:52:39\n"
- "SkipAsSource : False\n"
- "PolicyStore : ActiveStore\n"
- "\n\n"
- "Caption :\n"
- "Description :\n"
- "ElementName :\n"
- "InstanceID : :8:8:8:9:55=55;:8;8;:8;55;\n"
- "AdminDistance :\n"
- "DestinationAddress :\n"
- "IsStatic :\n"
- "RouteMetric : 0\n"
- "TypeOfRoute : 3\n"
- "AddressFamily : IPv4\n"
- "CompartmentId : 1\n"
- "DestinationPrefix : 0.0.0.0/0\n"
- "InterfaceAlias : Wi-Fi\n"
- "InterfaceIndex : 3\n"
- "NextHop : 10.0.0.1\n"
- "PreferredLifetime : 6.23:14:43\n"
- "Protocol : NetMgmt\n"
- "Publish : No\n"
- "Store : ActiveStore\n"
- "ValidLifetime : 6.23:14:43\n"
- "PSComputerName :\n"
- "ifIndex : 3"
- )
- mock = MagicMock(return_value=ret)
- with patch.dict(win_network.__salt__, {"cmd.run": mock}):
- self.assertDictEqual(
- win_network.get_route("192.0.0.8"),
- {
- "destination": "192.0.0.8",
- "gateway": "10.0.0.1",
- "interface": "Wi-Fi",
- "source": "10.0.0.15",
- },
- )
|