pvl/hosts/tests.py
author Tero Marttila <terom@paivola.fi>
Mon, 09 Mar 2015 18:00:18 +0200
changeset 733 45bedeba92e5
parent 713 d5e2d1d9716a
child 739 5149c39f3dfc
permissions -rw-r--r--
pvl.hosts: rename Host.ip -> Host.ip4; support instanced ip.foo = ... for foo.host A .... sub-labels
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
669
83e9bff09a0b pvl.hosts.dhcp: update for pvl.dhcp.config
Tero Marttila <terom@paivola.fi>
parents: 663
diff changeset
     2
import itertools
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
     3
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
     4
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
     5
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
     6
from pvl.hosts import config, dhcp, zone
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
     7
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
     8
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
     9
447
6f0357759e9b pvl.hosts: fixup and document host expansion
Tero Marttila <tero.marttila@aalto.fi>
parents: 441
diff changeset
    10
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
    11
    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
    12
        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
    13
        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
    14
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
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
    16
    def setUp(self):
490
805645dbb9bb pvl.hosts.tests: cleanup use of options
Tero Marttila <tero.marttila@aalto.fi>
parents: 489
diff changeset
    17
        self.options = pvl.args.options(
805645dbb9bb pvl.hosts.tests: cleanup use of options
Tero Marttila <tero.marttila@aalto.fi>
parents: 489
diff changeset
    18
                hosts_charset   = 'utf-8',
805645dbb9bb pvl.hosts.tests: cleanup use of options
Tero Marttila <tero.marttila@aalto.fi>
parents: 489
diff changeset
    19
                hosts_domain    = None,
805645dbb9bb pvl.hosts.tests: cleanup use of options
Tero Marttila <tero.marttila@aalto.fi>
parents: 489
diff changeset
    20
                hosts_include   = None,
713
d5e2d1d9716a pvl.hosts.config: --hosts-include-trace to write out all included files
Tero Marttila <tero.marttila@aalto.fi>
parents: 700
diff changeset
    21
                hosts_include_trace = None,
490
805645dbb9bb pvl.hosts.tests: cleanup use of options
Tero Marttila <tero.marttila@aalto.fi>
parents: 489
diff changeset
    22
        )
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
    23
461
e3bddc5eeff5 pvl.hosts: test config.apply_host()
Tero Marttila <tero.marttila@aalto.fi>
parents: 451
diff changeset
    24
    def assertHostEqual(self, host, host_str, attrs):
e3bddc5eeff5 pvl.hosts: test config.apply_host()
Tero Marttila <tero.marttila@aalto.fi>
parents: 451
diff changeset
    25
        self.assertEquals(str(host), host_str)
e3bddc5eeff5 pvl.hosts: test config.apply_host()
Tero Marttila <tero.marttila@aalto.fi>
parents: 451
diff changeset
    26
e3bddc5eeff5 pvl.hosts: test config.apply_host()
Tero Marttila <tero.marttila@aalto.fi>
parents: 451
diff changeset
    27
        for attr, value in attrs.iteritems():
e3bddc5eeff5 pvl.hosts: test config.apply_host()
Tero Marttila <tero.marttila@aalto.fi>
parents: 451
diff changeset
    28
            self.assertEquals(getattr(host, attr), value)
e3bddc5eeff5 pvl.hosts: test config.apply_host()
Tero Marttila <tero.marttila@aalto.fi>
parents: 451
diff changeset
    29
447
6f0357759e9b pvl.hosts: fixup and document host expansion
Tero Marttila <tero.marttila@aalto.fi>
parents: 441
diff changeset
    30
    def assertHostsEqual(self, hosts, expected):
508
a47849709cbf pvl.hosts.test: fix assertHostsEqual to also compare len's
Tero Marttila <tero.marttila@aalto.fi>
parents: 507
diff changeset
    31
        hosts = list(hosts)
a47849709cbf pvl.hosts.test: fix assertHostsEqual to also compare len's
Tero Marttila <tero.marttila@aalto.fi>
parents: 507
diff changeset
    32
692
34f25380d0e7 pvl.hosts.config: support defaults for included hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 689
diff changeset
    33
        for host, expect in itertools.izip_longest(hosts, expected):
34f25380d0e7 pvl.hosts.config: support defaults for included hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 689
diff changeset
    34
            self.assertIsNotNone(host, expect)
34f25380d0e7 pvl.hosts.config: support defaults for included hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 689
diff changeset
    35
            self.assertIsNotNone(expect, host)
34f25380d0e7 pvl.hosts.config: support defaults for included hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 689
diff changeset
    36
            
447
6f0357759e9b pvl.hosts: fixup and document host expansion
Tero Marttila <tero.marttila@aalto.fi>
parents: 441
diff changeset
    37
            host_str, attrs = expect
441
f058fff1f272 pvl.hosts.hosts: fix sort_key()
Tero Marttila <tero.marttila@aalto.fi>
parents: 440
diff changeset
    38
461
e3bddc5eeff5 pvl.hosts: test config.apply_host()
Tero Marttila <tero.marttila@aalto.fi>
parents: 451
diff changeset
    39
            self.assertHostEqual(host, host_str, attrs)
508
a47849709cbf pvl.hosts.test: fix assertHostsEqual to also compare len's
Tero Marttila <tero.marttila@aalto.fi>
parents: 507
diff changeset
    40
461
e3bddc5eeff5 pvl.hosts: test config.apply_host()
Tero Marttila <tero.marttila@aalto.fi>
parents: 451
diff changeset
    41
    def testApplyHostConfigDict(self):
504
ee0a3dcacb95 pvl.hosts.config: refactor
Tero Marttila <tero.marttila@aalto.fi>
parents: 503
diff changeset
    42
        host = config.apply_host('foo', 'test', {
461
e3bddc5eeff5 pvl.hosts: test config.apply_host()
Tero Marttila <tero.marttila@aalto.fi>
parents: 451
diff changeset
    43
            '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
    44
        })
e3bddc5eeff5 pvl.hosts: test config.apply_host()
Tero Marttila <tero.marttila@aalto.fi>
parents: 451
diff changeset
    45
e3bddc5eeff5 pvl.hosts: test config.apply_host()
Tero Marttila <tero.marttila@aalto.fi>
parents: 451
diff changeset
    46
        self.assertHostEqual(host, 'foo@test', dict(
e3bddc5eeff5 pvl.hosts: test config.apply_host()
Tero Marttila <tero.marttila@aalto.fi>
parents: 451
diff changeset
    47
                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
    48
        ))
502
ac4e0f2df80c pvl.hosts.tests: test multi-value dicts for host
Tero Marttila <tero.marttila@aalto.fi>
parents: 501
diff changeset
    49
ac4e0f2df80c pvl.hosts.tests: test multi-value dicts for host
Tero Marttila <tero.marttila@aalto.fi>
parents: 501
diff changeset
    50
    def testApplyHostConfigDictMulti(self):
504
ee0a3dcacb95 pvl.hosts.config: refactor
Tero Marttila <tero.marttila@aalto.fi>
parents: 503
diff changeset
    51
        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
    52
            '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
    53
            '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
    54
        })
ac4e0f2df80c pvl.hosts.tests: test multi-value dicts for host
Tero Marttila <tero.marttila@aalto.fi>
parents: 501
diff changeset
    55
ac4e0f2df80c pvl.hosts.tests: test multi-value dicts for host
Tero Marttila <tero.marttila@aalto.fi>
parents: 501
diff changeset
    56
        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
    57
                ethernet    = {
ac4e0f2df80c pvl.hosts.tests: test multi-value dicts for host
Tero Marttila <tero.marttila@aalto.fi>
parents: 501
diff changeset
    58
                    '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
    59
                    '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
    60
                }
ac4e0f2df80c pvl.hosts.tests: test multi-value dicts for host
Tero Marttila <tero.marttila@aalto.fi>
parents: 501
diff changeset
    61
        ))
461
e3bddc5eeff5 pvl.hosts: test config.apply_host()
Tero Marttila <tero.marttila@aalto.fi>
parents: 451
diff changeset
    62
   
661
15946375b154 pvl.hosts.config: support ethernet = ... + ethernet.ethX = ...
Tero Marttila <terom@paivola.fi>
parents: 660
diff changeset
    63
    def testApplyHostsConfigErrorExtra(self):
15946375b154 pvl.hosts.config: support ethernet = ... + ethernet.ethX = ...
Tero Marttila <terom@paivola.fi>
parents: 660
diff changeset
    64
        host = config.apply_host('foo', 'test', {
15946375b154 pvl.hosts.config: support ethernet = ... + ethernet.ethX = ...
Tero Marttila <terom@paivola.fi>
parents: 660
diff changeset
    65
            'ethernet': '00:11:22:33:44:55',
15946375b154 pvl.hosts.config: support ethernet = ... + ethernet.ethX = ...
Tero Marttila <terom@paivola.fi>
parents: 660
diff changeset
    66
            'ethernet.eth1': '00:11:22:33:44:66',
15946375b154 pvl.hosts.config: support ethernet = ... + ethernet.ethX = ...
Tero Marttila <terom@paivola.fi>
parents: 660
diff changeset
    67
        })
15946375b154 pvl.hosts.config: support ethernet = ... + ethernet.ethX = ...
Tero Marttila <terom@paivola.fi>
parents: 660
diff changeset
    68
15946375b154 pvl.hosts.config: support ethernet = ... + ethernet.ethX = ...
Tero Marttila <terom@paivola.fi>
parents: 660
diff changeset
    69
        self.assertHostEqual(host, 'foo@test', dict(
15946375b154 pvl.hosts.config: support ethernet = ... + ethernet.ethX = ...
Tero Marttila <terom@paivola.fi>
parents: 660
diff changeset
    70
                ethernet    = {
15946375b154 pvl.hosts.config: support ethernet = ... + ethernet.ethX = ...
Tero Marttila <terom@paivola.fi>
parents: 660
diff changeset
    71
                    None:   '00:11:22:33:44:55',
15946375b154 pvl.hosts.config: support ethernet = ... + ethernet.ethX = ...
Tero Marttila <terom@paivola.fi>
parents: 660
diff changeset
    72
                    'eth1': '00:11:22:33:44:66',
15946375b154 pvl.hosts.config: support ethernet = ... + ethernet.ethX = ...
Tero Marttila <terom@paivola.fi>
parents: 660
diff changeset
    73
                }
15946375b154 pvl.hosts.config: support ethernet = ... + ethernet.ethX = ...
Tero Marttila <terom@paivola.fi>
parents: 660
diff changeset
    74
        ))
15946375b154 pvl.hosts.config: support ethernet = ... + ethernet.ethX = ...
Tero Marttila <terom@paivola.fi>
parents: 660
diff changeset
    75
 
447
6f0357759e9b pvl.hosts: fixup and document host expansion
Tero Marttila <tero.marttila@aalto.fi>
parents: 441
diff changeset
    76
501
41b362e6074b pvl.hosts.config: fix and test extensions
Tero Marttila <tero.marttila@aalto.fi>
parents: 497
diff changeset
    77
    def testApplyHostConfigExtensions(self):
504
ee0a3dcacb95 pvl.hosts.config: refactor
Tero Marttila <tero.marttila@aalto.fi>
parents: 503
diff changeset
    78
        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
    79
            'link:50':          'foo@test',
41b362e6074b pvl.hosts.config: fix and test extensions
Tero Marttila <tero.marttila@aalto.fi>
parents: 497
diff changeset
    80
            'link:uplink.49':   'bar@test',
41b362e6074b pvl.hosts.config: fix and test extensions
Tero Marttila <tero.marttila@aalto.fi>
parents: 497
diff changeset
    81
        })
41b362e6074b pvl.hosts.config: fix and test extensions
Tero Marttila <tero.marttila@aalto.fi>
parents: 497
diff changeset
    82
