Finish up the live module loading tests

This commit is contained in:
Kovid Goyal 2020-12-18 18:42:18 +05:30
parent f408f8a466
commit 139595437f
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -10,6 +10,7 @@ import re
import sys import sys
import types import types
from contextlib import suppress from contextlib import suppress
from datetime import timedelta
from enum import Enum, auto from enum import Enum, auto
from http import HTTPStatus from http import HTTPStatus
from importlib import import_module from importlib import import_module
@ -28,6 +29,7 @@ worker = None
worker_lock = Lock() worker_lock = Lock()
fetcher = None fetcher = None
db_path = None db_path = None
old_interval = timedelta(days=1)
module_version = 1 module_version = 1
minimum_calibre_version = 5, 7, 0 minimum_calibre_version = 5, 7, 0
@ -196,7 +198,7 @@ def download_module(full_name, timeout=default_timeout, strategy=Strategy.downlo
if strategy is Strategy.download_now: if strategy is Strategy.download_now:
return load_module_from_data(full_name, latest_data_for_module(full_name, timeout=timeout)) return load_module_from_data(full_name, latest_data_for_module(full_name, timeout=timeout))
cached_etag, cached_data, date = read_from_cache(full_name) cached_etag, cached_data, date = read_from_cache(full_name)
if date is not None and (utcnow() - date).days > 0: if date is None or (utcnow() - date) > old_interval:
return load_module_from_data(full_name, latest_data_for_module(full_name, timeout=timeout)) return load_module_from_data(full_name, latest_data_for_module(full_name, timeout=timeout))
if cached_data is not None: if cached_data is not None:
return load_module_from_data(full_name, cached_data) return load_module_from_data(full_name, cached_data)
@ -251,6 +253,7 @@ def find_tests():
self.fetched_module_version = 99999 self.fetched_module_version = 99999
self.sentinel_value = 1 self.sentinel_value = 1
self.fetch_counter = 0 self.fetch_counter = 0
self.orig_old_interval = old_interval
@property @property
def live_data(self): def live_data(self):
@ -266,9 +269,10 @@ def find_tests():
return q, data return q, data
def tearDown(self): def tearDown(self):
global db_path, fetcher global db_path, fetcher, old_interval
os.remove(db_path) os.remove(db_path)
db_path = fetcher = None db_path = fetcher = None
old_interval = self.orig_old_interval
def assert_cache_empty(self): def assert_cache_empty(self):
self.ae(read_from_cache('live.test'), (None, None, None)) self.ae(read_from_cache('live.test'), (None, None, None))
@ -280,6 +284,7 @@ def find_tests():
self.ae(read_from_cache('live.test')[:2], ('etag', data)) self.ae(read_from_cache('live.test')[:2], ('etag', data))
def test_module_loading(self): def test_module_loading(self):
global old_interval
self.assert_cache_empty() self.assert_cache_empty()
m = load_module('calibre.live', strategy=Strategy.fast) m = load_module('calibre.live', strategy=Strategy.fast)
self.assertEqual(m.module_version, module_version) self.assertEqual(m.module_version, module_version)
@ -291,6 +296,21 @@ def find_tests():
m = load_module('calibre.live', strategy=Strategy.fast) m = load_module('calibre.live', strategy=Strategy.fast)
self.assertEqual(m.module_version, self.fetched_module_version) self.assertEqual(m.module_version, self.fetched_module_version)
self.ae(self.fetch_counter, 1) self.ae(self.fetch_counter, 1)
m = load_module('calibre.live', strategy=Strategy.download_if_old)
self.assertEqual(m.module_version, self.fetched_module_version)
self.ae(self.fetch_counter, 1)
m = load_module('calibre.live', strategy=Strategy.download_now)
self.assertEqual(m.module_version, self.fetched_module_version)
self.ae(self.fetch_counter, 2)
old_interval = timedelta(days=-1)
m = load_module('calibre.live', strategy=Strategy.download_if_old)
self.assertEqual(m.module_version, self.fetched_module_version)
self.ae(self.fetch_counter, 3)
old_interval = self.orig_old_interval
clear_cache()
m = load_module('calibre.live', strategy=Strategy.download_if_old)
self.assertEqual(m.module_version, self.fetched_module_version)
self.ae(self.fetch_counter, 4)
return unittest.defaultTestLoader.loadTestsFromTestCase(LiveTest) return unittest.defaultTestLoader.loadTestsFromTestCase(LiveTest)