add 'cache' property
[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_cache_reset():
46     od1 = make_description()
47     c = Config(od1)
48     values = c.cfgimpl_get_values()
49     settings = c.cfgimpl_get_settings()
50     #when change a value
51     c.u1
52     assert 'u1' in values._p_.get_cached(c)
53     assert 'u1' in settings._p_.get_cached(c)
54     c.u2 = 1
55     assert 'u1' not in values._p_.get_cached(c)
56     assert 'u1' not in settings._p_.get_cached(c)
57     #when remove a value
58     c.u1
59     assert 'u1' in values._p_.get_cached(c)
60     assert 'u1' in settings._p_.get_cached(c)
61     del(c.u2)
62     assert 'u1' not in values._p_.get_cached(c)
63     assert 'u1' not in settings._p_.get_cached(c)
64     #when add/del property
65     c.u1
66     assert 'u1' in values._p_.get_cached(c)
67     assert 'u1' in settings._p_.get_cached(c)
68     c.cfgimpl_get_settings()[od1.u2].append('test')
69     assert 'u1' not in values._p_.get_cached(c)
70     assert 'u1' not in settings._p_.get_cached(c)
71     c.u1
72     assert 'u1' in values._p_.get_cached(c)
73     assert 'u1' in settings._p_.get_cached(c)
74     c.cfgimpl_get_settings()[od1.u2].remove('test')
75     assert 'u1' not in values._p_.get_cached(c)
76     assert 'u1' not in settings._p_.get_cached(c)
77     #when enable/disabled property
78     c.u1
79     assert 'u1' in values._p_.get_cached(c)
80     assert 'u1' in settings._p_.get_cached(c)
81     c.cfgimpl_get_settings().append('test')
82     assert 'u1' not in values._p_.get_cached(c)
83     assert 'u1' not in settings._p_.get_cached(c)
84     c.u1
85     assert 'u1' in values._p_.get_cached(c)
86     assert 'u1' in settings._p_.get_cached(c)
87     c.cfgimpl_get_settings().remove('test')
88     assert 'u1' not in values._p_.get_cached(c)
89     assert 'u1' not in settings._p_.get_cached(c)
90
91
92 def test_cache_reset_multi():
93     od1 = make_description()
94     c = Config(od1)
95     values = c.cfgimpl_get_values()
96     settings = c.cfgimpl_get_settings()
97     #when change a value
98     c.u1
99     assert 'u1' in values._p_.get_cached(c)
100     assert 'u1' in settings._p_.get_cached(c)
101     c.u3 = [1]
102     assert 'u1' not in values._p_.get_cached(c)
103     assert 'u1' not in settings._p_.get_cached(c)
104     #when append value
105     c.u1
106     assert 'u1' in values._p_.get_cached(c)
107     assert 'u1' in settings._p_.get_cached(c)
108     c.u3.append(1)
109     assert 'u1' not in values._p_.get_cached(c)
110     assert 'u1' not in settings._p_.get_cached(c)
111     #when pop value
112     c.u1
113     assert 'u1' in values._p_.get_cached(c)
114     assert 'u1' in settings._p_.get_cached(c)
115     c.u3.pop(1)
116     assert 'u1' not in values._p_.get_cached(c)
117     assert 'u1' not in settings._p_.get_cached(c)
118     #when remove a value
119     c.u1
120     assert 'u1' in values._p_.get_cached(c)
121     assert 'u1' in settings._p_.get_cached(c)
122     del(c.u3)
123     assert 'u1' not in values._p_.get_cached(c)
124     assert 'u1' not in settings._p_.get_cached(c)
125
126
127 def test_reset_cache():
128     od1 = make_description()
129     c = Config(od1)
130     values = c.cfgimpl_get_values()
131     settings = c.cfgimpl_get_settings()
132     c.u1
133     assert 'u1' in values._p_.get_cached(c)
134     assert 'u1' in settings._p_.get_cached(c)
135     c.cfgimpl_reset_cache()
136     assert 'u1' not in values._p_.get_cached(c)
137     assert 'u1' not in settings._p_.get_cached(c)
138     c.u1
139     sleep(1)
140     c.u1
141     sleep(1)
142     c.u2
143     assert 'u1' in values._p_.get_cached(c)
144     assert 'u1' in settings._p_.get_cached(c)
145     assert 'u2' in values._p_.get_cached(c)
146     assert 'u2' 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     assert 'u2' not in values._p_.get_cached(c)
151     assert 'u2' not in settings._p_.get_cached(c)
152
153
154 def test_reset_cache_subconfig():
155     od1 = make_description()
156     od2 = OptionDescription('od2', '', [od1])
157     c = Config(od2)
158     values = c.cfgimpl_get_values()
159     c.od1.u1
160     assert 'od1.u1' in values._p_.get_cached(c)
161     c.od1.cfgimpl_reset_cache()
162     assert 'od1.u1' not in values._p_.get_cached(c)
163
164
165 def test_reset_cache_only_expired():
166     od1 = make_description()
167     c = Config(od1)
168     values = c.cfgimpl_get_values()
169     settings = c.cfgimpl_get_settings()
170     c.u1
171     assert 'u1' in values._p_.get_cached(c)
172     assert 'u1' in settings._p_.get_cached(c)
173     c.cfgimpl_reset_cache(True)
174     assert 'u1' in values._p_.get_cached(c)
175     assert 'u1' in settings._p_.get_cached(c)
176     sleep(1)
177     c.u1
178     sleep(1)
179     c.u2
180     assert 'u1' in values._p_.get_cached(c)
181     assert 'u1' in settings._p_.get_cached(c)
182     assert 'u2' in values._p_.get_cached(c)
183     assert 'u2' in settings._p_.get_cached(c)
184     c.cfgimpl_reset_cache(True)
185     assert 'u1' not in values._p_.get_cached(c)
186     assert 'u1' not in settings._p_.get_cached(c)
187     assert 'u2' in values._p_.get_cached(c)
188     assert 'u2' in settings._p_.get_cached(c)
189
190
191 def test_cache_not_expire():
192     od1 = make_description()
193     c = Config(od1)
194     values = c.cfgimpl_get_values()
195     settings = c.cfgimpl_get_settings()
196     settings.remove('expire')
197     c.u1
198     assert 'u1' in values._p_.get_cached(c)
199     assert 'u1' in settings._p_.get_cached(c)
200     c.cfgimpl_reset_cache(True)
201     assert 'u1' in values._p_.get_cached(c)
202     assert 'u1' in settings._p_.get_cached(c)
203     sleep(1)
204     c.u2
205     assert 'u1' in values._p_.get_cached(c)
206     assert 'u1' in settings._p_.get_cached(c)
207     assert 'u2' in values._p_.get_cached(c)
208     assert 'u2' in settings._p_.get_cached(c)
209     c.cfgimpl_reset_cache(True)
210     assert 'u1' in values._p_.get_cached(c)
211     assert 'u1' in settings._p_.get_cached(c)
212     assert 'u2' in values._p_.get_cached(c)
213     assert 'u2' in settings._p_.get_cached(c)
214
215
216 def test_cache_not_cache():
217     od1 = make_description()
218     c = Config(od1)
219     values = c.cfgimpl_get_values()
220     settings = c.cfgimpl_get_settings()
221     settings.remove('cache')
222     c.u1
223     assert 'u1' not in values._p_.get_cached(c)
224     assert 'u1' not in settings._p_.get_cached(c)
225
226
227 def test_reset_cache_only():
228     od1 = make_description()
229     c = Config(od1)
230     values = c.cfgimpl_get_values()
231     settings = c.cfgimpl_get_settings()
232     c.u1
233     assert 'u1' in values._p_.get_cached(c)
234     assert 'u1' in settings._p_.get_cached(c)
235     c.cfgimpl_reset_cache(only=('values',))
236     assert 'u1' not in values._p_.get_cached(c)
237     assert 'u1' in settings._p_.get_cached(c)
238     c.u1
239     assert 'u1' in values._p_.get_cached(c)
240     assert 'u1' in settings._p_.get_cached(c)
241     c.cfgimpl_reset_cache(only=('settings',))
242     assert 'u1' in values._p_.get_cached(c)
243     assert 'u1' not in settings._p_.get_cached(c)