Skip to content

Commit f548311

Browse files
committed
itest: update payInvoiceWithAssets to take optional pay status
This is useful as sometimes we just want to return once the HTLC has been accepted, like when we're paying hodl invoices.
1 parent e9f5dd9 commit f548311

File tree

3 files changed

+80
-25
lines changed

3 files changed

+80
-25
lines changed

itest/assets_test.go

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -707,7 +707,7 @@ func sendAssetKeySendPayment(t *testing.T, src, dst *HarnessNode, amt uint64,
707707
})
708708
require.NoError(t, err)
709709

710-
result, err := getAssetPaymentResult(stream)
710+
result, err := getAssetPaymentResult(stream, false)
711711
require.NoError(t, err)
712712
require.Equal(t, expectedStatus, result.Status)
713713

@@ -786,7 +786,8 @@ func createAndPayNormalInvoice(t *testing.T, src, rfqPeer, dst *HarnessNode,
786786
require.NoError(t, err)
787787

788788
numUnits, _ := payInvoiceWithAssets(
789-
t, src, rfqPeer, invoiceResp, assetID, smallShards,
789+
t, src, rfqPeer, invoiceResp.PaymentRequest, assetID, smallShards,
790+
fn.None[lnrpc.Payment_PaymentStatus](),
790791
)
791792

792793
return numUnits
@@ -851,8 +852,9 @@ func payInvoiceWithSatoshiLastHop(t *testing.T, payer *HarnessNode,
851852
}
852853

853854
func payInvoiceWithAssets(t *testing.T, payer, rfqPeer *HarnessNode,
854-
invoice *lnrpc.AddInvoiceResponse, assetID []byte,
855-
smallShards bool) (uint64, rfqmath.BigIntFixedPoint) {
855+
payReq string, assetID []byte, smallShards bool,
856+
expectedPayStatus fn.Option[lnrpc.Payment_PaymentStatus]) (uint64,
857+
rfqmath.BigIntFixedPoint) {
856858

857859
ctxb := context.Background()
858860
ctxt, cancel := context.WithTimeout(ctxb, defaultTimeout)
@@ -861,12 +863,12 @@ func payInvoiceWithAssets(t *testing.T, payer, rfqPeer *HarnessNode,
861863
payerTapd := newTapClient(t, payer)
862864

863865
decodedInvoice, err := payer.DecodePayReq(ctxt, &lnrpc.PayReqString{
864-
PayReq: invoice.PaymentRequest,
866+
PayReq: payReq,
865867
})
866868
require.NoError(t, err)
867869

868870
sendReq := &routerrpc.SendPaymentRequest{
869-
PaymentRequest: invoice.PaymentRequest,
871+
PaymentRequest: payReq,
870872
TimeoutSeconds: int32(PaymentTimeout.Seconds()),
871873
FeeLimitMsat: 1_000_000,
872874
}
@@ -906,9 +908,11 @@ func payInvoiceWithAssets(t *testing.T, payer, rfqPeer *HarnessNode,
906908
"with SCID %d", numUnits, msatPerUnit, peerPubKey,
907909
acceptedQuote.Scid)
908910

909-
result, err := getAssetPaymentResult(stream)
911+
expectedStatus := expectedPayStatus.UnwrapOr(lnrpc.Payment_SUCCEEDED)
912+
913+
result, err := getAssetPaymentResult(stream, expectedPayStatus.IsSome())
910914
require.NoError(t, err)
911-
require.Equal(t, lnrpc.Payment_SUCCEEDED, result.Status)
915+
require.Equal(t, expectedStatus, result.Status)
912916

913917
return numUnits, *rate
914918
}

itest/litd_accounts_test.go

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -436,8 +436,8 @@ func getPaymentResult(stream routerrpc.Router_SendPaymentV2Client) (
436436
}
437437

438438
func getAssetPaymentResult(
439-
s tapchannelrpc.TaprootAssetChannels_SendPaymentClient) (*lnrpc.Payment,
440-
error) {
439+
s tapchannelrpc.TaprootAssetChannels_SendPaymentClient,
440+
isHodl bool) (*lnrpc.Payment, error) {
441441

442442
// No idea why it makes a difference whether we wait before calling
443443
// s.Recv() or not, but it does. Without the sleep, the test will fail
@@ -456,7 +456,15 @@ func getAssetPaymentResult(
456456
return nil, fmt.Errorf("unexpected message: %v", msg)
457457
}
458458

459-
if payment.Status != lnrpc.Payment_IN_FLIGHT {
459+
// If this is a hodl payment, then we'll return the first expected
460+
// response. Otherwise, we'll wait until the in flight clears to we can
461+
// observe the other payment states.
462+
switch {
463+
464+
case isHodl:
465+
return payment, nil
466+
467+
case payment.Status != lnrpc.Payment_IN_FLIGHT:
460468
return payment, nil
461469
}
462470
}

itest/litd_custom_channels_test.go

Lines changed: 57 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,10 @@ func testCustomChannelsLarge(_ context.Context, net *NetworkHarness,
222222
invoiceResp := createAssetInvoice(
223223
t.t, erin, fabia, fabiaInvoiceAssetAmount, assetID,
224224
)
225-
payInvoiceWithAssets(t.t, charlie, dave, invoiceResp, assetID, false)
225+
payInvoiceWithAssets(
226+
t.t, charlie, dave, invoiceResp.PaymentRequest, assetID, false,
227+
fn.None[lnrpc.Payment_PaymentStatus](),
228+
)
226229
logBalance(t.t, nodes, assetID, "after invoice")
227230

228231
invoiceResp2 := createAssetInvoice(
@@ -234,15 +237,21 @@ func testCustomChannelsLarge(_ context.Context, net *NetworkHarness,
234237
// amount of zero.
235238
time.Sleep(time.Second * 1)
236239

237-
payInvoiceWithAssets(t.t, fabia, erin, invoiceResp2, assetID, false)
240+
payInvoiceWithAssets(
241+
t.t, fabia, erin, invoiceResp2.PaymentRequest, assetID, false,
242+
fn.None[lnrpc.Payment_PaymentStatus](),
243+
)
238244
logBalance(t.t, nodes, assetID, "after invoice 2")
239245

240246
// Now we send a large invoice from Charlie to Dave.
241247
const largeInvoiceAmount = 100_000
242248
invoiceResp3 := createAssetInvoice(
243249
t.t, charlie, dave, largeInvoiceAmount, assetID,
244250
)
245-
payInvoiceWithAssets(t.t, charlie, dave, invoiceResp3, assetID, false)
251+
payInvoiceWithAssets(
252+
t.t, charlie, dave, invoiceResp3.PaymentRequest, assetID, false,
253+
fn.None[lnrpc.Payment_PaymentStatus](),
254+
)
246255
logBalance(t.t, nodes, assetID, "after invoice 3")
247256

248257
// Make sure the invoice on the receiver side and the payment on the
@@ -431,7 +440,10 @@ func testCustomChannels(_ context.Context, net *NetworkHarness,
431440
invoiceResp := createAssetInvoice(
432441
t.t, dave, charlie, charlieInvoiceAmount, assetID,
433442
)
434-
payInvoiceWithAssets(t.t, dave, charlie, invoiceResp, assetID, true)
443+
payInvoiceWithAssets(
444+
t.t, dave, charlie, invoiceResp.PaymentRequest, assetID, true,
445+
fn.None[lnrpc.Payment_PaymentStatus](),
446+
)
435447
logBalance(t.t, nodes, assetID, "after invoice back")
436448

437449
// Make sure the invoice on the receiver side and the payment on the
@@ -493,7 +505,10 @@ func testCustomChannels(_ context.Context, net *NetworkHarness,
493505
invoiceResp = createAssetInvoice(
494506
t.t, charlie, dave, daveInvoiceAssetAmount, assetID,
495507
)
496-
payInvoiceWithAssets(t.t, charlie, dave, invoiceResp, assetID, true)
508+
payInvoiceWithAssets(
509+
t.t, charlie, dave, invoiceResp.PaymentRequest, assetID, true,
510+
fn.None[lnrpc.Payment_PaymentStatus](),
511+
)
497512
logBalance(t.t, nodes, assetID, "after invoice")
498513

499514
charlieAssetBalance -= daveInvoiceAssetAmount
@@ -535,7 +550,10 @@ func testCustomChannels(_ context.Context, net *NetworkHarness,
535550
invoiceResp = createAssetInvoice(
536551
t.t, erin, fabia, fabiaInvoiceAssetAmount1, assetID,
537552
)
538-
payInvoiceWithAssets(t.t, charlie, dave, invoiceResp, assetID, true)
553+
payInvoiceWithAssets(
554+
t.t, charlie, dave, invoiceResp.PaymentRequest, assetID, true,
555+
fn.None[lnrpc.Payment_PaymentStatus](),
556+
)
539557
logBalance(t.t, nodes, assetID, "after invoice")
540558

541559
charlieAssetBalance -= fabiaInvoiceAssetAmount1
@@ -569,7 +587,10 @@ func testCustomChannels(_ context.Context, net *NetworkHarness,
569587
invoiceResp = createAssetInvoice(
570588
t.t, erin, fabia, fabiaInvoiceAssetAmount3, assetID,
571589
)
572-
payInvoiceWithAssets(t.t, charlie, dave, invoiceResp, assetID, true)
590+
payInvoiceWithAssets(
591+
t.t, charlie, dave, invoiceResp.PaymentRequest, assetID, true,
592+
fn.None[lnrpc.Payment_PaymentStatus](),
593+
)
573594
logBalance(t.t, nodes, assetID, "after invoice")
574595

575596
charlieAssetBalance -= fabiaInvoiceAssetAmount3
@@ -587,7 +608,10 @@ func testCustomChannels(_ context.Context, net *NetworkHarness,
587608
invoiceResp = createAssetInvoice(
588609
t.t, dave, yara, yaraInvoiceAssetAmount1, assetID,
589610
)
590-
payInvoiceWithAssets(t.t, charlie, dave, invoiceResp, assetID, true)
611+
payInvoiceWithAssets(
612+
t.t, charlie, dave, invoiceResp.PaymentRequest, assetID, true,
613+
fn.None[lnrpc.Payment_PaymentStatus](),
614+
)
591615
logBalance(t.t, nodes, assetID, "after asset-to-asset")
592616

593617
charlieAssetBalance -= yaraInvoiceAssetAmount1
@@ -920,7 +944,10 @@ func testCustomChannelsGroupedAsset(_ context.Context, net *NetworkHarness,
920944
invoiceResp := createAssetInvoice(
921945
t.t, charlie, dave, daveInvoiceAssetAmount, assetID,
922946
)
923-
payInvoiceWithAssets(t.t, charlie, dave, invoiceResp, assetID, true)
947+
payInvoiceWithAssets(
948+
t.t, charlie, dave, invoiceResp.PaymentRequest, assetID, true,
949+
fn.None[lnrpc.Payment_PaymentStatus](),
950+
)
924951
logBalance(t.t, nodes, assetID, "after invoice")
925952

926953
// Make sure the invoice on the receiver side and the payment on the
@@ -955,7 +982,10 @@ func testCustomChannelsGroupedAsset(_ context.Context, net *NetworkHarness,
955982
invoiceResp = createAssetInvoice(
956983
t.t, erin, fabia, fabiaInvoiceAssetAmount1, assetID,
957984
)
958-
payInvoiceWithAssets(t.t, charlie, dave, invoiceResp, assetID, true)
985+
payInvoiceWithAssets(
986+
t.t, charlie, dave, invoiceResp.PaymentRequest, assetID, true,
987+
fn.None[lnrpc.Payment_PaymentStatus](),
988+
)
959989
logBalance(t.t, nodes, assetID, "after invoice")
960990

961991
charlieAssetBalance -= fabiaInvoiceAssetAmount1
@@ -989,7 +1019,10 @@ func testCustomChannelsGroupedAsset(_ context.Context, net *NetworkHarness,
9891019
invoiceResp = createAssetInvoice(
9901020
t.t, erin, fabia, fabiaInvoiceAssetAmount3, assetID,
9911021
)
992-
payInvoiceWithAssets(t.t, charlie, dave, invoiceResp, assetID, true)
1022+
payInvoiceWithAssets(
1023+
t.t, charlie, dave, invoiceResp.PaymentRequest, assetID, true,
1024+
fn.None[lnrpc.Payment_PaymentStatus](),
1025+
)
9931026
logBalance(t.t, nodes, assetID, "after invoice")
9941027

9951028
charlieAssetBalance -= fabiaInvoiceAssetAmount3
@@ -1007,7 +1040,10 @@ func testCustomChannelsGroupedAsset(_ context.Context, net *NetworkHarness,
10071040
invoiceResp = createAssetInvoice(
10081041
t.t, dave, yara, yaraInvoiceAssetAmount1, assetID,
10091042
)
1010-
payInvoiceWithAssets(t.t, charlie, dave, invoiceResp, assetID, true)
1043+
payInvoiceWithAssets(
1044+
t.t, charlie, dave, invoiceResp.PaymentRequest, assetID, true,
1045+
fn.None[lnrpc.Payment_PaymentStatus](),
1046+
)
10111047
logBalance(t.t, nodes, assetID, "after asset-to-asset")
10121048

10131049
charlieAssetBalance -= yaraInvoiceAssetAmount1
@@ -1916,7 +1952,11 @@ func testCustomChannelsLiquidityEdgeCases(_ context.Context,
19161952
invoiceResp := createAssetInvoice(
19171953
t.t, charlie, dave, bigAssetAmount, assetID,
19181954
)
1919-
payInvoiceWithAssets(t.t, charlie, dave, invoiceResp, assetID, false)
1955+
1956+
payInvoiceWithAssets(
1957+
t.t, charlie, dave, invoiceResp.PaymentRequest, assetID, false,
1958+
fn.None[lnrpc.Payment_PaymentStatus](),
1959+
)
19201960

19211961
logBalance(t.t, nodes, assetID, "after big asset payment (asset "+
19221962
"invoice, direct)")
@@ -1959,7 +1999,10 @@ func testCustomChannelsLiquidityEdgeCases(_ context.Context,
19591999
t.t, dave, charlie, bigAssetAmount, assetID,
19602000
)
19612001

1962-
payInvoiceWithAssets(t.t, yara, dave, invoiceResp, assetID, false)
2002+
payInvoiceWithAssets(
2003+
t.t, yara, dave, invoiceResp.PaymentRequest, assetID, false,
2004+
fn.None[lnrpc.Payment_PaymentStatus](),
2005+
)
19632006

19642007
logBalance(t.t, nodes, assetID, "after big asset payment (asset "+
19652008
"invoice, multi-hop)")

0 commit comments

Comments
 (0)