diff options
author | Scott Moser <smoser@brickies.net> | 2016-11-08 20:59:23 -0500 |
---|---|---|
committer | Scott Moser <smoser@brickies.net> | 2016-11-22 16:31:43 -0500 |
commit | 6e92c5f2fccaad24afb89f79f260cb496fb8d67f (patch) | |
tree | c2a106a958086e7a4a5538846475313346355782 /tests/unittests/test_net.py | |
parent | 11b1aba4597379051e6b934e2b8f5a455e26ef14 (diff) | |
download | vyos-cloud-init-6e92c5f2fccaad24afb89f79f260cb496fb8d67f.tar.gz vyos-cloud-init-6e92c5f2fccaad24afb89f79f260cb496fb8d67f.zip |
net/cmdline: Consider ip= or ip6= on command line not only ip=
The previous behavior would miss ip6= on the command line and
would not pay attention to the written net-* or net6-* files if
only ip6= was found.
The fix here enables parsing the files if either ip= or ip6= is found,
and adds some tests as well.
LP: #1639930
Diffstat (limited to 'tests/unittests/test_net.py')
-rw-r--r-- | tests/unittests/test_net.py | 72 |
1 files changed, 53 insertions, 19 deletions
diff --git a/tests/unittests/test_net.py b/tests/unittests/test_net.py index 78c080ca..77e4013b 100644 --- a/tests/unittests/test_net.py +++ b/tests/unittests/test_net.py @@ -8,6 +8,8 @@ from cloudinit import util from .helpers import dir2dict from .helpers import mock +from .helpers import populate_dir +from .helpers import TempDirTestCase from .helpers import TestCase import base64 @@ -54,22 +56,9 @@ DHCP_EXPECTED_1 = { } DHCP6_CONTENT_1 = """ -DEVICE=eno1 +DEVICE6=eno1 HOSTNAME= DNSDOMAIN= -reason='PREINIT' -interface='eno1' -DEVICE=eno1 -HOSTNAME= -DNSDOMAIN= -reason='FAIL' -interface='eno1' -DEVICE=eno1 -HOSTNAME= -DNSDOMAIN= -reason='PREINIT6' -interface='eno1' -DEVICE=eno1 IPV6PROTO=dhcp6 IPV6ADDR=2001:67c:1562:8010:0:1:: IPV6NETMASK=64 @@ -77,11 +66,6 @@ IPV6DNS0=2001:67c:1562:8010::2:1 IPV6DOMAINSEARCH= HOSTNAME= DNSDOMAIN= -reason='BOUND6' -interface='eno1' -new_ip6_address='2001:67c:1562:8010:0:1::' -new_ip6_prefixlen='64' -new_dhcp6_name_servers='2001:67c:1562:8010::2:1' """ DHCP6_EXPECTED_1 = { @@ -677,6 +661,56 @@ class TestCmdlineConfigParsing(TestCase): self.assertEqual(found, self.simple_cfg) +class TestCmdlineReadKernelConfig(TempDirTestCase): + def test_ip_cmdline_read_kernel_cmdline_ip(self): + content = {'net-eth0.conf': DHCP_CONTENT_1} + populate_dir(self.tmp, content) + files = [os.path.join(self.tmp, k) for k in content.keys()] + found = cmdline.read_kernel_cmdline_config( + files=files, cmdline='foo ip=dhcp') + self.assertEqual(found['version'], 1) + self.assertEqual(found['config'], [DHCP_EXPECTED_1]) + + def test_ip_cmdline_read_kernel_cmdline_ip6(self): + content = {'net6-eno1.conf': DHCP6_CONTENT_1} + populate_dir(self.tmp, content) + files = [os.path.join(self.tmp, k) for k in content.keys()] + found = cmdline.read_kernel_cmdline_config( + files=files, cmdline='foo ip6=dhcp root=/dev/sda') + self.assertEqual( + found, + {'version': 1, 'config': [ + {'type': 'physical', 'name': 'eno1', + 'subnets': [ + {'dns_nameservers': ['2001:67c:1562:8010::2:1'], + 'control': 'manual', 'type': 'dhcp6', 'netmask': '64'}]}]}) + + def test_ip_cmdline_read_kernel_cmdline_none(self): + # if there is no ip= or ip6= on cmdline, return value should be None + content = {'net6-eno1.conf': DHCP6_CONTENT_1} + populate_dir(self.tmp, content) + files = [os.path.join(self.tmp, k) for k in content.keys()] + found = cmdline.read_kernel_cmdline_config( + files=files, cmdline='foo root=/dev/sda') + self.assertEqual(found, None) + + def test_ip_cmdline_both_ip_ip6(self): + content = {'net-eth0.conf': DHCP_CONTENT_1, + 'net6-eth0.conf': DHCP6_CONTENT_1.replace('eno1', 'eth0')} + populate_dir(self.tmp, content) + files = [os.path.join(self.tmp, k) for k in sorted(content.keys())] + found = cmdline.read_kernel_cmdline_config( + files=files, cmdline='foo ip=dhcp ip6=dhcp') + + eth0 = copy.deepcopy(DHCP_EXPECTED_1) + eth0['subnets'].append( + {'control': 'manual', 'type': 'dhcp6', + 'netmask': '64', 'dns_nameservers': ['2001:67c:1562:8010::2:1']}) + expected = [eth0] + self.assertEqual(found['version'], 1) + self.assertEqual(found['config'], expected) + + class TestEniRoundTrip(TestCase): def setUp(self): super(TestCase, self).setUp() |