From 371660aae17b294e515024729fddc7396116eaff Mon Sep 17 00:00:00 2001 From: Sorin Stanculeanu Date: Mon, 23 May 2022 17:34:16 +0300 Subject: [PATCH 1/2] fix heartbeat monitor tests --- heartbeat/monitor/monitor_test.go | 37 ++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/heartbeat/monitor/monitor_test.go b/heartbeat/monitor/monitor_test.go index 89bb4a1f39f..0892e56cd37 100644 --- a/heartbeat/monitor/monitor_test.go +++ b/heartbeat/monitor/monitor_test.go @@ -185,9 +185,13 @@ func TestHeartbeatV2Monitor_parseMessage(t *testing.T) { numInstances := make(map[string]uint64) message := createHeartbeatMessage(true) providedPid := core.PeerID("pid") + providedMap := map[string]struct{}{ + providedPid.Pretty(): {}, + } hb, err := monitor.parseMessage(providedPid, message, numInstances) assert.Nil(t, err) - checkResults(t, *message, hb, true, providedPid, 0) + checkResults(t, *message, hb, true, providedMap, 0) + assert.Equal(t, 0, len(providedMap)) pid := args.PubKeyConverter.Encode(providedPkBytes) entries, ok := numInstances[pid] assert.True(t, ok) @@ -257,13 +261,14 @@ func TestHeartbeatV2Monitor_GetHeartbeats(t *testing.T) { } providedStatuses := []bool{true, true, false} numOfMessages := len(providedStatuses) - providedPids := make([]core.PeerID, numOfMessages) + providedPids := make(map[string]struct{}, numOfMessages) providedMessages := make([]*heartbeat.HeartbeatV2, numOfMessages) for i := 0; i < numOfMessages; i++ { - providedPids[i] = core.PeerID(fmt.Sprintf("%s%d", "pid", i)) + pid := core.PeerID(fmt.Sprintf("%s%d", "pid", i)) + providedPids[pid.Pretty()] = struct{}{} providedMessages[i] = createHeartbeatMessage(providedStatuses[i]) - args.Cache.Put(providedPids[i].Bytes(), providedMessages[i], providedMessages[i].Size()) + args.Cache.Put(pid.Bytes(), providedMessages[i], providedMessages[i].Size()) } monitor, _ := NewHeartbeatV2Monitor(args) @@ -272,27 +277,30 @@ func TestHeartbeatV2Monitor_GetHeartbeats(t *testing.T) { heartbeats := monitor.GetHeartbeats() assert.Equal(t, args.Cache.Len()-1, len(heartbeats)) for i := 0; i < len(heartbeats); i++ { - checkResults(t, *providedMessages[i], heartbeats[i], providedStatuses[i], providedPids[i], 1) + checkResults(t, *providedMessages[i], heartbeats[i], providedStatuses[i], providedPids, 1) } + assert.Equal(t, 1, len(providedPids)) // one message is skipped }) t.Run("should work", func(t *testing.T) { t.Parallel() args := createMockHeartbeatV2MonitorArgs() providedStatuses := []bool{true, true, true} numOfMessages := len(providedStatuses) - providedPids := make([]core.PeerID, numOfMessages) + providedPids := make(map[string]struct{}, numOfMessages) providedMessages := make([]*heartbeat.HeartbeatV2, numOfMessages) for i := 0; i < numOfMessages; i++ { - providedPids[i] = core.PeerID(fmt.Sprintf("%s%d", "pid", i)) + pid := core.PeerID(fmt.Sprintf("%s%d", "pid", i)) + providedPids[pid.Pretty()] = struct{}{} providedMessages[i] = createHeartbeatMessage(providedStatuses[i]) - args.Cache.Put(providedPids[i].Bytes(), providedMessages[i], providedMessages[i].Size()) + args.Cache.Put(pid.Bytes(), providedMessages[i], providedMessages[i].Size()) } + counter := 0 args.PeerShardMapper = &processMocks.PeerShardMapperStub{ GetPeerInfoCalled: func(pid core.PeerID) core.P2PPeerInfo { // Only first entry is unique, then all should have same pk var info core.P2PPeerInfo - if pid == providedPids[0] { + if counter == 0 { info = core.P2PPeerInfo{ PkBytes: pid.Bytes(), } @@ -301,7 +309,7 @@ func TestHeartbeatV2Monitor_GetHeartbeats(t *testing.T) { PkBytes: []byte("same pk"), } } - + counter++ return info }, } @@ -316,12 +324,13 @@ func TestHeartbeatV2Monitor_GetHeartbeats(t *testing.T) { if i > 0 { numInstances = 2 } - checkResults(t, *providedMessages[i], heartbeats[i], providedStatuses[i], providedPids[i], numInstances) + checkResults(t, *providedMessages[i], heartbeats[i], providedStatuses[i], providedPids, numInstances) } + assert.Equal(t, 0, len(providedPids)) }) } -func checkResults(t *testing.T, message heartbeat.HeartbeatV2, hb data.PubKeyHeartbeat, isActive bool, pid core.PeerID, numInstances uint64) { +func checkResults(t *testing.T, message heartbeat.HeartbeatV2, hb data.PubKeyHeartbeat, isActive bool, providedPids map[string]struct{}, numInstances uint64) { assert.Equal(t, isActive, hb.IsActive) assert.Equal(t, message.VersionNumber, hb.VersionNumber) assert.Equal(t, message.NodeDisplayName, hb.NodeDisplayName) @@ -329,5 +338,7 @@ func checkResults(t *testing.T, message heartbeat.HeartbeatV2, hb data.PubKeyHea assert.Equal(t, message.Nonce, hb.Nonce) assert.Equal(t, message.PeerSubType, hb.PeerSubType) assert.Equal(t, numInstances, hb.NumInstances) - assert.Equal(t, pid.Pretty(), hb.PidString) + _, ok := providedPids[hb.PidString] + assert.True(t, ok) + delete(providedPids, hb.PidString) } From 71ef61ac5a009b5f0b26674206d6a1e5ab412d3b Mon Sep 17 00:00:00 2001 From: Sorin Stanculeanu Date: Mon, 23 May 2022 21:30:25 +0300 Subject: [PATCH 2/2] updated times between messages to fix long tests --- integrationTests/node/heartbeatV2/heartbeatV2_test.go | 6 +++--- integrationTests/testHeartbeatNode.go | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/integrationTests/node/heartbeatV2/heartbeatV2_test.go b/integrationTests/node/heartbeatV2/heartbeatV2_test.go index 73134cb02df..0eaea6fd738 100644 --- a/integrationTests/node/heartbeatV2/heartbeatV2_test.go +++ b/integrationTests/node/heartbeatV2/heartbeatV2_test.go @@ -26,7 +26,7 @@ func TestHeartbeatV2_AllPeersSendMessages(t *testing.T) { connectNodes(nodes, interactingNodes) // Wait for messages to broadcast - time.Sleep(time.Second * 5) + time.Sleep(time.Second * 15) for i := 0; i < len(nodes); i++ { nodes[i].Close() @@ -53,7 +53,7 @@ func TestHeartbeatV2_PeerJoiningLate(t *testing.T) { connectNodes(nodes, interactingNodes) // Wait for messages to broadcast - time.Sleep(time.Second * 10) + time.Sleep(time.Second * 15) // Check sent messages maxMessageAgeAllowed := time.Second * 5 @@ -64,7 +64,7 @@ func TestHeartbeatV2_PeerJoiningLate(t *testing.T) { nodes = append(nodes, delayedNode) connectNodes(nodes, len(nodes)) // Wait for messages to broadcast and requests to finish - time.Sleep(time.Second * 10) + time.Sleep(time.Second * 15) for i := 0; i < len(nodes); i++ { nodes[i].Close() diff --git a/integrationTests/testHeartbeatNode.go b/integrationTests/testHeartbeatNode.go index ef2731dd159..d8295698380 100644 --- a/integrationTests/testHeartbeatNode.go +++ b/integrationTests/testHeartbeatNode.go @@ -50,7 +50,7 @@ import ( const ( defaultNodeName = "heartbeatNode" - timeBetweenPeerAuths = 15 * time.Second + timeBetweenPeerAuths = 10 * time.Second timeBetweenHeartbeats = 5 * time.Second timeBetweenSendsWhenError = time.Second thresholdBetweenSends = 0.2