← Back to team overview

cloud-init-dev team mailing list archive

[Merge] lp:~harlowja/cloud-init/netcfg-tests into lp:cloud-init

 

Joshua Harlow has proposed merging lp:~harlowja/cloud-init/netcfg-tests into lp:cloud-init.

Requested reviews:
  cloud init development team (cloud-init-dev)

For more details, see:
https://code.launchpad.net/~harlowja/cloud-init/netcfg-tests/+merge/126138

Tests are greattttt.
-- 
https://code.launchpad.net/~harlowja/cloud-init/netcfg-tests/+merge/126138
Your team cloud init development team is requested to review the proposed merge of lp:~harlowja/cloud-init/netcfg-tests into lp:cloud-init.
=== modified file 'cloudinit/distros/rhel.py'
--- cloudinit/distros/rhel.py	2012-09-25 01:02:18 +0000
+++ cloudinit/distros/rhel.py	2012-09-25 02:29:21 +0000
@@ -206,6 +206,12 @@
             contents = []
         return (exists, QuotingConfigObj(contents))
 
+    def _bring_up_interfaces(self, device_names):
+        if device_names and 'all' in device_names:
+            raise RuntimeError(('Distro %s can not translate '
+                                'the device name "all"') % (self.name))
+        return distros.Distro._bring_up_interfaces(self, device_names)
+
     def set_timezone(self, tz):
         tz_file = os.path.join("/usr/share/zoneinfo", tz)
         if not os.path.isfile(tz_file):

=== added file 'tests/unittests/test_distros/test_netconfig.py'
--- tests/unittests/test_distros/test_netconfig.py	1970-01-01 00:00:00 +0000
+++ tests/unittests/test_distros/test_netconfig.py	2012-09-25 02:29:21 +0000
@@ -0,0 +1,151 @@
+from mocker import MockerTestCase
+
+import mocker
+
+import os
+
+from cloudinit import distros
+from cloudinit import helpers
+from cloudinit import settings
+from cloudinit import util
+
+from StringIO import StringIO
+
+
+BASE_NET_CFG = '''
+auto lo
+iface lo inet loopback
+
+auto eth0
+iface eth0 inet static
+    address 192.168.1.5
+    netmask 255.255.255.0
+    network 192.168.0.0
+    broadcast 192.168.1.0
+    gateway 192.168.1.254
+
+auto eth1
+iface eth1 inet dhcp
+'''
+
+
+class WriteBuffer(object):
+    def __init__(self):
+        self.buffer = StringIO()
+        self.mode = None
+        self.omode = None
+
+    def write(self, text):
+        self.buffer.write(text)
+    
+    def __str__(self):
+        return self.buffer.getvalue()
+
+
+class TestNetCfgDistro(MockerTestCase):
+
+    def _get_distro(self, dname):
+        cls = distros.fetch(dname)
+        cfg = settings.CFG_BUILTIN
+        cfg['system_info']['distro'] = dname
+        paths = helpers.Paths({})
+        return cls(dname, cfg, paths)
+        
+    def test_simple_write_ub(self):
+        ub_distro = self._get_distro('ubuntu')
+        util_mock = self.mocker.replace(util.write_file,
+                                        spec=False, passthrough=False)
+        exists_mock = self.mocker.replace(os.path.isfile,
+                                          spec=False, passthrough=False)
+
+        exists_mock(mocker.ARGS)
+        self.mocker.count(0, None)
+        self.mocker.result(False)
+
+        write_bufs = {}
+        def replace_write(filename, content, mode=0644, omode="wb"):
+            buf = WriteBuffer()
+            buf.mode = mode
+            buf.omode = omode
+            buf.write(content)
+            write_bufs[filename] = buf
+
+        util_mock(mocker.ARGS)
+        self.mocker.call(replace_write)
+        self.mocker.replay()
+        ub_distro.apply_network(BASE_NET_CFG, False)
+
+        self.assertEquals(len(write_bufs), 1)
+        self.assertIn('/etc/network/interfaces', write_bufs)
+        write_buf = write_bufs['/etc/network/interfaces']
+        self.assertEquals(str(write_buf).strip(), BASE_NET_CFG.strip())
+        self.assertEquals(write_buf.mode, 0644)
+
+    def test_simple_write_rh(self):
+        rh_distro = self._get_distro('rhel')
+        write_mock = self.mocker.replace(util.write_file,
+                                         spec=False, passthrough=False)
+        load_mock = self.mocker.replace(util.load_file,
+                                        spec=False, passthrough=False)
+        exists_mock = self.mocker.replace(os.path.isfile,
+                                          spec=False, passthrough=False)
+
+        write_bufs = {}
+        def replace_write(filename, content, mode=0644, omode="wb"):
+            buf = WriteBuffer()
+            buf.mode = mode
+            buf.omode = omode
+            buf.write(content)
+            write_bufs[filename] = buf
+
+        exists_mock(mocker.ARGS)
+        self.mocker.count(0, None)
+        self.mocker.result(False)
+
+        load_mock(mocker.ARGS)
+        self.mocker.count(0, None)
+        self.mocker.result('')
+
+        for _i in range(0, 3):
+            write_mock(mocker.ARGS)
+            self.mocker.call(replace_write)
+
+        self.mocker.replay()
+        rh_distro.apply_network(BASE_NET_CFG, False)
+
+        self.assertEquals(len(write_bufs), 3)
+        self.assertIn('/etc/sysconfig/network-scripts/ifcfg-lo', write_bufs)
+        write_buf = write_bufs['/etc/sysconfig/network-scripts/ifcfg-lo']
+        expected_buf = '''
+# Created by cloud-init
+DEVICE="lo"
+ONBOOT=yes
+'''
+        self.assertEquals(str(write_buf).strip(), expected_buf.strip())
+        self.assertEquals(write_buf.mode, 0644)
+
+        self.assertIn('/etc/sysconfig/network-scripts/ifcfg-eth0', write_bufs)
+        write_buf = write_bufs['/etc/sysconfig/network-scripts/ifcfg-eth0']
+        expected_buf = '''
+# Created by cloud-init
+DEVICE="eth0"
+BOOTPROTO="static"
+NETMASK="255.255.255.0"
+IPADDR="192.168.1.5"
+ONBOOT=yes
+GATEWAY="192.168.1.254"
+BROADCAST="192.168.1.0"
+'''
+        self.assertEquals(str(write_buf).strip(), expected_buf.strip())
+        self.assertEquals(write_buf.mode, 0644)
+
+        self.assertIn('/etc/sysconfig/network-scripts/ifcfg-eth1', write_bufs)
+        write_buf = write_bufs['/etc/sysconfig/network-scripts/ifcfg-eth1']
+        expected_buf = '''
+# Created by cloud-init
+DEVICE="eth1"
+BOOTPROTO="dhcp"
+ONBOOT=yes
+'''
+        self.assertEquals(str(write_buf).strip(), expected_buf.strip())
+        self.assertEquals(write_buf.mode, 0644)


Follow ups