|
|
@@ -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
|
|
|
}
|