account: split mocks

This commit prepares for a change in lndclient, where each sub server
client needs to implement a specific method.
Because of that requirement we cannot have a single mock that implements
two of those methods and we need to split the wallet and signer mocks
apart.
This commit is contained in:
Oliver Gugger 2024-09-18 16:35:54 +02:00
parent f331b9ee66
commit 352b8da4b3
No known key found for this signature in database
GPG key ID: 8E4256593F177720
2 changed files with 67 additions and 53 deletions

View file

@ -89,6 +89,7 @@ type testHarness struct {
store *mockStore
notifier *mockChainNotifier
wallet *mockWallet
signer *mockSigner
auctioneer *mockAuctioneer
manager Manager
}
@ -96,6 +97,7 @@ type testHarness struct {
func newTestHarness(t *testing.T) *testHarness {
store := newMockStore()
wallet := newMockWallet()
signer := newMockSigner()
notifier := newMockChainNotifier()
auctioneer := newMockAuctioneer()
@ -103,13 +105,14 @@ func newTestHarness(t *testing.T) *testHarness {
t: t,
store: store,
wallet: wallet,
signer: signer,
notifier: notifier,
auctioneer: auctioneer,
manager: NewManager(&ManagerConfig{
Store: store,
Auctioneer: auctioneer,
Wallet: wallet,
Signer: wallet,
Signer: signer,
ChainNotifier: notifier,
TxSource: wallet,
TxFeeEstimator: wallet,
@ -419,14 +422,14 @@ func (h *testHarness) assertAuctioneerMuSig2NoncesReceived() {
h.auctioneer.mu.Lock()
defer h.auctioneer.mu.Unlock()
h.wallet.Lock()
defer h.wallet.Unlock()
h.signer.Lock()
defer h.signer.Unlock()
require.Len(h.t, h.wallet.muSig2Sessions, 0)
require.Len(h.t, h.wallet.muSig2RemovedSessions, 1)
require.Len(h.t, h.signer.muSig2Sessions, 0)
require.Len(h.t, h.signer.muSig2RemovedSessions, 1)
var sessionInfo *input.MuSig2SessionInfo
for _, info := range h.wallet.muSig2RemovedSessions {
for _, info := range h.signer.muSig2RemovedSessions {
sessionInfo = info
break
}

View file

@ -239,16 +239,12 @@ var _ Auctioneer = (*mockAuctioneer)(nil)
type mockWallet struct {
TxSource
lndclient.WalletKitClient
lndclient.SignerClient
sync.Mutex
txs []lndclient.Transaction
publishChan chan *wire.MsgTx
muSig2Sessions map[input.MuSig2SessionID]*input.MuSig2SessionInfo
muSig2RemovedSessions map[input.MuSig2SessionID]*input.MuSig2SessionInfo
utxos []*lnwallet.Utxo
fundPsbt *psbt.Packet
fundPsbtChangeIdx int32
txs []lndclient.Transaction
publishChan chan *wire.MsgTx
utxos []*lnwallet.Utxo
fundPsbt *psbt.Packet
fundPsbtChangeIdx int32
sendOutputs func(context.Context, []*wire.TxOut,
chainfee.SatPerKWeight) (*wire.MsgTx, error)
@ -259,12 +255,6 @@ var _ lndclient.WalletKitClient = (*mockWallet)(nil)
func newMockWallet() *mockWallet {
return &mockWallet{
publishChan: make(chan *wire.MsgTx, 1),
muSig2Sessions: make(
map[input.MuSig2SessionID]*input.MuSig2SessionInfo,
),
muSig2RemovedSessions: make(
map[input.MuSig2SessionID]*input.MuSig2SessionInfo,
),
}
}
@ -274,13 +264,6 @@ func (w *mockWallet) DeriveNextKey(ctx context.Context,
return testTraderKeyDesc, nil
}
func (w *mockWallet) DeriveSharedKey(ctx context.Context,
ephemeralKey *btcec.PublicKey,
keyLocator *keychain.KeyLocator) ([32]byte, error) {
return sharedSecret, nil
}
func (w *mockWallet) PublishTransaction(ctx context.Context, tx *wire.MsgTx,
label string) error {
@ -348,24 +331,6 @@ func (w *mockWallet) ReleaseOutput(_ context.Context, lockID wtxmgr.LockID,
return nil
}
func (w *mockWallet) SignOutputRaw(context.Context, *wire.MsgTx,
[]*lndclient.SignDescriptor, []*wire.TxOut) ([][]byte, error) {
return [][]byte{[]byte("trader sig")}, nil
}
func (w *mockWallet) ComputeInputScript(context.Context, *wire.MsgTx,
[]*lndclient.SignDescriptor, []*wire.TxOut) ([]*input.Script, error) {
return []*input.Script{{
SigScript: []byte("input sig script"),
Witness: wire.TxWitness{
[]byte("input"),
[]byte("witness"),
},
}}, nil
}
func (w *mockWallet) EstimateFeeRate(_ context.Context,
_ int32) (chainfee.SatPerKWeight, error) {
@ -402,7 +367,7 @@ func (w *mockWallet) SignPsbt(_ context.Context,
}
func (w *mockWallet) FinalizePsbt(_ context.Context, packet *psbt.Packet,
account string) (*psbt.Packet, *wire.MsgTx, error) {
_ string) (*psbt.Packet, *wire.MsgTx, error) {
// Just copy over any sigs we might have. This is copy/paste code from
// the psbt Finalizer, minus the IsComplete() check.
@ -446,9 +411,55 @@ func (w *mockWallet) FinalizePsbt(_ context.Context, packet *psbt.Packet,
return packet, packet.UnsignedTx, nil
}
type mockSigner struct {
lndclient.SignerClient
sync.Mutex
muSig2Sessions map[input.MuSig2SessionID]*input.MuSig2SessionInfo
muSig2RemovedSessions map[input.MuSig2SessionID]*input.MuSig2SessionInfo
}
var _ lndclient.SignerClient = (*mockSigner)(nil)
func newMockSigner() *mockSigner {
return &mockSigner{
muSig2Sessions: make(
map[input.MuSig2SessionID]*input.MuSig2SessionInfo,
),
muSig2RemovedSessions: make(
map[input.MuSig2SessionID]*input.MuSig2SessionInfo,
),
}
}
func (w *mockSigner) DeriveSharedKey(ctx context.Context,
ephemeralKey *btcec.PublicKey,
keyLocator *keychain.KeyLocator) ([32]byte, error) {
return sharedSecret, nil
}
func (w *mockSigner) SignOutputRaw(context.Context, *wire.MsgTx,
[]*lndclient.SignDescriptor, []*wire.TxOut) ([][]byte, error) {
return [][]byte{[]byte("trader sig")}, nil
}
func (w *mockSigner) ComputeInputScript(context.Context, *wire.MsgTx,
[]*lndclient.SignDescriptor, []*wire.TxOut) ([]*input.Script, error) {
return []*input.Script{{
SigScript: []byte("input sig script"),
Witness: wire.TxWitness{
[]byte("input"),
[]byte("witness"),
},
}}, nil
}
// MuSig2CreateSession creates a new musig session with the key and signers
// provided.
func (w *mockWallet) MuSig2CreateSession(_ context.Context,
func (w *mockSigner) MuSig2CreateSession(_ context.Context,
version input.MuSig2Version, _ *keychain.KeyLocator, _ [][]byte,
opts ...lndclient.MuSig2SessionOpts) (*input.MuSig2SessionInfo, error) {
@ -485,8 +496,8 @@ func (w *mockWallet) MuSig2CreateSession(_ context.Context,
// MuSig2RegisterNonces registers additional public nonces for a musig2 session.
// It returns a boolean indicating whether we have all of our nonces present.
func (w *mockWallet) MuSig2RegisterNonces(_ context.Context, sessionID [32]byte,
nonces [][66]byte) (bool, error) {
func (w *mockSigner) MuSig2RegisterNonces(_ context.Context, _ [32]byte,
_ [][66]byte) (bool, error) {
return true, nil
}
@ -495,7 +506,7 @@ func (w *mockWallet) MuSig2RegisterNonces(_ context.Context, sessionID [32]byte,
// message. This can only be called once all public nonces have been created. If
// the caller will not be responsible for combining the signatures, the cleanup
// bool should be set.
func (w *mockWallet) MuSig2Sign(_ context.Context, sessionID [32]byte,
func (w *mockSigner) MuSig2Sign(_ context.Context, sessionID [32]byte,
_ [32]byte, cleanup bool) ([]byte, error) {
var (
@ -521,7 +532,7 @@ func (w *mockWallet) MuSig2Sign(_ context.Context, sessionID [32]byte,
// MuSig2CombineSig combines the given partial signature(s) with the local one,
// if it already exists. Once a partial signature of all participants are
// registered, the final signature will be combined and returned.
func (w *mockWallet) MuSig2CombineSig(_ context.Context, sessionID [32]byte,
func (w *mockSigner) MuSig2CombineSig(_ context.Context, sessionID [32]byte,
_ [][]byte) (bool, []byte, error) {
var (
@ -544,7 +555,7 @@ func (w *mockWallet) MuSig2CombineSig(_ context.Context, sessionID [32]byte,
}
// MuSig2Cleanup removes a session from memory to free up resources.
func (w *mockWallet) MuSig2Cleanup(_ context.Context,
func (w *mockSigner) MuSig2Cleanup(_ context.Context,
sessionID [32]byte) error {
w.Lock()