pvl/hosts/tests.py
author Tero Marttila <tero.marttila@aalto.fi>
Thu, 26 Feb 2015 17:24:13 +0200
changeset 504 ee0a3dcacb95
parent 503 a56456f901e8
child 505 e5a76c404679
permissions -rw-r--r--
pvl.hosts.config: refactor
440
1d755df7bf97 pvl.hosts: refactor as a package; cleanup pvl.hosts.config with some basic tests
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     1
import ipaddr
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
     2
import pvl.args
440
1d755df7bf97 pvl.hosts: refactor as a package; cleanup pvl.hosts.config with some basic tests
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     3
import unittest
1d755df7bf97 pvl.hosts: refactor as a package; cleanup pvl.hosts.config with some basic tests
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     4
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
     5
from pvl.hosts import config, dhcp, zone
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
     6
from pvl.hosts.host import Host
440
1d755df7bf97 pvl.hosts: refactor as a package; cleanup pvl.hosts.config with some basic tests
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     7
from StringIO import StringIO
1d755df7bf97 pvl.hosts: refactor as a package; cleanup pvl.hosts.config with some basic tests
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
     8
447
6f0357759e9b pvl.hosts: fixup and document host expansion
Tero Marttila <tero.marttila@aalto.fi>
parents: 441
diff changeset
     9
class ConfFile(StringIO):
440
1d755df7bf97 pvl.hosts: refactor as a package; cleanup pvl.hosts.config with some basic tests
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    10
    def __init__(self, name, buffer):
1d755df7bf97 pvl.hosts: refactor as a package; cleanup pvl.hosts.config with some basic tests
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    11
        StringIO.__init__(self, buffer)
1d755df7bf97 pvl.hosts: refactor as a package; cleanup pvl.hosts.config with some basic tests
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    12
        self.name = name
1d755df7bf97 pvl.hosts: refactor as a package; cleanup pvl.hosts.config with some basic tests
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    13
1d755df7bf97 pvl.hosts: refactor as a package; cleanup pvl.hosts.config with some basic tests
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    14
class TestConfig(unittest.TestCase):
1d755df7bf97 pvl.hosts: refactor as a package; cleanup pvl.hosts.config with some basic tests
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    15
    def setUp(self):
490
805645dbb9bb pvl.hosts.tests: cleanup use of options
Tero Marttila <tero.marttila@aalto.fi>
parents: 489
diff changeset
    16
        self.options = pvl.args.options(
805645dbb9bb pvl.hosts.tests: cleanup use of options
Tero Marttila <tero.marttila@aalto.fi>
parents: 489
diff changeset
    17
                hosts_charset   = 'utf-8',
805645dbb9bb pvl.hosts.tests: cleanup use of options
Tero Marttila <tero.marttila@aalto.fi>
parents: 489
diff changeset
    18
                hosts_domain    = None,
805645dbb9bb pvl.hosts.tests: cleanup use of options
Tero Marttila <tero.marttila@aalto.fi>
parents: 489
diff changeset
    19
                hosts_include   = None,
805645dbb9bb pvl.hosts.tests: cleanup use of options
Tero Marttila <tero.marttila@aalto.fi>
parents: 489
diff changeset
    20
        )
440
1d755df7bf97 pvl.hosts: refactor as a package; cleanup pvl.hosts.config with some basic tests
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    21
461
e3bddc5eeff5 pvl.hosts: test config.apply_host()
Tero Marttila <tero.marttila@aalto.fi>
parents: 451
diff changeset
    22
    def assertHostEqual(self, host, host_str, attrs):
e3bddc5eeff5 pvl.hosts: test config.apply_host()
Tero Marttila <tero.marttila@aalto.fi>
parents: 451
diff changeset
    23
        self.assertEquals(str(host), host_str)
e3bddc5eeff5 pvl.hosts: test config.apply_host()
Tero Marttila <tero.marttila@aalto.fi>
parents: 451
diff changeset
    24
e3bddc5eeff5 pvl.hosts: test config.apply_host()
Tero Marttila <tero.marttila@aalto.fi>
parents: 451
diff changeset
    25
        for attr, value in attrs.iteritems():
e3bddc5eeff5 pvl.hosts: test config.apply_host()
Tero Marttila <tero.marttila@aalto.fi>
parents: 451
diff changeset
    26
            self.assertEquals(getattr(host, attr), value)
e3bddc5eeff5 pvl.hosts: test config.apply_host()
Tero Marttila <tero.marttila@aalto.fi>
parents: 451
diff changeset
    27
447
6f0357759e9b pvl.hosts: fixup and document host expansion
Tero Marttila <tero.marttila@aalto.fi>
parents: 441
diff changeset
    28
    def assertHostsEqual(self, hosts, expected):
6f0357759e9b pvl.hosts: fixup and document host expansion
Tero Marttila <tero.marttila@aalto.fi>
parents: 441
diff changeset
    29
        for host, expect in zip(hosts, expected):
6f0357759e9b pvl.hosts: fixup and document host expansion
Tero Marttila <tero.marttila@aalto.fi>
parents: 441
diff changeset
    30
            host_str, attrs = expect
441
f058fff1f272 pvl.hosts.hosts: fix sort_key()
Tero Marttila <tero.marttila@aalto.fi>
parents: 440
diff changeset
    31
461
e3bddc5eeff5 pvl.hosts: test config.apply_host()
Tero Marttila <tero.marttila@aalto.fi>
parents: 451
diff changeset
    32
            self.assertHostEqual(host, host_str, attrs)
441
f058fff1f272 pvl.hosts.hosts: fix sort_key()
Tero Marttila <tero.marttila@aalto.fi>
parents: 440
diff changeset
    33
 
451
d302b4957b07 pvl.hosts.config: fix apply_host override error handling
Tero Marttila <tero.marttila@aalto.fi>
parents: 449
diff changeset
    34
    def testApplyHostsFileError(self):
440
1d755df7bf97 pvl.hosts: refactor as a package; cleanup pvl.hosts.config with some basic tests
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    35
        with self.assertRaises(config.HostConfigError):
504
ee0a3dcacb95 pvl.hosts.config: refactor
Tero Marttila <tero.marttila@aalto.fi>
parents: 503
diff changeset
    36
            list(config.apply_hosts_files(self.options, ['nonexistant']))
440
1d755df7bf97 pvl.hosts: refactor as a package; cleanup pvl.hosts.config with some basic tests
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    37
1d755df7bf97 pvl.hosts: refactor as a package; cleanup pvl.hosts.config with some basic tests
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    38
    def testApplyHosts(self):
447
6f0357759e9b pvl.hosts: fixup and document host expansion
Tero Marttila <tero.marttila@aalto.fi>
parents: 441
diff changeset
    39
        conf_file = ConfFile('test', """
440
1d755df7bf97 pvl.hosts: refactor as a package; cleanup pvl.hosts.config with some basic tests
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    40
[foo]
1d755df7bf97 pvl.hosts: refactor as a package; cleanup pvl.hosts.config with some basic tests
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    41
    ip = 127.0.0.1
1d755df7bf97 pvl.hosts: refactor as a package; cleanup pvl.hosts.config with some basic tests
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    42
1d755df7bf97 pvl.hosts: refactor as a package; cleanup pvl.hosts.config with some basic tests
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    43
[bar]
1d755df7bf97 pvl.hosts: refactor as a package; cleanup pvl.hosts.config with some basic tests
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    44
    ip = 127.0.0.2
447
6f0357759e9b pvl.hosts: fixup and document host expansion
Tero Marttila <tero.marttila@aalto.fi>
parents: 441
diff changeset
    45
        """)
6f0357759e9b pvl.hosts: fixup and document host expansion
Tero Marttila <tero.marttila@aalto.fi>
parents: 441
diff changeset
    46
        expected = [
6f0357759e9b pvl.hosts: fixup and document host expansion
Tero Marttila <tero.marttila@aalto.fi>
parents: 441
diff changeset
    47
                ('foo@test', dict(ip=ipaddr.IPAddress('127.0.0.1'))),
6f0357759e9b pvl.hosts: fixup and document host expansion
Tero Marttila <tero.marttila@aalto.fi>
parents: 441
diff changeset
    48
                ('bar@test', dict(ip=ipaddr.IPAddress('127.0.0.2'))),
6f0357759e9b pvl.hosts: fixup and document host expansion
Tero Marttila <tero.marttila@aalto.fi>
parents: 441
diff changeset
    49
        ]
440
1d755df7bf97 pvl.hosts: refactor as a package; cleanup pvl.hosts.config with some basic tests
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
    50
447
6f0357759e9b pvl.hosts: fixup and document host expansion
Tero Marttila <tero.marttila@aalto.fi>
parents: 441
diff changeset
    51
        self.assertHostsEqual(config.apply_hosts_file(self.options, conf_file), expected)
6f0357759e9b pvl.hosts: fixup and document host expansion
Tero Marttila <tero.marttila@aalto.fi>
parents: 441
diff changeset
    52
451
d302b4957b07 pvl.hosts.config: fix apply_host override error handling
Tero Marttila <tero.marttila@aalto.fi>
parents: 449
diff changeset
    53
    def testApply(self):
