From 49d8f04197edde50bfcd53266d21f9e78dccf47d Mon Sep 17 00:00:00 2001 From: eugene Date: Wed, 26 Aug 2020 14:18:02 -0400 Subject: [PATCH] multi: migrate instances of mockSigner to the mock package This commit moves all localized instances of mock implementations of the Signer interface to the lntest/mock package. This allows us to remove a lot of code and have it housed under a single interface in many cases. --- breacharbiter_test.go | 7 +- contractcourt/htlc_timeout_resolver_test.go | 31 +---- discovery/gossiper_test.go | 36 ++---- fundingmanager_test.go | 5 +- htlcswitch/mock.go | 63 ---------- htlcswitch/test_utils.go | 5 +- lntest/mock/signer.go | 127 ++++++++++++++++++++ mock.go | 65 ---------- peer/test_utils.go | 71 +---------- sweep/sweeper_test.go | 3 +- sweep/test_utils.go | 27 ----- sweep/walletsweep_test.go | 3 +- 12 files changed, 156 insertions(+), 287 deletions(-) create mode 100644 lntest/mock/signer.go diff --git a/breacharbiter_test.go b/breacharbiter_test.go index 01d9daf7..43678084 100644 --- a/breacharbiter_test.go +++ b/breacharbiter_test.go @@ -29,6 +29,7 @@ import ( "github.com/lightningnetwork/lnd/htlcswitch" "github.com/lightningnetwork/lnd/input" "github.com/lightningnetwork/lnd/keychain" + "github.com/lightningnetwork/lnd/lntest/mock" "github.com/lightningnetwork/lnd/lntest/wait" "github.com/lightningnetwork/lnd/lnwallet" "github.com/lightningnetwork/lnd/lnwallet/chainfee" @@ -1670,7 +1671,7 @@ func createTestArbiter(t *testing.T, contractBreaches chan *ContractBreachEvent, aliceKeyPriv, _ := btcec.PrivKeyFromBytes(btcec.S256(), alicesPrivKey) - signer := &mockSigner{key: aliceKeyPriv} + signer := &mock.SingleSigner{Privkey: aliceKeyPriv} // Assemble our test arbiter. notifier := makeMockSpendNotifier() @@ -1897,8 +1898,8 @@ func createInitChannels(revocationWindow int) (*lnwallet.LightningChannel, *lnwa Packager: channeldb.NewChannelPackager(shortChanID), } - aliceSigner := &mockSigner{aliceKeyPriv} - bobSigner := &mockSigner{bobKeyPriv} + aliceSigner := &mock.SingleSigner{Privkey: aliceKeyPriv} + bobSigner := &mock.SingleSigner{Privkey: bobKeyPriv} alicePool := lnwallet.NewSigPool(1, aliceSigner) channelAlice, err := lnwallet.NewLightningChannel( diff --git a/contractcourt/htlc_timeout_resolver_test.go b/contractcourt/htlc_timeout_resolver_test.go index fdf0bba5..5f1d2df1 100644 --- a/contractcourt/htlc_timeout_resolver_test.go +++ b/contractcourt/htlc_timeout_resolver_test.go @@ -7,7 +7,6 @@ import ( "testing" "time" - "github.com/btcsuite/btcd/btcec" "github.com/btcsuite/btcd/txscript" "github.com/btcsuite/btcd/wire" "github.com/btcsuite/btcutil" @@ -15,33 +14,11 @@ import ( "github.com/lightningnetwork/lnd/channeldb" "github.com/lightningnetwork/lnd/channeldb/kvdb" "github.com/lightningnetwork/lnd/input" + "github.com/lightningnetwork/lnd/lntest/mock" "github.com/lightningnetwork/lnd/lntypes" "github.com/lightningnetwork/lnd/lnwallet" ) -type dummySignature struct{} - -func (s *dummySignature) Serialize() []byte { - return []byte{} -} - -func (s *dummySignature) Verify(_ []byte, _ *btcec.PublicKey) bool { - return true -} - -type mockSigner struct { -} - -func (m *mockSigner) SignOutputRaw(tx *wire.MsgTx, - signDesc *input.SignDescriptor) (input.Signature, error) { - return &dummySignature{}, nil -} - -func (m *mockSigner) ComputeInputScript(tx *wire.MsgTx, - signDesc *input.SignDescriptor) (*input.Script, error) { - return nil, nil -} - type mockWitnessBeacon struct { preImageUpdates chan lntypes.Preimage newPreimages chan []lntypes.Preimage @@ -93,7 +70,7 @@ func TestHtlcTimeoutResolver(t *testing.T) { copy(fakePreimage[:], fakePreimageBytes) - signer := &mockSigner{} + signer := &mock.DummySigner{} sweepTx := &wire.MsgTx{ TxIn: []*wire.TxIn{ { @@ -164,7 +141,7 @@ func TestHtlcTimeoutResolver(t *testing.T) { timeout: true, txToBroadcast: func() (*wire.MsgTx, error) { witness, err := input.SenderHtlcSpendTimeout( - &dummySignature{}, txscript.SigHashAll, + &mock.DummySignature{}, txscript.SigHashAll, signer, fakeSignDesc, sweepTx, ) if err != nil { @@ -189,7 +166,7 @@ func TestHtlcTimeoutResolver(t *testing.T) { timeout: false, txToBroadcast: func() (*wire.MsgTx, error) { witness, err := input.ReceiverHtlcSpendRedeem( - &dummySignature{}, txscript.SigHashAll, + &mock.DummySignature{}, txscript.SigHashAll, fakePreimageBytes, signer, fakeSignDesc, sweepTx, ) diff --git a/discovery/gossiper_test.go b/discovery/gossiper_test.go index 5281d4aa..9dfad6ba 100644 --- a/discovery/gossiper_test.go +++ b/discovery/gossiper_test.go @@ -23,8 +23,8 @@ import ( "github.com/go-errors/errors" "github.com/lightningnetwork/lnd/chainntnfs" "github.com/lightningnetwork/lnd/channeldb" - "github.com/lightningnetwork/lnd/input" "github.com/lightningnetwork/lnd/lnpeer" + "github.com/lightningnetwork/lnd/lntest/mock" "github.com/lightningnetwork/lnd/lntest/wait" "github.com/lightningnetwork/lnd/lnwire" "github.com/lightningnetwork/lnd/netann" @@ -92,26 +92,6 @@ func makeTestDB() (*channeldb.DB, func(), error) { return cdb, cleanUp, nil } -type mockSigner struct { - privKey *btcec.PrivateKey -} - -func (n *mockSigner) SignMessage(pubKey *btcec.PublicKey, - msg []byte) (input.Signature, error) { - - if !pubKey.IsEqual(n.privKey.PubKey()) { - return nil, fmt.Errorf("unknown public key") - } - - digest := chainhash.DoubleHashB(msg) - sign, err := n.privKey.Sign(digest) - if err != nil { - return nil, fmt.Errorf("can't sign the message: %v", err) - } - - return sign, nil -} - type mockGraphSource struct { bestHeight uint32 @@ -555,7 +535,7 @@ func createNodeAnnouncement(priv *btcec.PrivateKey, a.ExtraOpaqueData = extraBytes[0] } - signer := mockSigner{priv} + signer := mock.SingleSigner{Privkey: priv} sig, err := netann.SignAnnouncement(&signer, priv.PubKey(), a) if err != nil { return nil, err @@ -607,7 +587,7 @@ func createUpdateAnnouncement(blockHeight uint32, func signUpdate(nodeKey *btcec.PrivateKey, a *lnwire.ChannelUpdate) error { pub := nodeKey.PubKey() - signer := mockSigner{nodeKey} + signer := mock.SingleSigner{Privkey: nodeKey} sig, err := netann.SignAnnouncement(&signer, pub, a) if err != nil { return err @@ -649,7 +629,7 @@ func createRemoteChannelAnnouncement(blockHeight uint32, a := createAnnouncementWithoutProof(blockHeight, extraBytes...) pub := nodeKeyPriv1.PubKey() - signer := mockSigner{nodeKeyPriv1} + signer := mock.SingleSigner{Privkey: nodeKeyPriv1} sig, err := netann.SignAnnouncement(&signer, pub, a) if err != nil { return nil, err @@ -660,7 +640,7 @@ func createRemoteChannelAnnouncement(blockHeight uint32, } pub = nodeKeyPriv2.PubKey() - signer = mockSigner{nodeKeyPriv2} + signer = mock.SingleSigner{Privkey: nodeKeyPriv2} sig, err = netann.SignAnnouncement(&signer, pub, a) if err != nil { return nil, err @@ -671,7 +651,7 @@ func createRemoteChannelAnnouncement(blockHeight uint32, } pub = bitcoinKeyPriv1.PubKey() - signer = mockSigner{bitcoinKeyPriv1} + signer = mock.SingleSigner{Privkey: bitcoinKeyPriv1} sig, err = netann.SignAnnouncement(&signer, pub, a) if err != nil { return nil, err @@ -682,7 +662,7 @@ func createRemoteChannelAnnouncement(blockHeight uint32, } pub = bitcoinKeyPriv2.PubKey() - signer = mockSigner{bitcoinKeyPriv2} + signer = mock.SingleSigner{Privkey: bitcoinKeyPriv2} sig, err = netann.SignAnnouncement(&signer, pub, a) if err != nil { return nil, err @@ -761,7 +741,7 @@ func createTestCtx(startHeight uint32) (*testCtx, func(), error) { RotateTicker: ticker.NewForce(DefaultSyncerRotationInterval), HistoricalSyncTicker: ticker.NewForce(DefaultHistoricalSyncInterval), NumActiveSyncers: 3, - AnnSigner: &mockSigner{nodeKeyPriv1}, + AnnSigner: &mock.SingleSigner{Privkey: nodeKeyPriv1}, SubBatchDelay: time.Second * 5, MinimumBatchSize: 10, }, nodeKeyPub1) diff --git a/fundingmanager_test.go b/fundingmanager_test.go index 0bc0e304..b3446663 100644 --- a/fundingmanager_test.go +++ b/fundingmanager_test.go @@ -33,6 +33,7 @@ import ( "github.com/lightningnetwork/lnd/keychain" "github.com/lightningnetwork/lnd/lnpeer" "github.com/lightningnetwork/lnd/lnrpc" + "github.com/lightningnetwork/lnd/lntest/mock" "github.com/lightningnetwork/lnd/lnwallet" "github.com/lightningnetwork/lnd/lnwallet/chainfee" "github.com/lightningnetwork/lnd/lnwire" @@ -301,8 +302,8 @@ func createTestFundingManager(t *testing.T, privKey *btcec.PrivateKey, wc := &mockWalletController{ rootKey: alicePrivKey, } - signer := &mockSigner{ - key: alicePrivKey, + signer := &mock.SingleSigner{ + Privkey: alicePrivKey, } bio := &mockChainIO{ bestHeight: fundingBroadcastHeight, diff --git a/htlcswitch/mock.go b/htlcswitch/mock.go index 7c169ac7..be06ebd5 100644 --- a/htlcswitch/mock.go +++ b/htlcswitch/mock.go @@ -16,7 +16,6 @@ import ( "github.com/btcsuite/btcd/btcec" "github.com/btcsuite/btcd/chaincfg/chainhash" - "github.com/btcsuite/btcd/txscript" "github.com/btcsuite/btcd/wire" "github.com/go-errors/errors" sphinx "github.com/lightningnetwork/lightning-onion" @@ -25,7 +24,6 @@ import ( "github.com/lightningnetwork/lnd/clock" "github.com/lightningnetwork/lnd/contractcourt" "github.com/lightningnetwork/lnd/htlcswitch/hop" - "github.com/lightningnetwork/lnd/input" "github.com/lightningnetwork/lnd/invoices" "github.com/lightningnetwork/lnd/lnpeer" "github.com/lightningnetwork/lnd/lntypes" @@ -855,67 +853,6 @@ func (i *mockInvoiceRegistry) HodlUnsubscribeAll(subscriber chan<- interface{}) var _ InvoiceDatabase = (*mockInvoiceRegistry)(nil) -type mockSigner struct { - key *btcec.PrivateKey -} - -func (m *mockSigner) SignOutputRaw(tx *wire.MsgTx, - signDesc *input.SignDescriptor) (input.Signature, error) { - - amt := signDesc.Output.Value - witnessScript := signDesc.WitnessScript - privKey := m.key - - if !privKey.PubKey().IsEqual(signDesc.KeyDesc.PubKey) { - return nil, fmt.Errorf("incorrect key passed") - } - - switch { - case signDesc.SingleTweak != nil: - privKey = input.TweakPrivKey(privKey, - signDesc.SingleTweak) - case signDesc.DoubleTweak != nil: - privKey = input.DeriveRevocationPrivKey(privKey, - signDesc.DoubleTweak) - } - - sig, err := txscript.RawTxInWitnessSignature(tx, signDesc.SigHashes, - signDesc.InputIndex, amt, witnessScript, signDesc.HashType, - privKey) - if err != nil { - return nil, err - } - - return btcec.ParseDERSignature(sig[:len(sig)-1], btcec.S256()) -} -func (m *mockSigner) ComputeInputScript(tx *wire.MsgTx, signDesc *input.SignDescriptor) (*input.Script, error) { - - // TODO(roasbeef): expose tweaked signer from lnwallet so don't need to - // duplicate this code? - - privKey := m.key - - switch { - case signDesc.SingleTweak != nil: - privKey = input.TweakPrivKey(privKey, - signDesc.SingleTweak) - case signDesc.DoubleTweak != nil: - privKey = input.DeriveRevocationPrivKey(privKey, - signDesc.DoubleTweak) - } - - witnessScript, err := txscript.WitnessSignature(tx, signDesc.SigHashes, - signDesc.InputIndex, signDesc.Output.Value, signDesc.Output.PkScript, - signDesc.HashType, privKey, true) - if err != nil { - return nil, err - } - - return &input.Script{ - Witness: witnessScript, - }, nil -} - type mockNotifier struct { epochChan chan *chainntnfs.BlockEpoch } diff --git a/htlcswitch/test_utils.go b/htlcswitch/test_utils.go index ae64cf1b..37925ef9 100644 --- a/htlcswitch/test_utils.go +++ b/htlcswitch/test_utils.go @@ -29,6 +29,7 @@ import ( "github.com/lightningnetwork/lnd/input" "github.com/lightningnetwork/lnd/keychain" "github.com/lightningnetwork/lnd/lnpeer" + "github.com/lightningnetwork/lnd/lntest/mock" "github.com/lightningnetwork/lnd/lntest/wait" "github.com/lightningnetwork/lnd/lntypes" "github.com/lightningnetwork/lnd/lnwallet" @@ -376,8 +377,8 @@ func createTestChannel(alicePrivKey, bobPrivKey []byte, os.RemoveAll(alicePath) } - aliceSigner := &mockSigner{aliceKeyPriv} - bobSigner := &mockSigner{bobKeyPriv} + aliceSigner := &mock.SingleSigner{Privkey: aliceKeyPriv} + bobSigner := &mock.SingleSigner{Privkey: bobKeyPriv} alicePool := lnwallet.NewSigPool(runtime.NumCPU(), aliceSigner) channelAlice, err := lnwallet.NewLightningChannel( diff --git a/lntest/mock/signer.go b/lntest/mock/signer.go new file mode 100644 index 00000000..c94d4eeb --- /dev/null +++ b/lntest/mock/signer.go @@ -0,0 +1,127 @@ +package mock + +import ( + "fmt" + + "github.com/btcsuite/btcd/btcec" + "github.com/btcsuite/btcd/chaincfg/chainhash" + "github.com/btcsuite/btcd/txscript" + "github.com/btcsuite/btcd/wire" + + "github.com/lightningnetwork/lnd/input" +) + +// DummySignature is a dummy Signature implementation. +type DummySignature struct{} + +// Serialize returns an empty byte slice. +func (d *DummySignature) Serialize() []byte { + return []byte{} +} + +// Verify always returns true. +func (d *DummySignature) Verify(_ []byte, _ *btcec.PublicKey) bool { + return true +} + +// DummySigner is an implementation of the Signer interface that returns +// dummy values when called. +type DummySigner struct{} + +// SignOutputRaw returns a dummy signature. +func (d *DummySigner) SignOutputRaw(tx *wire.MsgTx, + signDesc *input.SignDescriptor) (input.Signature, error) { + + return &DummySignature{}, nil +} + +// ComputeInputScript returns nil for both values. +func (d *DummySigner) ComputeInputScript(tx *wire.MsgTx, + signDesc *input.SignDescriptor) (*input.Script, error) { + + return &input.Script{}, nil +} + +// SingleSigner is an implementation of the Signer interface that signs +// everything with a single private key. +type SingleSigner struct { + Privkey *btcec.PrivateKey +} + +// SignOutputRaw generates a signature for the passed transaction using the +// stored private key. +func (s *SingleSigner) SignOutputRaw(tx *wire.MsgTx, + signDesc *input.SignDescriptor) (input.Signature, error) { + + amt := signDesc.Output.Value + witnessScript := signDesc.WitnessScript + privKey := s.Privkey + + if !privKey.PubKey().IsEqual(signDesc.KeyDesc.PubKey) { + return nil, fmt.Errorf("incorrect key passed") + } + + switch { + case signDesc.SingleTweak != nil: + privKey = input.TweakPrivKey(privKey, + signDesc.SingleTweak) + case signDesc.DoubleTweak != nil: + privKey = input.DeriveRevocationPrivKey(privKey, + signDesc.DoubleTweak) + } + + sig, err := txscript.RawTxInWitnessSignature(tx, signDesc.SigHashes, + signDesc.InputIndex, amt, witnessScript, signDesc.HashType, + privKey) + if err != nil { + return nil, err + } + + return btcec.ParseDERSignature(sig[:len(sig)-1], btcec.S256()) +} + +// ComputeInputScript computes an input script with the stored private key +// given a transaction and a SignDescriptor. +func (s *SingleSigner) ComputeInputScript(tx *wire.MsgTx, + signDesc *input.SignDescriptor) (*input.Script, error) { + + privKey := s.Privkey + + switch { + case signDesc.SingleTweak != nil: + privKey = input.TweakPrivKey(privKey, + signDesc.SingleTweak) + case signDesc.DoubleTweak != nil: + privKey = input.DeriveRevocationPrivKey(privKey, + signDesc.DoubleTweak) + } + + witnessScript, err := txscript.WitnessSignature(tx, signDesc.SigHashes, + signDesc.InputIndex, signDesc.Output.Value, signDesc.Output.PkScript, + signDesc.HashType, privKey, true) + if err != nil { + return nil, err + } + + return &input.Script{ + Witness: witnessScript, + }, nil +} + +// SignMessage takes a public key and a message and only signs the message +// with the stored private key if the public key matches the private key. +func (s *SingleSigner) SignMessage(pubKey *btcec.PublicKey, + msg []byte) (input.Signature, error) { + + if !pubKey.IsEqual(s.Privkey.PubKey()) { + return nil, fmt.Errorf("unknown public key") + } + + digest := chainhash.DoubleHashB(msg) + sign, err := s.Privkey.Sign(digest) + if err != nil { + return nil, fmt.Errorf("can't sign the message: %v", err) + } + + return sign, nil +} diff --git a/mock.go b/mock.go index 94b9f318..15bb8eac 100644 --- a/mock.go +++ b/mock.go @@ -2,7 +2,6 @@ package lnd import ( "encoding/hex" - "fmt" "sync" "sync/atomic" "time" @@ -10,14 +9,12 @@ import ( "github.com/btcsuite/btcd/btcec" "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/chaincfg/chainhash" - "github.com/btcsuite/btcd/txscript" "github.com/btcsuite/btcd/wire" "github.com/btcsuite/btcutil" "github.com/btcsuite/btcwallet/wallet/txauthor" "github.com/btcsuite/btcwallet/wtxmgr" "github.com/lightningnetwork/lnd/chainntnfs" - "github.com/lightningnetwork/lnd/input" "github.com/lightningnetwork/lnd/keychain" "github.com/lightningnetwork/lnd/lnwallet" "github.com/lightningnetwork/lnd/lnwallet/chainfee" @@ -30,68 +27,6 @@ var ( // The block height returned by the mock BlockChainIO's GetBestBlock. const fundingBroadcastHeight = 123 -type mockSigner struct { - key *btcec.PrivateKey -} - -func (m *mockSigner) SignOutputRaw(tx *wire.MsgTx, - signDesc *input.SignDescriptor) (input.Signature, error) { - amt := signDesc.Output.Value - witnessScript := signDesc.WitnessScript - privKey := m.key - - if !privKey.PubKey().IsEqual(signDesc.KeyDesc.PubKey) { - return nil, fmt.Errorf("incorrect key passed") - } - - switch { - case signDesc.SingleTweak != nil: - privKey = input.TweakPrivKey(privKey, - signDesc.SingleTweak) - case signDesc.DoubleTweak != nil: - privKey = input.DeriveRevocationPrivKey(privKey, - signDesc.DoubleTweak) - } - - sig, err := txscript.RawTxInWitnessSignature(tx, signDesc.SigHashes, - signDesc.InputIndex, amt, witnessScript, signDesc.HashType, - privKey) - if err != nil { - return nil, err - } - - return btcec.ParseDERSignature(sig[:len(sig)-1], btcec.S256()) -} - -func (m *mockSigner) ComputeInputScript(tx *wire.MsgTx, - signDesc *input.SignDescriptor) (*input.Script, error) { - - // TODO(roasbeef): expose tweaked signer from lnwallet so don't need to - // duplicate this code? - - privKey := m.key - - switch { - case signDesc.SingleTweak != nil: - privKey = input.TweakPrivKey(privKey, - signDesc.SingleTweak) - case signDesc.DoubleTweak != nil: - privKey = input.DeriveRevocationPrivKey(privKey, - signDesc.DoubleTweak) - } - - witnessScript, err := txscript.WitnessSignature(tx, signDesc.SigHashes, - signDesc.InputIndex, signDesc.Output.Value, signDesc.Output.PkScript, - signDesc.HashType, privKey, true) - if err != nil { - return nil, err - } - - return &input.Script{ - Witness: witnessScript, - }, nil -} - type mockNotfier struct { confChannel chan *chainntnfs.TxConfirmation } diff --git a/peer/test_utils.go b/peer/test_utils.go index df74eda1..ba3f354f 100644 --- a/peer/test_utils.go +++ b/peer/test_utils.go @@ -4,7 +4,6 @@ import ( "bytes" crand "crypto/rand" "encoding/binary" - "fmt" "io" "io/ioutil" "math/rand" @@ -15,7 +14,6 @@ import ( "github.com/btcsuite/btcd/btcec" "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/chaincfg/chainhash" - "github.com/btcsuite/btcd/txscript" "github.com/btcsuite/btcd/wire" "github.com/btcsuite/btcutil" "github.com/btcsuite/btcwallet/wallet/txauthor" @@ -25,6 +23,7 @@ import ( "github.com/lightningnetwork/lnd/htlcswitch" "github.com/lightningnetwork/lnd/input" "github.com/lightningnetwork/lnd/keychain" + "github.com/lightningnetwork/lnd/lntest/mock" "github.com/lightningnetwork/lnd/lnwallet" "github.com/lightningnetwork/lnd/lnwallet/chainfee" "github.com/lightningnetwork/lnd/lnwire" @@ -103,70 +102,6 @@ var ( // call the setup code with no custom values on the channels set up. var noUpdate = func(a, b *channeldb.OpenChannel) {} -type mockSigner struct { - key *btcec.PrivateKey -} - -func (m *mockSigner) SignOutputRaw(tx *wire.MsgTx, - signDesc *input.SignDescriptor) (input.Signature, error) { - amt := signDesc.Output.Value - witnessScript := signDesc.WitnessScript - privKey := m.key - - if !privKey.PubKey().IsEqual(signDesc.KeyDesc.PubKey) { - return nil, fmt.Errorf("incorrect key passed") - } - - switch { - case signDesc.SingleTweak != nil: - privKey = input.TweakPrivKey(privKey, - signDesc.SingleTweak) - case signDesc.DoubleTweak != nil: - privKey = input.DeriveRevocationPrivKey(privKey, - signDesc.DoubleTweak) - } - - sig, err := txscript.RawTxInWitnessSignature(tx, signDesc.SigHashes, - signDesc.InputIndex, amt, witnessScript, signDesc.HashType, - privKey) - if err != nil { - return nil, err - } - - return btcec.ParseDERSignature(sig[:len(sig)-1], btcec.S256()) -} - -func (m *mockSigner) ComputeInputScript(tx *wire.MsgTx, - signDesc *input.SignDescriptor) (*input.Script, error) { - - // TODO(roasbeef): expose tweaked signer from lnwallet so don't need to - // duplicate this code? - - privKey := m.key - - switch { - case signDesc.SingleTweak != nil: - privKey = input.TweakPrivKey(privKey, - signDesc.SingleTweak) - case signDesc.DoubleTweak != nil: - privKey = input.DeriveRevocationPrivKey(privKey, - signDesc.DoubleTweak) - } - - witnessScript, err := txscript.WitnessSignature(tx, signDesc.SigHashes, - signDesc.InputIndex, signDesc.Output.Value, signDesc.Output.PkScript, - signDesc.HashType, privKey, true) - if err != nil { - return nil, err - } - - return &input.Script{ - Witness: witnessScript, - }, nil -} - -var _ input.Signer = (*mockSigner)(nil) - type mockChainIO struct { bestHeight int32 } @@ -575,8 +510,8 @@ func createTestPeer(notifier chainntnfs.ChainNotifier, os.RemoveAll(alicePath) } - aliceSigner := &mockSigner{aliceKeyPriv} - bobSigner := &mockSigner{bobKeyPriv} + aliceSigner := &mock.SingleSigner{Privkey: aliceKeyPriv} + bobSigner := &mock.SingleSigner{Privkey: bobKeyPriv} alicePool := lnwallet.NewSigPool(1, aliceSigner) channelAlice, err := lnwallet.NewLightningChannel( diff --git a/sweep/sweeper_test.go b/sweep/sweeper_test.go index eaffec40..d7b6ab13 100644 --- a/sweep/sweeper_test.go +++ b/sweep/sweeper_test.go @@ -14,6 +14,7 @@ import ( "github.com/lightningnetwork/lnd/build" "github.com/lightningnetwork/lnd/input" "github.com/lightningnetwork/lnd/keychain" + "github.com/lightningnetwork/lnd/lntest/mock" "github.com/lightningnetwork/lnd/lnwallet" "github.com/lightningnetwork/lnd/lnwallet/chainfee" ) @@ -128,7 +129,7 @@ func createSweeperTestContext(t *testing.T) *sweeperTestContext { return c }, Store: store, - Signer: &mockSigner{}, + Signer: &mock.DummySigner{}, GenSweepScript: func() ([]byte, error) { script := []byte{outputScriptCount} outputScriptCount++ diff --git a/sweep/test_utils.go b/sweep/test_utils.go index 5b83d730..2fd916c8 100644 --- a/sweep/test_utils.go +++ b/sweep/test_utils.go @@ -6,11 +6,9 @@ import ( "testing" "time" - "github.com/btcsuite/btcd/btcec" "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/wire" "github.com/lightningnetwork/lnd/chainntnfs" - "github.com/lightningnetwork/lnd/input" ) var ( @@ -19,31 +17,6 @@ var ( mockChainHeight = int32(100) ) -type dummySignature struct{} - -func (s *dummySignature) Serialize() []byte { - return []byte{} -} - -func (s *dummySignature) Verify(_ []byte, _ *btcec.PublicKey) bool { - return true -} - -type mockSigner struct { -} - -func (m *mockSigner) SignOutputRaw(tx *wire.MsgTx, - signDesc *input.SignDescriptor) (input.Signature, error) { - - return &dummySignature{}, nil -} - -func (m *mockSigner) ComputeInputScript(tx *wire.MsgTx, - signDesc *input.SignDescriptor) (*input.Script, error) { - - return &input.Script{}, nil -} - // MockNotifier simulates the chain notifier for test purposes. This type is // exported because it is used in nursery tests. type MockNotifier struct { diff --git a/sweep/walletsweep_test.go b/sweep/walletsweep_test.go index acd99c6a..4e098757 100644 --- a/sweep/walletsweep_test.go +++ b/sweep/walletsweep_test.go @@ -9,6 +9,7 @@ import ( "github.com/btcsuite/btcd/txscript" "github.com/btcsuite/btcd/wire" "github.com/btcsuite/btcutil" + "github.com/lightningnetwork/lnd/lntest/mock" "github.com/lightningnetwork/lnd/lnwallet" "github.com/lightningnetwork/lnd/lnwallet/chainfee" ) @@ -335,7 +336,7 @@ func TestCraftSweepAllTx(t *testing.T) { // First, we'll make a mock signer along with a fee estimator, We'll // use zero fees to we can assert a precise output value. - signer := &mockSigner{} + signer := &mock.DummySigner{} feeEstimator := newMockFeeEstimator(0, 0) // For our UTXO source, we'll pass in all the UTXOs that we know of,