import autopath from py.test import raises from tiramisu.setting import owners, groups from tiramisu.config import Config from tiramisu.option import IPOption, NetworkOption, NetmaskOption, IntOption,\ BroadcastOption, SymLinkOption, OptionDescription def test_consistency_not_equal(): a = IntOption('a', '') b = IntOption('b', '') od = OptionDescription('od', '', [a, b]) a.impl_add_consistency('not_equal', b) c = Config(od) assert c.a is None assert c.b is None c.a = 1 del(c.a) c.a = 1 raises(ValueError, "c.b = 1") c.b = 2 def test_consistency_not_equal_symlink(): a = IntOption('a', '') b = IntOption('b', '') c = SymLinkOption('c', a) od = OptionDescription('od', '', [a, b, c]) a.impl_add_consistency('not_equal', b) c = Config(od) assert set(od._consistencies.keys()) == set([a, b]) def test_consistency_not_equal_multi(): a = IntOption('a', '', multi=True) b = IntOption('b', '', multi=True) od = OptionDescription('od', '', [a, b]) a.impl_add_consistency('not_equal', b) c = Config(od) assert c.a == [] assert c.b == [] c.a = [1] del(c.a) c.a = [1] raises(ValueError, "c.b = [1]") c.b = [2] def test_consistency_default(): a = IntOption('a', '', 1) b = IntOption('b', '', 1) raises(ValueError, "a.impl_add_consistency('not_equal', b)") def test_consistency_default_diff(): a = IntOption('a', '', 3) b = IntOption('b', '', 1) od = OptionDescription('od', '', [a, b]) a.impl_add_consistency('not_equal', b) c = Config(od) raises(ValueError, "c.a = 1") c.a = 2 c.b = 3 assert c.getowner(a) is owners.user raises(ValueError, "del(c.a)") assert c.getowner(a) is owners.user def test_consistency_ip_netmask(): a = IPOption('a', '') b = NetmaskOption('b', '') od = OptionDescription('od', '', [a, b]) b.impl_add_consistency('ip_netmask', a) c = Config(od) c.a = '192.168.1.1' c.b = '255.255.255.0' c.a = '192.168.1.2' c.b = '255.255.255.255' c.b = '255.255.255.0' raises(ValueError, "c.a = '192.168.1.0'") def test_consistency_network_netmask(): a = NetworkOption('a', '') b = NetmaskOption('b', '') od = OptionDescription('od', '', [a, b]) b.impl_add_consistency('network_netmask', a) c = Config(od) c.a = '192.168.1.1' c.b = '255.255.255.255' del(c.b) c.a = '192.168.1.0' c.b = '255.255.255.0' raises(ValueError, "c.a = '192.168.1.1'") def test_consistency_ip_netmask_error_multi(): a = IPOption('a', '', multi=True) b = NetmaskOption('b', '') od = OptionDescription('od', '', [a, b]) raises(ValueError, "b.impl_add_consistency('ip_netmask', a)") def test_consistency_ip_netmask_multi(): a = IPOption('a', '', multi=True) b = NetmaskOption('b', '', multi=True) od = OptionDescription('od', '', [a, b]) b.impl_add_consistency('ip_netmask', a) c = Config(od) c.a = ['192.168.1.1'] c.b = ['255.255.255.0'] c.a = ['192.168.1.2'] c.b = ['255.255.255.255'] c.b = ['255.255.255.0'] raises(ValueError, "c.a = ['192.168.1.0']") def test_consistency_network_netmask_multi(): a = NetworkOption('a', '', multi=True) b = NetmaskOption('b', '', multi=True) od = OptionDescription('od', '', [a, b]) b.impl_add_consistency('network_netmask', a) c = Config(od) c.a = ['192.168.1.1'] c.b = ['255.255.255.255'] del(c.b) c.a = ['192.168.1.0'] c.b = ['255.255.255.0'] raises(ValueError, "c.a = ['192.168.1.1']") def test_consistency_ip_netmask_multi_master(): a = IPOption('a', '', multi=True) b = NetmaskOption('b', '', multi=True) od = OptionDescription('a', '', [a, b]) od.impl_set_group_type(groups.master) b.impl_add_consistency('ip_netmask', a) c = Config(od) c.a = ['192.168.1.1'] c.b = ['255.255.255.0'] c.a = ['192.168.1.2'] c.b = ['255.255.255.255'] c.b = ['255.255.255.0'] raises(ValueError, "c.a = ['192.168.1.0']") c.a = ['192.168.1.2', '192.168.1.3'] def test_consistency_network_netmask_multi_master(): a = NetworkOption('a', '', multi=True) b = NetmaskOption('b', '', multi=True) od = OptionDescription('a', '', [a, b]) od.impl_set_group_type(groups.master) b.impl_add_consistency('network_netmask', a) c = Config(od) c.a = ['192.168.1.1'] c.b = ['255.255.255.255'] del(c.b) c.a = ['192.168.1.0'] c.b = ['255.255.255.0'] raises(ValueError, "c.a = ['192.168.1.1']") def test_consistency_broadcast(): a = NetworkOption('a', '', multi=True) b = NetmaskOption('b', '', multi=True) c = BroadcastOption('c', '', multi=True) od = OptionDescription('a', '', [a, b, c]) od.impl_set_group_type(groups.master) b.impl_add_consistency('network_netmask', a) c.impl_add_consistency('broadcast', a, b) c = Config(od) c.a = ['192.168.1.0'] c.b = ['255.255.255.0'] c.c = ['192.168.1.255'] raises(ValueError, "c.a = ['192.168.1.1']") c.a = ['192.168.1.0', '192.168.2.128'] c.b = ['255.255.255.0', '255.255.255.128'] c.c = ['192.168.1.255', '192.168.2.255'] raises(ValueError, "c.c[1] = '192.168.2.128'")