veyron/lib/modules: make the Start method take an env parameter and delete StartWithEnv.
Change-Id: Iecb9d3b0de653138ce4edcbadaeb828c86790a98
diff --git a/lib/modules/core/core_test.go b/lib/modules/core/core_test.go
index c108b72..19ee38b 100644
--- a/lib/modules/core/core_test.go
+++ b/lib/modules/core/core_test.go
@@ -21,10 +21,10 @@
)
func TestCommands(t *testing.T) {
- shell := core.NewShell()
- defer shell.Cleanup(nil, os.Stderr)
+ sh := core.NewShell()
+ defer sh.Cleanup(nil, os.Stderr)
for _, c := range []string{core.RootMTCommand, core.MTCommand} {
- if len(shell.Help(c)) == 0 {
+ if len(sh.Help(c)) == 0 {
t.Fatalf("missing command %q", c)
}
}
@@ -53,9 +53,9 @@
}
func TestRoot(t *testing.T) {
- shell, fn := newShell()
+ sh, fn := newShell()
defer fn()
- root, err := shell.Start(core.RootMTCommand, testArgs()...)
+ root, err := sh.Start(core.RootMTCommand, nil, testArgs()...)
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
@@ -68,7 +68,7 @@
func startMountTables(t *testing.T, sh *modules.Shell, mountPoints ...string) (map[string]string, func(), error) {
// Start root mount table
- root, err := sh.Start(core.RootMTCommand, testArgs()...)
+ root, err := sh.Start(core.RootMTCommand, nil, testArgs()...)
if err != nil {
t.Fatalf("unexpected error for root mt: %s", err)
}
@@ -84,7 +84,7 @@
// Start the mount tables
for _, mp := range mountPoints {
- h, err := sh.Start(core.MTCommand, testArgs(mp)...)
+ h, err := sh.Start(core.MTCommand, nil, testArgs(mp)...)
if err != nil {
return nil, nil, fmt.Errorf("unexpected error for mt %q: %s", mp, err)
}
@@ -126,18 +126,18 @@
}
func TestMountTableAndGlob(t *testing.T) {
- shell, fn := newShell()
+ sh, fn := newShell()
defer fn()
mountPoints := []string{"a", "b", "c", "d", "e"}
- mountAddrs, fn, err := startMountTables(t, shell, mountPoints...)
+ mountAddrs, fn, err := startMountTables(t, sh, mountPoints...)
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
defer fn()
rootName := mountAddrs["root"]
- ls, err := shell.Start(core.LSCommand, rootName+"/...")
+ ls, err := sh.Start(core.LSCommand, nil, rootName+"/...")
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
@@ -167,7 +167,7 @@
}
// Run the ls command in a subprocess, with NAMESPACE_ROOT as set above.
- lse, err := shell.Start(core.LSExternalCommand, "...")
+ lse, err := sh.Start(core.LSExternalCommand, nil, "...")
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
@@ -198,10 +198,10 @@
}
func TestEcho(t *testing.T) {
- shell, fn := newShell()
+ sh, fn := newShell()
defer fn()
- srv, err := shell.Start(core.EchoServerCommand, testArgs("test", "")...)
+ srv, err := sh.Start(core.EchoServerCommand, nil, testArgs("test", "")...)
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
@@ -210,7 +210,7 @@
if len(name) == 0 {
t.Fatalf("failed to get name")
}
- clt, err := shell.Start(core.EchoClientCommand, name, "a message")
+ clt, err := sh.Start(core.EchoClientCommand, nil, name, "a message")
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
@@ -220,11 +220,11 @@
}
func TestResolve(t *testing.T) {
- shell, fn := newShell()
+ sh, fn := newShell()
defer fn()
mountPoints := []string{"a", "b"}
- mountAddrs, fn, err := startMountTables(t, shell, mountPoints...)
+ mountAddrs, fn, err := startMountTables(t, sh, mountPoints...)
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
@@ -232,7 +232,7 @@
rootName := mountAddrs["root"]
mtName := "b"
echoName := naming.Join(mtName, "echo")
- srv, err := shell.Start(core.EchoServerCommand, testArgs("test", echoName)...)
+ srv, err := sh.Start(core.EchoServerCommand, nil, testArgs("test", echoName)...)
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
@@ -242,7 +242,7 @@
addr = naming.JoinAddressName(addr, "//")
// Resolve an object
- resolver, err := shell.Start(core.ResolveCommand, rootName+"/"+echoName)
+ resolver, err := sh.Start(core.ResolveCommand, nil, rootName+"/"+echoName)
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
@@ -259,7 +259,7 @@
// Resolve to a mount table using a rooted name.
addr = naming.JoinAddressName(mountAddrs[mtName], "//echo")
- resolver, err = shell.Start(core.ResolveMTCommand, rootName+"/"+echoName)
+ resolver, err = sh.Start(core.ResolveMTCommand, nil, rootName+"/"+echoName)
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
@@ -275,7 +275,7 @@
}
// Resolve to a mount table, but using a relative name.
- nsroots, err := shell.Start(core.SetNamespaceRootsCommand, rootName)
+ nsroots, err := sh.Start(core.SetNamespaceRootsCommand, nil, rootName)
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
@@ -283,7 +283,7 @@
t.Fatalf("unexpected error: %s", err)
}
- resolver, err = shell.Start(core.ResolveMTCommand, echoName)
+ resolver, err = sh.Start(core.ResolveMTCommand, nil, echoName)
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
diff --git a/lib/modules/modules_internal_test.go b/lib/modules/modules_internal_test.go
index f60b2bb..07e76bc 100644
--- a/lib/modules/modules_internal_test.go
+++ b/lib/modules/modules_internal_test.go
@@ -35,9 +35,9 @@
sh.AddFunction("echof", Echo, "[args]*")
assertNumHandles(t, sh, 0)
- _, _ = sh.Start("echonotregistered") // won't start.
- hs, _ := sh.Start("echos", "a")
- hf, _ := sh.Start("echof", "b")
+ _, _ = sh.Start("echonotregistered", nil) // won't start.
+ hs, _ := sh.Start("echos", nil, "a")
+ hf, _ := sh.Start("echof", nil, "b")
assertNumHandles(t, sh, 2)
for i, h := range []Handle{hs, hf} {
@@ -47,8 +47,8 @@
}
assertNumHandles(t, sh, 0)
- hs, _ = sh.Start("echos", "a", "b")
- hf, _ = sh.Start("echof", "c")
+ hs, _ = sh.Start("echos", nil, "a", "b")
+ hf, _ = sh.Start("echof", nil, "c")
assertNumHandles(t, sh, 2)
sh.Cleanup(nil, nil)
diff --git a/lib/modules/modules_test.go b/lib/modules/modules_test.go
index 0c611d6..e155934 100644
--- a/lib/modules/modules_test.go
+++ b/lib/modules/modules_test.go
@@ -75,7 +75,7 @@
}
func testCommand(t *testing.T, sh *modules.Shell, name, key, val string) {
- h, err := sh.Start(name, key)
+ h, err := sh.Start(name, nil, key)
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
@@ -124,7 +124,7 @@
key, val := "simpleVar", "foo & bar"
sh.SetVar(key, val)
testCommand(t, sh, "envtest", key, val)
- _, err := sh.Start("non-existent-command", "random", "args")
+ _, err := sh.Start("non-existent-command", nil, "random", "args")
if err == nil || err.Error() != `Shell command "non-existent-command" not registered` {
t.Fatalf("unexpected error %v", err)
}
@@ -142,7 +142,7 @@
func TestErrorChild(t *testing.T) {
sh := modules.NewShell("errortest")
defer sh.Cleanup(nil, nil)
- h, err := sh.Start("errortest")
+ h, err := sh.Start("errortest", nil)
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
@@ -154,7 +154,7 @@
func testShutdown(t *testing.T, sh *modules.Shell, isfunc bool) {
result := ""
args := []string{"a", "b c", "ddd"}
- if _, err := sh.Start("echo", args...); err != nil {
+ if _, err := sh.Start("echo", nil, args...); err != nil {
t.Fatalf("unexpected error: %s", err)
}
var stdoutBuf bytes.Buffer
@@ -191,7 +191,7 @@
sh := modules.NewShell()
defer sh.Cleanup(nil, nil)
sh.AddFunction("errortest", ErrorMain, "")
- h, err := sh.Start("errortest")
+ h, err := sh.Start("errortest", nil)
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
@@ -215,7 +215,7 @@
sh.SetVar("a", "1")
sh.SetVar("b", "2")
args := []string{"oh", "ah"}
- h, err := sh.Start("printenv", args...)
+ h, err := sh.Start("printenv", nil, args...)
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
@@ -265,7 +265,7 @@
sh.SetVar("b", "2 also wrong")
os.Setenv("b", "wrong, should be 2")
- h, err := sh.StartWithEnv("printenv", []string{"b=2"})
+ h, err := sh.Start("printenv", []string{"b=2"})
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
diff --git a/lib/modules/shell.go b/lib/modules/shell.go
index cb68856..6919bd3 100644
--- a/lib/modules/shell.go
+++ b/lib/modules/shell.go
@@ -176,8 +176,13 @@
}
// Start starts the specified command, it returns a Handle which can be used
-// for interacting with that command. The Shell tracks all of the Handles
-// that it creates so that it can shut them down when asked to.
+// for interacting with that command. The OS and shell environment variables
+// are merged with the ones supplied as a parameter; the parameter specified
+// ones override the Shell and the Shell ones override the OS ones.
+//
+// The Shell tracks all of the Handles that it creates so that it can shut
+// them down when asked to.
+//
// Commands may have already been registered with the Shell using AddFunction
// or AddSubprocess, but if not, they will treated as subprocess commands
// and an attempt made to run them. Such 'dynamically' started subprocess
@@ -185,13 +190,7 @@
// message etc; their handles are remembered and will be acted on by
// the Cleanup method. If the non-registered subprocess command does not
// exist then the Start command will return an error.
-func (sh *Shell) Start(name string, args ...string) (Handle, error) {
- return sh.StartWithEnv(name, nil, args...)
-}
-
-// StartWithEnv is like Start except with a set of environment variables
-// that override those in the Shell and the OS' environment.
-func (sh *Shell) StartWithEnv(name string, env []string, args ...string) (Handle, error) {
+func (sh *Shell) Start(name string, env []string, args ...string) (Handle, error) {
cenv := sh.MergedEnv(env)
cmd := sh.getCommand(name)
expanded := append([]string{name}, sh.expand(args...)...)
diff --git a/lib/signals/signals_test.go b/lib/signals/signals_test.go
index 636bbdb..b045ef9 100644
--- a/lib/signals/signals_test.go
+++ b/lib/signals/signals_test.go
@@ -113,7 +113,7 @@
func newShell(t *testing.T, command string) (*modules.Shell, modules.Handle, *expect.Session) {
sh := modules.NewShell()
sh.AddSubprocess(command, "")
- handle, err := sh.Start(command)
+ handle, err := sh.Start(command, nil)
if err != nil {
sh.Cleanup(os.Stderr, os.Stderr)
t.Fatalf("unexpected error: %s", err)
@@ -340,7 +340,7 @@
defer configServer.Stop()
sh.SetVar("VEYRON_CREDENTIALS", childcreds)
sh.SetVar(mgmt.ParentNodeManagerConfigKey, configServiceName)
- h, err := sh.Start("handleDefaults")
+ h, err := sh.Start("handleDefaults", nil)
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
diff --git a/runtimes/google/ipc/server_test.go b/runtimes/google/ipc/server_test.go
index 9718c2a..8a8020f 100644
--- a/runtimes/google/ipc/server_test.go
+++ b/runtimes/google/ipc/server_test.go
@@ -29,7 +29,7 @@
defer b.cleanup(t)
sh := modules.NewShell()
defer sh.Cleanup(os.Stderr, os.Stderr)
- server, err := sh.Start("runServer", "127.0.0.1:0")
+ server, err := sh.Start("runServer", nil, "127.0.0.1:0")
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
@@ -64,7 +64,7 @@
// Resurrect the server with the same address, verify client
// re-establishes the connection.
- server, err = sh.Start("runServer", addr)
+ server, err = sh.Start("runServer", nil, addr)
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
@@ -85,7 +85,7 @@
func (h *proxyHandle) Start(t *testing.T) error {
sh := modules.NewShell()
- server, err := sh.Start("runProxy")
+ server, err := sh.Start("runProxy", nil)
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
diff --git a/runtimes/google/ipc/stream/manager/manager_test.go b/runtimes/google/ipc/stream/manager/manager_test.go
index cd66579..873d882 100644
--- a/runtimes/google/ipc/stream/manager/manager_test.go
+++ b/runtimes/google/ipc/stream/manager/manager_test.go
@@ -438,7 +438,7 @@
client := InternalNew(naming.FixedRoutingID(0xcccccccc))
sh := modules.NewShell(".*")
defer sh.Cleanup(nil, nil)
- h, err := sh.Start("runServer", "127.0.0.1:0")
+ h, err := sh.Start("runServer", nil, "127.0.0.1:0")
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
@@ -459,7 +459,7 @@
t.Fatal("Expected client.Dial to fail since server is dead")
}
- h, err = sh.Start("runServer", addr)
+ h, err = sh.Start("runServer", nil, addr)
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
diff --git a/runtimes/google/rt/mgmt_test.go b/runtimes/google/rt/mgmt_test.go
index 4b3b757..0737a1e 100644
--- a/runtimes/google/rt/mgmt_test.go
+++ b/runtimes/google/rt/mgmt_test.go
@@ -113,7 +113,7 @@
func TestNoWaiters(t *testing.T) {
sh := modules.NewShell(noWaitersCmd)
defer sh.Cleanup(os.Stderr, os.Stderr)
- h, err := sh.Start(noWaitersCmd)
+ h, err := sh.Start(noWaitersCmd, nil)
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
@@ -139,7 +139,7 @@
func TestForceStop(t *testing.T) {
sh := modules.NewShell(forceStopCmd)
defer sh.Cleanup(os.Stderr, os.Stderr)
- h, err := sh.Start(forceStopCmd)
+ h, err := sh.Start(forceStopCmd, nil)
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
@@ -291,7 +291,7 @@
sh := modules.NewShell(appCmd)
sh.SetVar("VEYRON_CREDENTIALS", childcreds)
sh.SetVar(mgmt.ParentNodeManagerConfigKey, configServiceName)
- h, err := sh.Start("app")
+ h, err := sh.Start("app", nil)
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
diff --git a/runtimes/google/rt/rt_test.go b/runtimes/google/rt/rt_test.go
index 8b23035..cb1832e 100644
--- a/runtimes/google/rt/rt_test.go
+++ b/runtimes/google/rt/rt_test.go
@@ -78,7 +78,7 @@
func TestInitArgs(t *testing.T) {
sh := modules.NewShell("child")
defer sh.Cleanup(os.Stderr, os.Stderr)
- h, err := sh.Start("child", "--logtostderr=true", "--vv=3", "--", "foobar")
+ h, err := sh.Start("child", nil, "--logtostderr=true", "--vv=3", "--", "foobar")
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
diff --git a/runtimes/google/rt/signal_test.go b/runtimes/google/rt/signal_test.go
index 5aa1b3d..e37f883 100644
--- a/runtimes/google/rt/signal_test.go
+++ b/runtimes/google/rt/signal_test.go
@@ -47,7 +47,7 @@
func TestWithRuntime(t *testing.T) {
sh := modules.NewShell("withRuntime")
defer sh.Cleanup(os.Stderr, os.Stderr)
- h, err := sh.Start("withRuntime")
+ h, err := sh.Start("withRuntime", nil)
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
@@ -64,7 +64,7 @@
func TestWithoutRuntime(t *testing.T) {
sh := modules.NewShell("withoutRuntime")
defer sh.Cleanup(os.Stderr, os.Stderr)
- h, err := sh.Start("withoutRuntime")
+ h, err := sh.Start("withoutRuntime", nil)
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
diff --git a/runtimes/google/security/identity_test.go b/runtimes/google/security/identity_test.go
index 315e9cd..1dae49c 100644
--- a/runtimes/google/security/identity_test.go
+++ b/runtimes/google/security/identity_test.go
@@ -352,7 +352,7 @@
// registers all values encoded within the same process.
sh := modules.NewShell(".*")
defer sh.Cleanup(nil, nil)
- h, err := sh.Start("encodeUnregisteredCaveat")
+ h, err := sh.Start("encodeUnregisteredCaveat", nil)
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
diff --git a/services/mgmt/node/impl/util_test.go b/services/mgmt/node/impl/util_test.go
index 8c098dc..c039bbd 100644
--- a/services/mgmt/node/impl/util_test.go
+++ b/services/mgmt/node/impl/util_test.go
@@ -39,7 +39,7 @@
}
func startRootMT(t *testing.T, sh *modules.Shell) (string, modules.Handle, *expect.Session) {
- h, err := sh.Start(core.RootMTCommand, "--", "--veyron.tcp.address=127.0.0.1:0")
+ h, err := sh.Start(core.RootMTCommand, nil, "--", "--veyron.tcp.address=127.0.0.1:0")
if err != nil {
t.Fatalf("failed to start root mount table: %s", err)
}
@@ -72,10 +72,10 @@
vlog.VI(1).Info("---------------------------------")
sh.Cleanup(nil, os.Stderr)
mtHandle.Shutdown(nil, os.Stderr)
- sh.Start(core.SetNamespaceRootsCommand, "")
+ sh.Start(core.SetNamespaceRootsCommand, nil, "")
}
- if _, err := sh.Start(core.SetNamespaceRootsCommand, mtName); err != nil {
+ if _, err := sh.Start(core.SetNamespaceRootsCommand, nil, mtName); err != nil {
t.Fatalf("%s: unexpected error: %s", loc(1), err)
}
sh.SetVar("NAMESPACE_ROOT", mtName)
@@ -83,7 +83,7 @@
}
func runShellCommand(t *testing.T, sh *modules.Shell, env []string, cmd string, args ...string) (modules.Handle, *expect.Session) {
- h, err := sh.StartWithEnv(cmd, env, args...)
+ h, err := sh.Start(cmd, env, args...)
if err != nil {
t.Fatalf("%s: failed to start %q: %s", loc(1), cmd, err)
return nil, nil
diff --git a/tools/naming/simulator/driver.go b/tools/naming/simulator/driver.go
index c6abba2..4f944ca 100644
--- a/tools/naming/simulator/driver.go
+++ b/tools/naming/simulator/driver.go
@@ -189,7 +189,7 @@
}
output(lineno, l)
} else {
- handle, err := sh.Start(name, sub...)
+ handle, err := sh.Start(name, nil, sub...)
if err != nil {
return err
}