pvl/dns/tests.py
author Tero Marttila <tero.marttila@aalto.fi>
Tue, 03 Mar 2015 12:14:22 +0200
changeset 716 4fecd0d1cf23
parent 648 8e3e6be9ac70
permissions -rw-r--r--
pvl.dns.process: merge --include-trace into pvl.dns-process, replacing pvl.dns-includes
639
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     1
import itertools
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     2
import re
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     3
import unittest
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     4
641
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents: 639
diff changeset
     5
from pvl.dns import zone, process
639
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     6
from StringIO import StringIO
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     7
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     8
class File(StringIO):
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     9
    @classmethod
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    10
    def lines (cls, *lines):
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    11
        return cls('\n'.join(lines) + '\n')
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    12
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    13
    def __init__(self, buffer, name='test.file'):
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    14
        StringIO.__init__(self, buffer)
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    15
        self.name = name
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    16
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    17
class TestMixin(object):
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    18
    def assertEqualWhitespace(self, value, expected):
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    19
        # normalize
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    20
        value = re.sub(r'\s+', ' ', value)
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    21
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    22
        self.assertEqual(value, expected)
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    23
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    24
    def assertZoneLineEqual(self, zl, expected):
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    25
        self.assertEqual(unicode(zl), expected)
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    26
    
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    27
    def assertZoneLinesEqual(self, zls, expected):
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    28
        for zl, expect in itertools.izip_longest(zls, expected):
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    29
            self.assertZoneLineEqual(zl, expect)
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    30
641
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents: 639
diff changeset
    31
    def assertZoneItemEqual(self, zr, expect):
639
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    32
        self.assertEqualWhitespace(unicode(zr), expect)
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    33
641
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents: 639
diff changeset
    34
    def assertZoneEqual(self, zrs, expected):
639
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    35
        for zr, expect in itertools.izip_longest(zrs, expected):
641
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents: 639
diff changeset
    36
            self.assertZoneItemEqual(zr, expect)
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents: 639
diff changeset
    37
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents: 639
diff changeset
    38
    assertZoneRecordEqual = assertZoneItemEqual
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents: 639
diff changeset
    39
    assertZoneRecordsEqual = assertZoneEqual
