Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

p2p/simulations: fix staticcheck warnings #20322

Merged
merged 2 commits into from
Nov 19, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are you sure about this one? I thought that using t in a goroutine was creating a problem.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

calling t.Errorf in a separate goroutine is OK

}
}

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)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same question

}
}
}

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