def test_ipv4_0_aliases(self):
        """Test setting public IPv4 for FreeBSD networking"""

        interfaces = {"xn0":{"ip4s":[{"address":"10.127.31.38",
                                      "netmask":"255.255.255.0"}],
                             "ip6s":[],
                             "routes":[],
                             "mac":"40:40:8f:1e:a0:0a",
                             "gateway4":"10.127.31.1",
                             "dns":["10.6.24.4", "10.6.24.5"]},
                      "xn1":{"ip4s":[{"address":"192.168.2.30",
                                      "netmask":"255.255.224.0"}],
                             "ip6s":[],
                             "routes":[{"network":"10.176.0.0",
                                        "netmask":"255.248.0.0",
                                        "gateway":"10.177.96.1"},
                                       {"network":"10.191.192.0",
                                        "netmask":"255.255.192.0",
                                        "gateway":"10.177.96.1"}],
                             "mac":"40:40:a2:87:6e:26"}}

        inputdata = '\n'.join([
            'hostname="oldhostname"',
            'check_quotas="NO"',
            'ipv6_enable="YES"',
            'pf_enable="YES"',
            'pflog_enable="YES"',
            'sshd_enable="YES"',
            'ifconfig_re0="DHCP"',
            'ifconfig_rl0="10.0.1.1 netmask 255.255.255.0 up"',
            'ifconfig_rl0_alias0="10.0.1.2 netmask 255.255.255.255"',
            'dhcpd_enable="YES"',
            'dhcpd_flags="-q"',
            'dhcpd_conf="/usr/local/etc/dhcpd.conf"',
            ''])

        expecteddata = '\n'.join([
            'check_quotas="NO"',
            'pf_enable="YES"',
            'pflog_enable="YES"',
            'sshd_enable="YES"',
            'dhcpd_enable="NO"',
            'hostname=myhostname',
            'ifconfig_xn0="10.127.31.38 netmask 255.255.255.0 up"',
            'ifconfig_xn1="192.168.2.30 netmask 255.255.224.0 up"',
            'route_lan0="-net 10.176.0.0 -netmask 255.248.0.0 10.177.96.1"',
            'route_lan1="-net 10.191.192.0 -netmask 255.255.192.0 ' \
                    '10.177.96.1"',
            'static_routes="lan0,lan1"',
            'defaultrouter="10.127.31.1"',
            ''])

        filedata = network._create_rcconf_file(StringIO(inputdata),
                interfaces, 'myhostname')

        self.assertEqual(filedata, expecteddata)
    def test_ipv4_0_aliases(self):
        """Test setting public IPv4 for FreeBSD networking"""

        interfaces = {
            "xn0": {
                "label": "public",
                "ip4s": [{
                    "address": "10.127.31.38",
                    "netmask": "255.255.255.0"
                }],
                "ip6s": [],
                "routes": [],
                "mac": "40:40:8f:1e:a0:0a",
                "gateway4": "10.127.31.1",
                "dns": ["10.6.24.4", "10.6.24.5"]
            },
            "xn1": {
                "label":
                "private",
                "ip4s": [{
                    "address": "192.168.2.30",
                    "netmask": "255.255.224.0"
                }],
                "ip6s": [],
                "routes": [{
                    "network": "10.176.0.0",
                    "netmask": "255.248.0.0",
                    "gateway": "10.177.96.1"
                }, {
                    "network": "10.191.192.0",
                    "netmask": "255.255.192.0",
                    "gateway": "10.177.96.1"
                }],
                "mac":
                "40:40:a2:87:6e:26"
            }
        }

        input = [
            'hostname="oldhostname"', 'check_quotas="NO"', 'ipv6_enable="YES"',
            'pf_enable="YES"', 'pflog_enable="YES"', 'sshd_enable="YES"',
            'ifconfig_re0="DHCP"',
            'ifconfig_rl0="10.0.1.1 netmask 255.255.255.0 up"',
            'ifconfig_rl0_alias0="10.0.1.2 netmask 255.255.255.255"',
            'dhcpd_enable="YES"', 'dhcpd_flags="-q"',
            'dhcpd_conf="/usr/local/etc/dhcpd.conf"', ''
        ]

        filedata = network._create_rcconf_file(StringIO('\n'.join(input)),
                                               interfaces, 'myhostname')

        generated = filedata.rstrip().split('\n')
        expected = [
            'check_quotas="NO"',
            'pf_enable="YES"',
            'pflog_enable="YES"',
            'sshd_enable="YES"',
            'dhcpd_enable="NO"',
            'hostname=myhostname',
            '# Label public',
            'ifconfig_xn0="10.127.31.38 netmask 255.255.255.0 up"',
            '# Label private',
            'ifconfig_xn1="192.168.2.30 netmask 255.255.224.0 up"',
            'route_lan0="-net 10.176.0.0 -netmask 255.248.0.0 10.177.96.1"',
            'route_lan1="-net 10.191.192.0 -netmask 255.255.192.0 ' \
                    '10.177.96.1"',
            'static_routes="lan0,lan1"',
            'defaultrouter="10.127.31.1"',
        ]
        self.assertSequenceEqual(generated, expected)
    def test_ipv4_2_aliases(self):
        """Test setting public IPv4 with an IP alias"""

        interfaces = {
            "xn0": {
                "ip4s": [{
                    "address": "10.127.31.38",
                    "netmask": "255.255.255.0"
                }, {
                    "address": "10.127.32.38",
                    "netmask": "255.255.255.0"
                }, {
                    "address": "10.127.32.39",
                    "netmask": "255.255.255.255"
                }],
                "ip6s": [],
                "routes": [],
                "mac":
                "40:40:8f:1e:a0:0a",
                "gateway4":
                "10.127.31.1",
                "dns": ["10.6.24.4", "10.6.24.5"]
            },
            "xn1": {
                "ip4s": [{
                    "address": "192.168.2.30",
                    "netmask": "255.255.224.0"
                }],
                "ip6s": [],
                "routes": [{
                    "network": "10.176.0.0",
                    "netmask": "255.248.0.0",
                    "gateway": "10.177.96.1"
                }, {
                    "network": "10.191.192.0",
                    "netmask": "255.255.192.0",
                    "gateway": "10.177.96.1"
                }],
                "mac":
                "40:40:a2:87:6e:26"
            }
        }

        inputdata = '\n'.join([
            'hostname="oldhostname"', 'check_quotas="NO"', 'ipv6_enable="YES"',
            'pf_enable="YES"', 'pflog_enable="YES"', 'sshd_enable="YES"',
            'ifconfig_re0="DHCP"',
            'ifconfig_rl0="10.0.1.1 netmask 255.255.255.0 up"',
            'ifconfig_rl0_alias0="10.0.1.2 netmask 255.255.255.255"',
            'dhcpd_enable="YES"', 'dhcpd_flags="-q"',
            'dhcpd_conf="/usr/local/etc/dhcpd.conf"', ''
        ])

        expecteddata = '\n'.join([
            'check_quotas="NO"',
            'pf_enable="YES"',
            'pflog_enable="YES"',
            'sshd_enable="YES"',
            'dhcpd_enable="NO"',
            'hostname=myhostname',
            'ifconfig_xn0="10.127.31.38 netmask 255.255.255.0 up"',
            'ifconfig_xn0_alias0="10.127.32.38 netmask 255.255.255.0"',
            'ifconfig_xn0_alias1="10.127.32.39 netmask 255.255.255.255"',
            'ifconfig_xn1="192.168.2.30 netmask 255.255.224.0 up"',
            'route_lan0="-net 10.176.0.0 -netmask 255.248.0.0 10.177.96.1"',
            'route_lan1="-net 10.191.192.0 -netmask 255.255.192.0 ' \
                    '10.177.96.1"',
            'static_routes="lan0,lan1"',
            'defaultrouter="10.127.31.1"',
            ''])

        filedata = network._create_rcconf_file(StringIO(inputdata), interfaces,
                                               'myhostname')

        self.assertEqual(filedata, expecteddata)
    def test_ipv4_2_aliases(self):
        """Test setting public IPv4 with an IP alias"""

        interfaces = {"xn0":{"label": "public",
                             "ip4s":[{"address":"10.127.31.38",
                                      "netmask":"255.255.255.0"},
                                     {"address":"10.127.32.38",
                                      "netmask":"255.255.255.0"},
                                     {"address":"10.127.32.39",
                                      "netmask":"255.255.255.255"}],
                             "ip6s":[],
                             "routes":[],
                             "mac":"40:40:8f:1e:a0:0a",
                             "gateway4":"10.127.31.1",
                             "dns":["10.6.24.4", "10.6.24.5"]},
                      "xn1":{"label": "private",
                             "ip4s":[{"address":"192.168.2.30",
                                      "netmask":"255.255.224.0"}],
                             "ip6s":[],
                             "routes":[{"network":"10.176.0.0",
                                        "netmask":"255.248.0.0",
                                        "gateway":"10.177.96.1"},
                                       {"network":"10.191.192.0",
                                        "netmask":"255.255.192.0",
                                        "gateway":"10.177.96.1"}],
                             "mac":"40:40:a2:87:6e:26"}}

        input = [
            'hostname="oldhostname"',
            'check_quotas="NO"',
            'ipv6_enable="YES"',
            'pf_enable="YES"',
            'pflog_enable="YES"',
            'sshd_enable="YES"',
            'ifconfig_re0="DHCP"',
            'ifconfig_rl0="10.0.1.1 netmask 255.255.255.0 up"',
            'ifconfig_rl0_alias0="10.0.1.2 netmask 255.255.255.255"',
            'dhcpd_enable="YES"',
            'dhcpd_flags="-q"',
            'dhcpd_conf="/usr/local/etc/dhcpd.conf"',
            ''
        ]

        filedata = network._create_rcconf_file(StringIO('\n'.join(input)),
                                               interfaces, 'myhostname')

        generated = filedata.rstrip().split('\n')
        expected = [
            'check_quotas="NO"',
            'pf_enable="YES"',
            'pflog_enable="YES"',
            'sshd_enable="YES"',
            'dhcpd_enable="NO"',
            'hostname=myhostname',
            '# Label public',
            'ifconfig_xn0="10.127.31.38 netmask 255.255.255.0 up"',
            'ifconfig_xn0_alias0="10.127.32.38 netmask 255.255.255.0"',
            'ifconfig_xn0_alias1="10.127.32.39 netmask 255.255.255.255"',
            '# Label private',
            'ifconfig_xn1="192.168.2.30 netmask 255.255.224.0 up"',
            'route_lan0="-net 10.176.0.0 -netmask 255.248.0.0 10.177.96.1"',
            'route_lan1="-net 10.191.192.0 -netmask 255.255.192.0 ' \
                    '10.177.96.1"',
            'static_routes="lan0 lan1"',
            'defaultrouter="10.127.31.1"',
        ]
        self.assertSequenceEqual(generated, expected)