def test_fee_utils_indirectly( w3, fee_history_rewards, expected_max_prio_calc ) -> None: fail_max_prio_middleware = construct_error_generator_middleware( {RPCEndpoint("eth_maxPriorityFeePerGas"): lambda *_: ''} ) fee_history_result_middleware = construct_result_generator_middleware( {RPCEndpoint('eth_feeHistory'): lambda *_: {'reward': fee_history_rewards}} ) w3.middleware_onion.add(fail_max_prio_middleware, 'fail_max_prio') w3.middleware_onion.inject(fee_history_result_middleware, 'fee_history_result', layer=0) with pytest.warns( UserWarning, match="There was an issue with the method eth_maxPriorityFeePerGas. Calculating using " "eth_feeHistory." ): max_priority_fee = w3.eth.max_priority_fee assert is_integer(max_priority_fee) assert max_priority_fee == expected_max_prio_calc # clean up w3.middleware_onion.remove('fail_max_prio') w3.middleware_onion.remove('fee_history_result')
def test_error_middleware(w3, method, expected): def _callback(method, params): return params[0] w3.middleware_stack.add(construct_error_generator_middleware({ 'test_endpoint': _callback, })) if isinstance(expected, type) and issubclass(expected, Exception): with pytest.raises(expected): w3.manager.request_blocking(method, [expected]) else: with pytest.raises(ValueError) as err: w3.manager.request_blocking(method, [expected]) assert expected in str(err)
def test_simple_cache_middleware_does_not_cache_error_responses(w3_base): w3 = w3_base w3.middleware_stack.add(construct_error_generator_middleware({ 'fake_endpoint': lambda *_: 'msg-{0}'.format(str(uuid.uuid4())), })) w3.middleware_stack.add(construct_simple_cache_middleware( cache_class=dict, rpc_whitelist={'fake_endpoint'}, )) with pytest.raises(ValueError) as err_a: w3.manager.request_blocking('fake_endpoint', []) with pytest.raises(ValueError) as err_b: w3.manager.request_blocking('fake_endpoint', []) assert str(err_a) != str(err_b)
def test_simple_cache_middleware_does_not_cache_error_responses(w3_base): w3 = w3_base w3.middleware_onion.add(construct_error_generator_middleware({ 'fake_endpoint': lambda *_: f'msg-{uuid.uuid4()}', })) w3.middleware_onion.add(construct_simple_cache_middleware( cache_class=dict, rpc_whitelist={'fake_endpoint'}, )) with pytest.raises(ValueError) as err_a: w3.manager.request_blocking('fake_endpoint', []) with pytest.raises(ValueError) as err_b: w3.manager.request_blocking('fake_endpoint', []) assert str(err_a) != str(err_b)
def test_time_based_cache_middleware_does_not_cache_error_response( w3_base, time_cache_middleware): w3 = w3_base counter = itertools.count() def mk_error(method, params): return "error-number-{0}".format(next(counter)) w3.middleware_stack.add(construct_error_generator_middleware({ 'fake_endpoint': mk_error, })) w3.middleware_stack.add(time_cache_middleware) with pytest.raises(ValueError) as err: w3.manager.request_blocking('fake_endpoint', []) assert 'error-number-0' in str(err) with pytest.raises(ValueError) as err: w3.manager.request_blocking('fake_endpoint', []) assert 'error-number-1' in str(err)
def test_latest_block_cache_middleware_does_not_cache_error_response( w3_base, block_data_middleware, latest_block_based_cache_middleware): counter = itertools.count() w3 = w3_base def error_cb(method, params): next(counter) return "the error message" w3.middleware_stack.add(block_data_middleware) w3.middleware_stack.add( construct_error_generator_middleware({ 'fake_endpoint': error_cb, })) w3.middleware_stack.add(latest_block_based_cache_middleware) with pytest.raises(ValueError): w3.manager.request_blocking('fake_endpoint', []) with pytest.raises(ValueError): w3.manager.request_blocking('fake_endpoint', []) assert next(counter) == 2
def test_latest_block_cache_middleware_does_not_cache_error_response( w3_base, block_data_middleware, latest_block_based_cache_middleware): counter = itertools.count() w3 = w3_base def error_cb(method, params): next(counter) return "the error message" w3.middleware_stack.add(block_data_middleware) w3.middleware_stack.add(construct_error_generator_middleware({ 'fake_endpoint': error_cb, })) w3.middleware_stack.add(latest_block_based_cache_middleware) with pytest.raises(ValueError): w3.manager.request_blocking('fake_endpoint', []) with pytest.raises(ValueError): w3.manager.request_blocking('fake_endpoint', []) assert next(counter) == 2