nucypher/tests/unit/test_gas_strategies.py

48 lines
1.5 KiB
Python

import itertools
import pytest
from web3 import Web3
from nucypher.utilities.gas_strategies import (
construct_fixed_price_gas_strategy,
max_price_gas_strategy_wrapper,
GasStrategyError
)
def test_fixed_price_gas_strategy():
strategy = construct_fixed_price_gas_strategy(gas_price=42)
assert 42 == strategy("web3", "tx")
assert 42 == strategy("web3", "tx")
assert 42 == strategy("web3", "tx")
assert "0gwei" == strategy.name
strategy = construct_fixed_price_gas_strategy(gas_price=12.34, denomination="gwei")
assert 12340000000 == strategy("web3", "tx")
assert 12340000000 == strategy("web3", "tx")
assert 12340000000 == strategy("web3", "tx")
assert "12gwei" == strategy.name
def test_max_price_gas_strategy(mocker, monkeypatch):
gas_prices_gwei = [10, 100, 999, 1000, 1001, 1_000_000, 1_000_000_000]
gas_prices_wei = [Web3.to_wei(gwei_price, 'gwei') for gwei_price in gas_prices_gwei]
max_gas_price_gwei = 1000
max_gas_price_wei = Web3.to_wei(max_gas_price_gwei, 'gwei')
mock_gas_strategy = mocker.Mock(side_effect=itertools.cycle(gas_prices_wei))
wrapped_strategy = max_price_gas_strategy_wrapper(gas_strategy=mock_gas_strategy,
max_gas_price_wei=max_gas_price_wei)
for price in gas_prices_wei[:4]:
assert wrapped_strategy("web3", "tx") == price
assert price <= max_gas_price_wei
for _ in gas_prices_wei[4:]:
assert wrapped_strategy("web3", "tx") == max_gas_price_wei