test_dhcp.py
author Tero Marttila <terom@fixme.fi>
Sun, 12 Jul 2009 00:43:36 +0300
changeset 6 57e8168ba8c4
parent 4 8b633782f02d
permissions -rwxr-xr-x
use FQDN for zone hosts
#!/usr/bin/env python2.5
"""
    Test dhcp_conf
"""

import dhcp_conf as dhcpc
import test_conf, dhcp, addr

import unittest

class TestDHCPConf (test_conf._TestConfBase) :
    def assert_stmt (self, stmt, line) :
        """
            Formats the given Statement, and compares the output against the given line.

            Note that the dhcpc.Statement doesn't have a working fmt_lines implementation.
        """
        
        self.assertEqual(stmt._fmt_data(), line)
    
    def test_comment (self) :
        self.assert_obj(dhcpc.Comment("foo bar"),                           [ "# foo bar" ])

    def test_section (self) :
        self.assert_obj(dhcpc.Section(comment="test"),                      [ "# test" ])

        self.assert_obj(dhcpc.Section(params=[
                dhcpc.Parameter("param0"), None
            ], comment="foo"), [
                "# foo",
                "param0;",
            ])

    def test_statement (self) :
        self.assert_stmt(dhcpc.Statement("stmt0"),                           "stmt0")
        self.assert_stmt(dhcpc.Statement("stmt1", [ "this", "that" ]),       "stmt1 this, that")
        self.assert_stmt(dhcpc.Statement("stmt2", dhcpc.Literal("...")),     "stmt2 ...")
        self.assert_stmt(dhcpc.Statement("stmt3", u"quux"),                  "stmt3 quux")
        self.assert_stmt(dhcpc.Statement("stmt4", "bar"),                    "stmt4 bar")
        self.assert_stmt(dhcpc.Statement("stmt5", 1),                        "stmt5 1")
        self.assert_stmt(dhcpc.Statement("stmt6", 1, None, 2),               "stmt6 1 2")
   
    def test_literal (self) :
        self.assert_obj(dhcpc.Literal("///"),                               [ "///" ])

    def test_parameter (self) :
        self.assert_obj(dhcpc.Parameter("param0", "this", 13, "that"),      [ "param0 this 13 that;" ])
        self.assert_obj(dhcpc.Parameter("param1", comment="testing"),       [ "# testing", "param1;" ])
    
    def test_declaration (self) :
        self.assert_obj(dhcpc.Declaration("decl0", ["arg0", "arg1"], [
            dhcpc.Parameter("param0"),
            None
        ], [
            dhcpc.Declaration("decl0.0", params=[
                dhcpc.Parameter("param0.0.1", "value")
            ])
        ], comment="foo"),  [
            "# foo",
            "decl0 arg0 arg1 {",
            "\tparam0;",
            "\tdecl0.0 {",
            "\t\tparam0.0.1 value;",
            "\t}",
            "}",
        ])
    
    def test_shared_network (self) :
        self.assert_obj(dhcpc.SharedNetwork("net0", params=[
            dhcpc.Parameter("param0")
        ]), [
            "shared-network net0 {",
            "\tparam0;",
            "}"
        ])

    def test_subnet (self) :
        self.assert_obj(dhcpc.Subnet(addr.Network("194.197.235.0/24"), params=[
            dhcpc.Parameter("param0")
        ]), [
            "subnet 194.197.235.0 netmask 255.255.255.0 {",
            "\tparam0;",
            "}"
        ])

    def test_group (self) :
        self.assert_obj(dhcpc.Group(decls=[
            dhcpc.Declaration("decl0.0", params=[
                dhcpc.Parameter("param0.0.1", "value")
            ])
        ]), [
            "group {",
            "\tdecl0.0 {",
            "\t\tparam0.0.1 value;",
            "\t}",
            "}"
        ])
    
    def test_host (self) :
        self.assert_obj(dhcpc.Host("test-hostname", params=[
            dhcpc.Parameter("param0")
        ]), [
            "host test-hostname {",
            "\tparam0;",
            "}"
        ])

    def test_option (self) :
        self.assert_obj(dhcpc.Option("foo", "example.com"), [
            "option foo example.com;",
        ])
    
class TestDHCP (_TestConfObj) :
    def test_host (self) :
        self.assert_obj(dhcp.Host("testhost", addr.MAC("12:34:56:78:90:ab"), addr.IP("1.2.3.4"), comment="foo"), [
                "# foo",
                "host testhost {",
                "\thardware ethernet 12:34:56:78:90:ab;",
                "\tfixed-address 1.2.3.4;",
                "}"
            ])

    def test_subnet (self) :
        self.assert_obj(dhcp.Subnet(addr.Network("1.2.3.0/24"), comment="bar"), [
                "# bar",
                "subnet 1.2.3.0 netmask 255.255.255.0 {",
                "\toption routers 1.2.3.1;",
                "}"
            ])

        self.assert_obj(dhcp.Subnet(addr.Network("1.2.3.0/24"), router_idx=10, range=(20, 30), unknown_clients='allow'), [
                "subnet 1.2.3.0 netmask 255.255.255.0 {",
                "\toption routers 1.2.3.10;",
                "\trange 1.2.3.20 1.2.3.30;",
                "\tallow unknown-clients;",
                "}"
            ])
    
    def test_config (self) :
        self.assert_obj(dhcp.Config(
                settings        = { 'foo-setting': 'someval' }, 
                options         = { 'bar-opt': ['one', 'two'] },
                shared_network  = "FOO-NET",
                subnets         = [
                        dhcp.Subnet(addr.Network("1.2.3.0/24"))
                    ],
                hosts           = [
                        dhcp.Host("testhost", addr.MAC("12:34:56:78:90:ab"), addr.IP("1.2.3.4"))
                    ],
            ), [
                "foo-setting someval;",
                "option bar-opt one, two;",
                "shared-network FOO-NET {",
                "\tsubnet 1.2.3.0 netmask 255.255.255.0 {",
                "\t\toption routers 1.2.3.1;",
                "\t}",
                "}",
                "host testhost {",
                "\thardware ethernet 12:34:56:78:90:ab;",
                "\tfixed-address 1.2.3.4;",
                "}"
            ])

if __name__ == '__main__' :
    unittest.main()