d302b4957b07 pvl.hosts.config: fix apply_host override error handling
Tero Marttila <tero.marttila@aalto.fi>
parents: 449
diff changeset
    54
        self.assertHostsEqual(config.apply(self.options, ['etc/hosts/test']), [
d302b4957b07 pvl.hosts.config: fix apply_host override error handling
Tero Marttila <tero.marttila@aalto.fi>
parents: 449
diff changeset
    55
                ('foo@test', dict(
d302b4957b07 pvl.hosts.config: fix apply_host override error handling
Tero Marttila <tero.marttila@aalto.fi>
parents: 449
diff changeset
    56
                    ip          = ipaddr.IPAddress('127.0.0.1'),
d302b4957b07 pvl.hosts.config: fix apply_host override error handling
Tero Marttila <tero.marttila@aalto.fi>
parents: 449
diff changeset
    57
                    ethernet    = {None: '00:11:22:33:44:55'},
d302b4957b07 pvl.hosts.config: fix apply_host override error handling
Tero Marttila <tero.marttila@aalto.fi>
parents: 449
diff changeset
    58
                )),
d302b4957b07 pvl.hosts.config: fix apply_host override error handling
Tero Marttila <tero.marttila@aalto.fi>
parents: 449
diff changeset
    59
                ('bar@test', dict(
d302b4957b07 pvl.hosts.config: fix apply_host override error handling
Tero Marttila <tero.marttila@aalto.fi>
parents: 449
diff changeset
    60
                    ip          = ipaddr.IPAddress('127.0.0.2'),
d302b4957b07 pvl.hosts.config: fix apply_host override error handling
Tero Marttila <tero.marttila@aalto.fi>
parents: 449
diff changeset
    61
                    ethernet    = {None: '01:23:45:67:89:ab'},
d302b4957b07 pvl.hosts.config: fix apply_host override error handling
Tero Marttila <tero.marttila@aalto.fi>
parents: 449
diff changeset
    62
                )),
d302b4957b07 pvl.hosts.config: fix apply_host override error handling
Tero Marttila <tero.marttila@aalto.fi>
parents: 449
diff changeset
    63
        ])
503
a56456f901e8 pvl.hosts: deprecate [host] domain= with [host@domain]
Tero Marttila <tero.marttila@aalto.fi>
parents: 502
diff changeset
    64
    
a56456f901e8 pvl.hosts: deprecate [host] domain= with [host@domain]
Tero Marttila <tero.marttila@aalto.fi>
parents: 502
diff changeset
    65
    def testApplyHostFqdn(self):
504
ee0a3dcacb95 pvl.hosts.config: refactor
Tero Marttila <tero.marttila@aalto.fi>
parents: 503
diff changeset
    66
        self.assertHostsEqual(config.apply_hosts('test', 'asdf@foo.test', { }), [
503
a56456f901e8 pvl.hosts: deprecate [host] domain= with [host@domain]
Tero Marttila <tero.marttila@aalto.fi>
parents: 502
diff changeset
    67
                ('asdf@foo.test', dict()),
a56456f901e8 pvl.hosts: deprecate [host] domain= with [host@domain]
Tero Marttila <tero.marttila@aalto.fi>
parents: 502
diff changeset
    68
        ])
451
d302b4957b07 pvl.hosts.config: fix apply_host override error handling
Tero Marttila <tero.marttila@aalto.fi>
parents: 449
diff changeset
    69
504
ee0a3dcacb95 pvl.hosts.config: refactor
Tero Marttila <tero.marttila@aalto.fi>
parents: 503
diff changeset
    70
        self.assertHostsEqual(config.apply_hosts('test', 'asdf.test2', { }), [
503
a56456f901e8 pvl.hosts: deprecate [host] domain= with [host@domain]
Tero Marttila <tero.marttila@aalto.fi>
parents: 502
diff changeset
    71
                ('asdf.test2@', dict()),
a56456f901e8 pvl.hosts: deprecate [host] domain= with [host@domain]
Tero Marttila <tero.marttila@aalto.fi>
parents: 502
diff changeset
    72
        ])
a56456f901e8 pvl.hosts: deprecate [host] domain= with [host@domain]
Tero Marttila <tero.marttila@aalto.fi>
parents: 502
diff changeset
    73
a56456f901e8 pvl.hosts: deprecate [host] domain= with [host@domain]
Tero Marttila <tero.marttila@aalto.fi>
parents: 502
diff changeset
    74
    def testApplyHostExpand(self):
504
ee0a3dcacb95 pvl.hosts.config: refactor
Tero Marttila <tero.marttila@aalto.fi>
parents: 503
diff changeset
    75
        self.assertHostsEqual(config.apply_hosts('test', 'asdf{1-3}', { 'ip': '10.100.100.$' }), [
ee0a3dcacb95 pvl.hosts.config: refactor
Tero Marttila <tero.marttila@aalto.fi>
parents: 503
diff changeset
    76
                ('asdf1@test', dict(ip=ipaddr.IPAddress('10.100.100.1'))),
ee0a3dcacb95 pvl.hosts.config: refactor
Tero Marttila <tero.marttila@aalto.fi>
parents: 503
diff changeset
    77
                ('asdf2@test', dict(ip=ipaddr.IPAddress('10.100.100.2'))),
ee0a3dcacb95 pvl.hosts.config: refactor
Tero Marttila <tero.marttila@aalto.fi>
parents: 503
diff changeset
    78
                ('asdf3@test', dict(ip=ipaddr.IPAddress('10.100.100.3'))),
447
6f0357759e9b pvl.hosts: fixup and document host expansion
Tero Marttila <tero.marttila@aalto.fi>
parents: 441
diff changeset
    79
        ])
461
e3bddc5eeff5 pvl.hosts: test config.apply_host()
Tero Marttila <tero.marttila@aalto.fi>
parents: 451
diff changeset
    80
e3bddc5eeff5 pvl.hosts: test config.apply_host()
Tero Marttila <tero.marttila@aalto.fi>
parents: 451
diff changeset
    81
    def testApplyHostConfigDict(self):
504
ee0a3dcacb95 pvl.hosts.config: refactor
Tero Marttila <tero.marttila@aalto.fi>
parents: 503
diff changeset
    82
        host = config.apply_host('foo', 'test', {
461
e3bddc5eeff5 pvl.hosts: test config.apply_host()
Tero Marttila <tero.marttila@aalto.fi>
parents: 451
diff changeset
    83
            'ethernet.eth0': '00:11:22:33:44:55',
e3bddc5eeff5 pvl.hosts: test config.apply_host()
Tero Marttila <tero.marttila@aalto.fi>
parents: 451
diff changeset
    84
        })
e3bddc5eeff5 pvl.hosts: test config.apply_host()
Tero Marttila <tero.marttila@aalto.fi>
parents: 451
diff changeset
    85
e3bddc5eeff5 pvl.hosts: test config.apply_host()
Tero Marttila <tero.marttila@aalto.fi>
parents: 451
diff changeset
    86
        self.assertHostEqual(host, 'foo@test', dict(
e3bddc5eeff5 pvl.hosts: test config.apply_host()
Tero Marttila <tero.marttila@aalto.fi>
parents: 451
diff changeset
    87
                ethernet    = { 'eth0': '00:11:22:33:44:55' }
e3bddc5eeff5 pvl.hosts: test config.apply_host()
Tero Marttila <tero.marttila@aalto.fi>
parents: 451
diff changeset
    88
        ))
502
ac4e0f2df80c pvl.hosts.tests: test multi-value dicts for host
Tero Marttila <tero.marttila@aalto.fi>
parents: 501
diff changeset
    89
ac4e0f2df80c pvl.hosts.tests: test multi-value dicts for host
Tero Marttila <tero.marttila@aalto.fi>
parents: 501
diff changeset
    90
    def testApplyHostConfigDictMulti(self):
504
ee0a3dcacb95 pvl.hosts.config: refactor
Tero Marttila <tero.marttila@aalto.fi>
parents: 503
diff changeset
    91
        host = config.apply_host('foo', 'test', {
502
ac4e0f2df80c pvl.hosts.tests: test multi-value dicts for host
Tero Marttila <tero.marttila@aalto.fi>
parents: 501
diff changeset
    92
            'ethernet.eth0': '00:11:22:33:44:55',
ac4e0f2df80c pvl.hosts.tests: test multi-value dicts for host
Tero Marttila <tero.marttila@aalto.fi>
parents: 501
diff changeset
    93
            'ethernet.eth1': '00:11:22:33:44:66',
ac4e0f2df80c pvl.hosts.tests: test multi-value dicts for host
Tero Marttila <tero.marttila@aalto.fi>
parents: 501
diff changeset
    94
        })
ac4e0f2df80c pvl.hosts.tests: test multi-value dicts for host
Tero Marttila <tero.marttila@aalto.fi>
parents: 501
diff changeset
    95
ac4e0f2df80c pvl.hosts.tests: test multi-value dicts for host
Tero Marttila <tero.marttila@aalto.fi>
parents: 501
diff changeset
    96
        self.assertHostEqual(host, 'foo@test', dict(
ac4e0f2df80c pvl.hosts.tests: test multi-value dicts for host
Tero Marttila <tero.marttila@aalto.fi>
parents: 501
diff changeset
    97
                ethernet    = {
ac4e0f2df80c pvl.hosts.tests: test multi-value dicts for host
Tero Marttila <tero.marttila@aalto.fi>
parents: 501
diff changeset
    98
                    'eth0': '00:11:22:33:44:55',
ac4e0f2df80c pvl.hosts.tests: test multi-value dicts for host
Tero Marttila <tero.marttila@aalto.fi>
parents: 501
diff changeset
    99
                    'eth1': '00:11:22:33:44:66',
ac4e0f2df80c pvl.hosts.tests: test multi-value dicts for host
Tero Marttila <tero.marttila@aalto.fi>
parents: 501
diff changeset
   100
                }
ac4e0f2df80c pvl.hosts.tests: test multi-value dicts for host
Tero Marttila <tero.marttila@aalto.fi>
parents: 501
diff changeset
   101
        ))
