|
|
|
import pytest
|
|
|
|
import requests
|
|
|
|
|
|
|
|
from pyhmy import (
|
|
|
|
account
|
|
|
|
)
|
|
|
|
|
|
|
|
from pyhmy.rpc import (
|
|
|
|
exceptions
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
explorer_endpoint = 'http://localhost:9700'
|
|
|
|
endpoint_shard_one = 'http://localhost:9502'
|
|
|
|
local_test_address = 'one155jp2y76nazx8uw5sa94fr0m4s5aj8e5xm6fu3'
|
|
|
|
test_validator_address = local_test_address
|
|
|
|
genesis_block_number = 0
|
|
|
|
test_block_number = 1
|
|
|
|
fake_shard = 'http://example.com'
|
|
|
|
|
|
|
|
def _test_account_rpc(fn, *args, **kwargs):
|
|
|
|
if not callable(fn):
|
|
|
|
pytest.fail(f'Invalid function: {fn}')
|
|
|
|
|
|
|
|
try:
|
|
|
|
response = fn(*args, **kwargs)
|
|
|
|
except Exception as e:
|
|
|
|
if isinstance(e, exceptions.RPCError) and 'does not exist/is not available' in str(e):
|
|
|
|
pytest.skip(f'{str(e)}')
|
|
|
|
pytest.fail(f'Unexpected error: {e.__class__} {e}')
|
|
|
|
return response
|
|
|
|
|
|
|
|
|
|
|
|
def test_get_balance(setup_blockchain):
|
|
|
|
balance = _test_account_rpc(account.get_balance, local_test_address)
|
|
|
|
assert isinstance(balance, int)
|
|
|
|
assert balance > 0
|
|
|
|
|
|
|
|
def test_get_balance_by_block(setup_blockchain):
|
|
|
|
balance = _test_account_rpc(account.get_balance_by_block, local_test_address, genesis_block_number)
|
|
|
|
assert isinstance(balance, int)
|
|
|
|
assert balance > 0
|
|
|
|
|
|
|
|
def test_get_account_nonce(setup_blockchain):
|
|
|
|
true_nonce = _test_account_rpc(account.get_account_nonce, local_test_address, test_block_number, endpoint=endpoint_shard_one)
|
|
|
|
assert isinstance(true_nonce, int)
|
|
|
|
|
|
|
|
def test_get_transaction_history(setup_blockchain):
|
|
|
|
tx_history = _test_account_rpc(account.get_transaction_history, local_test_address, endpoint=explorer_endpoint)
|
|
|
|
assert isinstance(tx_history, list)
|
|
|
|
assert len(tx_history) >= 0
|
|
|
|
|
|
|
|
def test_get_staking_transaction_history(setup_blockchain):
|
|
|
|
staking_tx_history = _test_account_rpc(account.get_staking_transaction_history, test_validator_address, endpoint=explorer_endpoint)
|
|
|
|
assert isinstance(staking_tx_history, list)
|
|
|
|
assert len(staking_tx_history) > 0
|
|
|
|
|
|
|
|
def test_get_balance_on_all_shards(setup_blockchain):
|
|
|
|
balances = _test_account_rpc(account.get_balance_on_all_shards, local_test_address)
|
|
|
|
assert isinstance(balances, list)
|
|
|
|
assert len(balances) == 2
|
|
|
|
|
|
|
|
def test_get_total_balance(setup_blockchain):
|
|
|
|
total_balance = _test_account_rpc(account.get_total_balance, local_test_address)
|
|
|
|
assert isinstance(total_balance, int)
|
|
|
|
assert total_balance > 0
|
|
|
|
|
|
|
|
def test_is_valid_address():
|
|
|
|
assert account.is_valid_address('one1zksj3evekayy90xt4psrz8h6j2v3hla4qwz4ur')
|
|
|
|
assert not account.is_valid_address('one1wje75aedczmj4dwjs0812xcg7vx0dy231cajk0')
|
|
|
|
|
|
|
|
def test_get_transaction_count(setup_blockchain):
|
|
|
|
tx_count = _test_account_rpc(account.get_transaction_count, local_test_address, 'latest', explorer_endpoint)
|
|
|
|
assert isinstance(tx_count, int)
|
|
|
|
assert tx_count > 0
|
|
|
|
|
|
|
|
def test_get_transactions_count(setup_blockchain):
|
|
|
|
tx_count = _test_account_rpc(account.get_transactions_count, local_test_address, 'ALL', explorer_endpoint)
|
|
|
|
|
|
|
|
def test_get_staking_transactions_count(setup_blockchain):
|
|
|
|
tx_count = _test_account_rpc(account.get_staking_transactions_count, local_test_address, 'ALL', explorer_endpoint)
|
|
|
|
assert isinstance(tx_count, int)
|
|
|
|
|
|
|
|
def test_errors():
|
|
|
|
with pytest.raises(exceptions.RPCError):
|
|
|
|
account.get_balance('', fake_shard)
|
|
|
|
with pytest.raises(exceptions.RPCError):
|
|
|
|
account.get_balance_by_block('', 1, fake_shard)
|
|
|
|
with pytest.raises(exceptions.RPCError):
|
|
|
|
account.get_account_nonce('', 1, fake_shard)
|
|
|
|
with pytest.raises(exceptions.RPCError):
|
|
|
|
account.get_transaction_count('', 1, fake_shard)
|
|
|
|
with pytest.raises(exceptions.RPCError):
|
|
|
|
account.get_transactions_count('', 1, fake_shard)
|
|
|
|
with pytest.raises(exceptions.RPCError):
|
|
|
|
account.get_transactions_count('', 'ALL', fake_shard)
|
|
|
|
with pytest.raises(exceptions.RPCError):
|
|
|
|
account.get_transaction_history('', endpoint=fake_shard)
|
|
|
|
with pytest.raises(exceptions.RPCError):
|
|
|
|
account.get_staking_transaction_history('', endpoint=fake_shard)
|
|
|
|
with pytest.raises(exceptions.RPCError):
|
|
|
|
account.get_balance_on_all_shards('', endpoint=fake_shard)
|
|
|
|
with pytest.raises(exceptions.RPCError):
|
|
|
|
account.get_total_balance('', endpoint=fake_shard)
|