1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
# -*- coding: utf-8 -*-
"""
jinja2.testsuite.bytecode_cache
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Test bytecode caching
:copyright: (c) 2017 by the Jinja Team.
:license: BSD, see LICENSE for more details.
"""
import pytest
from jinja2 import Environment
from jinja2.bccache import Bucket, FileSystemBytecodeCache, \
MemcachedBytecodeCache
from jinja2.exceptions import TemplateNotFound
@pytest.fixture
def env(package_loader):
bytecode_cache = FileSystemBytecodeCache()
return Environment(
loader=package_loader,
bytecode_cache=bytecode_cache,
)
@pytest.mark.byte_code_cache
class TestByteCodeCache(object):
def test_simple(self, env):
tmpl = env.get_template('test.html')
assert tmpl.render().strip() == 'BAR'
pytest.raises(TemplateNotFound, env.get_template, 'missing.html')
class MockMemcached(object):
class Error(Exception):
pass
key = None
value = None
timeout = None
def get(self, key):
return self.value
def set(self, key, value, timeout=None):
self.key = key
self.value = value
self.timeout = timeout
def get_side_effect(self, key):
raise self.Error()
def set_side_effect(self, *args):
raise self.Error()
class TestMemcachedBytecodeCache(object):
def test_dump_load(self):
memcached = MockMemcached()
m = MemcachedBytecodeCache(memcached)
b = Bucket(None, 'key', '')
b.code = 'code'
m.dump_bytecode(b)
assert memcached.key == 'jinja2/bytecode/key'
b = Bucket(None, 'key', '')
m.load_bytecode(b)
assert b.code == 'code'
def test_exception(self):
memcached = MockMemcached()
memcached.get = memcached.get_side_effect
memcached.set = memcached.set_side_effect
m = MemcachedBytecodeCache(memcached)
b = Bucket(None, 'key', '')
b.code = 'code'
m.dump_bytecode(b)
m.load_bytecode(b)
m.ignore_memcache_errors = False
with pytest.raises(MockMemcached.Error):
m.dump_bytecode(b)
with pytest.raises(MockMemcached.Error):
m.load_bytecode(b)
|