veyron.core: Fix tests that leave files in /tmp

This change fixes the tests that leave files in /tmp after returning
successfully. The goal is to leave no temporary files.

Change-Id: I1d5df68995472bbda98fb2aee1ac64cd57d4de4e
diff --git a/lib/modules/modules_test.go b/lib/modules/modules_test.go
index cee9708..074d39a 100644
--- a/lib/modules/modules_test.go
+++ b/lib/modules/modules_test.go
@@ -214,6 +214,7 @@
 	if err != nil {
 		t.Fatalf("unexpected error: %s", err)
 	}
+	defer sh.Cleanup(nil, nil)
 	testShutdown(t, sh, "echos", false)
 }
 
@@ -282,6 +283,7 @@
 	if err != nil {
 		t.Fatalf("unexpected error: %s", err)
 	}
+	defer sh.Cleanup(nil, nil)
 	testShutdown(t, sh, "echof", true)
 }
 
@@ -417,7 +419,6 @@
 	if err != nil {
 		t.Fatalf("unexpected error: %s", err)
 	}
-	defer sh.Cleanup(nil, nil)
 	if err := validateCredentials(startChildAndGetCredentials(sh, nil), "test-shell/child"); err != nil {
 		t.Fatal(err)
 	}
@@ -426,6 +427,7 @@
 	if cred1, cred2 := startChildAndGetCredentials(sh, nil), startChildAndGetCredentials(sh, nil); cred1 == cred2 {
 		t.Fatalf("The same credentials directory %v was set for two children", cred1)
 	}
+	sh.Cleanup(nil, nil)
 
 	// Test child credentials when VeyronCredentials are set.
 	root := tsecurity.NewPrincipal("root")
@@ -471,6 +473,7 @@
 	if err := validateCredentials(startChildAndGetCredentials(sh, nil), "root/anotherShell/child"); err != nil {
 		t.Fatal(err)
 	}
+	sh.Cleanup(nil, nil)
 
 	// Test that VeyronCredentials specified as a parameter overrides the OS and
 	// shell ones.
diff --git a/lib/modules/shell.go b/lib/modules/shell.go
index f4dcb7f..d9839c0 100644
--- a/lib/modules/shell.go
+++ b/lib/modules/shell.go
@@ -157,6 +157,7 @@
 	if err != nil {
 		return "", err
 	}
+	sh.tempCredDirs = append(sh.tempCredDirs, dir)
 	// Create a principal and default blessing for the child that is
 	// derived from the blessing created for this shell. This can
 	// be used by the parent to invoke RPCs on any children and for the
@@ -200,7 +201,6 @@
 			return "", err
 		}
 	}
-	sh.tempCredDirs = append(sh.tempCredDirs, dir)
 	return dir, nil
 }
 
diff --git a/lib/testutil/security/util_test.go b/lib/testutil/security/util_test.go
index 36718c3..8b3070a 100644
--- a/lib/testutil/security/util_test.go
+++ b/lib/testutil/security/util_test.go
@@ -22,6 +22,7 @@
 
 	parent := r.Principal()
 	childdir := NewVeyronCredentials(parent, "child")
+	defer os.RemoveAll(childdir)
 	if _, err = vsecurity.LoadPersistentPrincipal(childdir, nil); err != nil {
 		t.Fatalf("Expected NewVeyronCredentials to have populated the directory %q: %v", childdir, err)
 	}
diff --git a/runtimes/google/ipc/server_test.go b/runtimes/google/ipc/server_test.go
index 8e43cca..bc91133 100644
--- a/runtimes/google/ipc/server_test.go
+++ b/runtimes/google/ipc/server_test.go
@@ -86,6 +86,7 @@
 	process modules.Handle
 	session *expect.Session
 	mount   string
+	sh      *modules.Shell
 }
 
 func (h *proxyHandle) Start(t *testing.T) error {
@@ -100,6 +101,7 @@
 	h.process = server
 	h.session = expect.NewSession(t, server.Stdout(), time.Minute)
 	h.mount = h.session.ReadLine()
+	h.sh = sh
 	if err := h.session.Error(); err != nil {
 		return err
 	}
@@ -118,6 +120,7 @@
 	if len(h.mount) == 0 {
 		return nil
 	}
+	h.sh.Cleanup(nil, nil)
 	return h.ns.Unmount(testContext(), "proxy", h.mount)
 }
 
