From 7c9739bce52e46f1b1fd1d59f228e46cff257325 Mon Sep 17 00:00:00 2001 From: Tiffany McKenzie <25855566+tmckenzie51@users.noreply.github.com> Date: Fri, 23 Oct 2020 17:07:23 -0500 Subject: [PATCH 1/3] makes changes to emitter fixtures changes emitter fixtures ('emitter', 'Emitter', 'EMITTER', EMITTER_ABI, 'EMITTER_RUNTIME', 'EMITTER_CODE') to 'module scope for test_contract_data_filters and function scope otherwise. --- conftest.py | 4 +- .../test_contract_buildTransaction.py | 28 ++++++- tests/core/filtering/conftest.py | 1 - .../filtering/test_contract_data_filters.py | 77 +++++++++++++++++++ .../test_contract_on_event_filtering.py | 20 +++++ 5 files changed, 125 insertions(+), 5 deletions(-) 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/tests/core/contracts/test_contract_buildTransaction.py b/tests/core/contracts/test_contract_buildTransaction.py index e26429c30f..bfdc71b9a0 100644 --- a/tests/core/contracts/test_contract_buildTransaction.py +++ b/tests/core/contracts/test_contract_buildTransaction.py @@ -1,19 +1,43 @@ -# -*- coding: utf-8 -*- - import pytest from eth_utils.toolz import ( dissoc, ) +from web3 import Web3 from web3.exceptions import ( ValidationError, ) +from web3.middleware import ( + local_filter_middleware, +) +from web3.providers.eth_tester import ( + EthereumTesterProvider, +) + +# -*- coding: utf-8 -*- + # Ignore warning in pyethereum 1.6 - will go away with the upgrade pytestmark = pytest.mark.filterwarnings("ignore:implicit cast from 'char *'") +# Ignore warning in pyethereum 1.6 - will go away with the upgrade +pytestmark = pytest.mark.filterwarnings("ignore:implicit cast from 'char *'") + + +@pytest.fixture( + 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() def math_contract(web3, MathContract, address_conversion_func): deploy_txn = MathContract.constructor().transact() diff --git a/tests/core/filtering/conftest.py b/tests/core/filtering/conftest.py index a3f4cf4552..f0cd8cc23b 100644 --- a/tests/core/filtering/conftest.py +++ b/tests/core/filtering/conftest.py @@ -27,7 +27,6 @@ def tester_snapshot(web3): @pytest.fixture( - scope='function', params=[True, False], ids=["local_filter_middleware", "node_based_filter"]) def web3(request): diff --git a/tests/core/filtering/test_contract_data_filters.py b/tests/core/filtering/test_contract_data_filters.py index ba976a6bcb..9da071420f 100644 --- a/tests/core/filtering/test_contract_data_filters.py +++ b/tests/core/filtering/test_contract_data_filters.py @@ -6,6 +6,83 @@ 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, +) + +# Ignore warning in pyethereum 1.6 - will go away with the upgrade +pytestmark = pytest.mark.filterwarnings("ignore:implicit cast from 'char *'") + + +@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..4e635c2c1a 100644 --- a/tests/core/filtering/test_contract_on_event_filtering.py +++ b/tests/core/filtering/test_contract_on_event_filtering.py @@ -4,10 +4,30 @@ is_address, ) +from web3 import Web3 +from web3.middleware import ( + local_filter_middleware, +) +from web3.providers.eth_tester import ( + EthereumTesterProvider, +) + # Ignore warning in pyethereum 1.6 - will go away with the upgrade pytestmark = pytest.mark.filterwarnings("ignore:implicit cast from 'char *'") +@pytest.fixture( + 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.mark.parametrize('call_as_instance', (True, False)) def test_create_filter_address_parameter(web3, emitter, Emitter, call_as_instance): if call_as_instance: From 8d51484f507850f8364cb6d693984dba87f7daaf Mon Sep 17 00:00:00 2001 From: Tiffany McKenzie <25855566+tmckenzie51@users.noreply.github.com> Date: Thu, 29 Oct 2020 10:53:10 -0500 Subject: [PATCH 2/3] remove web3(request) fixture removes web3(request) fixture from test_contract_buildTransaction.py --- .../test_contract_buildTransaction.py | 27 ------------------- tests/core/filtering/conftest.py | 1 + .../filtering/test_contract_data_filters.py | 3 --- .../test_contract_on_event_filtering.py | 23 ---------------- 4 files changed, 1 insertion(+), 53 deletions(-) diff --git a/tests/core/contracts/test_contract_buildTransaction.py b/tests/core/contracts/test_contract_buildTransaction.py index bfdc71b9a0..18ade12c7f 100644 --- a/tests/core/contracts/test_contract_buildTransaction.py +++ b/tests/core/contracts/test_contract_buildTransaction.py @@ -4,40 +4,13 @@ dissoc, ) -from web3 import Web3 from web3.exceptions import ( ValidationError, ) -from web3.middleware import ( - local_filter_middleware, -) -from web3.providers.eth_tester import ( - EthereumTesterProvider, -) # -*- coding: utf-8 -*- -# Ignore warning in pyethereum 1.6 - will go away with the upgrade -pytestmark = pytest.mark.filterwarnings("ignore:implicit cast from 'char *'") - - -# Ignore warning in pyethereum 1.6 - will go away with the upgrade -pytestmark = pytest.mark.filterwarnings("ignore:implicit cast from 'char *'") - - -@pytest.fixture( - 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() def math_contract(web3, MathContract, address_conversion_func): deploy_txn = MathContract.constructor().transact() diff --git a/tests/core/filtering/conftest.py b/tests/core/filtering/conftest.py index f0cd8cc23b..a3f4cf4552 100644 --- a/tests/core/filtering/conftest.py +++ b/tests/core/filtering/conftest.py @@ -27,6 +27,7 @@ def tester_snapshot(web3): @pytest.fixture( + scope='function', params=[True, False], ids=["local_filter_middleware", "node_based_filter"]) def web3(request): diff --git a/tests/core/filtering/test_contract_data_filters.py b/tests/core/filtering/test_contract_data_filters.py index 9da071420f..24dfb883f0 100644 --- a/tests/core/filtering/test_contract_data_filters.py +++ b/tests/core/filtering/test_contract_data_filters.py @@ -19,9 +19,6 @@ EthereumTesterProvider, ) -# Ignore warning in pyethereum 1.6 - will go away with the upgrade -pytestmark = pytest.mark.filterwarnings("ignore:implicit cast from 'char *'") - @pytest.fixture( scope="module", diff --git a/tests/core/filtering/test_contract_on_event_filtering.py b/tests/core/filtering/test_contract_on_event_filtering.py index 4e635c2c1a..9c2174d153 100644 --- a/tests/core/filtering/test_contract_on_event_filtering.py +++ b/tests/core/filtering/test_contract_on_event_filtering.py @@ -4,29 +4,6 @@ is_address, ) -from web3 import Web3 -from web3.middleware import ( - local_filter_middleware, -) -from web3.providers.eth_tester import ( - EthereumTesterProvider, -) - -# Ignore warning in pyethereum 1.6 - will go away with the upgrade -pytestmark = pytest.mark.filterwarnings("ignore:implicit cast from 'char *'") - - -@pytest.fixture( - 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.mark.parametrize('call_as_instance', (True, False)) def test_create_filter_address_parameter(web3, emitter, Emitter, call_as_instance): From 8eed796129f8a1fc34c7061760842b7462a139ac Mon Sep 17 00:00:00 2001 From: Tiffany McKenzie <25855566+tmckenzie51@users.noreply.github.com> Date: Thu, 29 Oct 2020 15:15:38 -0500 Subject: [PATCH 3/3] add release note --- newsfragments/1780.misc.rst | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 newsfragments/1780.misc.rst 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.