terom@4: #!/usr/bin/env python2.5 terom@4: """ terom@4: Test bind_conf terom@4: """ terom@4: terom@4: import bind_conf as bindc terom@4: import test_conf, addr terom@4: terom@4: import unittest terom@4: terom@4: class TestBINDConf (test_conf._TestConfBase) : terom@4: def test_comment (self) : terom@4: self.assert_obj(bindc.Comment("test comment 2"), [ "; test comment 2" ]) terom@4: terom@4: def assert_str (self, label, value) : terom@4: self.assertEqual(str(label), value) terom@4: terom@4: def test_label (self) : terom@4: self.assert_str(bindc.Label("foo"), "foo") terom@4: terom@4: def test_origin (self) : terom@4: self.assert_str(bindc.Origin(), "@") terom@4: terom@4: def test_fqdn (self) : terom@4: self.assert_str(bindc.FQDN("foo.com"), "foo.com.") terom@4: terom@4: def test_interval (self) : terom@4: self.assert_str(bindc.Interval(12), "12") terom@4: self.assert_str(bindc.Interval(12, 1), "12s1m") terom@4: self.assert_str(bindc.Interval(h=2, d=5), "2h5d") terom@4: terom@4: def assert_rec (self, obj, lines) : terom@4: """ terom@4: Does a whitespace-insensitive compare of the record's formatted output and the given lines terom@4: """ terom@4: terom@4: for obj_line, line in zip(obj.fmt_lines(), lines) : terom@4: obj_line = ' '.join(obj_line.split()) terom@4: self.assertEqual(obj_line, line) terom@4: terom@4: def test_record (self) : terom@4: self.assert_rec(bindc.ResourceRecord(None, 'A', addr.IP("1.2.3.4"), cls='TST', ttl=60), [ "60 TST A 1.2.3.4" ]) terom@4: self.assert_rec(bindc.ResourceRecord('foo', 'CNAME', 'blaa'), [ "foo IN CNAME blaa" ]) terom@4: self.assert_rec(bindc.ResourceRecord('bar', 'CNAME', bindc.FQDN('example.com')), [ "bar IN CNAME example.com." ]) terom@4: terom@4: def test_record_types (self) : terom@4: self.assert_rec(bindc.SOA(None, 'ns1', 'hostmaster', '2009040200', bindc.Interval(1), 2, 3, 4), [ terom@4: "IN SOA ns1 hostmaster ( 2009040200 1 2 3 4 )" terom@4: ]) terom@4: self.assert_rec(bindc.A('foo', addr.IP("1.2.3.4")), [ "foo IN A 1.2.3.4" ]) terom@4: self.assert_rec(bindc.AAAA('foo2', addr.IP("2001::5")), [ "foo2 IN AAAA 2001::5" ]) terom@4: self.assert_rec(bindc.CNAME('foo3', bindc.FQDN("foo.com")), [ "foo3 IN CNAME foo.com." ]) terom@4: self.assert_rec(bindc.TXT('test4', "this is some text"), [ "test4 IN TXT \"this is some text\"" ]) terom@4: self.assert_rec(bindc.MX(None, 10, "foo"), [ "IN MX 10 foo" ]) terom@4: self.assert_rec(bindc.NS(None, "ns2"), [ "IN NS ns2" ]) terom@4: self.assert_rec(bindc.PTR(addr.IP("1.2.3.4"), 'bar'), [ "4.3.2.1.in-addr.arpa. IN PTR bar" ]) terom@4: terom@4: def test_directive (self) : terom@4: self.assert_obj(bindc.Directive("TEST", "a", None, 2, comments=["hmm..."]), [ terom@4: "; hmm...", terom@4: "$TEST a 2" terom@4: ]) terom@4: self.assert_obj(bindc.OriginDirective(bindc.FQDN("foo.com")), [ "$ORIGIN foo.com." ]) terom@4: self.assert_obj(bindc.TTLDirective(bindc.Interval(h=2)), [ "$TTL 2h" ]) terom@4: self.assert_obj(bindc.IncludeDirective("db.foo.com"), [ "$INCLUDE db.foo.com" ]) terom@4: self.assert_obj(bindc.GenerateDirective((1, 10), "dyn${0,2}", 'A', "1.2.3.$"), [ "$GENERATE 1-10 dyn${0,2} A 1.2.3.$" ]) terom@4: terom@4: if __name__ == '__main__' : terom@4: unittest.main() terom@4: