mirror of
https://github.com/LBRYFoundation/LBRY-Vault.git
synced 2025-08-23 17:47:31 +00:00
make regtests more robust
This commit is contained in:
parent
ed086934e5
commit
6f333bd86d
1 changed files with 57 additions and 83 deletions
|
@ -15,20 +15,51 @@ function new_blocks()
|
|||
$bitcoin_cli generatetoaddress $1 $($bitcoin_cli getnewaddress) > /dev/null
|
||||
}
|
||||
|
||||
function wait_until_funded()
|
||||
function wait_for_balance()
|
||||
{
|
||||
while alice_balance=$($alice getbalance | jq '.confirmed' | tr -d '"') && [ $alice_balance != "1" ]; do
|
||||
echo "waiting for alice balance"
|
||||
msg="wait until $1's balance reaches $2"
|
||||
cmd="./run_electrum --regtest --lightning -D /tmp/$1"
|
||||
while balance=$($cmd getbalance | jq '[.confirmed, .unconfirmed] | to_entries | map(select(.value != null).value) | map(tonumber) | add ') && (( $(echo "$balance < $2" | bc -l) )); do
|
||||
sleep 1
|
||||
msg="$msg."
|
||||
printf "$msg\r"
|
||||
done
|
||||
printf "\n"
|
||||
}
|
||||
|
||||
function wait_until_channel_open()
|
||||
{
|
||||
while channel_state=$($alice list_channels | jq '.[] | .state' | tr -d '"') && [ $channel_state != "OPEN" ]; do
|
||||
echo "waiting for channel open"
|
||||
msg="wait until $1 sees channel open"
|
||||
cmd="./run_electrum --regtest --lightning -D /tmp/$1"
|
||||
while channel_state=$($cmd list_channels | jq '.[0] | .state' | tr -d '"') && [ $channel_state != "OPEN" ]; do
|
||||
sleep 1
|
||||
msg="$msg."
|
||||
printf "$msg\r"
|
||||
done
|
||||
printf "\n"
|
||||
}
|
||||
|
||||
function wait_until_channel_closed()
|
||||
{
|
||||
msg="wait until $1 sees channel closed"
|
||||
cmd="./run_electrum --regtest --lightning -D /tmp/$1"
|
||||
while [[ $($cmd list_channels | jq '.[0].state' | tr -d '"') != "CLOSED" ]]; do
|
||||
sleep 1
|
||||
msg="$msg."
|
||||
printf "$msg\r"
|
||||
done
|
||||
printf "\n"
|
||||
}
|
||||
|
||||
function wait_until_spent()
|
||||
{
|
||||
msg="wait until $1:$2 is spent"
|
||||
while [[ $($bitcoin_cli gettxout $1 $2) ]]; do
|
||||
sleep 1
|
||||
msg="$msg."
|
||||
printf "$msg\r"
|
||||
done
|
||||
printf "\n"
|
||||
}
|
||||
|
||||
if [[ $# -eq 0 ]]; then
|
||||
|
@ -61,7 +92,6 @@ if [[ $1 == "start" ]]; then
|
|||
$bob daemon start
|
||||
$alice daemon start
|
||||
$carol daemon start
|
||||
sleep 1 # time to accept commands
|
||||
$bob load_wallet
|
||||
$alice load_wallet
|
||||
$carol load_wallet
|
||||
|
@ -109,32 +139,26 @@ if [[ $1 == "breach" ]]; then
|
|||
bob_node=$($bob nodeid)
|
||||
channel=$($alice open_channel $bob_node 0.15)
|
||||
new_blocks 3
|
||||
wait_until_channel_open
|
||||
wait_until_channel_open alice
|
||||
request=$($bob addinvoice 0.01 "blah")
|
||||
echo "alice pays"
|
||||
$alice lnpay $request
|
||||
sleep 2
|
||||
ctx=$($alice get_channel_ctx $channel | jq '.hex' | tr -d '"')
|
||||
request=$($bob addinvoice 0.01 "blah2")
|
||||
echo "alice pays"
|
||||
echo "alice pays again"
|
||||
$alice lnpay $request
|
||||
sleep 2
|
||||
echo "alice broadcasts old ctx"
|
||||
$bitcoin_cli sendrawtransaction $ctx
|
||||
sleep 10
|
||||
new_blocks 2
|
||||
sleep 10
|
||||
balance=$($bob getbalance | jq '.confirmed | tonumber')
|
||||
echo "balance of bob after breach: $balance"
|
||||
if (( $(echo "$balance < 0.14" | bc -l) )); then
|
||||
exit 1
|
||||
fi
|
||||
wait_until_channel_closed bob
|
||||
new_blocks 1
|
||||
wait_for_balance bob 0.14
|
||||
$bob getbalance
|
||||
fi
|
||||
|
||||
if [[ $1 == "redeem_htlcs" ]]; then
|
||||
$bob stop
|
||||
ELECTRUM_DEBUG_LIGHTNING_SETTLE_DELAY=10 $bob daemon start
|
||||
sleep 1
|
||||
$bob load_wallet
|
||||
sleep 1
|
||||
# alice opens channel
|
||||
|
@ -171,25 +195,22 @@ if [[ $1 == "redeem_htlcs" ]]; then
|
|||
new_blocks 1
|
||||
sleep 3
|
||||
echo "alice balance after CSV" $($alice getbalance)
|
||||
balance_after=$($alice getbalance | jq '[.confirmed, .unconfirmed] | to_entries | map(select(.value != null).value) | map(tonumber) | add ')
|
||||
if (( $(echo "$balance_before - $balance_after > 0.02" | bc -l) )); then
|
||||
echo "htlc not redeemed."
|
||||
exit 1
|
||||
fi
|
||||
# fixme: add local to getbalance
|
||||
wait_for_balance alice $(echo "$balance_before - 0.02" | bc -l)
|
||||
$alice getbalance
|
||||
fi
|
||||
|
||||
|
||||
if [[ $1 == "breach_with_unspent_htlc" ]]; then
|
||||
$bob stop
|
||||
ELECTRUM_DEBUG_LIGHTNING_SETTLE_DELAY=3 $bob daemon start
|
||||
sleep 1
|
||||
$bob load_wallet
|
||||
wait_until_funded
|
||||
wait_for_balance alice 1
|
||||
echo "alice opens channel"
|
||||
bob_node=$($bob nodeid)
|
||||
channel=$($alice open_channel $bob_node 0.15)
|
||||
new_blocks 3
|
||||
wait_until_channel_open
|
||||
wait_until_channel_open alice
|
||||
echo "alice pays bob"
|
||||
invoice=$($bob addinvoice 0.05 "test")
|
||||
$alice lnpay $invoice --timeout=1 || true
|
||||
|
@ -205,48 +226,22 @@ if [[ $1 == "breach_with_unspent_htlc" ]]; then
|
|||
echo "SETTLE_DELAY did not work, $settled != 1"
|
||||
exit 1
|
||||
fi
|
||||
echo $($bob getbalance)
|
||||
echo "alice breaches with old ctx"
|
||||
echo $ctx
|
||||
height1=$($bob getinfo | jq '.blockchain_height')
|
||||
$bitcoin_cli sendrawtransaction $ctx
|
||||
new_blocks 1
|
||||
# wait until breach is confirmed
|
||||
while height2=$($bob getinfo | jq '.blockchain_height') && [ $(($height2 - $height1)) -ne 1 ]; do
|
||||
echo "waiting for block"
|
||||
sleep 1
|
||||
done
|
||||
new_blocks 1
|
||||
# wait until next block is confirmed, so that htlc tx and redeem tx are confirmed too
|
||||
while height3=$($bob getinfo | jq '.blockchain_height') && [ $(($height3 - $height2)) -ne 1 ]; do
|
||||
echo "waiting for block"
|
||||
sleep 1
|
||||
done
|
||||
# wait until wallet is synchronized
|
||||
while b=$($bob list_wallets | jq '.[0]|.synchronized') && [ "$b" != "true" ]; do
|
||||
echo "waiting for wallet sync: $b"
|
||||
sleep 1
|
||||
done
|
||||
echo $($bob getbalance)
|
||||
balance_after=$($bob getbalance | jq '[.confirmed, .unconfirmed] | to_entries | map(select(.value != null).value) | map(tonumber) | add ')
|
||||
if (( $(echo "$balance_after < 0.14" | bc -l) )); then
|
||||
echo "htlc not redeemed."
|
||||
exit 1
|
||||
fi
|
||||
wait_for_balance bob 0.14
|
||||
fi
|
||||
|
||||
|
||||
if [[ $1 == "breach_with_spent_htlc" ]]; then
|
||||
$bob stop
|
||||
ELECTRUM_DEBUG_LIGHTNING_SETTLE_DELAY=3 $bob daemon start
|
||||
sleep 1
|
||||
$bob load_wallet
|
||||
wait_until_funded
|
||||
wait_for_balance alice 1
|
||||
echo "alice opens channel"
|
||||
bob_node=$($bob nodeid)
|
||||
channel=$($alice open_channel $bob_node 0.15)
|
||||
new_blocks 3
|
||||
wait_until_channel_open
|
||||
wait_until_channel_open alice
|
||||
echo "alice pays bob"
|
||||
invoice=$($bob addinvoice 0.05 "test")
|
||||
$alice lnpay $invoice --timeout=1 || true
|
||||
|
@ -277,39 +272,20 @@ if [[ $1 == "breach_with_spent_htlc" ]]; then
|
|||
# note: this will let alice redeem both to_local and the htlc.
|
||||
# (to_local needs to_self_delay blocks; htlc needs whatever we put in invoice)
|
||||
new_blocks 150
|
||||
echo "alice spends to_local and htlc outputs"
|
||||
$alice stop
|
||||
cp /tmp/alice/regtest/wallets/toxic_wallet /tmp/alice/regtest/wallets/default_wallet
|
||||
$alice daemon start
|
||||
sleep 1
|
||||
$alice load_wallet
|
||||
# wait until alice has spent both ctx outputs
|
||||
while [[ $($bitcoin_cli gettxout $ctx_id 0) ]]; do
|
||||
echo "waiting until alice spends ctx outputs"
|
||||
sleep 1
|
||||
done
|
||||
while [[ $($bitcoin_cli gettxout $ctx_id 1) ]]; do
|
||||
echo "waiting until alice spends ctx outputs"
|
||||
sleep 1
|
||||
done
|
||||
echo "alice spends to_local and htlc outputs"
|
||||
wait_until_spent $ctx_id 0
|
||||
wait_until_spent $ctx_id 1
|
||||
new_blocks 1
|
||||
echo "bob comes back"
|
||||
$bob daemon start
|
||||
sleep 1
|
||||
$bob load_wallet
|
||||
while [[ $($bitcoin_cli getmempoolinfo | jq '.size') != "1" ]]; do
|
||||
echo "waiting for bob's transaction"
|
||||
sleep 1
|
||||
done
|
||||
echo "mempool has 1 tx"
|
||||
new_blocks 1
|
||||
sleep 5
|
||||
balance=$($bob getbalance | jq '.confirmed | tonumber')
|
||||
if (( $(echo "$balance < 0.049" | bc -l) )); then
|
||||
echo "htlc not redeemed."
|
||||
exit 1
|
||||
fi
|
||||
echo "bob balance $balance"
|
||||
wait_for_balance bob 0.049
|
||||
$bob getbalance
|
||||
fi
|
||||
|
||||
if [[ $1 == "watchtower" ]]; then
|
||||
|
@ -321,15 +297,13 @@ if [[ $1 == "watchtower" ]]; then
|
|||
$carol setconfig watchtower_port 12345
|
||||
$carol daemon start
|
||||
$alice daemon start
|
||||
sleep 1
|
||||
$alice load_wallet
|
||||
echo "waiting until alice funded"
|
||||
wait_until_funded
|
||||
wait_for_balance alice 1
|
||||
echo "alice opens channel"
|
||||
bob_node=$($bob nodeid)
|
||||
channel=$($alice open_channel $bob_node 0.5)
|
||||
new_blocks 3
|
||||
wait_until_channel_open
|
||||
wait_until_channel_open alice
|
||||
echo "alice pays bob"
|
||||
invoice1=$($bob addinvoice 0.05 "invoice1")
|
||||
$alice lnpay $invoice1
|
||||
|
|
Loading…
Add table
Reference in a new issue