Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(63)

Side by Side Diff: client/tests/lru_test.py

Issue 2409103003: LRUDict: add timestamps (Closed)
Patch Set: fix test Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « client/tests/isolateserver_test.py ('k') | client/utils/lru.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2013 The LUCI Authors. All rights reserved. 2 # Copyright 2013 The LUCI Authors. All rights reserved.
3 # Use of this source code is governed under the Apache License, Version 2.0 3 # Use of this source code is governed under the Apache License, Version 2.0
4 # that can be found in the LICENSE file. 4 # that can be found in the LICENSE file.
5 5
6 import json 6 import json
7 import logging 7 import logging
8 import os 8 import os
9 import sys 9 import sys
10 import tempfile 10 import tempfile
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 # Pop in the middle. 125 # Pop in the middle.
126 lru_dict = self.prepare_lru_dict(data) 126 lru_dict = self.prepare_lru_dict(data)
127 lru_dict.pop(2) 127 lru_dict.pop(2)
128 self.assert_order(lru_dict, [1, 3]) 128 self.assert_order(lru_dict, [1, 3])
129 129
130 # Pop oldest. 130 # Pop oldest.
131 lru_dict = self.prepare_lru_dict(data) 131 lru_dict = self.prepare_lru_dict(data)
132 lru_dict.pop(3) 132 lru_dict.pop(3)
133 self.assert_order(lru_dict, [1, 2]) 133 self.assert_order(lru_dict, [1, 2])
134 134
135 # Add oldest.
136 lru_dict = self.prepare_lru_dict(data)
137 lru_dict.batch_insert_oldest([(4, 4), (5, 5)])
138 self.assert_order(lru_dict, [4, 5] + data)
139
140 # Add newest. 135 # Add newest.
141 lru_dict = self.prepare_lru_dict(data) 136 lru_dict = self.prepare_lru_dict(data)
142 lru_dict.add(4, 4) 137 lru_dict.add(4, 4)
143 self.assert_order(lru_dict, data + [4]) 138 self.assert_order(lru_dict, data + [4])
144 139
145 def test_load_save(self): 140 def test_load_save(self):
141 def pairs(d):
142 return [(k, d[k]) for k in d]
143
146 def save_and_load(lru_dict): 144 def save_and_load(lru_dict):
147 handle, tmp_name = tempfile.mkstemp(prefix=u'lru_test') 145 handle, tmp_name = tempfile.mkstemp(prefix=u'lru_test')
148 os.close(handle) 146 os.close(handle)
147
149 try: 148 try:
149 # Old format.
150 with open(tmp_name, 'w') as f:
151 json.dump(pairs(lru_dict), f)
152 loaded_old_format = lru_dict.load(tmp_name)
153
154 # Current format.
150 lru_dict.save(tmp_name) 155 lru_dict.save(tmp_name)
151 return lru.LRUDict.load(tmp_name) 156 loaded = lru_dict.load(tmp_name)
157
158 self.assertEqual(pairs(loaded), pairs(loaded_old_format))
159 return loaded
152 finally: 160 finally:
153 try: 161 try:
154 os.unlink(tmp_name) 162 os.unlink(tmp_name)
155 except OSError: 163 except OSError:
156 pass 164 pass
157 165
158 data = [1, 2, 3] 166 data = [1, 2, 3]
159 167
160 # Edge case. 168 # Edge case.
161 empty = save_and_load(lru.LRUDict()) 169 empty = save_and_load(lru.LRUDict())
(...skipping 11 matching lines...) Expand all
173 181
174 # After pop. 182 # After pop.
175 lru_dict = self.prepare_lru_dict(data) 183 lru_dict = self.prepare_lru_dict(data)
176 lru_dict.pop(2) 184 lru_dict.pop(2)
177 lru_dict = save_and_load(lru_dict) 185 lru_dict = save_and_load(lru_dict)
178 self.assert_order(lru_dict, [1, 3]) 186 self.assert_order(lru_dict, [1, 3])
179 187
180 # After add. 188 # After add.
181 lru_dict = self.prepare_lru_dict(data) 189 lru_dict = self.prepare_lru_dict(data)
182 lru_dict.add(4, 4) 190 lru_dict.add(4, 4)
183 lru_dict.batch_insert_oldest([(5, 5), (6, 6)])
184 lru_dict = save_and_load(lru_dict) 191 lru_dict = save_and_load(lru_dict)
185 self.assert_order(lru_dict, [5, 6] + data + [4]) 192 self.assert_order(lru_dict, data + [4])
186 193
187 def test_corrupted_state_file(self): 194 def test_corrupted_state_file(self):
188 def load_from_state(state_text): 195 def load_from_state(state_text):
189 handle, tmp_name = tempfile.mkstemp(prefix=u'lru_test') 196 handle, tmp_name = tempfile.mkstemp(prefix=u'lru_test')
190 os.close(handle) 197 os.close(handle)
191 try: 198 try:
192 with open(tmp_name, 'w') as f: 199 with open(tmp_name, 'w') as f:
193 f.write(state_text) 200 f.write(state_text)
194 return lru.LRUDict.load(tmp_name) 201 return lru.LRUDict.load(tmp_name)
195 finally: 202 finally:
(...skipping 19 matching lines...) Expand all
215 ['key', 'value', 'and whats this?'], 222 ['key', 'value', 'and whats this?'],
216 ])) 223 ]))
217 224
218 # Duplicate keys. 225 # Duplicate keys.
219 with self.assertRaises(ValueError): 226 with self.assertRaises(ValueError):
220 load_from_state(json.dumps([ 227 load_from_state(json.dumps([
221 ['key', 'value'], 228 ['key', 'value'],
222 ['key', 'another_value'], 229 ['key', 'another_value'],
223 ])) 230 ]))
224 231
232 def test_timestamp(self):
233 lru_dict = lru.LRUDict()
234
235 now = 0
236 lru_dict.time_fn = lambda: now
237
238 lru_dict.add('ka', 'va')
239 now += 1
240
241 lru_dict.add('kb', 'vb')
242 now += 1
243
244 self.assertEqual(lru_dict.get_oldest(), ('ka', ('va', 0)))
245 self.assertEqual(lru_dict.pop_oldest(), ('ka', ('va', 0)))
246 self.assertEqual(lru_dict.get_oldest(), ('kb', ('vb', 1)))
247 self.assertEqual(lru_dict.pop_oldest(), ('kb', ('vb', 1)))
225 248
226 if __name__ == '__main__': 249 if __name__ == '__main__':
227 VERBOSE = '-v' in sys.argv 250 VERBOSE = '-v' in sys.argv
228 logging.basicConfig(level=logging.DEBUG if VERBOSE else logging.ERROR) 251 logging.basicConfig(level=logging.DEBUG if VERBOSE else logging.ERROR)
229 unittest.main() 252 unittest.main()
OLDNEW
« no previous file with comments | « client/tests/isolateserver_test.py ('k') | client/utils/lru.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698