Skip to content

Commit 63ec390

Browse files
committed
Added some test on caching
1 parent a0384e5 commit 63ec390

File tree

5 files changed

+179
-0
lines changed

5 files changed

+179
-0
lines changed

tests/test_cache/__init__.py

Whitespace-only changes.

tests/test_cache/test_memcache.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
from ellar.cache.backends.aio_cache import AioMemCacheBackend
2+
3+
4+
# @pytest.mark.asyncio
5+
def test_aio_mem_cache(anyio_backend):
6+
backend = AioMemCacheBackend("localhost", port=11211)
7+
assert backend
8+
# backend.set("test", "values", timeout=10)
9+
# res = backend.get("test")
10+
# assert res == "values"
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
from time import sleep
2+
3+
from ellar.common import ModuleRouter, cache
4+
from ellar.core import TestClientFactory
5+
from ellar.core.response import PlainTextResponse
6+
7+
8+
def test_cache_route_function_return_data():
9+
called_count = 0
10+
11+
mr = ModuleRouter()
12+
13+
@mr.get("/index")
14+
@cache(timeout=0.12) # cache for 3sec
15+
def homepage():
16+
nonlocal called_count
17+
18+
called_count += 1
19+
return dict(message="Response Information cached.")
20+
21+
client = TestClientFactory.create_test_module(
22+
routers=[
23+
mr,
24+
]
25+
).get_client()
26+
27+
for i in range(2):
28+
client.get("/index")
29+
30+
sleep(0.22)
31+
res = client.get("/index")
32+
33+
assert res.json() == dict(message="Response Information cached.")
34+
assert res.status_code == 200
35+
assert called_count == 2
36+
37+
38+
def test_cache_for_async_route_function_return_data():
39+
called_count = 0
40+
41+
mr = ModuleRouter()
42+
43+
@mr.get("/index")
44+
@cache(timeout=3) # cache for 3sec
45+
async def homepage():
46+
nonlocal called_count
47+
48+
called_count += 1
49+
return dict(message="Response Information cached Async")
50+
51+
client = TestClientFactory.create_test_module(
52+
routers=[
53+
mr,
54+
]
55+
).get_client()
56+
57+
res = client.get("/index")
58+
59+
assert res.json() == dict(message="Response Information cached Async")
60+
assert res.status_code == 200
61+
assert called_count == 1
62+
63+
64+
def test_cache_for_async_route_function_return_response():
65+
called_count = 0
66+
67+
mr = ModuleRouter()
68+
69+
@mr.get("/index")
70+
@cache(timeout=3) # cache for 3sec
71+
async def homepage():
72+
nonlocal called_count
73+
74+
called_count += 1
75+
return PlainTextResponse("Response Information cached Async")
76+
77+
client = TestClientFactory.create_test_module(
78+
routers=[
79+
mr,
80+
]
81+
).get_client()
82+
83+
res = client.get("/index")
84+
85+
assert res.text == "Response Information cached Async"
86+
assert res.status_code == 200
87+
assert called_count == 1
88+
89+
90+
def test_cache_route_function_return_response():
91+
called_count = 0
92+
93+
mr = ModuleRouter()
94+
95+
@mr.get("/index")
96+
@cache(timeout=2) # cache for 3sec
97+
def homepage():
98+
nonlocal called_count
99+
100+
called_count += 1
101+
return PlainTextResponse("Response Information cached")
102+
103+
client = TestClientFactory.create_test_module(
104+
routers=[
105+
mr,
106+
]
107+
).get_client()
108+
109+
res = client.get("/index")
110+
111+
assert res.text == "Response Information cached"
112+
assert res.status_code == 200
113+
assert called_count == 1
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import pytest
2+
3+
from ellar.cache.backends.pylib_cache import PyLibMCCacheBackend
4+
5+
6+
@pytest.mark.asyncio
7+
async def test_simple_cache_backend() -> None:
8+
backend = PyLibMCCacheBackend(
9+
server=["127.0.0.1:11211"],
10+
options=dict(binary=True, behaviors={"tcp_nodelay": True, "ketama": True}),
11+
)
12+
assert backend
13+
# await backend.set_async("test", "rdtyfuhg", 1) # type: ignore
14+
# value = await backend.get_async("test")
15+
# assert value
16+
# sleep(2)
17+
# value = await backend.get("test")
18+
# assert not value

tests/test_cache/test_simple_cache.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
from time import sleep
2+
3+
from ellar.cache.backends.simple_cache import SimpleCacheBackend
4+
5+
6+
async def test_simple_cache_backend(anyio_backend: str) -> None:
7+
backend = SimpleCacheBackend()
8+
await backend.set("test", "1", 0.1) # type: ignore
9+
value = await backend.get("test")
10+
assert value
11+
sleep(0.2)
12+
value = await backend.get("test")
13+
assert not value
14+
15+
16+
async def test_simple_cache_backend_with_init_params(anyio_backend: str) -> None:
17+
backend = SimpleCacheBackend(key_prefix="ellar", timeout=300, version=2)
18+
await backend.set("test", "1", 20) # type: ignore
19+
key = backend.make_key("test")
20+
assert backend._cache[key]
21+
assert isinstance(backend._cache[key], bytes)
22+
23+
24+
async def test_simple_cache_backend_has_key_and_delete(anyio_backend: str) -> None:
25+
backend = SimpleCacheBackend()
26+
await backend.set_async("test", "1", 2000) # type: ignore
27+
assert await backend.has_key_async("test")
28+
assert await backend.delete_async("test") is True
29+
assert not await backend.has_key_async("test")
30+
31+
32+
def test_simple_cache_backend_has_key_and_delete_sync(anyio_backend: str) -> None:
33+
backend = SimpleCacheBackend()
34+
backend.set("test", "1", 2000) # type: ignore
35+
assert backend.get("test") == "1"
36+
assert backend.has_key("test")
37+
assert backend.delete("test") is True
38+
assert not backend.has_key("test")

0 commit comments

Comments
 (0)