lnd/itest/lnd_htlc_test.go
yyforyongyu 72f3f41d41
itest: remove unnecessary channel close and node shutdown
Since we don't have standby nodes anymore, we don't need to close the
channels when the test finishes. Previously we would do so to make sure
the standby nodes have a clean state for the next test case, which is no
longer relevant.
2024-12-20 19:38:06 +08:00

71 lines
2 KiB
Go

package itest
import (
"github.com/btcsuite/btcd/btcutil"
"github.com/lightningnetwork/lnd/lnrpc"
"github.com/lightningnetwork/lnd/lntest"
"github.com/stretchr/testify/require"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
)
// testLookupHtlcResolution checks that `LookupHtlcResolution` returns the
// correct HTLC information.
func testLookupHtlcResolution(ht *lntest.HarnessTest) {
const chanAmt = btcutil.Amount(1000000)
alice := ht.NewNodeWithCoins("Alice", nil)
carol := ht.NewNode("Carol", []string{
"--store-final-htlc-resolutions",
})
ht.EnsureConnected(alice, carol)
// Open a channel between Alice and Carol.
cp := ht.OpenChannel(
alice, carol, lntest.OpenChannelParams{Amt: chanAmt},
)
// Channel should be ready for payments.
const payAmt = 100
// Create an invoice.
invoice := &lnrpc.Invoice{
Memo: "alice to carol htlc lookup",
RPreimage: ht.Random32Bytes(),
Value: payAmt,
}
// Carol adds the invoice to her database.
resp := carol.RPC.AddInvoice(invoice)
// Subscribe the invoice.
stream := carol.RPC.SubscribeSingleInvoice(resp.RHash)
// Alice pays Carol's invoice.
ht.CompletePaymentRequests(alice, []string{resp.PaymentRequest})
// Carol waits until the invoice is settled.
ht.AssertInvoiceState(stream, lnrpc.Invoice_SETTLED)
// Get the channel using the assert function.
//
// TODO(yy): make `ht.OpenChannel` return lnrpc.Channel instead of
// lnrpc.ChannelPoint.
channel := ht.AssertChannelExists(carol, cp)
// Lookup the HTLC and assert the htlc is settled offchain.
req := &lnrpc.LookupHtlcResolutionRequest{
ChanId: channel.ChanId,
HtlcIndex: 0,
}
// Check that Alice will get an error from LookupHtlcResolution.
err := alice.RPC.LookupHtlcResolutionAssertErr(req)
gErr := status.Convert(err)
require.Equal(ht, codes.Unavailable, gErr.Code())
// Check that Carol can get the final htlc info.
finalHTLC := carol.RPC.LookupHtlcResolution(req)
require.True(ht, finalHTLC.Settled, "htlc should be settled")
require.True(ht, finalHTLC.Offchain, "htlc should be Offchain")
}