aboutsummaryrefslogtreecommitdiffstats
path: root/p2p/simulations/http_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'p2p/simulations/http_test.go')
-rw-r--r--p2p/simulations/http_test.go55
1 files changed, 52 insertions, 3 deletions
diff --git a/p2p/simulations/http_test.go b/p2p/simulations/http_test.go
index 7bdbad1b5..d9513caaa 100644
--- a/p2p/simulations/http_test.go
+++ b/p2p/simulations/http_test.go
@@ -18,6 +18,7 @@ package simulations
import (
"context"
+ "flag"
"fmt"
"math/rand"
"net/http/httptest"
@@ -28,13 +29,26 @@ import (
"time"
"github.com/ethereum/go-ethereum/event"
+ "github.com/ethereum/go-ethereum/log"
"github.com/ethereum/go-ethereum/node"
"github.com/ethereum/go-ethereum/p2p"
"github.com/ethereum/go-ethereum/p2p/enode"
"github.com/ethereum/go-ethereum/p2p/simulations/adapters"
"github.com/ethereum/go-ethereum/rpc"
+ colorable "github.com/mattn/go-colorable"
)
+var (
+ loglevel = flag.Int("loglevel", 2, "verbosity of logs")
+)
+
+func init() {
+ flag.Parse()
+
+ log.PrintOrigins(true)
+ log.Root().SetHandler(log.LvlFilterHandler(log.Lvl(*loglevel), log.StreamHandler(colorable.NewColorableStderr(), log.TerminalFormat(true))))
+}
+
// testService implements the node.Service interface and provides protocols
// and APIs which are useful for testing nodes in a simulation network
type testService struct {
@@ -584,9 +598,26 @@ func TestHTTPNodeRPC(t *testing.T) {
// TestHTTPSnapshot tests creating and loading network snapshots
func TestHTTPSnapshot(t *testing.T) {
// start the server
- _, s := testHTTPServer(t)
+ network, s := testHTTPServer(t)
defer s.Close()
+ var eventsDone = make(chan struct{})
+ count := 1
+ eventsDoneChan := make(chan *Event)
+ eventSub := network.Events().Subscribe(eventsDoneChan)
+ go func() {
+ defer eventSub.Unsubscribe()
+ for event := range eventsDoneChan {
+ if event.Type == EventTypeConn && !event.Control {
+ count--
+ if count == 0 {
+ eventsDone <- struct{}{}
+ return
+ }
+ }
+ }
+ }()
+
// create a two-node network
client := NewClient(s.URL)
nodeCount := 2
@@ -620,7 +651,7 @@ func TestHTTPSnapshot(t *testing.T) {
}
states[i] = state
}
-
+ <-eventsDone
// create a snapshot
snap, err := client.CreateSnapshot()
if err != nil {
@@ -634,9 +665,23 @@ func TestHTTPSnapshot(t *testing.T) {
}
// create another network
- _, s = testHTTPServer(t)
+ network2, s := testHTTPServer(t)
defer s.Close()
client = NewClient(s.URL)
+ count = 1
+ eventSub = network2.Events().Subscribe(eventsDoneChan)
+ go func() {
+ defer eventSub.Unsubscribe()
+ for event := range eventsDoneChan {
+ if event.Type == EventTypeConn && !event.Control {
+ count--
+ if count == 0 {
+ eventsDone <- struct{}{}
+ return
+ }
+ }
+ }
+ }()
// subscribe to events so we can check them later
events := make(chan *Event, 100)
@@ -651,6 +696,7 @@ func TestHTTPSnapshot(t *testing.T) {
if err := client.LoadSnapshot(snap); err != nil {
t.Fatalf("error loading snapshot: %s", err)
}
+ <-eventsDone
// check the nodes and connection exists
net, err := client.GetNetwork()
@@ -676,6 +722,9 @@ func TestHTTPSnapshot(t *testing.T) {
if conn.Other.String() != nodes[1].ID {
t.Fatalf("expected connection to have other=%q, got other=%q", nodes[1].ID, conn.Other)
}
+ if !conn.Up {
+ t.Fatal("should be up")
+ }
// check the node states were restored
for i, node := range nodes {