review exception
[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, owners
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.find_first(byname='nom_machine', type_='value') == "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 config.creole.make_dict() == 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 config.creole.make_dict(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     raises(TypeError, 'grp.set_group_type(groups.default)')
64
65 def test_iter_on_groups():
66     descr = make_description()
67     config = Config(descr)
68     result = list(config.creole.iter_groups(group_type=groups.family))
69     group_names = [res[0] for res in result]
70     assert group_names == ['general', 'interface1']
71
72 def test_iter_on_empty_group():
73     config = Config(OptionDescription("name", "descr", [] ))
74     result = list(config.iter_groups())
75     assert result == []
76     for i in config.iter_groups():
77         pass
78     for i in config:
79         pass
80     assert [] == list(config)
81
82 def test_groups_with_master():
83     ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
84     netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True)
85     interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
86     interface1.set_group_type(groups.master)
87     assert interface1.get_group_type() == groups.master
88
89 def test_groups_with_master_in_config():
90     ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
91     netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True)
92     interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
93     interface1.set_group_type(groups.master)
94     cfg = Config(interface1)
95     assert interface1.get_group_type() == groups.master
96
97 def test_allowed_groups():
98     ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
99     netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True)
100     interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
101     raises(ValueError, "interface1.set_group_type('toto')")
102
103 def test_master_not_valid_name():
104     ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
105     netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True)
106     invalid_group = OptionDescription('interface1', '', [ip_admin_eth0, netmask_admin_eth0])
107     raises(ValueError, "invalid_group.set_group_type(groups.master)")
108
109 def test_sub_group_in_master_group():
110     ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
111     netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True)
112     subgroup = OptionDescription("subgroup", '', [])
113     invalid_group = OptionDescription('ip_admin_eth0', '', [subgroup, ip_admin_eth0, netmask_admin_eth0])
114     raises(ValueError, "invalid_group.set_group_type(groups.master)")
115
116 def test_group_always_has_multis():
117     ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
118     netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau")
119     group = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
120     raises(ValueError, "group.set_group_type(groups.master)")
121
122 #____________________________________________________________
123
124 def test_values_with_master_and_slaves():
125     ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
126     netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True)
127     interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
128     interface1.set_group_type(groups.master)
129     maconfig = OptionDescription('toto', '', [interface1])
130     cfg = Config(maconfig)
131     opt = cfg.unwrap_from_path("ip_admin_eth0.ip_admin_eth0")
132     owner = cfg._cfgimpl_context._cfgimpl_settings.getowner()
133     assert interface1.get_group_type() == groups.master
134     assert cfg.cfgimpl_get_values().getowner(opt) == owners.default
135     cfg.ip_admin_eth0.ip_admin_eth0.append("192.168.230.145")
136     assert  cfg.ip_admin_eth0.ip_admin_eth0 == ["192.168.230.145"]
137     assert cfg.cfgimpl_get_values().getowner(opt) == owner
138
139 def test_reset_values_with_master_and_slaves():
140     ip_admin_eth0 = StrOption('ip_admin_eth0', "ip réseau autorisé", multi=True)
141     netmask_admin_eth0 = StrOption('netmask_admin_eth0', "masque du sous-réseau", multi=True)
142     interface1 = OptionDescription('ip_admin_eth0', '', [ip_admin_eth0, netmask_admin_eth0])
143     interface1.set_group_type(groups.master)
144     maconfig = OptionDescription('toto', '', [interface1])
145     cfg = Config(maconfig)
146     opt = cfg.unwrap_from_path("ip_admin_eth0.ip_admin_eth0")
147     owner = cfg._cfgimpl_context._cfgimpl_settings.getowner()
148     assert interface1.get_group_type() == groups.master
149     assert cfg.cfgimpl_get_values().getowner(opt) == owners.default
150     cfg.ip_admin_eth0.ip_admin_eth0.append("192.168.230.145")
151     assert cfg.cfgimpl_get_values().getowner(opt) == owner
152     cfg.cfgimpl_get_values().reset(opt)
153     assert cfg.cfgimpl_get_values().getowner(opt) == owners.default
154     assert  cfg.ip_admin_eth0.ip_admin_eth0 == []