55
66from web3 import Web3
77from web3 ._utils .caching import (
8+ SimpleCache ,
89 generate_cache_key ,
910)
1011from 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
157185async 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