add SubMulti
[tiramisu.git] / test / test_submulti.py
1 # coding: utf-8
2 import autopath
3 from tiramisu.setting import groups, owners
4 from tiramisu.config import Config
5 from tiramisu.option import StrOption, OptionDescription, submulti
6 from tiramisu.value import SubMulti, Multi
7 from tiramisu.error import SlaveError
8
9 from py.test import raises
10
11
12 def return_val():
13     return 'val'
14
15
16 def return_list(value=None):
17     return ['val', 'val']
18
19
20 def return_list2(value=None):
21     return [['val', 'val']]
22
23
24 def test_submulti():
25     multi = StrOption('multi', '', multi=submulti)
26     multi2 = StrOption('multi2', '', default_multi='yes', multi=submulti)
27     multi3 = StrOption('multi3', '', default=[['yes']], multi=submulti)
28     od = OptionDescription('od', '', [multi, multi2, multi3])
29     cfg = Config(od)
30     assert cfg.getowner(multi) == owners.default
31     assert cfg.multi == []
32     assert cfg.getowner(multi) == owners.default
33     assert cfg.getowner(multi) == owners.default
34     assert cfg.multi3 == [['yes']]
35     assert cfg.multi3[0] == ['yes']
36     assert cfg.multi3[0][0] == 'yes'
37     cfg.multi3[0]
38     assert cfg.getowner(multi) == owners.default
39
40
41 def test_append_submulti():
42     multi = StrOption('multi', '', multi=submulti)
43     multi2 = StrOption('multi2', '', default_multi='yes', multi=submulti)
44     multi3 = StrOption('multi3', '', default=[['yes']], multi=submulti)
45     od = OptionDescription('od', '', [multi, multi2, multi3])
46     cfg = Config(od)
47     owner = cfg.cfgimpl_get_settings().getowner()
48     assert cfg.multi == []
49     assert cfg.getowner(multi) == owners.default
50     cfg.multi.append()
51     assert cfg.getowner(multi) == owner
52     assert cfg.multi == [[]]
53     cfg.multi.append(['no'])
54     assert cfg.multi == [[], ['no']]
55     #
56     assert cfg.multi2 == []
57     assert cfg.getowner(multi2) == owners.default
58     cfg.multi2.append()
59     assert cfg.getowner(multi2) == owner
60     assert cfg.multi2 == [['yes']]
61     cfg.multi2.append(['no'])
62     assert cfg.multi2 == [['yes'], ['no']]
63     #
64     assert cfg.multi3 == [['yes']]
65     assert cfg.getowner(multi3) == owners.default
66     cfg.multi3.append()
67     assert cfg.getowner(multi3) == owner
68     assert cfg.multi3 == [['yes'], []]
69     cfg.multi3.append(['no'])
70     assert cfg.multi3 == [['yes'], [], ['no']]
71
72
73 def test_append_unvalide_submulti():
74     multi = StrOption('multi', '', multi=submulti)
75     multi2 = StrOption('multi2', '', default_multi='yes', multi=submulti)
76     multi3 = StrOption('multi3', '', default=[['yes']], multi=submulti)
77     od = OptionDescription('od', '', [multi, multi2, multi3])
78     cfg = Config(od)
79     assert cfg.multi == []
80     assert cfg.getowner(multi) == owners.default
81     raises(ValueError, "cfg.multi.append(1)")
82     assert cfg.multi == []
83     assert cfg.getowner(multi) == owners.default
84     #
85     assert cfg.multi2 == []
86     raises(ValueError, "cfg.multi2.append('no')")
87     assert cfg.getowner(multi) == owners.default
88     assert cfg.multi2 == []
89     #
90     assert cfg.multi3 == [['yes']]
91     assert cfg.getowner(multi3) == owners.default
92     raises(ValueError, "cfg.multi3[0].append(1)")
93     assert cfg.multi3 == [['yes']]
94     assert cfg.getowner(multi3) == owners.default
95     raises(ValueError, "cfg.multi3[0].append([])")
96     assert cfg.multi3 == [['yes']]
97     assert cfg.getowner(multi3) == owners.default
98
99
100 def test_pop_submulti():
101     multi = StrOption('multi', '', multi=submulti)
102     multi2 = StrOption('multi2', '', default_multi='yes', multi=submulti)
103     multi3 = StrOption('multi3', '', default=[['yes']], multi=submulti)
104     od = OptionDescription('od', '', [multi, multi2, multi3])
105     cfg = Config(od)
106     owner = cfg.cfgimpl_get_settings().getowner()
107     assert cfg.multi == []
108     assert cfg.getowner(multi3) == owners.default
109     cfg.multi = [['no', 'yes'], ['peharps']]
110     assert cfg.getowner(multi) == owner
111     assert cfg.multi == [['no', 'yes'], ['peharps']]
112     cfg.multi[0].pop(1)
113     assert cfg.multi == [['no'], ['peharps']]
114     cfg.multi[0].pop(0)
115     assert cfg.multi == [[], ['peharps']]
116     cfg.multi.pop(1)
117     assert cfg.multi == [[]]
118     cfg.multi.pop(0)
119     assert cfg.multi == []
120     #
121     assert cfg.multi3 == [['yes']]
122     assert cfg.getowner(multi3) == owners.default
123     cfg.multi3.pop(0)
124     assert cfg.getowner(multi) == owner
125     assert cfg.multi3 == []
126     del(cfg.multi3)
127     assert cfg.getowner(multi3) == owners.default
128     cfg.multi3[0].pop(0)
129     assert cfg.getowner(multi3) == owner
130     assert cfg.multi3 == [[]]
131
132
133 def test_sort_submulti():
134     multi = StrOption('multi', '', multi=submulti)
135     multi2 = StrOption('multi2', '', default_multi='yes', multi=submulti)
136     multi3 = StrOption('multi3', '', default=[['yes']], multi=submulti)
137     od = OptionDescription('od', '', [multi, multi2, multi3])
138     cfg = Config(od)
139     owner = cfg.cfgimpl_get_settings().getowner()
140     assert cfg.multi == []
141     assert cfg.getowner(multi) == owners.default
142     cfg.multi.sort()
143     assert cfg.getowner(multi) == owner
144     cfg.multi = [['no', 'yes'], ['peharps']]
145     cfg.multi.sort()
146     assert cfg.multi == [['no', 'yes'], ['peharps']]
147     cfg.multi.sort(reverse=True)
148     assert cfg.multi == [['peharps'], ['no', 'yes']]
149     cfg.multi[1].sort(reverse=True)
150     assert cfg.multi == [['peharps'], ['yes', 'no']]
151     cfg.multi[1].sort()
152     assert cfg.multi == [['peharps'], ['no', 'yes']]
153     #
154     assert cfg.multi3 == [['yes']]
155     assert cfg.getowner(multi3) == owners.default
156     cfg.multi3.sort()
157     assert cfg.getowner(multi) == owner
158     assert cfg.multi3 == [['yes']]
159     del(cfg.multi3)
160     assert cfg.getowner(multi3) == owners.default
161     cfg.multi3[0].sort()
162     assert cfg.getowner(multi) == owner
163     assert cfg.multi3 == [['yes']]
164
165
166 def test_reverse_submulti():
167     multi = StrOption('multi', '', multi=submulti)
168     multi2 = StrOption('multi2', '', default_multi='yes', multi=submulti)
169     multi3 = StrOption('multi3', '', default=[['yes']], multi=submulti)
170     od = OptionDescription('od', '', [multi, multi2, multi3])
171     cfg = Config(od)
172     owner = cfg.cfgimpl_get_settings().getowner()
173     assert cfg.multi == []
174     assert cfg.getowner(multi) == owners.default
175     cfg.multi.reverse()
176     assert cfg.getowner(multi) == owner
177     cfg.multi = [['no', 'yes'], ['peharps']]
178     cfg.multi.reverse()
179     assert cfg.multi == [['peharps'], ['no', 'yes']]
180     cfg.multi[1].reverse()
181     assert cfg.multi == [['peharps'], ['yes', 'no']]
182     #
183     assert cfg.multi3 == [['yes']]
184     assert cfg.getowner(multi3) == owners.default
185     cfg.multi3.reverse()
186     assert cfg.getowner(multi) == owner
187     assert cfg.multi3 == [['yes']]
188     del(cfg.multi3)
189     assert cfg.getowner(multi3) == owners.default
190     cfg.multi3[0].reverse()
191     assert cfg.getowner(multi) == owner
192     assert cfg.multi3 == [['yes']]
193
194
195 def test_insert_submulti():
196     multi = StrOption('multi', '', multi=submulti)
197     multi2 = StrOption('multi2', '', default_multi='yes', multi=submulti)
198     multi3 = StrOption('multi3', '', default=[['yes']], multi=submulti)
199     od = OptionDescription('od', '', [multi, multi2, multi3])
200     cfg = Config(od)
201     owner = cfg.cfgimpl_get_settings().getowner()
202     assert cfg.multi == []
203     assert cfg.getowner(multi) == owners.default
204     cfg.multi.insert(0, ['no'])
205     assert cfg.getowner(multi) == owner
206     assert cfg.multi == [['no']]
207     assert isinstance(cfg.multi, Multi)
208     assert isinstance(cfg.multi[0], SubMulti)
209     #
210     assert cfg.multi3 == [['yes']]
211     assert cfg.getowner(multi3) == owners.default
212     cfg.multi3.insert(1, [])
213     assert cfg.getowner(multi3) == owner
214     assert cfg.multi3 == [['yes'], []]
215     cfg.multi3.insert(0, ['no'])
216     assert cfg.multi3 == [['no'], ['yes'], []]
217     del(cfg.multi3)
218     assert cfg.getowner(multi3) == owners.default
219     cfg.multi3[0].insert(0, 'no')
220     assert cfg.getowner(multi3) == owner
221     assert cfg.multi3 == [['no', 'yes']]
222
223
224 def test_insert_unvalide_submulti():
225     multi = StrOption('multi', '', multi=submulti)
226     multi2 = StrOption('multi2', '', default_multi='yes', multi=submulti)
227     multi3 = StrOption('multi3', '', default=[['yes']], multi=submulti)
228     od = OptionDescription('od', '', [multi, multi2, multi3])
229     cfg = Config(od)
230     assert cfg.multi == []
231     assert cfg.getowner(multi) == owners.default
232     raises(ValueError, "cfg.multi.insert(0, 1)")
233     assert cfg.multi == []
234     assert cfg.getowner(multi) == owners.default
235     #
236     assert cfg.multi3 == [['yes']]
237     assert cfg.getowner(multi3) == owners.default
238     raises(ValueError, "cfg.multi3[0].insert(0, 1)")
239     assert cfg.multi3 == [['yes']]
240     assert cfg.getowner(multi3) == owners.default
241
242
243 def test_extend_submulti():
244     multi = StrOption('multi', '', multi=submulti)
245     multi2 = StrOption('multi2', '', default_multi='yes', multi=submulti)
246     multi3 = StrOption('multi3', '', default=[['yes']], multi=submulti)
247     od = OptionDescription('od', '', [multi, multi2, multi3])
248     cfg = Config(od)
249     owner = cfg.cfgimpl_get_settings().getowner()
250     assert cfg.multi == []
251     assert cfg.getowner(multi) == owners.default
252     cfg.multi.extend([['no']])
253     assert cfg.getowner(multi) == owner
254     assert cfg.multi == [['no']]
255     assert isinstance(cfg.multi, Multi)
256     assert isinstance(cfg.multi[0], SubMulti)
257     #
258     assert cfg.multi3 == [['yes']]
259     assert cfg.getowner(multi3) == owners.default
260     cfg.multi3.extend([[]])
261     assert cfg.getowner(multi3) == owner
262     assert cfg.multi3 == [['yes'], []]
263     cfg.multi3.extend([['no']])
264     assert cfg.multi3 == [['yes'], [], ['no']]
265     del(cfg.multi3)
266     assert cfg.getowner(multi3) == owners.default
267     cfg.multi3[0].extend(['no'])
268     assert cfg.getowner(multi3) == owner
269     assert cfg.multi3 == [['yes', 'no']]
270
271
272 def test_extend_unvalide_submulti():
273     multi = StrOption('multi', '', multi=submulti)
274     multi2 = StrOption('multi2', '', default_multi='yes', multi=submulti)
275     multi3 = StrOption('multi3', '', default=[['yes']], multi=submulti)
276     od = OptionDescription('od', '', [multi, multi2, multi3])
277     cfg = Config(od)
278     assert cfg.multi == []
279     assert cfg.getowner(multi) == owners.default
280     raises(ValueError, "cfg.multi.extend([[1]])")
281     assert cfg.multi == []
282     assert cfg.getowner(multi) == owners.default
283     #
284     assert cfg.multi3 == [['yes']]
285     assert cfg.getowner(multi3) == owners.default
286     raises(ValueError, "cfg.multi3[0].extend([1])")
287     assert cfg.multi3 == [['yes']]
288     assert cfg.getowner(multi3) == owners.default
289
290
291 def test_callback_submulti_str():
292     multi = StrOption('multi', '', multi=submulti, callback=return_val)
293     od = OptionDescription('od', '', [multi])
294     cfg = Config(od)
295     cfg.read_write()
296     owner = cfg.cfgimpl_get_settings().getowner()
297     assert cfg.getowner(multi) == owners.default
298     assert cfg.multi == [['val']]
299     cfg.multi.append()
300     assert cfg.getowner(multi) == owner
301     assert cfg.multi == [['val'], ['val']]
302     del(cfg.multi)
303     assert cfg.getowner(multi) == owners.default
304     cfg.multi[0].append()
305     assert cfg.getowner(multi) == owner
306     assert cfg.multi == [['val', 'val']]
307
308
309 def test_callback_submulti_list():
310     multi = StrOption('multi', '', multi=submulti, callback=return_list)
311     od = OptionDescription('od', '', [multi])
312     cfg = Config(od)
313     cfg.read_write()
314     owner = cfg.cfgimpl_get_settings().getowner()
315     assert cfg.multi == [['val', 'val']]
316     assert cfg.getowner(multi) == owners.default
317     cfg.multi.append()
318     assert cfg.getowner(multi) == owner
319     assert cfg.multi == [['val', 'val'], ['val', 'val']]
320     del(cfg.multi)
321     assert cfg.getowner(multi) == owners.default
322     cfg.multi[0].append()
323     assert cfg.getowner(multi) == owner
324     assert cfg.multi == [['val', 'val', None]]
325
326
327 def test_callback_submulti_list_list():
328     multi = StrOption('multi', '', multi=submulti, callback=return_list2)
329     od = OptionDescription('od', '', [multi])
330     cfg = Config(od)
331     cfg.read_write()
332     owner = cfg.cfgimpl_get_settings().getowner()
333     assert cfg.multi == [['val', 'val']]
334     assert cfg.getowner(multi) == owners.default
335     cfg.multi.append()
336     assert cfg.getowner(multi) == owner
337     assert cfg.multi == [['val', 'val'], []]
338     del(cfg.multi)
339     assert cfg.getowner(multi) == owners.default
340     cfg.multi[0].append()
341     assert cfg.getowner(multi) == owner
342     assert cfg.multi == [['val', 'val', None]]
343
344
345 #FIXME multi sur une master
346
347
348 def test_groups_with_master_submulti():
349     ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
350     netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=submulti)
351     interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
352     interface1.impl_set_group_type(groups.master)
353     assert interface1.impl_get_group_type() == groups.master
354
355
356 def test_groups_with_master_in_config_submulti():
357     ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
358     netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=submulti)
359     interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
360     interface1.impl_set_group_type(groups.master)
361     Config(interface1)
362     assert interface1.impl_get_group_type() == groups.master
363
364
365 def test_values_with_master_and_slaves_submulti():
366     ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
367     netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=submulti)
368     interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
369     interface1.impl_set_group_type(groups.master)
370     maconfig = OptionDescription('toto', '', [interface1])
371     cfg = Config(maconfig)
372     cfg.read_write()
373     owner = cfg.cfgimpl_get_settings().getowner()
374     assert interface1.impl_get_group_type() == groups.master
375     assert cfg.getowner(ip_admin_eth0) == owners.default
376     assert cfg.getowner(netmask_admin_eth0) == owners.default
377     assert cfg.ip_admin_eth0.netmask_admin_eth0 == []
378     cfg.ip_admin_eth0.ip_admin_eth0.append("192.168.230.145")
379     assert cfg.ip_admin_eth0.ip_admin_eth0 == ["192.168.230.145"]
380     assert cfg.ip_admin_eth0.netmask_admin_eth0 == [[]]
381     assert cfg.getowner(ip_admin_eth0) == owner
382     assert cfg.getowner(netmask_admin_eth0) == owners.default
383     cfg.ip_admin_eth0.ip_admin_eth0 = ["192.168.230.145", "192.168.230.147"]
384     assert cfg.ip_admin_eth0.netmask_admin_eth0 == [[], []]
385     raises(SlaveError, 'cfg.ip_admin_eth0.netmask_admin_eth0.append(None)')
386     raises(SlaveError, 'cfg.ip_admin_eth0.netmask_admin_eth0.pop(0)')
387     cfg.ip_admin_eth0.netmask_admin_eth0[0].append('255.255.255.0')
388     assert cfg.ip_admin_eth0.netmask_admin_eth0 == [['255.255.255.0'], []]
389     cfg.ip_admin_eth0.netmask_admin_eth0[0].pop(0)
390     assert cfg.ip_admin_eth0.netmask_admin_eth0 == [[], []]
391     raises(ValueError, 'cfg.ip_admin_eth0.netmask_admin_eth0 = ["255.255.255.0", "255.255.255.0"]')
392
393
394 def test_reset_values_with_master_and_slaves_submulti():
395     ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
396     netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=submulti)
397     interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
398     interface1.impl_set_group_type(groups.master)
399     maconfig = OptionDescription('toto', '', [interface1])
400     cfg = Config(maconfig)
401     cfg.read_write()
402     owner = cfg.cfgimpl_get_settings().getowner()
403     assert interface1.impl_get_group_type() == groups.master
404     assert cfg.getowner(ip_admin_eth0) == owners.default
405     assert cfg.getowner(netmask_admin_eth0) == owners.default
406     cfg.ip_admin_eth0.ip_admin_eth0.append("192.168.230.145")
407     assert cfg.getowner(ip_admin_eth0) == owner
408     assert cfg.getowner(netmask_admin_eth0) == owners.default
409     del(cfg.ip_admin_eth0.ip_admin_eth0)
410     assert cfg.getowner(ip_admin_eth0) == owners.default
411     assert cfg.getowner(netmask_admin_eth0) == owners.default
412     assert cfg.ip_admin_eth0.ip_admin_eth0 == []
413     assert cfg.ip_admin_eth0.netmask_admin_eth0 == []
414     #
415     cfg.ip_admin_eth0.ip_admin_eth0.append("192.168.230.145")
416     cfg.ip_admin_eth0.netmask_admin_eth0[0].append('255.255.255.0')
417     assert cfg.getowner(ip_admin_eth0) == owner
418     assert cfg.getowner(netmask_admin_eth0) == owner
419     del(cfg.ip_admin_eth0.ip_admin_eth0)
420     assert cfg.getowner(ip_admin_eth0) == owners.default
421     assert cfg.getowner(netmask_admin_eth0) == owners.default
422     assert cfg.ip_admin_eth0.ip_admin_eth0 == []
423     assert cfg.ip_admin_eth0.netmask_admin_eth0 == []
424
425
426 def test_values_with_master_and_slaves_slave_submulti():
427     ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
428     netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=submulti)
429     interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
430     interface1.impl_set_group_type(groups.master)
431     maconfig = OptionDescription('toto', '', [interface1])
432     cfg = Config(maconfig)
433     cfg.read_write()
434     assert cfg.ip_admin_eth0.netmask_admin_eth0 == []
435     raises(SlaveError, "cfg.ip_admin_eth0.netmask_admin_eth0 = [['255.255.255.0']]")
436     cfg.ip_admin_eth0.ip_admin_eth0.append("192.168.230.145")
437     cfg.ip_admin_eth0.netmask_admin_eth0 = [['255.255.255.0']]
438     cfg.ip_admin_eth0.netmask_admin_eth0[0] = ['255.255.255.0']
439     cfg.ip_admin_eth0.netmask_admin_eth0[0][0] = '255.255.255.0'
440     raises(SlaveError, "cfg.ip_admin_eth0.netmask_admin_eth0 = [['255.255.255.0'], ['255.255.255.0']]")
441     raises(SlaveError, "cfg.ip_admin_eth0.netmask_admin_eth0 = []")
442     del(cfg.ip_admin_eth0.netmask_admin_eth0)
443     cfg.ip_admin_eth0.netmask_admin_eth0 = [['255.255.255.0']]
444     cfg.ip_admin_eth0.ip_admin_eth0.append("192.168.230.145")
445     assert cfg.ip_admin_eth0.netmask_admin_eth0 == [['255.255.255.0'], []]
446     cfg.ip_admin_eth0.netmask_admin_eth0 = [['255.255.255.0'], ['255.255.255.0']]
447     raises(SlaveError, 'cfg.ip_admin_eth0.netmask_admin_eth0.pop(1)')
448
449
450 def test_values_with_master_and_slaves_master_submulti():
451     ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
452     netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=submulti)
453     interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
454     interface1.impl_set_group_type(groups.master)
455     maconfig = OptionDescription('toto', '', [interface1])
456     cfg = Config(maconfig)
457     cfg.read_write()
458     cfg.ip_admin_eth0.ip_admin_eth0.append("192.168.230.145")
459     cfg.ip_admin_eth0.ip_admin_eth0 = ["192.168.230.145"]
460     cfg.ip_admin_eth0.ip_admin_eth0 = ["192.168.230.145", "192.168.230.145"]
461     cfg.ip_admin_eth0.netmask_admin_eth0 = [['255.255.255.0'], ['255.255.255.0']]
462     raises(SlaveError, 'cfg.ip_admin_eth0.ip_admin_eth0 = ["192.168.230.145"]')
463     assert cfg.ip_admin_eth0.netmask_admin_eth0 == [['255.255.255.0'], ['255.255.255.0']]
464     cfg.ip_admin_eth0.ip_admin_eth0.pop(1)
465     assert cfg.ip_admin_eth0.ip_admin_eth0 == ["192.168.230.145"]
466     assert cfg.ip_admin_eth0.netmask_admin_eth0 == [['255.255.255.0']]
467     del(cfg.ip_admin_eth0.ip_admin_eth0)
468     assert cfg.ip_admin_eth0.ip_admin_eth0 == []
469     assert cfg.ip_admin_eth0.netmask_admin_eth0 == []
470
471
472 def test_values_with_master_and_slaves_master_error_submulti():
473     ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
474     netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=submulti)
475     interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
476     interface1.impl_set_group_type(groups.master)
477     maconfig = OptionDescription('toto', '', [interface1])
478     cfg = Config(maconfig)
479     cfg.read_write()
480     cfg.ip_admin_eth0.ip_admin_eth0 = ["192.168.230.145", "192.168.230.145"]
481     raises(SlaveError, "cfg.ip_admin_eth0.netmask_admin_eth0 = [['255.255.255.0']]")
482     raises(SlaveError, "cfg.ip_admin_eth0.netmask_admin_eth0 = [['255.255.255.0'], ['255.255.255.0'], ['255.255.255.0']]")
483     cfg.ip_admin_eth0.netmask_admin_eth0 = [['255.255.255.0'], ['255.255.255.0']]
484     raises(SlaveError, "cfg.ip_admin_eth0.netmask_admin_eth0 = [['255.255.255.0']]")
485     raises(SlaveError, "cfg.ip_admin_eth0.netmask_admin_eth0 = [['255.255.255.0'], ['255.255.255.0'], ['255.255.255.0']]")
486
487
488 def test_values_with_master_owner_submulti():
489     ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
490     netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=submulti)
491     interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
492     interface1.impl_set_group_type(groups.master)
493     maconfig = OptionDescription('toto', '', [interface1])
494     cfg = Config(maconfig)
495     cfg.read_write()
496     owner = cfg.cfgimpl_get_settings().getowner()
497     assert cfg.getowner(ip_admin_eth0) == owners.default
498     assert cfg.getowner(netmask_admin_eth0) == owners.default
499     cfg.ip_admin_eth0.ip_admin_eth0.append("192.168.230.145")
500     assert cfg.getowner(ip_admin_eth0) == owner
501     assert cfg.getowner(netmask_admin_eth0) == owners.default
502     cfg.ip_admin_eth0.ip_admin_eth0.pop(0)
503     assert cfg.getowner(ip_admin_eth0) == owner
504     assert cfg.getowner(netmask_admin_eth0) == owners.default
505
506
507 def test_values_with_master_disabled_submulti():
508     ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
509     netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=submulti)
510     interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
511     interface1.impl_set_group_type(groups.master)
512     maconfig = OptionDescription('toto', '', [interface1])
513     cfg = Config(maconfig)
514     cfg.read_write()
515     cfg.ip_admin_eth0.ip_admin_eth0.append("192.168.230.145")
516     cfg.ip_admin_eth0.ip_admin_eth0.pop(0)
517     cfg.ip_admin_eth0.ip_admin_eth0.append("192.168.230.145")
518     cfg.ip_admin_eth0.netmask_admin_eth0 = [["192.168.230.145"]]
519     cfg.ip_admin_eth0.ip_admin_eth0.pop(0)
520     del(cfg.ip_admin_eth0.netmask_admin_eth0)
521     cfg.cfgimpl_get_settings()[netmask_admin_eth0].append('disabled')
522     cfg.ip_admin_eth0.ip_admin_eth0.append("192.168.230.145")
523     cfg.ip_admin_eth0.ip_admin_eth0.pop(0)
524
525     #delete with value in disabled var
526     cfg.cfgimpl_get_settings()[netmask_admin_eth0].remove('disabled')
527     cfg.ip_admin_eth0.ip_admin_eth0.append("192.168.230.145")
528     cfg.ip_admin_eth0.netmask_admin_eth0 = [["192.168.230.145"]]
529     cfg.cfgimpl_get_settings()[netmask_admin_eth0].append('disabled')
530     cfg.ip_admin_eth0.ip_admin_eth0.pop(0)
531
532     #append with value in disabled var
533     cfg.cfgimpl_get_settings()[netmask_admin_eth0].remove('disabled')
534     cfg.ip_admin_eth0.ip_admin_eth0.append("192.168.230.145")
535     cfg.ip_admin_eth0.netmask_admin_eth0 = [["192.168.230.145"]]
536     cfg.cfgimpl_get_settings()[netmask_admin_eth0].append('disabled')
537     cfg.ip_admin_eth0.ip_admin_eth0.append('192.168.230.43')
538
539
540 def test_multi_insert_master_submulti():
541     ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
542     netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=submulti)
543     interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
544     interface1.impl_set_group_type(groups.master)
545     maconfig = OptionDescription('toto', '', [interface1])
546     cfg = Config(maconfig)
547     cfg.read_write()
548     raises(SlaveError, "cfg.ip_admin_eth0.ip_admin_eth0.insert(0, 'nok')")
549     raises(SlaveError, "cfg.ip_admin_eth0.netmask_admin_eth0.insert(0, 'nok')")
550     cfg.ip_admin_eth0.ip_admin_eth0.append('192.168.1.1')
551     raises(SlaveError, "cfg.ip_admin_eth0.netmask_admin_eth0[0].insert(0, 'nok')")
552
553
554 def test_multi_sort_master_submulti():
555     ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
556     netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=submulti)
557     interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
558     interface1.impl_set_group_type(groups.master)
559     maconfig = OptionDescription('toto', '', [interface1])
560     cfg = Config(maconfig)
561     cfg.read_write()
562     raises(SlaveError, "cfg.ip_admin_eth0.ip_admin_eth0.sort()")
563     raises(SlaveError, "cfg.ip_admin_eth0.netmask_admin_eth0.sort()")
564     cfg.ip_admin_eth0.ip_admin_eth0.append('192.168.1.1')
565     raises(SlaveError, "cfg.ip_admin_eth0.netmask_admin_eth0[0].sort()")
566
567
568 def test_multi_reverse_master_submulti():
569     ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
570     netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=submulti)
571     interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
572     interface1.impl_set_group_type(groups.master)
573     maconfig = OptionDescription('toto', '', [interface1])
574     cfg = Config(maconfig)
575     cfg.read_write()
576     raises(SlaveError, "cfg.ip_admin_eth0.ip_admin_eth0.reverse()")
577     raises(SlaveError, "cfg.ip_admin_eth0.netmask_admin_eth0.reverse()")
578     cfg.ip_admin_eth0.ip_admin_eth0.append('192.168.1.1')
579     raises(SlaveError, "cfg.ip_admin_eth0.netmask_admin_eth0[0].reverse()")
580
581
582 def test_multi_extend_master_submulti():
583     ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
584     netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=submulti)
585     interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
586     interface1.impl_set_group_type(groups.master)
587     maconfig = OptionDescription('toto', '', [interface1])
588     cfg = Config(maconfig)
589     cfg.read_write()
590     raises(SlaveError, "cfg.ip_admin_eth0.ip_admin_eth0.extend(['ok'])")
591     raises(SlaveError, "cfg.ip_admin_eth0.netmask_admin_eth0.extend(['ok'])")
592     cfg.ip_admin_eth0.ip_admin_eth0.append('192.168.1.1')
593     raises(SlaveError, "cfg.ip_admin_eth0.netmask_admin_eth0[0].extend(['ok'])")
594
595
596 def test_slave_submulti():
597     ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
598     netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=submulti)
599     interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
600     interface1.impl_set_group_type(groups.master)
601     maconfig = OptionDescription('toto', '', [interface1])
602     cfg = Config(maconfig)
603     cfg.read_write()
604     assert cfg.ip_admin_eth0.ip_admin_eth0.__class__.__name__ == 'Multi'
605     assert cfg.ip_admin_eth0.netmask_admin_eth0.__class__.__name__ == 'Multi'
606     cfg.ip_admin_eth0.ip_admin_eth0.append('192.168.1.1')
607     assert cfg.ip_admin_eth0.ip_admin_eth0.__class__.__name__ == 'Multi'
608     assert cfg.ip_admin_eth0.netmask_admin_eth0.__class__.__name__ == 'Multi'
609     assert cfg.ip_admin_eth0.ip_admin_eth0[0].__class__.__name__ == 'str'
610     assert cfg.ip_admin_eth0.netmask_admin_eth0[0].__class__.__name__ == 'SubMulti'
611
612
613 def test__master_is_submulti():
614     ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=submulti)
615     netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True)
616     interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
617     interface1.impl_set_group_type(groups.master)
618     maconfig = OptionDescription('toto', '', [interface1])
619     cfg = Config(maconfig)
620     cfg.read_write()
621     owner = cfg.cfgimpl_get_settings().getowner()
622     assert interface1.impl_get_group_type() == groups.master
623     assert cfg.getowner(ip_admin_eth0) == owners.default
624     assert cfg.getowner(netmask_admin_eth0) == owners.default
625     assert cfg.ip_admin_eth0.netmask_admin_eth0 == []
626     cfg.ip_admin_eth0.ip_admin_eth0.append(["192.168.230.145"])
627     assert cfg.ip_admin_eth0.ip_admin_eth0 == [["192.168.230.145"]]
628     assert cfg.ip_admin_eth0.netmask_admin_eth0 == [None]
629     assert cfg.getowner(ip_admin_eth0) == owner
630     assert cfg.getowner(netmask_admin_eth0) == owners.default
631     cfg.ip_admin_eth0.ip_admin_eth0 = [["192.168.230.145"], ["192.168.230.147"]]
632     assert cfg.ip_admin_eth0.netmask_admin_eth0 == [None, None]
633     raises(SlaveError, 'cfg.ip_admin_eth0.netmask_admin_eth0.append(None)')
634     raises(SlaveError, 'cfg.ip_admin_eth0.netmask_admin_eth0.pop(0)')
635     cfg.ip_admin_eth0.ip_admin_eth0[0].append('192.168.1.1')
636     assert cfg.ip_admin_eth0.ip_admin_eth0 == [["192.168.230.145", '192.168.1.1'], ["192.168.230.147"]]
637     cfg.ip_admin_eth0.ip_admin_eth0[0].pop(0)
638     assert cfg.ip_admin_eth0.ip_admin_eth0 == [["192.168.1.1"], ["192.168.230.147"]]
639     raises(ValueError, 'cfg.ip_admin_eth0.ip_admin_eth0 = ["192.168.1.1", "192.168.1.1"]')