60 lines
1.1 KiB
Go
60 lines
1.1 KiB
Go
|
package lookout
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"sync"
|
||
|
|
||
|
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
||
|
"github.com/btcsuite/btcd/wire"
|
||
|
"github.com/lightningnetwork/lnd/chainntnfs"
|
||
|
)
|
||
|
|
||
|
type MockBackend struct {
|
||
|
mu sync.RWMutex
|
||
|
|
||
|
blocks chan *chainntnfs.BlockEpoch
|
||
|
epochs map[chainhash.Hash]*wire.MsgBlock
|
||
|
quit chan struct{}
|
||
|
}
|
||
|
|
||
|
func NewMockBackend() *MockBackend {
|
||
|
return &MockBackend{
|
||
|
blocks: make(chan *chainntnfs.BlockEpoch),
|
||
|
epochs: make(map[chainhash.Hash]*wire.MsgBlock),
|
||
|
quit: make(chan struct{}),
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (m *MockBackend) RegisterBlockEpochNtfn(*chainntnfs.BlockEpoch) (
|
||
|
*chainntnfs.BlockEpochEvent, error) {
|
||
|
|
||
|
return &chainntnfs.BlockEpochEvent{
|
||
|
Epochs: m.blocks,
|
||
|
}, nil
|
||
|
}
|
||
|
|
||
|
func (m *MockBackend) GetBlock(hash *chainhash.Hash) (*wire.MsgBlock, error) {
|
||
|
m.mu.RLock()
|
||
|
defer m.mu.RUnlock()
|
||
|
|
||
|
block, ok := m.epochs[*hash]
|
||
|
if !ok {
|
||
|
return nil, fmt.Errorf("unknown block for hash %x", hash)
|
||
|
}
|
||
|
|
||
|
return block, nil
|
||
|
}
|
||
|
|
||
|
func (m *MockBackend) ConnectEpoch(epoch *chainntnfs.BlockEpoch,
|
||
|
block *wire.MsgBlock) {
|
||
|
|
||
|
m.mu.Lock()
|
||
|
m.epochs[*epoch.Hash] = block
|
||
|
m.mu.Unlock()
|
||
|
|
||
|
select {
|
||
|
case m.blocks <- epoch:
|
||
|
case <-m.quit:
|
||
|
}
|
||
|
}
|