461
e3bddc5eeff5 pvl.hosts: test config.apply_host()
Tero Marttila <tero.marttila@aalto.fi>
parents: 451
diff changeset
   102
   
504
ee0a3dcacb95 pvl.hosts.config: refactor
Tero Marttila <tero.marttila@aalto.fi>
parents: 503
diff changeset
   103
    def testApplyHostsConfigErrorDict(self):
ee0a3dcacb95 pvl.hosts.config: refactor
Tero Marttila <tero.marttila@aalto.fi>
parents: 503
diff changeset
   104
        with self.assertRaises(ValueError):
ee0a3dcacb95 pvl.hosts.config: refactor
Tero Marttila <tero.marttila@aalto.fi>
parents: 503
diff changeset
   105
            config.apply_host('test', 'foo', {
451
d302b4957b07 pvl.hosts.config: fix apply_host override error handling
Tero Marttila <tero.marttila@aalto.fi>
parents: 449
diff changeset
   106
                'ethernet': 'foo',
d302b4957b07 pvl.hosts.config: fix apply_host override error handling
Tero Marttila <tero.marttila@aalto.fi>
parents: 449
diff changeset
   107
                'ethernet.eth0': 'bar',
d302b4957b07 pvl.hosts.config: fix apply_host override error handling
Tero Marttila <tero.marttila@aalto.fi>
parents: 449
diff changeset
   108
            })
447
6f0357759e9b pvl.hosts: fixup and document host expansion
Tero Marttila <tero.marttila@aalto.fi>
parents: 441
diff changeset
   109
501
41b362e6074b pvl.hosts.config: fix and test extensions
Tero Marttila <tero.marttila@aalto.fi>
parents: 497
diff changeset
   110
    def testApplyHostConfigExtensions(self):
504
ee0a3dcacb95 pvl.hosts.config: refactor
Tero Marttila <tero.marttila@aalto.fi>
parents: 503
diff changeset
   111
        host = config.apply_host('foo', 'test', {
501
41b362e6074b pvl.hosts.config: fix and test extensions
Tero Marttila <tero.marttila@aalto.fi>
parents: 497
diff changeset
   112
            'link:50':          'foo@test',
41b362e6074b pvl.hosts.config: fix and test extensions
Tero Marttila <tero.marttila@aalto.fi>
parents: 497
diff changeset
   113
            'link:uplink.49':   'bar@test',
41b362e6074b pvl.hosts.config: fix and test extensions
Tero Marttila <tero.marttila@aalto.fi>
parents: 497
diff changeset
   114
        })
41b362e6074b pvl.hosts.config: fix and test extensions
Tero Marttila <tero.marttila@aalto.fi>
parents: 497
diff changeset
   115
41b362e6074b pvl.hosts.config: fix and test extensions
Tero Marttila <tero.marttila@aalto.fi>
parents: 497
diff changeset
   116
        self.assertHostEqual(host, 'foo@test', dict(
41b362e6074b pvl.hosts.config: fix and test extensions
Tero Marttila <tero.marttila@aalto.fi>
parents: 497
diff changeset
   117
                extensions = {
41b362e6074b pvl.hosts.config: fix and test extensions
Tero Marttila <tero.marttila@aalto.fi>
parents: 497
diff changeset
   118
                    'link': {
41b362e6074b pvl.hosts.config: fix and test extensions
Tero Marttila <tero.marttila@aalto.fi>
parents: 497
diff changeset
   119
                        '50': 'foo@test',
41b362e6074b pvl.hosts.config: fix and test extensions
Tero Marttila <tero.marttila@aalto.fi>
parents: 497
diff changeset
   120
                        'uplink': { '49': 'bar@test' },
41b362e6074b pvl.hosts.config: fix and test extensions
Tero Marttila <tero.marttila@aalto.fi>
parents: 497
diff changeset
   121
                    },
41b362e6074b pvl.hosts.config: fix and test extensions
Tero Marttila <tero.marttila@aalto.fi>
parents: 497
diff changeset
   122
                },
41b362e6074b pvl.hosts.config: fix and test extensions
Tero Marttila <tero.marttila@aalto.fi>
parents: 497
diff changeset
   123
        ))
41b362e6074b pvl.hosts.config: fix and test extensions
Tero Marttila <tero.marttila@aalto.fi>
parents: 497
diff changeset
   124
41b362e6074b pvl.hosts.config: fix and test extensions
Tero Marttila <tero.marttila@aalto.fi>
parents: 497
diff changeset
   125
469
cd1f1b51f3a0 pvl.hosts.tests: split TestForwardZone/TestReverseZone using TestZoneMixin
Tero Marttila <tero.marttila@aalto.fi>
parents: 468
diff changeset
   126
class TestZoneMixin(object):
463
2cbdb2435487 pvl.hosts.zone: fix pvl.dns.fqdn() and basic tests for host_forward/reverse
Tero Marttila <tero.marttila@aalto.fi>
parents: 462
diff changeset
   127
    def assertZoneEquals(self, rrs, expected):
2cbdb2435487 pvl.hosts.zone: fix pvl.dns.fqdn() and basic tests for host_forward/reverse
Tero Marttila <tero.marttila@aalto.fi>
parents: 462
diff changeset
   128
        gather = { }
2cbdb2435487 pvl.hosts.zone: fix pvl.dns.fqdn() and basic tests for host_forward/reverse
Tero Marttila <tero.marttila@aalto.fi>
parents: 462
diff changeset
   129
2cbdb2435487 pvl.hosts.zone: fix pvl.dns.fqdn() and basic tests for host_forward/reverse
Tero Marttila <tero.marttila@aalto.fi>
parents: 462
diff changeset
   130
        for rr in rrs:
2cbdb2435487 pvl.hosts.zone: fix pvl.dns.fqdn() and basic tests for host_forward/reverse
Tero Marttila <tero.marttila@aalto.fi>
parents: 462
diff changeset
   131
            key = (rr.name.lower(), rr.type.upper())
2cbdb2435487 pvl.hosts.zone: fix pvl.dns.fqdn() and basic tests for host_forward/reverse
Tero Marttila <tero.marttila@aalto.fi>
parents: 462
diff changeset
   132
2cbdb2435487 pvl.hosts.zone: fix pvl.dns.fqdn() and basic tests for host_forward/reverse
Tero Marttila <tero.marttila@aalto.fi>
parents: 462
diff changeset
   133
            self.assertNotIn(key, gather)
2cbdb2435487 pvl.hosts.zone: fix pvl.dns.fqdn() and basic tests for host_forward/reverse
Tero Marttila <tero.marttila@aalto.fi>
parents: 462
diff changeset
   134
2cbdb2435487 pvl.hosts.zone: fix pvl.dns.fqdn() and basic tests for host_forward/reverse
Tero Marttila <tero.marttila@aalto.fi>
parents: 462
diff changeset
   135
            gather[key] = rr.data
2cbdb2435487 pvl.hosts.zone: fix pvl.dns.fqdn() and basic tests for host_forward/reverse
Tero Marttila <tero.marttila@aalto.fi>
parents: 462
diff changeset
   136
2cbdb2435487 pvl.hosts.zone: fix pvl.dns.fqdn() and basic tests for host_forward/reverse
Tero Marttila <tero.marttila@aalto.fi>
parents: 462
diff changeset
   137
        self.assertDictEqual(gather, expected)
2cbdb2435487 pvl.hosts.zone: fix pvl.dns.fqdn() and basic tests for host_forward/reverse
Tero Marttila <tero.marttila@aalto.fi>
parents: 462
diff changeset
   138
469
cd1f1b51f3a0 pvl.hosts.tests: split TestForwardZone/TestReverseZone using TestZoneMixin
Tero Marttila <tero.marttila@aalto.fi>
parents: 468
diff changeset
   139
cd1f1b51f3a0 pvl.hosts.tests: split TestForwardZone/TestReverseZone using TestZoneMixin
Tero Marttila <tero.marttila@aalto.fi>
parents: 468
diff changeset
   140
class TestForwardZone(TestZoneMixin, unittest.TestCase):
cd1f1b51f3a0 pvl.hosts.tests: split TestForwardZone/TestReverseZone using TestZoneMixin
Tero Marttila <tero.marttila@aalto.fi>
parents: 468
diff changeset
   141
    def testHostOutOfOrigin(self):
504
ee0a3dcacb95 pvl.hosts.config: refactor
Tero Marttila <tero.marttila@aalto.fi>
parents: 503
diff changeset
   142
        h = Host.build('host', 'domain', 
ee0a3dcacb95 pvl.hosts.config: refactor
Tero Marttila <tero.marttila@aalto.fi>
parents: 503
diff changeset
   143
                ip  = '10.0.0.1',
ee0a3dcacb95 pvl.hosts.config: refactor
Tero Marttila <tero.marttila@aalto.fi>
parents: 503
diff changeset
   144
        )
463
2cbdb2435487 pvl.hosts.zone: fix pvl.dns.fqdn() and basic tests for host_forward/reverse
Tero Marttila <tero.marttila@aalto.fi>
parents: 462
diff changeset
   145
2cbdb2435487 pvl.hosts.zone: fix pvl.dns.fqdn() and basic tests for host_forward/reverse
Tero Marttila <tero.marttila@aalto.fi>
parents: 462
diff changeset
   146
        self.assertZoneEquals(zone.host_forward(h, 'test'), { })
2cbdb2435487 pvl.hosts.zone: fix pvl.dns.fqdn() and basic tests for host_forward/reverse
Tero Marttila <tero.marttila@aalto.fi>
parents: 462
diff changeset
   147
