Skip to content

Commit ae6274c

Browse files
committed
Update simple cache middleware tests
- Include tests for dictionary-based cache and ``SimpleCache`` for simple cache middleware
1 parent 820a5c5 commit ae6274c

File tree

1 file changed

+52
-24
lines changed

1 file changed

+52
-24
lines changed

tests/core/middleware/test_simple_cache_middleware.py

Lines changed: 52 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
from web3 import Web3
77
from web3._utils.caching import (
8+
SimpleCache,
89
generate_cache_key,
910
)
1011
from web3.middleware import (
@@ -51,13 +52,33 @@ def w3(w3_base, result_generator_middleware):
5152
return w3_base
5253

5354

54-
def test_simple_cache_middleware_pulls_from_cache(w3):
55-
def cache_class():
56-
return {
57-
generate_cache_key(f"{threading.get_ident()}:{('fake_endpoint', [1])}"): {
58-
"result": "value-a"
59-
},
60-
}
55+
def dict_cache_class_return_value_a():
56+
# test dictionary-based cache
57+
return {
58+
generate_cache_key(f"{threading.get_ident()}:{('fake_endpoint', [1])}"): {
59+
"result": "value-a"
60+
},
61+
}
62+
63+
64+
def simple_cache_class_return_value_a():
65+
# test `SimpleCache` class cache
66+
_cache = SimpleCache()
67+
_cache.cache(
68+
generate_cache_key(f"{threading.get_ident()}:{('fake_endpoint', [1])}"),
69+
{"result": "value-a"},
70+
)
71+
return _cache
72+
73+
74+
@pytest.mark.parametrize(
75+
"cache_class",
76+
(
77+
dict_cache_class_return_value_a,
78+
simple_cache_class_return_value_a,
79+
),
80+
)
81+
def test_simple_cache_middleware_pulls_from_cache(w3, cache_class):
6182

6283
w3.middleware_onion.add(
6384
construct_simple_cache_middleware(
@@ -69,10 +90,11 @@ def cache_class():
6990
assert w3.manager.request_blocking("fake_endpoint", [1]) == "value-a"
7091

7192

72-
def test_simple_cache_middleware_populates_cache(w3):
93+
@pytest.mark.parametrize("cache_class", (dict, SimpleCache))
94+
def test_simple_cache_middleware_populates_cache(w3, cache_class):
7395
w3.middleware_onion.add(
7496
construct_simple_cache_middleware(
75-
cache_class=dict,
97+
cache_class=cache_class,
7698
rpc_whitelist={RPCEndpoint("fake_endpoint")},
7799
)
78100
)
@@ -83,7 +105,8 @@ def test_simple_cache_middleware_populates_cache(w3):
83105
assert w3.manager.request_blocking("fake_endpoint", [1]) != result
84106

85107

86-
def test_simple_cache_middleware_does_not_cache_none_responses(w3_base):
108+
@pytest.mark.parametrize("cache_class", (dict, SimpleCache))
109+
def test_simple_cache_middleware_does_not_cache_none_responses(w3_base, cache_class):
87110
counter = itertools.count()
88111
w3 = w3_base
89112

@@ -101,7 +124,7 @@ def result_cb(_method, _params):
101124

102125
w3.middleware_onion.add(
103126
construct_simple_cache_middleware(
104-
cache_class=dict,
127+
cache_class=cache_class,
105128
rpc_whitelist={RPCEndpoint("fake_endpoint")},
106129
)
107130
)
@@ -112,7 +135,8 @@ def result_cb(_method, _params):
112135
assert next(counter) == 2
113136

114137

115-
def test_simple_cache_middleware_does_not_cache_error_responses(w3_base):
138+
@pytest.mark.parametrize("cache_class", (dict, SimpleCache))
139+
def test_simple_cache_middleware_does_not_cache_error_responses(w3_base, cache_class):
116140
w3 = w3_base
117141
w3.middleware_onion.add(
118142
construct_error_generator_middleware(
@@ -124,7 +148,7 @@ def test_simple_cache_middleware_does_not_cache_error_responses(w3_base):
124148

125149
w3.middleware_onion.add(
126150
construct_simple_cache_middleware(
127-
cache_class=dict,
151+
cache_class=cache_class,
128152
rpc_whitelist={RPCEndpoint("fake_endpoint")},
129153
)
130154
)
@@ -137,10 +161,14 @@ def test_simple_cache_middleware_does_not_cache_error_responses(w3_base):
137161
assert str(err_a) != str(err_b)
138162

139163

140-
def test_simple_cache_middleware_does_not_cache_endpoints_not_in_whitelist(w3):
164+
@pytest.mark.parametrize("cache_class", (dict, SimpleCache))
165+
def test_simple_cache_middleware_does_not_cache_endpoints_not_in_whitelist(
166+
w3,
167+
cache_class,
168+
):
141169
w3.middleware_onion.add(
142170
construct_simple_cache_middleware(
143-
cache_class=dict,
171+
cache_class=cache_class,
144172
rpc_whitelist={RPCEndpoint("fake_endpoint")},
145173
)
146174
)
@@ -156,7 +184,7 @@ def test_simple_cache_middleware_does_not_cache_endpoints_not_in_whitelist(w3):
156184

157185
async def _async_simple_cache_middleware_for_testing(make_request, async_w3):
158186
middleware = await async_construct_simple_cache_middleware(
159-
cache_class=dict,
187+
cache_class=SimpleCache,
160188
rpc_whitelist={RPCEndpoint("fake_endpoint")},
161189
)
162190
return await middleware(make_request, async_w3)
@@ -173,17 +201,17 @@ def async_w3():
173201

174202

175203
@pytest.mark.asyncio
176-
async def test_async_simple_cache_middleware_pulls_from_cache(async_w3):
204+
@pytest.mark.parametrize(
205+
"cache_class",
206+
(
207+
dict_cache_class_return_value_a,
208+
simple_cache_class_return_value_a,
209+
),
210+
)
211+
async def test_async_simple_cache_middleware_pulls_from_cache(async_w3, cache_class):
177212
# remove the pre-loaded simple cache middleware to replace with test-specific:
178213
async_w3.middleware_onion.remove("simple_cache")
179214

180-
def cache_class():
181-
return {
182-
generate_cache_key(f"{threading.get_ident()}:{('fake_endpoint', [1])}"): {
183-
"result": "value-a"
184-
},
185-
}
186-
187215
async def _properly_awaited_middleware(make_request, _async_w3):
188216
middleware = await async_construct_simple_cache_middleware(
189217
cache_class=cache_class,

0 commit comments

Comments
 (0)