Skip to content

Commit 0a95954

Browse files
author
Antoine Riard
committed
WIP Add package template unit tests
1 parent 5859ce0 commit 0a95954

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

0 commit comments

Comments
 (0)