lnd_test: add AbandonChannel test
This commit is contained in:
parent
ab67b9a4de
commit
a75b0c871b
101
lnd_test.go
101
lnd_test.go
@ -12009,6 +12009,103 @@ func testSendUpdateDisableChannel(net *lntest.NetworkHarness, t *harnessTest) {
|
|||||||
mineBlocks(t, net, 1)
|
mineBlocks(t, net, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// testAbandonChannel abandones a channel and asserts that it is no
|
||||||
|
// longer open and not in one of the pending closure states. It also
|
||||||
|
// verifies that the abandoned channel is reported as closed with close
|
||||||
|
// type 'abandoned'.
|
||||||
|
func testAbandonChannel(net *lntest.NetworkHarness, t *harnessTest) {
|
||||||
|
timeout := time.Duration(time.Second * 5)
|
||||||
|
ctxb := context.Background()
|
||||||
|
|
||||||
|
// First establish a channel between Alice and Bob.
|
||||||
|
ctxt, _ := context.WithTimeout(ctxb, timeout)
|
||||||
|
|
||||||
|
channelParam := lntest.OpenChannelParams{
|
||||||
|
Amt: maxBtcFundingAmount,
|
||||||
|
PushAmt: btcutil.Amount(100000),
|
||||||
|
}
|
||||||
|
|
||||||
|
chanPoint := openChannelAndAssert(
|
||||||
|
ctxt, t, net, net.Alice, net.Bob, channelParam)
|
||||||
|
|
||||||
|
// Wait for channel to be confirmed open.
|
||||||
|
ctxt, _ = context.WithTimeout(ctxb, time.Second*15)
|
||||||
|
err := net.Alice.WaitForNetworkChannelOpen(ctxt, chanPoint)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("alice didn't report channel: %v", err)
|
||||||
|
}
|
||||||
|
err = net.Bob.WaitForNetworkChannelOpen(ctxt, chanPoint)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("bob didn't report channel: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Send request to abandon channel.
|
||||||
|
abandonChannelRequest := &lnrpc.AbandonChannelRequest{
|
||||||
|
ChannelPoint: chanPoint,
|
||||||
|
}
|
||||||
|
|
||||||
|
ctxt, _ = context.WithTimeout(ctxb, timeout)
|
||||||
|
_, err = net.Alice.AbandonChannel(ctxt, abandonChannelRequest)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("unable to abandon channel: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Assert that channel in no longer open.
|
||||||
|
listReq := &lnrpc.ListChannelsRequest{}
|
||||||
|
aliceChannelList, err := net.Alice.ListChannels(ctxb, listReq)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("unable to list channels: %v", err)
|
||||||
|
}
|
||||||
|
if len(aliceChannelList.Channels) != 0 {
|
||||||
|
t.Fatalf("alice should only have no channels open, "+
|
||||||
|
"instead she has %v",
|
||||||
|
len(aliceChannelList.Channels))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Assert that channel is not pending closure.
|
||||||
|
pendingReq := &lnrpc.PendingChannelsRequest{}
|
||||||
|
alicePendingList, err := net.Alice.PendingChannels(ctxb, pendingReq)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("unable to list pending channels: %v", err)
|
||||||
|
}
|
||||||
|
if len(alicePendingList.PendingClosingChannels) != 0 {
|
||||||
|
t.Fatalf("alice should only have no pending closing channels, "+
|
||||||
|
"instead she has %v",
|
||||||
|
len(alicePendingList.PendingClosingChannels))
|
||||||
|
}
|
||||||
|
if len(alicePendingList.PendingForceClosingChannels) != 0 {
|
||||||
|
t.Fatalf("alice should only have no pending force closing "+
|
||||||
|
"channels instead she has %v",
|
||||||
|
len(alicePendingList.PendingForceClosingChannels))
|
||||||
|
}
|
||||||
|
if len(alicePendingList.WaitingCloseChannels) != 0 {
|
||||||
|
t.Fatalf("alice should only have no waiting close "+
|
||||||
|
"channels instead she has %v",
|
||||||
|
len(alicePendingList.WaitingCloseChannels))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Assert that channel is listed as abandoned.
|
||||||
|
closedReq := &lnrpc.ClosedChannelsRequest{
|
||||||
|
Abandoned: true,
|
||||||
|
}
|
||||||
|
aliceClosedList, err := net.Alice.ClosedChannels(ctxb, closedReq)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("unable to list closed channels: %v", err)
|
||||||
|
}
|
||||||
|
if len(aliceClosedList.Channels) != 1 {
|
||||||
|
t.Fatalf("alice should only have a single abandoned channel, "+
|
||||||
|
"instead she has %v",
|
||||||
|
len(aliceClosedList.Channels))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Now that we're done with the test, the channel can be closed. This is
|
||||||
|
// necessary to avoid unexpected outcomes of other tests that use Bob's
|
||||||
|
// lnd instance.
|
||||||
|
ctxt, _ = context.WithTimeout(ctxb, timeout)
|
||||||
|
closeChannelAndAssert(ctxt, t, net, net.Bob, chanPoint, true)
|
||||||
|
}
|
||||||
|
|
||||||
type testCase struct {
|
type testCase struct {
|
||||||
name string
|
name string
|
||||||
test func(net *lntest.NetworkHarness, t *harnessTest)
|
test func(net *lntest.NetworkHarness, t *harnessTest)
|
||||||
@ -12196,6 +12293,10 @@ var testsCases = []*testCase{
|
|||||||
name: "garbage collect link nodes",
|
name: "garbage collect link nodes",
|
||||||
test: testGarbageCollectLinkNodes,
|
test: testGarbageCollectLinkNodes,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "abandonchannel",
|
||||||
|
test: testAbandonChannel,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "revoked uncooperative close retribution zero value remote output",
|
name: "revoked uncooperative close retribution zero value remote output",
|
||||||
test: testRevokedCloseRetributionZeroValueRemoteOutput,
|
test: testRevokedCloseRetributionZeroValueRemoteOutput,
|
||||||
|
Loading…
Reference in New Issue
Block a user