464
f1d3dbf04ca3 pvl.hosts.zone: fix reverse= to be IPv4-only
Tero Marttila <tero.marttila@aalto.fi>
parents: 463
diff changeset
   148
    def testHostIP(self):
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   149
        h = Host.build('host', 'domain',
463
2cbdb2435487 pvl.hosts.zone: fix pvl.dns.fqdn() and basic tests for host_forward/reverse
Tero Marttila <tero.marttila@aalto.fi>
parents: 462
diff changeset
   150
                ip  = '192.0.2.1',
2cbdb2435487 pvl.hosts.zone: fix pvl.dns.fqdn() and basic tests for host_forward/reverse
Tero Marttila <tero.marttila@aalto.fi>
parents: 462
diff changeset
   151
                ip6 = '2001:db8::192.0.2.1',
2cbdb2435487 pvl.hosts.zone: fix pvl.dns.fqdn() and basic tests for host_forward/reverse
Tero Marttila <tero.marttila@aalto.fi>
parents: 462
diff changeset
   152
        )
2cbdb2435487 pvl.hosts.zone: fix pvl.dns.fqdn() and basic tests for host_forward/reverse
Tero Marttila <tero.marttila@aalto.fi>
parents: 462
diff changeset
   153
2cbdb2435487 pvl.hosts.zone: fix pvl.dns.fqdn() and basic tests for host_forward/reverse
Tero Marttila <tero.marttila@aalto.fi>
parents: 462
diff changeset
   154
        self.assertZoneEquals(zone.host_forward(h, 'domain'), {
2cbdb2435487 pvl.hosts.zone: fix pvl.dns.fqdn() and basic tests for host_forward/reverse
Tero Marttila <tero.marttila@aalto.fi>
parents: 462
diff changeset
   155
            ('host', 'A'): ['192.0.2.1'],
2cbdb2435487 pvl.hosts.zone: fix pvl.dns.fqdn() and basic tests for host_forward/reverse
Tero Marttila <tero.marttila@aalto.fi>
parents: 462
diff changeset
   156
            ('host', 'AAAA'): ['2001:db8::c000:201'],
2cbdb2435487 pvl.hosts.zone: fix pvl.dns.fqdn() and basic tests for host_forward/reverse
Tero Marttila <tero.marttila@aalto.fi>
parents: 462
diff changeset
   157
        })
465
133f14810eb5 pvl.hosts.zone: test forward= omit
Tero Marttila <tero.marttila@aalto.fi>
parents: 464
diff changeset
   158
    
466
ad9d512ec1e7 pvl.hosts.zone: test and fix alias=
Tero Marttila <tero.marttila@aalto.fi>
parents: 465
diff changeset
   159
    def testHostAlias(self):
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   160
        h = Host.build('host', 'domain',
466
ad9d512ec1e7 pvl.hosts.zone: test and fix alias=
Tero Marttila <tero.marttila@aalto.fi>
parents: 465
diff changeset
   161
                ip      = '192.0.2.1',
ad9d512ec1e7 pvl.hosts.zone: test and fix alias=
Tero Marttila <tero.marttila@aalto.fi>
parents: 465
diff changeset
   162
                alias   = 'test *.test',
ad9d512ec1e7 pvl.hosts.zone: test and fix alias=
Tero Marttila <tero.marttila@aalto.fi>
parents: 465
diff changeset
   163
        )
ad9d512ec1e7 pvl.hosts.zone: test and fix alias=
Tero Marttila <tero.marttila@aalto.fi>
parents: 465
diff changeset
   164
ad9d512ec1e7 pvl.hosts.zone: test and fix alias=
Tero Marttila <tero.marttila@aalto.fi>
parents: 465
diff changeset
   165
        self.assertEquals(h.alias, ['test', '*.test'])
ad9d512ec1e7 pvl.hosts.zone: test and fix alias=
Tero Marttila <tero.marttila@aalto.fi>
parents: 465
diff changeset
   166
ad9d512ec1e7 pvl.hosts.zone: test and fix alias=
Tero Marttila <tero.marttila@aalto.fi>
parents: 465
diff changeset
   167
        self.assertZoneEquals(zone.host_forward(h, 'domain'), {
ad9d512ec1e7 pvl.hosts.zone: test and fix alias=
Tero Marttila <tero.marttila@aalto.fi>
parents: 465
diff changeset
   168
            ('host', 'A'): ['192.0.2.1'],
ad9d512ec1e7 pvl.hosts.zone: test and fix alias=
Tero Marttila <tero.marttila@aalto.fi>
parents: 465
diff changeset
   169
            ('test', 'CNAME'): ['host'],
ad9d512ec1e7 pvl.hosts.zone: test and fix alias=
Tero Marttila <tero.marttila@aalto.fi>
parents: 465
diff changeset
   170
            ('*.test', 'CNAME'): ['host'],
ad9d512ec1e7 pvl.hosts.zone: test and fix alias=
Tero Marttila <tero.marttila@aalto.fi>
parents: 465
diff changeset
   171
        })
ad9d512ec1e7 pvl.hosts.zone: test and fix alias=
Tero Marttila <tero.marttila@aalto.fi>
parents: 465
diff changeset
   172
468
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   173
    def testHostAlias46(self):
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   174
        h = Host.build('host', 'domain',
468
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   175
                ip      = '192.0.2.1',
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   176
                ip6     = '2001:db8::192.0.2.1',
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   177
                alias4  = 'test4',
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   178
                alias6  = 'test6',
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   179
        )
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   180
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   181
        self.assertZoneEquals(zone.host_forward(h, 'domain'), {
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   182
            ('host', 'A'): ['192.0.2.1'],
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   183
            ('host', 'AAAA'): ['2001:db8::c000:201'],
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   184
            ('test4', 'A'): ['192.0.2.1'],
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   185
            ('test6', 'AAAA'): ['2001:db8::c000:201'],
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   186
        })
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   187
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   188
    def testHostAlias4Missing(self):
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   189
        h = Host.build('host', 'domain',
468
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   190
                ip6     = '2001:db8::192.0.2.1',
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   191
                alias4  = 'test4',
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   192
                alias6  = 'test6',
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   193
        )
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   194
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   195
        with self.assertRaises(zone.HostZoneError):
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   196
            self.assertZoneEquals(zone.host_forward(h, 'domain'), { })
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   197
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   198
    def testHostAlias6Missing(self):
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   199
        h = Host.build('host', 'domain',
468
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   200
                ip      = '192.0.2.1',
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   201
                alias4  = 'test4',
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   202
                alias6  = 'test6',
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   203
        )
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   204
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   205
        with self.assertRaises(zone.HostZoneError):
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   206
            self.assertZoneEquals(zone.host_forward(h, 'domain'), { })
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   207
493
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   208
    def testHostFQDN(self):
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   209
        h = Host.build('host.example.net', None,
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   210
                ip          = '192.0.2.3',
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   211
        )
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   212
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   213
        self.assertZoneEquals(zone.host_forward(h, 'example.com'), {
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   214
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   215
        })
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   216
469
cd1f1b51f3a0 pvl.hosts.tests: split TestForwardZone/TestReverseZone using TestZoneMixin
Tero Marttila <tero.marttila@aalto.fi>
parents: 468
diff changeset
   217
    def testHostDelegate(self):
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   218
        h = Host.build('host', 'example.com',
469
cd1f1b51f3a0 pvl.hosts.tests: split TestForwardZone/TestReverseZone using TestZoneMixin
Tero Marttila <tero.marttila@aalto.fi>
parents: 468
diff changeset
   219
                forward = 'host.example.net',
cd1f1b51f3a0 pvl.hosts.tests: split TestForwardZone/TestReverseZone using TestZoneMixin
Tero Marttila <tero.marttila@aalto.fi>
parents: 468
diff changeset
   220
        )
cd1f1b51f3a0 pvl.hosts.tests: split TestForwardZone/TestReverseZone using TestZoneMixin
Tero Marttila <tero.marttila@aalto.fi>
parents: 468
diff changeset
   221
cd1f1b51f3a0 pvl.hosts.tests: split TestForwardZone/TestReverseZone using TestZoneMixin
Tero Marttila <tero.marttila@aalto.fi>
parents: 468
diff changeset
   222
        self.assertZoneEquals(zone.host_forward(h, 'example.com'), {
cd1f1b51f3a0 pvl.hosts.tests: split TestForwardZone/TestReverseZone using TestZoneMixin
Tero Marttila <tero.marttila@aalto.fi>
parents: 468
diff changeset
   223
            ('host', 'CNAME'): ['host.example.net.'],
cd1f1b51f3a0 pvl.hosts.tests: split TestForwardZone/TestReverseZone using TestZoneMixin
Tero Marttila <tero.marttila@aalto.fi>
parents: 468
diff changeset
   224
        })
cd1f1b51f3a0 pvl.hosts.tests: split TestForwardZone/TestReverseZone using TestZoneMixin
Tero Marttila <tero.marttila@aalto.fi>
parents: 468
diff changeset
   225
467
3bb00e5e79d3 pvl.hosts.zone: support combining forward= with alias=
Tero Marttila <tero.marttila@aalto.fi>
parents: 466
diff changeset
   226
    def testHostForwardAlias(self):
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   227
        h = Host.build('host', 'domain',
467
3bb00e5e79d3 pvl.hosts.zone: support combining forward= with alias=
Tero Marttila <tero.marttila@aalto.fi>
parents: 466
diff changeset
   228
                forward = 'host.example.net',
3bb00e5e79d3 pvl.hosts.zone: support combining forward= with alias=
Tero Marttila <tero.marttila@aalto.fi>
parents: 466
diff changeset
   229
                alias   = 'test',
3bb00e5e79d3 pvl.hosts.zone: support combining forward= with alias=
Tero Marttila <tero.marttila@aalto.fi>
parents: 466
diff changeset
   230
        )
