Skip to content

Commit

Permalink
p2p/simulations: fix staticcheck warnings (ethereum#20322)
Browse files Browse the repository at this point in the history
  • Loading branch information
fjl authored and enriquefynn committed Feb 15, 2021
1 parent f07437e commit f9fd410
Show file tree
Hide file tree
Showing 5 changed files with 122 additions and 184 deletions.
2 changes: 0 additions & 2 deletions p2p/simulations/adapters/exec.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ package adapters
import (
"bytes"
"context"
"crypto/ecdsa"
"encoding/json"
"errors"
"fmt"
Expand Down Expand Up @@ -146,7 +145,6 @@ type ExecNode struct {
client *rpc.Client
wsAddr string
newCmd func() *exec.Cmd
key *ecdsa.PrivateKey
}

// Addr returns the node's enode URL
Expand Down
269 changes: 106 additions & 163 deletions p2p/simulations/adapters/inproc_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ import (
"bytes"
"encoding/binary"
"fmt"
"sync"
"testing"
"time"

"github.com/ethereum/go-ethereum/p2p/simulations/pipes"
)
Expand All @@ -32,42 +32,26 @@ func TestTCPPipe(t *testing.T) {
t.Fatal(err)
}

done := make(chan struct{})

go func() {
msgs := 50
size := 1024
for i := 0; i < msgs; i++ {
msg := make([]byte, size)
_ = binary.PutUvarint(msg, uint64(i))

_, err := c1.Write(msg)
if err != nil {
t.Fatal(err)
}
msgs := 50
size := 1024
for i := 0; i < msgs; i++ {
msg := make([]byte, size)
binary.PutUvarint(msg, uint64(i))
if _, err := c1.Write(msg); err != nil {
t.Fatal(err)
}
}

for i := 0; i < msgs; i++ {
msg := make([]byte, size)
_ = binary.PutUvarint(msg, uint64(i))

out := make([]byte, size)
_, err := c2.Read(out)
if err != nil {
t.Fatal(err)
}

if !bytes.Equal(msg, out) {
t.Fatalf("expected %#v, got %#v", msg, out)
}
for i := 0; i < msgs; i++ {
msg := make([]byte, size)
binary.PutUvarint(msg, uint64(i))
out := make([]byte, size)
if _, err := c2.Read(out); err != nil {
t.Fatal(err)
}
if !bytes.Equal(msg, out) {
t.Fatalf("expected %#v, got %#v", msg, out)
}
done <- struct{}{}
}()

select {
case <-done:
case <-time.After(5 * time.Second):
t.Fatal("test timeout")
}
}

Expand All @@ -77,60 +61,41 @@ func TestTCPPipeBidirections(t *testing.T) {
t.Fatal(err)
}

done := make(chan struct{})

go func() {
msgs := 50
size := 7
for i := 0; i < msgs; i++ {
msg := []byte(fmt.Sprintf("ping %02d", i))

_, err := c1.Write(msg)
if err != nil {
t.Fatal(err)
}
msgs := 50
size := 7
for i := 0; i < msgs; i++ {
msg := []byte(fmt.Sprintf("ping %02d", i))
if _, err := c1.Write(msg); err != nil {
t.Fatal(err)
}
}

for i := 0; i < msgs; i++ {
expected := []byte(fmt.Sprintf("ping %02d", i))

out := make([]byte, size)
_, err := c2.Read(out)
if err != nil {
t.Fatal(err)
}

if !bytes.Equal(expected, out) {
t.Fatalf("expected %#v, got %#v", out, expected)
} else {
msg := []byte(fmt.Sprintf("pong %02d", i))
_, err := c2.Write(msg)
if err != nil {
t.Fatal(err)
}
}
for i := 0; i < msgs; i++ {
expected := []byte(fmt.Sprintf("ping %02d", i))
out := make([]byte, size)
if _, err := c2.Read(out); err != nil {
t.Fatal(err)
}

for i := 0; i < msgs; i++ {
expected := []byte(fmt.Sprintf("pong %02d", i))

out := make([]byte, size)
_, err := c1.Read(out)
if err != nil {
if !bytes.Equal(expected, out) {
t.Fatalf("expected %#v, got %#v", out, expected)
} else {
msg := []byte(fmt.Sprintf("pong %02d", i))
if _, err := c2.Write(msg); err != nil {
t.Fatal(err)
}

if !bytes.Equal(expected, out) {
t.Fatalf("expected %#v, got %#v", out, expected)
}
}
done <- struct{}{}
}()
}

select {
case <-done:
case <-time.After(5 * time.Second):
t.Fatal("test timeout")
for i := 0; i < msgs; i++ {
expected := []byte(fmt.Sprintf("pong %02d", i))
out := make([]byte, size)
if _, err := c1.Read(out); err != nil {
t.Fatal(err)
}
if !bytes.Equal(expected, out) {
t.Fatalf("expected %#v, got %#v", out, expected)
}
}
}

Expand All @@ -140,46 +105,35 @@ func TestNetPipe(t *testing.T) {
t.Fatal(err)
}

done := make(chan struct{})
msgs := 50
size := 1024
var wg sync.WaitGroup
defer wg.Wait()

// netPipe is blocking, so writes are emitted asynchronously
wg.Add(1)
go func() {
msgs := 50
size := 1024
// netPipe is blocking, so writes are emitted asynchronously
go func() {
for i := 0; i < msgs; i++ {
msg := make([]byte, size)
_ = binary.PutUvarint(msg, uint64(i))

_, err := c1.Write(msg)
if err != nil {
t.Fatal(err)
}
}
}()
defer wg.Done()

for i := 0; i < msgs; i++ {
msg := make([]byte, size)
_ = binary.PutUvarint(msg, uint64(i))

out := make([]byte, size)
_, err := c2.Read(out)
if err != nil {
t.Fatal(err)
}

if !bytes.Equal(msg, out) {
t.Fatalf("expected %#v, got %#v", msg, out)
binary.PutUvarint(msg, uint64(i))
if _, err := c1.Write(msg); err != nil {
t.Error(err)
}
}

done <- struct{}{}
}()

select {
case <-done:
case <-time.After(5 * time.Second):
t.Fatal("test timeout")
for i := 0; i < msgs; i++ {
msg := make([]byte, size)
binary.PutUvarint(msg, uint64(i))
out := make([]byte, size)
if _, err := c2.Read(out); err != nil {
t.Error(err)
}
if !bytes.Equal(msg, out) {
t.Errorf("expected %#v, got %#v", msg, out)
}
}
}

Expand All @@ -189,71 +143,60 @@ func TestNetPipeBidirections(t *testing.T) {
t.Fatal(err)
}

done := make(chan struct{})
msgs := 1000
size := 8
pingTemplate := "ping %03d"
pongTemplate := "pong %03d"
var wg sync.WaitGroup
defer wg.Wait()

// netPipe is blocking, so writes are emitted asynchronously
wg.Add(1)
go func() {
msgs := 1000
size := 8
pingTemplate := "ping %03d"
pongTemplate := "pong %03d"

// netPipe is blocking, so writes are emitted asynchronously
go func() {
for i := 0; i < msgs; i++ {
msg := []byte(fmt.Sprintf(pingTemplate, i))
defer wg.Done()

_, err := c1.Write(msg)
if err != nil {
t.Fatal(err)
}
}
}()

// netPipe is blocking, so reads for pong are emitted asynchronously
go func() {
for i := 0; i < msgs; i++ {
expected := []byte(fmt.Sprintf(pongTemplate, i))

out := make([]byte, size)
_, err := c1.Read(out)
if err != nil {
t.Fatal(err)
}

if !bytes.Equal(expected, out) {
t.Fatalf("expected %#v, got %#v", expected, out)
}
for i := 0; i < msgs; i++ {
msg := []byte(fmt.Sprintf(pingTemplate, i))
if _, err := c1.Write(msg); err != nil {
t.Error(err)
}
}
}()

done <- struct{}{}
}()
// netPipe is blocking, so reads for pong are emitted asynchronously
wg.Add(1)
go func() {
defer wg.Done()

// expect to read pings, and respond with pongs to the alternate connection
for i := 0; i < msgs; i++ {
expected := []byte(fmt.Sprintf(pingTemplate, i))

expected := []byte(fmt.Sprintf(pongTemplate, i))
out := make([]byte, size)
_, err := c2.Read(out)
if err != nil {
t.Fatal(err)
if _, err := c1.Read(out); err != nil {
t.Error(err)
}

if !bytes.Equal(expected, out) {
t.Fatalf("expected %#v, got %#v", expected, out)
} else {
msg := []byte(fmt.Sprintf(pongTemplate, i))

_, err := c2.Write(msg)
if err != nil {
t.Fatal(err)
}
t.Errorf("expected %#v, got %#v", expected, out)
}
}
}()

select {
case <-done:
case <-time.After(5 * time.Second):
t.Fatal("test timeout")
// expect to read pings, and respond with pongs to the alternate connection
for i := 0; i < msgs; i++ {
expected := []byte(fmt.Sprintf(pingTemplate, i))

out := make([]byte, size)
_, err := c2.Read(out)
if err != nil {
t.Fatal(err)
}

if !bytes.Equal(expected, out) {
t.Errorf("expected %#v, got %#v", expected, out)
} else {
msg := []byte(fmt.Sprintf(pongTemplate, i))
if _, err := c2.Write(msg); err != nil {
t.Fatal(err)
}
}
}
}
9 changes: 2 additions & 7 deletions p2p/simulations/http.go
Original file line number Diff line number Diff line change
Expand Up @@ -384,12 +384,6 @@ func (s *Server) StreamNetworkEvents(w http.ResponseWriter, req *http.Request) {
sub := s.network.events.Subscribe(events)
defer sub.Unsubscribe()

// stop the stream if the client goes away
var clientGone <-chan bool
if cn, ok := w.(http.CloseNotifier); ok {
clientGone = cn.CloseNotify()
}

// write writes the given event and data to the stream like:
//
// event: <event>
Expand Down Expand Up @@ -455,6 +449,7 @@ func (s *Server) StreamNetworkEvents(w http.ResponseWriter, req *http.Request) {
}
}

clientGone := req.Context().Done()
for {
select {
case event := <-events:
Expand Down Expand Up @@ -710,7 +705,7 @@ func (s *Server) wrapHandler(handler http.HandlerFunc) httprouter.Handle {
w.Header().Set("Access-Control-Allow-Origin", "*")
w.Header().Set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS")

ctx := context.Background()
ctx := req.Context()

if id := params.ByName("nodeid"); id != "" {
var nodeID enode.ID
Expand Down
Loading

0 comments on commit f9fd410

Please sign in to comment.