channeldb/payments_test: handle that dupe payments will always have StatusSuccess

Legacy duplicate payments would only be migrated over if they had
succeeded. Alter the test to reflect this.
This commit is contained in:
Johan T. Halseth 2021-01-22 14:04:20 +01:00
parent c9ed5927f6
commit 82fe6f5f59
No known key found for this signature in database
GPG Key ID: 15BAADA29DA20D26
2 changed files with 21 additions and 13 deletions

@ -466,7 +466,7 @@ func TestPaymentControlDeleteNonInFligt(t *testing.T) {
if p.hasDuplicate { if p.hasDuplicate {
appendDuplicatePayment( appendDuplicatePayment(
t, pControl.db, info.PaymentHash, t, pControl.db, info.PaymentHash,
uint64(duplicateSeqNr), uint64(duplicateSeqNr), preimg,
) )
duplicateSeqNr++ duplicateSeqNr++
} }

@ -340,9 +340,9 @@ func TestQueryPayments(t *testing.T) {
Reversed: false, Reversed: false,
IncludeIncomplete: false, IncludeIncomplete: false,
}, },
firstIndex: 0, firstIndex: 7,
lastIndex: 0, lastIndex: 7,
expectedSeqNrs: nil, expectedSeqNrs: []uint64{7},
}, },
{ {
name: "query payments at index gap", name: "query payments at index gap",
@ -423,7 +423,7 @@ func TestQueryPayments(t *testing.T) {
for i := 0; i < nonDuplicatePayments; i++ { for i := 0; i < nonDuplicatePayments; i++ {
// Generate a test payment. // Generate a test payment.
info, _, _, err := genInfo() info, _, preimg, err := genInfo()
if err != nil { if err != nil {
t.Fatalf("unable to create test "+ t.Fatalf("unable to create test "+
"payment: %v", err) "payment: %v", err)
@ -449,7 +449,8 @@ func TestQueryPayments(t *testing.T) {
// If we are on the last payment entry, add a // If we are on the last payment entry, add a
// duplicate payment with sequence number equal // duplicate payment with sequence number equal
// to the parent payment + 1. // to the parent payment + 1. Note that
// duplicate payments will always be succeeded.
if i == (nonDuplicatePayments - 1) { if i == (nonDuplicatePayments - 1) {
pmt, err := pControl.FetchPayment( pmt, err := pControl.FetchPayment(
info.PaymentHash, info.PaymentHash,
@ -460,6 +461,7 @@ func TestQueryPayments(t *testing.T) {
t, pControl.db, t, pControl.db,
info.PaymentHash, info.PaymentHash,
pmt.SequenceNum+1, pmt.SequenceNum+1,
preimg,
) )
} }
} }
@ -492,7 +494,7 @@ func TestQueryPayments(t *testing.T) {
if len(querySlice.Payments) != len(tt.expectedSeqNrs) { if len(querySlice.Payments) != len(tt.expectedSeqNrs) {
t.Errorf("expected: %v payments, got: %v", t.Errorf("expected: %v payments, got: %v",
len(allPayments), len(querySlice.Payments)) len(tt.expectedSeqNrs), len(querySlice.Payments))
} }
for i, seqNr := range tt.expectedSeqNrs { for i, seqNr := range tt.expectedSeqNrs {
@ -534,7 +536,7 @@ func TestFetchPaymentWithSequenceNumber(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
// Generate a test payment which we will add duplicates to. // Generate a test payment which we will add duplicates to.
hasDuplicates, _, _, err := genInfo() hasDuplicates, _, preimg, err := genInfo()
require.NoError(t, err) require.NoError(t, err)
// Create a new payment entry in the database. // Create a new payment entry in the database.
@ -556,10 +558,10 @@ func TestFetchPaymentWithSequenceNumber(t *testing.T) {
// Add two duplicates to our second payment. // Add two duplicates to our second payment.
appendDuplicatePayment( appendDuplicatePayment(
t, db, hasDuplicates.PaymentHash, duplicateOneSeqNr, t, db, hasDuplicates.PaymentHash, duplicateOneSeqNr, preimg,
) )
appendDuplicatePayment( appendDuplicatePayment(
t, db, hasDuplicates.PaymentHash, duplicateTwoSeqNr, t, db, hasDuplicates.PaymentHash, duplicateTwoSeqNr, preimg,
) )
tests := []struct { tests := []struct {
@ -634,7 +636,7 @@ func TestFetchPaymentWithSequenceNumber(t *testing.T) {
// This code is *only* intended to replicate legacy duplicate payments in lnd, // This code is *only* intended to replicate legacy duplicate payments in lnd,
// our current schema does not allow duplicates. // our current schema does not allow duplicates.
func appendDuplicatePayment(t *testing.T, db *DB, paymentHash lntypes.Hash, func appendDuplicatePayment(t *testing.T, db *DB, paymentHash lntypes.Hash,
seqNr uint64) { seqNr uint64, preImg lntypes.Preimage) {
err := kvdb.Update(db, func(tx walletdb.ReadWriteTx) error { err := kvdb.Update(db, func(tx walletdb.ReadWriteTx) error {
bucket, err := fetchPaymentBucketUpdate( bucket, err := fetchPaymentBucketUpdate(
@ -658,7 +660,7 @@ func appendDuplicatePayment(t *testing.T, db *DB, paymentHash lntypes.Hash,
// Create duplicate payments for the two dup // Create duplicate payments for the two dup
// sequence numbers we've setup. // sequence numbers we've setup.
putDuplicatePayment(t, dup, sequenceKey[:], paymentHash) putDuplicatePayment(t, dup, sequenceKey[:], paymentHash, preImg)
// Finally, once we have created our entry we add an index for // Finally, once we have created our entry we add an index for
// it. // it.
@ -675,7 +677,8 @@ func appendDuplicatePayment(t *testing.T, db *DB, paymentHash lntypes.Hash,
// putDuplicatePayment creates a duplicate payment in the duplicates bucket // putDuplicatePayment creates a duplicate payment in the duplicates bucket
// provided with the minimal information required for successful reading. // provided with the minimal information required for successful reading.
func putDuplicatePayment(t *testing.T, duplicateBucket kvdb.RwBucket, func putDuplicatePayment(t *testing.T, duplicateBucket kvdb.RwBucket,
sequenceKey []byte, paymentHash lntypes.Hash) { sequenceKey []byte, paymentHash lntypes.Hash,
preImg lntypes.Preimage) {
paymentBucket, err := duplicateBucket.CreateBucketIfNotExists( paymentBucket, err := duplicateBucket.CreateBucketIfNotExists(
sequenceKey, sequenceKey,
@ -711,4 +714,9 @@ func putDuplicatePayment(t *testing.T, duplicateBucket kvdb.RwBucket,
// Get the PaymentCreationInfo. // Get the PaymentCreationInfo.
err = paymentBucket.Put(duplicatePaymentCreationInfoKey, b.Bytes()) err = paymentBucket.Put(duplicatePaymentCreationInfoKey, b.Bytes())
require.NoError(t, err) require.NoError(t, err)
// Duolicate payments are only stored for successes, so add the
// preimage.
err = paymentBucket.Put(duplicatePaymentSettleInfoKey, preImg[:])
require.NoError(t, err)
} }