3 from tiramisu.setting import groups, owners
4 from tiramisu.config import Config
5 from tiramisu.option import ChoiceOption, BoolOption, IntOption, \
6 StrOption, OptionDescription
7 from tiramisu.error import SlaveError, PropertiesOptionError
9 from py.test import raises
12 def make_description():
13 numero_etab = StrOption('numero_etab', "identifiant de l'établissement")
14 nom_machine = StrOption('nom_machine', "nom de la machine", default="eoleng")
15 nombre_interfaces = IntOption('nombre_interfaces', "nombre d'interfaces à activer",
17 activer_proxy_client = BoolOption('activer_proxy_client', "utiliser un proxy",
19 mode_conteneur_actif = BoolOption('mode_conteneur_actif', "le serveur est en mode conteneur",
21 mode_conteneur_actif2 = BoolOption('mode_conteneur_actif2', "le serveur est en mode conteneur2",
22 default=False, properties=('hidden',))
24 adresse_serveur_ntp = StrOption('serveur_ntp', "adresse serveur ntp", multi=True)
25 time_zone = ChoiceOption('time_zone', 'fuseau horaire du serveur',
26 ('Paris', 'Londres'), 'Paris')
28 ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé")
29 netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau")
31 master = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
32 interface1 = OptionDescription('interface1', '', [master])
33 interface1.impl_set_group_type(groups.family)
35 general = OptionDescription('general', '', [numero_etab, nom_machine,
36 nombre_interfaces, activer_proxy_client,
37 mode_conteneur_actif, mode_conteneur_actif2,
38 adresse_serveur_ntp, time_zone])
39 general.impl_set_group_type(groups.family)
40 new = OptionDescription('new', '', [], properties=('hidden',))
41 new.impl_set_group_type(groups.family)
42 creole = OptionDescription('creole', 'first tiramisu configuration', [general, interface1, new])
43 descr = OptionDescription('baseconfig', 'baseconifgdescr', [creole])
47 def test_base_config():
48 descr = make_description()
49 config = Config(descr)
51 assert config.creole.general.activer_proxy_client is False
52 assert config.creole.general.nom_machine == "eoleng"
53 assert config.find_first(byname='nom_machine', type_='value') == "eoleng"
54 result = {'general.numero_etab': None, 'general.nombre_interfaces': 1,
55 'general.serveur_ntp': [], 'interface1.ip_admin_eth0.ip_admin_eth0': None,
56 'general.mode_conteneur_actif': False, 'general.time_zone': 'Paris',
57 'interface1.ip_admin_eth0.netmask_admin_eth0': None, 'general.nom_machine':
58 'eoleng', 'general.activer_proxy_client': False}
59 assert config.creole.make_dict() == result
60 result = {'serveur_ntp': [], 'mode_conteneur_actif': False,
61 'ip_admin_eth0': None, 'time_zone': 'Paris', 'numero_etab': None,
62 'netmask_admin_eth0': None, 'nom_machine': 'eoleng', 'activer_proxy_client':
63 False, 'nombre_interfaces': 1}
64 assert config.creole.make_dict(flatten=True) == result
67 def test_make_dict_filter():
68 descr = make_description()
69 config = Config(descr)
71 subresult = {'numero_etab': None, 'nombre_interfaces': 1,
72 'serveur_ntp': [], 'mode_conteneur_actif': False,
73 'time_zone': 'Paris', 'nom_machine': 'eoleng',
74 'activer_proxy_client': False}
76 for key, value in subresult.items():
77 result['general.' + key] = value
78 assert config.creole.make_dict(withoption='numero_etab') == result
79 raises(AttributeError, "config.creole.make_dict(withoption='numero_etab', withvalue='toto')")
80 assert config.creole.make_dict(withoption='numero_etab', withvalue=None) == result
81 assert config.creole.general.make_dict(withoption='numero_etab') == subresult
84 def test_get_group_type():
85 descr = make_description()
86 config = Config(descr)
88 grp = config.unwrap_from_path('creole.general')
89 assert grp.impl_get_group_type() == groups.family
90 assert grp.impl_get_group_type() == 'family'
91 assert isinstance(grp.impl_get_group_type(), groups.GroupType)
92 raises(TypeError, 'grp.impl_set_group_type(groups.default)')
95 def test_iter_on_groups():
96 descr = make_description()
97 config = Config(descr)
99 result = list(config.creole.iter_groups(group_type=groups.family))
100 group_names = [res[0] for res in result]
101 assert group_names == ['general', 'interface1']
102 for i in config.creole.iter_groups(group_type=groups.family):
107 def test_iter_on_groups_force_permissive():
108 descr = make_description()
109 config = Config(descr)
111 config.cfgimpl_get_settings().setpermissive(('hidden',))
112 result = list(config.creole.general.__iter__(force_permissive=True))
113 group_names = [res[0] for res in result]
114 ass = ['numero_etab', 'nom_machine', 'nombre_interfaces',
115 'activer_proxy_client', 'mode_conteneur_actif',
116 'mode_conteneur_actif2', 'serveur_ntp', 'time_zone']
117 assert group_names == ass
118 group_names = [res[0] for res in config.creole.general]
119 ass.remove('mode_conteneur_actif2')
120 assert group_names == ass
123 def test_iter_group_on_groups_force_permissive():
124 descr = make_description()
125 config = Config(descr)
127 config.cfgimpl_get_settings().setpermissive(('hidden',))
128 result = list(config.creole.iter_groups(group_type=groups.family,
129 force_permissive=True))
130 group_names = [res[0] for res in result]
131 assert group_names == ['general', 'interface1', 'new']
134 def test_iter_on_groups_props():
135 descr = make_description()
136 config = Config(descr)
138 config.cfgimpl_get_settings()[descr.creole.interface1].append('disabled')
139 result = list(config.creole.iter_groups(group_type=groups.family))
140 group_names = [res[0] for res in result]
141 assert group_names == ['general']
144 def test_iter_on_empty_group():
145 config = Config(OptionDescription("name", "descr", []))
147 result = list(config.iter_groups())
149 for i in config.iter_groups():
153 assert [] == list(config)
156 def test_iter_not_group():
157 config = Config(OptionDescription("name", "descr", []))
159 raises(TypeError, "list(config.iter_groups(group_type='family'))")
162 def test_groups_with_master():
163 ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
164 netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True)
165 interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
166 interface1.impl_set_group_type(groups.master)
167 assert interface1.impl_get_group_type() == groups.master
170 def test_groups_with_master_in_config():
171 ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
172 netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True)
173 interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
174 interface1.impl_set_group_type(groups.master)
176 assert interface1.impl_get_group_type() == groups.master
179 def test_groups_with_master_hidden_in_config():
180 ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True, properties=('hidden',))
181 netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True, properties=('hidden',))
182 interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
183 interface1.impl_set_group_type(groups.master)
184 cfg = Config(interface1)
186 cfg.cfgimpl_get_settings().setpermissive(('hidden',))
187 cfg.getattr('ip_admin_eth0', force_permissive=True)
188 cfg.getattr('netmask_admin_eth0', force_permissive=True)
189 raises(PropertiesOptionError, "cfg.getattr('ip_admin_eth0')")
190 raises(PropertiesOptionError, "cfg.getattr('netmask_admin_eth0')")
193 def test_groups_with_master_hidden_in_config2():
194 ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
195 netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True, properties=('hidden',))
196 interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
197 interface1.impl_set_group_type(groups.master)
198 cfg = Config(interface1)
200 cfg.cfgimpl_get_settings().setpermissive(('hidden',))
201 cfg.getattr('ip_admin_eth0', force_permissive=True)
202 cfg.getattr('netmask_admin_eth0', force_permissive=True)
203 cfg.getattr('ip_admin_eth0')
204 raises(PropertiesOptionError, "cfg.getattr('netmask_admin_eth0')")
207 def test_groups_with_master_hidden_in_config3():
208 #if master is hidden, slave are hidden too
209 ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True, properties=('hidden',))
210 netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True)
211 interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
212 interface1.impl_set_group_type(groups.master)
213 cfg = Config(interface1)
215 cfg.cfgimpl_get_settings().setpermissive(('hidden',))
216 cfg.getattr('ip_admin_eth0', force_permissive=True)
217 cfg.getattr('netmask_admin_eth0', force_permissive=True)
218 raises(PropertiesOptionError, "cfg.getattr('ip_admin_eth0')")
219 raises(PropertiesOptionError, "cfg.getattr('netmask_admin_eth0')")
223 def test_allowed_groups():
224 ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
225 netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True)
226 interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
227 raises(ValueError, "interface1.impl_set_group_type('toto')")
230 def test_values_with_master_disabled_master():
231 ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
232 netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True)
233 interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
234 interface1.impl_set_group_type(groups.master)
235 maconfig = OptionDescription('toto', '', [interface1])
236 cfg = Config(maconfig)
238 cfg.ip_admin_eth0.ip_admin_eth0.append("192.168.230.145")
239 cfg.ip_admin_eth0.ip_admin_eth0.pop(0)
240 cfg.ip_admin_eth0.ip_admin_eth0.append("192.168.230.145")
241 cfg.ip_admin_eth0.netmask_admin_eth0 = ["192.168.230.145"]
242 del(cfg.ip_admin_eth0.netmask_admin_eth0)
243 cfg.cfgimpl_get_settings()[ip_admin_eth0].append('disabled')
244 raises(PropertiesOptionError, "cfg.ip_admin_eth0.netmask_admin_eth0[0] = '192.168.230.145'")
247 def test_master_not_valid_name():
248 ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
249 netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True)
250 invalid_group = OptionDescription('interface1', '', [ip_admin_eth0, netmask_admin_eth0])
251 raises(ValueError, "invalid_group.impl_set_group_type(groups.master)")
254 def test_sub_group_in_master_group():
255 ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
256 netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True)
257 subgroup = OptionDescription("subgroup", '', [])
258 invalid_group = OptionDescription('ip_admin_eth0', '', [subgroup, ip_admin_eth0, netmask_admin_eth0])
259 raises(ValueError, "invalid_group.impl_set_group_type(groups.master)")
262 def test_group_always_has_multis():
263 ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
264 netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau")
265 group = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
266 raises(ValueError, "group.impl_set_group_type(groups.master)")
269 #____________________________________________________________
270 def test_values_with_master_and_slaves():
271 ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
272 netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True)
273 interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
274 interface1.impl_set_group_type(groups.master)
275 maconfig = OptionDescription('toto', '', [interface1])
276 cfg = Config(maconfig)
278 owner = cfg.cfgimpl_get_settings().getowner()
279 assert interface1.impl_get_group_type() == groups.master
280 assert cfg.getowner(ip_admin_eth0) == owners.default
281 assert cfg.getowner(netmask_admin_eth0) == owners.default
282 assert cfg.ip_admin_eth0.netmask_admin_eth0 == []
283 cfg.ip_admin_eth0.ip_admin_eth0.append("192.168.230.145")
284 assert cfg.ip_admin_eth0.ip_admin_eth0 == ["192.168.230.145"]
285 assert cfg.ip_admin_eth0.netmask_admin_eth0 == [None]
286 assert cfg.getowner(ip_admin_eth0) == owner
287 assert cfg.getowner(netmask_admin_eth0) == owners.default
288 cfg.ip_admin_eth0.ip_admin_eth0 = ["192.168.230.145", "192.168.230.147"]
289 raises(SlaveError, 'cfg.ip_admin_eth0.netmask_admin_eth0.append(None)')
290 raises(SlaveError, 'cfg.ip_admin_eth0.netmask_admin_eth0.pop(0)')
293 def test_reset_values_with_master_and_slaves():
294 ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
295 netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True)
296 interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
297 interface1.impl_set_group_type(groups.master)
298 maconfig = OptionDescription('toto', '', [interface1])
299 cfg = Config(maconfig)
301 owner = cfg.cfgimpl_get_settings().getowner()
302 assert interface1.impl_get_group_type() == groups.master
303 assert cfg.getowner(ip_admin_eth0) == owners.default
304 assert cfg.getowner(netmask_admin_eth0) == owners.default
305 cfg.ip_admin_eth0.ip_admin_eth0.append("192.168.230.145")
306 assert cfg.getowner(ip_admin_eth0) == owner
307 assert cfg.getowner(netmask_admin_eth0) == owners.default
308 del(cfg.ip_admin_eth0.ip_admin_eth0)
309 assert cfg.getowner(ip_admin_eth0) == owners.default
310 assert cfg.getowner(netmask_admin_eth0) == owners.default
311 assert cfg.ip_admin_eth0.ip_admin_eth0 == []
312 assert cfg.ip_admin_eth0.netmask_admin_eth0 == []
315 def test_values_with_master_and_slaves_slave():
316 ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
317 netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True)
318 interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
319 interface1.impl_set_group_type(groups.master)
320 maconfig = OptionDescription('toto', '', [interface1])
321 cfg = Config(maconfig)
323 assert cfg.ip_admin_eth0.netmask_admin_eth0 == []
324 raises(SlaveError, "cfg.ip_admin_eth0.netmask_admin_eth0 = ['255.255.255.0']")
325 cfg.ip_admin_eth0.ip_admin_eth0.append("192.168.230.145")
326 cfg.ip_admin_eth0.netmask_admin_eth0 = ['255.255.255.0']
327 cfg.ip_admin_eth0.netmask_admin_eth0[0] = '255.255.255.0'
328 raises(SlaveError, "cfg.ip_admin_eth0.netmask_admin_eth0 = ['255.255.255.0', '255.255.255.0']")
329 raises(SlaveError, "cfg.ip_admin_eth0.netmask_admin_eth0 = []")
330 del(cfg.ip_admin_eth0.netmask_admin_eth0)
331 cfg.ip_admin_eth0.netmask_admin_eth0 = ['255.255.255.0']
332 cfg.ip_admin_eth0.ip_admin_eth0.append("192.168.230.145")
333 assert cfg.ip_admin_eth0.netmask_admin_eth0 == ['255.255.255.0', None]
334 cfg.ip_admin_eth0.netmask_admin_eth0 = ['255.255.255.0', '255.255.255.0']
335 raises(SlaveError, 'cfg.ip_admin_eth0.netmask_admin_eth0.pop(1)')
338 def test_values_with_master_and_slaves_master():
339 ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
340 netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True)
341 interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
342 interface1.impl_set_group_type(groups.master)
343 maconfig = OptionDescription('toto', '', [interface1])
344 cfg = Config(maconfig)
346 cfg.ip_admin_eth0.ip_admin_eth0.append("192.168.230.145")
347 cfg.ip_admin_eth0.ip_admin_eth0 = ["192.168.230.145"]
348 cfg.ip_admin_eth0.ip_admin_eth0 = ["192.168.230.145", "192.168.230.145"]
349 cfg.ip_admin_eth0.netmask_admin_eth0 = ['255.255.255.0', '255.255.255.0']
350 raises(SlaveError, 'cfg.ip_admin_eth0.ip_admin_eth0 = ["192.168.230.145"]')
351 assert cfg.ip_admin_eth0.netmask_admin_eth0 == ['255.255.255.0', '255.255.255.0']
352 cfg.ip_admin_eth0.ip_admin_eth0.pop(1)
353 assert cfg.ip_admin_eth0.ip_admin_eth0 == ["192.168.230.145"]
354 assert cfg.ip_admin_eth0.netmask_admin_eth0 == ['255.255.255.0']
355 del(cfg.ip_admin_eth0.ip_admin_eth0)
356 assert cfg.ip_admin_eth0.ip_admin_eth0 == []
357 assert cfg.ip_admin_eth0.netmask_admin_eth0 == []
360 def test_values_with_master_and_slaves_master_error():
361 ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
362 netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True)
363 interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
364 interface1.impl_set_group_type(groups.master)
365 maconfig = OptionDescription('toto', '', [interface1])
366 cfg = Config(maconfig)
368 cfg.ip_admin_eth0.ip_admin_eth0 = ["192.168.230.145", "192.168.230.145"]
369 raises(SlaveError, "cfg.ip_admin_eth0.netmask_admin_eth0 = ['255.255.255.0']")
370 raises(SlaveError, "cfg.ip_admin_eth0.netmask_admin_eth0 = ['255.255.255.0', '255.255.255.0', '255.255.255.0']")
371 cfg.ip_admin_eth0.netmask_admin_eth0 = ['255.255.255.0', '255.255.255.0']
372 raises(SlaveError, "cfg.ip_admin_eth0.netmask_admin_eth0 = ['255.255.255.0']")
373 raises(SlaveError, "cfg.ip_admin_eth0.netmask_admin_eth0 = ['255.255.255.0', '255.255.255.0', '255.255.255.0']")
376 def test_values_with_master_owner():
377 ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
378 netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True)
379 interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
380 interface1.impl_set_group_type(groups.master)
381 maconfig = OptionDescription('toto', '', [interface1])
382 cfg = Config(maconfig)
384 owner = cfg.cfgimpl_get_settings().getowner()
385 assert cfg.getowner(ip_admin_eth0) == owners.default
386 assert cfg.getowner(netmask_admin_eth0) == owners.default
387 cfg.ip_admin_eth0.ip_admin_eth0.append("192.168.230.145")
388 assert cfg.getowner(ip_admin_eth0) == owner
389 assert cfg.getowner(netmask_admin_eth0) == owners.default
390 cfg.ip_admin_eth0.ip_admin_eth0.pop(0)
391 assert cfg.getowner(ip_admin_eth0) == owner
392 assert cfg.getowner(netmask_admin_eth0) == owners.default
395 def test_values_with_master_disabled():
396 ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
397 netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True)
398 interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
399 interface1.impl_set_group_type(groups.master)
400 maconfig = OptionDescription('toto', '', [interface1])
401 cfg = Config(maconfig)
403 cfg.ip_admin_eth0.ip_admin_eth0.append("192.168.230.145")
404 cfg.ip_admin_eth0.ip_admin_eth0.pop(0)
405 cfg.ip_admin_eth0.ip_admin_eth0.append("192.168.230.145")
406 cfg.ip_admin_eth0.netmask_admin_eth0 = ["192.168.230.145"]
407 cfg.ip_admin_eth0.ip_admin_eth0.pop(0)
408 del(cfg.ip_admin_eth0.netmask_admin_eth0)
409 cfg.cfgimpl_get_settings()[netmask_admin_eth0].append('disabled')
410 cfg.ip_admin_eth0.ip_admin_eth0.append("192.168.230.145")
411 cfg.ip_admin_eth0.ip_admin_eth0.pop(0)
413 #delete with value in disabled var
414 cfg.cfgimpl_get_settings()[netmask_admin_eth0].remove('disabled')
415 cfg.ip_admin_eth0.ip_admin_eth0.append("192.168.230.145")
416 cfg.ip_admin_eth0.netmask_admin_eth0 = ["192.168.230.145"]
417 cfg.cfgimpl_get_settings()[netmask_admin_eth0].append('disabled')
418 cfg.ip_admin_eth0.ip_admin_eth0.pop(0)
420 #append with value in disabled var
421 cfg.cfgimpl_get_settings()[netmask_admin_eth0].remove('disabled')
422 cfg.ip_admin_eth0.ip_admin_eth0.append("192.168.230.145")
423 cfg.ip_admin_eth0.netmask_admin_eth0 = ["192.168.230.145"]
424 cfg.cfgimpl_get_settings()[netmask_admin_eth0].append('disabled')
425 cfg.ip_admin_eth0.ip_admin_eth0.append('192.168.230.43')
428 def test_multi_insert():
429 var = StrOption('var', '', ['ok'], multi=True)
430 od = OptionDescription('od', '', [var])
433 assert c.var == ['ok']
434 assert c.getowner(var) == owners.default
435 c.var.insert(0, 'nok')
436 assert c.var == ['nok', 'ok']
437 assert c.getowner(var) != owners.default
438 raises(ValueError, 'c.var.insert(0, 1)')
441 def test_multi_insert_master():
442 ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
443 netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True)
444 interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
445 interface1.impl_set_group_type(groups.master)
446 maconfig = OptionDescription('toto', '', [interface1])
447 cfg = Config(maconfig)
449 raises(SlaveError, "cfg.ip_admin_eth0.ip_admin_eth0.insert(0, 'nok')")
450 raises(SlaveError, "cfg.ip_admin_eth0.netmask_admin_eth0.insert(0, 'nok')")
453 def test_multi_sort():
454 var = StrOption('var', '', ['ok', 'nok'], multi=True)
455 od = OptionDescription('od', '', [var])
458 assert c.var == ['ok', 'nok']
459 assert c.getowner(var) == owners.default
461 assert c.var == ['nok', 'ok']
462 assert c.getowner(var) != owners.default
465 def test_multi_sort_master():
466 ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
467 netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True)
468 interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
469 interface1.impl_set_group_type(groups.master)
470 maconfig = OptionDescription('toto', '', [interface1])
471 cfg = Config(maconfig)
473 raises(SlaveError, "cfg.ip_admin_eth0.ip_admin_eth0.sort()")
474 raises(SlaveError, "cfg.ip_admin_eth0.netmask_admin_eth0.sort()")
477 def test_multi_reverse():
478 var = StrOption('var', '', ['ok', 'nok'], multi=True)
479 od = OptionDescription('od', '', [var])
482 assert c.var == ['ok', 'nok']
483 assert c.getowner(var) == owners.default
485 assert c.var == ['nok', 'ok']
486 assert c.getowner(var) != owners.default
489 def test_multi_reverse_master():
490 ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
491 netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True)
492 interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
493 interface1.impl_set_group_type(groups.master)
494 maconfig = OptionDescription('toto', '', [interface1])
495 cfg = Config(maconfig)
497 raises(SlaveError, "cfg.ip_admin_eth0.ip_admin_eth0.reverse()")
498 raises(SlaveError, "cfg.ip_admin_eth0.netmask_admin_eth0.reverse()")
501 def test_multi_extend():
502 var = StrOption('var', '', ['ok', 'nok'], multi=True)
503 od = OptionDescription('od', '', [var])
506 assert c.var == ['ok', 'nok']
507 assert c.getowner(var) == owners.default
508 c.var.extend(['pok'])
509 assert c.var == ['ok', 'nok', 'pok']
510 assert c.getowner(var) != owners.default
511 raises(ValueError, 'c.var.extend([1])')
514 def test_multi_extend_master():
515 ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
516 netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True)
517 interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
518 interface1.impl_set_group_type(groups.master)
519 maconfig = OptionDescription('toto', '', [interface1])
520 cfg = Config(maconfig)
522 raises(SlaveError, "cfg.ip_admin_eth0.ip_admin_eth0.extend(['ok'])")
523 raises(SlaveError, "cfg.ip_admin_eth0.netmask_admin_eth0.extend(['ok'])")
526 def test_multi_non_valid_value():
527 ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
528 maconfig = OptionDescription('toto', '', [ip_admin_eth0])
529 cfg = Config(maconfig)
531 cfg.ip_admin_eth0 = ['a']
532 raises(ValueError, 'cfg.ip_admin_eth0[0] = 1')