Skip to content

Commit 4f76fd3

Browse files
author
Antoine Riard
committed
WIP Add package template unit tests
1 parent 599c777 commit 4f76fd3

File tree

1 file changed

+126
-0
lines changed

1 file changed

+126
-0
lines changed

lightning/src/chain/package.rs

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

0 commit comments

Comments
 (0)