41b362e6074b pvl.hosts.config: fix and test extensions
Tero Marttila <tero.marttila@aalto.fi>
parents: 497
diff changeset
    83
        self.assertHostEqual(host, 'foo@test', dict(
41b362e6074b pvl.hosts.config: fix and test extensions
Tero Marttila <tero.marttila@aalto.fi>
parents: 497
diff changeset
    84
                extensions = {
41b362e6074b pvl.hosts.config: fix and test extensions
Tero Marttila <tero.marttila@aalto.fi>
parents: 497
diff changeset
    85
                    'link': {
41b362e6074b pvl.hosts.config: fix and test extensions
Tero Marttila <tero.marttila@aalto.fi>
parents: 497
diff changeset
    86
                        '50': 'foo@test',
41b362e6074b pvl.hosts.config: fix and test extensions
Tero Marttila <tero.marttila@aalto.fi>
parents: 497
diff changeset
    87
                        'uplink': { '49': 'bar@test' },
41b362e6074b pvl.hosts.config: fix and test extensions
Tero Marttila <tero.marttila@aalto.fi>
parents: 497
diff changeset
    88
                    },
41b362e6074b pvl.hosts.config: fix and test extensions
Tero Marttila <tero.marttila@aalto.fi>
parents: 497
diff changeset
    89
                },
41b362e6074b pvl.hosts.config: fix and test extensions
Tero Marttila <tero.marttila@aalto.fi>
parents: 497
diff changeset
    90
        ))
505
e5a76c404679 pvl.hosts.test: rearrange TestConfig test cases
Tero Marttila <tero.marttila@aalto.fi>
parents: 504
diff changeset
    91
   
e5a76c404679 pvl.hosts.test: rearrange TestConfig test cases
Tero Marttila <tero.marttila@aalto.fi>
parents: 504
diff changeset
    92
    def testApplyHostFqdn(self):
e5a76c404679 pvl.hosts.test: rearrange TestConfig test cases
Tero Marttila <tero.marttila@aalto.fi>
parents: 504
diff changeset
    93
        self.assertHostsEqual(config.apply_hosts('test', 'asdf@foo.test', { }), [
e5a76c404679 pvl.hosts.test: rearrange TestConfig test cases
Tero Marttila <tero.marttila@aalto.fi>
parents: 504
diff changeset
    94
                ('asdf@foo.test', dict()),
e5a76c404679 pvl.hosts.test: rearrange TestConfig test cases
Tero Marttila <tero.marttila@aalto.fi>
parents: 504
diff changeset
    95
        ])
501
41b362e6074b pvl.hosts.config: fix and test extensions
Tero Marttila <tero.marttila@aalto.fi>
parents: 497
diff changeset
    96
505
e5a76c404679 pvl.hosts.test: rearrange TestConfig test cases
Tero Marttila <tero.marttila@aalto.fi>
parents: 504
diff changeset
    97
        self.assertHostsEqual(config.apply_hosts('test', 'asdf.test2', { }), [
e5a76c404679 pvl.hosts.test: rearrange TestConfig test cases
Tero Marttila <tero.marttila@aalto.fi>
parents: 504
diff changeset
    98
                ('asdf.test2@', dict()),
e5a76c404679 pvl.hosts.test: rearrange TestConfig test cases
Tero Marttila <tero.marttila@aalto.fi>
parents: 504
diff changeset
    99
        ])
e5a76c404679 pvl.hosts.test: rearrange TestConfig test cases
Tero Marttila <tero.marttila@aalto.fi>
parents: 504
diff changeset
   100
e5a76c404679 pvl.hosts.test: rearrange TestConfig test cases
Tero Marttila <tero.marttila@aalto.fi>
parents: 504
diff changeset
   101
    def testApplyHostExpand(self):
733
45bedeba92e5 pvl.hosts: rename Host.ip -> Host.ip4; support instanced ip.foo = ... for foo.host A .... sub-labels
Tero Marttila <terom@paivola.fi>
parents: 713
diff changeset
   102
        self.assertHostsEqual(config.apply_hosts('test', 'asdf{1-3}', 
45bedeba92e5 pvl.hosts: rename Host.ip -> Host.ip4; support instanced ip.foo = ... for foo.host A .... sub-labels
Tero Marttila <terom@paivola.fi>
parents: 713
diff changeset
   103
                { 'ip': '10.100.100.$' }
45bedeba92e5 pvl.hosts: rename Host.ip -> Host.ip4; support instanced ip.foo = ... for foo.host A .... sub-labels
Tero Marttila <terom@paivola.fi>
parents: 713
diff changeset
   104
        ), [
45bedeba92e5 pvl.hosts: rename Host.ip -> Host.ip4; support instanced ip.foo = ... for foo.host A .... sub-labels
Tero Marttila <terom@paivola.fi>
parents: 713
diff changeset
   105
                ('asdf1@test', dict(ip4=ipaddr.IPAddress('10.100.100.1'))),
45bedeba92e5 pvl.hosts: rename Host.ip -> Host.ip4; support instanced ip.foo = ... for foo.host A .... sub-labels
Tero Marttila <terom@paivola.fi>
parents: 713
diff changeset
   106
                ('asdf2@test', dict(ip4=ipaddr.IPAddress('10.100.100.2'))),
45bedeba92e5 pvl.hosts: rename Host.ip -> Host.ip4; support instanced ip.foo = ... for foo.host A .... sub-labels
Tero Marttila <terom@paivola.fi>
parents: 713
diff changeset
   107
                ('asdf3@test', dict(ip4=ipaddr.IPAddress('10.100.100.3'))),
505
e5a76c404679 pvl.hosts.test: rearrange TestConfig test cases
Tero Marttila <tero.marttila@aalto.fi>
parents: 504
diff changeset
   108
        ])
e5a76c404679 pvl.hosts.test: rearrange TestConfig test cases
Tero Marttila <tero.marttila@aalto.fi>
parents: 504
diff changeset
   109
e5a76c404679 pvl.hosts.test: rearrange TestConfig test cases
Tero Marttila <tero.marttila@aalto.fi>
parents: 504
diff changeset
   110
    def testApplyHostsFileError(self):
e5a76c404679 pvl.hosts.test: rearrange TestConfig test cases
Tero Marttila <tero.marttila@aalto.fi>
parents: 504
diff changeset
   111
        with self.assertRaises(config.HostConfigError):
e5a76c404679 pvl.hosts.test: rearrange TestConfig test cases
Tero Marttila <tero.marttila@aalto.fi>
parents: 504
diff changeset
   112
            list(config.apply_hosts_files(self.options, ['nonexistant']))
e5a76c404679 pvl.hosts.test: rearrange TestConfig test cases
Tero Marttila <tero.marttila@aalto.fi>
parents: 504
diff changeset
   113
511
99043eab9140 pvl.hosts.config: change nested domains to be relative to parent domain, not absolute
Tero Marttila <tero.marttila@aalto.fi>
parents: 510
diff changeset
   114
    def testApplyHostsConfig(self):
505
e5a76c404679 pvl.hosts.test: rearrange TestConfig test cases
Tero Marttila <tero.marttila@aalto.fi>
parents: 504
diff changeset
   115
        conf_file = ConfFile('test', """
e5a76c404679 pvl.hosts.test: rearrange TestConfig test cases
Tero Marttila <tero.marttila@aalto.fi>
parents: 504
diff changeset
   116
[foo]
e5a76c404679 pvl.hosts.test: rearrange TestConfig test cases
Tero Marttila <tero.marttila@aalto.fi>
parents: 504
diff changeset
   117
    ip = 127.0.0.1
e5a76c404679 pvl.hosts.test: rearrange TestConfig test cases
Tero Marttila <tero.marttila@aalto.fi>
parents: 504
diff changeset
   118
e5a76c404679 pvl.hosts.test: rearrange TestConfig test cases
Tero Marttila <tero.marttila@aalto.fi>
parents: 504
diff changeset
   119
[bar]
e5a76c404679 pvl.hosts.test: rearrange TestConfig test cases
Tero Marttila <tero.marttila@aalto.fi>
parents: 504
diff changeset
   120
    ip = 127.0.0.2
e5a76c404679 pvl.hosts.test: rearrange TestConfig test cases
Tero Marttila <tero.marttila@aalto.fi>
parents: 504
diff changeset
   121
        """)
511
99043eab9140 pvl.hosts.config: change nested domains to be relative to parent domain, not absolute
Tero Marttila <tero.marttila@aalto.fi>
parents: 510
diff changeset
   122
        
99043eab9140 pvl.hosts.config: change nested domains to be relative to parent domain, not absolute
Tero Marttila <tero.marttila@aalto.fi>
parents: 510
diff changeset
   123
        self.assertHostsEqual(config.apply_hosts_config(self.options, conf_file), [
733
45bedeba92e5 pvl.hosts: rename Host.ip -> Host.ip4; support instanced ip.foo = ... for foo.host A .... sub-labels
Tero Marttila <terom@paivola.fi>
parents: 713
diff changeset
   124
                ('foo@test', dict(ip4=ipaddr.IPAddress('127.0.0.1'))),
45bedeba92e5 pvl.hosts: rename Host.ip -> Host.ip4; support instanced ip.foo = ... for foo.host A .... sub-labels
Tero Marttila <terom@paivola.fi>
parents: 713
diff changeset
   125
                ('bar@test', dict(ip4=ipaddr.IPAddress('127.0.0.2'))),
511
99043eab9140 pvl.hosts.config: change nested domains to be relative to parent domain, not absolute
Tero Marttila <tero.marttila@aalto.fi>
parents: 510
diff changeset
   126
        ])
505
e5a76c404679 pvl.hosts.test: rearrange TestConfig test cases
Tero Marttila <tero.marttila@aalto.fi>
parents: 504
diff changeset
   127
511
99043eab9140 pvl.hosts.config: change nested domains to be relative to parent domain, not absolute
Tero Marttila <tero.marttila@aalto.fi>
parents: 510
diff changeset
   128
    def testApplyHostsConfigNested(self):
99043eab9140 pvl.hosts.config: change nested domains to be relative to parent domain, not absolute
Tero Marttila <tero.marttila@aalto.fi>
parents: 510
diff changeset
   129
        conf_file = ConfFile('test', """
99043eab9140 pvl.hosts.config: change nested domains to be relative to parent domain, not absolute
Tero Marttila <tero.marttila@aalto.fi>
parents: 510
diff changeset
   130
[asdf]
99043eab9140 pvl.hosts.config: change nested domains to be relative to parent domain, not absolute
Tero Marttila <tero.marttila@aalto.fi>
parents: 510
diff changeset
   131
    [[foo]]
99043eab9140 pvl.hosts.config: change nested domains to be relative to parent domain, not absolute
Tero Marttila <tero.marttila@aalto.fi>
parents: 510
diff changeset
   132
        ip = 127.0.0.1
99043eab9140 pvl.hosts.config: change nested domains to be relative to parent domain, not absolute
Tero Marttila <tero.marttila@aalto.fi>
parents: 510
diff changeset
   133
99043eab9140 pvl.hosts.config: change nested domains to be relative to parent domain, not absolute
Tero Marttila <tero.marttila@aalto.fi>
parents: 510
diff changeset
   134
[quux]
99043eab9140 pvl.hosts.config: change nested domains to be relative to parent domain, not absolute
Tero Marttila <tero.marttila@aalto.fi>
parents: 510
diff changeset
   135
    [[bar]]
99043eab9140 pvl.hosts.config: change nested domains to be relative to parent domain, not absolute
Tero Marttila <tero.marttila@aalto.fi>
parents: 510
diff changeset
   136
        ip = 127.0.0.2
99043eab9140 pvl.hosts.config: change nested domains to be relative to parent domain, not absolute
Tero Marttila <tero.marttila@aalto.fi>
parents: 510
diff changeset
   137
        """)
99043eab9140 pvl.hosts.config: change nested domains to be relative to parent domain, not absolute
Tero Marttila <tero.marttila@aalto.fi>
parents: 510
diff changeset
   138
