optimise mandatory_warnings
[tiramisu.git] / test / test_cache.py
1 # coding: utf-8
2 from autopath import do_autopath
3 do_autopath()
4
5 from tiramisu import setting
6 setting.expires_time = 1
7 from tiramisu.option import IntOption, OptionDescription
8 from tiramisu.config import Config
9 from tiramisu.error import ConfigError, PropertiesOptionError
10
11
12 from time import sleep, time
13 from py.test import raises
14
15
16 def make_description():
17     u1 = IntOption('u1', '', multi=True)
18     u2 = IntOption('u2', '')
19     u3 = IntOption('u3', '', multi=True)
20     return OptionDescription('od1', '', [u1, u2, u3])
21
22
23 def test_cache_config():
24     od1 = make_description()
25     assert od1.impl_already_build_caches() is False
26     c = Config(od1)
27     assert od1.impl_already_build_caches() is True
28     c
29
30
31 def test_cache():
32     od1 = make_description()
33     c = Config(od1)
34     values = c.cfgimpl_get_values()
35     settings = c.cfgimpl_get_settings()
36     c.u1
37     assert 'u1' in values._p_.get_cached(c)
38     assert 'u1' in settings._p_.get_cached(c)
39     c.u2
40     assert 'u1' in values._p_.get_cached(c)
41     assert 'u1' in settings._p_.get_cached(c)
42     assert 'u2' in values._p_.get_cached(c)
43     assert 'u2' in settings._p_.get_cached(c)
44
45
46 def test_get_cache():
47     # force a value in cache, try if reget corrupted value
48     od1 = make_description()
49     c = Config(od1)
50     values = c.cfgimpl_get_values()
51     settings = c.cfgimpl_get_settings()
52     ntime = time() + 1
53     settings._p_.setcache('u1', set(['inject']), ntime)
54     assert 'inject' in settings[od1.u1]
55     values._p_.setcache('u1', 100, ntime)
56     assert c.u1 == [100]
57
58
59 def test_get_cache_no_expire():
60     # force a value in cache, try if reget corrupted value
61     od1 = make_description()
62     c = Config(od1)
63     values = c.cfgimpl_get_values()
64     settings = c.cfgimpl_get_settings()
65     settings._p_.setcache('u1', set(['inject2']), None)
66     assert 'inject2' in settings[od1.u1]
67     values._p_.setcache('u1', 200, None)
68     assert c.u1 == [200]
69
70
71 def test_cache_reset():
72     od1 = make_description()
73     c = Config(od1)
74     values = c.cfgimpl_get_values()
75     settings = c.cfgimpl_get_settings()
76     #when change a value
77     c.u1
78     assert 'u1' in values._p_.get_cached(c)
79     assert 'u1' in settings._p_.get_cached(c)
80     c.u2 = 1
81     assert 'u1' not in values._p_.get_cached(c)
82     assert 'u1' not in settings._p_.get_cached(c)
83     #when remove a value
84     c.u1
85     assert 'u1' in values._p_.get_cached(c)
86     assert 'u1' in settings._p_.get_cached(c)
87     del(c.u2)
88     assert 'u1' not in values._p_.get_cached(c)
89     assert 'u1' not in settings._p_.get_cached(c)
90     #when add/del property
91     c.u1
92     assert 'u1' in values._p_.get_cached(c)
93     assert 'u1' in settings._p_.get_cached(c)
94     c.cfgimpl_get_settings()[od1.u2].append('test')
95     assert 'u1' not in values._p_.get_cached(c)
96     assert 'u1' not in settings._p_.get_cached(c)
97     c.u1
98     assert 'u1' in values._p_.get_cached(c)
99     assert 'u1' in settings._p_.get_cached(c)
100     c.cfgimpl_get_settings()[od1.u2].remove('test')
101     assert 'u1' not in values._p_.get_cached(c)
102     assert 'u1' not in settings._p_.get_cached(c)
103     #when enable/disabled property
104     c.u1
105     assert 'u1' in values._p_.get_cached(c)
106     assert 'u1' in settings._p_.get_cached(c)
107     c.cfgimpl_get_settings().append('test')
108     assert 'u1' not in values._p_.get_cached(c)
109     assert 'u1' not in settings._p_.get_cached(c)
110     c.u1
111     assert 'u1' in values._p_.get_cached(c)
112     assert 'u1' in settings._p_.get_cached(c)
113     c.cfgimpl_get_settings().remove('test')
114     assert 'u1' not in values._p_.get_cached(c)
115     assert 'u1' not in settings._p_.get_cached(c)
116
117
118 def test_cache_reset_multi():
119     od1 = make_description()
120     c = Config(od1)
121     values = c.cfgimpl_get_values()
122     settings = c.cfgimpl_get_settings()
123     #when change a value
124     c.u1
125     assert 'u1' in values._p_.get_cached(c)
126     assert 'u1' in settings._p_.get_cached(c)
127     c.u3 = [1]
128     assert 'u1' not in values._p_.get_cached(c)
129     assert 'u1' not in settings._p_.get_cached(c)
130     #when append value
131     c.u1
132     assert 'u1' in values._p_.get_cached(c)
133     assert 'u1' in settings._p_.get_cached(c)
134     c.u3.append(1)
135     assert 'u1' not in values._p_.get_cached(c)
136     assert 'u1' not in settings._p_.get_cached(c)
137     #when pop value
138     c.u1
139     assert 'u1' in values._p_.get_cached(c)
140     assert 'u1' in settings._p_.get_cached(c)
141     c.u3.pop(1)
142     assert 'u1' not in values._p_.get_cached(c)
143     assert 'u1' not in settings._p_.get_cached(c)
144     #when remove a value
145     c.u1
146     assert 'u1' in values._p_.get_cached(c)
147     assert 'u1' in settings._p_.get_cached(c)
148     del(c.u3)
149     assert 'u1' not in values._p_.get_cached(c)
150     assert 'u1' not in settings._p_.get_cached(c)
151
152
153 def test_reset_cache():
154     od1 = make_description()
155     c = Config(od1)
156     values = c.cfgimpl_get_values()
157     settings = c.cfgimpl_get_settings()
158     c.u1
159     assert 'u1' in values._p_.get_cached(c)
160     assert 'u1' in settings._p_.get_cached(c)
161     c.cfgimpl_reset_cache()
162     assert 'u1' not in values._p_.get_cached(c)
163     assert 'u1' not in settings._p_.get_cached(c)
164     c.u1
165     sleep(1)
166     c.u1
167     sleep(1)
168     c.u2
169     assert 'u1' in values._p_.get_cached(c)
170     assert 'u1' in settings._p_.get_cached(c)
171     assert 'u2' in values._p_.get_cached(c)
172     assert 'u2' in settings._p_.get_cached(c)
173     c.cfgimpl_reset_cache()
174     assert 'u1' not in values._p_.get_cached(c)
175     assert 'u1' not in settings._p_.get_cached(c)
176     assert 'u2' not in values._p_.get_cached(c)
177     assert 'u2' not in settings._p_.get_cached(c)
178
179
180 def test_reset_cache_subconfig():
181     od1 = make_description()
182     od2 = OptionDescription('od2', '', [od1])
183     c = Config(od2)
184     values = c.cfgimpl_get_values()
185     c.od1.u1
186     assert 'od1.u1' in values._p_.get_cached(c)
187     c.od1.cfgimpl_reset_cache()
188     assert 'od1.u1' not in values._p_.get_cached(c)
189
190
191 def test_reset_cache_only_expired():
192     od1 = make_description()
193     c = Config(od1)
194     values = c.cfgimpl_get_values()
195     settings = c.cfgimpl_get_settings()
196     c.u1
197     assert 'u1' in values._p_.get_cached(c)
198     assert 'u1' in settings._p_.get_cached(c)
199     c.cfgimpl_reset_cache(True)
200     assert 'u1' in values._p_.get_cached(c)
201     assert 'u1' in settings._p_.get_cached(c)
202     sleep(1)
203     c.u1
204     sleep(1)
205     c.u2
206     assert 'u1' in values._p_.get_cached(c)
207     assert 'u1' in settings._p_.get_cached(c)
208     assert 'u2' in values._p_.get_cached(c)
209     assert 'u2' in settings._p_.get_cached(c)
210     c.cfgimpl_reset_cache(True)
211     assert 'u1' not in values._p_.get_cached(c)
212     assert 'u1' not in settings._p_.get_cached(c)
213     assert 'u2' in values._p_.get_cached(c)
214     assert 'u2' in settings._p_.get_cached(c)
215
216
217 def test_cache_not_expire():
218     od1 = make_description()
219     c = Config(od1)
220     values = c.cfgimpl_get_values()
221     settings = c.cfgimpl_get_settings()
222     settings.remove('expire')
223     c.u1
224     assert 'u1' in values._p_.get_cached(c)
225     assert 'u1' in settings._p_.get_cached(c)
226     c.cfgimpl_reset_cache(True)
227     assert 'u1' in values._p_.get_cached(c)
228     assert 'u1' in settings._p_.get_cached(c)
229     sleep(1)
230     c.u2
231     assert 'u1' in values._p_.get_cached(c)
232     assert 'u1' in settings._p_.get_cached(c)
233     assert 'u2' in values._p_.get_cached(c)
234     assert 'u2' in settings._p_.get_cached(c)
235     c.cfgimpl_reset_cache(True)
236     assert 'u1' in values._p_.get_cached(c)
237     assert 'u1' in settings._p_.get_cached(c)
238     assert 'u2' in values._p_.get_cached(c)
239     assert 'u2' in settings._p_.get_cached(c)
240
241
242 def test_cache_not_cache():
243     od1 = make_description()
244     c = Config(od1)
245     values = c.cfgimpl_get_values()
246     settings = c.cfgimpl_get_settings()
247     settings.remove('cache')
248     c.u1
249     assert 'u1' not in values._p_.get_cached(c)
250     assert 'u1' not in settings._p_.get_cached(c)
251
252
253 def test_reset_cache_only():
254     od1 = make_description()
255     c = Config(od1)
256     values = c.cfgimpl_get_values()
257     settings = c.cfgimpl_get_settings()
258     c.u1
259     assert 'u1' in values._p_.get_cached(c)
260     assert 'u1' in settings._p_.get_cached(c)
261     c.cfgimpl_reset_cache(only=('values',))
262     assert 'u1' not in values._p_.get_cached(c)
263     assert 'u1' in settings._p_.get_cached(c)
264     c.u1
265     assert 'u1' in values._p_.get_cached(c)
266     assert 'u1' in settings._p_.get_cached(c)
267     c.cfgimpl_reset_cache(only=('settings',))
268     assert 'u1' in values._p_.get_cached(c)
269     assert 'u1' not in settings._p_.get_cached(c)
270
271
272 def test_force_cache():
273     u1 = IntOption('u1', '', multi=True)
274     u2 = IntOption('u2', '')
275     u3 = IntOption('u3', '', multi=True)
276     u4 = IntOption('u4', '', properties=('disabled',))
277     od = OptionDescription('od1', '', [u1, u2, u3, u4])
278     c = Config(od)
279     c.cfgimpl_get_settings().remove('expire')
280
281     c.cfgimpl_get_values().force_cache()
282     assert c.cfgimpl_get_values()._p_.get_cached(c) == {'u1': ([], None), 'u3': ([], None), 'u2': (None, None), 'u4': (None, None)}
283     assert c.cfgimpl_get_settings()._p_.get_cached(c) == {'u4': (set(['disabled']), None), 'u1': (set([]), None), 'u3': (set([]), None), 'u2': (set([]), None)}
284     c.read_only()
285
286     c.cfgimpl_get_values().force_cache()
287     assert c.cfgimpl_get_values()._p_.get_cached(c) == {'u1': ([], None), 'u3': ([], None), 'u2': (None, None)}
288     assert c.cfgimpl_get_settings()._p_.get_cached(c) == {'u4': (set(['disabled']), None), 'u1': (set([]), None), 'u3': (set([]), None), 'u2': (set([]), None)}
289
290     c.cfgimpl_get_settings().remove('cache')
291     raises(ConfigError, "c.cfgimpl_get_values().force_cache()")