Files
lnd/itest/lnd_delete_canceled_invoice_test.go

100 lines
2.8 KiB
Go

package itest
import (
"bytes"
"github.com/lightningnetwork/lnd/invoices"
"github.com/lightningnetwork/lnd/lnrpc"
"github.com/lightningnetwork/lnd/lntest"
"github.com/lightningnetwork/lnd/lntypes"
"github.com/stretchr/testify/require"
)
func testDeleteCanceledInvoice(ht *lntest.HarnessTest) {
bob := ht.NewNode("bob", nil)
// Create 2 invoices for Bob.
const numInvoices = 2
invoiceResp := make([]*lnrpc.AddInvoiceResponse, numInvoices)
for i := range numInvoices {
// Create a unique 32-byte preimage for each invoice.
preimage := bytes.Repeat([]byte{byte(i + 1)}, 32)
invoice := &lnrpc.Invoice{
RPreimage: preimage,
Value: paymentAmt,
}
invoiceResp[i] = bob.RPC.AddInvoice(invoice)
}
// Cancel all invoices except the last one.
for i := range numInvoices - 1 {
bob.RPC.CancelInvoice(invoiceResp[i].RHash)
}
// Let's assert an error while providing no invoice hash.
bob.RPC.DeleteCanceledInvoiceAssertErr(
&lnrpc.DelCanceledInvoiceReq{},
invoices.ErrNoInvoiceHash.Error(),
)
// Let's assert an error while providing a hash with an invalid length.
bob.RPC.DeleteCanceledInvoiceAssertErr(
&lnrpc.DelCanceledInvoiceReq{InvoiceHash: "bb02fbfa62983b6b62"},
"invalid hash string length",
)
// Let's assert an error is returned for a hash with invalid encoding.
bob.RPC.DeleteCanceledInvoiceAssertErr(
&lnrpc.DelCanceledInvoiceReq{
InvoiceHash: "bb02fbfa62983b6b621376bf8230732dd3a6dce" +
"a9f5df803c0935ae6ce7440dg",
}, "encoding/hex: invalid byte",
)
// Let's delete one canceled invoice.
invoiceToDelete := lntypes.Hash(invoiceResp[0].RHash).String()
resp := bob.RPC.DeleteCanceledInvoice(
&lnrpc.DelCanceledInvoiceReq{InvoiceHash: invoiceToDelete},
)
require.Contains(
ht, resp.String(), "canceled invoice deleted successfully",
)
respList := bob.RPC.ListInvoices(&lnrpc.ListInvoiceRequest{})
// Assert that the invoice was deleted.
require.Len(ht, respList.Invoices, numInvoices-1)
// Let's assert an error while deleting a non-existent invoice.
bob.RPC.DeleteCanceledInvoiceAssertErr(
&lnrpc.DelCanceledInvoiceReq{InvoiceHash: invoiceToDelete},
invoices.ErrInvoiceNotFound.Error(),
)
// Let's assert an error while deleting a non canceled invoice.
notCanceledInvoice := lntypes.Hash(invoiceResp[numInvoices-1].RHash).
String()
bob.RPC.DeleteCanceledInvoiceAssertErr(
&lnrpc.DelCanceledInvoiceReq{InvoiceHash: notCanceledInvoice},
invoices.ErrInvoiceNotCanceled.Error(),
)
// Assert that the last invoice in the invoiceResp is still present and
// OPEN.
respList = bob.RPC.ListInvoices(&lnrpc.ListInvoiceRequest{})
require.Equal(
ht, invoiceResp[numInvoices-1].RHash,
respList.Invoices[0].RHash,
)
require.Equal(ht, lnrpc.Invoice_OPEN, respList.Invoices[0].State)
// Assert that just one invoice exists.
require.Len(ht, respList.Invoices, 1)
}