diff --git a/protocol/requests/create_account.go b/protocol/requests/create_account.go index d1aa4555c..45a0e8728 100644 --- a/protocol/requests/create_account.go +++ b/protocol/requests/create_account.go @@ -66,7 +66,7 @@ type CreateAccount struct { // If you want to use non-default network, use NetworkID. CurrentNetwork string `json:"currentNetwork"` NetworkID *uint64 `json:"networkId"` - TestOverrideNetworks []params.Network `json:"-"` // This is used for testing purposes only + TestOverrideNetworks []params.Network `json:"networksOverride"` // This is used for testing purposes only TestNetworksEnabled bool `json:"testNetworksEnabled"` diff --git a/tests-functional/clients/status_backend.py b/tests-functional/clients/status_backend.py index 6fb7313cb..71e9e06bb 100644 --- a/tests-functional/clients/status_backend.py +++ b/tests-functional/clients/status_backend.py @@ -1,6 +1,8 @@ import json import logging +import time from datetime import datetime +from json import JSONDecodeError import jsonschema import requests @@ -27,7 +29,7 @@ class RpcClient: f"Key '{key}' not found in the JSON response: {response.content}") def verify_is_valid_json_rpc_response(self, response, _id=None): - assert response.status_code == 200 + assert response.status_code == 200, f"Got response {response.content}, status code {response.status_code}" assert response.content self._check_decode_and_key_errors_in_response(response, "result") @@ -53,7 +55,10 @@ class RpcClient: data["params"] = params logging.info(f"Sending POST request to url {url} with data: {json.dumps(data, sort_keys=True, indent=4)}") response = self.client.post(url, json=data) - + try: + logging.info(f"Got response: {json.dumps(response.json(), sort_keys=True, indent=4)}") + except JSONDecodeError: + logging.info(f"Got response: {response.content}") return response def rpc_valid_request(self, method, params=[], _id=None, url=None): @@ -69,7 +74,7 @@ class RpcClient: class StatusBackend(RpcClient, SignalClient): - def __init__(self, await_signals): + def __init__(self, await_signals=list()): self.api_url = f"{option.rpc_url_status_backend}/statusgo" self.ws_url = f"{option.ws_url_status_backend}" @@ -81,12 +86,15 @@ class StatusBackend(RpcClient, SignalClient): def api_request(self, method, data, url=None): url = url if url else self.api_url url = f"{url}/{method}" + logging.info(f"Sending POST request to url {url} with data: {json.dumps(data, sort_keys=True, indent=4)}") response = requests.post(url, json=data) + logging.info(f"Got response: {response.content}") return response def verify_is_valid_api_response(self, response): - assert response.status_code == 200 + assert response.status_code == 200, f"Got response {response.content}, status code {response.status_code}" assert response.content + logging.info(f"Got response: {response.content}") try: assert not response.json()["error"] except json.JSONDecodeError: @@ -119,6 +127,46 @@ class StatusBackend(RpcClient, SignalClient): } return self.api_valid_request(method, data) + def restore_account_and_login(self, display_name="Mr_Meeseeks", user=user_1): + method = "RestoreAccountAndLogin" + data = { + "rootDataDir": "/", + "displayName": display_name, + "password": user.password, + "mnemonic": user.passphrase, + "customizationColor": "blue", + "testNetworksEnabled": True, + "networkId": 31337, + "networksOverride": [ + { + "ChainID": 31337, + "ChainName": "Anvil", + "DefaultRPCURL": "http://anvil:8545", + "RPCURL": "http://anvil:8545", + "ShortName": "eth", + "NativeCurrencyName": "Ether", + "NativeCurrencySymbol": "ETH", + "NativeCurrencyDecimals": 18, + "IsTest": False, + "Layer": 1, + "Enabled": True + } + ] + } + return self.api_valid_request(method, data) + + def restore_account_and_wait_for_rpc_client_to_start(self, timeout=60): + self.restore_account_and_login() + start_time = time.time() + # ToDo: change this part for waiting for `node.login` signal when websockets are migrated to StatusBackend + while time.time() - start_time <= timeout: + try: + self.rpc_valid_request(method='accounts_getKeypairs') + return + except AssertionError: + time.sleep(3) + raise TimeoutError(f"RPC client was not started after {timeout} seconds") + def start_messenger(self, params=[]): method = "wakuext_startMessenger" response = self.rpc_request(method, params) diff --git a/tests-functional/conftest.py b/tests-functional/conftest.py index b6b7b1c25..9433da149 100644 --- a/tests-functional/conftest.py +++ b/tests-functional/conftest.py @@ -82,6 +82,6 @@ def init_status_backend(): websocket_thread.start() backend_client.init_status_backend() - backend_client.create_account_and_login() + backend_client.restore_account_and_wait_for_rpc_client_to_start() yield backend_client diff --git a/tests-functional/constants.py b/tests-functional/constants.py index 2730d4c38..a164e05aa 100644 --- a/tests-functional/constants.py +++ b/tests-functional/constants.py @@ -6,15 +6,18 @@ class Account: address: str private_key: str password: str + passphrase: str user_1 = Account( address="0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", private_key="0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80", - password="Strong12345" + password="Strong12345", + passphrase="test test test test test test test test test test test junk" ) user_2 = Account( address="0x70997970c51812dc3a010c7d01b50e0d17dc79c8", private_key="0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d", - password="Strong12345" + password="Strong12345", + passphrase="test test test test test test test test test test nest junk" ) diff --git a/tests-functional/pytest.ini b/tests-functional/pytest.ini index 505fab3c8..c2a4e479b 100644 --- a/tests-functional/pytest.ini +++ b/tests-functional/pytest.ini @@ -12,3 +12,5 @@ markers = accounts ethclient init + transaction + create_account diff --git a/tests-functional/schemas/wallet_getEthereumChains b/tests-functional/schemas/wallet_getEthereumChains index b0e3cecc1..422137825 100644 --- a/tests-functional/schemas/wallet_getEthereumChains +++ b/tests-functional/schemas/wallet_getEthereumChains @@ -74,7 +74,7 @@ "type": "object" }, "Test": { - "type": "null" + "type": ["null", "object"] } }, "required": [ diff --git a/tests-functional/tests/test_accounts.py b/tests-functional/tests/test_accounts.py index 085669018..5e43c27aa 100644 --- a/tests-functional/tests/test_accounts.py +++ b/tests-functional/tests/test_accounts.py @@ -2,12 +2,12 @@ import random import pytest -from test_cases import StatusDTestCase +from test_cases import StatusBackendTestCase @pytest.mark.accounts @pytest.mark.rpc -class TestAccounts(StatusDTestCase): +class TestAccounts(StatusBackendTestCase): @pytest.mark.parametrize( "method, params", diff --git a/tests-functional/tests/test_cases.py b/tests-functional/tests/test_cases.py index a6f60ac9f..ef77c85e0 100644 --- a/tests-functional/tests/test_cases.py +++ b/tests-functional/tests/test_cases.py @@ -7,7 +7,7 @@ from collections import namedtuple import pytest from clients.signals import SignalClient -from clients.status_backend import RpcClient +from clients.status_backend import RpcClient, StatusBackend from conftest import option from constants import user_1, user_2 @@ -21,14 +21,17 @@ class StatusDTestCase: ) -class WalletTestCase(StatusDTestCase): +class StatusBackendTestCase: + def setup_class(self): + self.rpc_client = StatusBackend() + self.network_id = 31337 - def setup_method(self): - super().setup_method() + +class WalletTestCase(StatusBackendTestCase): def wallet_create_multi_transaction(self, **kwargs): method = "wallet_createMultiTransaction" - transferTx_data = { + transfer_tx_data = { "data": "", "from": user_1.address, "gas": "0x5BBF", @@ -40,8 +43,8 @@ class WalletTestCase(StatusDTestCase): "value": "0x5af3107a4000", } for key, new_value in kwargs.items(): - if key in transferTx_data: - transferTx_data[key] = new_value + if key in transfer_tx_data: + transfer_tx_data[key] = new_value else: logging.info( f"Warning: The key '{key}' does not exist in the transferTx parameters and will be ignored.") @@ -58,7 +61,7 @@ class WalletTestCase(StatusDTestCase): { "bridgeName": "Transfer", "chainID": 31337, - "transferTx": transferTx_data + "transferTx": transfer_tx_data } ], f"{option.password}", @@ -81,7 +84,6 @@ class WalletTestCase(StatusDTestCase): class TransactionTestCase(WalletTestCase): def setup_method(self): - super().setup_method() self.tx_hash = self.send_valid_multi_transaction() @@ -89,10 +91,6 @@ class EthRpcTestCase(WalletTestCase): @pytest.fixture(autouse=True, scope='class') def tx_data(self): - self.rpc_client = RpcClient( - option.rpc_url_statusd - ) - tx_hash = self.send_valid_multi_transaction() self.wait_until_tx_not_pending(tx_hash) @@ -103,8 +101,8 @@ class EthRpcTestCase(WalletTestCase): except (KeyError, json.JSONDecodeError): raise Exception(receipt.content) - TxData = namedtuple("TxData", ["tx_hash", "block_number", "block_hash"]) - return TxData(tx_hash, block_number, block_hash) + tx_data = namedtuple("TxData", ["tx_hash", "block_number", "block_hash"]) + return tx_data(tx_hash, block_number, block_hash) def get_block_header(self, block_number): method = "ethclient_headerByNumber" @@ -142,9 +140,3 @@ class SignalTestCase(StatusDTestCase): websocket_thread = threading.Thread(target=self.signal_client._connect) websocket_thread.daemon = True websocket_thread.start() - - -class StatusBackendTestCase: - - def setup_method(self): - pass diff --git a/tests-functional/tests/test_init_status_app.py b/tests-functional/tests/test_init_status_app.py index 9afb3424c..f35666926 100644 --- a/tests-functional/tests/test_init_status_app.py +++ b/tests-functional/tests/test_init_status_app.py @@ -1,11 +1,9 @@ import pytest -from test_cases import StatusBackendTestCase - @pytest.mark.create_account @pytest.mark.rpc -class TestInitialiseApp(StatusBackendTestCase): +class TestInitialiseApp: @pytest.mark.init def test_init_app(self, init_status_backend): diff --git a/tests-functional/tests/test_waku_rpc.py b/tests-functional/tests/test_waku_rpc.py index 3ddf91f0c..e3d7ae3c6 100644 --- a/tests-functional/tests/test_waku_rpc.py +++ b/tests-functional/tests/test_waku_rpc.py @@ -6,11 +6,10 @@ from typing import Optional import pytest from conftest import option -from test_cases import StatusDTestCase +from test_cases import StatusBackendTestCase -@pytest.mark.skip("to be reworked via status-backend") -class TestRpc(StatusDTestCase): +class TestRpc(StatusBackendTestCase): @pytest.mark.parametrize( "method, params", @@ -21,12 +20,12 @@ class TestRpc(StatusDTestCase): def test_(self, method, params): _id = str(random.randint(1, 8888)) - response = self.rpc_client.rpc_valid_request(method, params, _id, url=option.rpc_url_2) + response = self.rpc_client.rpc_valid_request(method, params, _id) self.rpc_client.verify_json_schema(response, method) @pytest.mark.skip("to be reworked via status-backend") -class TestRpcMessaging(StatusDTestCase): +class TestRpcMessaging(StatusBackendTestCase): @dataclass class User: rpc_url: str @@ -99,5 +98,5 @@ class TestRpcMessaging(StatusDTestCase): self.rpc_client.verify_is_valid_json_rpc_response(response) response = response.json() - assert response["result"][0]["added"] == True + assert response["result"][0]["added"] is True assert response["result"][0]["id"] == user[1].chat_public_key diff --git a/tests-functional/tests/test_wallet_rpc.py b/tests-functional/tests/test_wallet_rpc.py index 64e20041d..04144b83a 100644 --- a/tests-functional/tests/test_wallet_rpc.py +++ b/tests-functional/tests/test_wallet_rpc.py @@ -5,7 +5,7 @@ import jsonschema import pytest from conftest import option -from test_cases import StatusDTestCase, TransactionTestCase +from test_cases import StatusBackendTestCase, TransactionTestCase @pytest.mark.wallet @@ -76,7 +76,7 @@ class TestTransactionRpc(TransactionTestCase): @pytest.mark.wallet @pytest.mark.rpc -class TestRpc(StatusDTestCase): +class TestRpc(StatusBackendTestCase): @pytest.mark.parametrize( "method, params",