639
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    40
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    41
class ZoneLineTest(TestMixin, unittest.TestCase):
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    42
    def testZoneLine(self):
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    43
        self.assertEqual(unicode(zone.ZoneLine(['foo', 'A', '192.0.2.1'])), "foo\tA\t192.0.2.1")
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    44
    
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    45
    def testZoneLineParse(self):
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    46
        self.assertZoneLinesEqual(zone.ZoneLine.parse(File("foo A 192.0.2.1")), ["foo\tA\t192.0.2.1"])
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    47
    
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    48
    def testZoneLineParseWhitespace(self):
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    49
        self.assertZoneLinesEqual(zone.ZoneLine.parse(File("foo \t A\t192.0.2.1")), ["foo\tA\t192.0.2.1"])
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    50
    
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    51
    def testZoneLineParseComment(self):
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    52
        self.assertZoneLinesEqual(zone.ZoneLine.parse(File("foo A 192.0.2.1   ;   bar")), ["foo\tA\t192.0.2.1\t; bar"])
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    53
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    54
    def testZoneLineParseQuoteSimple(self):
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    55
        self.assertZoneLinesEqual(zone.ZoneLine.parse(File("foo TXT \"asdf quux\"")), ["foo\tTXT\tasdf quux"])
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    56
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    57
    def testZoneLineParseQuoteTrailing(self):
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    58
        self.assertZoneLinesEqual(zone.ZoneLine.parse(File("foo TXT \"asdf quux\" ok ; yay")), ["foo\tTXT\tasdf quux\tok\t; yay"])
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    59
    
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    60
    def testZoneLineParseIndent(self):
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    61
        self.assertZoneLinesEqual(zone.ZoneLine.parse(File(" A 192.0.2.2")), ["\tA\t192.0.2.2"])
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    62
    
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    63
    def testZoneLineParseMultilineSingle(self):
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    64
        self.assertZoneLinesEqual(zone.ZoneLine.parse(File("@ SOA ( 1 2 3 4 5 )")), ["@\tSOA\t1\t2\t3\t4\t5"])
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    65
    
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    66
    def testZoneLineParseMultiline(self):
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    67
        self.assertZoneLinesEqual(zone.ZoneLine.parse(File.lines("@ SOA (", "\t1\t", "2", "\t3\t\t4", "\t5 )")), ["@\tSOA\t1\t2\t3\t4\t5"])
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    68
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    69
    def testZoneLineLoad(self):
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    70
        self.assertZoneRecordsEqual(
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    71
            zone.ZoneLine.load(File.lines(
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    72
                "$TTL 3600",
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    73
                " ",
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    74
                "@ NS ns1",
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    75
                "  NS ns2",
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    76
                "$ORIGIN asdf", # note lack of .
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    77
                "foo A 192.0.2.1",
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    78
                "$ORIGIN quux.test.", # note lack of .
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    79
                "bar A 192.0.2.2",
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    80
            )), [
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    81
                "$TTL 3600",
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    82
                "@ NS ns1",
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    83
                " NS ns2",
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    84
                "$ORIGIN asdf",
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    85
                "foo A 192.0.2.1",
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    86
                "$ORIGIN quux.test.",
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    87
                "bar A 192.0.2.2",
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    88
            ]
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    89
        )
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    90
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    91
class ZoneDirectiveTest(TestMixin, unittest.TestCase):
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    92
    def testZoneDirective(self):
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    93
        self.assertEqual(unicode(zone.ZoneDirective('ORIGIN', ['foo.'])), "$ORIGIN\tfoo.")
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    94
    
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    95
    def testZoneDirectiveBuild(self):
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    96
        self.assertEqual(unicode(zone.ZoneDirective.build('ORIGIN', 'foo.')), "$ORIGIN\tfoo.")
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    97
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    98
    def testZoneDirectiveParse(self):
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    99
        self.assertEqual(unicode(zone.ZoneDirective.parse(['$ORIGIN', 'foo.'])), "$ORIGIN\tfoo.")
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   100
    
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   101
    def testZoneDirectiveParseUpper(self):
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   102
        self.assertEqual(unicode(zone.ZoneDirective.parse(['$include', 'foo.zone'])), "$INCLUDE\tfoo.zone")
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   103
    
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   104
    def testZoneDirectiveComment(self):
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   105
        self.assertEqual(unicode(zone.ZoneDirective('ORIGIN', ['foo.'], comment="bar")), "$ORIGIN\tfoo.\t; bar")
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   106
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   107
class ZoneRecordTest(TestMixin, unittest.TestCase):
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   108
    def testZoneRecordShort(self):
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   109
        rr = zone.ZoneRecord('test', None, None, 'A', ['192.0.2.1'])
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   110
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   111
        self.assertZoneRecordEqual((rr), 'test A 192.0.2.1')
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   112
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   113
    def testZoneRecordImplicit(self):
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   114
        rr = zone.ZoneRecord(None, None, None, 'A', ['192.0.2.1'])
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   115
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   116
        self.assertZoneRecordEqual((rr), ' A 192.0.2.1')
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   117
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   118
    def testZoneRecordFull(self):
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   119
        rr = zone.ZoneRecord('test', 60, 'IN', 'A', ['192.0.2.1'])
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   120
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   121
        self.assertZoneRecordEqual((rr), 'test 60 IN A 192.0.2.1')
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   122
 
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   123
    def testZoneRecordComment(self):
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   124
        rr = zone.ZoneRecord('test', None, None, 'A', ['192.0.2.1'], comment='Testing')
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   125
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   126
        self.assertZoneRecordEqual((rr), 'test A 192.0.2.1 ; Testing')
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   127
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   128
    def testZoneRecordA(self):
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   129
        self.assertZoneRecordEqual((zone.ZoneRecord.A('test', '192.0.2.1')), "test A 192.0.2.1")
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   130
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   131
    def testZoneRecordAAAA(self):
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   132
        self.assertZoneRecordEqual((zone.ZoneRecord.AAAA('test', '2001:db8::c000:201')), "test AAAA 2001:db8::c000:201")
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   133
    
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   134
    def testZoneRecordCNAME(self):
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   135
        self.assertZoneRecordEqual((zone.ZoneRecord.CNAME('test', 'test.example.net.')), "test CNAME test.example.net.")
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   136
    
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   137
    def testZoneRecordTXT(self):
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   138
        self.assertZoneRecordEqual((zone.ZoneRecord.TXT('test', u"Foo Bar")), u"test TXT \"Foo Bar\"")
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   139
    
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   140
    def testZoneRecordPTR(self):
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   141
        self.assertZoneRecordEqual(zone.ZoneRecord.PTR('1', 'test.example.com.'), "1 PTR test.example.com.")
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   142
    
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   143
    def testZoneRecordMX(self):
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   144
        self.assertZoneRecordEqual(zone.ZoneRecord.MX('@', 10, 'mail1'), "@ MX 10 mail1")
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   145
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   146
    def testZoneRecordBuildTTL(self):
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   147
        self.assertZoneRecordEqual(zone.ZoneRecord.A('test', '192.0.2.1', ttl=60), "test 60 A 192.0.2.1")
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   148
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   149
    def testZoneRecordBuildZeroTTL(self):
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   150
        self.assertZoneRecordEqual(zone.ZoneRecord.A('test', '192.0.2.1', ttl=0), "test 0 A 192.0.2.1")
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   151
    
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   152
    def testZoneRecordBuildImplicit(self):
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   153
        self.assertZoneRecordEqual(zone.ZoneRecord.A(None, '192.0.2.1'), " A 192.0.2.1")
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   154
    
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   155
    def testZoneRecordBuildCls(self):
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   156
        self.assertZoneRecordEqual(zone.ZoneRecord.A('foo', '192.0.2.1', cls='in'), "foo IN A 192.0.2.1")
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   157
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   158
    def testZoneRecordParse(self):
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   159
        self.assertZoneRecordEqual(zone.ZoneRecord.parse(['test', 'A', '192.0.2.1']), "test A 192.0.2.1")
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   160
        self.assertZoneRecordEqual(zone.ZoneRecord.parse(['', 'A', '192.0.2.1']), " A 192.0.2.1")
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   161
        self.assertZoneRecordEqual(zone.ZoneRecord.parse(['test', '60', 'A', '192.0.2.1']), "test 60 A 192.0.2.1")
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   162
        self.assertZoneRecordEqual(zone.ZoneRecord.parse(['test', '60', 'in', 'A', '192.0.2.1']), "test 60 IN A 192.0.2.1")
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   163
    
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   164
    def testZoneRecordParseError(self):
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   165
        with self.assertRaises(zone.ZoneLineError):
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   166
            self.assertZoneRecordEqual(zone.ZoneRecord.parse(['test', 'A']), None)
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   167
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   168
    def testZoneRecordLoad(self):
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   169
        self.assertZoneRecordsEqual(
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   170
            zone.ZoneRecord.load(File.lines(
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   171
                "$TTL 3600",
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   172
                " ",
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   173
                "@ NS ns1",
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   174
                "  NS ns2",
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   175
                "$ORIGIN asdf", # relative
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   176
                "foo A 192.0.2.1",
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   177
                "$ORIGIN quux.test.", # absolute
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   178
                "bar A 192.0.2.2",
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   179
            ), 'test'), [
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   180
                "@ 3600 NS ns1",
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   181
                "@ 3600 NS ns2",
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   182
                "foo 3600 A 192.0.2.1", # asdf.test
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   183
                "bar 3600 A 192.0.2.2", # quux.test
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   184
            ]
cc27c830a911 pvl.dns.zone: refactor and test; breaking change
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   185
        )
