Skip to content

Commit cc7a02d

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 921bf90 commit cc7a02d

File tree

3 files changed

+83
-27
lines changed

3 files changed

+83
-27
lines changed

itest/assets_test.go

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,15 @@ import (
1111
"testing"
1212
"time"
1313

14+
"golang.org/x/exp/maps"
15+
1416
"github.com/btcsuite/btcd/btcec/v2"
1517
"github.com/btcsuite/btcd/btcec/v2/schnorr"
1618
"github.com/btcsuite/btcd/btcutil"
1719
"github.com/btcsuite/btcd/chaincfg/chainhash"
1820
"github.com/btcsuite/btcd/wire"
1921
"github.com/davecgh/go-spew/spew"
22+
tapfn "github.com/lightninglabs/taproot-assets/fn"
2023
"github.com/lightninglabs/taproot-assets/itest"
2124
"github.com/lightninglabs/taproot-assets/proof"
2225
"github.com/lightninglabs/taproot-assets/rfq"
@@ -624,7 +627,7 @@ func sendAssetKeySendPayment(t *testing.T, src, dst *HarnessNode, amt uint64,
624627
})
625628
require.NoError(t, err)
626629

627-
result, err := getAssetPaymentResult(stream)
630+
result, err := getAssetPaymentResult(stream, false)
628631
require.NoError(t, err)
629632
require.Equal(t, expectedStatus, result.Status)
630633

@@ -703,7 +706,8 @@ func createAndPayNormalInvoice(t *testing.T, src, rfqPeer, dst *HarnessNode,
703706
require.NoError(t, err)
704707

705708
return payInvoiceWithAssets(
706-
t, src, rfqPeer, invoiceResp, assetID, smallShards,
709+
t, src, rfqPeer, invoiceResp.PaymentRequest, assetID, smallShards,
710+
fn.None[lnrpc.Payment_PaymentStatus](),
707711
)
708712
}
709713

@@ -729,8 +733,8 @@ func payInvoiceWithSatoshi(t *testing.T, payer *HarnessNode,
729733
}
730734