3bb00e5e79d3 pvl.hosts.zone: support combining forward= with alias=
Tero Marttila <tero.marttila@aalto.fi>
parents: 466
diff changeset
   231
3bb00e5e79d3 pvl.hosts.zone: support combining forward= with alias=
Tero Marttila <tero.marttila@aalto.fi>
parents: 466
diff changeset
   232
        self.assertZoneEquals(zone.host_forward(h, 'domain'), {
3bb00e5e79d3 pvl.hosts.zone: support combining forward= with alias=
Tero Marttila <tero.marttila@aalto.fi>
parents: 466
diff changeset
   233
            ('host', 'CNAME'): ['host.example.net.'],
3bb00e5e79d3 pvl.hosts.zone: support combining forward= with alias=
Tero Marttila <tero.marttila@aalto.fi>
parents: 466
diff changeset
   234
            ('test', 'CNAME'): ['host'],
3bb00e5e79d3 pvl.hosts.zone: support combining forward= with alias=
Tero Marttila <tero.marttila@aalto.fi>
parents: 466
diff changeset
   235
        })
466
ad9d512ec1e7 pvl.hosts.zone: test and fix alias=
Tero Marttila <tero.marttila@aalto.fi>
parents: 465
diff changeset
   236
470
ac334a55eebc pvl.hosts: fix location= and test forward records
Tero Marttila <tero.marttila@aalto.fi>
parents: 469
diff changeset
   237
    def testHostLocation(self):
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   238
        h = Host.build('host', 'domain',
470
ac334a55eebc pvl.hosts: fix location= and test forward records
Tero Marttila <tero.marttila@aalto.fi>
parents: 469
diff changeset
   239
                ip          = '192.0.2.1',
ac334a55eebc pvl.hosts: fix location= and test forward records
Tero Marttila <tero.marttila@aalto.fi>
parents: 469
diff changeset
   240
                location    = 'test',
ac334a55eebc pvl.hosts: fix location= and test forward records
Tero Marttila <tero.marttila@aalto.fi>
parents: 469
diff changeset
   241
        )
ac334a55eebc pvl.hosts: fix location= and test forward records
Tero Marttila <tero.marttila@aalto.fi>
parents: 469
diff changeset
   242
ac334a55eebc pvl.hosts: fix location= and test forward records
Tero Marttila <tero.marttila@aalto.fi>
parents: 469
diff changeset
   243
        self.assertEquals(h.location, ('test', 'domain'))
ac334a55eebc pvl.hosts: fix location= and test forward records
Tero Marttila <tero.marttila@aalto.fi>
parents: 469
diff changeset
   244
ac334a55eebc pvl.hosts: fix location= and test forward records
Tero Marttila <tero.marttila@aalto.fi>
parents: 469
diff changeset
   245
        self.assertZoneEquals(zone.host_forward(h, 'domain'), {
ac334a55eebc pvl.hosts: fix location= and test forward records
Tero Marttila <tero.marttila@aalto.fi>
parents: 469
diff changeset
   246
            ('host', 'A'): ['192.0.2.1'],
ac334a55eebc pvl.hosts: fix location= and test forward records
Tero Marttila <tero.marttila@aalto.fi>
parents: 469
diff changeset
   247
            ('test', 'CNAME'): ['host'],
ac334a55eebc pvl.hosts: fix location= and test forward records
Tero Marttila <tero.marttila@aalto.fi>
parents: 469
diff changeset
   248
        })
471
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   249
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   250
    def testHostLocationDomain(self):
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   251
        h = Host.build('host', 'foo.domain',
471
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   252
                ip          = '192.0.2.1',
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   253
                location    = 'test@bar.domain',
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   254
        )
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   255
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   256
        self.assertEquals(h.location, ('test', 'bar.domain'))
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   257
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   258
        self.assertZoneEquals(zone.host_forward(h, 'domain'), {
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   259
            ('host.foo', 'A'): ['192.0.2.1'],
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   260
            ('test.bar', 'CNAME'): ['host.foo'],
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   261
        })
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   262
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   263
    def testHostLocationDomainOutOfOrigin(self):
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   264
        h = Host.build('host', 'foo.domain',
471
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   265
                ip          = '192.0.2.1',
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   266
                location    = 'test@bar.domain',
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   267
        )
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   268
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   269
        self.assertEquals(h.location, ('test', 'bar.domain'))
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   270
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   271
        with self.assertRaises(zone.HostZoneError):
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   272
            self.assertZoneEquals(zone.host_forward(h, 'foo.domain'), {
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   273
                ('host', 'A'): ['192.0.2.1'],
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   274
            })
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   275
        
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   276
        # TODO
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   277
        #self.assertZoneEquals(zone.host_forward(h, 'bar.domain'), {
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   278
        #    ('test', 'CNAME'): ['host.foo'],
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   279
        #})
472
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   280
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   281
    def testHostsForward(self):
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   282
        hosts = [
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   283
                Host.build('foo', 'domain',
472
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   284
                    ip      = '192.0.2.1',
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   285
                    ip6     = '2001:db8::192.0.2.1',
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   286
                    alias   = 'test',
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   287
                ),
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   288
                Host.build('bar', 'domain',
472
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   289
                    ip      = '192.0.2.2',
496
530f22575889 pvl.hosts.zone: label=relative() check handles FQDNs
Tero Marttila <tero.marttila@aalto.fi>
parents: 494
diff changeset
   290
                ),
530f22575889 pvl.hosts.zone: label=relative() check handles FQDNs
Tero Marttila <tero.marttila@aalto.fi>
parents: 494
diff changeset
   291
                Host.build('quux', 'example',
530f22575889 pvl.hosts.zone: label=relative() check handles FQDNs
Tero Marttila <tero.marttila@aalto.fi>
parents: 494
diff changeset
   292
                    ip      = '192.0.2.3',
530f22575889 pvl.hosts.zone: label=relative() check handles FQDNs
Tero Marttila <tero.marttila@aalto.fi>
parents: 494
diff changeset
   293
                ),
472
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   294
        ]
497
0082d2092d1f pvl.hosts.zone: should be an fqdn
Tero Marttila <tero.marttila@aalto.fi>
parents: 496
diff changeset
   295
                
0082d2092d1f pvl.hosts.zone: should be an fqdn
Tero Marttila <tero.marttila@aalto.fi>
parents: 496
diff changeset
   296
        rrs = zone.apply_hosts_forward(hosts, 'domain', add_origin=True)
0082d2092d1f pvl.hosts.zone: should be an fqdn
Tero Marttila <tero.marttila@aalto.fi>
parents: 496
diff changeset
   297
    
0082d2092d1f pvl.hosts.zone: should be an fqdn
Tero Marttila <tero.marttila@aalto.fi>
parents: 496
diff changeset
   298
        # handle the $ORIGIN directive
0082d2092d1f pvl.hosts.zone: should be an fqdn
Tero Marttila <tero.marttila@aalto.fi>
parents: 496
diff changeset
   299
        rd = next(rrs)
472
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   300
497
0082d2092d1f pvl.hosts.zone: should be an fqdn
Tero Marttila <tero.marttila@aalto.fi>
parents: 496
diff changeset
   301
        self.assertEquals(unicode(rd), '$ORIGIN\tdomain.')
0082d2092d1f pvl.hosts.zone: should be an fqdn
Tero Marttila <tero.marttila@aalto.fi>
parents: 496
diff changeset
   302
0082d2092d1f pvl.hosts.zone: should be an fqdn
Tero Marttila <tero.marttila@aalto.fi>
parents: 496
diff changeset
   303
        self.assertZoneEquals(rrs, {
472
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   304
            ('foo', 'A'): ['192.0.2.1'],
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   305
            ('foo', 'AAAA'): ['2001:db8::c000:201'],
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   306
            ('test', 'CNAME'): ['foo'],
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   307
            ('bar', 'A'): ['192.0.2.2'],
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   308
        })
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   309
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   310
    def testHostsConflict(self):
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   311
        hosts = [
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   312
                Host.build('foo', 'domain',
472
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   313
                    ip      = '192.0.2.1',
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   314
                ),
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   315
                Host.build('foo', 'domain',
472
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   316
                    ip      = '192.0.2.2',
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   317
                )
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   318
        ]
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   319
        
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   320
        with self.assertRaises(zone.HostZoneError):
489
7f1bd12e0d54 pvl.hosts-reverse: move options out of pvl.hosts.zone
Tero Marttila <tero.marttila@aalto.fi>
parents: 487
diff changeset
   321
            self.assertZoneEquals(zone.apply_hosts_forward(hosts, 'domain'), { })
472
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   322
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   323
    def testHostsAliasConflict(self):
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   324
        hosts = [
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   325
                Host.build('foo', 'domain',
472
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   326
                    ip          = '192.0.2.1',
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   327
                ),
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   328
                Host.build('bar', 'domain',
472
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   329
                    ip          = '192.0.2.2',
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   330
                    alias       = 'foo',
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   331
                )
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   332
        ]
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   333
        
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   334
        # with A first
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   335
        with self.assertRaises(zone.HostZoneError):
489
7f1bd12e0d54 pvl.hosts-reverse: move options out of pvl.hosts.zone
Tero Marttila <tero.marttila@aalto.fi>
parents: 487
diff changeset
   336
            self.assertZoneEquals(zone.apply_hosts_forward(hosts, 'domain'), { })
