Merge branch 'master' into lgpl
[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     BroadcastOption, SymLinkOption, OptionDescription
8 from tiramisu.error import ConfigError
9
10
11 def test_consistency_not_equal():
12     a = IntOption('a', '')
13     b = IntOption('b', '')
14     od = OptionDescription('od', '', [a, b])
15     a.impl_add_consistency('not_equal', b)
16     c = Config(od)
17     assert c.a is None
18     assert c.b is None
19     c.a = 1
20     del(c.a)
21     c.a = 1
22     raises(ValueError, "c.b = 1")
23     c.b = 2
24
25
26 def test_consistency_not_equal_many_opts():
27     a = IntOption('a', '')
28     b = IntOption('b', '')
29     c = IntOption('c', '')
30     d = IntOption('d', '')
31     e = IntOption('e', '')
32     f = IntOption('f', '')
33     od = OptionDescription('od', '', [a, b, c, d, e, f])
34     a.impl_add_consistency('not_equal', b, c, d, e, f)
35     c = Config(od)
36     assert c.a is None
37     assert c.b is None
38     #
39     c.a = 1
40     del(c.a)
41     #
42     c.a = 1
43     raises(ValueError, "c.b = 1")
44     #
45     c.b = 2
46     raises(ValueError, "c.f = 2")
47     raises(ValueError, "c.f = 1")
48     #
49     c.d = 3
50     raises(ValueError, "c.f = 3")
51     raises(ValueError, "c.a = 3")
52     raises(ValueError, "c.c = 3")
53     raises(ValueError, "c.e = 3")
54
55
56 def test_consistency_not_in_config():
57     a = IntOption('a', '')
58     b = IntOption('b', '')
59     a.impl_add_consistency('not_equal', b)
60     od1 = OptionDescription('od1', '', [a])
61     od2 = OptionDescription('od2', '', [b])
62     od = OptionDescription('root', '', [od1])
63     raises(ConfigError, "Config(od)")
64     od = OptionDescription('root', '', [od1, od2])
65     Config(od)
66     #with subconfig
67     raises(ConfigError, "Config(od.od1)")
68
69
70 def test_consistency_afer_config():
71     a = IntOption('a', '')
72     b = IntOption('b', '')
73     od1 = OptionDescription('od1', '', [a])
74     od2 = OptionDescription('od2', '', [b])
75     od = OptionDescription('root', '', [od1, od2])
76     Config(od)
77     raises(AttributeError, "a.impl_add_consistency('not_equal', b)")
78
79
80 def test_consistency_not_equal_symlink():
81     a = IntOption('a', '')
82     b = IntOption('b', '')
83     c = SymLinkOption('c', a)
84     od = OptionDescription('od', '', [a, b, c])
85     a.impl_add_consistency('not_equal', b)
86     c = Config(od)
87     assert set(od._cache_consistencies.keys()) == set([a, b])
88
89
90 def test_consistency_not_equal_multi():
91     a = IntOption('a', '', multi=True)
92     b = IntOption('b', '', multi=True)
93     od = OptionDescription('od', '', [a, b])
94     a.impl_add_consistency('not_equal', b)
95     c = Config(od)
96     assert c.a == []
97     assert c.b == []
98     c.a = [1]
99     del(c.a)
100     c.a = [1]
101     raises(ValueError, "c.b = [1]")
102     c.b = [2]
103
104
105 def test_consistency_default():
106     a = IntOption('a', '', 1)
107     b = IntOption('b', '', 1)
108     raises(ValueError, "a.impl_add_consistency('not_equal', b)")
109
110
111 def test_consistency_default_multi():
112     a = IntOption('a', '', [2, 1], multi=True)
113     b = IntOption('b', '', [1, 1], multi=True)
114     c = IntOption('c', '', [1, 2], multi=True)
115     raises(ValueError, "a.impl_add_consistency('not_equal', b)")
116     a.impl_add_consistency('not_equal', c)
117
118
119 def test_consistency_default_diff():
120     a = IntOption('a', '', 3)
121     b = IntOption('b', '', 1)
122     od = OptionDescription('od', '', [a, b])
123     a.impl_add_consistency('not_equal', b)
124     c = Config(od)
125     raises(ValueError, "c.a = 1")
126     c.a = 2
127     c.b = 3
128     assert c.getowner(a) is owners.user
129     raises(ValueError, "del(c.a)")
130     assert c.getowner(a) is owners.user
131
132
133 def test_consistency_ip_netmask():
134     a = IPOption('a', '')
135     b = NetmaskOption('b', '')
136     od = OptionDescription('od', '', [a, b])
137     b.impl_add_consistency('ip_netmask', a)
138     c = Config(od)
139     c.a = '192.168.1.1'
140     c.b = '255.255.255.0'
141     c.a = '192.168.1.2'
142     c.b = '255.255.255.255'
143     c.b = '255.255.255.0'
144     raises(ValueError, "c.a = '192.168.1.0'")
145
146
147 def test_consistency_network_netmask():
148     a = NetworkOption('a', '')
149     b = NetmaskOption('b', '')
150     od = OptionDescription('od', '', [a, b])
151     b.impl_add_consistency('network_netmask', a)
152     c = Config(od)
153     c.a = '192.168.1.1'
154     c.b = '255.255.255.255'
155     del(c.b)
156     c.a = '192.168.1.0'
157     c.b = '255.255.255.0'
158     raises(ValueError, "c.a = '192.168.1.1'")
159
160
161 def test_consistency_ip_netmask_error_multi():
162     a = IPOption('a', '', multi=True)
163     b = NetmaskOption('b', '')
164     od = OptionDescription('od', '', [a, b])
165     raises(ConfigError, "b.impl_add_consistency('ip_netmask', a)")
166
167
168 def test_consistency_ip_netmask_multi():
169     a = IPOption('a', '', multi=True)
170     b = NetmaskOption('b', '', multi=True)
171     od = OptionDescription('od', '', [a, b])
172     b.impl_add_consistency('ip_netmask', a)
173     c = Config(od)
174     c.a = ['192.168.1.1']
175     c.b = ['255.255.255.0']
176     c.a = ['192.168.1.2']
177     c.b = ['255.255.255.255']
178     c.b = ['255.255.255.0']
179     raises(ValueError, "c.a = ['192.168.1.0']")
180
181
182 def test_consistency_network_netmask_multi():
183     a = NetworkOption('a', '', multi=True)
184     b = NetmaskOption('b', '', multi=True)
185     od = OptionDescription('od', '', [a, b])
186     b.impl_add_consistency('network_netmask', a)
187     c = Config(od)
188     c.a = ['192.168.1.1']
189     c.b = ['255.255.255.255']
190     del(c.b)
191     c.a = ['192.168.1.0']
192     c.b = ['255.255.255.0']
193     raises(ValueError, "c.a = ['192.168.1.1']")
194
195
196 def test_consistency_ip_netmask_multi_master():
197     a = IPOption('a', '', multi=True)
198     b = NetmaskOption('b', '', multi=True)
199     od = OptionDescription('a', '', [a, b])
200     od.impl_set_group_type(groups.master)
201     b.impl_add_consistency('ip_netmask', a)
202     c = Config(od)
203     c.a = ['192.168.1.1']
204     c.b = ['255.255.255.0']
205     c.a = ['192.168.1.2']
206     c.b = ['255.255.255.255']
207     c.b = ['255.255.255.0']
208     raises(ValueError, "c.a = ['192.168.1.0']")
209     c.a = ['192.168.1.2', '192.168.1.3']
210
211
212 def test_consistency_network_netmask_multi_master():
213     a = NetworkOption('a', '', multi=True)
214     b = NetmaskOption('b', '', multi=True)
215     od = OptionDescription('a', '', [a, b])
216     od.impl_set_group_type(groups.master)
217     b.impl_add_consistency('network_netmask', a)
218     c = Config(od)
219     c.a = ['192.168.1.1']
220     c.b = ['255.255.255.255']
221     del(c.b)
222     c.a = ['192.168.1.0']
223     c.b = ['255.255.255.0']
224     raises(ValueError, "c.a = ['192.168.1.1']")
225
226
227 def test_consistency_broadcast():
228     a = NetworkOption('a', '', multi=True)
229     b = NetmaskOption('b', '', multi=True)
230     c = BroadcastOption('c', '', multi=True)
231     od = OptionDescription('a', '', [a, b, c])
232     od.impl_set_group_type(groups.master)
233     b.impl_add_consistency('network_netmask', a)
234     c.impl_add_consistency('broadcast', a, b)
235     c = Config(od)
236     #first, test network_netmask
237     c.a = ['192.168.1.128']
238     raises(ValueError, "c.b = ['255.255.255.0']")
239     #
240     c.a = ['192.168.1.0']
241     c.b = ['255.255.255.0']
242     c.c = ['192.168.1.255']
243     raises(ValueError, "c.a = ['192.168.1.1']")
244     #
245     c.a = ['192.168.1.0', '192.168.2.128']
246     c.b = ['255.255.255.0', '255.255.255.128']
247     c.c = ['192.168.1.255', '192.168.2.255']
248     raises(ValueError, "c.c[1] = '192.168.2.128'")
249     c.c[1] = '192.168.2.255'
250
251
252 def test_consistency_broadcast_default():
253     a = NetworkOption('a', '', '192.168.1.0')
254     b = NetmaskOption('b', '', '255.255.255.128')
255     c = BroadcastOption('c', '', '192.168.2.127')
256     d = BroadcastOption('d', '', '192.168.1.127')
257     od = OptionDescription('a', '', [a, b, c])
258     raises(ValueError, "c.impl_add_consistency('broadcast', a, b)")
259     od2 = OptionDescription('a', '', [a, b, d])
260     d.impl_add_consistency('broadcast', a, b)
261
262
263 def test_consistency_not_all():
264     #_cache_consistencies is not None by not options has consistencies
265     a = NetworkOption('a', '', multi=True)
266     b = NetmaskOption('b', '', multi=True)
267     c = BroadcastOption('c', '', multi=True)
268     od = OptionDescription('a', '', [a, b, c])
269     od.impl_set_group_type(groups.master)
270     b.impl_add_consistency('network_netmask', a)
271     c = Config(od)
272     c.a = ['192.168.1.0']
273     c.b = ['255.255.255.0']
274     c.c = ['192.168.1.255']