99043eab9140 pvl.hosts.config: change nested domains to be relative to parent domain, not absolute
Tero Marttila <tero.marttila@aalto.fi>
parents: 510
diff changeset
   139
        self.assertHostsEqual(config.apply_hosts_config(self.options, conf_file), [
733
45bedeba92e5 pvl.hosts: rename Host.ip -> Host.ip4; support instanced ip.foo = ... for foo.host A .... sub-labels
Tero Marttila <terom@paivola.fi>
parents: 713
diff changeset
   140
                ('foo@asdf.test', dict(ip4=ipaddr.IPAddress('127.0.0.1'))),
45bedeba92e5 pvl.hosts: rename Host.ip -> Host.ip4; support instanced ip.foo = ... for foo.host A .... sub-labels
Tero Marttila <terom@paivola.fi>
parents: 713
diff changeset
   141
                ('bar@quux.test', dict(ip4=ipaddr.IPAddress('127.0.0.2'))),
511
99043eab9140 pvl.hosts.config: change nested domains to be relative to parent domain, not absolute
Tero Marttila <tero.marttila@aalto.fi>
parents: 510
diff changeset
   142
        ])
505
e5a76c404679 pvl.hosts.test: rearrange TestConfig test cases
Tero Marttila <tero.marttila@aalto.fi>
parents: 504
diff changeset
   143
689
c258e3ff6d32 pvl.hosts: update boot= to support split boot.next-server= boot.filename=, which enables inheriting defaults
Tero Marttila <tero.marttila@aalto.fi>
parents: 688
diff changeset
   144
    def testHostsConfigDdefaults(self):
c258e3ff6d32 pvl.hosts: update boot= to support split boot.next-server= boot.filename=, which enables inheriting defaults
Tero Marttila <tero.marttila@aalto.fi>
parents: 688
diff changeset
   145
        hosts = config.apply_hosts_config(self.options, ConfFile('test', """
c258e3ff6d32 pvl.hosts: update boot= to support split boot.next-server= boot.filename=, which enables inheriting defaults
Tero Marttila <tero.marttila@aalto.fi>
parents: 688
diff changeset
   146
boot.next-server = boot.lan
c258e3ff6d32 pvl.hosts: update boot= to support split boot.next-server= boot.filename=, which enables inheriting defaults
Tero Marttila <tero.marttila@aalto.fi>
parents: 688
diff changeset
   147
c258e3ff6d32 pvl.hosts: update boot= to support split boot.next-server= boot.filename=, which enables inheriting defaults
Tero Marttila <tero.marttila@aalto.fi>
parents: 688
diff changeset
   148
[foo]
c258e3ff6d32 pvl.hosts: update boot= to support split boot.next-server= boot.filename=, which enables inheriting defaults
Tero Marttila <tero.marttila@aalto.fi>
parents: 688
diff changeset
   149
    ip = 192.0.2.1
c258e3ff6d32 pvl.hosts: update boot= to support split boot.next-server= boot.filename=, which enables inheriting defaults
Tero Marttila <tero.marttila@aalto.fi>
parents: 688
diff changeset
   150
    ethernet.eth0 = 00:11:22:33:44:55
c258e3ff6d32 pvl.hosts: update boot= to support split boot.next-server= boot.filename=, which enables inheriting defaults
Tero Marttila <tero.marttila@aalto.fi>
parents: 688
diff changeset
   151
    boot.filename = /pxelinux.0
c258e3ff6d32 pvl.hosts: update boot= to support split boot.next-server= boot.filename=, which enables inheriting defaults
Tero Marttila <tero.marttila@aalto.fi>
parents: 688
diff changeset
   152
        """))
c258e3ff6d32 pvl.hosts: update boot= to support split boot.next-server= boot.filename=, which enables inheriting defaults
Tero Marttila <tero.marttila@aalto.fi>
parents: 688
diff changeset
   153
        
c258e3ff6d32 pvl.hosts: update boot= to support split boot.next-server= boot.filename=, which enables inheriting defaults
Tero Marttila <tero.marttila@aalto.fi>
parents: 688
diff changeset
   154
        self.assertHostsEqual(hosts, [
c258e3ff6d32 pvl.hosts: update boot= to support split boot.next-server= boot.filename=, which enables inheriting defaults
Tero Marttila <tero.marttila@aalto.fi>
parents: 688
diff changeset
   155
                ('foo@test', dict(
733
45bedeba92e5 pvl.hosts: rename Host.ip -> Host.ip4; support instanced ip.foo = ... for foo.host A .... sub-labels
Tero Marttila <terom@paivola.fi>
parents: 713
diff changeset
   156
                    ip4         = ipaddr.IPAddress('192.0.2.1'),
689
c258e3ff6d32 pvl.hosts: update boot= to support split boot.next-server= boot.filename=, which enables inheriting defaults
Tero Marttila <tero.marttila@aalto.fi>
parents: 688
diff changeset
   157
                    ethernet    = { 'eth0': '00:11:22:33:44:55' },
c258e3ff6d32 pvl.hosts: update boot= to support split boot.next-server= boot.filename=, which enables inheriting defaults
Tero Marttila <tero.marttila@aalto.fi>
parents: 688
diff changeset
   158
                    boot        = { 'next-server': 'boot.lan', 'filename': '/pxelinux.0' },
c258e3ff6d32 pvl.hosts: update boot= to support split boot.next-server= boot.filename=, which enables inheriting defaults
Tero Marttila <tero.marttila@aalto.fi>
parents: 688
diff changeset
   159
                )),
c258e3ff6d32 pvl.hosts: update boot= to support split boot.next-server= boot.filename=, which enables inheriting defaults
Tero Marttila <tero.marttila@aalto.fi>
parents: 688
diff changeset
   160
        ])
c258e3ff6d32 pvl.hosts: update boot= to support split boot.next-server= boot.filename=, which enables inheriting defaults
Tero Marttila <tero.marttila@aalto.fi>
parents: 688
diff changeset
   161
c258e3ff6d32 pvl.hosts: update boot= to support split boot.next-server= boot.filename=, which enables inheriting defaults
Tero Marttila <tero.marttila@aalto.fi>
parents: 688
diff changeset
   162
c258e3ff6d32 pvl.hosts: update boot= to support split boot.next-server= boot.filename=, which enables inheriting defaults
Tero Marttila <tero.marttila@aalto.fi>
parents: 688
diff changeset
   163
 
507
e3a32f4dff54 pvl.hosts.config: document includes, fix include-only zone, and test
Tero Marttila <tero.marttila@aalto.fi>
parents: 505
diff changeset
   164
    def testApplyIncludes(self):
521
06792c78067e setup and document etc/zone/ structure
Tero Marttila <tero.marttila@aalto.fi>
parents: 518
diff changeset
   165
        self.assertHostsEqual(config.apply_hosts_files(self.options, ['etc/hosts/test']), [
663
8a9de457bb59 pvl.hosts.config: sort directory items for stable host ordering
Tero Marttila <terom@paivola.fi>
parents: 661
diff changeset
   166
                ('bar@test', dict(
733
45bedeba92e5 pvl.hosts: rename Host.ip -> Host.ip4; support instanced ip.foo = ... for foo.host A .... sub-labels
Tero Marttila <terom@paivola.fi>
parents: 713
diff changeset
   167
                    ip4         = ipaddr.IPAddress('192.0.2.2'),
663
8a9de457bb59 pvl.hosts.config: sort directory items for stable host ordering
Tero Marttila <terom@paivola.fi>
parents: 661
diff changeset
   168
                )),
513
3b45b4fd5102 pvl.hosts.config: revert apply_hosts_directory to treat directory contents as a flat namespace without any parent=basname(directory) magic
Tero Marttila <tero.marttila@aalto.fi>
parents: 511
diff changeset
   169
                ('foo@test', dict(
733
45bedeba92e5 pvl.hosts: rename Host.ip -> Host.ip4; support instanced ip.foo = ... for foo.host A .... sub-labels
Tero Marttila <terom@paivola.fi>
parents: 713
diff changeset
   170
                    ip4         = ipaddr.IPAddress('192.0.2.1'),
510
368a568412ed pvl.hosts.config: support direct directory hosts, using the directory name as the parent
Tero Marttila <tero.marttila@aalto.fi>
parents: 509
diff changeset
   171
                )),
368a568412ed pvl.hosts.config: support direct directory hosts, using the directory name as the parent
Tero Marttila <tero.marttila@aalto.fi>
parents: 509
diff changeset
   172
        ])
368a568412ed pvl.hosts.config: support direct directory hosts, using the directory name as the parent
Tero Marttila <tero.marttila@aalto.fi>
parents: 509
diff changeset
   173
692
34f25380d0e7 pvl.hosts.config: support defaults for included hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 689
diff changeset
   174
    def testApplyIncludesDefaults(self):
34f25380d0e7 pvl.hosts.config: support defaults for included hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 689
diff changeset
   175
        self.assertHostsEqual(config.apply_hosts_config(self.options, ConfFile('test', """
34f25380d0e7 pvl.hosts.config: support defaults for included hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 689
diff changeset
   176
boot.next-server = boot.lan
34f25380d0e7 pvl.hosts.config: support defaults for included hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 689
diff changeset
   177
34f25380d0e7 pvl.hosts.config: support defaults for included hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 689
diff changeset
   178
include = etc/hosts/test
34f25380d0e7 pvl.hosts.config: support defaults for included hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 689
diff changeset
   179
        """)), [
34f25380d0e7 pvl.hosts.config: support defaults for included hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 689
diff changeset
   180
                ('bar@test', dict(
733
45bedeba92e5 pvl.hosts: rename Host.ip -> Host.ip4; support instanced ip.foo = ... for foo.host A .... sub-labels
Tero Marttila <terom@paivola.fi>
parents: 713
diff changeset
   181
                    ip4         = ipaddr.IPAddress('192.0.2.2'),
692
34f25380d0e7 pvl.hosts.config: support defaults for included hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 689
diff changeset
   182
                )),
34f25380d0e7 pvl.hosts.config: support defaults for included hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 689
diff changeset
   183
                ('foo@test', dict(
733
45bedeba92e5 pvl.hosts: rename Host.ip -> Host.ip4; support instanced ip.foo = ... for foo.host A .... sub-labels
Tero Marttila <terom@paivola.fi>
parents: 713
diff changeset
   184
                    ip4         = ipaddr.IPAddress('192.0.2.1'),
692
34f25380d0e7 pvl.hosts.config: support defaults for included hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 689
diff changeset
   185
                )),
34f25380d0e7 pvl.hosts.config: support defaults for included hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 689
diff changeset
   186
        ])
34f25380d0e7 pvl.hosts.config: support defaults for included hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 689
diff changeset
   187
34f25380d0e7 pvl.hosts.config: support defaults for included hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 689
diff changeset
   188
518
cd152d6bad32 pvl.hosts.config: test and fix includes path
Tero Marttila <tero.marttila@aalto.fi>
parents: 513
diff changeset
   189
    def testApplyIncludePath(self):
521
06792c78067e setup and document etc/zone/ structure
Tero Marttila <tero.marttila@aalto.fi>
parents: 518
diff changeset
   190
        self.options.hosts_include = 'etc/hosts'
713
d5e2d1d9716a pvl.hosts.config: --hosts-include-trace to write out all included files
Tero Marttila <tero.marttila@aalto.fi>
parents: 700
diff changeset
   191
        include_trace = [ ]
d5e2d1d9716a pvl.hosts.config: --hosts-include-trace to write out all included files
Tero Marttila <tero.marttila@aalto.fi>
parents: 700
diff changeset
   192
d5e2d1d9716a pvl.hosts.config: --hosts-include-trace to write out all included files
Tero Marttila <tero.marttila@aalto.fi>
parents: 700
diff changeset
   193
        hosts = list(config.apply_hosts_files(self.options, ['etc/zones/forward/test'],
d5e2d1d9716a pvl.hosts.config: --hosts-include-trace to write out all included files
Tero Marttila <tero.marttila@aalto.fi>
parents: 700
diff changeset
   194
            include_trace   = include_trace,
d5e2d1d9716a pvl.hosts.config: --hosts-include-trace to write out all included files
Tero Marttila <tero.marttila@aalto.fi>
parents: 700
diff changeset
   195
        ))