472
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   337
    
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   338
        # also with CNAME first
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   339
        with self.assertRaises(zone.HostZoneError):
489
7f1bd12e0d54 pvl.hosts-reverse: move options out of pvl.hosts.zone
Tero Marttila <tero.marttila@aalto.fi>
parents: 487
diff changeset
   340
            self.assertZoneEquals(zone.apply_hosts_forward(reversed(hosts), 'domain'), { })
472
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   341
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   342
    def testHostsAlias4Conflict(self):
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   343
        hosts = [
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   344
                Host.build('foo', 'domain',
472
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   345
                    ip          = '192.0.2.1',
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   346
                ),
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   347
                Host.build('bar', 'domain',
472
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   348
                    ip          = '192.0.2.2',
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   349
                    alias4      = 'foo',
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   350
                )
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   351
        ]
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   352
        
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   353
        with self.assertRaises(zone.HostZoneError):
489
7f1bd12e0d54 pvl.hosts-reverse: move options out of pvl.hosts.zone
Tero Marttila <tero.marttila@aalto.fi>
parents: 487
diff changeset
   354
            self.assertZoneEquals(zone.apply_hosts_forward(hosts, 'domain'), { })
472
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   355
    
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   356
469
cd1f1b51f3a0 pvl.hosts.tests: split TestForwardZone/TestReverseZone using TestZoneMixin
Tero Marttila <tero.marttila@aalto.fi>
parents: 468
diff changeset
   357
class TestReverseZone(TestZoneMixin, unittest.TestCase):
473
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   358
    def testHostIP(self):
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   359
        h = Host.build('host', 'domain',
473
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   360
                ip  = '192.0.2.1',
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   361
                ip6 = '2001:db8::192.0.2.1',
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   362
        )
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   363
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   364
        self.assertZoneEquals((rr for ip, rr in zone.host_reverse(h, ipaddr.IPNetwork('192.0.2.1/24'))), {
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   365
            ('1', 'PTR'): ['host.domain.'],
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   366
        })
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   367
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   368
        self.assertZoneEquals((rr for ip, rr in zone.host_reverse(h, ipaddr.IPNetwork('2001:db8::/64'))), {
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   369
            ('1.0.2.0.0.0.0.c.0.0.0.0.0.0.0.0', 'PTR'): ['host.domain.'],
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   370
        })
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   371
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   372
    def testHostIP4(self):
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   373
        h = Host.build('host', 'domain',
473
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   374
                ip  = '192.0.2.1',
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   375
        )
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   376
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   377
        self.assertZoneEquals((rr for ip, rr in zone.host_reverse(h, ipaddr.IPNetwork('192.0.2.1/24'))), {
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   378
            ('1', 'PTR'): ['host.domain.'],
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   379
        })
474
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   380
        
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   381
        self.assertZoneEquals((rr for ip, rr in zone.host_reverse(h, ipaddr.IPNetwork('192.0.0.0/16'))), {
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   382
            ('1.2', 'PTR'): ['host.domain.'],
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   383
        })
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   384
        
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   385
        self.assertZoneEquals((rr for ip, rr in zone.host_reverse(h, ipaddr.IPNetwork('192.0.0.0/12'))), {
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   386
            ('1.2.0', 'PTR'): ['host.domain.'],
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   387
        })
473
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   388
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   389
        self.assertZoneEquals((rr for ip, rr in zone.host_reverse(h, ipaddr.IPNetwork('2001:db8::/64'))), {
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   390
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   391
        })
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   392
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   393
    def testHostIP6(self):
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   394
        h = Host.build('host', 'domain',
473
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   395
                ip6 = '2001:db8::192.0.2.1',
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   396
        )
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   397
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   398
        self.assertZoneEquals((rr for ip, rr in zone.host_reverse(h, ipaddr.IPNetwork('192.0.2.1/24'))), {
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   399
        })
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   400
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   401
        self.assertZoneEquals((rr for ip, rr in zone.host_reverse(h, ipaddr.IPNetwork('2001:db8::/64'))), {
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   402
            ('1.0.2.0.0.0.0.c.0.0.0.0.0.0.0.0', 'PTR'): ['host.domain.'],
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   403
        })
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   404
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   405
    def testHostIPOutOfPrefix(self):
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   406
        h = Host.build('host', 'domain',
473
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   407
                ip  = '192.0.2.1',
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   408
                ip6 = '2001:db8::192.0.2.1',
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   409
        )
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   410
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   411
        self.assertZoneEquals((rr for ip, rr in zone.host_reverse(h, ipaddr.IPNetwork('192.0.1.0/24'))), {
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   412
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   413
        })
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   414
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   415
        self.assertZoneEquals((rr for ip, rr in zone.host_reverse(h, ipaddr.IPNetwork('2001:db8:1::/64'))), {
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   416
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   417
        })
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   418
493
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   419
    def testHostFQDN(self):
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   420
        h = Host.build('host.example.net', None,
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   421
                ip          = '192.0.2.3',
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   422
                ip6         = '2001:db8::192.0.2.3',
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   423
        )
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   424
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   425
        self.assertZoneEquals((rr for ip, rr in zone.host_reverse(h, ipaddr.IPNetwork('192.0.2.1/24'))), {
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   426
            ('3', 'PTR'): ['host.example.net.'],
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   427
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   428
        })
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   429
        
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   430
        self.assertZoneEquals((rr for ip, rr in zone.host_reverse(h, ipaddr.IPNetwork('2001:db8::/64'))), {
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   431
            ('3.0.2.0.0.0.0.c.0.0.0.0.0.0.0.0', 'PTR'): ['host.example.net.'],
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   432
        })
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   433
463
2cbdb2435487 pvl.hosts.zone: fix pvl.dns.fqdn() and basic tests for host_forward/reverse
Tero Marttila <tero.marttila@aalto.fi>
parents: 462
diff changeset
   434
    def testHostDelegate(self):
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   435
        h = Host.build('host', 'example.com',
463
2cbdb2435487 pvl.hosts.zone: fix pvl.dns.fqdn() and basic tests for host_forward/reverse
Tero Marttila <tero.marttila@aalto.fi>
parents: 462
diff changeset
   436
                ip      = '192.0.2.1',
2cbdb2435487 pvl.hosts.zone: fix pvl.dns.fqdn() and basic tests for host_forward/reverse
Tero Marttila <tero.marttila@aalto.fi>
parents: 462
diff changeset
   437
                ip6     = '2001:db8::192.0.2.1',
465
133f14810eb5 pvl.hosts.zone: test forward= omit
Tero Marttila <tero.marttila@aalto.fi>
parents: 464
diff changeset
   438
                forward = '',
463
2cbdb2435487 pvl.hosts.zone: fix pvl.dns.fqdn() and basic tests for host_forward/reverse
Tero Marttila <tero.marttila@aalto.fi>
parents: 462
diff changeset
   439
                reverse = '1.0/28.2.0.192.in-addr.arpa',
2cbdb2435487 pvl.hosts.zone: fix pvl.dns.fqdn() and basic tests for host_forward/reverse
Tero Marttila <tero.marttila@aalto.fi>
parents: 462
diff changeset
   440
        )
2cbdb2435487 pvl.hosts.zone: fix pvl.dns.fqdn() and basic tests for host_forward/reverse
Tero Marttila <tero.marttila@aalto.fi>
parents: 462
diff changeset
   441
2cbdb2435487 pvl.hosts.zone: fix pvl.dns.fqdn() and basic tests for host_forward/reverse
Tero Marttila <tero.marttila@aalto.fi>
parents: 462
diff changeset
   442
        self.assertZoneEquals(zone.host_forward(h, 'example.com'), {
465
133f14810eb5 pvl.hosts.zone: test forward= omit
Tero Marttila <tero.marttila@aalto.fi>
parents: 464
diff changeset
   443
463
2cbdb2435487 pvl.hosts.zone: fix pvl.dns.fqdn() and basic tests for host_forward/reverse
Tero Marttila <tero.marttila@aalto.fi>
parents: 462
diff changeset
   444
        })
2cbdb2435487 pvl.hosts.zone: fix pvl.dns.fqdn() and basic tests for host_forward/reverse
Tero Marttila <tero.marttila@aalto.fi>
parents: 462
diff changeset
   445
2cbdb2435487 pvl.hosts.zone: fix pvl.dns.fqdn() and basic tests for host_forward/reverse
Tero Marttila <tero.marttila@aalto.fi>
parents: 462
diff changeset
   446
        self.assertZoneEquals((rr for ip, rr in zone.host_reverse(h, ipaddr.IPNetwork('192.0.2.1/24'))), {
2cbdb2435487 pvl.hosts.zone: fix pvl.dns.fqdn() and basic tests for host_forward/reverse
Tero Marttila <tero.marttila@aalto.fi>
parents: 462
diff changeset
   447
            ('1', 'CNAME'): ['1.0/28.2.0.192.in-addr.arpa.'],
2cbdb2435487 pvl.hosts.zone: fix pvl.dns.fqdn() and basic tests for host_forward/reverse
Tero Marttila <tero.marttila@aalto.fi>
parents: 462
diff changeset
   448
        })
464
f1d3dbf04ca3 pvl.hosts.zone: fix reverse= to be IPv4-only
Tero Marttila <tero.marttila@aalto.fi>
parents: 463
diff changeset
   449
        
