mirror of
https://github.com/planetmint/planetmint-go.git
synced 2025-03-30 15:08:28 +00:00

* set keepalive ping * made mutex more granular * avoid using app.Logger to have a consistent log from the beginning * made lazyLoading local to the module * fixed ticker bug so that the tasks are executed in an endless loop * fixed timezone bug of Add Participant. only validator local time is used not the timestamp from the mqtt messages as these might come from a different time zone (resulted in delayed deletion from the activeActors DB) * improved connection management for the monitor * added a watchdog task to restart the monitor in case of connection loss (every 2 min) * removed obsolete SetContext function/interface * removed obsolete time conversion method Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>
102 lines
3.0 KiB
Go
102 lines
3.0 KiB
Go
package monitor_test
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/planetmint/planetmint-go/config"
|
|
"github.com/planetmint/planetmint-go/monitor"
|
|
"github.com/planetmint/planetmint-go/util/mocks"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/syndtr/goleveldb/leveldb"
|
|
"github.com/syndtr/goleveldb/leveldb/storage"
|
|
)
|
|
|
|
func init() {
|
|
// Use MQTT mock client
|
|
monitor.MonitorMQTTClient = &mocks.MockMQTTClient{}
|
|
}
|
|
|
|
const (
|
|
challengerInput = "plmnt1fx3x6u8k5q8kjl7pamsuwjtut8nkks8dk92dek"
|
|
challengeeInput = "plmnt1fsaljz3xqf6vchkjxfzfrd30cdp3j4vqh298pr"
|
|
)
|
|
|
|
func TestGMonitorActiveParticipants(t *testing.T) {
|
|
cfg := config.GetConfig()
|
|
db, err := leveldb.Open(storage.NewMemStorage(), nil)
|
|
assert.NoError(t, err)
|
|
defer db.Close()
|
|
|
|
mqttMonitor := monitor.NewMqttMonitorService(db, *cfg)
|
|
err = mqttMonitor.Start()
|
|
assert.NoError(t, err)
|
|
|
|
currentTime := time.Now()
|
|
unixTime := currentTime.Unix()
|
|
err = mqttMonitor.AddParticipant(challengerInput, unixTime)
|
|
assert.NoError(t, err)
|
|
err = mqttMonitor.AddParticipant(challengeeInput, unixTime)
|
|
assert.NoError(t, err)
|
|
mqttMonitor.CleanupDB()
|
|
|
|
challenger, challengee, err := mqttMonitor.SelectPoPParticipantsOutOfActiveActors()
|
|
assert.NoError(t, err)
|
|
assert.Contains(t, challenger, "plmnt")
|
|
assert.Contains(t, challengee, "plmnt")
|
|
mqttMonitor.Terminate()
|
|
}
|
|
|
|
func TestCleanupRemoval(t *testing.T) {
|
|
cfg := config.GetConfig()
|
|
db, err := leveldb.Open(storage.NewMemStorage(), nil)
|
|
assert.NoError(t, err)
|
|
defer db.Close()
|
|
|
|
mqttMonitor := monitor.NewMqttMonitorService(db, *cfg)
|
|
err = mqttMonitor.Start()
|
|
assert.NoError(t, err)
|
|
|
|
currentTime := time.Now()
|
|
CleanupPeriodicityAgo := currentTime.Add(-1 * mqttMonitor.CleanupPeriodicityInMinutes * time.Minute)
|
|
unixTimeNow := currentTime.Unix()
|
|
err = mqttMonitor.AddParticipant(challengerInput, unixTimeNow)
|
|
assert.NoError(t, err)
|
|
err = mqttMonitor.AddParticipant(challengeeInput, CleanupPeriodicityAgo.Unix()-1)
|
|
assert.NoError(t, err)
|
|
mqttMonitor.CleanupDB()
|
|
|
|
challenger, challengee, err := mqttMonitor.SelectPoPParticipantsOutOfActiveActors()
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, "", challenger)
|
|
assert.Contains(t, "", challengee)
|
|
mqttMonitor.Terminate()
|
|
}
|
|
|
|
func TestCleanupPrecisionTest(t *testing.T) {
|
|
cfg := config.GetConfig()
|
|
db, err := leveldb.Open(storage.NewMemStorage(), nil)
|
|
assert.NoError(t, err)
|
|
defer db.Close()
|
|
|
|
mqttMonitor := monitor.NewMqttMonitorService(db, *cfg)
|
|
err = mqttMonitor.Start()
|
|
assert.NoError(t, err)
|
|
|
|
currentTime := time.Now()
|
|
CleanupThresholdAgo := currentTime.Add(-1 * mqttMonitor.CleanupPeriodicityInMinutes * time.Minute)
|
|
aboveThreshold := CleanupThresholdAgo.Unix() + 10
|
|
unixTimeNow := currentTime.Unix()
|
|
err = mqttMonitor.AddParticipant(challengerInput, unixTimeNow)
|
|
assert.NoError(t, err)
|
|
err = mqttMonitor.AddParticipant(challengeeInput, aboveThreshold)
|
|
assert.NoError(t, err)
|
|
mqttMonitor.CleanupDB()
|
|
|
|
challenger, challengee, err := mqttMonitor.SelectPoPParticipantsOutOfActiveActors()
|
|
assert.NoError(t, err)
|
|
assert.Contains(t, challenger, "plmnt")
|
|
assert.Contains(t, challengee, "plmnt")
|
|
mqttMonitor.Terminate()
|
|
}
|