d5e2d1d9716a pvl.hosts.config: --hosts-include-trace to write out all included files
Tero Marttila <tero.marttila@aalto.fi>
parents: 700
diff changeset
   196
d5e2d1d9716a pvl.hosts.config: --hosts-include-trace to write out all included files
Tero Marttila <tero.marttila@aalto.fi>
parents: 700
diff changeset
   197
        self.assertHostsEqual(hosts, [
663
8a9de457bb59 pvl.hosts.config: sort directory items for stable host ordering
Tero Marttila <terom@paivola.fi>
parents: 661
diff changeset
   198
                ('quux@asdf.test', dict(
733
45bedeba92e5 pvl.hosts: rename Host.ip -> Host.ip4; support instanced ip.foo = ... for foo.host A .... sub-labels
Tero Marttila <terom@paivola.fi>
parents: 713
diff changeset
   199
                    ip4         = ipaddr.IPAddress('192.0.2.5'),
518
cd152d6bad32 pvl.hosts.config: test and fix includes path
Tero Marttila <tero.marttila@aalto.fi>
parents: 513
diff changeset
   200
                )),
cd152d6bad32 pvl.hosts.config: test and fix includes path
Tero Marttila <tero.marttila@aalto.fi>
parents: 513
diff changeset
   201
                ('bar@test', dict(
733
45bedeba92e5 pvl.hosts: rename Host.ip -> Host.ip4; support instanced ip.foo = ... for foo.host A .... sub-labels
Tero Marttila <terom@paivola.fi>
parents: 713
diff changeset
   202
                    ip4         = ipaddr.IPAddress('192.0.2.2'),
518
cd152d6bad32 pvl.hosts.config: test and fix includes path
Tero Marttila <tero.marttila@aalto.fi>
parents: 513
diff changeset
   203
                )),
663
8a9de457bb59 pvl.hosts.config: sort directory items for stable host ordering
Tero Marttila <terom@paivola.fi>
parents: 661
diff changeset
   204
                ('foo@test', dict(
733
45bedeba92e5 pvl.hosts: rename Host.ip -> Host.ip4; support instanced ip.foo = ... for foo.host A .... sub-labels
Tero Marttila <terom@paivola.fi>
parents: 713
diff changeset
   205
                    ip4         = ipaddr.IPAddress('192.0.2.1'),
660
5461fb492345 pvl.hosts.tests: tweak etc/zones/forward/test ordering..
Tero Marttila <terom@paivola.fi>
parents: 521
diff changeset
   206
                )),
518
cd152d6bad32 pvl.hosts.config: test and fix includes path
Tero Marttila <tero.marttila@aalto.fi>
parents: 513
diff changeset
   207
        ])
cd152d6bad32 pvl.hosts.config: test and fix includes path
Tero Marttila <tero.marttila@aalto.fi>
parents: 513
diff changeset
   208
713
d5e2d1d9716a pvl.hosts.config: --hosts-include-trace to write out all included files
Tero Marttila <tero.marttila@aalto.fi>
parents: 700
diff changeset
   209
        self.assertEqual(include_trace, [
d5e2d1d9716a pvl.hosts.config: --hosts-include-trace to write out all included files
Tero Marttila <tero.marttila@aalto.fi>
parents: 700
diff changeset
   210
            'etc/zones/forward/test',
d5e2d1d9716a pvl.hosts.config: --hosts-include-trace to write out all included files
Tero Marttila <tero.marttila@aalto.fi>
parents: 700
diff changeset
   211
            'etc/zones/forward/test/asdf.test',
d5e2d1d9716a pvl.hosts.config: --hosts-include-trace to write out all included files
Tero Marttila <tero.marttila@aalto.fi>
parents: 700
diff changeset
   212
            'etc/zones/forward/test/test',
d5e2d1d9716a pvl.hosts.config: --hosts-include-trace to write out all included files
Tero Marttila <tero.marttila@aalto.fi>
parents: 700
diff changeset
   213
            'etc/hosts/test.d/',
d5e2d1d9716a pvl.hosts.config: --hosts-include-trace to write out all included files
Tero Marttila <tero.marttila@aalto.fi>
parents: 700
diff changeset
   214
            'etc/hosts/test.d/bar',
d5e2d1d9716a pvl.hosts.config: --hosts-include-trace to write out all included files
Tero Marttila <tero.marttila@aalto.fi>
parents: 700
diff changeset
   215
            'etc/hosts/test.d/foo',
d5e2d1d9716a pvl.hosts.config: --hosts-include-trace to write out all included files
Tero Marttila <tero.marttila@aalto.fi>
parents: 700
diff changeset
   216
        ])
d5e2d1d9716a pvl.hosts.config: --hosts-include-trace to write out all included files
Tero Marttila <tero.marttila@aalto.fi>
parents: 700
diff changeset
   217
505
e5a76c404679 pvl.hosts.test: rearrange TestConfig test cases
Tero Marttila <tero.marttila@aalto.fi>
parents: 504
diff changeset
   218
    def testApply(self):
513
3b45b4fd5102 pvl.hosts.config: revert apply_hosts_directory to treat directory contents as a flat namespace without any parent=basname(directory) magic
Tero Marttila <tero.marttila@aalto.fi>
parents: 511
diff changeset
   219
        self.assertHostsEqual(config.apply(self.options, ['etc/hosts/example.com']), [
3b45b4fd5102 pvl.hosts.config: revert apply_hosts_directory to treat directory contents as a flat namespace without any parent=basname(directory) magic
Tero Marttila <tero.marttila@aalto.fi>
parents: 511
diff changeset
   220
                ('foo@example.com', dict(
733
45bedeba92e5 pvl.hosts: rename Host.ip -> Host.ip4; support instanced ip.foo = ... for foo.host A .... sub-labels
Tero Marttila <terom@paivola.fi>
parents: 713
diff changeset
   221
                    ip4         = ipaddr.IPAddress('192.0.2.1'),
505
e5a76c404679 pvl.hosts.test: rearrange TestConfig test cases
Tero Marttila <tero.marttila@aalto.fi>
parents: 504
diff changeset
   222
                    ethernet    = {None: '00:11:22:33:44:55'},
e5a76c404679 pvl.hosts.test: rearrange TestConfig test cases
Tero Marttila <tero.marttila@aalto.fi>
parents: 504
diff changeset
   223
                )),
513
3b45b4fd5102 pvl.hosts.config: revert apply_hosts_directory to treat directory contents as a flat namespace without any parent=basname(directory) magic
Tero Marttila <tero.marttila@aalto.fi>
parents: 511
diff changeset
   224
                ('bar@example.com', dict(
733
45bedeba92e5 pvl.hosts: rename Host.ip -> Host.ip4; support instanced ip.foo = ... for foo.host A .... sub-labels
Tero Marttila <terom@paivola.fi>
parents: 713
diff changeset
   225
                    ip4         = ipaddr.IPAddress('192.0.2.2'),
505
e5a76c404679 pvl.hosts.test: rearrange TestConfig test cases
Tero Marttila <tero.marttila@aalto.fi>
parents: 504
diff changeset
   226
                    ethernet    = {None: '01:23:45:67:89:ab'},
e5a76c404679 pvl.hosts.test: rearrange TestConfig test cases
Tero Marttila <tero.marttila@aalto.fi>
parents: 504
diff changeset
   227
                )),
e5a76c404679 pvl.hosts.test: rearrange TestConfig test cases
Tero Marttila <tero.marttila@aalto.fi>
parents: 504
diff changeset
   228
        ])
501
41b362e6074b pvl.hosts.config: fix and test extensions
Tero Marttila <tero.marttila@aalto.fi>
parents: 497
diff changeset
   229
469
cd1f1b51f3a0 pvl.hosts.tests: split TestForwardZone/TestReverseZone using TestZoneMixin
Tero Marttila <tero.marttila@aalto.fi>
parents: 468
diff changeset
   230
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
   231
    def assertZoneEquals(self, rrs, expected):
688
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   232
        """
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   233
            Tests that the given list of ZoneRecords is equal to the given {(rr.name, rr.type): str(rr.data)} dict.
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   234
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   235
            Multiple records for the same name/type are gathered as a list. XXX: ordering
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   236
        """
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   237
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
   238
        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
   239
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
   240
        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
   241
            key = (rr.name.lower(), rr.type.upper())
688
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   242
            value = '\t'.join(rr.data)
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   243
            
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   244
            if key not in gather:
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   245
                gather[key] = value
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   246
            elif not isinstance(gather[key], list):
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   247
                gather[key] = [gather[key], value]
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   248
            else:
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   249
                gather[key].append(value)
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
   250
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
   251
        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
   252
469
cd1f1b51f3a0 pvl.hosts.tests: split TestForwardZone/TestReverseZone using TestZoneMixin
Tero Marttila <tero.marttila@aalto.fi>
parents: 468
diff changeset
   253
cd1f1b51f3a0 pvl.hosts.tests: split TestForwardZone/TestReverseZone using TestZoneMixin
Tero Marttila <tero.marttila@aalto.fi>
parents: 468
diff changeset
   254
class TestForwardZone(TestZoneMixin, unittest.TestCase):
cd1f1b51f3a0 pvl.hosts.tests: split TestForwardZone/TestReverseZone using TestZoneMixin
Tero Marttila <tero.marttila@aalto.fi>
parents: 468
diff changeset
   255
    def testHostOutOfOrigin(self):
504
ee0a3dcacb95 pvl.hosts.config: refactor
Tero Marttila <tero.marttila@aalto.fi>
parents: 503
diff changeset
   256
        h = Host.build('host', 'domain', 
ee0a3dcacb95 pvl.hosts.config: refactor
Tero Marttila <tero.marttila@aalto.fi>
parents: 503
diff changeset
   257
                ip  = '10.0.0.1',
ee0a3dcacb95 pvl.hosts.config: refactor
Tero Marttila <tero.marttila@aalto.fi>
parents: 503
diff changeset
   258
        )
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
   259
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
   260
        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
   261
464
f1d3dbf04ca3 pvl.hosts.zone: fix reverse= to be IPv4-only
Tero Marttila <tero.marttila@aalto.fi>
parents: 463
diff changeset
   262
    def testHostIP(self):
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   263
        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
   264
                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
   265
                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
   266
        )
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
   267
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
   268
        self.assertZoneEquals(zone.host_forward(h, 'domain'), {
688
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   269
            ('host', 'A'): '192.0.2.1',
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   270
            ('host', 'AAAA'): '2001:db8::c000:201',
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
   271
        })
465
133f14810eb5 pvl.hosts.zone: test forward= omit
Tero Marttila <tero.marttila@aalto.fi>
parents: 464
diff changeset
   272
    
466
ad9d512ec1e7 pvl.hosts.zone: test and fix alias=
Tero Marttila <tero.marttila@aalto.fi>
parents: 465
diff changeset
   273
    def testHostAlias(self):
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   274
        h = Host.build('host', 'domain',
466
ad9d512ec1e7 pvl.hosts.zone: test and fix alias=
Tero Marttila <tero.marttila@aalto.fi>
parents: 465
diff changeset
   275
                ip      = '192.0.2.1',
ad9d512ec1e7 pvl.hosts.zone: test and fix alias=
Tero Marttila <tero.marttila@aalto.fi>
parents: 465
diff changeset
   276
                alias   = 'test *.test',
ad9d512ec1e7 pvl.hosts.zone: test and fix alias=
Tero Marttila <tero.marttila@aalto.fi>
parents: 465
diff changeset
   277
        )
ad9d512ec1e7 pvl.hosts.zone: test and fix alias=
Tero Marttila <tero.marttila@aalto.fi>
parents: 465
diff changeset
   278
