Skip to content

Commit 0f0c0cf

Browse files
author
Antoine Riard
committed
WIP Add package template unit tests
1 parent 5681e6a commit 0f0c0cf

File tree

1 file changed

+126
-0
lines changed

1 file changed

+126
-0
lines changed

lightning/src/chain/onchain_utils.rs

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -807,3 +807,129 @@ pub(crate) fn get_height_timer(current_height: u32, timelock_expiration: u32) ->
807807
}
808808
current_height + 15
809809
}
810+
811+
#[cfg(test)]
812+
mod tests {
813+
use chain::onchain_utils::{CounterpartyHTLCOutput, PackageTemplate, PackageMalleability, PackageSolvingData, RevokedOutput, WEIGHT_REVOKED_OFFERED_HTLC};
814+
use chain::Txid;
815+
use ln::chan_utils::HTLCOutputInCommitment;
816+
use ln::channelmanager::PaymentHash;
817+
818+
use bitcoin::hashes::hex::FromHex;
819+
820+
use bitcoin::secp256k1::key::{PublicKey,SecretKey};
821+
use bitcoin::secp256k1::Secp256k1;
822+
823+
macro_rules! dumb_revk_output {
824+
($secp_ctx: expr) => {
825+
{
826+
let dumb_scalar = SecretKey::from_slice(&hex::decode("0101010101010101010101010101010101010101010101010101010101010101").unwrap()[..]).unwrap();
827+
let dumb_point = PublicKey::from_secret_key(&$secp_ctx, &dumb_scalar);
828+
PackageSolvingData::RevokedOutput(RevokedOutput::build(dumb_point, dumb_scalar, dumb_point, dumb_point, WEIGHT_REVOKED_OFFERED_HTLC, 0, None, 0))
829+
}
830+
}
831+
}
832+
833+
macro_rules! dumb_counterparty_output {
834+
($secp_ctx: expr) => {
835+
{
836+
let dumb_scalar = SecretKey::from_slice(&hex::decode("0101010101010101010101010101010101010101010101010101010101010101").unwrap()[..]).unwrap();
837+
let dumb_point = PublicKey::from_secret_key(&$secp_ctx, &dumb_scalar);
838+
let hash = PaymentHash([1; 32]);
839+
let htlc = HTLCOutputInCommitment { offered: true, amount_msat: 0, cltv_expiry: 0, payment_hash: hash, transaction_output_index: None };
840+
PackageSolvingData::CounterpartyHTLCOutput(CounterpartyHTLCOutput::build(dumb_point, dumb_point, dumb_point, None, htlc))
841+
}
842+
}
843+
}
844+
845+
#[test]
846+
#[should_panic]
847+
fn test_package_differing_heights() {
848+
let txid = Txid::from_hex("c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e").unwrap();
849+
let secp_ctx = Secp256k1::new();
850+
let revk_outp = dumb_revk_output!(secp_ctx);
851+
852+
let mut package_one_hundred = PackageTemplate::build_package(txid, 0, revk_outp.clone(), PackageMalleability::Malleable, 1000, true, 0, None, 100);
853+
let package_two_hundred = PackageTemplate::build_package(txid, 1, revk_outp.clone(), PackageMalleability::Malleable, 1000, true, 0, None, 200);
854+
package_one_hundred.merge_package(package_two_hundred);
855+
}
856+
857+
#[test]
858+
#[should_panic]
859+
fn test_package_untractable_merge_to() {
860+
let txid = Txid::from_hex("c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e").unwrap();
861+
let secp_ctx = Secp256k1::new();
862+
let revk_outp = dumb_revk_output!(secp_ctx);
863+
864+
let mut untractable_package = PackageTemplate::build_package(txid, 0, revk_outp.clone(), PackageMalleability::Untractable, 1000, true, 0, None, 100);
865+
let malleable_package = PackageTemplate::build_package(txid, 1, revk_outp.clone(), PackageMalleability::Malleable, 1000, true, 0, None, 100);
866+
untractable_package.merge_package(malleable_package);
867+
}
868+
869+
#[test]
870+
#[should_panic]
871+
fn test_package_untractable_merge_from() {
872+
let txid = Txid::from_hex("c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e").unwrap();
873+
let secp_ctx = Secp256k1::new();
874+
let revk_outp = dumb_revk_output!(secp_ctx);
875+
876+
let mut malleable_package = PackageTemplate::build_package(txid, 0, revk_outp.clone(), PackageMalleability::Malleable, 1000, true, 0, None, 100);
877+
let untractable_package = PackageTemplate::build_package(txid, 1, revk_outp.clone(), PackageMalleability::Untractable, 1000, true, 0, None, 100);
878+
malleable_package.merge_package(untractable_package);
879+
}
880+
881+
#[test]
882+
#[should_panic]
883+
fn test_package_noaggregation_to() {
884+
let txid = Txid::from_hex("c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e").unwrap();
885+
let secp_ctx = Secp256k1::new();
886+
let revk_outp = dumb_revk_output!(secp_ctx);
887+
888+
let mut noaggregation_package = PackageTemplate::build_package(txid, 0, revk_outp.clone(), PackageMalleability::Malleable, 1000, false, 0, None, 100);
889+
let aggregation_package = PackageTemplate::build_package(txid, 1, revk_outp.clone(), PackageMalleability::Malleable, 1000, true, 0, None, 100);
890+
noaggregation_package.merge_package(aggregation_package);
891+
}
892+
893+
#[test]
894+
#[should_panic]
895+
fn test_package_noaggregation_from() {
896+
let txid = Txid::from_hex("c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e").unwrap();
897+
let secp_ctx = Secp256k1::new();
898+
let revk_outp = dumb_revk_output!(secp_ctx);
899+
900+
let mut aggregation_package = PackageTemplate::build_package(txid, 0, revk_outp.clone(), PackageMalleability::Malleable, 1000, true, 0, None, 100);
901+
let noaggregation_package = PackageTemplate::build_package(txid, 1, revk_outp.clone(), PackageMalleability::Malleable, 1000, false, 0, None, 100);
902+
aggregation_package.merge_package(noaggregation_package);
903+
}
904+
905+
#[test]
906+
#[should_panic]
907+
fn test_package_empty() {
908+
let txid = Txid::from_hex("c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e").unwrap();
909+
let secp_ctx = Secp256k1::new();
910+
let revk_outp = dumb_revk_output!(secp_ctx);
911+
912+
let mut empty_package = PackageTemplate::build_package(txid, 0, revk_outp.clone(), PackageMalleability::Malleable, 1000, true, 0, None, 100);
913+
empty_package.inputs = vec![];
914+
let package = PackageTemplate::build_package(txid, 1, revk_outp.clone(), PackageMalleability::Malleable, 1000, true, 0, None, 100);
915+
empty_package.merge_package(package);
916+
}
917+
918+
#[test]
919+
#[should_panic]
920+
fn test_package_differing_categories() {
921+
let txid = Txid::from_hex("c2d4449afa8d26140898dd54d3390b057ba2a5afcf03ba29d7dc0d8b9ffe966e").unwrap();
922+
let secp_ctx = Secp256k1::new();
923+
let revk_outp = dumb_revk_output!(secp_ctx);
924+
let counterparty_outp = dumb_counterparty_output!(secp_ctx);
925+
926+
let mut revoked_package = PackageTemplate::build_package(txid, 0, revk_outp, PackageMalleability::Malleable, 1000, true, 0, None, 100);
927+
let counterparty_package = PackageTemplate::build_package(txid, 1, counterparty_outp, PackageMalleability::Malleable, 1000, true, 0, None, 100);
928+
revoked_package.merge_package(counterparty_package);
929+
}
930+
931+
//TODO: split_package
932+
//TODO: package_amounts
933+
//TODO: package_weights
934+
//TODO: finalize_package
935+
}

0 commit comments

Comments
 (0)