lnwallet/chancloser: add unit tests for new rbf coop close

This commit is contained in:
Olaoluwa Osuntokun 2024-02-28 20:29:37 -06:00
parent c8ce507192
commit d0a13d8cfd
3 changed files with 1818 additions and 1 deletions

View File

@ -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,
)

170
lnwallet/chancloser/mock.go Normal file
View File

@ -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)
}

File diff suppressed because it is too large Load Diff