Skip to content

Commit c7dbe80

Browse files
committed
itest: enhance multi-rfq itest with sending
1 parent ee7c1fe commit c7dbe80

File tree

1 file changed

+77
-3
lines changed

1 file changed

+77
-3
lines changed

itest/litd_custom_channels_test.go

Lines changed: 77 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3068,7 +3068,6 @@ func testCustomChannelsMultiRFQReceive(ctx context.Context, net *NetworkHarness,
30683068
t.t, charlie, &lnrpc.AddInvoiceResponse{
30693069
PaymentRequest: hodlInv.payReq,
30703070
},
3071-
withGroupKey(groupID),
30723071
withFailure(lnrpc.Payment_IN_FLIGHT, failureNone),
30733072
)
30743073

@@ -3100,13 +3099,88 @@ func testCustomChannelsMultiRFQReceive(ctx context.Context, net *NetworkHarness,
31003099
// Now let's create a normal invoice that will be settled once all the
31013100
// HTLCs have been received. This is only possible because the payer
31023101
// uses multiple bolt11 hop hints to reach the destination.
3103-
invoiceResp := createAssetInvoice(t.t, nil, fabia, 15_000, assetID)
3102+
invoiceResp := createAssetInvoice(
3103+
t.t, nil, fabia, 15_000, nil, withInvGroupKey(groupID),
3104+
)
31043105

31053106
payInvoiceWithSatoshi(
3106-
t.t, charlie, invoiceResp, withGroupKey(groupID),
3107+
t.t, charlie, invoiceResp,
31073108
)
31083109

31093110
logBalance(t.t, nodes, assetID, "after multi-rfq receive")
3111+
3112+
// Now we'll test that sending with multiple rfq quotes works.
3113+
3114+
// Let's start by providing some liquidity to Charlie's peers, in order
3115+
// for them to be able to push some amount if Fabia picks them as part
3116+
// of the route.
3117+
sendKeySendPayment(t.t, charlie, erin, 800_000)
3118+
sendKeySendPayment(t.t, charlie, dave, 800_000)
3119+
sendKeySendPayment(t.t, charlie, yara, 800_000)
3120+
3121+
// Let's ask for the rough equivalent of ~15k assets. Fabia, who's going
3122+
// to pay the invoice, only has parts of assets that are less than 10k
3123+
// in channels with one of the 3 intermediate peers. The only way to
3124+
// pay this invoice is by splitting the payment across multiple peers by
3125+
// using multiple RFQ quotes.
3126+
invAmt := int64(15_000 * 17)
3127+
3128+
iResp, err := charlie.AddHoldInvoice(
3129+
ctx, &invoicesrpc.AddHoldInvoiceRequest{
3130+
Memo: "",
3131+
Value: invAmt,
3132+
Hash: payHash[:],
3133+
},
3134+
)
3135+
require.NoError(t.t, err)
3136+
3137+
payReq := iResp.PaymentRequest
3138+
3139+
payInvoiceWithAssets(
3140+
t.t, fabia, nil, payReq, assetID,
3141+
withFailure(lnrpc.Payment_IN_FLIGHT, failureNone),
3142+
)
3143+
3144+
assertMinNumHtlcs(t.t, charlie, 2)
3145+
assertMinNumHtlcs(t.t, fabia, 2)
3146+
3147+
logBalance(t.t, nodes, assetID, "multi-rfq send in-flight")
3148+
3149+
_, err = charlie.SettleInvoice(ctx, &invoicesrpc.SettleInvoiceMsg{
3150+
Preimage: hodlInv.preimage[:],
3151+
})
3152+
require.NoError(t.t, err)
3153+
3154+
assertNumHtlcs(t.t, charlie, 0)
3155+
assertNumHtlcs(t.t, fabia, 0)
3156+
3157+
logBalance(t.t, nodes, assetID, "after multi-rfq send")
3158+
3159+
// Let's make another round-trip involving multi-rfq functionality.
3160+
// Let's have Fabia receive another large payment and send it back
3161+
// again, this time with a greater amount.
3162+
invoiceResp = createAssetInvoice(t.t, nil, fabia, 25_000, assetID)
3163+
3164+
payInvoiceWithSatoshi(
3165+
t.t, charlie, invoiceResp,
3166+
)
3167+
3168+
logBalance(t.t, nodes, assetID, "after multi-rfq receive (2nd)")
3169+
3170+
// Let's bump up the invoice amount a bit, to roughly ~22k assets.
3171+
invAmt = 22_000 * 17
3172+
inv, err := charlie.AddInvoice(ctx, &lnrpc.Invoice{
3173+
Value: invAmt,
3174+
})
3175+
require.NoError(t.t, err)
3176+
3177+
payReq = inv.PaymentRequest
3178+
3179+
payInvoiceWithAssets(
3180+
t.t, fabia, nil, payReq, nil, withGroupKey(groupID),
3181+
)
3182+
3183+
logBalance(t.t, nodes, assetID, "after multi-rfq send (2nd)")
31103184
}
31113185

31123186
// testCustomChannelsStrictForwarding is a test that tests the strict forwarding

0 commit comments

Comments
 (0)