ad9d512ec1e7 pvl.hosts.zone: test and fix alias=
Tero Marttila <tero.marttila@aalto.fi>
parents: 465
diff changeset
   279
        self.assertEquals(h.alias, ['test', '*.test'])
ad9d512ec1e7 pvl.hosts.zone: test and fix alias=
Tero Marttila <tero.marttila@aalto.fi>
parents: 465
diff changeset
   280
ad9d512ec1e7 pvl.hosts.zone: test and fix alias=
Tero Marttila <tero.marttila@aalto.fi>
parents: 465
diff changeset
   281
        self.assertZoneEquals(zone.host_forward(h, 'domain'), {
688
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   282
            ('host', 'A'): '192.0.2.1',
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   283
            ('test', 'CNAME'): 'host',
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   284
            ('*.test', 'CNAME'): 'host',
466
ad9d512ec1e7 pvl.hosts.zone: test and fix alias=
Tero Marttila <tero.marttila@aalto.fi>
parents: 465
diff changeset
   285
        })
ad9d512ec1e7 pvl.hosts.zone: test and fix alias=
Tero Marttila <tero.marttila@aalto.fi>
parents: 465
diff changeset
   286
468
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   287
    def testHostAlias46(self):
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   288
        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
   289
                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
   290
                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
   291
                alias4  = 'test4',
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   292
                alias6  = 'test6',
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   293
        )
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   294
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   295
        self.assertZoneEquals(zone.host_forward(h, 'domain'), {
688
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   296
            ('host', 'A'): '192.0.2.1',
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   297
            ('host', 'AAAA'): '2001:db8::c000:201',
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   298
            ('test4', 'A'): '192.0.2.1',
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   299
            ('test6', 'AAAA'): '2001:db8::c000:201',
468
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   300
        })
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   301
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   302
    def testHostAlias4Missing(self):
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   303
        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
   304
                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
   305
                alias4  = 'test4',
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   306
                alias6  = 'test6',
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   307
        )
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   308
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   309
        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
   310
            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
   311
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   312
    def testHostAlias6Missing(self):
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   313
        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
   314
                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
   315
                alias4  = 'test4',
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   316
                alias6  = 'test6',
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   317
        )
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   318
3e7cb8dd5708 pvl.hosts.zone: raise HostZoneError on alias4/alias6 without ip/ip6
Tero Marttila <tero.marttila@aalto.fi>
parents: 467
diff changeset
   319
        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
   320
            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
   321
493
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   322
    def testHostFQDN(self):
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   323
        h = Host.build('host.example.net', None,
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   324
                ip          = '192.0.2.3',
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   325
        )
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   326
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   327
        self.assertZoneEquals(zone.host_forward(h, 'example.com'), {
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   328
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   329
        })
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   330
469
cd1f1b51f3a0 pvl.hosts.tests: split TestForwardZone/TestReverseZone using TestZoneMixin
Tero Marttila <tero.marttila@aalto.fi>
parents: 468
diff changeset
   331
    def testHostDelegate(self):
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   332
        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
   333
                forward = 'host.example.net',
cd1f1b51f3a0 pvl.hosts.tests: split TestForwardZone/TestReverseZone using TestZoneMixin
Tero Marttila <tero.marttila@aalto.fi>
parents: 468
diff changeset
   334
        )
cd1f1b51f3a0 pvl.hosts.tests: split TestForwardZone/TestReverseZone using TestZoneMixin
Tero Marttila <tero.marttila@aalto.fi>
parents: 468
diff changeset
   335
cd1f1b51f3a0 pvl.hosts.tests: split TestForwardZone/TestReverseZone using TestZoneMixin
Tero Marttila <tero.marttila@aalto.fi>
parents: 468
diff changeset
   336
        self.assertZoneEquals(zone.host_forward(h, 'example.com'), {
688
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   337
            ('host', 'CNAME'): 'host.example.net.',
469
cd1f1b51f3a0 pvl.hosts.tests: split TestForwardZone/TestReverseZone using TestZoneMixin
Tero Marttila <tero.marttila@aalto.fi>
parents: 468
diff changeset
   338
        })
cd1f1b51f3a0 pvl.hosts.tests: split TestForwardZone/TestReverseZone using TestZoneMixin
Tero Marttila <tero.marttila@aalto.fi>
parents: 468
diff changeset
   339
467
3bb00e5e79d3 pvl.hosts.zone: support combining forward= with alias=
Tero Marttila <tero.marttila@aalto.fi>
parents: 466
diff changeset
   340
    def testHostForwardAlias(self):
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   341
        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
   342
                forward = 'host.example.net',
3bb00e5e79d3 pvl.hosts.zone: support combining forward= with alias=
Tero Marttila <tero.marttila@aalto.fi>
parents: 466
diff changeset
   343
                alias   = 'test',
3bb00e5e79d3 pvl.hosts.zone: support combining forward= with alias=
Tero Marttila <tero.marttila@aalto.fi>
parents: 466
diff changeset
   344
        )
3bb00e5e79d3 pvl.hosts.zone: support combining forward= with alias=
Tero Marttila <tero.marttila@aalto.fi>
parents: 466
diff changeset
   345
3bb00e5e79d3 pvl.hosts.zone: support combining forward= with alias=
Tero Marttila <tero.marttila@aalto.fi>
parents: 466
diff changeset
   346
        self.assertZoneEquals(zone.host_forward(h, 'domain'), {
688
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   347
            ('host', 'CNAME'): 'host.example.net.',
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   348
            ('test', 'CNAME'): 'host',
467
3bb00e5e79d3 pvl.hosts.zone: support combining forward= with alias=
Tero Marttila <tero.marttila@aalto.fi>
parents: 466
diff changeset
   349
        })
466
ad9d512ec1e7 pvl.hosts.zone: test and fix alias=
Tero Marttila <tero.marttila@aalto.fi>
parents: 465
diff changeset
   350
470
ac334a55eebc pvl.hosts: fix location= and test forward records
Tero Marttila <tero.marttila@aalto.fi>
parents: 469
diff changeset
   351
    def testHostLocation(self):
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   352
        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
   353
                ip          = '192.0.2.1',
ac334a55eebc pvl.hosts: fix location= and test forward records
Tero Marttila <tero.marttila@aalto.fi>
parents: 469
diff changeset
   354
                location    = 'test',
ac334a55eebc pvl.hosts: fix location= and test forward records
Tero Marttila <tero.marttila@aalto.fi>
parents: 469
diff changeset
   355
        )
ac334a55eebc pvl.hosts: fix location= and test forward records
Tero Marttila <tero.marttila@aalto.fi>
parents: 469
diff changeset
   356
ac334a55eebc pvl.hosts: fix location= and test forward records
Tero Marttila <tero.marttila@aalto.fi>
parents: 469
diff changeset
   357
        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
   358
ac334a55eebc pvl.hosts: fix location= and test forward records
Tero Marttila <tero.marttila@aalto.fi>
parents: 469
diff changeset
   359
        self.assertZoneEquals(zone.host_forward(h, 'domain'), {
688
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   360
            ('host', 'A'): '192.0.2.1',
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   361
            ('test', 'CNAME'): 'host',
470
ac334a55eebc pvl.hosts: fix location= and test forward records
Tero Marttila <tero.marttila@aalto.fi>
parents: 469
diff changeset
   362
        })
471
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   363
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   364
    def testHostLocationDomain(self):
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   365
        h = Host.build('host', 'foo.domain',
471
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   366
                ip          = '192.0.2.1',
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   367
                location    = 'test@bar.domain',
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   368
        )
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   369
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   370
        self.assertEquals(h.location, ('test', 'bar.domain'))
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   371
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   372
        self.assertZoneEquals(zone.host_forward(h, 'domain'), {
688
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   373
            ('host.foo', 'A'): '192.0.2.1',
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   374
            ('test.bar', 'CNAME'): 'host.foo',
471
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   375
        })
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   376
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   377
    def testHostLocationDomainOutOfOrigin(self):
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   378
        h = Host.build('host', 'foo.domain',
471
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   379
                ip          = '192.0.2.1',
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   380
                location    = 'test@bar.domain',
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   381
        )
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   382
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   383
        self.assertEquals(h.location, ('test', 'bar.domain'))
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   384
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   385
        with self.assertRaises(zone.HostZoneError):
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   386
            self.assertZoneEquals(zone.host_forward(h, 'foo.domain'), {
688
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   387
                ('host', 'A'): '192.0.2.1',
471
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   388
            })
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   389
        
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   390
        # TODO
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   391
        #self.assertZoneEquals(zone.host_forward(h, 'bar.domain'), {
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   392
        #    ('test', 'CNAME'): ['host.foo'],
e4b4458d8061 pvl.hosts: test location domains
Tero Marttila <tero.marttila@aalto.fi>
parents: 470
diff changeset
   393
        #})
472
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   394
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   395
    def testHostsForward(self):
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   396
        hosts = [
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   397
                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
   398
                    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
   399
                    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
   400
                    alias   = 'test',
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   401
                ),
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   402
                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
   403
                    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
   404
                ),
530f22575889 pvl.hosts.zone: label=relative() check handles FQDNs
Tero Marttila <tero.marttila@aalto.fi>
parents: 494
diff changeset
   405
                Host.build('quux', 'example',
530f22575889 pvl.hosts.zone: label=relative() check handles FQDNs
Tero Marttila <tero.marttila@aalto.fi>
parents: 494
diff changeset
   406
                    ip      = '192.0.2.3',
530f22575889 pvl.hosts.zone: label=relative() check handles FQDNs
Tero Marttila <tero.marttila@aalto.fi>
parents: 494
diff changeset
   407
                ),
472
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   408
        ]
497
0082d2092d1f pvl.hosts.zone: should be an fqdn
Tero Marttila <tero.marttila@aalto.fi>
parents: 496
diff changeset
   409
                
0082d2092d1f pvl.hosts.zone: should be an fqdn
Tero Marttila <tero.marttila@aalto.fi>
parents: 496
diff changeset
   410
        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
   411
    
0082d2092d1f pvl.hosts.zone: should be an fqdn
Tero Marttila <tero.marttila@aalto.fi>
parents: 496
diff changeset
   412
        # handle the $ORIGIN directive
0082d2092d1f pvl.hosts.zone: should be an fqdn
Tero Marttila <tero.marttila@aalto.fi>
parents: 496
diff changeset
   413
        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
   414
497
0082d2092d1f pvl.hosts.zone: should be an fqdn
Tero Marttila <tero.marttila@aalto.fi>
parents: 496
diff changeset
   415
        self.assertEquals(unicode(rd), '$ORIGIN\tdomain.')
0082d2092d1f pvl.hosts.zone: should be an fqdn
Tero Marttila <tero.marttila@aalto.fi>
parents: 496
diff changeset
   416
0082d2092d1f pvl.hosts.zone: should be an fqdn
Tero Marttila <tero.marttila@aalto.fi>
parents: 496
diff changeset
   417
        self.assertZoneEquals(rrs, {
688
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   418
            ('foo', 'A'): '192.0.2.1',
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   419
            ('foo', 'AAAA'): '2001:db8::c000:201',
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   420
            ('test', 'CNAME'): 'foo',
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   421
            ('bar', 'A'): '192.0.2.2',
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   422
        })
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   423
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   424
    def testHostsMultiAlias(self):
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   425
        hosts = [
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   426
                Host.build('foo', 'domain',
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   427
                    ip      = '192.0.2.1',
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   428
                    alias4  = 'test',
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   429
                ),
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   430
                Host.build('bar', 'domain',
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   431
                    ip      = '192.0.2.2',
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   432
                    alias4  = 'test',
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   433
                )
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   434
        ]
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   435
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   436
        self.assertZoneEquals(zone.apply_hosts_forward(hosts, 'domain', check_conflicts=False), {
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   437
            ('foo', 'A'): '192.0.2.1',
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   438
            ('bar', 'A'): '192.0.2.2',
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   439
            ('test', 'A'): ['192.0.2.1', '192.0.2.2'],
472
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   440
        })
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   441
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   442
    def testHostsConflict(self):
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   443
        hosts = [
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   444
                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
   445
                    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
   446
                ),
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   447
                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
   448
                    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
   449
                )
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   450
        ]
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   451
        
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   452
        with self.assertRaises(zone.HostZoneError):
