tero@440: import ipaddr tero@440: import unittest tero@440: tero@440: from pvl.hosts import config tero@440: from StringIO import StringIO tero@440: tero@440: class Options(object): tero@440: hosts_charset = 'utf-8' tero@440: hosts_domain = None tero@440: hosts_include = None tero@440: tero@447: class ConfFile(StringIO): tero@440: def __init__(self, name, buffer): tero@440: StringIO.__init__(self, buffer) tero@440: self.name = name tero@440: tero@440: class TestConfig(unittest.TestCase): tero@440: def setUp(self): tero@440: self.options = Options() tero@440: tero@461: def assertHostEqual(self, host, host_str, attrs): tero@461: self.assertEquals(str(host), host_str) tero@461: tero@461: for attr, value in attrs.iteritems(): tero@461: self.assertEquals(getattr(host, attr), value) tero@461: tero@447: def assertHostsEqual(self, hosts, expected): tero@447: for host, expect in zip(hosts, expected): tero@447: host_str, attrs = expect tero@441: tero@461: self.assertHostEqual(host, host_str, attrs) tero@441: tero@451: def testApplyHostsFileError(self): tero@440: with self.assertRaises(config.HostConfigError): tero@440: list(config.apply_hosts(self.options, ['nonexistant'])) tero@440: tero@440: def testApplyHosts(self): tero@447: conf_file = ConfFile('test', """ tero@440: [foo] tero@440: ip = 127.0.0.1 tero@440: tero@440: [bar] tero@440: ip = 127.0.0.2 tero@447: """) tero@447: expected = [ tero@447: ('foo@test', dict(ip=ipaddr.IPAddress('127.0.0.1'))), tero@447: ('bar@test', dict(ip=ipaddr.IPAddress('127.0.0.2'))), tero@447: ] tero@440: tero@447: self.assertHostsEqual(config.apply_hosts_file(self.options, conf_file), expected) tero@447: tero@451: def testApply(self): tero@451: self.assertHostsEqual(config.apply(self.options, ['etc/hosts/test']), [ tero@451: ('foo@test', dict( tero@451: ip = ipaddr.IPAddress('127.0.0.1'), tero@451: ethernet = {None: '00:11:22:33:44:55'}, tero@451: )), tero@451: ('bar@test', dict( tero@451: ip = ipaddr.IPAddress('127.0.0.2'), tero@451: ethernet = {None: '01:23:45:67:89:ab'}, tero@451: )), tero@451: ]) tero@451: tero@447: def testApplyHostsExpand(self): tero@449: self.assertHostsEqual(config.apply_host_config(self.options, 'asdf', 'asdf{1-3}', ip='10.100.100.$'), [ tero@447: ('asdf1@asdf', dict(ip=ipaddr.IPAddress('10.100.100.1'))), tero@447: ('asdf2@asdf', dict(ip=ipaddr.IPAddress('10.100.100.2'))), tero@447: ('asdf3@asdf', dict(ip=ipaddr.IPAddress('10.100.100.3'))), tero@447: ]) tero@461: tero@461: def testApplyHostConfigDict(self): tero@461: host = config.apply_host(self.options, 'foo', 'test', { tero@461: 'ethernet.eth0': '00:11:22:33:44:55', tero@461: }) tero@461: tero@461: self.assertHostEqual(host, 'foo@test', dict( tero@461: ethernet = { 'eth0': '00:11:22:33:44:55' } tero@461: )) tero@461: tero@451: def testApplyHostsConfigError(self): tero@451: with self.assertRaises(config.HostConfigError): tero@451: config.apply_host(self.options, 'foo', 'test', { tero@451: 'ethernet': 'foo', tero@451: 'ethernet.eth0': 'bar', tero@451: }) tero@447: tero@440: if __name__ == '__main__': tero@440: unittest.main()