lnwallet: update TestChanSyncFailure to pass with new borked update restriction
In this commit, we update the `TestChanSyncFailure` method to pass given the new behavior around updating borked channel states. In order to do this, we add a new method to allow the test to clear an existing channel state. This method may be of independent use in other areas in the codebase in the future as well.
This commit is contained in:
2 files changed
+71
-1
No files matched your search
+40
-1
@@ -110,7 +110,7 @@ var (
|
||||
|
||||
// ErrChanBorked is returned when a caller attempts to mutate a borked
|
||||
// channel.
|
||||
ErrChanBorked = fmt.Errorf("channel mutate borked channel")
|
||||
ErrChanBorked = fmt.Errorf("cannot mutate borked channel")
|
||||
)
|
||||
|
||||
// ChannelType is an enum-like type that describes one of several possible
|
||||
@@ -549,6 +549,16 @@ func (c *OpenChannel) ApplyChanStatus(status ChannelStatus) error {
|
||||
return c.putChanStatus(status)
|
||||
}
|
||||
|
||||
// ClearChanStatus allows the caller to clear a particular channel status from
|
||||
// the primary channel status bit field. After this method returns, a call to
|
||||
// HasChanStatus(status) should return false.
|
||||
func (c *OpenChannel) ClearChanStatus(status ChannelStatus) error {
|
||||
c.Lock()
|
||||
defer c.Unlock()
|
||||
|
||||
return c.clearChanStatus(status)
|
||||
}
|
||||
|
||||
// HasChanStatus returns true if the internal bitfield channel status of the
|
||||
// target channel has the specified status bit set.
|
||||
func (c *OpenChannel) HasChanStatus(status ChannelStatus) bool {
|
||||
@@ -864,6 +874,35 @@ func (c *OpenChannel) putChanStatus(status ChannelStatus) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *OpenChannel) clearChanStatus(status ChannelStatus) error {
|
||||
if err := c.Db.Update(func(tx *bbolt.Tx) error {
|
||||
chanBucket, err := fetchChanBucket(
|
||||
tx, c.IdentityPub, &c.FundingOutpoint, c.ChainHash,
|
||||
)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
channel, err := fetchOpenChannel(chanBucket, &c.FundingOutpoint)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Unset this bit in the bitvector on disk.
|
||||
status = channel.chanStatus & ^status
|
||||
channel.chanStatus = status
|
||||
|
||||
return putOpenChannel(chanBucket, channel)
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Update the in-memory representation to keep it in sync with the DB.
|
||||
c.chanStatus = status
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// putChannel serializes, and stores the current state of the channel in its
|
||||
// entirety.
|
||||
func putOpenChannel(chanBucket *bbolt.Bucket, channel *OpenChannel) error {
|
||||
|
||||
Reference in new issue
Block a user