masters shall have the same names as groups
[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 test_allowed_groups():
86     ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé")
87     netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau")
88     interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
89     raises(ConfigError, "interface1.set_group_type('toto')")
90
91 def test_master_not_valid_name():
92     ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé")
93     netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau")
94     invalid_group = OptionDescription('interface1', '', [ip_admin_eth0, netmask_admin_eth0])
95     raises(ConfigError, "invalid_group.set_group_type(groups.master)")
96
97 def test_sub_group_in_master_group():
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     subgroup = OptionDescription("subgroup", '', [])
101     invalid_group = OptionDescription('ip_admin_eth0', '', [subgroup, ip_admin_eth0, netmask_admin_eth0])
102     raises(ConfigError, "invalid_group.set_group_type(groups.master)")