channeldb: add new test for duplicate invoice settles
In this commit, we add a new test to ensure that duplicate invoice settles work as expected. At the present time, this test will fail as the second to last assertion fails as we'll return a nil invoice the second time around.
This commit is contained in:
parent
6dff599d21
commit
509998db86
@ -314,3 +314,64 @@ func TestInvoiceAddTimeSeries(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TestDuplicateSettleInvoice tests that if we add a new invoice and settle it
|
||||||
|
// twice, then the second time we also receive the invoice that we settled as a
|
||||||
|
// return argument.
|
||||||
|
func TestDuplicateSettleInvoice(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
db, cleanUp, err := makeTestDB()
|
||||||
|
defer cleanUp()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("unable to make test db: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// We'll start out by creating an invoice and writing it to the DB.
|
||||||
|
amt := lnwire.NewMSatFromSatoshis(1000)
|
||||||
|
invoice, err := randInvoice(amt)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("unable to create invoice: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := db.AddInvoice(invoice); err != nil {
|
||||||
|
t.Fatalf("unable to add invoice %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// With the invoice in the DB, we'll now attempt to settle the invoice.
|
||||||
|
payHash := sha256.Sum256(invoice.Terms.PaymentPreimage[:])
|
||||||
|
dbInvoice, err := db.SettleInvoice(payHash, amt)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("unable to settle invoice: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// We'll update what we expect the settle invoice to be so that our
|
||||||
|
// comparison below has the correct assumption.
|
||||||
|
invoice.SettleIndex = 1
|
||||||
|
invoice.Terms.Settled = true
|
||||||
|
invoice.AmtPaid = amt
|
||||||
|
invoice.SettleDate = dbInvoice.SettleDate
|
||||||
|
|
||||||
|
// We should get back the exact same invoice that we just inserted.
|
||||||
|
if !reflect.DeepEqual(dbInvoice, invoice) {
|
||||||
|
t.Fatalf("wrong invoice after settle, expected %v got %v",
|
||||||
|
spew.Sdump(invoice), spew.Sdump(dbInvoice))
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we try to settle the invoice again, then we should get the very
|
||||||
|
// same invoice back.
|
||||||
|
dbInvoice, err = db.SettleInvoice(payHash, amt)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("unable to settle invoice: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if dbInvoice == nil {
|
||||||
|
t.Fatalf("invoice from db is nil after settle!")
|
||||||
|
}
|
||||||
|
|
||||||
|
invoice.SettleDate = dbInvoice.SettleDate
|
||||||
|
if !reflect.DeepEqual(dbInvoice, invoice) {
|
||||||
|
t.Fatalf("wrong invoice after second settle, expected %v got %v",
|
||||||
|
spew.Sdump(invoice), spew.Sdump(dbInvoice))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user