mirror of
https://github.com/XRPLF/rippled.git
synced 2026-04-29 15:37:57 +00:00
* log_report.py is a script to generate debugging reports and combine the logs of the locally run mainchain and sidechain servers. * Log address book before pytest start * Cleanup test utils * Modify log_analyzer so joins all logs into a single file * Organize "all" log as a dictionary * Allow ConfigFile and Section classes to be pickled: This caused a bug on mac platforms. Linux did not appear to use pickle. * Add account history command to py scripts * Add additional logging * Add support to run sidechains under rr: This is an undocumented feature to help debugging. If the environment variable `RIPPLED_SIDECHAIN_RR` is set, it is assumed to point to the rr executable. Sidechain 0 will then be run under rr.
152 lines
6.3 KiB
Python
152 lines
6.3 KiB
Python
import logging
|
|
import pprint
|
|
import pytest
|
|
from multiprocessing import Process, Value
|
|
from typing import Dict
|
|
import sys
|
|
|
|
from app import App
|
|
from common import Asset, eprint, disable_eprint, drops, XRP
|
|
import interactive
|
|
from sidechain import Params
|
|
import sidechain
|
|
import test_utils
|
|
import time
|
|
from transaction import Payment, Trust
|
|
import tst_common
|
|
|
|
|
|
def simple_xrp_test(mc_app: App, sc_app: App, params: Params):
|
|
alice = mc_app.account_from_alias('alice')
|
|
adam = sc_app.account_from_alias('adam')
|
|
mc_door = mc_app.account_from_alias('door')
|
|
sc_door = sc_app.account_from_alias('door')
|
|
|
|
# main to side
|
|
# First txn funds the side chain account
|
|
with test_utils.test_context(mc_app, sc_app):
|
|
to_send_asset = XRP(9999)
|
|
mc_pre_bal = mc_app.get_balance(mc_door, to_send_asset)
|
|
sc_pre_bal = sc_app.get_balance(adam, to_send_asset)
|
|
sidechain.main_to_side_transfer(mc_app, sc_app, alice, adam,
|
|
to_send_asset, params)
|
|
test_utils.wait_for_balance_change(mc_app, mc_door, mc_pre_bal,
|
|
to_send_asset)
|
|
test_utils.wait_for_balance_change(sc_app, adam, sc_pre_bal,
|
|
to_send_asset)
|
|
|
|
for i in range(2):
|
|
# even amounts for main to side
|
|
for value in range(20, 30, 2):
|
|
with test_utils.test_context(mc_app, sc_app):
|
|
to_send_asset = drops(value)
|
|
mc_pre_bal = mc_app.get_balance(mc_door, to_send_asset)
|
|
sc_pre_bal = sc_app.get_balance(adam, to_send_asset)
|
|
sidechain.main_to_side_transfer(mc_app, sc_app, alice, adam,
|
|
to_send_asset, params)
|
|
test_utils.wait_for_balance_change(mc_app, mc_door, mc_pre_bal,
|
|
to_send_asset)
|
|
test_utils.wait_for_balance_change(sc_app, adam, sc_pre_bal,
|
|
to_send_asset)
|
|
|
|
# side to main
|
|
# odd amounts for side to main
|
|
for value in range(19, 29, 2):
|
|
with test_utils.test_context(mc_app, sc_app):
|
|
to_send_asset = drops(value)
|
|
pre_bal = mc_app.get_balance(alice, to_send_asset)
|
|
sidechain.side_to_main_transfer(mc_app, sc_app, adam, alice,
|
|
to_send_asset, params)
|
|
test_utils.wait_for_balance_change(mc_app, alice, pre_bal,
|
|
to_send_asset)
|
|
|
|
|
|
def simple_iou_test(mc_app: App, sc_app: App, params: Params):
|
|
alice = mc_app.account_from_alias('alice')
|
|
adam = sc_app.account_from_alias('adam')
|
|
|
|
mc_asset = Asset(value=0,
|
|
currency='USD',
|
|
issuer=mc_app.account_from_alias('root'))
|
|
sc_asset = Asset(value=0,
|
|
currency='USD',
|
|
issuer=sc_app.account_from_alias('door'))
|
|
mc_app.add_asset_alias(mc_asset, 'mcd') # main chain dollar
|
|
sc_app.add_asset_alias(sc_asset, 'scd') # side chain dollar
|
|
mc_app(Trust(account=alice, limit_amt=mc_asset(1_000_000)))
|
|
|
|
## make sure adam account on the side chain exists and set the trust line
|
|
with test_utils.test_context(mc_app, sc_app):
|
|
sidechain.main_to_side_transfer(mc_app, sc_app, alice, adam, XRP(300),
|
|
params)
|
|
|
|
# create a trust line to alice and pay her USD/root
|
|
mc_app(Trust(account=alice, limit_amt=mc_asset(1_000_000)))
|
|
mc_app.maybe_ledger_accept()
|
|
mc_app(
|
|
Payment(account=mc_app.account_from_alias('root'),
|
|
dst=alice,
|
|
amt=mc_asset(10_000)))
|
|
mc_app.maybe_ledger_accept()
|
|
|
|
# create a trust line for adam
|
|
sc_app(Trust(account=adam, limit_amt=sc_asset(1_000_000)))
|
|
|
|
for i in range(2):
|
|
# even amounts for main to side
|
|
for value in range(10, 20, 2):
|
|
with test_utils.test_context(mc_app, sc_app):
|
|
to_send_asset = mc_asset(value)
|
|
rcv_asset = sc_asset(value)
|
|
pre_bal = sc_app.get_balance(adam, rcv_asset)
|
|
sidechain.main_to_side_transfer(mc_app, sc_app, alice, adam,
|
|
to_send_asset, params)
|
|
test_utils.wait_for_balance_change(sc_app, adam, pre_bal,
|
|
rcv_asset)
|
|
|
|
# side to main
|
|
# odd amounts for side to main
|
|
for value in range(9, 19, 2):
|
|
with test_utils.test_context(mc_app, sc_app):
|
|
to_send_asset = sc_asset(value)
|
|
rcv_asset = mc_asset(value)
|
|
pre_bal = mc_app.get_balance(alice, to_send_asset)
|
|
sidechain.side_to_main_transfer(mc_app, sc_app, adam, alice,
|
|
to_send_asset, params)
|
|
test_utils.wait_for_balance_change(mc_app, alice, pre_bal,
|
|
rcv_asset)
|
|
|
|
|
|
def setup_accounts(mc_app: App, sc_app: App, params: Params):
|
|
# Setup a funded user account on the main chain, and add an unfunded account.
|
|
# Setup address book and add a funded account on the mainchain.
|
|
# Typical female names are addresses on the mainchain.
|
|
# The first account is funded.
|
|
alice = mc_app.create_account('alice')
|
|
beth = mc_app.create_account('beth')
|
|
carol = mc_app.create_account('carol')
|
|
deb = mc_app.create_account('deb')
|
|
ella = mc_app.create_account('ella')
|
|
mc_app(Payment(account=params.genesis_account, dst=alice, amt=XRP(20_000)))
|
|
mc_app.maybe_ledger_accept()
|
|
|
|
# Typical male names are addresses on the sidechain.
|
|
# All accounts are initially unfunded
|
|
adam = sc_app.create_account('adam')
|
|
bob = sc_app.create_account('bob')
|
|
charlie = sc_app.create_account('charlie')
|
|
dan = sc_app.create_account('dan')
|
|
ed = sc_app.create_account('ed')
|
|
|
|
|
|
def run_all(mc_app: App, sc_app: App, params: Params):
|
|
setup_accounts(mc_app, sc_app, params)
|
|
logging.info(f'mainchain:\n{mc_app.key_manager.to_string()}')
|
|
logging.info(f'sidechain:\n{sc_app.key_manager.to_string()}')
|
|
simple_xrp_test(mc_app, sc_app, params)
|
|
simple_iou_test(mc_app, sc_app, params)
|
|
|
|
|
|
def test_simple_xchain(configs_dirs_dict: Dict[int, str]):
|
|
tst_common.test_start(configs_dirs_dict, run_all)
|