test force_default_on_freeze with multi and correction in Multi()
[tiramisu.git] / test / test_option_consistency.py
1 import autopath
2 from py.test import raises
3
4 from tiramisu.setting import owners, groups
5 from tiramisu.config import Config
6 from tiramisu.option import IPOption, NetworkOption, NetmaskOption, IntOption,\
7     OptionDescription
8
9
10 def test_consistency_not_equal():
11     a = IntOption('a', '')
12     b = IntOption('b', '')
13     od = OptionDescription('od', '', [a, b])
14     a.impl_add_consistency('not_equal', b)
15     c = Config(od)
16     assert c.a is None
17     assert c.b is None
18     c.a = 1
19     del(c.a)
20     c.a = 1
21     raises(ValueError, "c.b = 1")
22     c.b = 2
23
24
25 def test_consistency_not_equal_multi():
26     a = IntOption('a', '', multi=True)
27     b = IntOption('b', '', multi=True)
28     od = OptionDescription('od', '', [a, b])
29     a.impl_add_consistency('not_equal', b)
30     c = Config(od)
31     assert c.a == []
32     assert c.b == []
33     c.a = [1]
34     del(c.a)
35     c.a = [1]
36     raises(ValueError, "c.b = [1]")
37     c.b = [2]
38
39
40 def test_consistency_default():
41     a = IntOption('a', '', 1)
42     b = IntOption('b', '', 1)
43     raises(ValueError, "a.impl_add_consistency('not_equal', b)")
44
45
46 def test_consistency_default_diff():
47     a = IntOption('a', '', 3)
48     b = IntOption('b', '', 1)
49     od = OptionDescription('od', '', [a, b])
50     a.impl_add_consistency('not_equal', b)
51     c = Config(od)
52     raises(ValueError, "c.a = 1")
53     c.a = 2
54     c.b = 3
55     assert c.getowner(a) is owners.user
56     raises(ValueError, "del(c.a)")
57     assert c.getowner(a) is owners.user
58
59
60 def test_consistency_ip_netmask():
61     a = IPOption('a', '')
62     b = NetmaskOption('b', '')
63     od = OptionDescription('od', '', [a, b])
64     b.impl_add_consistency('ip_netmask', a)
65     c = Config(od)
66     c.a = '192.168.1.1'
67     c.b = '255.255.255.0'
68     c.a = '192.168.1.2'
69     c.b = '255.255.255.255'
70     c.b = '255.255.255.0'
71     raises(ValueError, "c.a = '192.168.1.0'")
72
73
74 def test_consistency_network_netmask():
75     a = NetworkOption('a', '')
76     b = NetmaskOption('b', '')
77     od = OptionDescription('od', '', [a, b])
78     b.impl_add_consistency('network_netmask', a)
79     c = Config(od)
80     c.a = '192.168.1.1'
81     c.b = '255.255.255.255'
82     del(c.b)
83     c.a = '192.168.1.0'
84     c.b = '255.255.255.0'
85     raises(ValueError, "c.a = '192.168.1.1'")
86
87
88 def test_consistency_ip_netmask_error_multi():
89     a = IPOption('a', '', multi=True)
90     b = NetmaskOption('b', '')
91     od = OptionDescription('od', '', [a, b])
92     raises(ValueError, "b.impl_add_consistency('ip_netmask', a)")
93
94
95 def test_consistency_ip_netmask_multi():
96     a = IPOption('a', '', multi=True)
97     b = NetmaskOption('b', '', multi=True)
98     od = OptionDescription('od', '', [a, b])
99     b.impl_add_consistency('ip_netmask', a)
100     c = Config(od)
101     c.a = ['192.168.1.1']
102     c.b = ['255.255.255.0']
103     c.a = ['192.168.1.2']
104     c.b = ['255.255.255.255']
105     c.b = ['255.255.255.0']
106     raises(ValueError, "c.a = ['192.168.1.0']")
107
108
109 def test_consistency_network_netmask_multi():
110     a = NetworkOption('a', '', multi=True)
111     b = NetmaskOption('b', '', multi=True)
112     od = OptionDescription('od', '', [a, b])
113     b.impl_add_consistency('network_netmask', a)
114     c = Config(od)
115     c.a = ['192.168.1.1']
116     c.b = ['255.255.255.255']
117     del(c.b)
118     c.a = ['192.168.1.0']
119     c.b = ['255.255.255.0']
120     raises(ValueError, "c.a = ['192.168.1.1']")
121
122
123 def test_consistency_ip_netmask_multi_master():
124     a = IPOption('a', '', multi=True)
125     b = NetmaskOption('b', '', multi=True)
126     od = OptionDescription('a', '', [a, b])
127     od.impl_set_group_type(groups.master)
128     b.impl_add_consistency('ip_netmask', a)
129     c = Config(od)
130     c.a = ['192.168.1.1']
131     c.b = ['255.255.255.0']
132     c.a = ['192.168.1.2']
133     c.b = ['255.255.255.255']
134     c.b = ['255.255.255.0']
135     raises(ValueError, "c.a = ['192.168.1.0']")
136     c.a = ['192.168.1.2', '192.168.1.3']
137
138
139 def test_consistency_network_netmask_multi_master():
140     a = NetworkOption('a', '', multi=True)
141     b = NetmaskOption('b', '', multi=True)
142     od = OptionDescription('a', '', [a, b])
143     od.impl_set_group_type(groups.master)
144     b.impl_add_consistency('network_netmask', a)
145     c = Config(od)
146     c.a = ['192.168.1.1']
147     c.b = ['255.255.255.255']
148     del(c.b)
149     c.a = ['192.168.1.0']
150     c.b = ['255.255.255.0']
151     raises(ValueError, "c.a = ['192.168.1.1']")