|
|
|
@ -7,6 +7,7 @@ use swap::{alice, alice::swap::AliceState, bob, bob::swap::BobState, storage::Da
|
|
|
|
|
use tempfile::tempdir;
|
|
|
|
|
use testcontainers::clients::Cli;
|
|
|
|
|
use testutils::init_tracing;
|
|
|
|
|
use tokio::select;
|
|
|
|
|
use uuid::Uuid;
|
|
|
|
|
use xmr_btc::{bitcoin, config::Config};
|
|
|
|
|
|
|
|
|
@ -43,8 +44,8 @@ async fn given_alice_restarts_after_xmr_is_locked_abort_swap() {
|
|
|
|
|
|
|
|
|
|
let (
|
|
|
|
|
alice_state,
|
|
|
|
|
mut alice_event_loop,
|
|
|
|
|
alice_event_loop_handle,
|
|
|
|
|
mut alice_event_loop_1,
|
|
|
|
|
alice_event_loop_handle_1,
|
|
|
|
|
alice_btc_wallet,
|
|
|
|
|
alice_xmr_wallet,
|
|
|
|
|
_,
|
|
|
|
@ -81,8 +82,6 @@ async fn given_alice_restarts_after_xmr_is_locked_abort_swap() {
|
|
|
|
|
Uuid::new_v4(),
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
tokio::spawn(async move { bob_event_loop.run().await });
|
|
|
|
|
|
|
|
|
|
let alice_swap_id = Uuid::new_v4();
|
|
|
|
|
let alice_db_datadir = tempdir().unwrap();
|
|
|
|
|
let alice_db = Database::open(alice_db_datadir.path()).unwrap();
|
|
|
|
@ -90,7 +89,7 @@ async fn given_alice_restarts_after_xmr_is_locked_abort_swap() {
|
|
|
|
|
let alice_xmr_locked_fut = alice::swap::run_until(
|
|
|
|
|
alice_state,
|
|
|
|
|
alice::swap::is_xmr_locked,
|
|
|
|
|
alice_event_loop_handle,
|
|
|
|
|
alice_event_loop_handle_1,
|
|
|
|
|
alice_btc_wallet.clone(),
|
|
|
|
|
alice_xmr_wallet.clone(),
|
|
|
|
|
Config::regtest(),
|
|
|
|
@ -98,10 +97,14 @@ async fn given_alice_restarts_after_xmr_is_locked_abort_swap() {
|
|
|
|
|
alice_db,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
tokio::spawn(async move { alice_event_loop.run().await });
|
|
|
|
|
tokio::spawn(async move { bob_event_loop.run().await });
|
|
|
|
|
|
|
|
|
|
// Wait until alice has locked xmr and bob has locked btc
|
|
|
|
|
let (bob_state, alice_state) = try_join(bob_fut, alice_xmr_locked_fut).await.unwrap();
|
|
|
|
|
// We are selecting with alice_event_loop_1 so that we stop polling on it once
|
|
|
|
|
// the try_join is finished.
|
|
|
|
|
let (bob_state, alice_restart_state) = select! {
|
|
|
|
|
res = try_join(bob_fut, alice_xmr_locked_fut) => res.unwrap(),
|
|
|
|
|
_ = alice_event_loop_1.run() => panic!("The event loop should never finish")
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
let bob_state4 = if let BobState::BtcRefunded(state4) = bob_state {
|
|
|
|
|
state4
|
|
|
|
@ -110,12 +113,12 @@ async fn given_alice_restarts_after_xmr_is_locked_abort_swap() {
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
let alice_db = Database::open(alice_db_datadir.path()).unwrap();
|
|
|
|
|
let (mut alice_event_loop, alice_event_loop_handle) =
|
|
|
|
|
let (mut alice_event_loop_2, alice_event_loop_handle_2) =
|
|
|
|
|
testutils::init_alice_event_loop(alice_multiaddr);
|
|
|
|
|
|
|
|
|
|
let alice_state = alice::swap::swap(
|
|
|
|
|
alice_state,
|
|
|
|
|
alice_event_loop_handle,
|
|
|
|
|
let alice_final_state = alice::swap::swap(
|
|
|
|
|
alice_restart_state,
|
|
|
|
|
alice_event_loop_handle_2,
|
|
|
|
|
alice_btc_wallet.clone(),
|
|
|
|
|
alice_xmr_wallet.clone(),
|
|
|
|
|
Config::regtest(),
|
|
|
|
@ -124,15 +127,13 @@ async fn given_alice_restarts_after_xmr_is_locked_abort_swap() {
|
|
|
|
|
)
|
|
|
|
|
.await
|
|
|
|
|
.unwrap();
|
|
|
|
|
tokio::spawn(async move { alice_event_loop.run().await });
|
|
|
|
|
tokio::spawn(async move { alice_event_loop_2.run().await });
|
|
|
|
|
|
|
|
|
|
assert!(matches!(alice_state, AliceState::XmrRefunded));
|
|
|
|
|
assert!(matches!(alice_final_state, AliceState::XmrRefunded));
|
|
|
|
|
|
|
|
|
|
let btc_alice_final = alice_btc_wallet.as_ref().balance().await.unwrap();
|
|
|
|
|
let btc_bob_final = bob_btc_wallet.as_ref().balance().await.unwrap();
|
|
|
|
|
|
|
|
|
|
// lock_tx_bitcoin_fee is determined by the wallet, it is not necessarily equal
|
|
|
|
|
// to TX_FEE
|
|
|
|
|
let lock_tx_bitcoin_fee = bob_btc_wallet
|
|
|
|
|
.transaction_fee(bob_state4.tx_lock_id())
|
|
|
|
|
.await
|
|
|
|
|