-
Notifications
You must be signed in to change notification settings - Fork 2.2k
htlcswitch: fix flake in TestChannelLinkCancelFullCommitment
#9221
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -22,6 +22,7 @@ import ( | |
"github.com/lightningnetwork/lnd/htlcswitch/hodl" | ||
"github.com/lightningnetwork/lnd/htlcswitch/hop" | ||
"github.com/lightningnetwork/lnd/lntest/mock" | ||
"github.com/lightningnetwork/lnd/lntest/wait" | ||
"github.com/lightningnetwork/lnd/lntypes" | ||
"github.com/lightningnetwork/lnd/lnwallet/chainfee" | ||
"github.com/lightningnetwork/lnd/lnwire" | ||
|
@@ -4289,14 +4290,19 @@ func TestSwitchDustForwarding(t *testing.T) { | |
|
||
// We'll test that once the default threshold is exceeded on the | ||
// Alice -> Bob channel, either side's calls to SendHTLC will fail. | ||
// | ||
// Alice will send 354 HTLC's of 700sats. Bob will also send 354 HTLC's | ||
// of 700sats. | ||
numHTLCs := 354 | ||
numHTLCs := maxInflightHtlcs | ||
aliceAttemptID, bobAttemptID := numHTLCs, numHTLCs | ||
amt := lnwire.NewMSatFromSatoshis(700) | ||
aliceBobFirstHop := n.aliceChannelLink.ShortChanID() | ||
|
||
// We decreased the max number of inflight HTLCs therefore we also need | ||
// do decrease the max fee exposure. | ||
maxFeeExposure := lnwire.NewMSatFromSatoshis(74500) | ||
n.aliceChannelLink.cfg.MaxFeeExposure = maxFeeExposure | ||
n.firstBobChannelLink.cfg.MaxFeeExposure = maxFeeExposure | ||
|
||
// Alice will send 50 HTLC's of 700sats. Bob will also send 50 HTLC's | ||
// of 700sats. | ||
sendDustHtlcs(t, n, true, amt, aliceBobFirstHop, numHTLCs) | ||
sendDustHtlcs(t, n, false, amt, aliceBobFirstHop, numHTLCs) | ||
|
||
|
@@ -4318,22 +4324,13 @@ func TestSwitchDustForwarding(t *testing.T) { | |
OnionBlob: blob, | ||
} | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I tried to understand this testcase but tbh, I don't really understand it. In the description it says that we are testing the treshold here however I think what we are really testing is the channel contraint of the max_inflight_htlcs we are allowed to put onto a channel. So my question is what do we really want to test here. When sending dust (
And all the followup tests just try to add another htlc to the link but its already blocked, so I think this testcase might be a relict of the former dust-treshold implementation, which now changed and is by default 500_000 sats ? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. the main test I think is in There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. decreased the fee-exposure and made sure we hit the error of being overexposed and not hitting the error that we hit the channel contraint. |
||
checkAlmostDust := func(link *channelLink, mbox MailBox, | ||
whoseCommit lntypes.ChannelParty) bool { | ||
|
||
timeout := time.After(15 * time.Second) | ||
pollInterval := 300 * time.Millisecond | ||
expectedDust := 354 * 2 * amt | ||
// This is the expected dust without taking the commitfee into account. | ||
expectedDust := maxInflightHtlcs * 2 * amt | ||
|
||
for { | ||
<-time.After(pollInterval) | ||
|
||
select { | ||
case <-timeout: | ||
return false | ||
default: | ||
} | ||
assertAlmostDust := func(link *channelLink, mbox MailBox, | ||
whoseCommit lntypes.ChannelParty) { | ||
|
||
err := wait.NoError(func() error { | ||
linkDust := link.getDustSum( | ||
whoseCommit, fn.None[chainfee.SatPerKWeight](), | ||
) | ||
|
@@ -4347,26 +4344,29 @@ func TestSwitchDustForwarding(t *testing.T) { | |
} | ||
|
||
if totalDust == expectedDust { | ||
break | ||
return nil | ||
} | ||
} | ||
|
||
return true | ||
return fmt.Errorf("got totalDust=%v, expectedDust=%v", | ||
totalDust, expectedDust) | ||
}, 15*time.Second) | ||
require.NoError(t, err, "timeout checking dust") | ||
} | ||
|
||
// Wait until Bob is almost at the fee threshold. | ||
bobMbox := n.bobServer.htlcSwitch.mailOrchestrator.GetOrCreateMailBox( | ||
n.firstBobChannelLink.ChanID(), | ||
n.firstBobChannelLink.ShortChanID(), | ||
) | ||
require.True( | ||
t, checkAlmostDust( | ||
n.firstBobChannelLink, bobMbox, lntypes.Local, | ||
), | ||
) | ||
assertAlmostDust(n.firstBobChannelLink, bobMbox, lntypes.Local) | ||
|
||
// Sending one more HTLC should fail. SendHTLC won't error, but the | ||
// HTLC should be failed backwards. | ||
// HTLC should be failed backwards. When sending we only check for the | ||
// dust amount without the commitment fee. When the HTLC is added to the | ||
// commitment state (link) we also take into account the commitment fee | ||
// and with a fee of 6000 sat/kw and a commitment size of 724 (non | ||
// anchor channel) we are overexposed in fees (maxFeeExposure) that's | ||
// why the HTLC is failed back. | ||
err = n.bobServer.htlcSwitch.SendHTLC( | ||
aliceBobFirstHop, uint64(bobAttemptID), failingHtlc, | ||
) | ||
|
@@ -4412,9 +4412,7 @@ func TestSwitchDustForwarding(t *testing.T) { | |
aliceBobFirstHop, uint64(bobAttemptID), nondustHtlc, | ||
) | ||
require.NoError(t, err) | ||
require.True(t, checkAlmostDust( | ||
n.firstBobChannelLink, bobMbox, lntypes.Local, | ||
)) | ||
assertAlmostDust(n.firstBobChannelLink, bobMbox, lntypes.Local) | ||
|
||
// Check that the HTLC failed. | ||
bobResultChan, err = n.bobServer.htlcSwitch.GetAttemptResult( | ||
|
@@ -4492,11 +4490,7 @@ func TestSwitchDustForwarding(t *testing.T) { | |
aliceMbox := aliceOrch.GetOrCreateMailBox( | ||
n.aliceChannelLink.ChanID(), n.aliceChannelLink.ShortChanID(), | ||
) | ||
require.True( | ||
t, checkAlmostDust( | ||
n.aliceChannelLink, aliceMbox, lntypes.Remote, | ||
), | ||
) | ||
assertAlmostDust(n.aliceChannelLink, aliceMbox, lntypes.Remote) | ||
|
||
err = n.aliceServer.htlcSwitch.SendHTLC( | ||
n.aliceChannelLink.ShortChanID(), uint64(aliceAttemptID), | ||
|
Uh oh!
There was an error while loading. Please reload this page.