641
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents: 639
diff changeset
   186
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents: 639
diff changeset
   187
class TestProcessZone(TestMixin, unittest.TestCase):
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents: 639
diff changeset
   188
    def testZoneRecordLoad(self):
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents: 639
diff changeset
   189
        rrs = zone.ZoneLine.load(File("""
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents: 639
diff changeset
   190
$TTL 3600
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents: 639
diff changeset
   191
@                   SOA     foo.test. hostmaster.test. (
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents: 639
diff changeset
   192
                            0               ; serial
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents: 639
diff changeset
   193
                            1d              ; refresh
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents: 639
diff changeset
   194
                            5m              ; retry
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents: 639
diff changeset
   195
                            10d             ; expiry
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents: 639
diff changeset
   196
                            300             ; negative
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents: 639
diff changeset
   197
                    )
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents: 639
diff changeset
   198
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents: 639
diff changeset
   199
                    NS      foo
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents: 639
diff changeset
   200
                    NS      bar
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents: 639
diff changeset
   201
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents: 639
diff changeset
   202
foo                 A       192.0.2.1
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents: 639
diff changeset
   203
bar                 A       192.0.2.2
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents: 639
diff changeset
   204
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents: 639
diff changeset
   205
$INCLUDE "includes/test"
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents: 639
diff changeset
   206
"""))
716
4fecd0d1cf23 pvl.dns.process: merge --include-trace into pvl.dns-process, replacing pvl.dns-includes
Tero Marttila <tero.marttila@aalto.fi>
parents: 648
diff changeset
   207
        
