github.com/evdatsion/aphelion-dpos-bft@v0.32.1/tools/tm-monitor/monitor/node_test.go (about) 1 package monitor_test 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/assert" 7 "github.com/stretchr/testify/require" 8 9 amino "github.com/evdatsion/go-amino" 10 "github.com/evdatsion/aphelion-dpos-bft/crypto/ed25519" 11 ctypes "github.com/evdatsion/aphelion-dpos-bft/rpc/core/types" 12 em "github.com/evdatsion/aphelion-dpos-bft/tools/tm-monitor/eventmeter" 13 mock "github.com/evdatsion/aphelion-dpos-bft/tools/tm-monitor/mock" 14 monitor "github.com/evdatsion/aphelion-dpos-bft/tools/tm-monitor/monitor" 15 tmtypes "github.com/evdatsion/aphelion-dpos-bft/types" 16 ) 17 18 const ( 19 blockHeight = int64(1) 20 ) 21 22 func TestNodeStartStop(t *testing.T) { 23 n, _ := startValidatorNode(t) 24 defer n.Stop() 25 26 assert.Equal(t, true, n.Online) 27 assert.Equal(t, true, n.IsValidator) 28 } 29 30 func TestNodeNewBlockReceived(t *testing.T) { 31 blockCh := make(chan tmtypes.Header, 100) 32 n, emMock := startValidatorNode(t) 33 defer n.Stop() 34 n.SendBlocksTo(blockCh) 35 36 blockHeader := tmtypes.Header{Height: 5} 37 emMock.Call("eventCallback", &em.EventMetric{}, tmtypes.EventDataNewBlockHeader{Header: blockHeader}) 38 39 assert.Equal(t, int64(5), n.Height) 40 assert.Equal(t, blockHeader, <-blockCh) 41 } 42 43 func TestNodeNewBlockLatencyReceived(t *testing.T) { 44 blockLatencyCh := make(chan float64, 100) 45 n, emMock := startValidatorNode(t) 46 defer n.Stop() 47 n.SendBlockLatenciesTo(blockLatencyCh) 48 49 emMock.Call("latencyCallback", 1000000.0) 50 51 assert.Equal(t, 1.0, n.BlockLatency) 52 assert.Equal(t, 1000000.0, <-blockLatencyCh) 53 } 54 55 func TestNodeConnectionLost(t *testing.T) { 56 disconnectCh := make(chan bool, 100) 57 n, emMock := startValidatorNode(t) 58 defer n.Stop() 59 n.NotifyAboutDisconnects(disconnectCh) 60 61 emMock.Call("disconnectCallback") 62 63 assert.Equal(t, true, <-disconnectCh) 64 assert.Equal(t, false, n.Online) 65 } 66 67 func TestNumValidators(t *testing.T) { 68 n, _ := startValidatorNode(t) 69 defer n.Stop() 70 71 height, num, err := n.NumValidators() 72 assert.Nil(t, err) 73 assert.Equal(t, blockHeight, height) 74 assert.Equal(t, 1, num) 75 } 76 77 func startValidatorNode(t *testing.T) (n *monitor.Node, emMock *mock.EventMeter) { 78 emMock = &mock.EventMeter{} 79 80 stubs := make(map[string]interface{}) 81 pubKey := ed25519.GenPrivKey().PubKey() 82 stubs["validators"] = ctypes.ResultValidators{BlockHeight: blockHeight, Validators: []*tmtypes.Validator{tmtypes.NewValidator(pubKey, 0)}} 83 stubs["status"] = ctypes.ResultStatus{ValidatorInfo: ctypes.ValidatorInfo{PubKey: pubKey}} 84 cdc := amino.NewCodec() 85 rpcClientMock := &mock.RpcClient{Stubs: stubs} 86 rpcClientMock.SetCodec(cdc) 87 88 n = monitor.NewNodeWithEventMeterAndRpcClient("tcp://127.0.0.1:26657", emMock, rpcClientMock) 89 90 err := n.Start() 91 require.Nil(t, err) 92 return 93 }