status-go/integration-tests/tests/test_cases.py

96 lines
3.1 KiB
Python

import json
import jsonschema
import requests
from conftest import option, user_1, user_2
class RpcTestCase:
def setup_method(self):
self.network_id = 31337
def verify_is_valid_json_rpc_response(self, response, _id=None):
assert response.status_code == 200
assert response.content
try:
response.json()["result"]
except json.JSONDecodeError:
raise AssertionError(f"invalid JSON in {response.content}")
except KeyError:
raise AssertionError(f"no 'result' in {response.json()}")
if _id:
try:
if _id != response.json()["id"]:
raise AssertionError(
f"got id: {response.json()['id']} instead of expected id: {_id}"
)
except KeyError:
raise AssertionError(f"no id in response {response.json()}")
return response
def rpc_request(self, method, params=[], _id=None, client=None, url=None):
client = client if client else requests.Session()
url = url if url else option.rpc_url
data = {"jsonrpc": "2.0", "method": method}
if params:
data["params"] = params
data["id"] = _id if _id else 13
response = client.post(url, json=data)
return response
def verify_json_schema(self, response, method):
with open(f"{option.base_dir}/schemas/{method}", "r") as schema:
jsonschema.validate(instance=response.json(), schema=json.load(schema))
class TransactionTestCase(RpcTestCase):
def wallet_create_multi_transaction(self):
method = "wallet_createMultiTransaction"
params = [
{
"fromAddress": user_1.address,
"fromAmount": "0x5af3107a4000",
"fromAsset": "ETH",
"multiTxType": "MultiTransactionSend",
"toAddress": user_2.address,
"toAsset": "ETH",
},
[
{
"bridgeName": "Transfer",
"chainID": 31337,
"transferTx": {
"data": "",
"from": user_1.address,
"gas": "0x5BBF",
"input": "",
"maxFeePerGas": "0xbcc0f04fd",
"maxPriorityFeePerGas": "0x3b9aca00",
"to": user_2.address,
"type": "0x02",
"value": "0x5af3107a4000",
},
}
],
f"{option.password}",
]
response = self.rpc_request(method, params, 13)
self.verify_is_valid_json_rpc_response(response)
return response
def setup_method(self):
super().setup_method()
response = self.wallet_create_multi_transaction()
try:
self.tx_hash = response.json()["result"]["hashes"][str(self.network_id)][0]
except (KeyError, json.JSONDecodeError):
raise Exception(response.content)