f1d3dbf04ca3 pvl.hosts.zone: fix reverse= to be IPv4-only
Tero Marttila <tero.marttila@aalto.fi>
parents: 463
diff changeset
   450
        self.assertZoneEquals((rr for ip, rr in zone.host_reverse(h, ipaddr.IPNetwork('2001:db8::/64'))), {
f1d3dbf04ca3 pvl.hosts.zone: fix reverse= to be IPv4-only
Tero Marttila <tero.marttila@aalto.fi>
parents: 463
diff changeset
   451
f1d3dbf04ca3 pvl.hosts.zone: fix reverse= to be IPv4-only
Tero Marttila <tero.marttila@aalto.fi>
parents: 463
diff changeset
   452
        })
463
2cbdb2435487 pvl.hosts.zone: fix pvl.dns.fqdn() and basic tests for host_forward/reverse
Tero Marttila <tero.marttila@aalto.fi>
parents: 462
diff changeset
   453
494
6d258338b363 pvl.hosts.zone: test forward hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 493
diff changeset
   454
    def testHosts(self):
6d258338b363 pvl.hosts.zone: test forward hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 493
diff changeset
   455
        hosts = [
6d258338b363 pvl.hosts.zone: test forward hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 493
diff changeset
   456
                Host.build('foo', 'domain',
6d258338b363 pvl.hosts.zone: test forward hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 493
diff changeset
   457
                    ip      = '192.0.2.1',
6d258338b363 pvl.hosts.zone: test forward hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 493
diff changeset
   458
                ),
6d258338b363 pvl.hosts.zone: test forward hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 493
diff changeset
   459
                Host.build('bar', 'domain',
6d258338b363 pvl.hosts.zone: test forward hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 493
diff changeset
   460
                    ip      = '192.0.2.2',
6d258338b363 pvl.hosts.zone: test forward hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 493
diff changeset
   461
                )
6d258338b363 pvl.hosts.zone: test forward hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 493
diff changeset
   462
        ]
6d258338b363 pvl.hosts.zone: test forward hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 493
diff changeset
   463
        
6d258338b363 pvl.hosts.zone: test forward hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 493
diff changeset
   464
        self.assertZoneEquals(zone.apply_hosts_reverse(hosts, ipaddr.IPNetwork('192.0.2.1/24')), {
6d258338b363 pvl.hosts.zone: test forward hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 493
diff changeset
   465
            ('1', 'PTR'): ['foo.domain.'],
6d258338b363 pvl.hosts.zone: test forward hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 493
diff changeset
   466
            ('2', 'PTR'): ['bar.domain.'],
6d258338b363 pvl.hosts.zone: test forward hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 493
diff changeset
   467
        })
6d258338b363 pvl.hosts.zone: test forward hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 493
diff changeset
   468
        
6d258338b363 pvl.hosts.zone: test forward hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 493
diff changeset
   469
        # in ip order
6d258338b363 pvl.hosts.zone: test forward hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 493
diff changeset
   470
        self.assertZoneEquals(zone.apply_hosts_reverse(reversed(hosts), ipaddr.IPNetwork('192.0.2.1/24')), {
6d258338b363 pvl.hosts.zone: test forward hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 493
diff changeset
   471
            ('1', 'PTR'): ['foo.domain.'],
6d258338b363 pvl.hosts.zone: test forward hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 493
diff changeset
   472
            ('2', 'PTR'): ['bar.domain.'],
6d258338b363 pvl.hosts.zone: test forward hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 493
diff changeset
   473
        })
6d258338b363 pvl.hosts.zone: test forward hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 493
diff changeset
   474
474
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   475
    def testHostsConflict(self):
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   476
        hosts = [
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   477
                Host.build('foo', 'domain',
474
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   478
                    ip      = '192.0.2.1',
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   479
                ),
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   480
                Host.build('bar', 'domain',
474
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   481
                    ip      = '192.0.2.1',
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   482
                )
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   483
        ]
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   484
        
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   485
        with self.assertRaises(zone.HostZoneError):
489
7f1bd12e0d54 pvl.hosts-reverse: move options out of pvl.hosts.zone
Tero Marttila <tero.marttila@aalto.fi>
parents: 487
diff changeset
   486
            self.assertZoneEquals(zone.apply_hosts_reverse(hosts, ipaddr.IPNetwork('192.0.2.1/24')), { })
474
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   487
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   488
    def testHostsGenerateUnknown(self):
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   489
        hosts = [
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   490
                Host.build('foo', 'domain',
474
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   491
                    ip      = '192.0.2.1',
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   492
                ),
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   493
                Host.build('bar', 'domain',
474
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   494
                    ip      = '192.0.2.5',
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   495
                ),
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   496
        ]
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   497
        
489
7f1bd12e0d54 pvl.hosts-reverse: move options out of pvl.hosts.zone
Tero Marttila <tero.marttila@aalto.fi>
parents: 487
diff changeset
   498
        self.assertZoneEquals(zone.apply_hosts_reverse(hosts, ipaddr.IPNetwork('192.0.2.1/29'),
7f1bd12e0d54 pvl.hosts-reverse: move options out of pvl.hosts.zone
Tero Marttila <tero.marttila@aalto.fi>
parents: 487
diff changeset
   499
                unknown_host = 'ufc',
7f1bd12e0d54 pvl.hosts-reverse: move options out of pvl.hosts.zone
Tero Marttila <tero.marttila@aalto.fi>
parents: 487
diff changeset
   500
                unknown_domain = 'domain',
7f1bd12e0d54 pvl.hosts-reverse: move options out of pvl.hosts.zone
Tero Marttila <tero.marttila@aalto.fi>
parents: 487
diff changeset
   501
        ), {
474
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   502
            ('1', 'PTR'): ['foo.domain.'],
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   503
            ('2', 'PTR'): ['ufc.domain.'],
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   504
            ('3', 'PTR'): ['ufc.domain.'],
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   505
            ('4', 'PTR'): ['ufc.domain.'],
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   506
            ('5', 'PTR'): ['bar.domain.'],
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   507
            ('6', 'PTR'): ['ufc.domain.'],
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   508
        })
469
cd1f1b51f3a0 pvl.hosts.tests: split TestForwardZone/TestReverseZone using TestZoneMixin
Tero Marttila <tero.marttila@aalto.fi>
parents: 468
diff changeset
   509
479
1e68e3a30b51 pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents: 477
diff changeset
   510
class TestDhcp(unittest.TestCase):
1e68e3a30b51 pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents: 477
diff changeset
   511
    def assertBlocksEqual(self, blockdefs, expected):
1e68e3a30b51 pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents: 477
diff changeset
   512
        for (_block, _items, _opts), (block, items, opts) in zip(blockdefs, expected):
1e68e3a30b51 pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents: 477
diff changeset
   513
            self.assertEqual(_block, block)
1e68e3a30b51 pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents: 477
diff changeset
   514
            self.assertItemsEqual(_items, items)
1e68e3a30b51 pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents: 477
diff changeset
   515
1e68e3a30b51 pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents: 477
diff changeset
   516
            if opts is not None:
1e68e3a30b51 pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents: 477
diff changeset
   517
                self.assertEqual(_opts, opts)
1e68e3a30b51 pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents: 477
diff changeset
   518
        
1e68e3a30b51 pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents: 477
diff changeset
   519
        self.assertEqual(len(blockdefs), len(expected))
1e68e3a30b51 pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents: 477
diff changeset
   520
    
1e68e3a30b51 pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents: 477
diff changeset
   521
    def testHost(self):
1e68e3a30b51 pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents: 477
diff changeset
   522
        host = Host.build('foo', 'test',
1e68e3a30b51 pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents: 477
diff changeset
   523
                ip          = '192.0.2.1',
1e68e3a30b51 pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents: 477
diff changeset
   524
                ethernet    = '00:11:22:33:44:55',
492
ddd13dadf6a8 pvl.hosts.dhcp: test non-dhcp hosts and owner comments
Tero Marttila <tero.marttila@aalto.fi>
parents: 491
diff changeset
   525
                owner       = 'foo',
479
1e68e3a30b51 pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents: 477
diff changeset
   526
        )
1e68e3a30b51 pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents: 477
diff changeset
   527
1e68e3a30b51 pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents: 477
diff changeset
   528
        self.assertBlocksEqual(list(dhcp.dhcp_host(host)), [
1e68e3a30b51 pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents: 477
diff changeset
   529
            (('host', 'foo'), [
1e68e3a30b51 pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents: 477
diff changeset
   530
                ('option', 'host-name', "foo"),
1e68e3a30b51 pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents: 477
diff changeset
   531
                ('fixed-address', '192.0.2.1'),
1e68e3a30b51 pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents: 477
diff changeset
   532
                ('hardware', 'ethernet', '00:11:22:33:44:55'),
492
ddd13dadf6a8 pvl.hosts.dhcp: test non-dhcp hosts and owner comments
Tero Marttila <tero.marttila@aalto.fi>
parents: 491
diff changeset
   533
                ], dict(comment="Owner: foo"))
ddd13dadf6a8 pvl.hosts.dhcp: test non-dhcp hosts and owner comments
Tero Marttila <tero.marttila@aalto.fi>
parents: 491
diff changeset
   534
        ])
ddd13dadf6a8 pvl.hosts.dhcp: test non-dhcp hosts and owner comments
Tero Marttila <tero.marttila@aalto.fi>
parents: 491
diff changeset
   535
ddd13dadf6a8 pvl.hosts.dhcp: test non-dhcp hosts and owner comments
Tero Marttila <tero.marttila@aalto.fi>
parents: 491
diff changeset
   536
    def testHostStatic(self):
