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 from tiramisu.error import ConfigError 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_many_opts(): a = IntOption('a', '') b = IntOption('b', '') c = IntOption('c', '') d = IntOption('d', '') e = IntOption('e', '') f = IntOption('f', '') od = OptionDescription('od', '', [a, b, c, d, e, f]) a.impl_add_consistency('not_equal', b, c, d, e, f) 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 raises(ValueError, "c.f = 2") raises(ValueError, "c.f = 1") # c.d = 3 raises(ValueError, "c.f = 3") raises(ValueError, "c.a = 3") raises(ValueError, "c.c = 3") raises(ValueError, "c.e = 3") def test_consistency_not_in_config_1(): a = IntOption('a', '') b = IntOption('b', '') a.impl_add_consistency('not_equal', b) od1 = OptionDescription('od1', '', [a]) od2 = OptionDescription('od2', '', [b]) od = OptionDescription('root', '', [od1]) raises(ConfigError, "Config(od)") def test_consistency_not_in_config_2(): a = IntOption('a', '') b = IntOption('b', '') a.impl_add_consistency('not_equal', b) od1 = OptionDescription('od1', '', [a]) od2 = OptionDescription('od2', '', [b]) od = OptionDescription('root', '', [od1, od2]) Config(od) def test_consistency_not_in_config_3(): a = IntOption('a', '') b = IntOption('b', '') a.impl_add_consistency('not_equal', b) od1 = OptionDescription('od1', '', [a]) od2 = OptionDescription('od2', '', [b]) od = OptionDescription('root', '', [od1, od2]) #with subconfig raises(ConfigError, "Config(od.od1)") def test_consistency_after_config(): a = IntOption('a', '') b = IntOption('b', '') od1 = OptionDescription('od1', '', [a]) od2 = OptionDescription('od2', '', [b]) od = OptionDescription('root', '', [od1, od2]) Config(od) #FIXME a cause du read_only #raises(AttributeError, "a.impl_add_consistency('not_equal', b)") 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._cache_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_multi(): a = IntOption('a', '', [2, 1], multi=True) b = IntOption('b', '', [1, 1], multi=True) c = IntOption('c', '', [1, 2], multi=True) raises(ValueError, "a.impl_add_consistency('not_equal', b)") a.impl_add_consistency('not_equal', c) 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(ConfigError, "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) #first, test network_netmask c.a = ['192.168.1.128'] raises(ValueError, "c.b = ['255.255.255.0']") # 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'") c.c[1] = '192.168.2.255' def test_consistency_broadcast_default_1(): a = NetworkOption('a', '', '192.168.1.0') b = NetmaskOption('b', '', '255.255.255.128') c = BroadcastOption('c', '', '192.168.2.127') d = BroadcastOption('d', '', '192.168.1.127') od = OptionDescription('a', '', [a, b, c]) raises(ValueError, "c.impl_add_consistency('broadcast', a, b)") def test_consistency_broadcast_default_2(): a = NetworkOption('a', '', '192.168.1.0') b = NetmaskOption('b', '', '255.255.255.128') c = BroadcastOption('c', '', '192.168.2.127') d = BroadcastOption('d', '', '192.168.1.127') od2 = OptionDescription('a', '', [a, b, d]) d.impl_add_consistency('broadcast', a, b) def test_consistency_not_all(): #_cache_consistencies is not None by not options has consistencies 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 = Config(od) c.a = ['192.168.1.0'] c.b = ['255.255.255.0'] c.c = ['192.168.1.255']