687
f99f9e3d02cf pvl.hosts.zone: make non-CNAME check_conflicts optional
Tero Marttila <tero.marttila@aalto.fi>
parents: 677
diff changeset
   453
            self.assertZoneEquals(zone.apply_hosts_forward(hosts, 'domain', check_conflicts=True), { })
472
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   454
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   455
    def testHostsAliasConflict(self):
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   456
        hosts = [
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   457
                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
   458
                    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
   459
                ),
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   460
                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
   461
                    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
   462
                    alias       = 'foo',
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   463
                )
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   464
        ]
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   465
        
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   466
        # with A first
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   467
        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
   468
            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
   469
    
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   470
        # 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
   471
        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
   472
            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
   473
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   474
    def testHostsAlias4Conflict(self):
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   475
        hosts = [
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   476
                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
   477
                    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
   478
                ),
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   479
                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
   480
                    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
   481
                    alias4      = 'foo',
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   482
                )
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   483
        ]
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   484
        
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   485
        with self.assertRaises(zone.HostZoneError):
687
f99f9e3d02cf pvl.hosts.zone: make non-CNAME check_conflicts optional
Tero Marttila <tero.marttila@aalto.fi>
parents: 677
diff changeset
   486
            self.assertZoneEquals(zone.apply_hosts_forward(hosts, 'domain', check_conflicts=True), { })
472
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   487
    
814cc88c531b pvl.hosts.zone: stricter name/type + name/CNAME -conflict logic
Tero Marttila <tero.marttila@aalto.fi>
parents: 471
diff changeset
   488
469
cd1f1b51f3a0 pvl.hosts.tests: split TestForwardZone/TestReverseZone using TestZoneMixin
Tero Marttila <tero.marttila@aalto.fi>
parents: 468
diff changeset
   489
class TestReverseZone(TestZoneMixin, unittest.TestCase):
473
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   490
    def testHostIP(self):
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   491
        h = Host.build('host', 'domain',
473
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   492
                ip  = '192.0.2.1',
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   493
                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
   494
        )
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   495
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   496
        self.assertZoneEquals((rr for ip, rr in zone.host_reverse(h, ipaddr.IPNetwork('192.0.2.1/24'))), {
688
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   497
            ('1', 'PTR'): 'host.domain.',
473
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   498
        })
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   499
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   500
        self.assertZoneEquals((rr for ip, rr in zone.host_reverse(h, ipaddr.IPNetwork('2001:db8::/64'))), {
688
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   501
            ('1.0.2.0.0.0.0.c.0.0.0.0.0.0.0.0', 'PTR'): 'host.domain.',
473
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   502
        })
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   503
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   504
    def testHostIP4(self):
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   505
        h = Host.build('host', 'domain',
473
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   506
                ip  = '192.0.2.1',
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   507
        )
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   508
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   509
        self.assertZoneEquals((rr for ip, rr in zone.host_reverse(h, ipaddr.IPNetwork('192.0.2.1/24'))), {
688
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   510
            ('1', 'PTR'): 'host.domain.',
473
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   511
        })
474
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   512
        
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   513
        self.assertZoneEquals((rr for ip, rr in zone.host_reverse(h, ipaddr.IPNetwork('192.0.0.0/16'))), {
688
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   514
            ('1.2', 'PTR'): 'host.domain.',
474
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   515
        })
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   516
        
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   517
        self.assertZoneEquals((rr for ip, rr in zone.host_reverse(h, ipaddr.IPNetwork('192.0.0.0/12'))), {
688
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   518
            ('1.2.0', 'PTR'): 'host.domain.',
474
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   519
        })
473
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   520
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   521
        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
   522
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   523
        })
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   524
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   525
    def testHostIP6(self):
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   526
        h = Host.build('host', 'domain',
473
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   527
                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
   528
        )
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   529
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   530
        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
   531
        })
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   532
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   533
        self.assertZoneEquals((rr for ip, rr in zone.host_reverse(h, ipaddr.IPNetwork('2001:db8::/64'))), {
688
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   534
            ('1.0.2.0.0.0.0.c.0.0.0.0.0.0.0.0', 'PTR'): 'host.domain.',
473
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   535
        })
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   536
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   537
    def testHostIPOutOfPrefix(self):
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   538
        h = Host.build('host', 'domain',
473
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   539
                ip  = '192.0.2.1',
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   540
                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
   541
        )
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   542
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   543
        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
   544
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   545
        })
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   546
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   547
        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
   548
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   549
        })
68fd85d850ab pvl.hosts.zone: test host_reverse() more
Tero Marttila <tero.marttila@aalto.fi>
parents: 472
diff changeset
   550
493
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   551
    def testHostFQDN(self):
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   552
        h = Host.build('host.example.net', None,
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   553
                ip          = '192.0.2.3',
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   554
                ip6         = '2001:db8::192.0.2.3',
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   555
        )
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   556
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   557
        self.assertZoneEquals((rr for ip, rr in zone.host_reverse(h, ipaddr.IPNetwork('192.0.2.1/24'))), {
688
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   558
            ('3', 'PTR'): 'host.example.net.',
493
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   559
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   560
        })
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   561
        
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   562
        self.assertZoneEquals((rr for ip, rr in zone.host_reverse(h, ipaddr.IPNetwork('2001:db8::/64'))), {
688
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   563
            ('3.0.2.0.0.0.0.c.0.0.0.0.0.0.0.0', 'PTR'): 'host.example.net.',
493
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   564
        })
c9725dd0d48c pvl.hosts: test FQDN hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 492
diff changeset
   565
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
   566
    def testHostDelegate(self):
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   567
        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
   568
                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
   569
                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
   570
                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
   571
                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
   572
        )
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
   573
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
   574
        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
   575
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
   576
        })
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
   577
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
   578
        self.assertZoneEquals((rr for ip, rr in zone.host_reverse(h, ipaddr.IPNetwork('192.0.2.1/24'))), {
688
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   579
            ('1', 'CNAME'): '1.0/28.2.0.192.in-addr.arpa.',
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
   580
        })
464
f1d3dbf04ca3 pvl.hosts.zone: fix reverse= to be IPv4-only
Tero Marttila <tero.marttila@aalto.fi>
parents: 463
diff changeset
   581
        
f1d3dbf04ca3 pvl.hosts.zone: fix reverse= to be IPv4-only
Tero Marttila <tero.marttila@aalto.fi>
parents: 463
diff changeset
   582
        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
   583
f1d3dbf04ca3 pvl.hosts.zone: fix reverse= to be IPv4-only
Tero Marttila <tero.marttila@aalto.fi>
parents: 463
diff changeset
   584
        })
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
   585
494
6d258338b363 pvl.hosts.zone: test forward hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 493
diff changeset
   586
    def testHosts(self):
6d258338b363 pvl.hosts.zone: test forward hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 493
diff changeset
   587
        hosts = [
6d258338b363 pvl.hosts.zone: test forward hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 493
diff changeset
   588
                Host.build('foo', 'domain',
6d258338b363 pvl.hosts.zone: test forward hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 493
diff changeset
   589
                    ip      = '192.0.2.1',
6d258338b363 pvl.hosts.zone: test forward hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 493
diff changeset
   590
                ),
6d258338b363 pvl.hosts.zone: test forward hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 493
diff changeset
   591
                Host.build('bar', 'domain',
6d258338b363 pvl.hosts.zone: test forward hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 493
diff changeset
   592
                    ip      = '192.0.2.2',
6d258338b363 pvl.hosts.zone: test forward hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 493
diff changeset
   593
                )
6d258338b363 pvl.hosts.zone: test forward hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 493
diff changeset
   594
        ]
6d258338b363 pvl.hosts.zone: test forward hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 493
diff changeset
   595
        
6d258338b363 pvl.hosts.zone: test forward hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 493
diff changeset
   596
        self.assertZoneEquals(zone.apply_hosts_reverse(hosts, ipaddr.IPNetwork('192.0.2.1/24')), {
688
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   597
            ('1', 'PTR'): 'foo.domain.',
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   598
            ('2', 'PTR'): 'bar.domain.',
494
6d258338b363 pvl.hosts.zone: test forward hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 493
diff changeset
   599
        })
6d258338b363 pvl.hosts.zone: test forward hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 493
diff changeset
   600
        
6d258338b363 pvl.hosts.zone: test forward hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 493
diff changeset
   601
        # in ip order
6d258338b363 pvl.hosts.zone: test forward hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 493
diff changeset
   602
        self.assertZoneEquals(zone.apply_hosts_reverse(reversed(hosts), ipaddr.IPNetwork('192.0.2.1/24')), {
688
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   603
            ('1', 'PTR'): 'foo.domain.',
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   604
            ('2', 'PTR'): 'bar.domain.',
494
6d258338b363 pvl.hosts.zone: test forward hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 493
diff changeset
   605
        })
6d258338b363 pvl.hosts.zone: test forward hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 493
diff changeset
   606
474
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   607
    def testHostsConflict(self):
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   608
        hosts = [
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   609
                Host.build('foo', 'domain',
474
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   610
                    ip      = '192.0.2.1',
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   611
                ),
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   612
                Host.build('bar', 'domain',
474
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   613
                    ip      = '192.0.2.1',
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   614
                )
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   615
        ]
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   616
        
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   617
        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
   618
            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
   619
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   620
    def testHostsGenerateUnknown(self):
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   621
        hosts = [
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   622
                Host.build('foo', 'domain',
474
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   623
                    ip      = '192.0.2.1',
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   624
                ),
477
6ad810c8039c pvl.hosts.test: import Host directly
Tero Marttila <tero.marttila@aalto.fi>
parents: 474
diff changeset
   625
                Host.build('bar', 'domain',
474
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   626
                    ip      = '192.0.2.5',
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   627
                ),
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   628
        ]
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   629
        
489
7f1bd12e0d54 pvl.hosts-reverse: move options out of pvl.hosts.zone
Tero Marttila <tero.marttila@aalto.fi>
parents: 487
diff changeset
   630
        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
   631
                unknown_host = 'ufc',
7f1bd12e0d54 pvl.hosts-reverse: move options out of pvl.hosts.zone
Tero Marttila <tero.marttila@aalto.fi>
parents: 487
diff changeset
   632
                unknown_domain = 'domain',
7f1bd12e0d54 pvl.hosts-reverse: move options out of pvl.hosts.zone
Tero Marttila <tero.marttila@aalto.fi>
parents: 487
diff changeset
   633
        ), {
688
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   634
            ('1', 'PTR'): 'foo.domain.',
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   635
            ('2', 'PTR'): 'ufc.domain.',
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   636
            ('3', 'PTR'): 'ufc.domain.',
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   637
            ('4', 'PTR'): 'ufc.domain.',
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   638
            ('5', 'PTR'): 'bar.domain.',
dfc5fcb6a06c pvl.hosts.tests: support multiple values for record name/type in assertZoneEquals; test multi-alias hosts
Tero Marttila <tero.marttila@aalto.fi>
parents: 687
diff changeset
   639
            ('6', 'PTR'): 'ufc.domain.',
474
51983fcda6b1 pvl.hosts.zone: fix and test --unknown-host
Tero Marttila <tero.marttila@aalto.fi>
parents: 473
diff changeset
   640
        })
469
cd1f1b51f3a0 pvl.hosts.tests: split TestForwardZone/TestReverseZone using TestZoneMixin
Tero Marttila <tero.marttila@aalto.fi>
parents: 468
diff changeset
   641
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
   642
class TestDhcp(unittest.TestCase):
669
83e9bff09a0b pvl.hosts.dhcp: update for pvl.dhcp.config
Tero Marttila <terom@paivola.fi>
parents: 663
diff changeset
   643
    def assertBlockEqual(self, block, (key, items, blocks)):
