From 623eec406893a73201c8f2ea594ce80bca1f9325 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Wed, 4 May 2016 16:14:22 +0930 Subject: [PATCH] daemon/test: test unilateral close. We use dev-disconnect to convince one node the other has disconnected (but not vice versa), to get deterministic behaviour. We do this with one HTLC outstanding, to test the HTLC timeout path. Signed-off-by: Rusty Russell --- Makefile | 2 +- daemon/test/test.sh | 49 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 7257f3014..6f199774a 100644 --- a/Makefile +++ b/Makefile @@ -187,7 +187,7 @@ $(HELPER_OBJS) $(BITCOIN_OBJS) $(TEST_PROGRAMS:=.o): $(BITCOIN_HEADERS) $(CORE_H # These don't work in parallel, so we open-code them daemon-tests: daemon-all daemon/test/scripts/shutdown.sh 2>/dev/null || true - set -e; for arg in "" "--timeout-anchor"; do daemon/test/test.sh $$arg; done + set -e; for arg in "--dump-onchain" "" "--timeout-anchor"; do daemon/test/test.sh $$arg; done test-onion: test/test_onion test/onion_key set -e; TMPF=/tmp/onion.$$$$; test/test_onion --generate $$(test/onion_key --pub `seq 20`) > $$TMPF; for k in `seq 20`; do test/test_onion --decode $$(test/onion_key --priv $$k) < $$TMPF > $$TMPF.unwrap; mv $$TMPF.unwrap $$TMPF; done; rm -f $$TMPF diff --git a/daemon/test/test.sh b/daemon/test/test.sh index d24f8ba05..e821aa5b9 100755 --- a/daemon/test/test.sh +++ b/daemon/test/test.sh @@ -49,6 +49,9 @@ while [ $# != 0 ]; do x"--timeout-anchor") TIMEOUT_ANCHOR=1 ;; + x"--dump-onchain") + DUMP_ONCHAIN=1 + ;; x"--verbose") VERBOSE=1 ;; @@ -363,6 +366,52 @@ check_status_single lcli2 $B_AMOUNT $B_FEE "" $A_AMOUNT $A_FEE '{ "msatoshis" : lcli2 commit $ID1 check_status $A_AMOUNT $A_FEE '{ "msatoshis" : '$HTLC_AMOUNT', "expiry" : { "second" : '$EXPIRY' }, "rhash" : "'$RHASH'" } ' $B_AMOUNT $B_FEE "" +if [ -n "$DUMP_ONCHAIN" ]; then + # make node1 disconnect with node2. + lcli1 dev-disconnect $ID2 + check_peerconnected lcli1 false + + # lcli1 should have sent out commitment tx + check_tx_spend + + # Now lcli2 sees it. + sleep 1 + check_peerstate lcli1 STATE_CLOSE_ONCHAIN_OUR_UNILATERAL + check_peerstate lcli2 STATE_CLOSE_ONCHAIN_THEIR_UNILATERAL + + # both still know about htlc + check_status $A_AMOUNT $A_FEE '{ "msatoshis" : '$HTLC_AMOUNT', "expiry" : { "second" : '$EXPIRY' }, "rhash" : "'$RHASH'" } ' $B_AMOUNT $B_FEE "" + + # Move bitcoind's time so CSV timeout has expired. + $CLI setmocktime $((`date +%s` + 600)) + $CLI generate 6 + + # Now, lcli1 should spend its own output. + sleep 2 + check_tx_spend + check_peerstate lcli1 STATE_CLOSE_ONCHAIN_OUR_UNILATERAL + + # Move bitcoind's time so HTLC has expired. + $CLI setmocktime $(($EXPIRY + 1)) + $CLI generate 6 + + # Wait for nodes to notice + sleep 2 + + # lcli1 should have gotten HTLC back. + check_tx_spend + + # Now, after 100 blocks, should all be concluded. + $CLI generate 100 + sleep 5 + + # Both consider it all done now. + check_no_peers lcli1 + + lcli1 stop + all_ok +fi + lcli2 fulfillhtlc $ID1 $SECRET lcli2 commit $ID1 lcli1 commit $ID2