diff --git a/runtimes/google/ipc/stream/vif/set_test.go b/runtimes/google/ipc/stream/vif/set_test.go
index 09b11e5..e7a7aa2 100644
--- a/runtimes/google/ipc/stream/vif/set_test.go
+++ b/runtimes/google/ipc/stream/vif/set_test.go
@@ -4,6 +4,7 @@
 	"fmt"
 	"io/ioutil"
 	"net"
+	"os"
 	"path"
 	"testing"
 
@@ -48,6 +49,7 @@
 	if err != nil {
 		t.Fatal(err)
 	}
+	defer os.RemoveAll(dir)
 	sockname := path.Join(dir, "socket")
 	ln, err := net.Listen("unix", sockname)
 	if err != nil {
diff --git a/services/mgmt/application/impl/impl_test.go b/services/mgmt/application/impl/impl_test.go
index 62c4e24..af03a77 100644
--- a/services/mgmt/application/impl/impl_test.go
+++ b/services/mgmt/application/impl/impl_test.go
@@ -34,6 +34,7 @@
 	if err != nil {
 		t.Fatalf("TempDir(%q, %q) failed: %v", dir, prefix, err)
 	}
+	defer os.RemoveAll(store)
 	dispatcher, err := NewDispatcher(store, nil)
 	if err != nil {
 		t.Fatalf("NewDispatcher() failed: %v", err)
diff --git a/tools/binary/impl_test.go b/tools/binary/impl_test.go
index 865c35d..180b53c 100644
--- a/tools/binary/impl_test.go
+++ b/tools/binary/impl_test.go
@@ -138,7 +138,7 @@
 	if err != nil {
 		t.Fatalf("%v", err)
 	}
-	defer os.Remove(dir)
+	defer os.RemoveAll(dir)
 	file := path.Join(dir, "testfile")
 	defer os.Remove(file)
 	if err := cmd.Execute([]string{"download", naming.JoinAddressName(endpoint.String(), "exists"), file}); err != nil {
diff --git a/tools/gclogs/gclogs_test.go b/tools/gclogs/gclogs_test.go
index f9168fe..574fca2 100644
--- a/tools/gclogs/gclogs_test.go
+++ b/tools/gclogs/gclogs_test.go
@@ -15,7 +15,7 @@
 
 func setup(t *testing.T, workdir, username string) (tmpdir string) {
 	var err error
-	tmpdir, err = ioutil.TempDir(workdir, "parse-file-info-")
+	tmpdir, err = ioutil.TempDir(workdir, "gclogs-test-setup-")
 	if err != nil {
 		t.Fatalf("ioutil.TempDir failed: %v", err)
 	}
diff --git a/tools/naming/simulator/driver_test.go b/tools/naming/simulator/driver_test.go
index 5ccb5cb..303874a 100644
--- a/tools/naming/simulator/driver_test.go
+++ b/tools/naming/simulator/driver_test.go
@@ -44,6 +44,7 @@
 	if err != nil {
 		t.Fatalf("unexpected error: %s", err)
 	}
+	defer sh.Cleanup(nil, nil)
 	sh.SetVar("foo", "bar")
 	cases := []struct {
 		input  string
diff --git a/tools/servicerunner/servicerunner_test.go b/tools/servicerunner/servicerunner_test.go
index fb72ff6..c2a4085 100644
--- a/tools/servicerunner/servicerunner_test.go
+++ b/tools/servicerunner/servicerunner_test.go
@@ -7,6 +7,7 @@
 	"encoding/json"
 	"fmt"
 	"io/ioutil"
+	"os"
 	"os/exec"
 	"path"
 	"testing"
@@ -21,6 +22,8 @@
 func TestMain(t *testing.T) {
 	tmpdir, err := ioutil.TempDir("", "servicerunner_test")
 	check(t, err)
+	defer os.RemoveAll(tmpdir)
+	os.Setenv("TMPDIR", tmpdir)
 
 	bin := path.Join(tmpdir, "servicerunner")
 	fmt.Println("Building", bin)