[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