bfb0df8b337f21ffbefb8130cac8fc6a76fa2019
[tiramisu.git] / test / test_parsing_group.py
1 # coding: utf-8
2 import autopath
3 from tiramisu.config import *
4 from tiramisu.option import *
5 from tiramisu.setting import groups
6
7 from py.test import raises
8
9 def make_description():
10     numero_etab = StrOption('numero_etab', "identifiant de l'établissement")
11     nom_machine = StrOption('nom_machine', "nom de la machine", default="eoleng")
12     nombre_interfaces = IntOption('nombre_interfaces', "nombre d'interfaces à activer",
13                                    default=1)
14     activer_proxy_client = BoolOption('activer_proxy_client', "utiliser un proxy",
15                                       default=False)
16     mode_conteneur_actif = BoolOption('mode_conteneur_actif', "le serveur est en mode conteneur",
17                                       default=False)
18     adresse_serveur_ntp = StrOption('serveur_ntp', "adresse serveur ntp", multi=True)
19     time_zone = ChoiceOption('time_zone', 'fuseau horaire du serveur',
20                                 ['Paris', 'Londres'], 'Paris')
21
22     ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé")
23     netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau")
24
25     master = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
26     interface1 = OptionDescription('interface1', '', [master])
27     interface1.set_group_type(groups.family)
28
29     general = OptionDescription('general', '', [numero_etab, nom_machine,
30                                              nombre_interfaces, activer_proxy_client,
31                                              mode_conteneur_actif, adresse_serveur_ntp,
32                                              time_zone])
33     general.set_group_type(groups.family)
34     creole = OptionDescription('creole', 'first tiramisu configuration', [general, interface1])
35     descr = OptionDescription('baseconfig', 'baseconifgdescr', [creole] )
36     return descr
37
38 def test_base_config():
39     descr = make_description()
40     config = Config(descr)
41     assert config.creole.general.activer_proxy_client == False
42     assert config.creole.general.nom_machine == "eoleng"
43     assert config.get('nom_machine') == "eoleng"
44     result = {'general.numero_etab': None, 'general.nombre_interfaces': 1,
45     'general.serveur_ntp': [], 'interface1.ip_admin_eth0.ip_admin_eth0': None,
46     'general.mode_conteneur_actif': False, 'general.time_zone': 'Paris',
47     'interface1.ip_admin_eth0.netmask_admin_eth0': None, 'general.nom_machine':
48     'eoleng', 'general.activer_proxy_client': False}
49     assert make_dict(config.creole) == result
50     result = {'serveur_ntp': [], 'mode_conteneur_actif': False,
51     'ip_admin_eth0': None, 'time_zone': 'Paris', 'numero_etab': None,
52     'netmask_admin_eth0': None, 'nom_machine': 'eoleng', 'activer_proxy_client':
53     False, 'nombre_interfaces': 1}
54     assert make_dict(config.creole, flatten=True) == result
55
56 def test_get_group_type():
57     descr = make_description()
58     config = Config(descr)
59     grp = config.unwrap_from_path('creole.general')
60     assert grp.get_group_type() == groups.family
61     assert grp.get_group_type() == 'family'
62     assert isinstance(grp.get_group_type(), groups.GroupType)
63     grp.set_group_type(groups.default)
64     assert isinstance(grp.get_group_type(), groups.DefaultGroupType)
65     assert grp.get_group_type() == groups.default
66     assert grp.get_group_type() == 'default'
67
68 def test_iter_on_groups():
69     descr = make_description()
70     config = Config(descr)
71     result = list(config.creole.iter_groups(group_type=groups.family))
72     group_names = [res[0] for res in result]
73     assert group_names == ['general', 'interface1']
74
75 def test_iter_on_empty_group():
76     config = Config(OptionDescription("name", "descr", [] ))
77     result = list(config.iter_groups())
78     assert result == []
79     for i in config.iter_groups():
80         pass
81     for i in config:
82         pass
83     assert [] == list(config)
84
85 def make_master_group():
86     numero_etab = StrOption('numero_etab', "identifiant de l'établissement")
87     nom_machine = StrOption('nom_machine', "nom de la machine", default="eoleng")
88     nombre_interfaces = IntOption('nombre_interfaces', "nombre d'interfaces à activer",
89                                    default=1)
90     activer_proxy_client = BoolOption('activer_proxy_client', "utiliser un proxy",
91                                       default=False)
92     mode_conteneur_actif = BoolOption('mode_conteneur_actif', "le serveur est en mode conteneur",
93                                       default=False)
94     adresse_serveur_ntp = StrOption('serveur_ntp', "adresse serveur ntp", multi=True)
95     time_zone = ChoiceOption('time_zone', 'fuseau horaire du serveur',
96                                 ['Paris', 'Londres'], 'Paris')
97
98     ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé")
99     netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau")
100
101     master = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
102     interface1 = OptionDescription('interface1', '', [master])
103     interface1.set_group_type('toto', master='interface1')
104
105     general = OptionDescription('general', '', [numero_etab, nom_machine,
106                                              nombre_interfaces, activer_proxy_client,
107                                              mode_conteneur_actif, adresse_serveur_ntp,
108                                              time_zone])
109     general.set_group_type(groups.family)
110     creole = OptionDescription('creole', 'first tiramisu configuration', [general, interface1])
111     descr = OptionDescription('baseconfig', 'baseconifgdescr', [creole] )
112     return descr
113
114 def test_allowed_groups():
115     raises(ConfigError, "descr = make_master_group()")
116
117 def make_master_group2():
118     numero_etab = StrOption('numero_etab', "identifiant de l'établissement")
119     nom_machine = StrOption('nom_machine', "nom de la machine", default="eoleng")
120     nombre_interfaces = IntOption('nombre_interfaces', "nombre d'interfaces à activer",
121                                    default=1)
122     activer_proxy_client = BoolOption('activer_proxy_client', "utiliser un proxy",
123                                       default=False)
124     mode_conteneur_actif = BoolOption('mode_conteneur_actif', "le serveur est en mode conteneur",
125                                       default=False)
126     adresse_serveur_ntp = StrOption('serveur_ntp', "adresse serveur ntp", multi=True)
127     time_zone = ChoiceOption('time_zone', 'fuseau horaire du serveur',
128                                 ['Paris', 'Londres'], 'Paris')
129
130     ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé")
131     netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau")
132
133     master = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
134     interface1 = OptionDescription('interface1', '', [master])
135     interface1.set_group_type(groups.group, master='interface1')
136
137     general = OptionDescription('general', '', [numero_etab, nom_machine,
138                                              nombre_interfaces, activer_proxy_client,
139                                              mode_conteneur_actif, adresse_serveur_ntp,
140                                              time_zone])
141     general.set_group_type(groups.family)
142     creole = OptionDescription('creole', 'first tiramisu configuration', [general, interface1])
143     descr = OptionDescription('baseconfig', 'baseconifgdescr', [creole] )
144     return descr
145
146 def test_group_is_master():
147     descr = make_master_group2()
148     conf = Config(descr)
149     interface1 = conf.creole.interface1
150     assert interface1._cfgimpl_descr.get_master_name() == "interface1"