diff --git a/conftest.py b/conftest.py index 06f31249e0..ab9eb27d5b 100644 --- a/conftest.py +++ b/conftest.py @@ -64,7 +64,7 @@ def _wait_for_miner_start(web3, timeout=60): return _wait_for_miner_start -@pytest.fixture() +@pytest.fixture(scope="module") def wait_for_block(): def _wait_for_block(web3, block_number=1, timeout=None): if not timeout: @@ -79,7 +79,7 @@ def _wait_for_block(web3, block_number=1, timeout=None): return _wait_for_block -@pytest.fixture() +@pytest.fixture(scope="module") def wait_for_transaction(): def _wait_for_transaction(web3, txn_hash, timeout=120): poll_delay_counter = PollDelayCounter() diff --git a/newsfragments/1780.misc.rst b/newsfragments/1780.misc.rst new file mode 100644 index 0000000000..e6e5a05c38 --- /dev/null +++ b/newsfragments/1780.misc.rst @@ -0,0 +1,3 @@ +Specify 'module' scope for 'wait_for_block' and 'wait_for_transaction' fixtures. Specify 'module' +scope for emitter fixtures ('emitter', 'Emitter', 'EMITTER', 'EMITTER_ABI', 'EMITTER_RUNTIME', +'EMITTER_CODE') and 'web3(request)'in test_contract_data_filters.py. diff --git a/tests/core/contracts/test_contract_buildTransaction.py b/tests/core/contracts/test_contract_buildTransaction.py index e26429c30f..18ade12c7f 100644 --- a/tests/core/contracts/test_contract_buildTransaction.py +++ b/tests/core/contracts/test_contract_buildTransaction.py @@ -1,5 +1,3 @@ -# -*- coding: utf-8 -*- - import pytest from eth_utils.toolz import ( @@ -10,8 +8,7 @@ ValidationError, ) -# Ignore warning in pyethereum 1.6 - will go away with the upgrade -pytestmark = pytest.mark.filterwarnings("ignore:implicit cast from 'char *'") +# -*- coding: utf-8 -*- @pytest.fixture() diff --git a/tests/core/filtering/test_contract_data_filters.py b/tests/core/filtering/test_contract_data_filters.py index ba976a6bcb..24dfb883f0 100644 --- a/tests/core/filtering/test_contract_data_filters.py +++ b/tests/core/filtering/test_contract_data_filters.py @@ -6,6 +6,80 @@ strategies as st, ) +from web3 import Web3 +from web3._utils.module_testing.emitter_contract import ( + CONTRACT_EMITTER_ABI, + CONTRACT_EMITTER_CODE, + CONTRACT_EMITTER_RUNTIME, +) +from web3.middleware import ( + local_filter_middleware, +) +from web3.providers.eth_tester import ( + EthereumTesterProvider, +) + + +@pytest.fixture( + scope="module", + params=[True, False], + ids=["local_filter_middleware", "node_based_filter"]) +def web3(request): + use_filter_middleware = request.param + provider = EthereumTesterProvider() + w3 = Web3(provider) + if use_filter_middleware: + w3.middleware_onion.add(local_filter_middleware) + return w3 + + +@pytest.fixture(scope="module") +def EMITTER_CODE(): + return CONTRACT_EMITTER_CODE + + +@pytest.fixture(scope="module") +def EMITTER_RUNTIME(): + return CONTRACT_EMITTER_RUNTIME + + +@pytest.fixture(scope="module") +def EMITTER_ABI(): + return CONTRACT_EMITTER_ABI + + +@pytest.fixture(scope="module") +def EMITTER(EMITTER_CODE, + EMITTER_RUNTIME, + EMITTER_ABI): + return { + 'bytecode': EMITTER_CODE, + 'bytecode_runtime': EMITTER_RUNTIME, + 'abi': EMITTER_ABI, + } + + +@pytest.fixture(scope="module") +def Emitter(web3, EMITTER): + return web3.eth.contract(**EMITTER) + + +@pytest.fixture(scope="module") +def emitter(web3, Emitter, wait_for_transaction, wait_for_block, address_conversion_func): + wait_for_block(web3) + deploy_txn_hash = Emitter.constructor().transact({ + 'from': web3.eth.coinbase, + 'gas': 1000000, + 'gasPrice': 1}) + deploy_receipt = wait_for_transaction(web3, deploy_txn_hash) + contract_address = address_conversion_func(deploy_receipt['contractAddress']) + + bytecode = web3.eth.getCode(contract_address) + assert bytecode == Emitter.bytecode_runtime + _emitter = Emitter(address=contract_address) + assert _emitter.address == contract_address + return _emitter + def not_empty_string(x): return x != '' diff --git a/tests/core/filtering/test_contract_on_event_filtering.py b/tests/core/filtering/test_contract_on_event_filtering.py index c60b684c5c..9c2174d153 100644 --- a/tests/core/filtering/test_contract_on_event_filtering.py +++ b/tests/core/filtering/test_contract_on_event_filtering.py @@ -4,9 +4,6 @@ is_address, ) -# Ignore warning in pyethereum 1.6 - will go away with the upgrade -pytestmark = pytest.mark.filterwarnings("ignore:implicit cast from 'char *'") - @pytest.mark.parametrize('call_as_instance', (True, False)) def test_create_filter_address_parameter(web3, emitter, Emitter, call_as_instance):