[PATCH] network: add tests

Radek Vykydal rvykydal at redhat.com
Fri May 16 13:20:23 UTC 2014


---
 tests/pyanaconda_tests/network_test.py | 330 +++++++++++++++++++++++++++++++++
 1 file changed, 330 insertions(+)
 create mode 100644 tests/pyanaconda_tests/network_test.py

diff --git a/tests/pyanaconda_tests/network_test.py b/tests/pyanaconda_tests/network_test.py
new file mode 100644
index 0000000..c636c22
--- /dev/null
+++ b/tests/pyanaconda_tests/network_test.py
@@ -0,0 +1,330 @@
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2014  Red Hat, Inc.
+#
+# This copyrighted material is made available to anyone wishing to use,
+# modify, copy, or redistribute it subject to the terms and conditions of
+# the GNU General Public License v.2, or (at your option) any later version.
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY expressed or implied, including the implied warranties 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 this program; if not, write to the
+# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.  Any Red Hat trademarks that are incorporated in the
+# source code or documentation are not subject to the GNU General Public
+# License and may only be used or replicated with the express permission of
+# Red Hat, Inc.
+#
+# Red Hat Author(s): Radek Vykydal <rvykydal at redhat.com>
+
+from pyanaconda import network
+import unittest
+import mock
+from mock import patch
+
+class NetworkTests(unittest.TestCase):
+
+    def default_ks_vlan_interface_name_test(self):
+        self.assertEqual(network.default_ks_vlan_interface_name("em1", "171"),
+                         "em1.171")
+
+    def bond_options_ksdata_to_dbus_test(self):
+        cases = [("mode=802.3ad,miimon=100,xmit_hash_policy=layer2+3,lacp_rate=fast",
+                  {"mode":"802.3ad",
+                     "miimon":"100",
+                     "xmit_hash_policy":"layer2+3",
+                     "lacp_rate":"fast"}),
+                 ("mode=balance-alb,arp_interval=100,arp_ip_target=192.168.122.1",
+                  {"mode":"balance-alb",
+                   "arp_interval":"100",
+                   "arp_ip_target":"192.168.122.1"}),
+                 ("mode=active-backup,primary=eth1,miimon=100,fail_over_mac=2",
+                  {"mode":"active-backup",
+                   "primary":"eth1",
+                   "miimon":"100",
+                   "fail_over_mac":"2"}),
+                 ("option1=value1,value2;option2=value3",
+                  {"option1":"value1,value2",
+                   "option2":"value3"}),
+                ]
+        for bondopts, dbus_dict in cases:
+            self.assertEqual(network.bond_options_ksdata_to_dbus(bondopts), dbus_dict)
+
+    def sanityCheckHostname_test(self):
+
+        self.assertFalse(network.sanityCheckHostname("")[0])
+        self.assertFalse(network.sanityCheckHostname(None)[0])
+
+        # section length < 64
+        self.assertTrue(network.sanityCheckHostname("h"*63)[0])
+        self.assertFalse(network.sanityCheckHostname("h"*64)[0])
+
+        # length < 256
+        self.assertTrue(network.sanityCheckHostname("section." * 31+"section")[0])
+        self.assertFalse(network.sanityCheckHostname("section." * 31+"sectionx")[0])
+
+        self.assertFalse(network.sanityCheckHostname(
+            "section.must.be..nonempty.")[0])
+        self.assertFalse(network.sanityCheckHostname(
+            ".section.must.be.nonempty.")[0])
+        self.assertTrue(network.sanityCheckHostname(
+            "section.can.contain.only.alphanums.012.or.hyp-hens")[0])
+        self.assertFalse(network.sanityCheckHostname(
+            "section.can.contain.only.alphanums.012.or.hyp-hens!!!")[0])
+        self.assertFalse(network.sanityCheckHostname(
+            "section.may.not.start.with.-hyphen")[0])
+        self.assertFalse(network.sanityCheckHostname(
+            "section.may.not.end.with.hyphen-")[0])
+
+        self.assertTrue(network.sanityCheckHostname( "0-0.")[0])
+        self.assertTrue(network.sanityCheckHostname( "0.")[0])
+
+        self.assertFalse(network.sanityCheckHostname("Lennart's Laptop")[0])
+
+    def prefix2netmask2prefix_test(self):
+        lore = [
+                (0, "0.0.0.0"),
+                (1, "128.0.0.0"),
+                (2, "192.0.0.0"),
+                (3, "224.0.0.0"),
+                (4, "240.0.0.0"),
+                (5, "248.0.0.0"),
+                (6, "252.0.0.0"),
+                (7, "254.0.0.0"),
+                (8, "255.0.0.0"),
+                (9, "255.128.0.0"),
+                (10, "255.192.0.0"),
+                (11, "255.224.0.0"),
+                (12, "255.240.0.0"),
+                (13, "255.248.0.0"),
+                (14, "255.252.0.0"),
+                (15, "255.254.0.0"),
+                (16, "255.255.0.0"),
+                (17, "255.255.128.0"),
+                (18, "255.255.192.0"),
+                (19, "255.255.224.0"),
+                (20, "255.255.240.0"),
+                (21, "255.255.248.0"),
+                (22, "255.255.252.0"),
+                (23, "255.255.254.0"),
+                (24, "255.255.255.0"),
+                (25, "255.255.255.128"),
+                (26, "255.255.255.192"),
+                (27, "255.255.255.224"),
+                (28, "255.255.255.240"),
+                (29, "255.255.255.248"),
+                (30, "255.255.255.252"),
+                (31, "255.255.255.254"),
+                (32, "255.255.255.255"),
+               ]
+        for prefix, netmask in lore:
+            self.assertEqual(network.prefix2netmask(prefix), netmask)
+            self.assertEqual(network.netmask2prefix(netmask), prefix)
+
+        self.assertEqual(network.prefix2netmask(33), "255.255.255.255")
+
+    @patch("pyanaconda.network.flags.cmdline",
+           {"BOOTIF":"01-11-11-11-11-11-11"})
+    @patch("pyanaconda.nm.nm_device_perm_hwaddress")
+    @patch("pyanaconda.nm.nm_device_carrier",
+            lambda dev: dev == "eth1")
+    @patch("pyanaconda.nm.nm_devices",
+            lambda:["eth0", "eth1"])
+    def nm_ks_spec_to_device_name_test(self, nm_hwaddr_mock):
+        def hwaddr_mock(dev):
+            h = {"eth0" : "00:00:00:00:00:00",
+                 "eth1" : "11:11:11:11:11:11"}
+            try:
+                mac = h[dev]
+            except KeyError:
+                raise ValueError
+            return mac
+
+        nm_hwaddr_mock.side_effect = hwaddr_mock
+        self.assertEqual(network.ks_spec_to_device_name("eth0"), "eth0")
+        self.assertEqual(network.ks_spec_to_device_name("eth1"), "eth1")
+        self.assertEqual(network.ks_spec_to_device_name("nonexisting"), "nonexisting")
+        self.assertEqual(network.ks_spec_to_device_name("link"), "eth1")
+        self.assertNotEqual(network.ks_spec_to_device_name("link"), "eth0")
+        self.assertEqual(network.ks_spec_to_device_name("00:00:00:00:00:00"), "eth0")
+        self.assertNotEqual(network.ks_spec_to_device_name("00:00:00:00:00:00"), "eth1")
+        self.assertEqual(network.ks_spec_to_device_name("bootif"), "eth1")
+        self.assertNotEqual(network.ks_spec_to_device_name("bootif"), "eth0")
+
+class NetworkKSDataTests(unittest.TestCase):
+
+    def setUp(self):
+        self.ksdata_mock = mock.Mock()
+        self.ksdata_mock.network = mock.Mock()
+
+    def update_hostname_data_test(self):
+        from pyanaconda.kickstart import AnacondaKSHandler
+        handler = AnacondaKSHandler()
+        ksdata = self.ksdata_mock
+
+        # network --hostname oldhostname
+        nd = handler.NetworkData(hostname="oldhostname", bootProto="")
+        ksdata.network.network=[nd]
+        network.update_hostname_data(ksdata, "newhostname")
+        # network --hostname newhostname
+        self.assertEqual(ksdata.network.network[0].hostname, "newhostname")
+
+        # no network in ks
+        ksdata.network.network=[]
+        network.update_hostname_data(ksdata, "newhostname")
+        # network --hostname newhostname
+        self.assertEqual(ksdata.network.network[0].hostname, "newhostname")
+
+        # network --bootproto dhcp --onboot no --device em1 --hostname oldhostname
+        nd = handler.NetworkData(bootProto="dhcp", onboot="no", device="em1", hostname="oldhostname")
+        ksdata.network.network=[nd]
+        network.update_hostname_data(ksdata, "newhostname")
+        # network --bootproto dhcp --onboot no --device em1 --hostname newhostname
+        self.assertEqual(ksdata.network.network[0].hostname, "newhostname")
+        self.assertEqual(len(ksdata.network.network), 1)
+
+        # network --bootproto dhcp --onboot no --device em1
+        nd = handler.NetworkData(bootProto="dhcp", onboot="no", device="em1")
+        ksdata.network.network=[nd]
+        network.update_hostname_data(ksdata, "newhostname")
+        # network --bootproto dhcp --onboot no --device em1
+        # network --hostname newhostname
+        self.assertEqual(ksdata.network.network[0].hostname, "")
+        self.assertEqual(ksdata.network.network[1].hostname, "newhostname")
+
+        # network --bootproto dhcp --onboot no --device em1
+        # network --hostname oldhostname
+        nd1 = handler.NetworkData(bootProto="dhcp", onboot="no", device="em1")
+        nd2 = handler.NetworkData(hostname="oldhostname", bootProto="")
+        ksdata.network.network=[nd1, nd2]
+        network.update_hostname_data(ksdata, "newhostname")
+        # network --bootproto dhcp --onboot no --device em1
+        # network --hostname newhostname
+        self.assertEquals(ksdata.network.network[0].hostname, "")
+        self.assertEquals(ksdata.network.network[1].hostname, "newhostname")
+
+class NetworkIfcfgTests(unittest.TestCase):
+    def ifcfg_mock(self, settings):
+        def get(value):
+            return settings.get(value.upper(), "")
+        m = mock.Mock()
+        m.get = get
+        return m
+
+    def dracutBootArguments_test(self):
+        ifcfg = self.ifcfg_mock({"BOOTPROTO": "ibft"})
+        self.assertEqual(
+                network.dracutBootArguments("em1", ifcfg, ""),
+                set(["ip=ibft"]))
+
+        ifcfg = self.ifcfg_mock({"BOOTPROTO": "ibft",
+                                 "HWADDR": "00:00:00:00:00:00"})
+        self.assertEqual(
+                network.dracutBootArguments("em1", ifcfg, ""),
+                set(["ip=ibft"]))
+
+        ifcfg = self.ifcfg_mock({"BOOTPROTO": "dhcp"})
+        self.assertEqual(
+                network.dracutBootArguments("em1", ifcfg, "10.34.102.77"),
+                set(["ip=em1:dhcp"]))
+
+        ifcfg = self.ifcfg_mock({"BOOTPROTO": "dhcp",
+                                 "HWADDR": "00:00:00:00:00:00"})
+        self.assertEqual(
+                network.dracutBootArguments("em1", ifcfg, "10.34.102.77"),
+                set(["ip=em1:dhcp", "ifname=em1:00:00:00:00:00:00"]))
+
+        ifcfg = self.ifcfg_mock({"BOOTPROTO": "static",
+                                 "IPADDR": "10.34.102.233",
+                                 "GATEWAY": "10.34.102.254",
+                                 "NETMASK": "255.255.255.0",
+                                 "HWADDR": "00:00:00:00:00:00"})
+        self.assertEqual(
+                network.dracutBootArguments("em1", ifcfg, "10.34.102.77"),
+                set(["ip=10.34.102.233::10.34.102.254:255.255.255.0::em1:none", "ifname=em1:00:00:00:00:00:00"]))
+
+        ifcfg = self.ifcfg_mock({"BOOTPROTO": "static",
+                                 "IPADDR": "10.34.102.233",
+                                 "GATEWAY": "10.34.102.254",
+                                 "NETMASK": "255.255.255.0"})
+        self.assertEqual(
+                network.dracutBootArguments("em1", ifcfg, "10.34.102.77"),
+                set(["ip=10.34.102.233::10.34.102.254:255.255.255.0::em1:none"]))
+
+        ifcfg = self.ifcfg_mock({"BOOTPROTO": "static",
+                                 "IPADDR": "10.34.102.233",
+                                 "GATEWAY": "10.34.102.254",
+                                 "PREFIX": "24"})
+        self.assertEqual(
+                network.dracutBootArguments("em1", ifcfg, "10.34.102.77"),
+                set(["ip=10.34.102.233::10.34.102.254:255.255.255.0::em1:none"]))
+
+        ifcfg = self.ifcfg_mock({"BOOTPROTO": "static",
+                                 "IPADDR": "10.34.102.233",
+                                 "NETMASK": "255.255.255.0"})
+        self.assertEqual(
+                network.dracutBootArguments("em1", ifcfg, "10.34.102.77"),
+                set(["ip=10.34.102.233:::255.255.255.0::em1:none"]))
+
+        ifcfg = self.ifcfg_mock({"BOOTPROTO": "static",
+                                 "IPADDR": "10.34.102.233",
+                                 "GATEWAY": "10.34.102.254",
+                                 "NETMASK": "255.255.255.0"})
+        self.assertEqual(
+                network.dracutBootArguments("em1", ifcfg, "10.34.102.77", hostname="node1"),
+                set(["ip=10.34.102.233::10.34.102.254:255.255.255.0:node1:em1:none"]))
+
+        ifcfg = self.ifcfg_mock({"DHCPV6C": "yes",
+                                 "IPV6_AUTOCONF": "yes"})
+        self.assertEqual(
+                network.dracutBootArguments("em1", ifcfg, "2001::1"),
+                set(["ip=em1:dhcp6"]))
+
+        ifcfg = self.ifcfg_mock({"IPV6_AUTOCONF": "yes"})
+        self.assertEqual(
+                network.dracutBootArguments("em1", ifcfg, "2001::1"),
+                set(["ip=em1:auto6"]))
+
+        ifcfg = self.ifcfg_mock({"IPV6_AUTOCONF": "yes",
+                                 "HWADDR": "00:00:00:00:00:00"})
+        self.assertEqual(
+                network.dracutBootArguments("em1", ifcfg, "2001::1"),
+                set(["ip=em1:auto6", "ifname=em1:00:00:00:00:00:00"]))
+
+        ifcfg = self.ifcfg_mock({"IPV6ADDR": "2001::4"})
+        self.assertEqual(
+                network.dracutBootArguments("em1", ifcfg, "2001::1"),
+                set(["ip=[2001::4]:::::em1:none"]))
+
+        ifcfg = self.ifcfg_mock({"IPV6ADDR": "2001::4"})
+        self.assertEqual(
+                network.dracutBootArguments("em1", ifcfg, "2001::1", hostname="node1"),
+                set(["ip=[2001::4]::::node1:em1:none"]))
+
+        ifcfg = self.ifcfg_mock({"IPV6ADDR": "2001::4",
+                                 "IPV6_DEFAULTGW": "2001::a"})
+        self.assertEqual(
+                network.dracutBootArguments("em1", ifcfg, "2001::1"),
+                set(["ip=[2001::4]::[2001::a]:::em1:none"]))
+
+    @patch("blivet.arch.isS390", lambda: True)
+    def dracutBootArguments_s390_test(self):
+        ifcfg = self.ifcfg_mock({"NETTYPE": "qeth",
+                                 "SUBCHANNELS": "0.0.f5f0,0.0.f5f1,0.0.f5f2",
+                                 "OPTIONS": '"layer2=1 portname=OSAPORT"'})
+        self.assertEqual(
+                network.dracutBootArguments("eth0", ifcfg, ""),
+                set(["rd.znet=qeth,0.0.f5f0,0.0.f5f1,0.0.f5f2,layer2=1,portname=OSAPORT"]))
+
+        ifcfg = self.ifcfg_mock({"NETTYPE": "qeth",
+                                 "SUBCHANNELS": "0.0.f5f0,0.0.f5f1,0.0.f5f2",
+                                 "OPTIONS": '"layer2=1 portname=OSAPORT"',
+                                 "BOOTPROTO": "static",
+                                 "IPADDR": "10.34.102.233",
+                                 "GATEWAY": "10.34.102.254",
+                                 "NETMASK": "255.255.255.0"})
+        self.assertEqual(
+                network.dracutBootArguments("eth0", ifcfg, "10.34.102.77"),
+                set(["rd.znet=qeth,0.0.f5f0,0.0.f5f1,0.0.f5f2,layer2=1,portname=OSAPORT", "ip=10.34.102.233::10.34.102.254:255.255.255.0::eth0:none"]))
+
-- 
1.9.0



More information about the anaconda-patches mailing list