1
0
mirror of https://github.com/fluencelabs/tendermint synced 2025-06-22 01:11:32 +00:00
Files
.circleci
.github
DOCKER
abci
behaviour
benchmarks
blockchain
cmd
config
consensus
crypto
docs
evidence
libs
lite
mempool
mock
networks
node
p2p
privval
proxy
rpc
scripts
state
test
tools
build
mintnet-kubernetes
tm-bench
tm-monitor
eventmeter
mock
monitor
monitor.go
monitor_test.go
network.go
network_test.go
node.go
node_test.go
wire.go
Dockerfile
Dockerfile.dev
Makefile
README.md
main.go
rpc.go
ton.go
wire.go
tm-signer-harness
README.md
types
version
.editorconfig
.gitignore
.golangci.yml
CHANGELOG.md
CHANGELOG_PENDING.md
CODE_OF_CONDUCT.md
CONTRIBUTING.md
LICENSE
Makefile
PHILOSOPHY.md
README.md
ROADMAP.md
SECURITY.md
UPGRADING.md
Vagrantfile
appveyor.yml
codecov.yml
docker-compose.yml
go.mod
go.sum
tendermint/tools/tm-monitor/monitor/monitor_test.go

73 lines
2.1 KiB
Go
Raw Normal View History

package monitor_test
2017-02-24 18:54:36 +04:00
2017-03-06 18:35:52 +04:00
import (
"testing"
"time"
2017-02-24 18:54:36 +04:00
2017-03-06 18:35:52 +04:00
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
2017-02-24 18:54:36 +04:00
amino "github.com/tendermint/go-amino"
"github.com/tendermint/tendermint/crypto/ed25519"
2017-03-06 18:35:52 +04:00
ctypes "github.com/tendermint/tendermint/rpc/core/types"
mock "github.com/tendermint/tendermint/tools/tm-monitor/mock"
monitor "github.com/tendermint/tendermint/tools/tm-monitor/monitor"
2017-03-06 18:35:52 +04:00
tmtypes "github.com/tendermint/tendermint/types"
)
func TestMonitorUpdatesNumberOfValidators(t *testing.T) {
m := startMonitor(t)
defer m.Stop()
n, _ := createValidatorNode(t)
m.Monitor(n)
2018-04-03 11:06:34 +02:00
assert.Equal(t, 1, m.Network.NumNodesMonitored)
assert.Equal(t, 1, m.Network.NumNodesMonitoredOnline)
2017-03-06 18:35:52 +04:00
time.Sleep(1 * time.Second)
2018-04-03 11:33:16 +02:00
// DATA RACE
// assert.Equal(t, 1, m.Network.NumValidators())
2017-03-06 18:35:52 +04:00
}
func TestMonitorRecalculatesNetworkUptime(t *testing.T) {
m := startMonitor(t)
defer m.Stop()
2018-04-03 11:06:34 +02:00
assert.Equal(t, 100.0, m.Network.Uptime())
2017-03-06 18:35:52 +04:00
n, _ := createValidatorNode(t)
m.Monitor(n)
m.Network.NodeIsDown(n.Name) // simulate node failure
time.Sleep(200 * time.Millisecond)
m.Network.NodeIsOnline(n.Name)
time.Sleep(1 * time.Second)
2018-04-03 11:06:34 +02:00
assert.True(t, m.Network.Uptime() < 100.0, "Uptime should be less than 100%")
2017-02-24 18:54:36 +04:00
}
2017-03-06 18:35:52 +04:00
func startMonitor(t *testing.T) *monitor.Monitor {
m := monitor.NewMonitor(
monitor.SetNumValidatorsUpdateInterval(200*time.Millisecond),
monitor.RecalculateNetworkUptimeEvery(200*time.Millisecond),
)
err := m.Start()
require.Nil(t, err)
return m
}
func createValidatorNode(t *testing.T) (n *monitor.Node, emMock *mock.EventMeter) {
emMock = &mock.EventMeter{}
2017-07-29 13:50:33 -04:00
stubs := make(map[string]interface{})
pubKey := ed25519.GenPrivKey().PubKey()
2017-07-29 13:50:33 -04:00
stubs["validators"] = ctypes.ResultValidators{BlockHeight: blockHeight, Validators: []*tmtypes.Validator{tmtypes.NewValidator(pubKey, 0)}}
stubs["status"] = ctypes.ResultStatus{ValidatorInfo: ctypes.ValidatorInfo{PubKey: pubKey}}
cdc := amino.NewCodec()
rpcClientMock := &mock.RpcClient{Stubs: stubs}
rpcClientMock.SetCodec(cdc)
2017-02-24 18:54:36 +04:00
n = monitor.NewNodeWithEventMeterAndRpcClient("tcp://127.0.0.1:26657", emMock, rpcClientMock)
2017-03-06 18:35:52 +04:00
return
2017-02-24 18:54:36 +04:00
}