paymentsdb: add additional test for first hop data
We add a test which tests the retrieval of first hop data like the first hop amount or the custom records on the route level.
This commit is contained in:
1 file changed
+62
@@ -18,6 +18,7 @@ import (
|
|||||||
"github.com/lightningnetwork/lnd/lnwire"
|
"github.com/lightningnetwork/lnd/lnwire"
|
||||||
"github.com/lightningnetwork/lnd/record"
|
"github.com/lightningnetwork/lnd/record"
|
||||||
"github.com/lightningnetwork/lnd/routing/route"
|
"github.com/lightningnetwork/lnd/routing/route"
|
||||||
|
"github.com/lightningnetwork/lnd/tlv"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -2984,3 +2985,64 @@ func TestFetchInFlightPaymentsMultipleAttempts(t *testing.T) {
|
|||||||
// Verify the payment has both attempts.
|
// Verify the payment has both attempts.
|
||||||
require.Len(t, inFlightPayments[0].HTLCs, 2)
|
require.Len(t, inFlightPayments[0].HTLCs, 2)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TestRouteFirstHopData tests that Route.FirstHopAmount and
|
||||||
|
// Route.FirstHopWireCustomRecords are correctly stored and retrieved.
|
||||||
|
func TestRouteFirstHopData(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
ctx := t.Context()
|
||||||
|
|
||||||
|
paymentDB, _ := NewTestDB(t)
|
||||||
|
|
||||||
|
preimg := genPreimage(t)
|
||||||
|
rhash := sha256.Sum256(preimg[:])
|
||||||
|
info := genPaymentCreationInfo(t, rhash)
|
||||||
|
firstHopAmount := lnwire.MilliSatoshi(1234)
|
||||||
|
|
||||||
|
// Init payment.
|
||||||
|
err := paymentDB.InitPayment(ctx, info.PaymentIdentifier, info)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
// Create an attempt with both FirstHopAmount and
|
||||||
|
// FirstHopWireCustomRecords set on the route.
|
||||||
|
attempt := genAttemptWithHash(t, 0, genSessionKey(t), rhash)
|
||||||
|
attempt.Route.FirstHopAmount = tlv.NewRecordT[tlv.TlvType0](
|
||||||
|
tlv.NewBigSizeT(firstHopAmount),
|
||||||
|
)
|
||||||
|
typeIdx1 := uint64(lnwire.MinCustomRecordsTlvType + 10)
|
||||||
|
typeIdx2 := uint64(lnwire.MinCustomRecordsTlvType + 20)
|
||||||
|
attempt.Route.FirstHopWireCustomRecords = lnwire.CustomRecords{
|
||||||
|
typeIdx1: []byte("wire_record_1"),
|
||||||
|
typeIdx2: []byte("wire_record_2"),
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = paymentDB.RegisterAttempt(ctx, info.PaymentIdentifier, attempt)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
// Fetch the payment and verify first hop data was stored.
|
||||||
|
payment, err := paymentDB.FetchPayment(ctx, info.PaymentIdentifier)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
require.Len(t, payment.HTLCs, 1)
|
||||||
|
htlc := payment.HTLCs[0]
|
||||||
|
|
||||||
|
// Verify the FirstHopAmount matches what we set.
|
||||||
|
require.NotNil(t, htlc.Route.FirstHopAmount)
|
||||||
|
require.Equal(
|
||||||
|
t, firstHopAmount,
|
||||||
|
htlc.Route.FirstHopAmount.Val.Int(),
|
||||||
|
)
|
||||||
|
|
||||||
|
// Verify the FirstHopWireCustomRecords match what we set.
|
||||||
|
require.NotEmpty(t, htlc.Route.FirstHopWireCustomRecords)
|
||||||
|
require.Len(t, htlc.Route.FirstHopWireCustomRecords, 2)
|
||||||
|
require.Equal(
|
||||||
|
t, []byte("wire_record_1"),
|
||||||
|
htlc.Route.FirstHopWireCustomRecords[typeIdx1],
|
||||||
|
)
|
||||||
|
require.Equal(
|
||||||
|
t, []byte("wire_record_2"),
|
||||||
|
htlc.Route.FirstHopWireCustomRecords[typeIdx2],
|
||||||
|
)
|
||||||
|
}
|
||||||
Reference in new issue
Block a user