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