83e9bff09a0b pvl.hosts.dhcp: update for pvl.dhcp.config
Tero Marttila <terom@paivola.fi>
parents: 663
diff changeset
   644
        self.assertEqual(block.key, key)
697
3c3ac207ce3f pvl.hosts.dhcp: use pvl.dhcp.config.Field() to format non-string field values
Tero Marttila <tero.marttila@aalto.fi>
parents: 692
diff changeset
   645
3c3ac207ce3f pvl.hosts.dhcp: use pvl.dhcp.config.Field() to format non-string field values
Tero Marttila <tero.marttila@aalto.fi>
parents: 692
diff changeset
   646
        for _item, item in itertools.izip_longest(sorted(block.items), sorted(items)):
3c3ac207ce3f pvl.hosts.dhcp: use pvl.dhcp.config.Field() to format non-string field values
Tero Marttila <tero.marttila@aalto.fi>
parents: 692
diff changeset
   647
            self.assertIsNotNone(_item, item)
3c3ac207ce3f pvl.hosts.dhcp: use pvl.dhcp.config.Field() to format non-string field values
Tero Marttila <tero.marttila@aalto.fi>
parents: 692
diff changeset
   648
            self.assertIsNotNone(item, _item)
3c3ac207ce3f pvl.hosts.dhcp: use pvl.dhcp.config.Field() to format non-string field values
Tero Marttila <tero.marttila@aalto.fi>
parents: 692
diff changeset
   649
            
3c3ac207ce3f pvl.hosts.dhcp: use pvl.dhcp.config.Field() to format non-string field values
Tero Marttila <tero.marttila@aalto.fi>
parents: 692
diff changeset
   650
            self.assertEqual(tuple(pvl.dhcp.config.quote(field) for field in _item), item)
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
   651
669
83e9bff09a0b pvl.hosts.dhcp: update for pvl.dhcp.config
Tero Marttila <terom@paivola.fi>
parents: 663
diff changeset
   652
        for _block, expect_block in itertools.izip_longest(block.blocks, blocks):
83e9bff09a0b pvl.hosts.dhcp: update for pvl.dhcp.config
Tero Marttila <terom@paivola.fi>
parents: 663
diff changeset
   653
            self.assertBlockEqual(_block, expect_block)
83e9bff09a0b pvl.hosts.dhcp: update for pvl.dhcp.config
Tero Marttila <terom@paivola.fi>
parents: 663
diff changeset
   654
83e9bff09a0b pvl.hosts.dhcp: update for pvl.dhcp.config
Tero Marttila <terom@paivola.fi>
parents: 663
diff changeset
   655
    def assertBlocksEqual(self, blocks, expected):
83e9bff09a0b pvl.hosts.dhcp: update for pvl.dhcp.config
Tero Marttila <terom@paivola.fi>
parents: 663
diff changeset
   656
        for _block, block in itertools.izip_longest(blocks, expected):
83e9bff09a0b pvl.hosts.dhcp: update for pvl.dhcp.config
Tero Marttila <terom@paivola.fi>
parents: 663
diff changeset
   657
            self.assertIsNotNone(_block, block)
83e9bff09a0b pvl.hosts.dhcp: update for pvl.dhcp.config
Tero Marttila <terom@paivola.fi>
parents: 663
diff changeset
   658
            self.assertIsNotNone(block, _block)
83e9bff09a0b pvl.hosts.dhcp: update for pvl.dhcp.config
Tero Marttila <terom@paivola.fi>
parents: 663
diff changeset
   659
83e9bff09a0b pvl.hosts.dhcp: update for pvl.dhcp.config
Tero Marttila <terom@paivola.fi>
parents: 663
diff changeset
   660
            self.assertBlockEqual(_block, block)
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
   661
    
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
   662
    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
   663
        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
   664
                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
   665
                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
   666
                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
   667
        )
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
   668
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
   669
        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
   670
            (('host', 'foo'), [
669
83e9bff09a0b pvl.hosts.dhcp: update for pvl.dhcp.config
Tero Marttila <terom@paivola.fi>
parents: 663
diff changeset
   671
                    ('option', 'host-name', "foo"),
83e9bff09a0b pvl.hosts.dhcp: update for pvl.dhcp.config
Tero Marttila <terom@paivola.fi>
parents: 663
diff changeset
   672
                    ('fixed-address', '192.0.2.1'),
83e9bff09a0b pvl.hosts.dhcp: update for pvl.dhcp.config
Tero Marttila <terom@paivola.fi>
parents: 663
diff changeset
   673
                    ('hardware', 'ethernet', '00:11:22:33:44:55'),
83e9bff09a0b pvl.hosts.dhcp: update for pvl.dhcp.config
Tero Marttila <terom@paivola.fi>
parents: 663
diff changeset
   674
            ], [])
492
ddd13dadf6a8 pvl.hosts.dhcp: test non-dhcp hosts and owner comments
Tero Marttila <tero.marttila@aalto.fi>
parents: 491
diff changeset
   675
        ])
ddd13dadf6a8 pvl.hosts.dhcp: test non-dhcp hosts and owner comments
Tero Marttila <tero.marttila@aalto.fi>
parents: 491
diff changeset
   676
677
8e3dfa27d8d1 pvl.hosts.test: host with fqdn name still gets a dhcp option host-name
Tero Marttila <terom@paivola.fi>
parents: 669
diff changeset
   677
    def testHostFQDN(self):
8e3dfa27d8d1 pvl.hosts.test: host with fqdn name still gets a dhcp option host-name
Tero Marttila <terom@paivola.fi>
parents: 669
diff changeset
   678
        host = Host.build('foo.test', 'test',
8e3dfa27d8d1 pvl.hosts.test: host with fqdn name still gets a dhcp option host-name
Tero Marttila <terom@paivola.fi>
parents: 669
diff changeset
   679
                ip          = '192.0.2.1',
8e3dfa27d8d1 pvl.hosts.test: host with fqdn name still gets a dhcp option host-name
Tero Marttila <terom@paivola.fi>
parents: 669
diff changeset
   680
                ethernet    = '00:11:22:33:44:55',
8e3dfa27d8d1 pvl.hosts.test: host with fqdn name still gets a dhcp option host-name
Tero Marttila <terom@paivola.fi>
parents: 669
diff changeset
   681
        )
8e3dfa27d8d1 pvl.hosts.test: host with fqdn name still gets a dhcp option host-name
Tero Marttila <terom@paivola.fi>
parents: 669
diff changeset
   682
8e3dfa27d8d1 pvl.hosts.test: host with fqdn name still gets a dhcp option host-name
Tero Marttila <terom@paivola.fi>
parents: 669
diff changeset
   683
        self.assertBlocksEqual(list(dhcp.dhcp_host(host)), [
8e3dfa27d8d1 pvl.hosts.test: host with fqdn name still gets a dhcp option host-name
Tero Marttila <terom@paivola.fi>
parents: 669
diff changeset
   684
            (('host', 'foo.test'), [
697
3c3ac207ce3f pvl.hosts.dhcp: use pvl.dhcp.config.Field() to format non-string field values
Tero Marttila <tero.marttila@aalto.fi>
parents: 692
diff changeset
   685
                    ('option', 'host-name', '"foo.test"'),
677
8e3dfa27d8d1 pvl.hosts.test: host with fqdn name still gets a dhcp option host-name
Tero Marttila <terom@paivola.fi>
parents: 669
diff changeset
   686
                    ('fixed-address', '192.0.2.1'),
8e3dfa27d8d1 pvl.hosts.test: host with fqdn name still gets a dhcp option host-name
Tero Marttila <terom@paivola.fi>
parents: 669
diff changeset
   687
                    ('hardware', 'ethernet', '00:11:22:33:44:55'),
8e3dfa27d8d1 pvl.hosts.test: host with fqdn name still gets a dhcp option host-name
Tero Marttila <terom@paivola.fi>
parents: 669
diff changeset
   688
            ], [])
8e3dfa27d8d1 pvl.hosts.test: host with fqdn name still gets a dhcp option host-name
Tero Marttila <terom@paivola.fi>
parents: 669
diff changeset
   689
        ])
8e3dfa27d8d1 pvl.hosts.test: host with fqdn name still gets a dhcp option host-name
Tero Marttila <terom@paivola.fi>
parents: 669
diff changeset
   690
492
ddd13dadf6a8 pvl.hosts.dhcp: test non-dhcp hosts and owner comments
Tero Marttila <tero.marttila@aalto.fi>
parents: 491
diff changeset
   691
    def testHostStatic(self):
ddd13dadf6a8 pvl.hosts.dhcp: test non-dhcp hosts and owner comments
Tero Marttila <tero.marttila@aalto.fi>
parents: 491
diff changeset
   692
        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
   693
                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
   694
        )
ddd13dadf6a8 pvl.hosts.dhcp: test non-dhcp hosts and owner comments
Tero Marttila <tero.marttila@aalto.fi>
parents: 491
diff changeset
   695
ddd13dadf6a8 pvl.hosts.dhcp: test non-dhcp hosts and owner comments
Tero Marttila <tero.marttila@aalto.fi>
parents: 491
diff changeset
   696
        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
   697
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
   698
        ])
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
   699
480
7e44854e85d4 README and test host boot= and dynamic ip=
Tero Marttila <tero.marttila@aalto.fi>
parents: 479
diff changeset
   700
    def testHostDynamic(self):
7e44854e85d4 README and test host boot= and dynamic ip=
Tero Marttila <tero.marttila@aalto.fi>
parents: 479
diff changeset
   701
        host = Host.build('foo', 'test',
7e44854e85d4 README and test host boot= and dynamic ip=
Tero Marttila <tero.marttila@aalto.fi>
parents: 479
diff changeset
   702
                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
   703
        )
7e44854e85d4 README and test host boot= and dynamic ip=
Tero Marttila <tero.marttila@aalto.fi>
parents: 479
diff changeset
   704
7e44854e85d4 README and test host boot= and dynamic ip=
Tero Marttila <tero.marttila@aalto.fi>
parents: 479
diff changeset
   705
        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
   706
            (('host', 'foo'), [
7e44854e85d4 README and test host boot= and dynamic ip=
Tero Marttila <tero.marttila@aalto.fi>
parents: 479
diff changeset
   707
                ('option', 'host-name', "foo"),
7e44854e85d4 README and test host boot= and dynamic ip=
Tero Marttila <tero.marttila@aalto.fi>
parents: 479
diff changeset
   708
                ('hardware', 'ethernet', '00:11:22:33:44:55'),
669
83e9bff09a0b pvl.hosts.dhcp: update for pvl.dhcp.config
Tero Marttila <terom@paivola.fi>
parents: 663
diff changeset
   709
            ], [])
480
7e44854e85d4 README and test host boot= and dynamic ip=
Tero Marttila <tero.marttila@aalto.fi>
parents: 479
diff changeset
   710
        ])
7e44854e85d4 README and test host boot= and dynamic ip=
Tero Marttila <tero.marttila@aalto.fi>
parents: 479
diff changeset
   711
7e44854e85d4 README and test host boot= and dynamic ip=
Tero Marttila <tero.marttila@aalto.fi>
parents: 479
diff changeset
   712
    def testHostBoot(self):
