From 084fc618b4f847dea88372e3ab29ca8b0ca408c0 Mon Sep 17 00:00:00 2001 From: Daniel Karzel Date: Thu, 1 Apr 2021 17:36:45 +1100 Subject: [PATCH] Test Alice refunds if restarted and Bob refunded --- .github/workflows/ci.yml | 3 +- bors.toml | 3 +- ...lice_refunds_after_restart_bob_refunded.rs | 38 +++++++++++++++++++ 3 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 swap/tests/alice_refunds_after_restart_bob_refunded.rs diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0d448bb1..7d1fcc79 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -115,7 +115,8 @@ jobs: bob_refunds_using_cancel_and_refund_command_timelock_not_expired, bob_refunds_using_cancel_and_refund_command_timelock_not_expired_force, punish, - alice_punishes_after_restart_punish_timelock_expired + alice_punishes_after_restart_punish_timelock_expired, + alice_refunds_after_restart_bob_refunded ] runs-on: ubuntu-latest steps: diff --git a/bors.toml b/bors.toml index 9882cfa8..6d83fcd2 100644 --- a/bors.toml +++ b/bors.toml @@ -14,5 +14,6 @@ status = [ "docker_tests (bob_refunds_using_cancel_and_refund_command_timelock_not_expired_force)", "docker_tests (bob_refunds_using_cancel_and_refund_command_timelock_not_expired)", "docker_tests (punish)", - "docker_tests (alice_punishes_after_restart_punish_timelock_expired)" + "docker_tests (alice_punishes_after_restart_punish_timelock_expired)", + "docker_tests (alice_refunds_after_restart_bob_refunded)" ] diff --git a/swap/tests/alice_refunds_after_restart_bob_refunded.rs b/swap/tests/alice_refunds_after_restart_bob_refunded.rs new file mode 100644 index 00000000..0c341b7d --- /dev/null +++ b/swap/tests/alice_refunds_after_restart_bob_refunded.rs @@ -0,0 +1,38 @@ +pub mod harness; + +use harness::alice_run_until::is_xmr_lock_transaction_sent; +use harness::FastCancelConfig; +use swap::protocol::alice::AliceState; +use swap::protocol::{alice, bob}; + +/// Bob locks Btc and Alice locks Xmr. Alice does not act so Bob refunds. +/// Eventually Alice comes back online and refunds as well. +#[tokio::test] +async fn alice_refunds_after_restart_if_bob_already_refunded() { + harness::setup_test(FastCancelConfig, |mut ctx| async move { + let (bob_swap, _) = ctx.bob_swap().await; + let bob_swap = tokio::spawn(bob::run(bob_swap)); + + let alice_swap = ctx.alice_next_swap().await; + let alice_swap = tokio::spawn(alice::run_until(alice_swap, is_xmr_lock_transaction_sent)); + + let bob_state = bob_swap.await??; + ctx.assert_bob_refunded(bob_state).await; + + let alice_state = alice_swap.await??; + assert!(matches!( + alice_state, + AliceState::XmrLockTransactionSent { .. } + )); + + ctx.restart_alice().await; + let alice_swap = ctx.alice_next_swap().await; + let alice_swap = tokio::spawn(alice::run(alice_swap)); + + let alice_state = alice_swap.await??; + ctx.assert_alice_refunded(alice_state).await; + + Ok(()) + }) + .await; +}