|
|
|
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 )
|