123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381 |
- # -*- coding: utf-8 -*-
- """
- :codeauthor: Jayesh Kariya <jayeshk@saltstack.com>
- """
- from __future__ import absolute_import, print_function, unicode_literals
- import salt.modules.win_ip as win_ip
- from salt.exceptions import CommandExecutionError, SaltInvocationError
- from tests.support.helpers import slowTest
- from tests.support.mixins import LoaderModuleMockMixin
- from tests.support.mock import MagicMock, call, patch
- from tests.support.unit import TestCase
- ETHERNET_CONFIG = (
- 'Configuration for interface "Ethernet"\n'
- "DHCP enabled: Yes\n"
- "IP Address: 1.2.3.74\n"
- "Subnet Prefix: 1.2.3.0/24 (mask 255.255.255.0)\n"
- "Default Gateway: 1.2.3.1\n"
- "Gateway Metric: 0\n"
- "InterfaceMetric: 20\n"
- "DNS servers configured through DHCP: 1.2.3.4\n"
- "Register with which suffix: Primary only\n"
- "WINS servers configured through DHCP: None\n"
- )
- ETHERNET_ENABLE = (
- "Ethernet\n"
- "Type: Dedicated\n"
- "Administrative state: Enabled\n"
- "Connect state: Connected"
- )
- class WinShadowTestCase(TestCase, LoaderModuleMockMixin):
- """
- Test cases for salt.modules.win_ip
- """
- def setup_loader_modules(self):
- return {win_ip: {}}
- # 'raw_interface_configs' function tests: 1
- def test_raw_interface_configs(self):
- """
- Test if it return raw configs for all interfaces.
- """
- mock_cmd = MagicMock(return_value=ETHERNET_CONFIG)
- with patch.dict(win_ip.__salt__, {"cmd.run": mock_cmd}):
- self.assertEqual(win_ip.raw_interface_configs(), ETHERNET_CONFIG)
- # 'get_all_interfaces' function tests: 1
- def test_get_all_interfaces(self):
- """
- Test if it return configs for all interfaces.
- """
- ret = {
- "Ethernet": {
- "DHCP enabled": "Yes",
- "DNS servers configured through DHCP": ["1.2.3.4"],
- "Default Gateway": "1.2.3.1",
- "Gateway Metric": "0",
- "InterfaceMetric": "20",
- "Register with which suffix": "Primary only",
- "WINS servers configured through DHCP": ["None"],
- "ip_addrs": [
- {
- "IP Address": "1.2.3.74",
- "Netmask": "255.255.255.0",
- "Subnet": "1.2.3.0/24",
- }
- ],
- }
- }
- mock_cmd = MagicMock(return_value=ETHERNET_CONFIG)
- with patch.dict(win_ip.__salt__, {"cmd.run": mock_cmd}):
- self.assertDictEqual(win_ip.get_all_interfaces(), ret)
- # 'get_interface' function tests: 1
- def test_get_interface(self):
- """
- Test if it return the configuration of a network interface.
- """
- ret = {
- "DHCP enabled": "Yes",
- "DNS servers configured through DHCP": ["1.2.3.4"],
- "Default Gateway": "1.2.3.1",
- "Gateway Metric": "0",
- "InterfaceMetric": "20",
- "Register with which suffix": "Primary only",
- "WINS servers configured through DHCP": ["None"],
- "ip_addrs": [
- {
- "IP Address": "1.2.3.74",
- "Netmask": "255.255.255.0",
- "Subnet": "1.2.3.0/24",
- }
- ],
- }
- mock_cmd = MagicMock(return_value=ETHERNET_CONFIG)
- with patch.dict(win_ip.__salt__, {"cmd.run": mock_cmd}):
- self.assertDictEqual(win_ip.get_interface("Ethernet"), ret)
- # 'is_enabled' function tests: 1
- def test_is_enabled(self):
- """
- Test if it returns `True` if interface is enabled, otherwise `False`.
- """
- mock_cmd = MagicMock(side_effect=[ETHERNET_ENABLE, ""])
- with patch.dict(win_ip.__salt__, {"cmd.run": mock_cmd}):
- self.assertTrue(win_ip.is_enabled("Ethernet"))
- self.assertRaises(CommandExecutionError, win_ip.is_enabled, "Ethernet")
- # 'is_disabled' function tests: 1
- def test_is_disabled(self):
- """
- Test if it returns `True` if interface is disabled, otherwise `False`.
- """
- mock_cmd = MagicMock(return_value=ETHERNET_ENABLE)
- with patch.dict(win_ip.__salt__, {"cmd.run": mock_cmd}):
- self.assertFalse(win_ip.is_disabled("Ethernet"))
- # 'enable' function tests: 1
- def test_enable(self):
- """
- Test if it enable an interface.
- """
- # Test with enabled interface
- with patch.object(win_ip, "is_enabled", return_value=True):
- self.assertTrue(win_ip.enable("Ethernet"))
- mock_cmd = MagicMock()
- with patch.object(win_ip, "is_enabled", side_effect=[False, True]), patch.dict(
- win_ip.__salt__, {"cmd.run": mock_cmd}
- ):
- self.assertTrue(win_ip.enable("Ethernet"))
- mock_cmd.called_once_with(
- [
- "netsh",
- "interface",
- "set",
- "interface",
- "name=Ethernet",
- "admin=ENABLED",
- ],
- python_shell=False,
- )
- # 'disable' function tests: 1
- def test_disable(self):
- """
- Test if it disable an interface.
- """
- with patch.object(win_ip, "is_disabled", return_value=True):
- self.assertTrue(win_ip.disable("Ethernet"))
- mock_cmd = MagicMock()
- with patch.object(win_ip, "is_disabled", side_effect=[False, True]), patch.dict(
- win_ip.__salt__, {"cmd.run": mock_cmd}
- ):
- self.assertTrue(win_ip.disable("Ethernet"))
- mock_cmd.called_once_with(
- [
- "netsh",
- "interface",
- "set",
- "interface",
- "name=Ethernet",
- "admin=DISABLED",
- ],
- python_shell=False,
- )
- # 'get_subnet_length' function tests: 1
- def test_get_subnet_length(self):
- """
- Test if it disable an interface.
- """
- self.assertEqual(win_ip.get_subnet_length("255.255.255.0"), 24)
- self.assertRaises(SaltInvocationError, win_ip.get_subnet_length, "255.255.0")
- # 'set_static_ip' function tests: 1
- @slowTest
- def test_set_static_ip(self):
- """
- Test if it set static IP configuration on a Windows NIC.
- """
- self.assertRaises(
- SaltInvocationError,
- win_ip.set_static_ip,
- "Local Area Connection",
- "10.1.2/24",
- )
- mock_cmd = MagicMock(return_value=ETHERNET_CONFIG)
- mock_all = MagicMock(return_value={"retcode": 1, "stderr": "Error"})
- with patch.dict(
- win_ip.__salt__, {"cmd.run": mock_cmd, "cmd.run_all": mock_all}
- ):
- self.assertRaises(
- CommandExecutionError,
- win_ip.set_static_ip,
- "Ethernet",
- "1.2.3.74/24",
- append=True,
- )
- self.assertRaises(
- CommandExecutionError, win_ip.set_static_ip, "Ethernet", "1.2.3.74/24"
- )
- mock_all = MagicMock(return_value={"retcode": 0})
- with patch.dict(
- win_ip.__salt__, {"cmd.run": mock_cmd, "cmd.run_all": mock_all}
- ):
- self.assertDictEqual(
- win_ip.set_static_ip("Local Area Connection", "1.2.3.74/24"), {}
- )
- self.assertDictEqual(
- win_ip.set_static_ip("Ethernet", "1.2.3.74/24"),
- {
- "Address Info": {
- "IP Address": "1.2.3.74",
- "Netmask": "255.255.255.0",
- "Subnet": "1.2.3.0/24",
- }
- },
- )
- # 'set_dhcp_ip' function tests: 1
- def test_set_dhcp_ip(self):
- """
- Test if it set Windows NIC to get IP from DHCP.
- """
- mock_cmd = MagicMock(return_value=ETHERNET_CONFIG)
- with patch.dict(win_ip.__salt__, {"cmd.run": mock_cmd}):
- self.assertDictEqual(
- win_ip.set_dhcp_ip("Ethernet"),
- {"DHCP enabled": "Yes", "Interface": "Ethernet"},
- )
- # 'set_static_dns' function tests: 1
- def test_set_static_dns(self):
- """
- Test if it set static DNS configuration on a Windows NIC.
- """
- mock_cmd = MagicMock()
- with patch.dict(win_ip.__salt__, {"cmd.run": mock_cmd}):
- self.assertDictEqual(
- win_ip.set_static_dns("Ethernet", "192.168.1.252", "192.168.1.253"),
- {
- "DNS Server": ("192.168.1.252", "192.168.1.253"),
- "Interface": "Ethernet",
- },
- )
- mock_cmd.assert_has_calls(
- [
- call(
- [
- "netsh",
- "interface",
- "ip",
- "set",
- "dns",
- "name=Ethernet",
- "source=static",
- "address=192.168.1.252",
- "register=primary",
- ],
- python_shell=False,
- ),
- call(
- [
- "netsh",
- "interface",
- "ip",
- "add",
- "dns",
- "name=Ethernet",
- "address=192.168.1.253",
- "index=2",
- ],
- python_shell=False,
- ),
- ]
- )
- def test_set_static_dns_clear(self):
- """
- Test if it set static DNS configuration on a Windows NIC.
- """
- mock_cmd = MagicMock()
- with patch.dict(win_ip.__salt__, {"cmd.run": mock_cmd}):
- self.assertDictEqual(
- win_ip.set_static_dns("Ethernet", []),
- {"DNS Server": [], "Interface": "Ethernet"},
- )
- mock_cmd.assert_called_once_with(
- [
- "netsh",
- "interface",
- "ip",
- "set",
- "dns",
- "name=Ethernet",
- "source=static",
- "address=none",
- ],
- python_shell=False,
- )
- def test_set_static_dns_no_action(self):
- """
- Test if it set static DNS configuration on a Windows NIC.
- """
- # Test passing nothing
- self.assertDictEqual(
- win_ip.set_static_dns("Ethernet"),
- {"DNS Server": "No Changes", "Interface": "Ethernet"},
- )
- # Test passing None
- self.assertDictEqual(
- win_ip.set_static_dns("Ethernet", None),
- {"DNS Server": "No Changes", "Interface": "Ethernet"},
- )
- # Test passing string None
- self.assertDictEqual(
- win_ip.set_static_dns("Ethernet", "None"),
- {"DNS Server": "No Changes", "Interface": "Ethernet"},
- )
- # 'set_dhcp_dns' function tests: 1
- def test_set_dhcp_dns(self):
- """
- Test if it set DNS source to DHCP on Windows.
- """
- mock_cmd = MagicMock(return_value=ETHERNET_CONFIG)
- with patch.dict(win_ip.__salt__, {"cmd.run": mock_cmd}):
- self.assertDictEqual(
- win_ip.set_dhcp_dns("Ethernet"),
- {"DNS Server": "DHCP", "Interface": "Ethernet"},
- )
- # 'set_dhcp_all' function tests: 1
- def test_set_dhcp_all(self):
- """
- Test if it set both IP Address and DNS to DHCP.
- """
- mock_cmd = MagicMock(return_value=ETHERNET_CONFIG)
- with patch.dict(win_ip.__salt__, {"cmd.run": mock_cmd}):
- self.assertDictEqual(
- win_ip.set_dhcp_all("Ethernet"),
- {"Interface": "Ethernet", "DNS Server": "DHCP", "DHCP enabled": "Yes"},
- )
- # 'get_default_gateway' function tests: 1
- def test_get_default_gateway(self):
- """
- Test if it set DNS source to DHCP on Windows.
- """
- mock_cmd = MagicMock(return_value=ETHERNET_CONFIG)
- with patch.dict(win_ip.__salt__, {"cmd.run": mock_cmd}):
- self.assertEqual(win_ip.get_default_gateway(), "1.2.3.1")
|