wormhole/node/pkg/watchers/mock/watcher.go

56 lines
1.5 KiB
Go

package mock
import (
"context"
"github.com/certusone/wormhole/node/pkg/common"
gossipv1 "github.com/certusone/wormhole/node/pkg/proto/gossip/v1"
"github.com/certusone/wormhole/node/pkg/supervisor"
eth_common "github.com/ethereum/go-ethereum/common"
"go.uber.org/zap"
)
func NewWatcherRunnable(
msgC chan<- *common.MessagePublication,
obsvReqC <-chan *gossipv1.ObservationRequest,
setC chan<- *common.GuardianSet,
c *WatcherConfig,
) supervisor.Runnable {
return func(ctx context.Context) error {
logger := supervisor.Logger(ctx)
supervisor.Signal(ctx, supervisor.SignalHealthy)
if c.L1FinalizerRequired != "" && c.l1Finalizer == nil {
logger.Fatal("Mock watcher: L1FinalizerRequired but not set.")
}
logger.Info("Mock Watcher running.")
for {
select {
case <-ctx.Done():
logger.Info("Mock Watcher shutting down.")
return nil
case observation := <-c.MockObservationC:
logger.Info("message observed", observation.ZapFields(zap.String("digest", observation.CreateDigest()))...)
msgC <- observation
case gs := <-c.MockSetC:
setC <- gs
case o := <-obsvReqC:
hash := eth_common.BytesToHash(o.TxHash)
logger.Info("Received obsv request", zap.String("log_msg_type", "obsv_req_received"), zap.String("tx_hash", hash.Hex()))
msg, ok := c.ObservationDb[hash]
if ok {
msgC <- msg
}
}
}
}
}
type MockL1Finalizer struct{}
func (f MockL1Finalizer) GetLatestFinalizedBlockNumber() uint64 {
return 0
}