taar/tests/test_cache.py

94 строки
2.5 KiB
Python
Исходник Обычный вид История

2018-03-02 19:15:30 +03:00
from taar.cache import Clock, JSONCache
import time
import pytest
from taar.context import Context
EXPECTED_JSON = {"foo": 42}
EXPECTED_S3_JSON = {"foo": "bar"}
class MockUtils:
def __init__(self):
self._fetch_count = 0
self._get_count = 0
def fetch_json(self, url):
self._fetch_count += 1
return EXPECTED_JSON
def get_s3_json_content(self, s3_bucket, s3_key):
self._get_count += 1
return EXPECTED_S3_JSON
def test_clock():
cl = Clock()
assert time.time() == pytest.approx(cl.time(), 0.1)
def test_fetch_json():
""" Just test a URL that we know will fail """
ctx = Context()
ctx['utils'] = utils = MockUtils()
ctx['clock'] = Clock()
cache = JSONCache(ctx)
jdata = cache.fetch_json("http://127.0.0.1:9001/some-nonexistant-url-foo.json")
assert jdata == EXPECTED_JSON
assert utils._fetch_count == 1
for i in range(10):
cache.fetch_json("http://127.0.0.1:9001/some-nonexistant-url-foo.json")
assert utils._fetch_count == 1
def test_get_s3_json_content():
""" Just test an S3 bucket and key that doesn't exist """
ctx = Context()
ctx['utils'] = utils = MockUtils()
ctx['clock'] = Clock()
cache = JSONCache(ctx)
jdata = cache.get_s3_json_content("taar_not_my_bucket", "this/is/not/a/valid/path")
assert jdata == EXPECTED_S3_JSON
assert utils._get_count == 1
for i in range(10):
cache.get_s3_json_content("taar_not_my_bucket", "this/is/not/a/valid/path")
assert utils._get_count == 1
def test_expiry():
""" Just test a URL that we know will fail """
class MockClock:
def __init__(self):
self._now = 100
def time(self):
return self._now
ctx = Context()
utils = MockUtils()
ctx['utils'] = utils
ctx['clock'] = MockClock()
cache = JSONCache(ctx)
cache._ttl = 0 # Set TTL to nothing
cache.refresh_expiry()
jdata = cache.fetch_json("http://127.0.0.1:9001/some-nonexistant-url-foo.json")
assert jdata == EXPECTED_JSON
jdata = cache.get_s3_json_content("taar_not_my_bucket", "this/is/not/a/valid/path")
assert jdata == EXPECTED_S3_JSON
assert utils._get_count == 1
assert utils._fetch_count == 1
for i in range(10):
cache.fetch_json("http://127.0.0.1:9001/some-nonexistant-url-foo.json")
cache.get_s3_json_content("taar_not_my_bucket", "this/is/not/a/valid/path")
# Cache expires each time
assert utils._get_count == 11
assert utils._fetch_count == 11