aboutsummaryrefslogtreecommitdiffstats
path: root/cmd
diff options
context:
space:
mode:
authorFelix Lange <fjl@twurst.com>2019-09-11 20:41:22 +0800
committerGitHub <noreply@github.com>2019-09-11 20:41:22 +0800
commit39b0b1a1a6506c8c25fcff56f4d70a85739dcb6a (patch)
tree9a490d5d860a2cefdeb4c3c60a9def3d88cabbe9 /cmd
parent91b73495098c7941e3eb1c58a702952bf5acf1a6 (diff)
downloadgo-tangerine-39b0b1a1a6506c8c25fcff56f4d70a85739dcb6a.tar
go-tangerine-39b0b1a1a6506c8c25fcff56f4d70a85739dcb6a.tar.gz
go-tangerine-39b0b1a1a6506c8c25fcff56f4d70a85739dcb6a.tar.bz2
go-tangerine-39b0b1a1a6506c8c25fcff56f4d70a85739dcb6a.tar.lz
go-tangerine-39b0b1a1a6506c8c25fcff56f4d70a85739dcb6a.tar.xz
go-tangerine-39b0b1a1a6506c8c25fcff56f4d70a85739dcb6a.tar.zst
go-tangerine-39b0b1a1a6506c8c25fcff56f4d70a85739dcb6a.zip
all: make unit tests work with Go 1.13 (#20053)
Most of these changes are related to the Go 1.13 changes to test binary flag handling. * cmd/geth: make attach tests more reliable This makes the test wait for the endpoint to come up by polling it instead of waiting for two seconds. * tests: fix test binary flags for Go 1.13 Calling flag.Parse during package initialization is prohibited as of Go 1.13 and causes test failures. Call it in TestMain instead. * crypto/ecies: remove useless -dump flag in tests * p2p/simulations: fix test binary flags for Go 1.13 Calling flag.Parse during package initialization is prohibited as of Go 1.13 and causes test failures. Call it in TestMain instead. * build: remove workaround for ./... vendor matching This workaround was necessary for Go 1.8. The Go 1.9 release changed the expansion rules to exclude vendored packages. * Makefile: use relative path for GOBIN This makes the "Run ./build/bin/..." line look nicer. * les: fix test binary flags for Go 1.13 Calling flag.Parse during package initialization is prohibited as of Go 1.13 and causes test failures. Call it in TestMain instead.
Diffstat (limited to 'cmd')
-rw-r--r--cmd/geth/consolecmd_test.go12
-rw-r--r--cmd/geth/run_test.go28
2 files changed, 35 insertions, 5 deletions
diff --git a/cmd/geth/consolecmd_test.go b/cmd/geth/consolecmd_test.go
index 436045119..33c83b7ed 100644
--- a/cmd/geth/consolecmd_test.go
+++ b/cmd/geth/consolecmd_test.go
@@ -87,7 +87,7 @@ func TestIPCAttachWelcome(t *testing.T) {
"--port", "0", "--maxpeers", "0", "--nodiscover", "--nat", "none",
"--etherbase", coinbase, "--shh", "--ipcpath", ipc)
- time.Sleep(2 * time.Second) // Simple way to wait for the RPC endpoint to open
+ waitForEndpoint(t, ipc, 3*time.Second)
testAttachWelcome(t, geth, "ipc:"+ipc, ipcAPIs)
geth.Interrupt()
@@ -101,8 +101,9 @@ func TestHTTPAttachWelcome(t *testing.T) {
"--port", "0", "--maxpeers", "0", "--nodiscover", "--nat", "none",
"--etherbase", coinbase, "--rpc", "--rpcport", port)
- time.Sleep(2 * time.Second) // Simple way to wait for the RPC endpoint to open
- testAttachWelcome(t, geth, "http://localhost:"+port, httpAPIs)
+ endpoint := "http://127.0.0.1:" + port
+ waitForEndpoint(t, endpoint, 3*time.Second)
+ testAttachWelcome(t, geth, endpoint, httpAPIs)
geth.Interrupt()
geth.ExpectExit()
@@ -116,8 +117,9 @@ func TestWSAttachWelcome(t *testing.T) {
"--port", "0", "--maxpeers", "0", "--nodiscover", "--nat", "none",
"--etherbase", coinbase, "--ws", "--wsport", port)
- time.Sleep(2 * time.Second) // Simple way to wait for the RPC endpoint to open
- testAttachWelcome(t, geth, "ws://localhost:"+port, httpAPIs)
+ endpoint := "ws://127.0.0.1:" + port
+ waitForEndpoint(t, endpoint, 3*time.Second)
+ testAttachWelcome(t, geth, endpoint, httpAPIs)
geth.Interrupt()
geth.ExpectExit()
diff --git a/cmd/geth/run_test.go b/cmd/geth/run_test.go
index da82facac..f7b735b84 100644
--- a/cmd/geth/run_test.go
+++ b/cmd/geth/run_test.go
@@ -17,13 +17,16 @@
package main
import (
+ "context"
"fmt"
"io/ioutil"
"os"
"testing"
+ "time"
"github.com/docker/docker/pkg/reexec"
"github.com/ethereum/go-ethereum/internal/cmdtest"
+ "github.com/ethereum/go-ethereum/rpc"
)
func tmpdir(t *testing.T) string {
@@ -96,3 +99,28 @@ func runGeth(t *testing.T, args ...string) *testgeth {
return tt
}
+
+// waitForEndpoint attempts to connect to an RPC endpoint until it succeeds.
+func waitForEndpoint(t *testing.T, endpoint string, timeout time.Duration) {
+ probe := func() bool {
+ ctx, cancel := context.WithTimeout(context.Background(), timeout)
+ defer cancel()
+ c, err := rpc.DialContext(ctx, endpoint)
+ if c != nil {
+ _, err = c.SupportedModules()
+ c.Close()
+ }
+ return err == nil
+ }
+
+ start := time.Now()
+ for {
+ if probe() {
+ return
+ }
+ if time.Since(start) > timeout {
+ t.Fatal("endpoint", endpoint, "did not open within", timeout)
+ }
+ time.Sleep(200 * time.Millisecond)
+ }
+}