Skip to content

Commit

Permalink
lnwallet/chancloser: add unit tests for new rbf coop close
Browse files Browse the repository at this point in the history
  • Loading branch information
Roasbeef committed Nov 22, 2024
1 parent b498e54 commit f8b9c69
Show file tree
Hide file tree
Showing 3 changed files with 1,818 additions and 1 deletion.
2 changes: 1 addition & 1 deletion lnwallet/chancloser/chancloser_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ func TestMaybeMatchScript(t *testing.T) {
t.Parallel()

err := validateShutdownScript(
func() error { return nil }, test.upfrontScript,
test.upfrontScript,
test.shutdownScript, &chaincfg.SimNetParams,
)

Expand Down
170 changes: 170 additions & 0 deletions lnwallet/chancloser/mock.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
package chancloser

import (
"sync/atomic"

"github.com/btcsuite/btcd/btcec/v2"
"github.com/btcsuite/btcd/btcutil"
"github.com/btcsuite/btcd/chaincfg/chainhash"
"github.com/btcsuite/btcd/wire"
"github.com/lightningnetwork/lnd/chainntnfs"
"github.com/lightningnetwork/lnd/channeldb"
"github.com/lightningnetwork/lnd/fn"
"github.com/lightningnetwork/lnd/lnwallet/chainfee"
"github.com/lightningnetwork/lnd/lnwire"
"github.com/stretchr/testify/mock"

"github.com/lightningnetwork/lnd/input"
"github.com/lightningnetwork/lnd/lnwallet"
)

type dummyAdapters struct {
mock.Mock

msgSent atomic.Bool

confChan chan *chainntnfs.TxConfirmation
spendChan chan *chainntnfs.SpendDetail
}

func newDaemonAdapters() *dummyAdapters {
return &dummyAdapters{
confChan: make(chan *chainntnfs.TxConfirmation, 1),
spendChan: make(chan *chainntnfs.SpendDetail, 1),
}
}

func (d *dummyAdapters) SendMessages(pub btcec.PublicKey,
msgs []lnwire.Message) error {

defer d.msgSent.Store(true)

args := d.Called(pub, msgs)

return args.Error(0)
}

func (d *dummyAdapters) BroadcastTransaction(tx *wire.MsgTx,
label string) error {

args := d.Called(tx, label)

return args.Error(0)
}

func (d *dummyAdapters) DisableChannel(op wire.OutPoint) error {
args := d.Called(op)

return args.Error(0)
}

func (d *dummyAdapters) RegisterConfirmationsNtfn(txid *chainhash.Hash,
pkScript []byte, numConfs, heightHint uint32,
opts ...chainntnfs.NotifierOption,
) (*chainntnfs.ConfirmationEvent, error) {

args := d.Called(txid, pkScript, numConfs)

err := args.Error(0)

return &chainntnfs.ConfirmationEvent{
Confirmed: d.confChan,
}, err
}

func (d *dummyAdapters) RegisterSpendNtfn(outpoint *wire.OutPoint,
pkScript []byte, heightHint uint32) (*chainntnfs.SpendEvent, error) {

args := d.Called(outpoint, pkScript, heightHint)

err := args.Error(0)

return &chainntnfs.SpendEvent{
Spend: d.spendChan,
}, err
}

type mockFeeEstimator struct {
mock.Mock
}

func (m *mockFeeEstimator) EstimateFee(chanType channeldb.ChannelType,
localTxOut, remoteTxOut *wire.TxOut,
idealFeeRate chainfee.SatPerKWeight) btcutil.Amount {

args := m.Called(chanType, localTxOut, remoteTxOut, idealFeeRate)
return args.Get(0).(btcutil.Amount)
}

type mockChanObserver struct {
mock.Mock
}

func (m *mockChanObserver) NoDanglingUpdates() bool {
args := m.Called()
return args.Bool(0)
}

func (m *mockChanObserver) DisableIncomingAdds() error {
args := m.Called()
return args.Error(0)
}

func (m *mockChanObserver) DisableOutgoingAdds() error {
args := m.Called()
return args.Error(0)
}

func (m *mockChanObserver) MarkCoopBroadcasted(txn *wire.MsgTx,
local bool) error {

args := m.Called(txn, local)
return args.Error(0)
}

func (m *mockChanObserver) MarkShutdownSent(deliveryAddr []byte, isInitiator bool) error {
args := m.Called(deliveryAddr, isInitiator)
return args.Error(0)
}

func (m *mockChanObserver) FinalBalances() fn.Option[ShutdownBalances] {
args := m.Called()
return args.Get(0).(fn.Option[ShutdownBalances])
}

type mockErrorReporter struct {
mock.Mock
}

func (m *mockErrorReporter) ReportError(err error) {
m.Called(err)
}

type mockCloseSigner struct {
mock.Mock
}

func (m *mockCloseSigner) CreateCloseProposal(fee btcutil.Amount,
localScript []byte, remoteScript []byte,
closeOpt ...lnwallet.ChanCloseOpt) (
input.Signature, *chainhash.Hash, btcutil.Amount, error) {

args := m.Called(fee, localScript, remoteScript, closeOpt)

return args.Get(0).(input.Signature), args.Get(1).(*chainhash.Hash),
args.Get(2).(btcutil.Amount), args.Error(3)
}

func (m *mockCloseSigner) CompleteCooperativeClose(localSig,
remoteSig input.Signature,
localScript, remoteScript []byte,
fee btcutil.Amount, closeOpt ...lnwallet.ChanCloseOpt,
) (*wire.MsgTx, btcutil.Amount, error) {

args := m.Called(
localSig, remoteSig, localScript, remoteScript, fee, closeOpt,
)

return args.Get(0).(*wire.MsgTx), args.Get(1).(btcutil.Amount),
args.Error(2)
}
Loading

0 comments on commit f8b9c69

Please sign in to comment.