491
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   713
        hosts = [
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   714
                Host.build('foo1', 'test',
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   715
                        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
   716
                        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
   717
                ),
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   718
                Host.build('foo2', 'test',
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   719
                        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
   720
                        boot        = 'boot.lan:',
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   721
                ),
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   722
                Host.build('foo3', 'test',
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   723
                        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
   724
                        boot        = '/debian/wheezy/pxelinux.0',
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   725
                ),
689
c258e3ff6d32 pvl.hosts: update boot= to support split boot.next-server= boot.filename=, which enables inheriting defaults
Tero Marttila <tero.marttila@aalto.fi>
parents: 688
diff changeset
   726
                Host.build('foo4', 'test',
c258e3ff6d32 pvl.hosts: update boot= to support split boot.next-server= boot.filename=, which enables inheriting defaults
Tero Marttila <tero.marttila@aalto.fi>
parents: 688
diff changeset
   727
                        ethernet    = '00:11:22:33:44:55',
c258e3ff6d32 pvl.hosts: update boot= to support split boot.next-server= boot.filename=, which enables inheriting defaults
Tero Marttila <tero.marttila@aalto.fi>
parents: 688
diff changeset
   728
                        boot        = {'next-server': 'boot.lan', 'filename': '/debian/wheezy/pxelinux.0' },
c258e3ff6d32 pvl.hosts: update boot= to support split boot.next-server= boot.filename=, which enables inheriting defaults
Tero Marttila <tero.marttila@aalto.fi>
parents: 688
diff changeset
   729
                ),
491
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   730
        ]
480
7e44854e85d4 README and test host boot= and dynamic ip=
Tero Marttila <tero.marttila@aalto.fi>
parents: 479
diff changeset
   731
491
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   732
        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
   733
            (('host', 'foo1'), [
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   734
                ('option', 'host-name', "foo1"),
480
7e44854e85d4 README and test host boot= and dynamic ip=
Tero Marttila <tero.marttila@aalto.fi>
parents: 479
diff changeset
   735
                ('hardware', 'ethernet', '00:11:22:33:44:55'),
697
3c3ac207ce3f pvl.hosts.dhcp: use pvl.dhcp.config.Field() to format non-string field values
Tero Marttila <tero.marttila@aalto.fi>
parents: 692
diff changeset
   736
                ('next-server', '"boot.lan"'),
3c3ac207ce3f pvl.hosts.dhcp: use pvl.dhcp.config.Field() to format non-string field values
Tero Marttila <tero.marttila@aalto.fi>
parents: 692
diff changeset
   737
                ('filename', '"debian/wheezy/pxelinux.0"'),
669
83e9bff09a0b pvl.hosts.dhcp: update for pvl.dhcp.config
Tero Marttila <terom@paivola.fi>
parents: 663
diff changeset
   738
            ], []),
491
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   739
            (('host', 'foo2'), [
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   740
                ('option', 'host-name', "foo2"),
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   741
                ('hardware', 'ethernet', '00:11:22:33:44:55'),
697
3c3ac207ce3f pvl.hosts.dhcp: use pvl.dhcp.config.Field() to format non-string field values
Tero Marttila <tero.marttila@aalto.fi>
parents: 692
diff changeset
   742
                ('next-server', '"boot.lan"'),
669
83e9bff09a0b pvl.hosts.dhcp: update for pvl.dhcp.config
Tero Marttila <terom@paivola.fi>
parents: 663
diff changeset
   743
            ], []),
491
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   744
            (('host', 'foo3'), [
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   745
                ('option', 'host-name', "foo3"),
cfcb47a3dc3e pvl.hosts.dhcp: fix and test boot= variations
Tero Marttila <tero.marttila@aalto.fi>
parents: 490
diff changeset
   746
                ('hardware', 'ethernet', '00:11:22:33:44:55'),
697
3c3ac207ce3f pvl.hosts.dhcp: use pvl.dhcp.config.Field() to format non-string field values
Tero Marttila <tero.marttila@aalto.fi>
parents: 692
diff changeset
   747
                ('filename', '"/debian/wheezy/pxelinux.0"'),
689
c258e3ff6d32 pvl.hosts: update boot= to support split boot.next-server= boot.filename=, which enables inheriting defaults
Tero Marttila <tero.marttila@aalto.fi>
parents: 688
diff changeset
   748
            ], []),
c258e3ff6d32 pvl.hosts: update boot= to support split boot.next-server= boot.filename=, which enables inheriting defaults
Tero Marttila <tero.marttila@aalto.fi>
parents: 688
diff changeset
   749
            (('host', 'foo4'), [
c258e3ff6d32 pvl.hosts: update boot= to support split boot.next-server= boot.filename=, which enables inheriting defaults
Tero Marttila <tero.marttila@aalto.fi>
parents: 688
diff changeset
   750
                ('option', 'host-name', "foo4"),
c258e3ff6d32 pvl.hosts: update boot= to support split boot.next-server= boot.filename=, which enables inheriting defaults
Tero Marttila <tero.marttila@aalto.fi>
parents: 688
diff changeset
   751
                ('hardware', 'ethernet', '00:11:22:33:44:55'),
697
3c3ac207ce3f pvl.hosts.dhcp: use pvl.dhcp.config.Field() to format non-string field values
Tero Marttila <tero.marttila@aalto.fi>
parents: 692
diff changeset
   752
                ('next-server', '"boot.lan"'),
3c3ac207ce3f pvl.hosts.dhcp: use pvl.dhcp.config.Field() to format non-string field values
Tero Marttila <tero.marttila@aalto.fi>
parents: 692
diff changeset
   753
                ('filename', '"/debian/wheezy/pxelinux.0"'),
669
83e9bff09a0b pvl.hosts.dhcp: update for pvl.dhcp.config
Tero Marttila <terom@paivola.fi>
parents: 663
diff changeset
   754
            ], []),
480
7e44854e85d4 README and test host boot= and dynamic ip=
Tero Marttila <tero.marttila@aalto.fi>
parents: 479
diff changeset
   755
        ])
689
c258e3ff6d32 pvl.hosts: update boot= to support split boot.next-server= boot.filename=, which enables inheriting defaults
Tero Marttila <tero.marttila@aalto.fi>
parents: 688
diff changeset
   756
    
483
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   757
    def testHosts(self):
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   758
        hosts = [
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   759
                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
   760
                        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
   761
                        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
   762
                ),
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   763
                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
   764
                        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
   765
                        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
   766
                ),
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   767
        ]
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   768
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   769
        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
   770
            (('host', 'foo'), [
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   771
                ('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
   772
                ('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
   773
                ('hardware', 'ethernet', '00:11:22:33:44:55'),
669
83e9bff09a0b pvl.hosts.dhcp: update for pvl.dhcp.config
Tero Marttila <terom@paivola.fi>
parents: 663
diff changeset
   774
            ], []),
483
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   775
            (('host', 'bar'), [
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   776
                ('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
   777
                ('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
   778
                ('hardware', 'ethernet', '01:23:45:67:89:ab'),
669
83e9bff09a0b pvl.hosts.dhcp: update for pvl.dhcp.config
Tero Marttila <terom@paivola.fi>
parents: 663
diff changeset
   779
            ], []),
483
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   780
        ])
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   781
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   782
    def testHostConflict(self):
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   783
        hosts = [
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   784
                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
   785
                        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
   786
                ),
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   787
                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
   788
                        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
   789
                ),
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   790
        ]
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   791
        
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   792
        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
   793
            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
   794
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   795
    def testHostMultinet(self):
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   796
        hosts = [
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   797
                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
   798
                    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
   799
                    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
   800
                ),
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   801
                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
   802
                    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
   803
                    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
   804
                ),
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   805
        ]
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   806
        
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   807
        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
   808
                (('host', 'foo-eth1'), [
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   809
                    ('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
   810
                    ('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
   811
                    ('hardware', 'ethernet', '00:11:22:33:44:55'),
669
83e9bff09a0b pvl.hosts.dhcp: update for pvl.dhcp.config
Tero Marttila <terom@paivola.fi>
parents: 663
diff changeset
   812
                ], []),
483
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   813
                (('host', 'foo-eth2'), [
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   814
                    ('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
   815
                    ('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
   816
                    ('hardware', 'ethernet', '01:23:45:67:89:ab'),
669
83e9bff09a0b pvl.hosts.dhcp: update for pvl.dhcp.config
Tero Marttila <terom@paivola.fi>
parents: 663
diff changeset
   817
                ], []),
483
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   818
        ])
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   819
698
656178fb8607 pvl.hosts.dhcp: implement support for dhcp:subclass=... using hardware ethernet
Tero Marttila <tero.marttila@aalto.fi>
parents: 697
diff changeset
   820
    def testHostSubclass(self):
656178fb8607 pvl.hosts.dhcp: implement support for dhcp:subclass=... using hardware ethernet
Tero Marttila <tero.marttila@aalto.fi>
parents: 697
diff changeset
   821
        hosts = [Host.build('foo', 'test',
656178fb8607 pvl.hosts.dhcp: implement support for dhcp:subclass=... using hardware ethernet
Tero Marttila <tero.marttila@aalto.fi>
parents: 697
diff changeset
   822
                ethernet    = '00:11:22:33:44:55',
656178fb8607 pvl.hosts.dhcp: implement support for dhcp:subclass=... using hardware ethernet
Tero Marttila <tero.marttila@aalto.fi>
parents: 697
diff changeset
   823
                extensions  = dict(dhcp=dict(
656178fb8607 pvl.hosts.dhcp: implement support for dhcp:subclass=... using hardware ethernet
Tero Marttila <tero.marttila@aalto.fi>
parents: 697
diff changeset
   824
                    subclass    = 'debian',
656178fb8607 pvl.hosts.dhcp: implement support for dhcp:subclass=... using hardware ethernet
Tero Marttila <tero.marttila@aalto.fi>
parents: 697
diff changeset
   825
                )),
656178fb8607 pvl.hosts.dhcp: implement support for dhcp:subclass=... using hardware ethernet
Tero Marttila <tero.marttila@aalto.fi>
parents: 697
diff changeset
   826
        )]
656178fb8607 pvl.hosts.dhcp: implement support for dhcp:subclass=... using hardware ethernet
Tero Marttila <tero.marttila@aalto.fi>
parents: 697
diff changeset
   827
656178fb8607 pvl.hosts.dhcp: implement support for dhcp:subclass=... using hardware ethernet
Tero Marttila <tero.marttila@aalto.fi>
parents: 697
diff changeset
   828
        self.assertBlocksEqual(list(dhcp.dhcp_hosts(hosts)), [
656178fb8607 pvl.hosts.dhcp: implement support for dhcp:subclass=... using hardware ethernet
Tero Marttila <tero.marttila@aalto.fi>
parents: 697
diff changeset
   829
            (('host', 'foo'), [
656178fb8607 pvl.hosts.dhcp: implement support for dhcp:subclass=... using hardware ethernet
Tero Marttila <tero.marttila@aalto.fi>
parents: 697
diff changeset
   830
                ('option', 'host-name', "foo"),
656178fb8607 pvl.hosts.dhcp: implement support for dhcp:subclass=... using hardware ethernet
Tero Marttila <tero.marttila@aalto.fi>
parents: 697
diff changeset
   831
                ('hardware', 'ethernet', '00:11:22:33:44:55'),
656178fb8607 pvl.hosts.dhcp: implement support for dhcp:subclass=... using hardware ethernet
Tero Marttila <tero.marttila@aalto.fi>
parents: 697
diff changeset
   832
            ], []),
656178fb8607 pvl.hosts.dhcp: implement support for dhcp:subclass=... using hardware ethernet
Tero Marttila <tero.marttila@aalto.fi>
parents: 697
diff changeset
   833
            (None, [
700
88b0d3df1ad7 pvl.hosts.dhcp: subclass class name is a String
Tero Marttila <tero.marttila@aalto.fi>
parents: 698
diff changeset
   834
                ('subclass', '"debian"', '1:00:11:22:33:44:55'),
698
656178fb8607 pvl.hosts.dhcp: implement support for dhcp:subclass=... using hardware ethernet
Tero Marttila <tero.marttila@aalto.fi>
parents: 697
diff changeset
   835
            ], []),
656178fb8607 pvl.hosts.dhcp: implement support for dhcp:subclass=... using hardware ethernet
Tero Marttila <tero.marttila@aalto.fi>
parents: 697
diff changeset
   836
        ])
483
19d084bb4afd pvl.hosts.dhcp: test and document hosts on multiple networks
Tero Marttila <tero.marttila@aalto.fi>
parents: 480
diff changeset
   837
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
   838
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
   839
    unittest.main()