') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); Add basic end-to-end splice tests by wpaulino · Pull Request #4054 · lightningdevkit/rust-lightning · GitHub
Skip to content

Add basic end-to-end splice tests - #4054

Merged
jkczyz merged 3 commits into
lightningdevkit:mainfrom
wpaulino:test-basic-splice
Sep 17, 2025
Merged

Add basic end-to-end splice tests#4054
jkczyz merged 3 commits into
lightningdevkit:mainfrom
wpaulino:test-basic-splice

Conversation

@wpaulino

Copy link
Copy Markdown
Contributor

No description provided.

@wpaulinowpaulino added this to the 0.2 milestone Sep 4, 2025
@wpaulinowpaulino self-assigned this Sep 4, 2025
@ldk-reviews-bot

ldk-reviews-bot commented Sep 4, 2025

Copy link
Copy Markdown

👋 Thanks for assigning @jkczyz as a reviewer!
I'll wait for their review and will help manage the review process.
Once they submit their review, I'll check if a second reviewer would be helpful.

@codecov

codecovBot commented Sep 4, 2025

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 92.92929% with 21 lines in your changes missing coverage. Please review.
✅ Project coverage is 88.67%. Comparing base (f3c22a7) to head (307fa56).
⚠️ Report is 9 commits behind head on main.

Files with missing linesPatch %Lines
lightning/src/ln/splicing_tests.rs92.67%14 Missing and 6 partials ⚠️
lightning/src/util/test_utils.rs95.65%1 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #4054 +/- ##
==========================================
+ Coverage 87.84% 88.67% +0.82% 
==========================================
Files 176 176 Lines 131728 131839 +111 Branches 131728 131839 +111 ==========================================
+ Hits 115712 116903 +1191 + Misses 13384 12279 -1105 - Partials 2632 2657 +25 
FlagCoverage Δ
fuzzing21.61% <0.00%> (-0.01%)⬇️
tests88.50% <92.92%> (+0.82%)⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Comment threadlightning/src/chain/channelmonitor.rs
Comment threadlightning/src/ln/channel.rs Outdated
Comment threadlightning/src/ln/interactivetxs.rs

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some commits, eg Don't process alternative funding confirmations duplicatively could use some motivation in the commit message.

Also, yea, probably worth splitting this up somehow, its kinda a large PR, maybe move the tests and channel-state changes to another one?

Comment threadlightning/src/ln/channelmanager.rs Outdated
@ldk-reviews-bot

Copy link
Copy Markdown

🔔 1st Reminder

Hey @jkczyz! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

@wpaulinowpaulino changed the title Add basic end-to-end splice tests fixing miscellaneous issues along the wayAdd basic end-to-end splice testsSep 8, 2025
@ldk-reviews-bot

Copy link
Copy Markdown

🔔 2nd Reminder

Hey @jkczyz! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

Comment threadlightning/src/ln/splicing_tests.rs Outdated
Comment threadlightning/src/ln/splicing_tests.rs
Comment threadlightning/src/ln/splicing_tests.rs Outdated
@ldk-reviews-bot

Copy link
Copy Markdown

🔔 1st Reminder

Hey @TheBlueMatt! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

We plan to reuse it for dual-funding/splicing, and those require
standard SegWit inputs only.
This guarantees we get a unique txid when calling
`provide_anchor_reserves` successively as we're immediately mining (and
therefore advancing the chain) the transaction after creating it.
Comment threadlightning/src/ln/splicing_tests.rs Outdated
This adds a new test for both splice-in and splice-out in favor of
maintaining the existing test. Helpers have been added to DRY up a lot
of the logic necessary for driving the splice state machine forward.

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I mean, basically LGTM, but I don't really think this needs a second reviewer now. I'll just defer to @jkczyz who can merge when he's happy.

@jkczyz
jkczyz merged commit 9d6d08b into lightningdevkit:mainSep 17, 2025
24 of 25 checks passed
@wpaulino
wpaulino deleted the test-basic-splice branch September 17, 2025 20:09
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

4 participants

@wpaulino@ldk-reviews-bot@TheBlueMatt@jkczyz