itest+lntest: let abandoned channel be either not found or in zombie

index

When abandoning a channel, we remove it from the graph and then add it
to the zombie channel index. However, if we then process a ChannelUpdate
for this channel it will result in us calling `processZombieUpdate`
which will delete the edge from the zombie index. The abandon channel
itest currently asserts that a channel is no longer in the graph by
asserting that when querying for the channel we get a "marked as zombie"
error but to account for the above series of operations, we now also
allow it to just not be found at all ("edge not found").
This commit is contained in:
Elle Mouton 2024-06-13 10:31:22 -04:00
parent cbe1c150da
commit f3cdbbed2f
No known key found for this signature in database
GPG key ID: D7D916376026F177
2 changed files with 32 additions and 1 deletions

View file

@ -729,7 +729,7 @@ func testAbandonChannel(ht *lntest.HarnessTest) {
require.Len(ht, aliceClosedList.Channels, 1, "alice closed channels")
// Ensure that the channel can no longer be found in the channel graph.
ht.AssertZombieChannel(alice, chanID)
ht.AssertNotInGraph(alice, chanID)
// Make sure the channel is no longer in the channel backup list.
err = wait.NoError(func() error {

View file

@ -1820,6 +1820,37 @@ func (h *HarnessTest) AssertZombieChannel(hn *node.HarnessNode, chanID uint64) {
require.NoError(h, err, "timeout while checking zombie channel")
}
// AssertNotInGraph asserts that a given channel is either not found at all in
// the graph or that it has been marked as a zombie.
func (h *HarnessTest) AssertNotInGraph(hn *node.HarnessNode, chanID uint64) {
ctxt, cancel := context.WithTimeout(h.runCtx, DefaultTimeout)
defer cancel()
err := wait.NoError(func() error {
_, err := hn.RPC.LN.GetChanInfo(
ctxt, &lnrpc.ChanInfoRequest{ChanId: chanID},
)
if err == nil {
return fmt.Errorf("expected error but got nil")
}
switch {
case strings.Contains(err.Error(), "marked as zombie"):
return nil
case strings.Contains(err.Error(), "edge not found"):
return nil
default:
return fmt.Errorf("expected error to contain either "+
"'%s' or '%s' but was: '%v'", "marked as i"+
"zombie", "edge not found", err)
}
}, DefaultTimeout)
require.NoError(h, err, "timeout while checking that channel is not "+
"found in graph")
}
// AssertTxAtHeight gets all of the transactions that a node's wallet has a
// record of at the target height, and finds and returns the tx with the target
// txid, failing if it is not found.