test_bind.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
4
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
#!/usr/bin/env python2.5
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
"""
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
    Test bind_conf
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
"""
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
import bind_conf as bindc
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
import test_conf, addr
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
import unittest
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    10
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    11
class TestBINDConf (test_conf._TestConfBase) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    12
    def test_comment (self) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    13
        self.assert_obj(bindc.Comment("test comment 2"), [ "; test comment 2" ])
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    14
    
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
    def assert_str (self, label, value) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
        self.assertEqual(str(label), value)
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
    def test_label (self) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
        self.assert_str(bindc.Label("foo"), "foo")
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
    def test_origin (self) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
        self.assert_str(bindc.Origin(), "@")
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    23
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
    def test_fqdn (self) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
        self.assert_str(bindc.FQDN("foo.com"), "foo.com.")
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    26
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
    def test_interval (self) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
        self.assert_str(bindc.Interval(12), "12")
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
        self.assert_str(bindc.Interval(12, 1), "12s1m")
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
        self.assert_str(bindc.Interval(h=2, d=5), "2h5d")
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
    def assert_rec (self, obj, lines) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
            Does a whitespace-insensitive compare of the record's formatted output and the given lines
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
        """
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
        for obj_line, line in zip(obj.fmt_lines(), lines) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
            obj_line = ' '.join(obj_line.split())
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
            self.assertEqual(obj_line, line)
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    40
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    41
    def test_record (self) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    42
        self.assert_rec(bindc.ResourceRecord(None, 'A', addr.IP("1.2.3.4"), cls='TST', ttl=60), [ "60 TST A 1.2.3.4" ])
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    43
        self.assert_rec(bindc.ResourceRecord('foo', 'CNAME', 'blaa'), [ "foo IN CNAME blaa" ])
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
        self.assert_rec(bindc.ResourceRecord('bar', 'CNAME', bindc.FQDN('example.com')), [ "bar IN CNAME example.com." ])
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    45
        
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    46
    def test_record_types (self) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47
        self.assert_rec(bindc.SOA(None, 'ns1', 'hostmaster', '2009040200', bindc.Interval(1), 2, 3, 4), [
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48
                "IN SOA ns1 hostmaster ( 2009040200 1 2 3 4 )"
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
            ])
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    50
        self.assert_rec(bindc.A('foo', addr.IP("1.2.3.4")), [ "foo IN A 1.2.3.4" ])
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    51
        self.assert_rec(bindc.AAAA('foo2', addr.IP("2001::5")), [ "foo2 IN AAAA 2001::5" ])
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    52
        self.assert_rec(bindc.CNAME('foo3', bindc.FQDN("foo.com")), [ "foo3 IN CNAME foo.com." ])
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    53
        self.assert_rec(bindc.TXT('test4', "this is some text"), [ "test4 IN TXT \"this is some text\"" ])
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    54
        self.assert_rec(bindc.MX(None, 10, "foo"), [ "IN MX 10 foo" ])
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    55
        self.assert_rec(bindc.NS(None, "ns2"), [ "IN NS ns2" ])
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    56
        self.assert_rec(bindc.PTR(addr.IP("1.2.3.4"), 'bar'), [ "4.3.2.1.in-addr.arpa. IN PTR bar" ])
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    57
    
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    58
    def test_directive (self) :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    59
        self.assert_obj(bindc.Directive("TEST", "a", None, 2, comments=["hmm..."]), [
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    60
                "; hmm...",
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    61
                "$TEST a 2"
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    62
            ])
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    63
        self.assert_obj(bindc.OriginDirective(bindc.FQDN("foo.com")), [ "$ORIGIN foo.com." ])
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    64
        self.assert_obj(bindc.TTLDirective(bindc.Interval(h=2)), [ "$TTL 2h" ])
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    65
        self.assert_obj(bindc.IncludeDirective("db.foo.com"), [ "$INCLUDE db.foo.com" ])
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    66
        self.assert_obj(bindc.GenerateDirective((1, 10), "dyn${0,2}", 'A', "1.2.3.$"), [ "$GENERATE 1-10 dyn${0,2} A 1.2.3.$" ])
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    67
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    68
if __name__ == '__main__' :
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    69
    unittest.main()
8b633782f02d write bind_conf.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    70