Finish tests of disk cache

This commit is contained in:
Kovid Goyal 2021-01-03 17:36:40 +05:30
parent df00e9545d
commit 1b59a1c421
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
2 changed files with 18 additions and 2 deletions

View File

@ -92,7 +92,7 @@ open_cache_file(const char *cache_path) {
size_t sz = strlen(cache_path) + 16; size_t sz = strlen(cache_path) + 16;
char *buf = calloc(1, sz); char *buf = calloc(1, sz);
if (!buf) { errno = ENOMEM; return -1; } if (!buf) { errno = ENOMEM; return -1; }
snprintf(buf, sz - 1, "%s/XXXXXXXXXXXX", cache_path); snprintf(buf, sz - 1, "%s/disk-cache-XXXXXXXXXXXX", cache_path);
while (fd < 0) { while (fd < 0) {
fd = mkostemp(buf, O_CLOEXEC); fd = mkostemp(buf, O_CLOEXEC);
if (fd > -1 || errno != EINTR) break; if (fd > -1 || errno != EINTR) break;
@ -539,6 +539,7 @@ clear_disk_cache(PyObject *self_) {
HASH_DEL(self->entries, s); HASH_DEL(self->entries, s);
free_cache_entry(s); free_cache_entry(s);
} }
self->total_size = 0;
mutex(unlock); mutex(unlock);
wakeup_write_loop(self); wakeup_write_loop(self);
} }

View File

@ -3,6 +3,7 @@
# License: GPL v3 Copyright: 2016, Kovid Goyal <kovid at kovidgoyal.net> # License: GPL v3 Copyright: 2016, Kovid Goyal <kovid at kovidgoyal.net>
import os import os
import random
import tempfile import tempfile
import time import time
import unittest import unittest
@ -176,7 +177,7 @@ class TestGraphics(BaseTest):
def remove(key): def remove(key):
bkey = key_as_bytes(key) bkey = key_as_bytes(key)
data.pop(key, None) data.pop(key, None)
dc.remove(bkey) return dc.remove(bkey)
def check_data(): def check_data():
for key, val in data.items(): for key, val in data.items():
@ -207,6 +208,20 @@ class TestGraphics(BaseTest):
time.sleep(0.001) time.sleep(0.001)
self.assertEqual(dc.size_on_disk(), 0) self.assertEqual(dc.size_on_disk(), 0)
data.clear()
for i in range(25):
self.assertIsNone(add(i, f'{i}' * i))
before = dc.size_on_disk()
while dc.total_size > before // 3:
key = random.choice(tuple(data))
self.assertTrue(remove(key))
add('trigger defrag', 'XXX')
dc.wait_for_write()
self.assertLess(dc.size_on_disk(), before)
self.assertEqual(dc.size_on_disk(), sum(map(len, data.values())))
check_data()
def test_load_images(self): def test_load_images(self):
s, g, l, sl = load_helpers(self) s, g, l, sl = load_helpers(self)