summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormathieui <mathieui@mathieui.net>2019-02-02 17:42:24 +0100
committermathieui <mathieui@mathieui.net>2019-02-02 17:42:24 +0100
commitb42fafabb480db0653226a224006dae28c489665 (patch)
treeda1cf27bfff0fe86f11eede9ac90f39e9bb75eba
parent3a44ec8f15c1d6267f6838b21b210d844202762c (diff)
downloadslixmpp-b42fafabb480db0653226a224006dae28c489665.tar.gz
slixmpp-b42fafabb480db0653226a224006dae28c489665.tar.bz2
slixmpp-b42fafabb480db0653226a224006dae28c489665.tar.xz
slixmpp-b42fafabb480db0653226a224006dae28c489665.zip
Make the cache encode and decode not crash if something goes wrong
-rw-r--r--slixmpp/util/cache.py7
-rw-r--r--tests/test_cache.py12
2 files changed, 17 insertions, 2 deletions
diff --git a/slixmpp/util/cache.py b/slixmpp/util/cache.py
index 055163d1..09495841 100644
--- a/slixmpp/util/cache.py
+++ b/slixmpp/util/cache.py
@@ -84,7 +84,10 @@ class FileSystemStorage:
log.debug('%s not present in cache', key)
except OSError:
log.debug('Failed to read %s from cache:', key, exc_info=True)
- return None
+ except Exception:
+ log.debug('Failed to decode %s from cache:', key, exc_info=True)
+ log.debug('Removing %s entry', key)
+ self._remove(directory, key)
def _store(self, directory, key, value):
filename = os.path.join(directory, key.replace('/', '_'))
@@ -96,6 +99,8 @@ class FileSystemStorage:
except OSError:
log.debug('Failed to store %s to cache:', key, exc_info=True)
return False
+ except Exception:
+ log.debug('Failed to encode %s to cache:', key, exc_info=True)
def _remove(self, directory, key):
filename = os.path.join(directory, key.replace('/', '_'))
diff --git a/tests/test_cache.py b/tests/test_cache.py
index 789e8bbf..78e9ee03 100644
--- a/tests/test_cache.py
+++ b/tests/test_cache.py
@@ -34,9 +34,14 @@ class TestCacheClass(SlixTest):
)
def testFileSystemCache(self):
+ def failing_decode(value):
+ if value == "failme":
+ raise Exception("you failed")
+ return value
with TemporaryDirectory() as tmpdir:
- cache = FileSystemCache(tmpdir, "test")
+ cache = FileSystemCache(tmpdir, "test", decode=failing_decode)
cache.store("test", "test_value")
+ cache.store("test2", "failme")
self.assertEqual(
cache.retrieve("test"),
"test_value"
@@ -47,6 +52,11 @@ class TestCacheClass(SlixTest):
None
)
+ self.assertEqual(
+ cache.retrieve("test2"),
+ None
+ )
+
def testFileSystemPerJidCache(self):
with TemporaryDirectory() as tmpdir:
cache = FileSystemPerJidCache(tmpdir, "test")