4fecd0d1cf23 pvl.dns.process: merge --include-trace into pvl.dns-process, replacing pvl.dns-includes
Tero Marttila <tero.marttila@aalto.fi>
parents: 648
diff changeset
   208
        include_trace = [ ]
641
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents: 639
diff changeset
   209
        rrs = list(process.zone_serial(rrs, 1337))
716
4fecd0d1cf23 pvl.dns.process: merge --include-trace into pvl.dns-process, replacing pvl.dns-includes
Tero Marttila <tero.marttila@aalto.fi>
parents: 648
diff changeset
   210
        rrs = list(process.zone_includes(rrs, '...', include_trace))
641
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents: 639
diff changeset
   211
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents: 639
diff changeset
   212
        self.assertZoneEqual(rrs, [
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents: 639
diff changeset
   213
            "$TTL 3600",
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents: 639
diff changeset
   214
            "@ SOA foo.test. hostmaster.test. 1337 1d 5m 10d 300",
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents: 639
diff changeset
   215
            " NS foo",
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents: 639
diff changeset
   216
            " NS bar",
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents: 639
diff changeset
   217
            "foo A 192.0.2.1",
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents: 639
diff changeset
   218
            "bar A 192.0.2.2",
647
90a0790adf8a pvl.dns: quote ZoneDirective arguments only on output if required
Tero Marttila <tero.marttila@aalto.fi>
parents: 641
diff changeset
   219
            "$INCLUDE .../includes/test",
641
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents: 639
diff changeset
   220
        ])
716
4fecd0d1cf23 pvl.dns.process: merge --include-trace into pvl.dns-process, replacing pvl.dns-includes
Tero Marttila <tero.marttila@aalto.fi>
parents: 648
diff changeset
   221
        self.assertEqual(include_trace, [
4fecd0d1cf23 pvl.dns.process: merge --include-trace into pvl.dns-process, replacing pvl.dns-includes
Tero Marttila <tero.marttila@aalto.fi>
parents: 648
diff changeset
   222
            '.../includes/test',
4fecd0d1cf23 pvl.dns.process: merge --include-trace into pvl.dns-process, replacing pvl.dns-includes
Tero Marttila <tero.marttila@aalto.fi>
parents: 648
diff changeset
   223
        ])
641
9d36e312e6a7 pvl.dns-zone: update and split out pvl.dns-process for --serial and --include-path transforms
Tero Marttila <tero.marttila@aalto.fi>
parents: 639
diff changeset
   224