test_cache.test_is_memory_full()   A
last analyzed

Complexity

Conditions 1

Size

Total Lines 3
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 3
nop 0
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
from yfrake.cache import cache, utils
2
import time
3
import json
4
5
6
cache = cache.CacheSingleton()
7
8
ttl_groups = getattr(cache, 'ttl_groups')
9
ttl_short = getattr(cache, 'ttl_short')
10
ttl_short['options'] = 0.1
11
12
13
def test_ttl_groups_override():
14
    ttl_groups['override'] = True
15
    ttl = cache.get_ttl_value('options')
16
    date = utils.get_expiration_date(ttl)
17
    assert utils.is_expired(date)
18
19
    ttl_groups['override'] = False
20
    ttl = cache.get_ttl_value('options')
21
    date = utils.get_expiration_date(ttl)
22
    assert not utils.is_expired(date)
23
24
25
def test_expiration_date():
26
    ttl = cache.get_ttl_value('options')
27
    date = utils.get_expiration_date(ttl)
28
    assert not utils.is_expired(date)
29
    time.sleep(0.2)
30
    assert utils.is_expired(date)
31
32
33
def test_cache_size():
34
    response = dict(key='value')
35
    cache.set('options', dict(), response)
36
    entry_size = utils.get_entry_size(json.dumps(response))
37
38
    assert len(cache.cache) == 1
39
    assert cache.mem_in_use == entry_size
40
    cache.remove_entry()
41
    assert len(cache.cache) == 0
42
    assert cache.mem_in_use == 0
43
    del cache.mem_in_use
44
45
46
def test_is_memory_full():
47
    size = 64000001
48
    assert cache.is_space_full(size) is True
49
50
51
def test_is_cache_full():
52
    cache.max_entries = 1
53
    cache.cache['key'] = 'value'
54
    assert cache.is_space_full(0)
55
    del cache.cache['key']
56
    assert not cache.is_space_full(0)
57
58
59
def test_is_entry_size_valid():
60
    assert cache.is_entry_size_valid(999999) is True
61
    assert cache.is_entry_size_valid(1000000) is False
62
63
64
def test_cache_main():
65
    endpoint = 'options'
66
    params = dict(symbol='MSFT')
67
68
    response = cache.get(endpoint, params)
69
    assert response is None
70
71
    cache.set(endpoint, params, dict(key='value'))
72
73
    response = cache.get(endpoint, params)
74
    assert response.get('key') == 'value'
75
76
    time.sleep(0.2)
77
78
    response = cache.get(endpoint, params)
79
    assert response is None
80
81
82
def test_cache_lru():
83
    cache.max_entries = 3
84
    endpoints = [
85
        'insights',
86
        'financials',
87
        'news',
88
        'trending_symbols'
89
    ]
90
    params = {'symbol': 'MSFT'}
91
    response = {'key': 'value'}
92
93
    keys = list()
94
    for endpoint in endpoints:
95
        query = dict(
96
            endpoint=endpoint,
97
            params=params
98
        )
99
        key = utils.get_request_key(**query)
100
        keys.append(key)
101
        query['response'] = response
102
        cache.set(**query)
103
104
    assert list(cache.cache.keys()) == [keys[3], keys[2], keys[1]]
105
    cache.get(endpoints[1], params)
106
    assert list(cache.cache.keys()) == [keys[1], keys[3], keys[2]]
107
    cache.get(endpoints[2], params)
108
    assert list(cache.cache.keys()) == [keys[2], keys[1], keys[3]]
109
    cache.set(endpoints[0], params, response)
110
    assert list(cache.cache.keys()) == [keys[0], keys[2], keys[1]]
111