From 67f343b95af4930fa60016a48c3ea3de13da60ce Mon Sep 17 00:00:00 2001 From: Guillaume Ballet Date: Wed, 13 Jun 2018 18:43:31 +0200 Subject: [PATCH] whisper: keep nondeterministric server start in peer tests --- whisper/whisperv6/peer_test.go | 38 +++++++++++++++++++++++++++------- 1 file changed, 31 insertions(+), 7 deletions(-) diff --git a/whisper/whisperv6/peer_test.go b/whisper/whisperv6/peer_test.go index 18184de047..0c9b380901 100644 --- a/whisper/whisperv6/peer_test.go +++ b/whisper/whisperv6/peer_test.go @@ -22,6 +22,7 @@ import ( "fmt" mrand "math/rand" "sync" + "sync/atomic" "testing" "time" @@ -210,24 +211,34 @@ func initialize(t *testing.T) { }, } - err = node.server.Start() - if err != nil { - t.Fatalf("failed to start server %d.", i) - } + go startServer(t, node.server) + nodes[i] = &node + } + + waitForServersToStart(t) + + for i := 0; i < NumNodes; i++ { for j := 0; j < i; j++ { peerNodeId := nodes[j].id address, _ := net.ResolveTCPAddr("tcp", nodes[j].server.ListenAddr) peerPort := uint16(address.Port) peerNode := discover.PubkeyID(&peerNodeId.PublicKey) peer := discover.NewNode(peerNode, address.IP, peerPort, peerPort) - node.server.AddPeer(peer) + nodes[i].server.AddPeer(peer) } - - nodes[i] = &node } } +func startServer(t *testing.T, s *p2p.Server) { + err := s.Start() + if err != nil { + t.Fatalf("failed to start the fisrt server.") + } + + atomic.AddInt64(&result.started, 1) +} + func stopServers() { for i := 0; i < NumNodes; i++ { n := nodes[i] @@ -483,3 +494,16 @@ func checkBloomFilterExchange(t *testing.T) { time.Sleep(50 * time.Millisecond) } } + +func waitForServersToStart(t *testing.T) { + const iterations = 200 + var started int64 + for j := 0; j < iterations; j++ { + time.Sleep(50 * time.Millisecond) + started = atomic.LoadInt64(&result.started) + if started == NumNodes { + return + } + } + t.Fatalf("Failed to start all the servers, running: %d", started) +}