python 3.5 support
[tiramisu.git] / test / test_duplicate_config.py
1 # coding: utf-8
2 from .autopath import do_autopath
3 do_autopath()
4
5 from tiramisu.setting import groups
6 from tiramisu.config import Config
7 from tiramisu.option import ChoiceOption, BoolOption, IntOption, \
8     StrOption, OptionDescription
9 from .test_state import _diff_opts, _diff_conf
10 from py.test import raises
11
12
13 def make_description():
14     numero_etab = StrOption('numero_etab', "identifiant de l'établissement")
15     nom_machine = StrOption('nom_machine', "nom de la machine", default="eoleng")
16     nombre_interfaces = IntOption('nombre_interfaces', "nombre d'interfaces à activer",
17                                   default=1)
18     activer_proxy_client = BoolOption('activer_proxy_client', "utiliser un proxy",
19                                       default=False)
20     mode_conteneur_actif = BoolOption('mode_conteneur_actif', "le serveur est en mode conteneur",
21                                       default=False)
22     mode_conteneur_actif2 = BoolOption('mode_conteneur_actif2', "le serveur est en mode conteneur2",
23                                        default=False, properties=('hidden',))
24
25     adresse_serveur_ntp = StrOption('serveur_ntp', "adresse serveur ntp", multi=True)
26     time_zone = ChoiceOption('time_zone', 'fuseau horaire du serveur',
27                              ('Paris', 'Londres'), 'Paris')
28     wantref_option = BoolOption('wantref', 'Test requires', default=False, properties=('force_store_value',))
29
30     ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé")
31     netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau")
32
33     master = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
34     interface1 = OptionDescription('interface1', '', [master])
35     interface1.impl_set_group_type(groups.family)
36
37     general = OptionDescription('general', '', [numero_etab, nom_machine,
38                                 nombre_interfaces, activer_proxy_client,
39                                 mode_conteneur_actif, mode_conteneur_actif2,
40                                 adresse_serveur_ntp, time_zone, wantref_option])
41     general.impl_set_group_type(groups.family)
42     new = OptionDescription('new', '', [], properties=('hidden',))
43     new.impl_set_group_type(groups.family)
44     creole = OptionDescription('creole', 'first tiramisu configuration', [general, interface1, new])
45     descr = OptionDescription('baseconfig', 'baseconifgdescr', [creole])
46     return descr
47
48
49 def test_duplicate():
50     cfg = Config(make_description())
51     ncfg = cfg.duplicate()
52     _diff_opts(cfg.cfgimpl_get_description(), ncfg.cfgimpl_get_description())
53     _diff_conf(cfg, ncfg)
54     cfg.creole.general.numero_etab = 'oui'
55     raises(AssertionError, "_diff_conf(cfg, ncfg)")
56     ncfg.creole.general.numero_etab = 'oui'
57     _diff_conf(cfg, ncfg)
58
59
60 def test_duplicate_force_store_value():
61     descr = make_description()
62     conf = Config(descr)
63     conf2 = Config(descr)
64     assert conf.cfgimpl_get_values().get_modified_values() == {'creole.general.wantref': ('forced', False)}
65     assert conf2.cfgimpl_get_values().get_modified_values() == {'creole.general.wantref': ('forced', False)}
66     conf.creole.general.wantref = True
67     assert conf.cfgimpl_get_values().get_modified_values() == {'creole.general.wantref': ('user', True)}
68     assert conf2.cfgimpl_get_values().get_modified_values() == {'creole.general.wantref': ('forced', False)}