diff options
Diffstat (limited to 'tests/test_generate.py')
-rw-r--r-- | tests/test_generate.py | 499 |
1 files changed, 499 insertions, 0 deletions
diff --git a/tests/test_generate.py b/tests/test_generate.py new file mode 100644 index 0000000..43c5f9a --- /dev/null +++ b/tests/test_generate.py @@ -0,0 +1,499 @@ +# Copyright (C) 2003-2007, 2009-2011 Nominum, Inc. +# +# Permission to use, copy, modify, and distribute this software and its +# documentation for any purpose with or without fee is hereby granted, +# provided that the above copyright notice and this permission notice +# appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND NOMINUM DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NOMINUM BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +import sys +sys.path.insert(0, '../') # Force the local project to be *the* dns + +import cStringIO +import filecmp +import os +import unittest + +import dns.exception +import dns.rdata +import dns.rdataclass +import dns.rdatatype +import dns.rrset +import dns.zone + +import pprint + +pp = pprint.PrettyPrinter(indent=2) + +import pdb +example_text = """$TTL 1h +$ORIGIN 0.0.192.IN-ADDR.ARPA. +$GENERATE 1-2 0 CNAME SERVER$.EXAMPLE. +""" + +example_text1 = """$TTL 1h +$ORIGIN 0.0.192.IN-ADDR.ARPA. +$GENERATE 1-10 fooo$ CNAME $.0 +""" + +example_text2 = """$TTL 1h +@ 3600 IN SOA foo bar 1 2 3 4 5 +@ 3600 IN NS ns1 +@ 3600 IN NS ns2 +bar.foo 300 IN MX 0 blaz.foo +ns1 3600 IN A 10.0.0.1 +ns2 3600 IN A 10.0.0.2 +$GENERATE 3-5 foo$ A 10.0.0.$ +""" + +example_text3 = """$TTL 1h +@ 3600 IN SOA foo bar 1 2 3 4 5 +@ 3600 IN NS ns1 +@ 3600 IN NS ns2 +bar.foo 300 IN MX 0 blaz.foo +ns1 3600 IN A 10.0.0.1 +ns2 3600 IN A 10.0.0.2 +$GENERATE 4-8/2 foo$ A 10.0.0.$ +""" + +example_text4 = """$TTL 1h +@ 3600 IN SOA foo bar 1 2 3 4 5 +@ 3600 IN NS ns1 +@ 3600 IN NS ns2 +bar.foo 300 IN MX 0 blaz.foo +ns1 3600 IN A 10.0.0.1 +ns2 3600 IN A 10.0.0.2 +$GENERATE 11-13 wp-db${-10,2,d}.services.mozilla.com 0 CNAME SERVER.FOOBAR. +""" + +example_text5 = """$TTL 1h +@ 3600 IN SOA foo bar 1 2 3 4 5 +@ 3600 IN NS ns1 +@ 3600 IN NS ns2 +bar.foo 300 IN MX 0 blaz.foo +ns1 3600 IN A 10.0.0.1 +ns2 3600 IN A 10.0.0.2 +$GENERATE 11-13 wp-db${10,2,d}.services.mozilla.com 0 CNAME SERVER.FOOBAR. +""" + +example_text6 = """$TTL 1h +@ 3600 IN SOA foo bar 1 2 3 4 5 +@ 3600 IN NS ns1 +@ 3600 IN NS ns2 +bar.foo 300 IN MX 0 blaz.foo +ns1 3600 IN A 10.0.0.1 +ns2 3600 IN A 10.0.0.2 +$GENERATE 11-13 wp-db${+10,2,d}.services.mozilla.com 0 CNAME SERVER.FOOBAR. +""" + +example_text7 = """$TTL 1h +@ 3600 IN SOA foo bar 1 2 3 4 5 +@ 3600 IN NS ns1 +@ 3600 IN NS ns2 +bar.foo 300 IN MX 0 blaz.foo +ns1 3600 IN A 10.0.0.1 +ns2 3600 IN A 10.0.0.2 +$GENERATE 11-13 sync${-10}.db IN A 10.10.16.0 +""" + +example_text8 = """$TTL 1h +@ 3600 IN SOA foo bar 1 2 3 4 5 +@ 3600 IN NS ns1 +@ 3600 IN NS ns2 +bar.foo 300 IN MX 0 blaz.foo +ns1 3600 IN A 10.0.0.1 +ns2 3600 IN A 10.0.0.2 +$GENERATE 11-12 wp-db${-10,2,d} IN A 10.10.16.0 +""" + +example_text9 = """$TTL 1h +@ 3600 IN SOA foo bar 1 2 3 4 5 +@ 3600 IN NS ns1 +@ 3600 IN NS ns2 +bar.foo 300 IN MX 0 blaz.foo +ns1 3600 IN A 10.0.0.1 +ns2 3600 IN A 10.0.0.2 +$GENERATE 11-12 wp-db${-10,2,d} IN A 10.10.16.0 +$GENERATE 11-13 sync${-10}.db IN A 10.10.16.0 +""" +example_text10 = """$TTL 1h +@ 3600 IN SOA foo bar 1 2 3 4 5 +@ 3600 IN NS ns1 +@ 3600 IN NS ns2 +bar.foo 300 IN MX 0 blaz.foo +ns1 3600 IN A 10.0.0.1 +ns2 3600 IN A 10.0.0.2 +$GENERATE 27-28 $.2 PTR zlb${-26}.oob +""" + + +class GenerateTestCase(unittest.TestCase): + + def testFromText(self): + def bad(): + z = dns.zone.from_text(example_text, 'example.', relativize=True) + self.failUnlessRaises(dns.zone.NoSOA, bad) + + def testFromText1(self): + def bad(): + z = dns.zone.from_text(example_text1, 'example.', relativize=True) + self.failUnlessRaises(dns.zone.NoSOA, bad) + + def testIterateAllRdatas2(self): + z = dns.zone.from_text(example_text2, 'example.', relativize=True) + l = list(z.iterate_rdatas()) + l.sort() + exl = [(dns.name.from_text('@', None), + 3600, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.NS, + 'ns1')), + (dns.name.from_text('@', None), + 3600, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.NS, + 'ns2')), + (dns.name.from_text('@', None), + 3600, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.SOA, + 'foo bar 1 2 3 4 5')), + (dns.name.from_text('bar.foo', None), + 300, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.MX, + '0 blaz.foo')), + (dns.name.from_text('ns1', None), + 3600, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, + '10.0.0.1')), + (dns.name.from_text('ns2', None), + 3600, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, + '10.0.0.2')), + (dns.name.from_text('foo3', None), + 3600, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, + '10.0.0.3')), + (dns.name.from_text('foo4', None), + 3600, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, + '10.0.0.4')), + (dns.name.from_text('foo5', None), + 3600, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, + '10.0.0.5'))] + + exl.sort() + self.failUnless(l == exl) + + def testIterateAllRdatas3(self): + z = dns.zone.from_text(example_text3, 'example.', relativize=True) + l = list(z.iterate_rdatas()) + l.sort() + exl = [(dns.name.from_text('@', None), + 3600, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.NS, + 'ns1')), + (dns.name.from_text('@', None), + 3600, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.NS, + 'ns2')), + (dns.name.from_text('@', None), + 3600, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.SOA, + 'foo bar 1 2 3 4 5')), + (dns.name.from_text('bar.foo', None), + 300, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.MX, + '0 blaz.foo')), + (dns.name.from_text('ns1', None), + 3600, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, + '10.0.0.1')), + (dns.name.from_text('ns2', None), + 3600, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, + '10.0.0.2')), + (dns.name.from_text('foo4', None), 3600, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, + '10.0.0.4')), + (dns.name.from_text('foo6', None), 3600, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, + '10.0.0.6')), + (dns.name.from_text('foo8', None), 3600, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, + '10.0.0.8'))] + exl.sort() + self.failUnless(l == exl) + def testGenerate1(self): + z = dns.zone.from_text(example_text4, 'example.', relativize=True) + l = list(z.iterate_rdatas()) + l.sort() + exl = [(dns.name.from_text('@', None), + 3600L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.NS, + 'ns1')), + (dns.name.from_text('@', None), + 3600L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.NS, + 'ns2')), + (dns.name.from_text('@', None), + 3600L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.SOA, + 'foo bar 1 2 3 4 5')), + (dns.name.from_text('bar.foo', None), + 300L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.MX, + '0 blaz.foo')), + (dns.name.from_text('ns1', None), + 3600L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, + '10.0.0.1')), + (dns.name.from_text('ns2', None), + 3600L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, + '10.0.0.2')), + + (dns.name.from_text('wp-db01.services.mozilla.com', None), + 0L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.CNAME, + 'SERVER.FOOBAR.')), + + (dns.name.from_text('wp-db02.services.mozilla.com', None), + 0L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.CNAME, + 'SERVER.FOOBAR.')), + + (dns.name.from_text('wp-db03.services.mozilla.com', None), + 0L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.CNAME, + 'SERVER.FOOBAR.'))] + exl.sort() + self.failUnless(l == exl) + + def testGenerate2(self): + z = dns.zone.from_text(example_text5, 'example.', relativize=True) + l = list(z.iterate_rdatas()) + l.sort() + exl = [(dns.name.from_text('@', None), + 3600L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.NS, + 'ns1')), + (dns.name.from_text('@', None), + 3600L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.NS, + 'ns2')), + (dns.name.from_text('@', None), + 3600L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.SOA, + 'foo bar 1 2 3 4 5')), + (dns.name.from_text('bar.foo', None), + 300L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.MX, + '0 blaz.foo')), + (dns.name.from_text('ns1', None), + 3600L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, + '10.0.0.1')), + (dns.name.from_text('ns2', None), + 3600L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, + '10.0.0.2')), + + (dns.name.from_text('wp-db21.services.mozilla.com', None), 0L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.CNAME, + 'SERVER.FOOBAR.')), + + (dns.name.from_text('wp-db22.services.mozilla.com', None), 0L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.CNAME, + 'SERVER.FOOBAR.')), + + (dns.name.from_text('wp-db23.services.mozilla.com', None), 0L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.CNAME, + 'SERVER.FOOBAR.'))] + exl.sort() + self.failUnless(l == exl) + + def testGenerate3(self): + z = dns.zone.from_text(example_text6, 'example.', relativize=True) + l = list(z.iterate_rdatas()) + l.sort() + + exl = [(dns.name.from_text('@', None), + 3600L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.NS, + 'ns1')), + (dns.name.from_text('@', None), + 3600L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.NS, + 'ns2')), + (dns.name.from_text('@', None), + 3600L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.SOA, + 'foo bar 1 2 3 4 5')), + (dns.name.from_text('bar.foo', None), + 300L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.MX, + '0 blaz.foo')), + (dns.name.from_text('ns1', None), + 3600L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, + '10.0.0.1')), + (dns.name.from_text('ns2', None), + 3600L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, + '10.0.0.2')), + (dns.name.from_text('wp-db21.services.mozilla.com', None), 0L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.CNAME, + 'SERVER.FOOBAR.')), + + (dns.name.from_text('wp-db22.services.mozilla.com', None), 0L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.CNAME, + 'SERVER.FOOBAR.')), + + (dns.name.from_text('wp-db23.services.mozilla.com', None), 0L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.CNAME, + 'SERVER.FOOBAR.'))] + exl.sort() + self.failUnless(l == exl) + + def testGenerate4(self): + z = dns.zone.from_text(example_text7, 'example.', relativize=True) + l = list(z.iterate_rdatas()) + l.sort() + exl = [(dns.name.from_text('@', None), + 3600L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.NS, + 'ns1')), + (dns.name.from_text('@', None), + 3600L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.NS, + 'ns2')), + (dns.name.from_text('@', None), + 3600L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.SOA, + 'foo bar 1 2 3 4 5')), + (dns.name.from_text('bar.foo', None), + 300L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.MX, + '0 blaz.foo')), + (dns.name.from_text('ns1', None), + 3600L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, + '10.0.0.1')), + (dns.name.from_text('ns2', None), + 3600L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, + '10.0.0.2')), + + (dns.name.from_text('sync1.db', None), 3600L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, + '10.10.16.0')), + + (dns.name.from_text('sync2.db', None), 3600L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, + '10.10.16.0')), + + (dns.name.from_text('sync3.db', None), 3600L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, + '10.10.16.0'))] + exl.sort() + self.failUnless(l == exl) + + def testGenerate6(self): + z = dns.zone.from_text(example_text9, 'example.', relativize=True) + l = list(z.iterate_rdatas()) + l.sort() + exl = [(dns.name.from_text('@', None), + 3600L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.NS, + 'ns1')), + (dns.name.from_text('@', None), + 3600L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.NS, + 'ns2')), + (dns.name.from_text('@', None), + 3600L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.SOA, + 'foo bar 1 2 3 4 5')), + (dns.name.from_text('bar.foo', None), + 300L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.MX, + '0 blaz.foo')), + (dns.name.from_text('ns1', None), + 3600L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, + '10.0.0.1')), + (dns.name.from_text('ns2', None), + 3600L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, + '10.0.0.2')), + + (dns.name.from_text('wp-db01', None), 3600L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, + '10.10.16.0')), + (dns.name.from_text('wp-db02', None), 3600L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, + '10.10.16.0')), + + (dns.name.from_text('sync1.db', None), 3600L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, + '10.10.16.0')), + + (dns.name.from_text('sync2.db', None), 3600L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, + '10.10.16.0')), + + (dns.name.from_text('sync3.db', None), 3600L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, + '10.10.16.0'))] + exl.sort() + self.failUnless(l == exl) + + def testGenerate7(self): + z = dns.zone.from_text(example_text10, 'example.', relativize=True) + l = list(z.iterate_rdatas()) + l.sort() + exl = [(dns.name.from_text('@', None), + 3600L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.NS, + 'ns1')), + (dns.name.from_text('@', None), + 3600L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.NS, + 'ns2')), + (dns.name.from_text('@', None), + 3600L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.SOA, + 'foo bar 1 2 3 4 5')), + (dns.name.from_text('bar.foo', None), + 300L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.MX, + '0 blaz.foo')), + (dns.name.from_text('ns1', None), + 3600L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, + '10.0.0.1')), + (dns.name.from_text('ns2', None), + 3600L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, + '10.0.0.2')), + + (dns.name.from_text('27.2', None), 3600L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.PTR, + 'zlb1.oob')), + + (dns.name.from_text('28.2', None), 3600L, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.PTR, + 'zlb2.oob'))] + + exl.sort() + self.failUnless(l == exl) + + +if __name__ == '__main__': + unittest.main() |