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  }