731735
func payInvoiceWithAssets(t *testing.T, payer, rfqPeer *HarnessNode,
732-
invoice *lnrpc.AddInvoiceResponse, assetID []byte,
733-
smallShards bool) uint64 {
736+
payReq string, assetID []byte, smallShards bool,
737+
expectedPayStatus fn.Option[lnrpc.Payment_PaymentStatus]) uint64 {
734738

735739
ctxb := context.Background()
736740
ctxt, cancel := context.WithTimeout(ctxb, defaultTimeout)
@@ -739,12 +743,12 @@ func payInvoiceWithAssets(t *testing.T, payer, rfqPeer *HarnessNode,
739743
payerTapd := newTapClient(t, payer)
740744

741745
decodedInvoice, err := payer.DecodePayReq(ctxt, &lnrpc.PayReqString{
742-
PayReq: invoice.PaymentRequest,
746+
PayReq: payReq,
743747
})
744748
require.NoError(t, err)
745749

746750
sendReq := &routerrpc.SendPaymentRequest{
747-
PaymentRequest: invoice.PaymentRequest,
751+
PaymentRequest: payReq,
748752
TimeoutSeconds: int32(PaymentTimeout.Seconds()),
749753
FeeLimitMsat: 1_000_000,
750754
}
@@ -777,14 +781,16 @@ func payInvoiceWithAssets(t *testing.T, payer, rfqPeer *HarnessNode,
777781
amountMsat := lnwire.MilliSatoshi(decodedInvoice.NumMsat)
778782
milliSatsFP := rfqmath.MilliSatoshiToUnits(amountMsat, *rate)
779783
numUnits := milliSatsFP.ScaleTo(0).ToUint64()
780-
msatPerUnit := uint64(decodedInvoice.NumMsat) / numUnits
784+
msatPerUnit := float64(decodedInvoice.NumMsat) / float64(numUnits)
781785
t.Logf("Got quote for %v asset units at %v msat/unit from peer %s "+
782786
"with SCID %d", numUnits, msatPerUnit, peerPubKey,
783787
acceptedQuote.Scid)
784788

785-
result, err := getAssetPaymentResult(stream)
789+
expectedStatus := expectedPayStatus.UnwrapOr(lnrpc.Payment_SUCCEEDED)
790+
791+
result, err := getAssetPaymentResult(stream, expectedPayStatus.IsSome())
786792
require.NoError(t, err)
787-
require.Equal(t, lnrpc.Payment_SUCCEEDED, result.Status)
793+
require.Equal(t, expectedStatus, result.Status)
788794

789795
return numUnits
790796
}
@@ -827,7 +833,7 @@ func createAssetInvoice(t *testing.T, dstRfqPeer, dst *HarnessNode,
827833

828834
assetUnits := rfqmath.NewBigIntFixedPoint(assetAmount, 0)
829835
numMSats := rfqmath.UnitsToMilliSatoshi(assetUnits, *rate)
830-
mSatPerUnit := uint64(decodedInvoice.NumMsat) / assetAmount
836+
mSatPerUnit := float64(decodedInvoice.NumMsat) / float64(assetAmount)
831837

832838
require.EqualValues(t, numMSats, decodedInvoice.NumMsat)
833839

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: 56 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,10 @@ func testCustomChannelsLarge(_ context.Context, net *NetworkHarness,
211211
invoiceResp := createAssetInvoice(
212212
t.t, erin, fabia, fabiaInvoiceAssetAmount, assetID,
213213
)
214-
payInvoiceWithAssets(t.t, charlie, dave, invoiceResp, assetID, false)
214+
payInvoiceWithAssets(
215+
t.t, charlie, dave, invoiceResp.PaymentRequest, assetID, false,
216+
fn.None[lnrpc.Payment_PaymentStatus](),
217+
)
215218
logBalance(t.t, nodes, assetID, "after invoice")
216219

217220
invoiceResp2 := createAssetInvoice(
@@ -223,15 +226,21 @@ func testCustomChannelsLarge(_ context.Context, net *NetworkHarness,
223226
// amount of zero.
224227
time.Sleep(time.Second * 1)
225228

226-
payInvoiceWithAssets(t.t, fabia, erin, invoiceResp2, assetID, false)
229+
payInvoiceWithAssets(
230+
t.t, fabia, erin, invoiceResp2.PaymentRequest, assetID, false,
231+
fn.None[lnrpc.Payment_PaymentStatus](),
232+
)
227233
logBalance(t.t, nodes, assetID, "after invoice 2")
228234

229235
// Now we send a large invoice from Charlie to Dave.
230236
const largeInvoiceAmount = 100_000
231237
invoiceResp3 := createAssetInvoice(
232238
t.t, charlie, dave, largeInvoiceAmount, assetID,
233239
)
234-
payInvoiceWithAssets(t.t, charlie, dave, invoiceResp3, assetID, false)
240+
payInvoiceWithAssets(
241+
t.t, charlie, dave, invoiceResp3.PaymentRequest, assetID, false,
242+
fn.None[lnrpc.Payment_PaymentStatus](),
243+
)
235244
logBalance(t.t, nodes, assetID, "after invoice 3")
236245

237246
// We keysend the rest, so that all the balance is on Dave's side.
@@ -417,7 +426,10 @@ func testCustomChannels(_ context.Context, net *NetworkHarness,
417426
invoiceResp := createAssetInvoice(
418427
t.t, dave, charlie, charlieInvoiceAmount, assetID,
419428
)
420-
payInvoiceWithAssets(t.t, dave, charlie, invoiceResp, assetID, true)
429+
payInvoiceWithAssets(
430+
t.t, dave, charlie, invoiceResp.PaymentRequest, assetID, true,
431+
fn.None[lnrpc.Payment_PaymentStatus](),
432+
)
421433
logBalance(t.t, nodes, assetID, "after invoice back")
422434

423435
charlieAssetBalance += charlieInvoiceAmount
@@ -469,7 +481,10 @@ func testCustomChannels(_ context.Context, net *NetworkHarness,
469481
invoiceResp = createAssetInvoice(
470482
t.t, charlie, dave, daveInvoiceAssetAmount, assetID,
471483
)
472-
payInvoiceWithAssets(t.t, charlie, dave, invoiceResp, assetID, true)
484+
payInvoiceWithAssets(
485+
t.t, charlie, dave, invoiceResp.PaymentRequest, assetID, true,
486+
fn.None[lnrpc.Payment_PaymentStatus](),
487+
)
473488
logBalance(t.t, nodes, assetID, "after invoice")
474489

475490
charlieAssetBalance -= daveInvoiceAssetAmount
@@ -507,7 +522,10 @@ func testCustomChannels(_ context.Context, net *NetworkHarness,
507522
invoiceResp = createAssetInvoice(
508523
t.t, erin, fabia, fabiaInvoiceAssetAmount1, assetID,
509524
)
510-
payInvoiceWithAssets(t.t, charlie, dave, invoiceResp, assetID, true)
525+
payInvoiceWithAssets(
526+
t.t, charlie, dave, invoiceResp.PaymentRequest, assetID, true,
527+
fn.None[lnrpc.Payment_PaymentStatus](),
528+
)
511529
logBalance(t.t, nodes, assetID, "after invoice")
512530

513531
charlieAssetBalance -= fabiaInvoiceAssetAmount1
@@ -541,7 +559,10 @@ func testCustomChannels(_ context.Context, net *NetworkHarness,
541559
invoiceResp = createAssetInvoice(
542560
t.t, erin, fabia, fabiaInvoiceAssetAmount3, assetID,
543561
)
544-
payInvoiceWithAssets(t.t, charlie, dave, invoiceResp, assetID, true)
562+
payInvoiceWithAssets(
563+
t.t, charlie, dave, invoiceResp.PaymentRequest, assetID, true,
564+
fn.None[lnrpc.Payment_PaymentStatus](),
565+
)
545566
logBalance(t.t, nodes, assetID, "after invoice")
546567

547568
charlieAssetBalance -= fabiaInvoiceAssetAmount3
@@ -559,7 +580,10 @@ func testCustomChannels(_ context.Context, net *NetworkHarness,
559580
invoiceResp = createAssetInvoice(
560581
t.t, dave, yara, yaraInvoiceAssetAmount1, assetID,
561582
)
562-
payInvoiceWithAssets(t.t, charlie, dave, invoiceResp, assetID, true)
583+
payInvoiceWithAssets(
584+
t.t, charlie, dave, invoiceResp.PaymentRequest, assetID, true,
585+
fn.None[lnrpc.Payment_PaymentStatus](),
586+
)
563587
logBalance(t.t, nodes, assetID, "after asset-to-asset")
564588

565589
charlieAssetBalance -= yaraInvoiceAssetAmount1
@@ -911,7 +935,10 @@ func testCustomChannelsGroupedAsset(_ context.Context, net *NetworkHarness,
911935
invoiceResp := createAssetInvoice(
912936
t.t, charlie, dave, daveInvoiceAssetAmount, assetID,
913937
)
914-
payInvoiceWithAssets(t.t, charlie, dave, invoiceResp, assetID, true)
938+
payInvoiceWithAssets(
939+
t.t, charlie, dave, invoiceResp.PaymentRequest, assetID, true,
940+
fn.None[lnrpc.Payment_PaymentStatus](),
941+
)
915942
logBalance(t.t, nodes, assetID, "after invoice")
916943

917944
charlieAssetBalance -= daveInvoiceAssetAmount
@@ -936,7 +963,10 @@ func testCustomChannelsGroupedAsset(_ context.Context, net *NetworkHarness,
936963
invoiceResp = createAssetInvoice(
937964
t.t, erin, fabia, fabiaInvoiceAssetAmount1, assetID,
938965
)
939-
payInvoiceWithAssets(t.t, charlie, dave, invoiceResp, assetID, true)
966+
payInvoiceWithAssets(
967+
t.t, charlie, dave, invoiceResp.PaymentRequest, assetID, true,
968+
fn.None[lnrpc.Payment_PaymentStatus](),
969+
)
940970
logBalance(t.t, nodes, assetID, "after invoice")
941971

942972
charlieAssetBalance -= fabiaInvoiceAssetAmount1
@@ -970,7 +1000,10 @@ func testCustomChannelsGroupedAsset(_ context.Context, net *NetworkHarness,
9701000
invoiceResp = createAssetInvoice(
9711001
t.t, erin, fabia, fabiaInvoiceAssetAmount3, assetID,
9721002
)
973-
payInvoiceWithAssets(t.t, charlie, dave, invoiceResp, assetID, true)
1003+
payInvoiceWithAssets(
1004+
t.t, charlie, dave, invoiceResp.PaymentRequest, assetID, true,
1005+
fn.None[lnrpc.Payment_PaymentStatus](),
1006+
)
9741007
logBalance(t.t, nodes, assetID, "after invoice")
9751008

9761009
charlieAssetBalance -= fabiaInvoiceAssetAmount3
@@ -988,7 +1021,10 @@ func testCustomChannelsGroupedAsset(_ context.Context, net *NetworkHarness,
9881021
invoiceResp = createAssetInvoice(
9891022
t.t, dave, yara, yaraInvoiceAssetAmount1, assetID,
9901023
)
991-
payInvoiceWithAssets(t.t, charlie, dave, invoiceResp, assetID, true)
1024+
payInvoiceWithAssets(
1025+
t.t, charlie, dave, invoiceResp.PaymentRequest, assetID, true,
1026+
fn.None[lnrpc.Payment_PaymentStatus](),
1027+
)
9921028
logBalance(t.t, nodes, assetID, "after asset-to-asset")
9931029

9941030
charlieAssetBalance -= yaraInvoiceAssetAmount1
@@ -1910,7 +1946,10 @@ func testCustomChannelsLiquidityEdgeCases(_ context.Context,
19101946
t.t, charlie, dave, 100_000, assetID,
19111947
)
19121948

1913-
payInvoiceWithAssets(t.t, charlie, dave, invoiceResp, assetID, false)
1949+
payInvoiceWithAssets(
1950+
t.t, charlie, dave, invoiceResp.PaymentRequest, assetID, false,
1951+
fn.None[lnrpc.Payment_PaymentStatus](),
1952+
)
19141953

19151954
logBalance(t.t, nodes, assetID, "after big asset payment (asset "+
19161955
"invoice, direct)")
@@ -1942,7 +1981,10 @@ func testCustomChannelsLiquidityEdgeCases(_ context.Context,
19421981
t.t, dave, charlie, 100_000, assetID,
19431982
)
19441983

1945-
payInvoiceWithAssets(t.t, yara, dave, invoiceResp, assetID, false)
1984+
payInvoiceWithAssets(
1985+
t.t, yara, dave, invoiceResp.PaymentRequest, assetID, false,
1986+
fn.None[lnrpc.Payment_PaymentStatus](),
1987+
)
19461988

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

0 commit comments

Comments
 (0)