mirror of
https://github.com/comit-network/xmr-btc-swap.git
synced 2024-06-28 15:42:29 +00:00
![Daniel Karzel](/assets/img/avatar_default.png)
In the production code it is a weird indirection that we load the state and then pass in the state and the database. In the tests we have one additional load by doing it inside the command, but loading from the db is not expensive.
53 lines
1.7 KiB
Rust
53 lines
1.7 KiB
Rust
pub mod harness;
|
|
|
|
use harness::bob_run_until::is_btc_locked;
|
|
use harness::SlowCancelConfig;
|
|
use swap::protocol::bob::BobState;
|
|
use swap::protocol::{alice, bob};
|
|
|
|
#[tokio::test]
|
|
async fn given_bob_manually_forces_cancel_when_timelock_not_expired_errors() {
|
|
harness::setup_test(SlowCancelConfig, |mut ctx| async move {
|
|
let (bob_swap, bob_join_handle) = ctx.bob_swap().await;
|
|
let bob_swap_id = bob_swap.id;
|
|
let bob_swap = tokio::spawn(bob::run_until(bob_swap, is_btc_locked));
|
|
|
|
let alice_swap = ctx.alice_next_swap().await;
|
|
let _ = tokio::spawn(alice::run(alice_swap));
|
|
|
|
let bob_state = bob_swap.await??;
|
|
assert!(matches!(bob_state, BobState::BtcLocked { .. }));
|
|
|
|
let (bob_swap, bob_join_handle) = ctx
|
|
.stop_and_resume_bob_from_db(bob_join_handle, bob_swap_id)
|
|
.await;
|
|
assert!(matches!(bob_swap.state, BobState::BtcLocked { .. }));
|
|
|
|
// Bob forces a cancel that will fail
|
|
let is_error = bob::cancel(bob_swap.id, bob_swap.bitcoin_wallet, bob_swap.db, true)
|
|
.await
|
|
.is_err();
|
|
|
|
assert!(is_error);
|
|
|
|
let (bob_swap, bob_join_handle) = ctx
|
|
.stop_and_resume_bob_from_db(bob_join_handle, bob_swap_id)
|
|
.await;
|
|
assert!(matches!(bob_swap.state, BobState::BtcLocked { .. }));
|
|
|
|
// Bob forces a refund that will fail
|
|
let is_error = bob::refund(bob_swap.id, bob_swap.bitcoin_wallet, bob_swap.db, true)
|
|
.await
|
|
.is_err();
|
|
|
|
assert!(is_error);
|
|
let (bob_swap, _) = ctx
|
|
.stop_and_resume_bob_from_db(bob_join_handle, bob_swap_id)
|
|
.await;
|
|
assert!(matches!(bob_swap.state, BobState::BtcLocked { .. }));
|
|
|
|
Ok(())
|
|
})
|
|
.await;
|
|
}
|