From 8830603eaec13d3cb3ec05563f10958401832f5b Mon Sep 17 00:00:00 2001 From: Keri Date: Fri, 14 Aug 2020 14:15:19 -0600 Subject: [PATCH 01/14] First pass --- .circleci/config.yml | 57 +++++++++--------- .gitignore | 3 + setup.py | 4 +- tests/integration/geth-1.9.19-fixture.zip | Bin 0 -> 27337 bytes tests/integration/go_ethereum/conftest.py | 3 +- .../go_ethereum/test_goethereum_http.py | 6 +- 6 files changed, 39 insertions(+), 34 deletions(-) create mode 100644 tests/integration/geth-1.9.19-fixture.zip diff --git a/.circleci/config.yml b/.circleci/config.yml index 697d920b1e..8b9a1681d6 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -80,7 +80,7 @@ geth_steps: &geth_steps name: build geth if missing command: | mkdir -p $HOME/.ethash - pip install --user py-geth>=1.10.1 + pip install --user py-geth>=2.4.0 export GOROOT=/usr/local/go export GETH_BINARY="$HOME/.py-geth/geth-$GETH_VERSION/bin/geth" if [ ! -e "$GETH_BINARY" ]; then @@ -236,29 +236,29 @@ jobs: TOXENV: py36-integration-goethereum-ws GETH_VERSION: v1.8.22 - py36-integration-goethereum-ipc-1.9.7: + py36-integration-goethereum-ipc-1.9.19: <<: *geth_steps docker: - image: circleci/python:3.6 environment: TOXENV: py36-integration-goethereum-ipc - GETH_VERSION: v1.9.7 + GETH_VERSION: v1.9.19 - py36-integration-goethereum-http-1.9.7: + py36-integration-goethereum-http-1.9.19: <<: *geth_steps docker: - image: circleci/python:3.6 environment: TOXENV: py36-integration-goethereum-http - GETH_VERSION: v1.9.7 + GETH_VERSION: v1.9.19 - py36-integration-goethereum-ws-1.9.7: + py36-integration-goethereum-ws-1.9.19: <<: *geth_steps docker: - image: circleci/python:3.6 environment: TOXENV: py36-integration-goethereum-ws - GETH_VERSION: v1.9.7 + GETH_VERSION: v1.9.19 py36-integration-parity-ipc: <<: *parity_steps @@ -374,29 +374,30 @@ jobs: TOXENV: py37-integration-goethereum-ws GETH_VERSION: v1.8.22 - py37-integration-goethereum-ipc-1.9.7: + py37-integration-goethereum-ipc-1.9.19: <<: *geth_steps docker: - image: circleci/python:3.7 environment: TOXENV: py37-integration-goethereum-ipc - GETH_VERSION: v1.9.7 + # TODO: Change this to v1.9.19 + GETH_VERSION: v1.9.6 - py37-integration-goethereum-http-1.9.7: + py37-integration-goethereum-http-1.9.19: <<: *geth_steps docker: - image: circleci/python:3.7 environment: TOXENV: py37-integration-goethereum-http - GETH_VERSION: v1.9.7 + GETH_VERSION: v1.9.19 - py37-integration-goethereum-ws-1.9.7: + py37-integration-goethereum-ws-1.9.19: <<: *geth_steps docker: - image: circleci/python:3.7 environment: TOXENV: py37-integration-goethereum-ws - GETH_VERSION: v1.9.7 + GETH_VERSION: v1.9.19 py37-integration-parity-ipc: <<: *parity_steps @@ -512,29 +513,29 @@ jobs: TOXENV: py38-integration-goethereum-ws GETH_VERSION: v1.8.22 - py38-integration-goethereum-ipc-1.9.7: + py38-integration-goethereum-ipc-1.9.19: <<: *geth_steps docker: - image: circleci/python:3.8 environment: TOXENV: py38-integration-goethereum-ipc - GETH_VERSION: v1.9.7 + GETH_VERSION: v1.9.19 - py38-integration-goethereum-http-1.9.7: + py38-integration-goethereum-http-1.9.19: <<: *geth_steps docker: - image: circleci/python:3.8 environment: TOXENV: py38-integration-goethereum-http - GETH_VERSION: v1.9.7 + GETH_VERSION: v1.9.19 - py38-integration-goethereum-ws-1.9.7: + py38-integration-goethereum-ws-1.9.19: <<: *geth_steps docker: - image: circleci/python:3.8 environment: TOXENV: py38-integration-goethereum-ws - GETH_VERSION: v1.9.7 + GETH_VERSION: v1.9.19 py38-integration-parity-ipc: <<: *parity_steps @@ -597,9 +598,9 @@ workflows: - py36-integration-goethereum-ipc-1.8.22 - py36-integration-goethereum-http-1.8.22 - py36-integration-goethereum-ws-1.8.22 - - py36-integration-goethereum-ipc-1.9.7 - - py36-integration-goethereum-http-1.9.7 - - py36-integration-goethereum-ws-1.9.7 + - py36-integration-goethereum-ipc-1.9.19 + - py36-integration-goethereum-http-1.9.19 + - py36-integration-goethereum-ws-1.9.19 - py36-integration-parity-ipc - py36-integration-parity-http - py36-integration-parity-ws @@ -613,9 +614,9 @@ workflows: - py37-integration-goethereum-ipc-1.8.22 - py37-integration-goethereum-http-1.8.22 - py37-integration-goethereum-ws-1.8.22 - - py37-integration-goethereum-ipc-1.9.7 - - py37-integration-goethereum-http-1.9.7 - - py37-integration-goethereum-ws-1.9.7 + - py37-integration-goethereum-ipc-1.9.19 + - py37-integration-goethereum-http-1.9.19 + - py37-integration-goethereum-ws-1.9.19 - py37-integration-parity-ipc - py37-integration-parity-http - py37-integration-parity-ws @@ -629,9 +630,9 @@ workflows: - py38-integration-goethereum-ipc-1.8.22 - py38-integration-goethereum-http-1.8.22 - py38-integration-goethereum-ws-1.8.22 - - py38-integration-goethereum-ipc-1.9.7 - - py38-integration-goethereum-http-1.9.7 - - py38-integration-goethereum-ws-1.9.7 + - py38-integration-goethereum-ipc-1.9.19 + - py38-integration-goethereum-http-1.9.19 + - py38-integration-goethereum-ws-1.9.19 - py38-integration-parity-ipc - py38-integration-parity-http - py38-integration-parity-ws diff --git a/.gitignore b/.gitignore index 8c0f0b28bb..4c545544dd 100644 --- a/.gitignore +++ b/.gitignore @@ -121,3 +121,6 @@ fabric.properties # pip wheel metadata pip-wheel-metadata/ + +# jupyter notebooks +*.ipynb diff --git a/setup.py b/setup.py index 074caf966c..de760b6d85 100644 --- a/setup.py +++ b/setup.py @@ -8,7 +8,7 @@ extras_require = { 'tester': [ "eth-tester[py-evm]==v0.5.0-beta.1", - "py-geth>=2.2.0,<3", + "py-geth>=2.4.0,<3", ], 'linter': [ "flake8==3.4.1", @@ -21,7 +21,7 @@ "click>=5.1", "configparser==3.5.0", "contextlib2>=0.5.4", - "py-geth>=2.2.0,<3", + "py-geth>=2.4.0,<3", "py-solc>=0.4.0", "pytest>=4.4.0,<5.0.0", "sphinx>=2.4.4,<3", diff --git a/tests/integration/geth-1.9.19-fixture.zip b/tests/integration/geth-1.9.19-fixture.zip new file mode 100644 index 0000000000000000000000000000000000000000..13acb7b02c71ba663086c4e18511f0373dded049 GIT binary patch literal 27337 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 literal 0 HcmV?d00001 diff --git a/tests/integration/go_ethereum/conftest.py b/tests/integration/go_ethereum/conftest.py index 45be97809d..ff56e89205 100644 --- a/tests/integration/go_ethereum/conftest.py +++ b/tests/integration/go_ethereum/conftest.py @@ -22,6 +22,7 @@ GETH_17_ZIP = 'geth-17-fixture.zip' GETH_1822_ZIP = 'geth-1.8.22-fixture.zip' GETH_197_ZIP = 'geth-1.9.7-fixture.zip' +GETH_1919_ZIP = 'geth-1.9.19-fixture.zip' @pytest.fixture(scope='module') @@ -77,7 +78,7 @@ def geth_zipfile_version(get_geth_version): elif get_geth_version.minor == 8: return GETH_1822_ZIP elif get_geth_version.minor == 9: - return GETH_197_ZIP + return GETH_1919_ZIP raise AssertionError("Unsupported geth version") diff --git a/tests/integration/go_ethereum/test_goethereum_http.py b/tests/integration/go_ethereum/test_goethereum_http.py index 762fa48e07..75978e6434 100644 --- a/tests/integration/go_ethereum/test_goethereum_http.py +++ b/tests/integration/go_ethereum/test_goethereum_http.py @@ -35,9 +35,9 @@ def _geth_command_arguments(rpc_port, yield from base_geth_command_arguments if geth_version.major == 1: yield from ( - '--rpc', - '--rpcport', rpc_port, - '--rpcapi', 'admin,db,eth,net,web3,personal,shh,miner', + '--http', + '--http.port', rpc_port, + '--http.api', 'admin,db,eth,net,web3,personal,shh,miner', '--ipcdisable', ) if geth_version.minor == 9: From f021e29c7fccdc76d1fd839293aed85d06f1a961 Mon Sep 17 00:00:00 2001 From: Keri Date: Fri, 14 Aug 2020 16:54:09 -0600 Subject: [PATCH 02/14] Upgrade circle go version --- .circleci/config.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 8b9a1681d6..967077cb96 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -82,10 +82,11 @@ geth_steps: &geth_steps mkdir -p $HOME/.ethash pip install --user py-geth>=2.4.0 export GOROOT=/usr/local/go + echo $GETH_VERSION export GETH_BINARY="$HOME/.py-geth/geth-$GETH_VERSION/bin/geth" if [ ! -e "$GETH_BINARY" ]; then - curl -O https://storage.googleapis.com/golang/go1.9.7.linux-amd64.tar.gz - tar xvf go1.9.7.linux-amd64.tar.gz + curl -O https://storage.googleapis.com/golang/go1.14.2.linux-amd64.tar.gz + tar xvf go1.14.2.linux-amd64.tar.gz sudo chown -R root:root ./go sudo mv go /usr/local sudo ln -s /usr/local/go/bin/go /usr/local/bin/go @@ -380,8 +381,7 @@ jobs: - image: circleci/python:3.7 environment: TOXENV: py37-integration-goethereum-ipc - # TODO: Change this to v1.9.19 - GETH_VERSION: v1.9.6 + GETH_VERSION: v1.9.19 py37-integration-goethereum-http-1.9.19: <<: *geth_steps From 1de01451870d5f31d3db16b88215fecbca7069dd Mon Sep 17 00:00:00 2001 From: Marc Garreau Date: Tue, 18 Aug 2020 11:36:09 -0600 Subject: [PATCH 03/14] update eth_submitHashrate -> eth_submitHashRate --- docs/web3.eth.rst | 6 +++--- tests/integration/go_ethereum/common.py | 8 -------- tests/integration/test_ethereum_tester.py | 2 +- web3/_utils/module_testing/eth_module.py | 4 ++-- web3/_utils/rpc_abi.py | 4 ++-- web3/eth.py | 4 ++-- web3/providers/eth_tester/defaults.py | 2 +- 7 files changed, 11 insertions(+), 19 deletions(-) diff --git a/docs/web3.eth.rst b/docs/web3.eth.rst index f7f3707b53..e761d1055c 100644 --- a/docs/web3.eth.rst +++ b/docs/web3.eth.rst @@ -996,14 +996,14 @@ with the filtering API. :meth:`~Eth.filter` for details on allowed filter parameters. -.. py:method:: Eth.submitHashrate(hashrate, nodeid) +.. py:method:: Eth.submitHashRate(hashrate, nodeid) - * Delegates to ``eth_submitHashrate`` RPC Method + * Delegates to ``eth_submitHashRate`` RPC Method .. code-block:: python >>> node_id = '59daa26581d0acd1fce254fb7e85952f4c09d0915afd33d3886cd914bc7d283c' - >>> web3.eth.submitHashrate(5000, node_id) + >>> web3.eth.submitHashRate(5000, node_id) True diff --git a/tests/integration/go_ethereum/common.py b/tests/integration/go_ethereum/common.py index 5fad5784bc..68dd94bc28 100644 --- a/tests/integration/go_ethereum/common.py +++ b/tests/integration/go_ethereum/common.py @@ -10,8 +10,6 @@ Web3ModuleTest, ) -VERSIONS_WITHOUT_ETH_SUBMITHASH = ['v1.9.7'] - class GoEthereumTest(Web3ModuleTest): def _check_web3_clientVersion(self, client_version): @@ -32,12 +30,6 @@ def test_eth_estimateGas_with_block(self, web3, unlocked_account_dual_type ) - def test_eth_submitHashrate(self, web3): - if any([v in web3.clientVersion for v in VERSIONS_WITHOUT_ETH_SUBMITHASH]): - # https://github.com/ethereum/go-ethereum/commit/51db5975cc5fb88db6a0dba1826b534fd4df29d7 - pytest.xfail('eth_submitHashrate deprecated in 1.8.22 for ethash_submitHashRate') - super().test_eth_submitHashrate(web3) - @pytest.mark.xfail(reason='eth_signTypedData has not been released in geth') def test_eth_signTypedData(self, web3, diff --git a/tests/integration/test_ethereum_tester.py b/tests/integration/test_ethereum_tester.py index 4e867569f2..7601e69630 100644 --- a/tests/integration/test_ethereum_tester.py +++ b/tests/integration/test_ethereum_tester.py @@ -217,7 +217,7 @@ class TestEthereumTesterEthModule(EthModuleTest): test_eth_sign = not_implemented(EthModuleTest.test_eth_sign, ValueError) test_eth_signTypedData = not_implemented(EthModuleTest.test_eth_signTypedData, ValueError) test_eth_signTransaction = not_implemented(EthModuleTest.test_eth_signTransaction, ValueError) - test_eth_submitHashrate = not_implemented(EthModuleTest.test_eth_submitHashrate, ValueError) + test_eth_submitHashRate = not_implemented(EthModuleTest.test_eth_submitHashRate, ValueError) test_eth_submitWork = not_implemented(EthModuleTest.test_eth_submitWork, ValueError) @disable_auto_mine diff --git a/web3/_utils/module_testing/eth_module.py b/web3/_utils/module_testing/eth_module.py index 22043ba607..5f6a235517 100644 --- a/web3/_utils/module_testing/eth_module.py +++ b/web3/_utils/module_testing/eth_module.py @@ -1052,10 +1052,10 @@ def test_eth_getCompilers_deprecation(self, web3: "Web3") -> None: with pytest.raises(DeprecationWarning): web3.eth.getCompilers() - def test_eth_submitHashrate(self, web3: "Web3") -> None: + def test_eth_submitHashRate(self, web3: "Web3") -> None: # node_id from EIP 1474: https://github.com/ethereum/EIPs/pull/1474/files node_id = HexStr('59daa26581d0acd1fce254fb7e85952f4c09d0915afd33d3886cd914bc7d283c') - result = web3.eth.submitHashrate(5000, node_id) + result = web3.eth.submitHashRate(5000, node_id) assert result is True def test_eth_submitWork(self, web3: "Web3") -> None: diff --git a/web3/_utils/rpc_abi.py b/web3/_utils/rpc_abi.py index 6ea7ff6815..2cbb32ef23 100644 --- a/web3/_utils/rpc_abi.py +++ b/web3/_utils/rpc_abi.py @@ -79,7 +79,7 @@ class RPC: eth_sign = RPCEndpoint("eth_sign") eth_signTransaction = RPCEndpoint("eth_signTransaction") eth_signTypedData = RPCEndpoint("eth_signTypedData") - eth_submitHashrate = RPCEndpoint("eth_submitHashrate") + eth_submitHashRate = RPCEndpoint("eth_submitHashRate") eth_submitWork = RPCEndpoint("eth_submitWork") eth_syncing = RPCEndpoint("eth_syncing") eth_uninstallFilter = RPCEndpoint("eth_uninstallFilter") @@ -214,7 +214,7 @@ class RPC: 'eth_signTransaction': TRANSACTION_PARAMS_ABIS, 'eth_sign': ['address', 'bytes'], 'eth_signTypedData': ['address', None], - 'eth_submitHashrate': ['uint', 'bytes32'], + 'eth_submitHashRate': ['uint', 'bytes32'], 'eth_submitWork': ['bytes8', 'bytes32', 'bytes32'], # personal 'personal_sendTransaction': TRANSACTION_PARAMS_ABIS, diff --git a/web3/eth.py b/web3/eth.py index 1b337c3b04..43568022ed 100644 --- a/web3/eth.py +++ b/web3/eth.py @@ -503,9 +503,9 @@ def getLogs(self, filter_params: FilterParams) -> List[LogReceipt]: RPC.eth_getLogs, [filter_params], ) - def submitHashrate(self, hashrate: int, node_id: _Hash32) -> bool: + def submitHashRate(self, hashrate: int, node_id: _Hash32) -> bool: return self.web3.manager.request_blocking( - RPC.eth_submitHashrate, [hashrate, node_id], + RPC.eth_submitHashRate, [hashrate, node_id], ) def submitWork(self, nonce: int, pow_hash: _Hash32, mix_digest: _Hash32) -> bool: diff --git a/web3/providers/eth_tester/defaults.py b/web3/providers/eth_tester/defaults.py index 57af0b3e6c..033b988d8f 100644 --- a/web3/providers/eth_tester/defaults.py +++ b/web3/providers/eth_tester/defaults.py @@ -286,7 +286,7 @@ def personal_send_transaction(eth_tester: "EthereumTester", params: Any) -> HexS 'getLogs': get_logs, 'getWork': not_implemented, 'submitWork': not_implemented, - 'submitHashrate': not_implemented, + 'submitHashRate': not_implemented, }, 'db': { 'putString': not_implemented, From 8780cc38c1704f80bd810aef3a752fb8343d6d8e Mon Sep 17 00:00:00 2001 From: Keri Date: Wed, 19 Aug 2020 16:10:57 -0600 Subject: [PATCH 04/14] WIP --- .../go_ethereum/test_goethereum_http.py | 18 ++-- .../go_ethereum/test_goethereum_ws.py | 18 ++-- .../go_ethereum_admin_module.py | 84 +++++++++++-------- 3 files changed, 67 insertions(+), 53 deletions(-) diff --git a/tests/integration/go_ethereum/test_goethereum_http.py b/tests/integration/go_ethereum/test_goethereum_http.py index 76debd6c22..18f809072b 100644 --- a/tests/integration/go_ethereum/test_goethereum_http.py +++ b/tests/integration/go_ethereum/test_goethereum_http.py @@ -73,17 +73,17 @@ class TestGoEthereumAdminModuleTest(GoEthereumAdminModuleTest): def test_admin_peers(web3): super().test_admin_peers(web3) - @pytest.mark.xfail(reason='Only one RPC endpoint is allowed to be active at any time') - def test_admin_start_stop_rpc(web3): - super().test_admin_start_stop_rpc(web3) + # @pytest.mark.xfail(reason='Only one RPC endpoint is allowed to be active at any time') + # def test_admin_start_stop_rpc(web3): + # super().test_admin_start_stop_rpc(web3) - @pytest.mark.xfail(reason='Only one RPC endpoint is allowed to be active at any time') - def test_admin_startRPC(web3): - super().test_admin_stopRPC(web3) + # @pytest.mark.xfail(reason='Only one RPC endpoint is allowed to be active at any time') + # def test_admin_startRPC(web3): + # super().test_admin_stopRPC(web3) - @pytest.mark.xfail(reason='Only one RPC endpoint is allowed to be active at any time') - def test_admin_stopRPC(web3): - super().test_admin_stopRPC(web3) + # @pytest.mark.xfail(reason='Only one RPC endpoint is allowed to be active at any time') + # def test_admin_stopRPC(web3): + # super().test_admin_stopRPC(web3) class TestGoEthereumEthModuleTest(GoEthereumEthModuleTest): diff --git a/tests/integration/go_ethereum/test_goethereum_ws.py b/tests/integration/go_ethereum/test_goethereum_ws.py index e81239de9c..18379adb7e 100644 --- a/tests/integration/go_ethereum/test_goethereum_ws.py +++ b/tests/integration/go_ethereum/test_goethereum_ws.py @@ -79,17 +79,17 @@ class TestGoEthereumAdminModuleTest(GoEthereumAdminModuleTest): def test_admin_peers(web3): super().test_admin_peers(web3) - @pytest.mark.xfail(reason='Only one WebSocket endpoint is allowed to be active at any time') - def test_admin_start_stop_ws(web3): - super().test_admin_start_stop_ws(web3) + # @pytest.mark.xfail(reason='Only one WebSocket endpoint is allowed to be active at any time') + # def test_admin_start_stop_ws(web3): + # super().test_admin_start_stop_ws(web3) - @pytest.mark.xfail(reason='Only one WebSocket endpoint is allowed to be active at any time') - def test_admin_startWS(self, web3): - super().test_admin_startWS(web3) + # @pytest.mark.xfail(reason='Only one WebSocket endpoint is allowed to be active at any time') + # def test_admin_startWS(self, web3): + # super().test_admin_startWS(web3) - @pytest.mark.xfail(reason='Only one WebSocket endpoint is allowed to be active at any time') - def test_admin_stopWS(self, web3): - super().test_admin_stopWS(web3) + # @pytest.mark.xfail(reason='Only one WebSocket endpoint is allowed to be active at any time') + # def test_admin_stopWS(self, web3): + # super().test_admin_stopWS(web3) class TestGoEthereumEthModuleTest(GoEthereumEthModuleTest): diff --git a/web3/_utils/module_testing/go_ethereum_admin_module.py b/web3/_utils/module_testing/go_ethereum_admin_module.py index d6cc7d5b20..d896fd84e3 100644 --- a/web3/_utils/module_testing/go_ethereum_admin_module.py +++ b/web3/_utils/module_testing/go_ethereum_admin_module.py @@ -45,19 +45,41 @@ def test_admin_peers(self, web3: "Web3") -> None: result = web3.geth.admin.peers() assert len(result) == 1 - def test_admin_start_stop_rpc(self, web3: "Web3") -> None: - start = web3.geth.admin.start_rpc("localhost", 8545) - assert start + def test_admin_start_stop_rpc_ws(self, web3: "Web3") -> None: + stop = web3.geth.admin.stop_rpc() + assert stop is True + + stop = web3.geth.admin.stop_ws() + assert stop is True + + start = web3.geth.admin.start_rpc() + assert start is True + + with pytest.warns(DeprecationWarning): + stop = web3.geth.admin.stopRPC() + assert stop + + with pytest.warns(DeprecationWarning): + start = web3.geth.admin.startRPC() + assert start stop = web3.geth.admin.stop_rpc() - assert stop + assert stop is True - def test_admin_start_stop_ws(self, web3: "Web3") -> None: - start = web3.geth.admin.start_ws("localhost", 8546) - assert start + # stop = web3.geth.admin.stop_ws() + # assert stop + + # start = web3.geth.admin.start_ws('localhost', 8548) + # assert start + +# with pytest.warns(DeprecationWarning): +# stop = web3.geth.admin.stopWS() +# assert stop + +# with pytest.warns(DeprecationWarning): +# start = web3.geth.admin.startWS('localhost', 8548) +# assert start - stop = web3.geth.admin.stop_ws() - assert stop # # Deprecated @@ -84,34 +106,26 @@ def test_admin_nodeInfo(self, web3: "Web3") -> None: # Test that result gives at least the keys that are listed in `expected` assert not set(expected.keys()).difference(result.keys()) - def test_admin_startRPC(self, web3: "Web3") -> None: - with pytest.warns(DeprecationWarning): - start = web3.geth.admin.startRPC('localhost', 8545) - assert start + # def test_admin_startRPC(self, web3: "Web3") -> None: + # stop = web3.geth.admin.stop_rpc() + # assert stop is True - stop = web3.geth.admin.stop_rpc() - assert stop - - def test_admin_stopRPC(self, web3: "Web3") -> None: - start = web3.geth.admin.start_rpc('localhost', 8545) - assert start - - with pytest.warns(DeprecationWarning): - stop = web3.geth.admin.stopRPC() - assert stop + # with pytest.warns(DeprecationWarning): + # start = web3.geth.admin.startRPC('localhost', 8545) + # assert start - def test_admin_startWS(self, web3: "Web3") -> None: - with pytest.warns(DeprecationWarning): - start = web3.geth.admin.startWS('localhost', 8546) - assert start + # stop = web3.geth.admin.stop_rpc() + # assert stop - stop = web3.geth.admin.stop_ws() - assert stop + # def test_admin_stopRPC(self, web3: "Web3") -> None: + # with pytest.warns(DeprecationWarning): + # stop = web3.geth.admin.stopRPC() + # assert stop - def test_admin_stopWS(self, web3: "Web3") -> None: - start = web3.geth.admin.start_ws('localhost', 8546) - assert start + # def test_admin_stopWS(self, web3: "Web3") -> None: + # start = web3.geth.admin.start_ws('localhost', 8546) + # assert start - with pytest.warns(DeprecationWarning): - stop = web3.geth.admin.stopWS() - assert stop + # with pytest.warns(DeprecationWarning): + # stop = web3.geth.admin.stopWS() + # assert stop From aec9965922b1433a4a36d77e2f20c152f4d41754 Mon Sep 17 00:00:00 2001 From: Keri Date: Thu, 20 Aug 2020 09:44:47 -0600 Subject: [PATCH 05/14] Move start/stop ws/rpc tests around --- .../go_ethereum/test_goethereum_http.py | 16 ++---- .../go_ethereum/test_goethereum_ws.py | 20 ++----- web3/_utils/admin.py | 4 +- .../go_ethereum_admin_module.py | 57 ++++--------------- 4 files changed, 22 insertions(+), 75 deletions(-) diff --git a/tests/integration/go_ethereum/test_goethereum_http.py b/tests/integration/go_ethereum/test_goethereum_http.py index 18f809072b..5112d2d908 100644 --- a/tests/integration/go_ethereum/test_goethereum_http.py +++ b/tests/integration/go_ethereum/test_goethereum_http.py @@ -37,7 +37,7 @@ def _geth_command_arguments(rpc_port, yield from ( '--http', '--http.port', rpc_port, - '--http.api', 'admin,db,eth,net,web3,personal,shh,miner', + '--http.api', 'admin,eth,net,web3,personal,shh,miner', '--ipcdisable', '--allow-insecure-unlock' ) @@ -73,17 +73,9 @@ class TestGoEthereumAdminModuleTest(GoEthereumAdminModuleTest): def test_admin_peers(web3): super().test_admin_peers(web3) - # @pytest.mark.xfail(reason='Only one RPC endpoint is allowed to be active at any time') - # def test_admin_start_stop_rpc(web3): - # super().test_admin_start_stop_rpc(web3) - - # @pytest.mark.xfail(reason='Only one RPC endpoint is allowed to be active at any time') - # def test_admin_startRPC(web3): - # super().test_admin_stopRPC(web3) - - # @pytest.mark.xfail(reason='Only one RPC endpoint is allowed to be active at any time') - # def test_admin_stopRPC(web3): - # super().test_admin_stopRPC(web3) + @pytest.mark.xfail(reason='Only one RPC endpoint is allowed to be active at any time') + def test_admin_start_stop_rpc(web3): + super().test_admin_start_stop_rpc(web3) class TestGoEthereumEthModuleTest(GoEthereumEthModuleTest): diff --git a/tests/integration/go_ethereum/test_goethereum_ws.py b/tests/integration/go_ethereum/test_goethereum_ws.py index 18379adb7e..169b9eeead 100644 --- a/tests/integration/go_ethereum/test_goethereum_ws.py +++ b/tests/integration/go_ethereum/test_goethereum_ws.py @@ -37,9 +37,9 @@ def _geth_command_arguments(ws_port, if geth_version.major == 1: yield from ( '--ws', - '--wsport', ws_port, - '--wsapi', 'admin,db,eth,net,shh,web3,personal,miner', - '--wsorigins', '*', + '--ws.port', ws_port, + '--ws.api', 'admin,eth,net,shh,web3,personal,miner', + '--ws.origins', '*', '--ipcdisable', '--allow-insecure-unlock', ) @@ -79,17 +79,9 @@ class TestGoEthereumAdminModuleTest(GoEthereumAdminModuleTest): def test_admin_peers(web3): super().test_admin_peers(web3) - # @pytest.mark.xfail(reason='Only one WebSocket endpoint is allowed to be active at any time') - # def test_admin_start_stop_ws(web3): - # super().test_admin_start_stop_ws(web3) - - # @pytest.mark.xfail(reason='Only one WebSocket endpoint is allowed to be active at any time') - # def test_admin_startWS(self, web3): - # super().test_admin_startWS(web3) - - # @pytest.mark.xfail(reason='Only one WebSocket endpoint is allowed to be active at any time') - # def test_admin_stopWS(self, web3): - # super().test_admin_stopWS(web3) + @pytest.mark.xfail(reason='Only one WebSocket endpoint is allowed to be active at any time') + def test_admin_start_stop_ws(web3): + super().test_admin_start_stop_ws(web3) class TestGoEthereumEthModuleTest(GoEthereumEthModuleTest): diff --git a/web3/_utils/admin.py b/web3/_utils/admin.py index 52a50eef35..6c298762be 100644 --- a/web3/_utils/admin.py +++ b/web3/_utils/admin.py @@ -26,8 +26,8 @@ def admin_start_params_munger( - module: Module, host: str='localhost', port: str='8546', cors: str='', apis: str='eth,net,web3' -) -> Tuple[str, str, str, str]: + module: Module, host: str='localhost', port: int=8546, cors: str='', apis: str='eth,net,web3' +) -> Tuple[str, int, str, str]: return (host, port, cors, apis) diff --git a/web3/_utils/module_testing/go_ethereum_admin_module.py b/web3/_utils/module_testing/go_ethereum_admin_module.py index d896fd84e3..081cbd2fc3 100644 --- a/web3/_utils/module_testing/go_ethereum_admin_module.py +++ b/web3/_utils/module_testing/go_ethereum_admin_module.py @@ -45,40 +45,27 @@ def test_admin_peers(self, web3: "Web3") -> None: result = web3.geth.admin.peers() assert len(result) == 1 - def test_admin_start_stop_rpc_ws(self, web3: "Web3") -> None: + def test_admin_start_stop_rpc(self, web3: "Web3") -> None: stop = web3.geth.admin.stop_rpc() assert stop is True - stop = web3.geth.admin.stop_ws() - assert stop is True - - start = web3.geth.admin.start_rpc() + start = web3.geth.admin.start_rpc('localhost', 8548) assert start is True with pytest.warns(DeprecationWarning): stop = web3.geth.admin.stopRPC() assert stop - with pytest.warns(DeprecationWarning): - start = web3.geth.admin.startRPC() - assert start - - stop = web3.geth.admin.stop_rpc() - assert stop is True - - # stop = web3.geth.admin.stop_ws() - # assert stop - - # start = web3.geth.admin.start_ws('localhost', 8548) - # assert start + def test_admin_start_stop_ws(self, web3: "Web3") -> None: + stop = web3.geth.admin.stop_ws() + assert stop -# with pytest.warns(DeprecationWarning): -# stop = web3.geth.admin.stopWS() -# assert stop + start = web3.geth.admin.start_ws('localhost', 8548) + assert start -# with pytest.warns(DeprecationWarning): -# start = web3.geth.admin.startWS('localhost', 8548) -# assert start + with pytest.warns(DeprecationWarning): + stop = web3.geth.admin.stopWS() + assert stop # @@ -105,27 +92,3 @@ def test_admin_nodeInfo(self, web3: "Web3") -> None: }) # Test that result gives at least the keys that are listed in `expected` assert not set(expected.keys()).difference(result.keys()) - - # def test_admin_startRPC(self, web3: "Web3") -> None: - # stop = web3.geth.admin.stop_rpc() - # assert stop is True - - # with pytest.warns(DeprecationWarning): - # start = web3.geth.admin.startRPC('localhost', 8545) - # assert start - - # stop = web3.geth.admin.stop_rpc() - # assert stop - - # def test_admin_stopRPC(self, web3: "Web3") -> None: - # with pytest.warns(DeprecationWarning): - # stop = web3.geth.admin.stopRPC() - # assert stop - - # def test_admin_stopWS(self, web3: "Web3") -> None: - # start = web3.geth.admin.start_ws('localhost', 8546) - # assert start - - # with pytest.warns(DeprecationWarning): - # stop = web3.geth.admin.stopWS() - # assert stop From 82d35ef9191f9e4af85e62b366293b9c2885be29 Mon Sep 17 00:00:00 2001 From: Keri Date: Thu, 20 Aug 2020 10:06:27 -0600 Subject: [PATCH 06/14] lint --- web3/_utils/module_testing/go_ethereum_admin_module.py | 1 - 1 file changed, 1 deletion(-) diff --git a/web3/_utils/module_testing/go_ethereum_admin_module.py b/web3/_utils/module_testing/go_ethereum_admin_module.py index 081cbd2fc3..3f2bea4633 100644 --- a/web3/_utils/module_testing/go_ethereum_admin_module.py +++ b/web3/_utils/module_testing/go_ethereum_admin_module.py @@ -67,7 +67,6 @@ def test_admin_start_stop_ws(self, web3: "Web3") -> None: stop = web3.geth.admin.stopWS() assert stop - # # Deprecated # From 5dffe491ec6d7b6b82a437759bd7039f8c74c875 Mon Sep 17 00:00:00 2001 From: Keri Date: Thu, 20 Aug 2020 11:17:11 -0600 Subject: [PATCH 07/14] Fix websocket max size error --- tests/integration/common.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/tests/integration/common.py b/tests/integration/common.py index 6ce2a8812b..4031a669bd 100644 --- a/tests/integration/common.py +++ b/tests/integration/common.py @@ -1,9 +1,5 @@ import pytest -from websockets.exceptions import ( - ConnectionClosed, -) - from web3 import Web3 @@ -13,5 +9,5 @@ def test_websocket_max_size_error(self, web3, endpoint_uri): w3 = Web3(Web3.WebsocketProvider( endpoint_uri=endpoint_uri, websocket_kwargs={'max_size': 1}) ) - with pytest.raises(ConnectionClosed): + with pytest.raises(OSError, match='Connect call failed'): w3.eth.getBlock(0) From 16d7afd5035bbe9f820fc33bab2f06c81ce60caf Mon Sep 17 00:00:00 2001 From: Keri Date: Thu, 20 Aug 2020 11:20:34 -0600 Subject: [PATCH 08/14] Make ports ints in docs --- docs/web3.geth.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/web3.geth.rst b/docs/web3.geth.rst index 286aaf1df0..157aed2448 100644 --- a/docs/web3.geth.rst +++ b/docs/web3.geth.rst @@ -126,7 +126,7 @@ The ``web3.geth.admin`` object exposes methods to interact with the RPC APIs und .. Warning:: This method has been removed from Geth -.. py:method:: start_rpc(host='localhost', port='8545', cors="", apis="eth,net,web3") +.. py:method:: start_rpc(host='localhost', port=8545, cors="", apis="eth,net,web3") * Delegates to ``admin_startRPC`` RPC Method @@ -141,13 +141,13 @@ The ``web3.geth.admin`` object exposes methods to interact with the RPC APIs und True -.. py:method:: startRPC(host='localhost', port='8545', cors="", apis="eth,net,web3") +.. py:method:: startRPC(host='localhost', port=8545, cors="", apis="eth,net,web3") .. warning:: Deprecated: This method is deprecated in favor of :meth:`~web3.geth.admin.start_rpc()` -.. py:method:: start_ws(host='localhost', port='8546', cors="", apis="eth,net,web3") +.. py:method:: start_ws(host='localhost', port=8546, cors="", apis="eth,net,web3") * Delegates to ``admin_startWS`` RPC Method @@ -162,7 +162,7 @@ The ``web3.geth.admin`` object exposes methods to interact with the RPC APIs und True -.. py:method:: startWS(host='localhost', port='8546', cors="", apis="eth,net,web3") +.. py:method:: startWS(host='localhost', port=8546, cors="", apis="eth,net,web3") .. warning:: Deprecated: This method is deprecated in favor of :meth:`~web3.geth.admin.start_ws()` From b6e4691c68b8fd65c61348e23c5ebabda632e843 Mon Sep 17 00:00:00 2001 From: Keri Date: Thu, 20 Aug 2020 13:44:41 -0600 Subject: [PATCH 09/14] Add eth_submitHashrate back for parity tests --- docs/web3.eth.rst | 6 +++--- tests/integration/go_ethereum/common.py | 5 +++++ tests/integration/test_ethereum_tester.py | 2 +- web3/_utils/module_testing/eth_module.py | 4 ++-- web3/_utils/rpc_abi.py | 4 ++-- web3/eth.py | 4 ++-- web3/providers/eth_tester/defaults.py | 2 +- 7 files changed, 16 insertions(+), 11 deletions(-) diff --git a/docs/web3.eth.rst b/docs/web3.eth.rst index e761d1055c..f7f3707b53 100644 --- a/docs/web3.eth.rst +++ b/docs/web3.eth.rst @@ -996,14 +996,14 @@ with the filtering API. :meth:`~Eth.filter` for details on allowed filter parameters. -.. py:method:: Eth.submitHashRate(hashrate, nodeid) +.. py:method:: Eth.submitHashrate(hashrate, nodeid) - * Delegates to ``eth_submitHashRate`` RPC Method + * Delegates to ``eth_submitHashrate`` RPC Method .. code-block:: python >>> node_id = '59daa26581d0acd1fce254fb7e85952f4c09d0915afd33d3886cd914bc7d283c' - >>> web3.eth.submitHashRate(5000, node_id) + >>> web3.eth.submitHashrate(5000, node_id) True diff --git a/tests/integration/go_ethereum/common.py b/tests/integration/go_ethereum/common.py index 68dd94bc28..3155e80a6e 100644 --- a/tests/integration/go_ethereum/common.py +++ b/tests/integration/go_ethereum/common.py @@ -17,6 +17,11 @@ def _check_web3_clientVersion(self, client_version): class GoEthereumEthModuleTest(EthModuleTest): + @pytest.mark.xfail(reason='eth_submitHashrate deprecated in 1.8.22 for ethash_submitHashRate') + def test_eth_submitHashrate(self, web3): + # https://github.com/ethereum/go-ethereum/commit/51db5975cc5fb88db6a0dba1826b534fd4df29d7 + super().test_eth_submitHashrate(web3) + def test_eth_replaceTransaction_already_mined(self, web3, unlocked_account_dual_type): web3.geth.miner.start() super().test_eth_replaceTransaction_already_mined(web3, unlocked_account_dual_type) diff --git a/tests/integration/test_ethereum_tester.py b/tests/integration/test_ethereum_tester.py index 7601e69630..4e867569f2 100644 --- a/tests/integration/test_ethereum_tester.py +++ b/tests/integration/test_ethereum_tester.py @@ -217,7 +217,7 @@ class TestEthereumTesterEthModule(EthModuleTest): test_eth_sign = not_implemented(EthModuleTest.test_eth_sign, ValueError) test_eth_signTypedData = not_implemented(EthModuleTest.test_eth_signTypedData, ValueError) test_eth_signTransaction = not_implemented(EthModuleTest.test_eth_signTransaction, ValueError) - test_eth_submitHashRate = not_implemented(EthModuleTest.test_eth_submitHashRate, ValueError) + test_eth_submitHashrate = not_implemented(EthModuleTest.test_eth_submitHashrate, ValueError) test_eth_submitWork = not_implemented(EthModuleTest.test_eth_submitWork, ValueError) @disable_auto_mine diff --git a/web3/_utils/module_testing/eth_module.py b/web3/_utils/module_testing/eth_module.py index 5f6a235517..22043ba607 100644 --- a/web3/_utils/module_testing/eth_module.py +++ b/web3/_utils/module_testing/eth_module.py @@ -1052,10 +1052,10 @@ def test_eth_getCompilers_deprecation(self, web3: "Web3") -> None: with pytest.raises(DeprecationWarning): web3.eth.getCompilers() - def test_eth_submitHashRate(self, web3: "Web3") -> None: + def test_eth_submitHashrate(self, web3: "Web3") -> None: # node_id from EIP 1474: https://github.com/ethereum/EIPs/pull/1474/files node_id = HexStr('59daa26581d0acd1fce254fb7e85952f4c09d0915afd33d3886cd914bc7d283c') - result = web3.eth.submitHashRate(5000, node_id) + result = web3.eth.submitHashrate(5000, node_id) assert result is True def test_eth_submitWork(self, web3: "Web3") -> None: diff --git a/web3/_utils/rpc_abi.py b/web3/_utils/rpc_abi.py index 2cbb32ef23..6ea7ff6815 100644 --- a/web3/_utils/rpc_abi.py +++ b/web3/_utils/rpc_abi.py @@ -79,7 +79,7 @@ class RPC: eth_sign = RPCEndpoint("eth_sign") eth_signTransaction = RPCEndpoint("eth_signTransaction") eth_signTypedData = RPCEndpoint("eth_signTypedData") - eth_submitHashRate = RPCEndpoint("eth_submitHashRate") + eth_submitHashrate = RPCEndpoint("eth_submitHashrate") eth_submitWork = RPCEndpoint("eth_submitWork") eth_syncing = RPCEndpoint("eth_syncing") eth_uninstallFilter = RPCEndpoint("eth_uninstallFilter") @@ -214,7 +214,7 @@ class RPC: 'eth_signTransaction': TRANSACTION_PARAMS_ABIS, 'eth_sign': ['address', 'bytes'], 'eth_signTypedData': ['address', None], - 'eth_submitHashRate': ['uint', 'bytes32'], + 'eth_submitHashrate': ['uint', 'bytes32'], 'eth_submitWork': ['bytes8', 'bytes32', 'bytes32'], # personal 'personal_sendTransaction': TRANSACTION_PARAMS_ABIS, diff --git a/web3/eth.py b/web3/eth.py index 43568022ed..1b337c3b04 100644 --- a/web3/eth.py +++ b/web3/eth.py @@ -503,9 +503,9 @@ def getLogs(self, filter_params: FilterParams) -> List[LogReceipt]: RPC.eth_getLogs, [filter_params], ) - def submitHashRate(self, hashrate: int, node_id: _Hash32) -> bool: + def submitHashrate(self, hashrate: int, node_id: _Hash32) -> bool: return self.web3.manager.request_blocking( - RPC.eth_submitHashRate, [hashrate, node_id], + RPC.eth_submitHashrate, [hashrate, node_id], ) def submitWork(self, nonce: int, pow_hash: _Hash32, mix_digest: _Hash32) -> bool: diff --git a/web3/providers/eth_tester/defaults.py b/web3/providers/eth_tester/defaults.py index 033b988d8f..57af0b3e6c 100644 --- a/web3/providers/eth_tester/defaults.py +++ b/web3/providers/eth_tester/defaults.py @@ -286,7 +286,7 @@ def personal_send_transaction(eth_tester: "EthereumTester", params: Any) -> HexS 'getLogs': get_logs, 'getWork': not_implemented, 'submitWork': not_implemented, - 'submitHashRate': not_implemented, + 'submitHashrate': not_implemented, }, 'db': { 'putString': not_implemented, From 04cff9c4d7793722db115835d1a7de86c882202a Mon Sep 17 00:00:00 2001 From: Keri Date: Thu, 20 Aug 2020 14:15:45 -0600 Subject: [PATCH 10/14] Add error to MiscWebsocketTest --- tests/integration/common.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/integration/common.py b/tests/integration/common.py index 4031a669bd..6b0ece0fea 100644 --- a/tests/integration/common.py +++ b/tests/integration/common.py @@ -1,5 +1,9 @@ import pytest +from websockets.exceptions import ( + ConnectionClosed, +) + from web3 import Web3 @@ -9,5 +13,5 @@ def test_websocket_max_size_error(self, web3, endpoint_uri): w3 = Web3(Web3.WebsocketProvider( endpoint_uri=endpoint_uri, websocket_kwargs={'max_size': 1}) ) - with pytest.raises(OSError, match='Connect call failed'): + with pytest.raises((OSError, ConnectionClosed)): w3.eth.getBlock(0) From 1dd2982b1e5d13501da5c808868b1a627d12e890 Mon Sep 17 00:00:00 2001 From: Keri Date: Thu, 20 Aug 2020 15:15:23 -0600 Subject: [PATCH 11/14] Add newsfragment --- newsfragments/1708.misc.rst | 1 + 1 file changed, 1 insertion(+) create mode 100644 newsfragments/1708.misc.rst diff --git a/newsfragments/1708.misc.rst b/newsfragments/1708.misc.rst new file mode 100644 index 0000000000..329f2e0119 --- /dev/null +++ b/newsfragments/1708.misc.rst @@ -0,0 +1 @@ +Upgrade Geth integration tests to run against v1.9.19 From 0b2dfa57ce54052fc15241d46431d672382f178a Mon Sep 17 00:00:00 2001 From: Keri Date: Fri, 21 Aug 2020 10:12:57 -0600 Subject: [PATCH 12/14] Undo whitespace in circle config --- .circleci/config.yml | 954 +++++++++++++++++++++---------------------- 1 file changed, 477 insertions(+), 477 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 4151ef3031..815a0d1da6 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,477 +1,477 @@ - version: 2.0 - - # heavily inspired by https://raw.githubusercontent.com/pinax/pinax-wiki/6bd2a99ab6f702e300d708532a6d1d9aa638b9f8/.circleci/config.yml - - common: &common - working_directory: ~/repo - steps: - - checkout - - restore_cache: - keys: - - cache-{{ .Environment.CIRCLE_JOB }}-{{ checksum "setup.py" }}-{{ checksum "tox.ini" }} - - run: - name: checkout ethpm-spec submodule - command: git submodule update --init --recursive - - run: - name: install dependencies - command: pip install --user tox - - run: - name: run tox - command: ~/.local/bin/tox -r - - save_cache: - paths: - - .tox - - ~/.cache/pip - - ~/.local - - ./eggs - - ~/.ethash - - ~/.py-geth - key: cache-{{ .Environment.CIRCLE_JOB }}-{{ checksum "setup.py" }}-{{ checksum "tox.ini" }} - - parity_steps: &parity_steps - working_directory: ~/repo - steps: - - checkout - - restore_cache: - keys: - - cache-{{ .Environment.CIRCLE_JOB }}-{{ checksum "setup.py" }}-{{ checksum "tox.ini" }} - - run: - name: install dependencies - command: pip install --user tox - - run: - name: install parity if needed - command: | - pip install --user requests eth_utils tqdm eth-hash[pycryptodome] - echo "Job specifies Parity version $PARITY_VERSION" - python tests/integration/parity/install_parity.py $PARITY_VERSION - - run: - name: update parity deps from testing repo if needed - command: | - [ "`cat /etc/*release | grep jessie`" != "" ] && echo "On Jessie - installing missing deps..." || echo "Not on Jessie - doing nothing." - [ "`cat /etc/*release | grep jessie`" != "" ] || exit 0 - echo "deb http://ftp.debian.org/debian testing main" > testing.list && sudo mv testing.list /etc/apt/sources.list.d/ - sudo apt update - sudo apt-get -t testing install libstdc++6 - - run: - name: run tox - command: ~/.local/bin/tox -r - - save_cache: - paths: - - .tox - - ~/.cache/pip - - ~/.local - - ./eggs - - ~/.ethash - - ~/.py-geth - - ~/.parity-bin - key: cache-{{ .Environment.CIRCLE_JOB }}-{{ checksum "setup.py" }}-{{ checksum "tox.ini" }} - - geth_steps: &geth_steps - working_directory: ~/repo - steps: - - checkout - - restore_cache: - keys: - - cache-{{ .Environment.CIRCLE_JOB }}-{{ checksum "setup.py" }}-{{ checksum "tox.ini" }} - - run: - name: install dependencies - command: pip install --user tox - - run: - name: build geth if missing - command: | - mkdir -p $HOME/.ethash - pip install --user py-geth>=2.4.0 - export GOROOT=/usr/local/go - echo $GETH_VERSION - export GETH_BINARY="$HOME/.py-geth/geth-$GETH_VERSION/bin/geth" - if [ ! -e "$GETH_BINARY" ]; then - curl -O https://storage.googleapis.com/golang/go1.14.2.linux-amd64.tar.gz - tar xvf go1.14.2.linux-amd64.tar.gz - sudo chown -R root:root ./go - sudo mv go /usr/local - sudo ln -s /usr/local/go/bin/go /usr/local/bin/go - sudo apt-get update; - sudo apt-get install -y build-essential; - python -m geth.install $GETH_VERSION; - fi - sudo ln -s /home/circleci/.py-geth/geth-$GETH_VERSION/bin/geth /usr/local/bin/geth - geth version - geth makedag 0 $HOME/.ethash - - run: - name: run tox - command: ~/.local/bin/tox -r - - save_cache: - paths: - - .tox - - ~/.cache/pip - - ~/.local - - ./eggs - - ~/.ethash - - ~/.py-geth - key: cache-{{ .Environment.CIRCLE_JOB }}-{{ checksum "setup.py" }}-{{ checksum "tox.ini" }} - - ethpm_steps: ðpm_steps - working_directory: ~/repo - steps: - - checkout - - restore_cache: - keys: - - cache-{{ .Environment.CIRCLE_JOB }}-{{ checksum "setup.py" }}-{{ checksum "tox.ini" }} - - run: - name: install ipfs - command: - wget https://dist.ipfs.io/go-ipfs/v0.4.22/go-ipfs_v0.4.22_linux-amd64.tar.gz && - tar xvfz go-ipfs_v0.4.22_linux-amd64.tar.gz && - sudo cp go-ipfs/ipfs /usr/local/bin && - ipfs init - - run: - name: start ipfs node in background - command: ipfs daemon - background: true - - run: - name: checkout ethpm-spec submodule - command: git submodule update --init --recursive - - run: - name: install dependencies - command: pip install --user tox - - run: - name: run tox - command: ~/.local/bin/tox -r - - save_cache: - paths: - - .tox - - ~/.cache/pip - - ~/.local - - ./eggs - - ~/.ethash - - ~/.py-geth - key: cache-{{ .Environment.CIRCLE_JOB }}-{{ checksum "setup.py" }}-{{ checksum "tox.ini" }} - - - jobs: - # - # Python 3.6 - # - lint: - <<: *common - docker: - - image: circleci/python:3.6 - environment: - TOXENV: lint - - docs: - <<: *common - docker: - - image: circleci/python:3.6 - environment: - TOXENV: docs - - py36-core: - <<: *common - docker: - - image: circleci/python:3.6 - environment: - TOXENV: py36-core - - py36-ens: - <<: *common - docker: - - image: circleci/python:3.6 - environment: - TOXENV: py36-ens - - py36-ethpm: - <<: *ethpm_steps - docker: - - image: circleci/python:3.6 - environment: - TOXENV: py36-ethpm - # Please don't use this key for any shenanigans - WEB3_INFURA_PROJECT_ID: 7707850c2fb7465ebe6f150d67182e22 - - py36-integration-goethereum-ipc-1.9.19: - <<: *geth_steps - docker: - - image: circleci/python:3.6 - environment: - TOXENV: py36-integration-goethereum-ipc - GETH_VERSION: v1.9.19 - - py36-integration-goethereum-http-1.9.19: - <<: *geth_steps - docker: - - image: circleci/python:3.6 - environment: - TOXENV: py36-integration-goethereum-http - GETH_VERSION: v1.9.19 - - py36-integration-goethereum-ws-1.9.19: - <<: *geth_steps - docker: - - image: circleci/python:3.6 - environment: - TOXENV: py36-integration-goethereum-ws - GETH_VERSION: v1.9.19 - - py36-integration-parity-ipc: - <<: *parity_steps - docker: - - image: circleci/python:3.6-stretch - environment: - TOXENV: py36-integration-parity-ipc - PARITY_VERSION: v2.3.5 - PARITY_OS: linux - - py36-integration-parity-http: - <<: *parity_steps - docker: - - image: circleci/python:3.6-stretch - environment: - TOXENV: py36-integration-parity-http - PARITY_VERSION: v2.3.5 - PARITY_OS: linux - - py36-integration-parity-ws: - <<: *parity_steps - docker: - - image: circleci/python:3.6-stretch - environment: - TOXENV: py36-integration-parity-ws - PARITY_VERSION: v2.3.5 - PARITY_OS: linux - - py36-integration-ethtester-pyevm: - <<: *common - docker: - - image: circleci/python:3.6 - environment: - TOXENV: py36-integration-ethtester - ETHEREUM_TESTER_CHAIN_BACKEND: eth_tester.backends.PyEVMBackend - py36-wheel-cli: - <<: *common - docker: - - image: circleci/python:3.6 - environment: - TOXENV: py36-wheel-cli - # - # Python 3.7 - # - py37-core: - <<: *common - docker: - - image: circleci/python:3.7 - environment: - TOXENV: py37-core - - py37-ens: - <<: *common - docker: - - image: circleci/python:3.7 - environment: - TOXENV: py37-ens - - py37-ethpm: - <<: *ethpm_steps - docker: - - image: circleci/python:3.7 - environment: - TOXENV: py37-ethpm - # Please don't use this key for any shenanigans - WEB3_INFURA_PROJECT_ID: 7707850c2fb7465ebe6f150d67182e22 - - py37-integration-goethereum-ipc-1.9.19: - <<: *geth_steps - docker: - - image: circleci/python:3.7 - environment: - TOXENV: py37-integration-goethereum-ipc - GETH_VERSION: v1.9.19 - - py37-integration-goethereum-http-1.9.19: - <<: *geth_steps - docker: - - image: circleci/python:3.7 - environment: - TOXENV: py37-integration-goethereum-http - GETH_VERSION: v1.9.19 - - py37-integration-goethereum-ws-1.9.19: - <<: *geth_steps - docker: - - image: circleci/python:3.7 - environment: - TOXENV: py37-integration-goethereum-ws - GETH_VERSION: v1.9.19 - - py37-integration-parity-ipc: - <<: *parity_steps - docker: - - image: circleci/python:3.7-stretch - environment: - TOXENV: py37-integration-parity-ipc - PARITY_VERSION: v2.3.5 - PARITY_OS: linux - - py37-integration-parity-http: - <<: *parity_steps - docker: - - image: circleci/python:3.7-stretch - environment: - TOXENV: py37-integration-parity-http - PARITY_VERSION: v2.3.5 - PARITY_OS: linux - - py37-integration-parity-ws: - <<: *parity_steps - docker: - - image: circleci/python:3.7-stretch - environment: - TOXENV: py37-integration-parity-ws - PARITY_VERSION: v2.3.5 - PARITY_OS: linux - - py37-integration-ethtester-pyevm: - <<: *common - docker: - - image: circleci/python:3.7 - environment: - TOXENV: py37-integration-ethtester - ETHEREUM_TESTER_CHAIN_BACKEND: eth_tester.backends.PyEVMBackend - py37-wheel-cli: - <<: *common - docker: - - image: circleci/python:3.7 - environment: - TOXENV: py37-wheel-cli - # - # Python 3.8 - # - py38-core: - <<: *common - docker: - - image: circleci/python:3.8 - environment: - TOXENV: py38-core - - py38-ens: - <<: *common - docker: - - image: circleci/python:3.8 - environment: - TOXENV: py38-ens - - py38-ethpm: - <<: *ethpm_steps - docker: - - image: circleci/python:3.8 - environment: - TOXENV: py38-ethpm - # Please don't use this key for any shenanigans - WEB3_INFURA_PROJECT_ID: 7707850c2fb7465ebe6f150d67182e22 - - py38-integration-goethereum-ipc-1.9.19: - <<: *geth_steps - docker: - - image: circleci/python:3.8 - environment: - TOXENV: py38-integration-goethereum-ipc - GETH_VERSION: v1.9.19 - - py38-integration-goethereum-http-1.9.19: - <<: *geth_steps - docker: - - image: circleci/python:3.8 - environment: - TOXENV: py38-integration-goethereum-http - GETH_VERSION: v1.9.19 - - py38-integration-goethereum-ws-1.9.19: - <<: *geth_steps - docker: - - image: circleci/python:3.8 - environment: - TOXENV: py38-integration-goethereum-ws - GETH_VERSION: v1.9.19 - - py38-integration-parity-ipc: - <<: *parity_steps - docker: - - image: circleci/python:3.8 - environment: - TOXENV: py38-integration-parity-ipc - PARITY_VERSION: v2.3.5 - PARITY_OS: linux - - py38-integration-parity-http: - <<: *parity_steps - docker: - - image: circleci/python:3.8 - environment: - TOXENV: py38-integration-parity-http - PARITY_VERSION: v2.3.5 - PARITY_OS: linux - - py38-integration-parity-ws: - <<: *parity_steps - docker: - - image: circleci/python:3.8 - environment: - TOXENV: py38-integration-parity-ws - PARITY_VERSION: v2.3.5 - PARITY_OS: linux - - py38-integration-ethtester-pyevm: - <<: *common - docker: - - image: circleci/python:3.8 - environment: - TOXENV: py38-integration-ethtester - ETHEREUM_TESTER_CHAIN_BACKEND: eth_tester.backends.PyEVMBackend - - py38-wheel-cli: - <<: *common - docker: - - image: circleci/python:3.8 - environment: - TOXENV: py38-wheel-cli - - workflows: - version: 2 - test: - jobs: - # These are the longest running tests, start them first - - py36-core - - py37-core - - py38-core - - lint - - docs - - py36-ens - - py36-ethpm - - py36-integration-goethereum-ipc-1.9.19 - - py36-integration-goethereum-http-1.9.19 - - py36-integration-goethereum-ws-1.9.19 - - py36-integration-parity-ipc - - py36-integration-parity-http - - py36-integration-parity-ws - - py36-integration-ethtester-pyevm - - py36-wheel-cli - - py37-ens - - py37-ethpm - - py37-integration-goethereum-ipc-1.9.19 - - py37-integration-goethereum-http-1.9.19 - - py37-integration-goethereum-ws-1.9.19 - - py37-integration-parity-ipc - - py37-integration-parity-http - - py37-integration-parity-ws - - py37-integration-ethtester-pyevm - - py37-wheel-cli - - py38-ens - - py38-ethpm - - py38-integration-goethereum-ipc-1.9.19 - - py38-integration-goethereum-http-1.9.19 - - py38-integration-goethereum-ws-1.9.19 - - py38-integration-parity-ipc - - py38-integration-parity-http - - py38-integration-parity-ws - - py38-integration-ethtester-pyevm - - py38-wheel-cli +version: 2.0 + +# heavily inspired by https://raw.githubusercontent.com/pinax/pinax-wiki/6bd2a99ab6f702e300d708532a6d1d9aa638b9f8/.circleci/config.yml + +common: &common + working_directory: ~/repo + steps: + - checkout + - restore_cache: + keys: + - cache-{{ .Environment.CIRCLE_JOB }}-{{ checksum "setup.py" }}-{{ checksum "tox.ini" }} + - run: + name: checkout ethpm-spec submodule + command: git submodule update --init --recursive + - run: + name: install dependencies + command: pip install --user tox + - run: + name: run tox + command: ~/.local/bin/tox -r + - save_cache: + paths: + - .tox + - ~/.cache/pip + - ~/.local + - ./eggs + - ~/.ethash + - ~/.py-geth + key: cache-{{ .Environment.CIRCLE_JOB }}-{{ checksum "setup.py" }}-{{ checksum "tox.ini" }} + +parity_steps: &parity_steps + working_directory: ~/repo + steps: + - checkout + - restore_cache: + keys: + - cache-{{ .Environment.CIRCLE_JOB }}-{{ checksum "setup.py" }}-{{ checksum "tox.ini" }} + - run: + name: install dependencies + command: pip install --user tox + - run: + name: install parity if needed + command: | + pip install --user requests eth_utils tqdm eth-hash[pycryptodome] + echo "Job specifies Parity version $PARITY_VERSION" + python tests/integration/parity/install_parity.py $PARITY_VERSION + - run: + name: update parity deps from testing repo if needed + command: | + [ "`cat /etc/*release | grep jessie`" != "" ] && echo "On Jessie - installing missing deps..." || echo "Not on Jessie - doing nothing." + [ "`cat /etc/*release | grep jessie`" != "" ] || exit 0 + echo "deb http://ftp.debian.org/debian testing main" > testing.list && sudo mv testing.list /etc/apt/sources.list.d/ + sudo apt update + sudo apt-get -t testing install libstdc++6 + - run: + name: run tox + command: ~/.local/bin/tox -r + - save_cache: + paths: + - .tox + - ~/.cache/pip + - ~/.local + - ./eggs + - ~/.ethash + - ~/.py-geth + - ~/.parity-bin + key: cache-{{ .Environment.CIRCLE_JOB }}-{{ checksum "setup.py" }}-{{ checksum "tox.ini" }} + +geth_steps: &geth_steps + working_directory: ~/repo + steps: + - checkout + - restore_cache: + keys: + - cache-{{ .Environment.CIRCLE_JOB }}-{{ checksum "setup.py" }}-{{ checksum "tox.ini" }} + - run: + name: install dependencies + command: pip install --user tox + - run: + name: build geth if missing + command: | + mkdir -p $HOME/.ethash + pip install --user py-geth>=2.4.0 + export GOROOT=/usr/local/go + echo $GETH_VERSION + export GETH_BINARY="$HOME/.py-geth/geth-$GETH_VERSION/bin/geth" + if [ ! -e "$GETH_BINARY" ]; then + curl -O https://storage.googleapis.com/golang/go1.14.2.linux-amd64.tar.gz + tar xvf go1.14.2.linux-amd64.tar.gz + sudo chown -R root:root ./go + sudo mv go /usr/local + sudo ln -s /usr/local/go/bin/go /usr/local/bin/go + sudo apt-get update; + sudo apt-get install -y build-essential; + python -m geth.install $GETH_VERSION; + fi + sudo ln -s /home/circleci/.py-geth/geth-$GETH_VERSION/bin/geth /usr/local/bin/geth + geth version + geth makedag 0 $HOME/.ethash + - run: + name: run tox + command: ~/.local/bin/tox -r + - save_cache: + paths: + - .tox + - ~/.cache/pip + - ~/.local + - ./eggs + - ~/.ethash + - ~/.py-geth + key: cache-{{ .Environment.CIRCLE_JOB }}-{{ checksum "setup.py" }}-{{ checksum "tox.ini" }} + +ethpm_steps: ðpm_steps + working_directory: ~/repo + steps: + - checkout + - restore_cache: + keys: + - cache-{{ .Environment.CIRCLE_JOB }}-{{ checksum "setup.py" }}-{{ checksum "tox.ini" }} + - run: + name: install ipfs + command: + wget https://dist.ipfs.io/go-ipfs/v0.4.22/go-ipfs_v0.4.22_linux-amd64.tar.gz && + tar xvfz go-ipfs_v0.4.22_linux-amd64.tar.gz && + sudo cp go-ipfs/ipfs /usr/local/bin && + ipfs init + - run: + name: start ipfs node in background + command: ipfs daemon + background: true + - run: + name: checkout ethpm-spec submodule + command: git submodule update --init --recursive + - run: + name: install dependencies + command: pip install --user tox + - run: + name: run tox + command: ~/.local/bin/tox -r + - save_cache: + paths: + - .tox + - ~/.cache/pip + - ~/.local + - ./eggs + - ~/.ethash + - ~/.py-geth + key: cache-{{ .Environment.CIRCLE_JOB }}-{{ checksum "setup.py" }}-{{ checksum "tox.ini" }} + + +jobs: + # + # Python 3.6 + # + lint: + <<: *common + docker: + - image: circleci/python:3.6 + environment: + TOXENV: lint + + docs: + <<: *common + docker: + - image: circleci/python:3.6 + environment: + TOXENV: docs + + py36-core: + <<: *common + docker: + - image: circleci/python:3.6 + environment: + TOXENV: py36-core + + py36-ens: + <<: *common + docker: + - image: circleci/python:3.6 + environment: + TOXENV: py36-ens + + py36-ethpm: + <<: *ethpm_steps + docker: + - image: circleci/python:3.6 + environment: + TOXENV: py36-ethpm + # Please don't use this key for any shenanigans + WEB3_INFURA_PROJECT_ID: 7707850c2fb7465ebe6f150d67182e22 + + py36-integration-goethereum-ipc-1.9.19: + <<: *geth_steps + docker: + - image: circleci/python:3.6 + environment: + TOXENV: py36-integration-goethereum-ipc + GETH_VERSION: v1.9.19 + + py36-integration-goethereum-http-1.9.19: + <<: *geth_steps + docker: + - image: circleci/python:3.6 + environment: + TOXENV: py36-integration-goethereum-http + GETH_VERSION: v1.9.19 + + py36-integration-goethereum-ws-1.9.19: + <<: *geth_steps + docker: + - image: circleci/python:3.6 + environment: + TOXENV: py36-integration-goethereum-ws + GETH_VERSION: v1.9.19 + + py36-integration-parity-ipc: + <<: *parity_steps + docker: + - image: circleci/python:3.6-stretch + environment: + TOXENV: py36-integration-parity-ipc + PARITY_VERSION: v2.3.5 + PARITY_OS: linux + + py36-integration-parity-http: + <<: *parity_steps + docker: + - image: circleci/python:3.6-stretch + environment: + TOXENV: py36-integration-parity-http + PARITY_VERSION: v2.3.5 + PARITY_OS: linux + + py36-integration-parity-ws: + <<: *parity_steps + docker: + - image: circleci/python:3.6-stretch + environment: + TOXENV: py36-integration-parity-ws + PARITY_VERSION: v2.3.5 + PARITY_OS: linux + + py36-integration-ethtester-pyevm: + <<: *common + docker: + - image: circleci/python:3.6 + environment: + TOXENV: py36-integration-ethtester + ETHEREUM_TESTER_CHAIN_BACKEND: eth_tester.backends.PyEVMBackend + py36-wheel-cli: + <<: *common + docker: + - image: circleci/python:3.6 + environment: + TOXENV: py36-wheel-cli + # + # Python 3.7 + # + py37-core: + <<: *common + docker: + - image: circleci/python:3.7 + environment: + TOXENV: py37-core + + py37-ens: + <<: *common + docker: + - image: circleci/python:3.7 + environment: + TOXENV: py37-ens + + py37-ethpm: + <<: *ethpm_steps + docker: + - image: circleci/python:3.7 + environment: + TOXENV: py37-ethpm + # Please don't use this key for any shenanigans + WEB3_INFURA_PROJECT_ID: 7707850c2fb7465ebe6f150d67182e22 + + py37-integration-goethereum-ipc-1.9.19: + <<: *geth_steps + docker: + - image: circleci/python:3.7 + environment: + TOXENV: py37-integration-goethereum-ipc + GETH_VERSION: v1.9.19 + + py37-integration-goethereum-http-1.9.19: + <<: *geth_steps + docker: + - image: circleci/python:3.7 + environment: + TOXENV: py37-integration-goethereum-http + GETH_VERSION: v1.9.19 + + py37-integration-goethereum-ws-1.9.19: + <<: *geth_steps + docker: + - image: circleci/python:3.7 + environment: + TOXENV: py37-integration-goethereum-ws + GETH_VERSION: v1.9.19 + + py37-integration-parity-ipc: + <<: *parity_steps + docker: + - image: circleci/python:3.7-stretch + environment: + TOXENV: py37-integration-parity-ipc + PARITY_VERSION: v2.3.5 + PARITY_OS: linux + + py37-integration-parity-http: + <<: *parity_steps + docker: + - image: circleci/python:3.7-stretch + environment: + TOXENV: py37-integration-parity-http + PARITY_VERSION: v2.3.5 + PARITY_OS: linux + + py37-integration-parity-ws: + <<: *parity_steps + docker: + - image: circleci/python:3.7-stretch + environment: + TOXENV: py37-integration-parity-ws + PARITY_VERSION: v2.3.5 + PARITY_OS: linux + + py37-integration-ethtester-pyevm: + <<: *common + docker: + - image: circleci/python:3.7 + environment: + TOXENV: py37-integration-ethtester + ETHEREUM_TESTER_CHAIN_BACKEND: eth_tester.backends.PyEVMBackend + py37-wheel-cli: + <<: *common + docker: + - image: circleci/python:3.7 + environment: + TOXENV: py37-wheel-cli + # + # Python 3.8 + # + py38-core: + <<: *common + docker: + - image: circleci/python:3.8 + environment: + TOXENV: py38-core + + py38-ens: + <<: *common + docker: + - image: circleci/python:3.8 + environment: + TOXENV: py38-ens + + py38-ethpm: + <<: *ethpm_steps + docker: + - image: circleci/python:3.8 + environment: + TOXENV: py38-ethpm + # Please don't use this key for any shenanigans + WEB3_INFURA_PROJECT_ID: 7707850c2fb7465ebe6f150d67182e22 + + py38-integration-goethereum-ipc-1.9.19: + <<: *geth_steps + docker: + - image: circleci/python:3.8 + environment: + TOXENV: py38-integration-goethereum-ipc + GETH_VERSION: v1.9.19 + + py38-integration-goethereum-http-1.9.19: + <<: *geth_steps + docker: + - image: circleci/python:3.8 + environment: + TOXENV: py38-integration-goethereum-http + GETH_VERSION: v1.9.19 + + py38-integration-goethereum-ws-1.9.19: + <<: *geth_steps + docker: + - image: circleci/python:3.8 + environment: + TOXENV: py38-integration-goethereum-ws + GETH_VERSION: v1.9.19 + + py38-integration-parity-ipc: + <<: *parity_steps + docker: + - image: circleci/python:3.8 + environment: + TOXENV: py38-integration-parity-ipc + PARITY_VERSION: v2.3.5 + PARITY_OS: linux + + py38-integration-parity-http: + <<: *parity_steps + docker: + - image: circleci/python:3.8 + environment: + TOXENV: py38-integration-parity-http + PARITY_VERSION: v2.3.5 + PARITY_OS: linux + + py38-integration-parity-ws: + <<: *parity_steps + docker: + - image: circleci/python:3.8 + environment: + TOXENV: py38-integration-parity-ws + PARITY_VERSION: v2.3.5 + PARITY_OS: linux + + py38-integration-ethtester-pyevm: + <<: *common + docker: + - image: circleci/python:3.8 + environment: + TOXENV: py38-integration-ethtester + ETHEREUM_TESTER_CHAIN_BACKEND: eth_tester.backends.PyEVMBackend + + py38-wheel-cli: + <<: *common + docker: + - image: circleci/python:3.8 + environment: + TOXENV: py38-wheel-cli + +workflows: + version: 2 + test: + jobs: + # These are the longest running tests, start them first + - py36-core + - py37-core + - py38-core + - lint + - docs + - py36-ens + - py36-ethpm + - py36-integration-goethereum-ipc-1.9.19 + - py36-integration-goethereum-http-1.9.19 + - py36-integration-goethereum-ws-1.9.19 + - py36-integration-parity-ipc + - py36-integration-parity-http + - py36-integration-parity-ws + - py36-integration-ethtester-pyevm + - py36-wheel-cli + - py37-ens + - py37-ethpm + - py37-integration-goethereum-ipc-1.9.19 + - py37-integration-goethereum-http-1.9.19 + - py37-integration-goethereum-ws-1.9.19 + - py37-integration-parity-ipc + - py37-integration-parity-http + - py37-integration-parity-ws + - py37-integration-ethtester-pyevm + - py37-wheel-cli + - py38-ens + - py38-ethpm + - py38-integration-goethereum-ipc-1.9.19 + - py38-integration-goethereum-http-1.9.19 + - py38-integration-goethereum-ws-1.9.19 + - py38-integration-parity-ipc + - py38-integration-parity-http + - py38-integration-parity-ws + - py38-integration-ethtester-pyevm + - py38-wheel-cli From 24c1d63d735dcf38f68b5bcb89c9819042ec3a51 Mon Sep 17 00:00:00 2001 From: Keri Date: Fri, 21 Aug 2020 10:28:09 -0600 Subject: [PATCH 13/14] Cleanup --- tests/integration/geth-1.9.7-fixture.zip | Bin 19096 -> 0 bytes tests/integration/go_ethereum/conftest.py | 3 +-- .../module_testing/go_ethereum_admin_module.py | 11 +++++++---- 3 files changed, 8 insertions(+), 6 deletions(-) delete mode 100644 tests/integration/geth-1.9.7-fixture.zip diff --git a/tests/integration/geth-1.9.7-fixture.zip b/tests/integration/geth-1.9.7-fixture.zip deleted file mode 100644 index 3ad96721152a703a6928c33d6ece9f92b3047565..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19096 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 E4|qVJ8vp None: with pytest.warns(DeprecationWarning): stop = web3.geth.admin.stopRPC() - assert stop + assert stop is True + + start = web3.geth.admin.startRPC() + assert start is True def test_admin_start_stop_ws(self, web3: "Web3") -> None: stop = web3.geth.admin.stop_ws() - assert stop + assert stop is True start = web3.geth.admin.start_ws('localhost', 8548) - assert start + assert start is True with pytest.warns(DeprecationWarning): stop = web3.geth.admin.stopWS() - assert stop + assert stop is True # # Deprecated From 103908f87bed23c72bd20d26d5cf25313e38bb3e Mon Sep 17 00:00:00 2001 From: Keri Date: Fri, 21 Aug 2020 11:40:27 -0600 Subject: [PATCH 14/14] xfail start_stop_ws on ipc test --- tests/integration/go_ethereum/test_goethereum_ipc.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/integration/go_ethereum/test_goethereum_ipc.py b/tests/integration/go_ethereum/test_goethereum_ipc.py index 1b65618fce..7f1586a3d2 100644 --- a/tests/integration/go_ethereum/test_goethereum_ipc.py +++ b/tests/integration/go_ethereum/test_goethereum_ipc.py @@ -68,6 +68,10 @@ class TestGoEthereumAdminModuleTest(GoEthereumAdminModuleTest): def test_admin_peers(web3): super().test_admin_peers(web3) + @pytest.mark.xfail(reason="websockets aren't enabled with our IPC flags") + def test_admin_start_stop_ws(web3): + super().test_admin_start_stop_ws(web3) + class TestGoEthereumEthModuleTest(GoEthereumEthModuleTest): pass