Skip to content

Commit

Permalink
whisper: made peer_test.go more portable
Browse files Browse the repository at this point in the history
* Made tests more portable by using random free port
instead of hardcoded port 30303 to fix #15685
  • Loading branch information
original-brownbear committed Jun 1, 2018
1 parent af28d12 commit 0931bcf
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 73 deletions.
38 changes: 15 additions & 23 deletions whisper/whisperv5/peer_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ package whisperv5
import (
"bytes"
"crypto/ecdsa"
"fmt"
"net"
"sync"
"testing"
Expand Down Expand Up @@ -108,8 +107,6 @@ func TestSimulation(t *testing.T) {

func initialize(t *testing.T) {
var err error
ip := net.IPv4(127, 0, 0, 1)
port0 := 30303

for i := 0; i < NumNodes; i++ {
var node TestNode
Expand All @@ -128,29 +125,15 @@ func initialize(t *testing.T) {
if err != nil {
t.Fatalf("failed convert the key: %s.", keys[i])
}
port := port0 + i
addr := fmt.Sprintf(":%d", port) // e.g. ":30303"
name := common.MakeName("whisper-go", "2.0")
var peers []*discover.Node
if i > 0 {
peerNodeId := nodes[i-1].id
peerPort := uint16(port - 1)
peerNode := discover.PubkeyID(&peerNodeId.PublicKey)
peer := discover.NewNode(peerNode, ip, peerPort, peerPort)
peers = append(peers, peer)
}

node.server = &p2p.Server{
Config: p2p.Config{
PrivateKey: node.id,
MaxPeers: NumNodes/2 + 1,
Name: name,
Protocols: node.shh.Protocols(),
ListenAddr: addr,
NAT: nat.Any(),
BootstrapNodes: peers,
StaticNodes: peers,
TrustedNodes: peers,
PrivateKey: node.id,
MaxPeers: NumNodes/2 + 1,
Name: name,
Protocols: node.shh.Protocols(),
ListenAddr: "127.0.0.1:0",
NAT: nat.Any(),
},
}

Expand All @@ -159,6 +142,15 @@ func initialize(t *testing.T) {
t.Fatalf("failed to start server %d.", 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] = &node
}
}
Expand Down
71 changes: 21 additions & 50 deletions whisper/whisperv6/peer_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,12 @@ import (
"crypto/ecdsa"
"fmt"
mrand "math/rand"
"net"
"sync"
"sync/atomic"
"testing"
"time"

"net"

"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common/hexutil"
"github.com/ethereum/go-ethereum/crypto"
Expand Down Expand Up @@ -173,8 +173,6 @@ func initialize(t *testing.T) {
initBloom(t)

var err error
ip := net.IPv4(127, 0, 0, 1)
port0 := 30303

for i := 0; i < NumNodes; i++ {
var node TestNode
Expand All @@ -199,49 +197,35 @@ func initialize(t *testing.T) {
if err != nil {
t.Fatalf("failed convert the key: %s.", keys[i])
}
port := port0 + i
addr := fmt.Sprintf(":%d", port) // e.g. ":30303"
name := common.MakeName("whisper-go", "2.0")
var peers []*discover.Node
if i > 0 {
peerNodeID := nodes[i-1].id
peerPort := uint16(port - 1)
peerNode := discover.PubkeyID(&peerNodeID.PublicKey)
peer := discover.NewNode(peerNode, ip, peerPort, peerPort)
peers = append(peers, peer)
}

node.server = &p2p.Server{
Config: p2p.Config{
PrivateKey: node.id,
MaxPeers: NumNodes/2 + 1,
Name: name,
Protocols: node.shh.Protocols(),
ListenAddr: addr,
NAT: nat.Any(),
BootstrapNodes: peers,
StaticNodes: peers,
TrustedNodes: peers,
PrivateKey: node.id,
MaxPeers: NumNodes/2 + 1,
Name: name,
Protocols: node.shh.Protocols(),
ListenAddr: "127.0.0.1:0",
NAT: nat.Any(),
},
}

nodes[i] = &node
}

for i := 0; i < NumNodes; i++ {
go startServer(t, nodes[i].server)
}
err = node.server.Start()
if err != nil {
t.Fatalf("failed to start server %d.", i)
}

waitForServersToStart(t)
}
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)
}

func startServer(t *testing.T, s *p2p.Server) {
err := s.Start()
if err != nil {
t.Fatalf("failed to start the fisrt server.")
nodes[i] = &node
}

atomic.AddInt64(&result.started, 1)
}

func stopServers() {
Expand Down Expand Up @@ -499,16 +483,3 @@ 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)
}

0 comments on commit 0931bcf

Please sign in to comment.