|
|
|
@ -2,7 +2,10 @@ package main |
|
|
|
|
|
|
|
|
|
import ( |
|
|
|
|
"context" |
|
|
|
|
"os" |
|
|
|
|
"path/filepath" |
|
|
|
|
"runtime" |
|
|
|
|
"strings" |
|
|
|
|
"testing" |
|
|
|
|
"time" |
|
|
|
|
|
|
|
|
@ -95,6 +98,27 @@ func (g *gethrpc) waitSynced() { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// ipcEndpoint resolves an IPC endpoint based on a configured value, taking into
|
|
|
|
|
// account the set data folders as well as the designated platform we're currently
|
|
|
|
|
// running on.
|
|
|
|
|
func ipcEndpoint(ipcPath, datadir string) string { |
|
|
|
|
// On windows we can only use plain top-level pipes
|
|
|
|
|
if runtime.GOOS == "windows" { |
|
|
|
|
if strings.HasPrefix(ipcPath, `\\.\pipe\`) { |
|
|
|
|
return ipcPath |
|
|
|
|
} |
|
|
|
|
return `\\.\pipe\` + ipcPath |
|
|
|
|
} |
|
|
|
|
// Resolve names into the data directory full paths otherwise
|
|
|
|
|
if filepath.Base(ipcPath) == ipcPath { |
|
|
|
|
if datadir == "" { |
|
|
|
|
return filepath.Join(os.TempDir(), ipcPath) |
|
|
|
|
} |
|
|
|
|
return filepath.Join(datadir, ipcPath) |
|
|
|
|
} |
|
|
|
|
return ipcPath |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func startGethWithIpc(t *testing.T, name string, args ...string) *gethrpc { |
|
|
|
|
g := &gethrpc{name: name} |
|
|
|
|
args = append([]string{"--networkid=42", "--port=0", "--nousb"}, args...) |
|
|
|
@ -103,10 +127,10 @@ func startGethWithIpc(t *testing.T, name string, args ...string) *gethrpc { |
|
|
|
|
// wait before we can attach to it. TODO: probe for it properly
|
|
|
|
|
time.Sleep(1 * time.Second) |
|
|
|
|
var err error |
|
|
|
|
ipcpath := filepath.Join(g.geth.Datadir, "geth.ipc") |
|
|
|
|
ipcpath := ipcEndpoint("geth.ipc", g.geth.Datadir) |
|
|
|
|
g.rpc, err = rpc.Dial(ipcpath) |
|
|
|
|
if err != nil { |
|
|
|
|
t.Fatalf("%v rpc connect: %v", name, err) |
|
|
|
|
t.Fatalf("%v rpc connect to %v: %v", name, ipcpath, err) |
|
|
|
|
} |
|
|
|
|
return g |
|
|
|
|
} |
|
|
|
|