support multi requires with inverse set to True
[tiramisu.git] / test / test_requires.py
1 # coding: utf-8
2 import autopath
3 from tiramisu import setting
4 setting.expires_time = 1
5 from tiramisu.option import IPOption, OptionDescription, BoolOption, IntOption
6 from tiramisu.config import Config
7 from tiramisu.error import PropertiesOptionError, RequirementError
8 from py.test import raises
9
10
11 def test_requires():
12     a = BoolOption('activate_service', '', True)
13     b = IPOption('ip_address_service', '',
14                  requires=[(a, False, 'disabled')])
15     od = OptionDescription('service', '', [a, b])
16     c = Config(od)
17     c.read_write()
18     c.ip_address_service
19     c.activate_service = False
20     props = []
21     try:
22         c.ip_address_service
23     except PropertiesOptionError, err:
24         props = err.proptype
25     assert props == ['disabled']
26
27
28 def test_requires_same_action():
29     a = BoolOption('activate_service', '', True)
30     b = BoolOption('activate_service_web', '', True,
31                    requires=[(a, False, 'new')])
32
33     d = IPOption('ip_address_service_web', '',
34                  requires=[(b, False, 'disabled', False, True, False)])
35     od = OptionDescription('service', '', [a, b, d])
36     c = Config(od)
37     c.read_write()
38     c.cfgimpl_get_settings().append('new')
39     c.activate_service
40     c.activate_service_web
41     c.ip_address_service_web
42     c.activate_service = False
43     #
44     props = []
45     try:
46         c.activate_service_web
47     except PropertiesOptionError, err:
48         props = err.proptype
49     assert props == ['new']
50     #
51     props = []
52     try:
53         c.ip_address_service_web
54     except PropertiesOptionError, err:
55         props = err.proptype
56     assert props == ['disabled']
57
58
59 def test_requires_transitive():
60     a = BoolOption('activate_service', '', True)
61     b = BoolOption('activate_service_web', '', True,
62                    requires=[(a, False, 'disabled')])
63
64     d = IPOption('ip_address_service_web', '',
65                  requires=[(b, False, 'disabled')])
66     od = OptionDescription('service', '', [a, b, d])
67     c = Config(od)
68     c.read_write()
69     c.activate_service
70     c.activate_service_web
71     c.ip_address_service_web
72     c.activate_service = False
73     #
74     props = []
75     try:
76         c.activate_service_web
77     except PropertiesOptionError, err:
78         props = err.proptype
79     assert props == ['disabled']
80     #
81     props = []
82     try:
83         c.ip_address_service_web
84     except PropertiesOptionError, err:
85         props = err.proptype
86     assert props == ['disabled']
87
88
89 def test_requires_transitive_bis():
90     a = BoolOption('activate_service', '', True)
91     abis = BoolOption('activate_service_bis', '', True)
92     b = BoolOption('activate_service_web', '', True,
93                    requires=[(a, True, 'disabled', True)])
94
95     d = IPOption('ip_address_service_web', '',
96                  requires=[(b, True, 'disabled', True)])
97     od = OptionDescription('service', '', [a, abis, b, d])
98     c = Config(od)
99     c.read_write()
100     #
101     c.activate_service_web
102     c.ip_address_service_web
103     c.activate_service = False
104     #
105     props = []
106     try:
107         c.activate_service_web
108     except PropertiesOptionError, err:
109         props = err.proptype
110     assert props == ['disabled']
111     #
112     props = []
113     try:
114         c.ip_address_service_web
115     except PropertiesOptionError, err:
116         props = err.proptype
117     assert props == ['disabled']
118
119
120 def test_requires_transitive_hidden_disabled():
121     a = BoolOption('activate_service', '', True)
122     b = BoolOption('activate_service_web', '', True,
123                    requires=[(a, False, 'hidden')])
124     d = IPOption('ip_address_service_web', '',
125                  requires=[(b, False, 'disabled')])
126     od = OptionDescription('service', '', [a, b, d])
127     c = Config(od)
128     c.read_write()
129     c.activate_service
130     c.activate_service_web
131     c.ip_address_service_web
132     c.activate_service = False
133     #
134     props = []
135     try:
136         c.activate_service_web
137     except PropertiesOptionError, err:
138         props = err.proptype
139     assert props == ['hidden']
140     raises(RequirementError, 'c.ip_address_service_web')
141
142
143 def test_requires_not_transitive():
144     a = BoolOption('activate_service', '', True)
145     b = BoolOption('activate_service_web', '', True,
146                    requires=[(a, False, 'disabled')])
147     d = IPOption('ip_address_service_web', '',
148                  requires=[(b, False, 'disabled', False, False)])
149     od = OptionDescription('service', '', [a, b, d])
150     c = Config(od)
151     c.read_write()
152     c.activate_service
153     c.activate_service_web
154     c.ip_address_service_web
155     c.activate_service = False
156     #
157     props = []
158     try:
159         c.activate_service_web
160     except PropertiesOptionError, err:
161         props = err.proptype
162     assert props == ['disabled']
163     #
164     c.ip_address_service_web
165
166
167 def test_requires_None():
168     a = BoolOption('activate_service', '')
169     b = IPOption('ip_address_service', '',
170                  requires=[(a, None, 'disabled')])
171     od = OptionDescription('service', '', [a, b])
172     c = Config(od)
173     c.read_write()
174     props = []
175     try:
176         c.ip_address_service
177     except PropertiesOptionError, err:
178         props = err.proptype
179     assert props == ['disabled']
180     c.activate_service = False
181     c.ip_address_service
182
183
184 def test_requires_multi_disabled():
185     a = BoolOption('activate_service', '')
186     b = IntOption('num_service', '')
187     c = IPOption('ip_address_service', '',
188                  requires=[(a, True, 'disabled'), (b, 1, 'disabled')])
189     od = OptionDescription('service', '', [a, b, c])
190     c = Config(od)
191     c.read_write()
192
193     c.ip_address_service
194
195     c.activate_service = True
196     props = []
197     try:
198         c.ip_address_service
199     except PropertiesOptionError, err:
200         props = err.proptype
201     assert props == ['disabled']
202
203     c.activate_service = False
204     c.ip_address_service
205
206     c.num_service = 1
207     props = []
208     try:
209         c.ip_address_service
210     except PropertiesOptionError, err:
211         props = err.proptype
212     assert props == ['disabled']
213
214     c.activate_service = True
215     props = []
216     try:
217         c.ip_address_service
218     except PropertiesOptionError, err:
219         props = err.proptype
220     assert props == ['disabled']
221
222 def test_requires_multi_disabled_inverse():
223     a = BoolOption('activate_service', '')
224     b = IntOption('num_service', '')
225     c = IPOption('ip_address_service', '',
226                  requires=[(a, True, 'disabled', True), (b, 1, 'disabled', True)])
227     od = OptionDescription('service', '', [a, b, c])
228     c = Config(od)
229     c.read_write()
230
231     props = []
232     try:
233         c.ip_address_service
234     except PropertiesOptionError, err:
235         props = err.proptype
236     assert props == ['disabled']
237
238     c.activate_service = True
239     props = []
240     try:
241         c.ip_address_service
242     except PropertiesOptionError, err:
243         props = err.proptype
244     assert props == ['disabled']
245
246     c.activate_service = False
247     props = []
248     try:
249         c.ip_address_service
250     except PropertiesOptionError, err:
251         props = err.proptype
252     assert props == ['disabled']
253
254     c.num_service = 1
255     props = []
256     try:
257         c.ip_address_service
258     except PropertiesOptionError, err:
259         props = err.proptype
260     assert props == ['disabled']
261
262     c.activate_service = True
263     c.ip_address_service