From 3c47644edefa41ad3a204e7d6c9ae5691b08af59 Mon Sep 17 00:00:00 2001 From: Tibo-lg Date: Wed, 2 Aug 2023 20:49:21 +0900 Subject: [PATCH] fixup! Refactor ln-dlc channels tests --- .../tests/ln_dlc_channel_execution_tests.rs | 500 ++++++------------ 1 file changed, 149 insertions(+), 351 deletions(-) diff --git a/dlc-manager/tests/ln_dlc_channel_execution_tests.rs b/dlc-manager/tests/ln_dlc_channel_execution_tests.rs index 1067844c..f8841580 100644 --- a/dlc-manager/tests/ln_dlc_channel_execution_tests.rs +++ b/dlc-manager/tests/ln_dlc_channel_execution_tests.rs @@ -188,6 +188,15 @@ impl LnDlcTestParams { } } +#[derive(PartialEq, Eq)] +enum TargetState { + OfferSent, + OfferReceived, + Accepted, + Confirmed, + Finalized, +} + static PAYMENT_COUNTER: AtomicU8 = AtomicU8::new(0); #[derive(Clone)] @@ -1045,19 +1054,8 @@ fn ln_dlc_disconnected_force_close() { /// Force close triggered by the party who sent the subchannel offer. fn ln_dlc_offered_force_close() { let mut test_params = test_init(); - let offer = offer_common( - &test_params.test_params, - &test_params.alice_node, - &test_params.channel_id, - ); - test_params - .bob_node - .sub_channel_manager - .on_sub_channel_message( - &SubChannelMessage::Offer(offer), - &test_params.alice_node.channel_manager.get_our_node_id(), - ) - .unwrap(); + + go_to_established_target_state(&test_params, TargetState::OfferReceived); let commit_tx = get_commit_tx_from_node(&test_params.alice_node, &test_params.funding_txo); force_close_mid_protocol(&mut test_params, false, &commit_tx[0]); @@ -1068,16 +1066,8 @@ fn ln_dlc_offered_force_close() { /// Force close triggered by the party who received the subchannel offer. fn ln_dlc_offered_force_close2() { let mut test_params = test_init(); - let offer = offer_common( - &test_params.test_params, - &test_params.alice_node, - &test_params.channel_id, - ); - test_params - .bob_node - .sub_channel_manager - .on_sub_channel_message(&SubChannelMessage::Offer(offer), &test_params.alice_node_id) - .unwrap(); + + go_to_established_target_state(&test_params, TargetState::OfferReceived); let commit_tx = get_commit_tx_from_node(&test_params.bob_node, &test_params.funding_txo); force_close_mid_protocol(&mut test_params, true, &commit_tx[0]); @@ -1089,21 +1079,9 @@ fn ln_dlc_offered_force_close2() { /// has accepted the offer (the offering party has not yet processed the accept message). fn ln_dlc_accepted_force_close() { let mut test_params = test_init(); - let offer = offer_common( - &test_params.test_params, - &test_params.alice_node, - &test_params.channel_id, - ); - test_params - .bob_node - .sub_channel_manager - .on_sub_channel_message(&SubChannelMessage::Offer(offer), &test_params.alice_node_id) - .unwrap(); - let _ = test_params - .bob_node - .sub_channel_manager - .accept_sub_channel(&test_params.channel_id) - .unwrap(); + + go_to_established_target_state(&test_params, TargetState::Accepted); + let commit_tx = get_commit_tx_from_node(&test_params.alice_node, &test_params.funding_txo); force_close_mid_protocol(&mut test_params, false, &commit_tx[0]); } @@ -1114,21 +1092,9 @@ fn ln_dlc_accepted_force_close() { /// not yet processed the accept message). fn ln_dlc_accepted_force_close2() { let mut test_params = test_init(); - let offer = offer_common( - &test_params.test_params, - &test_params.alice_node, - &test_params.channel_id, - ); - test_params - .bob_node - .sub_channel_manager - .on_sub_channel_message(&SubChannelMessage::Offer(offer), &test_params.alice_node_id) - .unwrap(); - let _ = test_params - .bob_node - .sub_channel_manager - .accept_sub_channel(&test_params.channel_id) - .unwrap(); + + go_to_established_target_state(&test_params, TargetState::Accepted); + let sub_channel = test_params .bob_node .dlc_manager @@ -1150,27 +1116,8 @@ fn ln_dlc_accepted_force_close2() { /// counter party. fn ln_dlc_confirmed_force_close() { let mut test_params = test_init(); - let offer = offer_common( - &test_params.test_params, - &test_params.alice_node, - &test_params.channel_id, - ); - test_params - .bob_node - .sub_channel_manager - .on_sub_channel_message(&SubChannelMessage::Offer(offer), &test_params.alice_node_id) - .unwrap(); - let (_, accept) = test_params - .bob_node - .sub_channel_manager - .accept_sub_channel(&test_params.channel_id) - .unwrap(); - let _ = test_params - .alice_node - .sub_channel_manager - .on_sub_channel_message(&SubChannelMessage::Accept(accept), &test_params.bob_node_id) - .unwrap() - .unwrap(); + + go_to_established_target_state(&test_params, TargetState::Confirmed); let sub_channel = test_params .alice_node @@ -1194,27 +1141,8 @@ fn ln_dlc_confirmed_force_close() { /// message (but before they process the confirm message). fn ln_dlc_confirmed_force_close2() { let mut test_params = test_init(); - let offer = offer_common( - &test_params.test_params, - &test_params.alice_node, - &test_params.channel_id, - ); - test_params - .bob_node - .sub_channel_manager - .on_sub_channel_message(&SubChannelMessage::Offer(offer), &test_params.alice_node_id) - .unwrap(); - let (_, accept) = test_params - .bob_node - .sub_channel_manager - .accept_sub_channel(&test_params.channel_id) - .unwrap(); - let _ = test_params - .alice_node - .sub_channel_manager - .on_sub_channel_message(&SubChannelMessage::Accept(accept), &test_params.bob_node_id) - .unwrap() - .unwrap(); + + go_to_established_target_state(&test_params, TargetState::Confirmed); let sub_channel = test_params .bob_node @@ -1238,41 +1166,9 @@ fn ln_dlc_confirmed_force_close2() { /// message (but before they process the finalize message). fn ln_dlc_finalized_force_close() { let mut test_params = test_init(); - let offer = offer_common( - &test_params.test_params, - &test_params.alice_node, - &test_params.channel_id, - ); - test_params - .bob_node - .sub_channel_manager - .on_sub_channel_message(&SubChannelMessage::Offer(offer), &test_params.alice_node_id) - .unwrap(); - let (_, accept) = test_params - .bob_node - .sub_channel_manager - .accept_sub_channel(&test_params.channel_id) - .unwrap(); - let confirm = test_params - .alice_node - .sub_channel_manager - .on_sub_channel_message(&SubChannelMessage::Accept(accept), &test_params.bob_node_id) - .unwrap() - .unwrap(); - test_params - .bob_node - .sub_channel_manager - .on_sub_channel_message(&confirm, &test_params.alice_node_id) - .unwrap(); + go_to_established_target_state(&test_params, TargetState::Finalized); - let sub_channel = test_params - .alice_node - .dlc_manager - .get_store() - .get_sub_channel(test_params.channel_id) - .unwrap() - .unwrap(); let commit_tx = if let SubChannelState::Confirmed(c) = &sub_channel.state { c.commitment_transactions[0].clone() } else { @@ -1290,33 +1186,8 @@ fn ln_dlc_finalized_force_close() { /// their counter party has processed the finalize message). fn ln_dlc_finalized_force_close2() { let mut test_params = test_init(); - let offer = offer_common( - &test_params.test_params, - &test_params.alice_node, - &test_params.channel_id, - ); - test_params - .bob_node - .sub_channel_manager - .on_sub_channel_message(&SubChannelMessage::Offer(offer), &test_params.alice_node_id) - .unwrap(); - let (_, accept) = test_params - .bob_node - .sub_channel_manager - .accept_sub_channel(&test_params.channel_id) - .unwrap(); - let confirm = test_params - .alice_node - .sub_channel_manager - .on_sub_channel_message(&SubChannelMessage::Accept(accept), &test_params.bob_node_id) - .unwrap() - .unwrap(); - test_params - .bob_node - .sub_channel_manager - .on_sub_channel_message(&confirm, &test_params.alice_node_id) - .unwrap(); + go_to_established_target_state(&test_params, TargetState::Finalized); let commit_tx = get_commit_tx_from_node(&test_params.bob_node, &test_params.funding_txo); @@ -1336,16 +1207,9 @@ fn ln_dlc_close_offered_force_close() { offer_sub_channel(&test_params, false); - mocks::mock_time::set_time(EVENT_MATURITY as u64); + go_to_off_chain_close_state(&test_params, TargetState::OfferSent); - let _ = test_params - .alice_node - .sub_channel_manager - .offer_subchannel_close( - &test_params.channel_id, - test_params.test_params.contract_input.accept_collateral, - ) - .unwrap(); + mocks::mock_time::set_time(EVENT_MATURITY as u64); let commit_tx = get_commit_tx_from_node(&test_params.alice_node, &test_params.funding_txo).remove(0); @@ -1364,16 +1228,9 @@ fn ln_dlc_close_offered_force_close2() { offer_sub_channel(&test_params, false); - mocks::mock_time::set_time(EVENT_MATURITY as u64); + go_to_off_chain_close_state(&test_params, TargetState::OfferSent); - let _ = test_params - .alice_node - .sub_channel_manager - .offer_subchannel_close( - &test_params.channel_id, - test_params.test_params.contract_input.accept_collateral, - ) - .unwrap(); + mocks::mock_time::set_time(EVENT_MATURITY as u64); let commit_tx = get_commit_tx_from_node(&test_params.bob_node, &test_params.funding_txo).remove(0); @@ -1392,24 +1249,9 @@ fn ln_dlc_close_offered_force_close3() { offer_sub_channel(&test_params, false); - mocks::mock_time::set_time(EVENT_MATURITY as u64); + go_to_off_chain_close_state(&test_params, TargetState::OfferReceived); - let (close_offer, _) = test_params - .alice_node - .sub_channel_manager - .offer_subchannel_close( - &test_params.channel_id, - test_params.test_params.contract_input.accept_collateral, - ) - .unwrap(); - test_params - .bob_node - .sub_channel_manager - .on_sub_channel_message( - &SubChannelMessage::CloseOffer(close_offer), - &test_params.alice_node_id, - ) - .unwrap(); + mocks::mock_time::set_time(EVENT_MATURITY as u64); let commit_tx = get_commit_tx_from_node(&test_params.alice_node, &test_params.funding_txo).remove(0); @@ -1427,24 +1269,9 @@ fn ln_dlc_close_offered_force_close4() { offer_sub_channel(&test_params, false); - mocks::mock_time::set_time(EVENT_MATURITY as u64); + go_to_off_chain_close_state(&test_params, TargetState::OfferReceived); - let (close_offer, _) = test_params - .alice_node - .sub_channel_manager - .offer_subchannel_close( - &test_params.channel_id, - test_params.test_params.contract_input.accept_collateral, - ) - .unwrap(); - test_params - .bob_node - .sub_channel_manager - .on_sub_channel_message( - &SubChannelMessage::CloseOffer(close_offer), - &test_params.alice_node_id, - ) - .unwrap(); + mocks::mock_time::set_time(EVENT_MATURITY as u64); let commit_tx = get_commit_tx_from_node(&test_params.bob_node, &test_params.funding_txo).remove(0); @@ -1463,29 +1290,9 @@ fn ln_dlc_close_accepted_force_close() { offer_sub_channel(&test_params, false); - mocks::mock_time::set_time(EVENT_MATURITY as u64); + go_to_off_chain_close_state(&test_params, TargetState::Accepted); - let (close_offer, _) = test_params - .alice_node - .sub_channel_manager - .offer_subchannel_close( - &test_params.channel_id, - test_params.test_params.contract_input.accept_collateral, - ) - .unwrap(); - test_params - .bob_node - .sub_channel_manager - .on_sub_channel_message( - &SubChannelMessage::CloseOffer(close_offer), - &test_params.alice_node.channel_manager.get_our_node_id(), - ) - .unwrap(); - let _ = test_params - .bob_node - .sub_channel_manager - .accept_subchannel_close_offer(&test_params.channel_id) - .unwrap(); + mocks::mock_time::set_time(EVENT_MATURITY as u64); let commit_tx = get_commit_tx_from_node(&test_params.alice_node, &test_params.funding_txo).remove(0); @@ -1504,29 +1311,9 @@ fn ln_dlc_close_accepted_force_close2() { offer_sub_channel(&test_params, false); - mocks::mock_time::set_time(EVENT_MATURITY as u64); + go_to_off_chain_close_state(&test_params, TargetState::Accepted); - let (close_offer, _) = test_params - .alice_node - .sub_channel_manager - .offer_subchannel_close( - &test_params.channel_id, - test_params.test_params.contract_input.accept_collateral, - ) - .unwrap(); - test_params - .bob_node - .sub_channel_manager - .on_sub_channel_message( - &SubChannelMessage::CloseOffer(close_offer), - &test_params.alice_node.channel_manager.get_our_node_id(), - ) - .unwrap(); - let _ = test_params - .bob_node - .sub_channel_manager - .accept_subchannel_close_offer(&test_params.channel_id) - .unwrap(); + mocks::mock_time::set_time(EVENT_MATURITY as u64); let commit_tx = get_commit_tx_from_node(&test_params.bob_node, &test_params.funding_txo).remove(0); @@ -1545,38 +1332,9 @@ fn ln_dlc_close_confirmed_force_close() { offer_sub_channel(&test_params, false); - mocks::mock_time::set_time(EVENT_MATURITY as u64); + go_to_off_chain_close_state(&test_params, TargetState::Confirmed); - let (close_offer, _) = test_params - .alice_node - .sub_channel_manager - .offer_subchannel_close( - &test_params.channel_id, - test_params.test_params.contract_input.accept_collateral, - ) - .unwrap(); - test_params - .bob_node - .sub_channel_manager - .on_sub_channel_message( - &SubChannelMessage::CloseOffer(close_offer), - &test_params.alice_node.channel_manager.get_our_node_id(), - ) - .unwrap(); - let (accept, _) = test_params - .bob_node - .sub_channel_manager - .accept_subchannel_close_offer(&test_params.channel_id) - .unwrap(); - let _ = test_params - .alice_node - .sub_channel_manager - .on_sub_channel_message( - &SubChannelMessage::CloseAccept(accept), - &test_params.bob_node.channel_manager.get_our_node_id(), - ) - .unwrap() - .unwrap(); + mocks::mock_time::set_time(EVENT_MATURITY as u64); let commit_tx = get_commit_tx_from_node(&test_params.alice_node, &test_params.funding_txo).remove(0); @@ -1595,42 +1353,13 @@ fn ln_dlc_close_confirmed_force_close2() { offer_sub_channel(&test_params, false); - mocks::mock_time::set_time(EVENT_MATURITY as u64); - - let (close_offer, _) = test_params - .alice_node - .sub_channel_manager - .offer_subchannel_close( - &test_params.channel_id, - test_params.test_params.contract_input.accept_collateral, - ) - .unwrap(); - test_params - .bob_node - .sub_channel_manager - .on_sub_channel_message( - &SubChannelMessage::CloseOffer(close_offer), - &test_params.alice_node.channel_manager.get_our_node_id(), - ) - .unwrap(); - let (accept, _) = test_params - .bob_node - .sub_channel_manager - .accept_subchannel_close_offer(&test_params.channel_id) - .unwrap(); - let _ = test_params - .alice_node - .sub_channel_manager - .on_sub_channel_message( - &SubChannelMessage::CloseAccept(accept), - &test_params.bob_node.channel_manager.get_our_node_id(), - ) - .unwrap() - .unwrap(); + go_to_off_chain_close_state(&test_params, TargetState::Confirmed); let commit_tx = get_commit_tx_from_node(&test_params.bob_node, &test_params.funding_txo).remove(0); + mocks::mock_time::set_time(EVENT_MATURITY as u64); + force_close_mid_protocol(&mut test_params, true, &commit_tx); } @@ -1648,44 +1377,7 @@ fn ln_dlc_close_finalized_force_close() { mocks::mock_time::set_time(EVENT_MATURITY as u64); - let (close_offer, _) = test_params - .alice_node - .sub_channel_manager - .offer_subchannel_close( - &test_params.channel_id, - test_params.test_params.contract_input.accept_collateral, - ) - .unwrap(); - test_params - .bob_node - .sub_channel_manager - .on_sub_channel_message( - &SubChannelMessage::CloseOffer(close_offer), - &test_params.alice_node.channel_manager.get_our_node_id(), - ) - .unwrap(); - let (accept, _) = test_params - .bob_node - .sub_channel_manager - .accept_subchannel_close_offer(&test_params.channel_id) - .unwrap(); - let confirm = test_params - .alice_node - .sub_channel_manager - .on_sub_channel_message( - &SubChannelMessage::CloseAccept(accept), - &test_params.bob_node.channel_manager.get_our_node_id(), - ) - .unwrap() - .unwrap(); - test_params - .bob_node - .sub_channel_manager - .on_sub_channel_message( - &confirm, - &test_params.alice_node.channel_manager.get_our_node_id(), - ) - .unwrap(); + go_to_off_chain_close_state(&test_params, TargetState::Finalized); let commit_tx = get_commit_tx_from_node(&test_params.alice_node, &test_params.funding_txo).remove(0); @@ -3071,3 +2763,109 @@ fn force_close_mid_protocol( assert!(all_spent); } + +fn go_to_established_target_state(test_params: &LnDlcTestParams, target_state: TargetState) { + let offer = offer_common( + &test_params.test_params, + &test_params.alice_node, + &test_params.channel_id, + ); + + test_params + .bob_node + .sub_channel_manager + .on_sub_channel_message(&SubChannelMessage::Offer(offer), &test_params.alice_node_id) + .unwrap(); + + if target_state == TargetState::OfferReceived { + return; + } + + let (_, accept) = test_params + .bob_node + .sub_channel_manager + .accept_sub_channel(&test_params.channel_id) + .unwrap(); + + if target_state == TargetState::Accepted { + return; + } + + let confirm = test_params + .alice_node + .sub_channel_manager + .on_sub_channel_message(&SubChannelMessage::Accept(accept), &test_params.bob_node_id) + .unwrap() + .unwrap(); + + if target_state == TargetState::Confirmed { + return; + } + + test_params + .bob_node + .sub_channel_manager + .on_sub_channel_message(&confirm, &test_params.alice_node_id) + .unwrap(); +} + +fn go_to_off_chain_close_state(test_params: &LnDlcTestParams, target_state: TargetState) { + let (close_offer, _) = test_params + .alice_node + .sub_channel_manager + .offer_subchannel_close( + &test_params.channel_id, + test_params.test_params.contract_input.accept_collateral, + ) + .unwrap(); + + if target_state == TargetState::OfferSent { + return; + } + + test_params + .bob_node + .sub_channel_manager + .on_sub_channel_message( + &SubChannelMessage::CloseOffer(close_offer), + &test_params.alice_node.channel_manager.get_our_node_id(), + ) + .unwrap(); + + if target_state == TargetState::OfferReceived { + return; + } + + let (accept, _) = test_params + .bob_node + .sub_channel_manager + .accept_subchannel_close_offer(&test_params.channel_id) + .unwrap(); + + if target_state == TargetState::Accepted { + return; + } + + let confirm = test_params + .alice_node + .sub_channel_manager + .on_sub_channel_message( + &SubChannelMessage::CloseAccept(accept), + &test_params.bob_node.channel_manager.get_our_node_id(), + ) + .unwrap() + .unwrap(); + + if target_state == TargetState::Confirmed { + return; + } + + test_params + .bob_node + .sub_channel_manager + .on_sub_channel_message( + &confirm, + &test_params.alice_node.channel_manager.get_our_node_id(), + ) + .unwrap(); +}