Skip to content

Commit d5c46a3

Browse files
committed
fixup! Add end-to-end test for HRN resolution (include hook for switching test offers)
We use a hook to switch the test offer for the offer returned after dnsssec resolution.
1 parent 236e976 commit d5c46a3

File tree

3 files changed

+47
-3
lines changed

3 files changed

+47
-3
lines changed

src/lib.rs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1604,3 +1604,33 @@ pub(crate) fn total_anchor_channels_reserve_sats(
16041604
* anchor_channels_config.per_channel_reserve_sats
16051605
})
16061606
}
1607+
1608+
/// Testing utils for DNSSEC proof resolution of offers associated with the given HRN.
1609+
pub mod dnssec_testing_utils {
1610+
use lightning::offers::offer::Offer;
1611+
use lightning::onion_message::dns_resolution::HumanReadableName;
1612+
1613+
use std::collections::HashMap;
1614+
use std::sync::{LazyLock, Mutex};
1615+
1616+
static OFFER_OVERRIDE_MAP: LazyLock<Mutex<HashMap<HumanReadableName, Offer>>> =
1617+
LazyLock::new(|| Mutex::new(HashMap::new()));
1618+
1619+
/// Sets a testing override for DNSSEC proof resolution of offers associated with the given HRN
1620+
pub fn set_testing_dnssec_proof_offer_resolution_override(hrn: &str, offer: Offer) {
1621+
OFFER_OVERRIDE_MAP
1622+
.lock()
1623+
.unwrap()
1624+
.insert(HumanReadableName::from_encoded(hrn).unwrap(), offer);
1625+
}
1626+
1627+
/// Retrieves a testing override for DNSSEC proof resolution of offers associated with the given HRN.
1628+
pub fn get_testing_offer_override(hrn: Option<HumanReadableName>) -> Option<Offer> {
1629+
OFFER_OVERRIDE_MAP.lock().unwrap().get(&hrn?).cloned()
1630+
}
1631+
1632+
/// Clears all testing overrides for DNSSEC proof resolution of offers.
1633+
pub fn clear_testing_overrides() {
1634+
OFFER_OVERRIDE_MAP.lock().unwrap().clear();
1635+
}
1636+
}

src/payment/bolt12.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,18 @@ impl Bolt12Payment {
194194
return Err(Error::NotRunning);
195195
}
196196

197+
let owned_override_storage: Option<Offer> =
198+
crate::dnssec_testing_utils::get_testing_offer_override(hrn.clone());
199+
200+
let offer: &Offer = match &owned_override_storage {
201+
#[cfg(test)]
202+
Some(overridden_offer) => {
203+
log_info!(self.logger, "Using test-specific Offer override.");
204+
overridden_offer
205+
},
206+
_ => offer,
207+
};
208+
197209
let offer = maybe_deref(offer);
198210

199211
let mut random_bytes = [0u8; 32];

tests/integration_tests_rust.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ use ldk_node::payment::{
3030
ConfirmationStatus, PaymentDetails, PaymentDirection, PaymentKind, PaymentStatus,
3131
UnifiedPaymentResult,
3232
};
33-
use ldk_node::{Builder, DynStore, Event, NodeError};
33+
use ldk_node::{dnssec_testing_utils, Builder, DynStore, Event, NodeError};
3434
use lightning::ln::channelmanager::PaymentId;
3535
use lightning::routing::gossip::{NodeAlias, NodeId};
3636
use lightning::routing::router::RouteParametersConfig;
@@ -1554,13 +1554,15 @@ async fn unified_send_to_hrn() {
15541554
std::thread::sleep(std::time::Duration::from_millis(10));
15551555
}
15561556

1557-
//let offer = node_b.bolt12_payment().receive(1000000, "test offer", None, None).unwrap();
1558-
//println!("offer! {:?}", offer.to_string());
1557+
let test_offer = node_b.bolt12_payment().receive(1000000, "test offer", None, None).unwrap();
15591558

15601559
// Sleep one more sec to make sure the node announcement propagates.
15611560
std::thread::sleep(std::time::Duration::from_secs(1));
15621561

15631562
let hrn = "[email protected]";
1563+
1564+
dnssec_testing_utils::set_testing_dnssec_proof_offer_resolution_override(hrn, test_offer);
1565+
15641566
let offer_payment_id: PaymentId = match node_a.unified_payment().send(&hrn, None).await {
15651567
Ok(UnifiedPaymentResult::Bolt12 { payment_id }) => {
15661568
println!("\nBolt12 payment sent successfully with PaymentID: {:?}", payment_id);

0 commit comments

Comments
 (0)