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