ddd13dadf6a8 pvl.hosts.dhcp: test non-dhcp hosts and owner comments
Tero Marttila <tero.marttila@aalto.fi>
parents: 491
diff changeset
   537
        host = Host.build('foo', 'test',
ddd13dadf6a8 pvl.hosts.dhcp: test non-dhcp hosts and owner comments
Tero Marttila <tero.marttila@aalto.fi>
parents: 491
diff changeset
   538
                ip          = '192.0.2.1',
ddd13dadf6a8 pvl.hosts.dhcp: test non-dhcp hosts and owner comments
Tero Marttila <tero.marttila@aalto.fi>
parents: 491
diff changeset
   539
        )
ddd13dadf6a8 pvl.hosts.dhcp: test non-dhcp hosts and owner comments
Tero Marttila <tero.marttila@aalto.fi>
parents: 491
diff changeset
   540
ddd13dadf6a8 pvl.hosts.dhcp: test non-dhcp hosts and owner comments
Tero Marttila <tero.marttila@aalto.fi>
parents: 491
diff changeset
   541
        self.assertBlocksEqual(list(dhcp.dhcp_host(host)), [
ddd13dadf6a8 pvl.hosts.dhcp: test non-dhcp hosts and owner comments
Tero Marttila <tero.marttila@aalto.fi>
parents: 491
diff changeset
   542
479
1e68e3a30b51 pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents: 477
diff changeset
   543
        ])
1e68e3a30b51 pvl.hosts.dhcp: split out of script, refactor using pvl.dhcp.config, and test
Tero Marttila <tero.marttila@aalto.fi>
parents: 477
diff changeset
   544
480
7e44854e85d4 README and test host boot= and dynamic ip=
Tero Marttila <tero.marttila@aalto.fi>
parents: 479
diff changeset
   545
    def testHostDynamic(self):
7e44854e85d4 README and test host boot= and dynamic ip=
Tero Marttila <tero.marttila@aalto.fi>
parents: 479
diff changeset
   546
        host = Host.build('foo', 'test',
7e44854e85d4 README and test host boot= and dynamic ip=
Tero Marttila <tero.marttila@aalto.fi>
parents: 479
diff changeset
   547
                ethernet    = '00:11:22:33:44:55',
7e44854e85d4 README and test host boot= and dynamic ip=
Tero Marttila <tero.marttila@aalto.fi>
parents: 479
diff changeset
   548
        )
7e44854e85d4 README and test host boot= and dynamic ip=
Tero Marttila <tero.marttila@aalto.fi>
parents: 479
diff changeset
   549
7e44854e85d4 README and test host boot= and dynamic ip=
Tero Marttila <tero.marttila@aalto.fi>
parents: 479
diff changeset
   550
        self.assertBlocksEqual(list(dhcp.dhcp_host(host)), [
7e44854e85d4 README and test host boot= and dynamic ip=
Tero Marttila <tero.marttila@aalto.fi>
parents: 479
diff changeset
   551
            (('host', 'foo'), [
7e44854e85d4 README and test host boot= and dynamic ip=
Tero Marttila <tero.marttila@aalto.fi>
parents: 479
diff changeset
   552
                ('option', 'host-name', "foo"),
7e44854e85d4 README and test host boot= and dynamic ip=
Tero Marttila <tero.marttila@aalto.fi>
parents: 479
diff changeset
   553
                ('hardware', 'ethernet', '00:11:22:33:44:55'),
7e44854e85d4 README and test host boot= and dynamic ip=
Tero Marttila <tero.marttila@aalto.fi>
parents: 479
diff changeset
   554
            ], None)
7e44854e85d4 README and test host boot= and dynamic ip=
Tero Marttila <tero.marttila@aalto.fi>
parents: 479
diff changeset
   555
        ])
7e44854e85d4 README and test host boot= and dynamic ip=
Tero Marttila <tero.marttila@aalto.fi>
parents: 479
diff changeset
   556
7e44854e85d4 README and test host boot= and dynamic ip=
Tero Marttila <tero.marttila@aalto.fi>
parents: 479
diff changeset
   557
    def testHostBoot(self):
491
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   558
        hosts = [
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   559
                Host.build('foo1', 'test',
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   560
                        ethernet    = '00:11:22:33:44:55',
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   561
                        boot        = 'boot.lan:debian/wheezy/pxelinux.0',
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   562
                ),
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   563
                Host.build('foo2', 'test',
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   564
                        ethernet    = '00:11:22:33:44:55',
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   565
                        boot        = 'boot.lan:',
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   566
                ),
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   567
                Host.build('foo3', 'test',
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   568
                        ethernet    = '00:11:22:33:44:55',
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   569
                        boot        = '/debian/wheezy/pxelinux.0',
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   570
                ),
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   571
        ]
480
7e44854e85d4 README and test host boot= and dynamic ip=
Tero Marttila <tero.marttila@aalto.fi>
parents: 479
diff changeset
   572
491
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   573
        self.assertBlocksEqual(list(dhcp.dhcp_hosts(hosts)), [
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   574
            (('host', 'foo1'), [
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   575
                ('option', 'host-name', "foo1"),
480
7e44854e85d4 README and test host boot= and dynamic ip=
Tero Marttila <tero.marttila@aalto.fi>
parents: 479
diff changeset
   576
                ('hardware', 'ethernet', '00:11:22:33:44:55'),
7e44854e85d4 README and test host boot= and dynamic ip=
Tero Marttila <tero.marttila@aalto.fi>
parents: 479
diff changeset
   577
                ('next-server', 'boot.lan'),
7e44854e85d4 README and test host boot= and dynamic ip=
Tero Marttila <tero.marttila@aalto.fi>
parents: 479
diff changeset
   578
                ('filename', 'debian/wheezy/pxelinux.0'),
491
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   579
            ], None),
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   580
            (('host', 'foo2'), [
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   581
                ('option', 'host-name', "foo2"),
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   582
                ('hardware', 'ethernet', '00:11:22:33:44:55'),
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   583
                ('next-server', 'boot.lan'),
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   584
            ], None),
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   585
            (('host', 'foo3'), [
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   586
                ('option', 'host-name', "foo3"),
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   587
                ('hardware', 'ethernet', '00:11:22:33:44:55'),
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   588
                ('filename', 'debian/wheezy/pxelinux.0'),
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   589
            ], None),
480
7e44854e85d4 README and test host boot= and dynamic ip=
Tero Marttila <tero.marttila@aalto.fi>
parents: 479
diff changeset
   590
        ])
7e44854e85d4 README and test host boot= and dynamic ip=
Tero Marttila <tero.marttila@aalto.fi>
parents: 479
diff changeset
   591
483
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   592
    def testHosts(self):
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   593
        hosts = [
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   594
                Host.build('foo', 'test',
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   595
                        ip          = '192.0.2.1',
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   596
                        ethernet    = '00:11:22:33:44:55',
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   597
                ),
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   598
                Host.build('bar', 'test',
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   599
                        ip          = '192.0.2.2',
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   600
                        ethernet    = '01:23:45:67:89:ab',
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   601
                ),
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   602
        ]
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   603
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   604
        self.assertBlocksEqual(list(dhcp.dhcp_hosts(hosts)), [
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   605
            (('host', 'foo'), [
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   606
                ('option', 'host-name', "foo"),
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   607
                ('fixed-address', '192.0.2.1'),
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   608
                ('hardware', 'ethernet', '00:11:22:33:44:55'),
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   609
            ], None),
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   610
            (('host', 'bar'), [
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   611
                ('option', 'host-name', "bar"),
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   612
                ('fixed-address', '192.0.2.2'),
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   613
                ('hardware', 'ethernet', '01:23:45:67:89:ab'),
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   614
            ], None),
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   615
        ])
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   616
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   617
    def testHostConflict(self):
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   618
        hosts = [
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   619
                Host.build('foo', 'test1',
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   620
                        ethernet    = '00:11:22:33:44:55',
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   621
                ),
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   622
                Host.build('foo', 'test2',
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   623
                        ethernet    = '01:23:45:67:89:ab',
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   624
                ),
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   625
        ]
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   626
        
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   627
        with self.assertRaises(dhcp.HostDHCPError):
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   628
            list(dhcp.dhcp_hosts(hosts))
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   629
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   630
    def testHostMultinet(self):
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   631
        hosts = [
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   632
                Host.build('foo', 'test1',
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   633
                    ip              = '192.0.1.1',
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   634
                    ethernet        = { 'eth1': '00:11:22:33:44:55' },
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   635
                ),
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   636
                Host.build('foo', 'test2',
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   637
                    ip              = '192.0.2.1',
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   638
                    ethernet        = { 'eth2': '01:23:45:67:89:ab' },
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   639
                ),
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   640
        ]
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   641
        
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   642
        self.assertBlocksEqual(list(dhcp.dhcp_hosts(hosts)), [
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   643
                (('host', 'foo-eth1'), [
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   644
                    ('option', 'host-name', "foo"),
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   645
                    ('fixed-address', '192.0.1.1'),
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   646
                    ('hardware', 'ethernet', '00:11:22:33:44:55'),
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   647
                ], None),
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   648
                (('host', 'foo-eth2'), [
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   649
                    ('option', 'host-name', "foo"),
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   650
                    ('fixed-address', '192.0.2.1'),
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   651
                    ('hardware', 'ethernet', '01:23:45:67:89:ab'),
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   652
                ], None),
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   653
        ])
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   654
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   655
440
1d755df7bf97 pvl.hosts: refactor as a package; cleanup pvl.hosts.config with some basic tests
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   656
if __name__ == '__main__':
1d755df7bf97 pvl.hosts: refactor as a package; cleanup pvl.hosts.config with some basic tests
Tero Marttila <tero.marttila@aalto.fi>
parents:
diff changeset
   657
    unittest.main()