* created a MockMqttMonitor interface and mock object

* used this to pass tests
* made the MockMqttMonitor a global object so that it can be easily mocked
* removed MockMqttMonitor from the app/keeper initialization
* adjusted test cases to register "active machines" to the mqttmonitor

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>
This commit is contained in:
Jürgen Eckel 2024-04-05 10:48:04 +02:00
parent 7e2684d9e0
commit b7fdd59466
No known key found for this signature in database
8 changed files with 86 additions and 32 deletions

View File

@ -108,9 +108,7 @@ import (
solomachine "github.com/cosmos/ibc-go/v7/modules/light-clients/06-solomachine"
ibctm "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint"
"github.com/spf13/cast"
"github.com/syndtr/goleveldb/leveldb"
"github.com/planetmint/planetmint-go/monitor"
machinemodule "github.com/planetmint/planetmint-go/x/machine"
machinemodulekeeper "github.com/planetmint/planetmint-go/x/machine/keeper"
machinemoduletypes "github.com/planetmint/planetmint-go/x/machine/types"
@ -126,7 +124,6 @@ import (
// this line is used by starport scaffolding # stargate/app/moduleImport
pmante "github.com/planetmint/planetmint-go/app/ante"
plmntconfig "github.com/planetmint/planetmint-go/config"
"github.com/planetmint/planetmint-go/docs"
appparams "github.com/planetmint/planetmint-go/lib/params"
)
@ -272,8 +269,7 @@ type App struct {
// this line is used by starport scaffolding # stargate/app/keeperDeclaration
// mm is the module manager
mm *module.Manager
mqttMonitor *monitor.MqttMonitor
mm *module.Manager
// sm is the simulation manager
sm *module.SimulationManager
@ -336,16 +332,6 @@ func New(
tkeys: tkeys,
memKeys: memKeys,
}
aciveActorsDB, err := leveldb.OpenFile(homePath+"/activeActors.db", nil)
if err != nil {
panic(err)
}
app.mqttMonitor = monitor.NewMqttMonitorService(aciveActorsDB, *plmntconfig.GetConfig())
err = app.mqttMonitor.Start()
if err != nil {
panic(err)
}
app.ParamsKeeper = initParamsKeeper(
appCodec,
cdc,
@ -591,7 +577,6 @@ func New(
app.MachineKeeper,
authtypes.NewModuleAddress(govtypes.ModuleName).String(),
homePath,
app.mqttMonitor,
)
daoModule := daomodule.NewAppModule(appCodec, app.DaoKeeper, app.AccountKeeper, app.BankKeeper)

34
monitor/interface.go Normal file
View File

@ -0,0 +1,34 @@
package monitor
import (
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/planetmint/planetmint-go/config"
"github.com/syndtr/goleveldb/leveldb"
)
type MQTTMonitorClientI interface {
AddParticipant(address string, lastSeenTS int64) (err error)
SelectPoPParticipantsOutOfActiveActors() (challenger string, challengee string, err error)
SetContext(ctx sdk.Context)
Start() (err error)
}
var MqttMonitorInstance MQTTMonitorClientI
func LazyMqttMonitorLoader(homeDir string) {
if MqttMonitorInstance != nil {
return
}
if homeDir == "" {
homeDir = "./"
}
aciveActorsDB, err := leveldb.OpenFile(homeDir+"activeActors.db", nil)
if err != nil {
panic(err)
}
MqttMonitorInstance = NewMqttMonitorService(aciveActorsDB, *config.GetConfig())
err = MqttMonitorInstance.Start()
if err != nil {
panic(err)
}
}

View File

@ -0,0 +1,38 @@
package mocks
import (
types "github.com/cosmos/cosmos-sdk/types"
)
// MockMQTTMonitorClientI is a mock of MQTTMonitorClientI interface.
type MockMQTTMonitorClientI struct {
myStringList []string
}
// AddParticipant mocks base method.
func (m *MockMQTTMonitorClientI) AddParticipant(address string, lastSeenTS int64) error {
m.myStringList = append(m.myStringList, address)
return nil
}
// SelectPoPParticipantsOutOfActiveActors mocks base method.
func (m *MockMQTTMonitorClientI) SelectPoPParticipantsOutOfActiveActors() (string, string, error) {
var challenger, challengee string
amount := len(m.myStringList)
if amount >= 2 {
challenger = m.myStringList[amount-2]
challengee = m.myStringList[amount-1]
}
return challenger, challengee, nil
}
// SetContext mocks base method.
func (m *MockMQTTMonitorClientI) SetContext(ctx types.Context) {
return
}
// Start mocks base method.
func (m *MockMQTTMonitorClientI) Start() error {
return nil
}

View File

@ -7,11 +7,13 @@ import (
"math"
"os"
"strconv"
"time"
"github.com/cosmos/cosmos-sdk/crypto/keyring"
sdk "github.com/cosmos/cosmos-sdk/types"
bank "github.com/cosmos/cosmos-sdk/x/bank/client/cli"
"github.com/planetmint/planetmint-go/lib"
"github.com/planetmint/planetmint-go/monitor"
"github.com/planetmint/planetmint-go/testutil"
clitestutil "github.com/planetmint/planetmint-go/testutil/cli"
e2etestutil "github.com/planetmint/planetmint-go/testutil/e2e"
@ -163,6 +165,7 @@ func (s *SelectionE2ETestSuite) TestPopSelectionNoActors() {
func (s *SelectionE2ETestSuite) TestPopSelectionOneActors() {
err := e2etestutil.AttestMachine(s.network, machines[0].name, machines[0].mnemonic, 0, s.feeDenom)
monitor.MqttMonitorInstance.AddParticipant(machines[0].address, time.Now().Unix())
s.Require().NoError(err)
out := s.perpareLocalTest()
@ -173,6 +176,7 @@ func (s *SelectionE2ETestSuite) TestPopSelectionOneActors() {
func (s *SelectionE2ETestSuite) TestPopSelectionTwoActors() {
err := e2etestutil.AttestMachine(s.network, machines[1].name, machines[1].mnemonic, 1, s.feeDenom)
monitor.MqttMonitorInstance.AddParticipant(machines[1].address, time.Now().Unix())
s.Require().NoError(err)
out := s.perpareLocalTest()

View File

@ -15,12 +15,9 @@ import (
govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
typesparams "github.com/cosmos/cosmos-sdk/x/params/types"
"github.com/golang/mock/gomock"
"github.com/planetmint/planetmint-go/config"
"github.com/planetmint/planetmint-go/monitor"
"github.com/planetmint/planetmint-go/x/dao/keeper"
"github.com/planetmint/planetmint-go/x/dao/types"
"github.com/stretchr/testify/require"
"github.com/syndtr/goleveldb/leveldb"
daotestutil "github.com/planetmint/planetmint-go/x/dao/testutil"
)
@ -56,11 +53,6 @@ func DaoKeeper(t testing.TB) (*keeper.Keeper, sdk.Context) {
ctrl := gomock.NewController(t)
bk := daotestutil.NewMockBankKeeper(ctrl)
aciveActorsDB, err := leveldb.OpenFile("./activeActors.db", nil)
if err != nil {
panic(err)
}
mqttMonitor := monitor.NewMqttMonitorService(aciveActorsDB, *config.GetConfig())
bk.EXPECT().MintCoins(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil).AnyTimes()
bk.EXPECT().BurnCoins(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil).AnyTimes()
@ -82,11 +74,10 @@ func DaoKeeper(t testing.TB) (*keeper.Keeper, sdk.Context) {
nil,
authtypes.NewModuleAddress(govtypes.ModuleName).String(),
"",
mqttMonitor,
)
// Initialize params
err = k.SetParams(ctx, types.DefaultParams())
err := k.SetParams(ctx, types.DefaultParams())
if err != nil {
panic(err)
}

View File

@ -15,6 +15,8 @@ import (
sdk "github.com/cosmos/cosmos-sdk/types"
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
"github.com/planetmint/planetmint-go/app"
"github.com/planetmint/planetmint-go/monitor"
monitormocks "github.com/planetmint/planetmint-go/monitor/mocks"
"github.com/planetmint/planetmint-go/testutil/sample"
"github.com/planetmint/planetmint-go/util"
"github.com/planetmint/planetmint-go/util/mocks"
@ -39,6 +41,8 @@ func Load(t *testing.T, configs ...Config) *Network {
// use mock client for testing
util.MQTTClient = &mocks.MockMQTTClient{}
monitor.MonitorMQTTClient = &mocks.MockMQTTClient{}
monitor.MqttMonitorInstance = &monitormocks.MockMQTTMonitorClientI{}
elements.Client = &elementsmocks.MockClient{}
util.RegisterAssetServiceHTTPClient = &mocks.MockClient{}

View File

@ -3,6 +3,7 @@ package dao
import (
"encoding/hex"
"github.com/planetmint/planetmint-go/monitor"
"github.com/planetmint/planetmint-go/util"
"github.com/planetmint/planetmint-go/x/dao/keeper"
@ -23,8 +24,8 @@ func BeginBlocker(ctx sdk.Context, req abci.RequestBeginBlock, k keeper.Keeper)
hexProposerAddress := hex.EncodeToString(proposerAddress)
if isPopHeight(ctx, k, currentBlockHeight) {
// select PoP participants
k.MqttMonitor.SetContext(ctx)
challenger, challengee, err := k.MqttMonitor.SelectPoPParticipantsOutOfActiveActors()
monitor.MqttMonitorInstance.SetContext(ctx)
challenger, challengee, err := monitor.MqttMonitorInstance.SelectPoPParticipantsOutOfActiveActors()
if err != nil {
util.GetAppLogger().Error(ctx, "error during PoP Participant selection ", err)
}

View File

@ -27,7 +27,6 @@ type (
machineKeeper types.MachineKeeper
authority string
RootDir string
MqttMonitor *monitor.MqttMonitor
}
)
@ -46,13 +45,12 @@ func NewKeeper(
machineKeeper types.MachineKeeper,
authority string,
rootDir string,
mqttMonitor *monitor.MqttMonitor,
) *Keeper {
// set KeyTable if it has not already been set
if !ps.HasKeyTable() {
ps = ps.WithKeyTable(types.ParamKeyTable())
}
monitor.LazyMqttMonitorLoader(rootDir)
return &Keeper{
cdc: cdc,
storeKey: storeKey,
@ -68,7 +66,6 @@ func NewKeeper(
machineKeeper: machineKeeper,
authority: authority,
RootDir: rootDir,
MqttMonitor: mqttMonitor,
}
}