Merge "veyron/lib/testutil: fixing a bug in blackbox"
diff --git a/examples/unresolve/unresolve_test.go b/examples/unresolve/unresolve_test.go
index 200861c..edf2e7e 100644
--- a/examples/unresolve/unresolve_test.go
+++ b/examples/unresolve/unresolve_test.go
@@ -6,8 +6,9 @@
 	"reflect"
 	"testing"
 
-	"veyron/lib/testutil"
+	_ "veyron/lib/testutil"
 	"veyron/lib/testutil/blackbox"
+	"veyron/lib/testutil/security"
 
 	"veyron2"
 	"veyron2/naming"
@@ -118,7 +119,7 @@
 	b := blackbox.HelperCommand(t, "childMT", "b")
 	defer shutdown(b)
 
-	idFile := testutil.SaveIdentityToFile(testutil.NewBlessedIdentity(idA, "test"))
+	idFile := security.SaveIdentityToFile(security.NewBlessedIdentity(idA, "test"))
 	defer os.Remove(idFile)
 	b.Cmd.Env = append(b.Cmd.Env, fmt.Sprintf("VEYRON_IDENTITY=%v", idFile), fmt.Sprintf("NAMESPACE_ROOT=%v", aOA))
 	b.Cmd.Start()
@@ -141,7 +142,7 @@
 	// Create server C.
 	c := blackbox.HelperCommand(t, "childFortune", "c")
 	defer shutdown(c)
-	idFile = testutil.SaveIdentityToFile(testutil.NewBlessedIdentity(idA, "test"))
+	idFile = security.SaveIdentityToFile(security.NewBlessedIdentity(idA, "test"))
 	defer os.Remove(idFile)
 	c.Cmd.Env = append(c.Cmd.Env, fmt.Sprintf("VEYRON_IDENTITY=%v", idFile), fmt.Sprintf("NAMESPACE_ROOT=%v", bOA))
 	c.Cmd.Start()
@@ -152,7 +153,7 @@
 	// Create server D.
 	d := blackbox.HelperCommand(t, "childFortuneCustomUnresolve", "d")
 	defer shutdown(d)
-	idFile = testutil.SaveIdentityToFile(testutil.NewBlessedIdentity(idA, "test"))
+	idFile = security.SaveIdentityToFile(security.NewBlessedIdentity(idA, "test"))
 	defer os.Remove(idFile)
 	d.Cmd.Env = append(d.Cmd.Env, fmt.Sprintf("VEYRON_IDENTITY=%v", idFile), fmt.Sprintf("NAMESPACE_ROOT=%v", bOA))
 	d.Cmd.Start()
@@ -163,7 +164,7 @@
 	// Create server E.
 	e := blackbox.HelperCommand(t, "childFortune", "e1", "e2")
 	defer shutdown(e)
-	idFile = testutil.SaveIdentityToFile(testutil.NewBlessedIdentity(idA, "test"))
+	idFile = security.SaveIdentityToFile(security.NewBlessedIdentity(idA, "test"))
 	defer os.Remove(idFile)
 	e.Cmd.Env = append(e.Cmd.Env, fmt.Sprintf("VEYRON_IDENTITY=%v", idFile), fmt.Sprintf("NAMESPACE_ROOT=%v", bOA))
 	e.Cmd.Start()
@@ -174,7 +175,7 @@
 	// Create server F.
 	f := blackbox.HelperCommand(t, "childFortune", "f")
 	defer shutdown(f)
-	idFile = testutil.SaveIdentityToFile(testutil.NewBlessedIdentity(idA, "test"))
+	idFile = security.SaveIdentityToFile(security.NewBlessedIdentity(idA, "test"))
 	defer os.Remove(idFile)
 	f.Cmd.Env = append(f.Cmd.Env, fmt.Sprintf("VEYRON_IDENTITY=%v", idFile), fmt.Sprintf("NAMESPACE_ROOT=%v", naming.Join(aOA, "b/mt")))
 	f.Cmd.Start()
@@ -185,7 +186,7 @@
 	// Create server G.
 	g := blackbox.HelperCommand(t, "childFortuneNoIDL", "g")
 	defer shutdown(g)
-	idFile = testutil.SaveIdentityToFile(testutil.NewBlessedIdentity(idA, "test"))
+	idFile = security.SaveIdentityToFile(security.NewBlessedIdentity(idA, "test"))
 	defer os.Remove(idFile)
 	g.Cmd.Env = append(g.Cmd.Env, fmt.Sprintf("VEYRON_IDENTITY=%v", idFile), fmt.Sprintf("NAMESPACE_ROOT=%v", bOA))
 	g.Cmd.Start()
@@ -196,7 +197,7 @@
 	// Check that things resolve correctly.
 
 	// Create a client runtime with oOA as its root.
-	idFile = testutil.SaveIdentityToFile(testutil.NewBlessedIdentity(idA, "test"))
+	idFile = security.SaveIdentityToFile(security.NewBlessedIdentity(idA, "test"))
 	defer os.Remove(idFile)
 	os.Setenv("VEYRON_IDENTITY", idFile)
 
diff --git a/lib/signals/signals_test.go b/lib/signals/signals_test.go
index 31911f2..08d54ea 100644
--- a/lib/signals/signals_test.go
+++ b/lib/signals/signals_test.go
@@ -14,8 +14,9 @@
 	"veyron2/rt"
 	"veyron2/services/mgmt/appcycle"
 
-	"veyron/lib/testutil"
+	_ "veyron/lib/testutil"
 	"veyron/lib/testutil/blackbox"
+	"veyron/lib/testutil/security"
 	vflag "veyron/security/flag"
 	"veyron/services/mgmt/node"
 )
@@ -309,7 +310,7 @@
 	// that default authorization works for RPCs between the two).
 	// TODO(caprita): Consider making this boilerplate part of blackbox.
 	id := r.Identity()
-	idFile := testutil.SaveIdentityToFile(testutil.NewBlessedIdentity(id, "test"))
+	idFile := security.SaveIdentityToFile(security.NewBlessedIdentity(id, "test"))
 	defer os.Remove(idFile)
 	configServer, configServiceName, ch := createConfigServer(t)
 	defer configServer.Stop()
diff --git a/lib/testutil/init.go b/lib/testutil/init.go
index 3b130d7..8ba55c7 100644
--- a/lib/testutil/init.go
+++ b/lib/testutil/init.go
@@ -38,6 +38,10 @@
 		// if GOMAXPROCS is not set in the environment.
 		runtime.GOMAXPROCS(runtime.NumCPU())
 	}
+	// At this point all of the flags that we're going to use for
+	// tests must be defined.
+	flag.Parse()
+	vlog.ConfigureLibraryLoggerFromFlags()
 	// Initialize pseudo-random number generator.
 	seed := time.Now().UnixNano()
 	seedString := os.Getenv(SeedEnv)
@@ -51,8 +55,4 @@
 	}
 	vlog.Infof("Seeding pseudo-random number generator with %v", seed)
 	Rand = rand.New(rand.NewSource(seed))
-	// At this point all of the flags that we're going to use for
-	// tests must be defined.
-	flag.Parse()
-	vlog.ConfigureLibraryLoggerFromFlags()
 }
diff --git a/lib/testutil/security/util.go b/lib/testutil/security/util.go
new file mode 100644
index 0000000..1d8e207
--- /dev/null
+++ b/lib/testutil/security/util.go
@@ -0,0 +1,70 @@
+package security
+
+import (
+	"io/ioutil"
+	"os"
+	"strconv"
+	"time"
+
+	"veyron/lib/testutil"
+	isecurity "veyron/runtimes/google/security"
+
+	"veyron2/security"
+)
+
+// NewBlessedIdentity creates a new identity and blesses it using the provided blesser
+// under the provided name. This function is meant to be used for testing purposes only,
+// it panics if there is an error.
+func NewBlessedIdentity(blesser security.PrivateID, name string) security.PrivateID {
+	id, err := isecurity.NewPrivateID("test")
+	if err != nil {
+		panic(err)
+	}
+
+	blessedID, err := blesser.Bless(id.PublicID(), name, 5*time.Minute, nil)
+	if err != nil {
+		panic(err)
+	}
+	derivedID, err := id.Derive(blessedID)
+	if err != nil {
+		panic(err)
+	}
+	return derivedID
+}
+
+// SaveACLToFile saves the provided ACL in JSON format to a randomly created
+// temporary file, and returns the path to the file. This function is meant
+// to be used for testing purposes only, it panics if there is an error. The
+// caller must ensure that the created file is removed once it is no longer needed.
+func SaveACLToFile(acl security.ACL) string {
+	f, err := ioutil.TempFile("", "saved_acl")
+	if err != nil {
+		panic(err)
+	}
+	defer f.Close()
+	if err := security.SaveACL(f, acl); err != nil {
+		defer os.Remove(f.Name())
+		panic(err)
+	}
+	return f.Name()
+}
+
+// SaveIdentityToFile saves the provided identity in Base64VOM format
+// to a randomly created temporary file, and returns the path to the file.
+// This function is meant to be used for testing purposes only, it panics
+// if there is an error. The caller must ensure that the created file
+// is removed once it is no longer needed.
+func SaveIdentityToFile(id security.PrivateID) string {
+	f, err := ioutil.TempFile("", strconv.Itoa(testutil.Rand.Int()))
+	if err != nil {
+		panic(err)
+	}
+	defer f.Close()
+	filePath := f.Name()
+
+	if err := security.SaveIdentity(f, id); err != nil {
+		os.Remove(filePath)
+		panic(err)
+	}
+	return filePath
+}
diff --git a/lib/testutil/security/util_test.go b/lib/testutil/security/util_test.go
new file mode 100644
index 0000000..5632aef
--- /dev/null
+++ b/lib/testutil/security/util_test.go
@@ -0,0 +1,100 @@
+package security
+
+import (
+	"fmt"
+	"os"
+	"reflect"
+	"testing"
+
+	isecurity "veyron/runtimes/google/security"
+
+	"veyron2/rt"
+	"veyron2/security"
+)
+
+func TestNewBlessedIdentity(t *testing.T) {
+	r, err := rt.New()
+	if err != nil {
+		t.Fatalf("rt.New failed: %v", err)
+	}
+	defer r.Shutdown()
+	newID := func(name string) security.PrivateID {
+		id, err := r.NewIdentity(name)
+		if err != nil {
+			t.Fatalf("r.NewIdentity failed: %v", err)
+		}
+		isecurity.TrustIdentityProviders(id)
+		return id
+	}
+	testdata := []struct {
+		blesser            security.PrivateID
+		blessingName, name string
+	}{
+		{blesser: newID("google"), blessingName: "alice", name: "PrivateID:google/alice"},
+		{blesser: newID("google"), blessingName: "bob", name: "PrivateID:google/bob"},
+		{blesser: newID("veyron"), blessingName: "alice", name: "PrivateID:veyron/alice"},
+		{blesser: newID("veyron"), blessingName: "bob", name: "PrivateID:veyron/bob"},
+		{blesser: NewBlessedIdentity(newID("google"), "alice"), blessingName: "tv", name: "PrivateID:google/alice/tv"},
+	}
+	for _, d := range testdata {
+		if got, want := fmt.Sprintf("%s", NewBlessedIdentity(d.blesser, d.blessingName)), d.name; got != want {
+			t.Errorf("NewBlessedIdentity(%q, %q): Got %q, want %q", d.blesser, d.blessingName, got, want)
+		}
+	}
+}
+
+func TestSaveACLToFile(t *testing.T) {
+	r, err := rt.New()
+	if err != nil {
+		t.Fatalf("rt.New failed: %v", err)
+	}
+	defer r.Shutdown()
+	acl := security.ACL{
+		"veyron/alice": security.LabelSet(security.ReadLabel | security.WriteLabel),
+		"veyron/bob":   security.LabelSet(security.ReadLabel),
+	}
+
+	filePath := SaveACLToFile(acl)
+	defer os.Remove(filePath)
+
+	f, err := os.Open(filePath)
+	if err != nil {
+		t.Fatalf("os.Open(%v) failed: %v", filePath, err)
+	}
+	defer f.Close()
+	loadedACL, err := security.LoadACL(f)
+	if err != nil {
+		t.Fatalf("LoadACL failed: %v", err)
+	}
+	if !reflect.DeepEqual(loadedACL, acl) {
+		t.Fatalf("Got ACL %v, but want %v", loadedACL, acl)
+	}
+}
+
+func TestSaveIdentityToFile(t *testing.T) {
+	r, err := rt.New()
+	if err != nil {
+		t.Fatalf("rt.New failed: %v", err)
+	}
+	defer r.Shutdown()
+	id, err := r.NewIdentity("test")
+	if err != nil {
+		t.Fatalf("r.NewIdentity failed: %v", err)
+	}
+
+	filePath := SaveIdentityToFile(id)
+	defer os.Remove(filePath)
+
+	f, err := os.Open(filePath)
+	if err != nil {
+		t.Fatalf("os.Open(%v) failed: %v", filePath, err)
+	}
+	defer f.Close()
+	loadedID, err := security.LoadIdentity(f)
+	if err != nil {
+		t.Fatalf("LoadIdentity failed: %v", err)
+	}
+	if !reflect.DeepEqual(loadedID, id) {
+		t.Fatalf("Got Identity %v, but want %v", loadedID, id)
+	}
+}
diff --git a/lib/testutil/util.go b/lib/testutil/util.go
index f69071f..6dc0b56 100644
--- a/lib/testutil/util.go
+++ b/lib/testutil/util.go
@@ -2,18 +2,9 @@
 
 import (
 	"fmt"
-	"io/ioutil"
-	"math/rand"
-	"os"
 	"path/filepath"
 	"runtime"
-	"strconv"
 	"sync"
-	"time"
-
-	isecurity "veyron/runtimes/google/security"
-
-	"veyron2/security"
 )
 
 var (
@@ -68,26 +59,6 @@
 	return fmt.Sprintf("%s:%d: "+format, nargs...)
 }
 
-// NewBlessedIdentity creates a new identity and blesses it using the provided blesser
-// under the provided name. This function is meant to be used for testing purposes only,
-// it panics if there is an error.
-func NewBlessedIdentity(blesser security.PrivateID, name string) security.PrivateID {
-	id, err := isecurity.NewPrivateID("test")
-	if err != nil {
-		panic(err)
-	}
-
-	blessedID, err := blesser.Bless(id.PublicID(), name, 5*time.Minute, nil)
-	if err != nil {
-		panic(err)
-	}
-	derivedID, err := id.Derive(blessedID)
-	if err != nil {
-		panic(err)
-	}
-	return derivedID
-}
-
 // RandomBytes generates the given number of random bytes.
 func RandomBytes(size int) []byte {
 	buffer := make([]byte, size)
@@ -106,40 +77,3 @@
 	copy(buffer, random[start:start+size])
 	return buffer
 }
-
-// SaveACLToFile saves the provided ACL in JSON format to a randomly created
-// temporary file, and returns the path to the file. This function is meant
-// to be used for testing purposes only, it panics if there is an error. The
-// caller must ensure that the created file is removed once it is no longer needed.
-func SaveACLToFile(acl security.ACL) string {
-	f, err := ioutil.TempFile("", "saved_acl")
-	if err != nil {
-		panic(err)
-	}
-	defer f.Close()
-	if err := security.SaveACL(f, acl); err != nil {
-		defer os.Remove(f.Name())
-		panic(err)
-	}
-	return f.Name()
-}
-
-// SaveIdentityToFile saves the provided identity in Base64VOM format
-// to a randomly created temporary file, and returns the path to the file.
-// This function is meant to be used for testing purposes only, it panics
-// if there is an error. The caller must ensure that the created file
-// is removed once it is no longer needed.
-func SaveIdentityToFile(id security.PrivateID) string {
-	f, err := ioutil.TempFile("", strconv.Itoa(rand.Int()))
-	if err != nil {
-		panic(err)
-	}
-	defer f.Close()
-	filePath := f.Name()
-
-	if err := security.SaveIdentity(f, id); err != nil {
-		os.Remove(filePath)
-		panic(err)
-	}
-	return filePath
-}
diff --git a/lib/testutil/util_test.go b/lib/testutil/util_test.go
index cda91a6..0caf19d 100644
--- a/lib/testutil/util_test.go
+++ b/lib/testutil/util_test.go
@@ -1,115 +1,19 @@
-package testutil_test
+package testutil
 
 import (
-	"fmt"
-	"os"
-	"reflect"
 	"regexp"
 	"testing"
-
-	"veyron/lib/testutil"
-	isecurity "veyron/runtimes/google/security"
-
-	"veyron2/rt"
-	"veyron2/security"
 )
 
 func TestFormatLogline(t *testing.T) {
-	depth, want := testutil.DepthToExternalCaller(), 2
+	depth, want := DepthToExternalCaller(), 2
 	if depth != want {
 		t.Errorf("got %v, want %v", depth, want)
 	}
 	{
-		line, want := testutil.FormatLogLine(depth, "test"), "testing.go:.*"
+		line, want := FormatLogLine(depth, "test"), "testing.go:.*"
 		if ok, err := regexp.MatchString(want, line); !ok || err != nil {
 			t.Errorf("got %v, want %v", line, want)
 		}
 	}
 }
-
-func TestSaveIdentityToFile(t *testing.T) {
-	r, err := rt.New()
-	if err != nil {
-		t.Fatalf("rt.New failed: %v", err)
-	}
-	defer r.Shutdown()
-	id, err := r.NewIdentity("test")
-	if err != nil {
-		t.Fatalf("r.NewIdentity failed: %v", err)
-	}
-
-	filePath := testutil.SaveIdentityToFile(id)
-	defer os.Remove(filePath)
-
-	f, err := os.Open(filePath)
-	if err != nil {
-		t.Fatalf("os.Open(%v) failed: %v", filePath, err)
-	}
-	defer f.Close()
-	loadedID, err := security.LoadIdentity(f)
-	if err != nil {
-		t.Fatalf("LoadIdentity failed: %v", err)
-	}
-	if !reflect.DeepEqual(loadedID, id) {
-		t.Fatalf("Got Identity %v, but want %v", loadedID, id)
-	}
-}
-
-func TestSaveACLToFile(t *testing.T) {
-	r, err := rt.New()
-	if err != nil {
-		t.Fatalf("rt.New failed: %v", err)
-	}
-	defer r.Shutdown()
-	acl := security.ACL{
-		"veyron/alice": security.LabelSet(security.ReadLabel | security.WriteLabel),
-		"veyron/bob":   security.LabelSet(security.ReadLabel),
-	}
-
-	filePath := testutil.SaveACLToFile(acl)
-	defer os.Remove(filePath)
-
-	f, err := os.Open(filePath)
-	if err != nil {
-		t.Fatalf("os.Open(%v) failed: %v", filePath, err)
-	}
-	defer f.Close()
-	loadedACL, err := security.LoadACL(f)
-	if err != nil {
-		t.Fatalf("LoadACL failed: %v", err)
-	}
-	if !reflect.DeepEqual(loadedACL, acl) {
-		t.Fatalf("Got ACL %v, but want %v", loadedACL, acl)
-	}
-}
-
-func TestNewBlessedIdentity(t *testing.T) {
-	r, err := rt.New()
-	if err != nil {
-		t.Fatalf("rt.New failed: %v", err)
-	}
-	defer r.Shutdown()
-	newID := func(name string) security.PrivateID {
-		id, err := r.NewIdentity(name)
-		if err != nil {
-			t.Fatalf("r.NewIdentity failed: %v", err)
-		}
-		isecurity.TrustIdentityProviders(id)
-		return id
-	}
-	testdata := []struct {
-		blesser            security.PrivateID
-		blessingName, name string
-	}{
-		{blesser: newID("google"), blessingName: "alice", name: "PrivateID:google/alice"},
-		{blesser: newID("google"), blessingName: "bob", name: "PrivateID:google/bob"},
-		{blesser: newID("veyron"), blessingName: "alice", name: "PrivateID:veyron/alice"},
-		{blesser: newID("veyron"), blessingName: "bob", name: "PrivateID:veyron/bob"},
-		{blesser: testutil.NewBlessedIdentity(newID("google"), "alice"), blessingName: "tv", name: "PrivateID:google/alice/tv"},
-	}
-	for _, d := range testdata {
-		if got, want := fmt.Sprintf("%s", testutil.NewBlessedIdentity(d.blesser, d.blessingName)), d.name; got != want {
-			t.Errorf("NewBlessedIdentity(%q, %q): Got %q, want %q", d.blesser, d.blessingName, got, want)
-		}
-	}
-}
diff --git a/runtimes/google/ipc/full_test.go b/runtimes/google/ipc/full_test.go
index 5793780..3c68e79 100644
--- a/runtimes/google/ipc/full_test.go
+++ b/runtimes/google/ipc/full_test.go
@@ -12,8 +12,9 @@
 	"testing"
 	"time"
 
-	"veyron/lib/testutil"
+	_ "veyron/lib/testutil"
 	"veyron/lib/testutil/blackbox"
+	tsecurity "veyron/lib/testutil/security"
 	imanager "veyron/runtimes/google/ipc/stream/manager"
 	"veyron/runtimes/google/ipc/stream/proxy"
 	"veyron/runtimes/google/ipc/stream/vc"
@@ -823,7 +824,7 @@
 func TestReconnect(t *testing.T) {
 	b := createBundle(t, clientID, nil, nil) // We only need the client from the bundle.
 	defer b.cleanup(t)
-	idFile := testutil.SaveIdentityToFile(derive(clientID, "server"))
+	idFile := tsecurity.SaveIdentityToFile(derive(clientID, "server"))
 	server := blackbox.HelperCommand(t, "runServer", "127.0.0.1:0", idFile)
 	server.Cmd.Start()
 	addr, err := server.ReadLineFromChild()
diff --git a/runtimes/google/rt/mgmt_test.go b/runtimes/google/rt/mgmt_test.go
index 3bf195e..0c38c3c 100644
--- a/runtimes/google/rt/mgmt_test.go
+++ b/runtimes/google/rt/mgmt_test.go
@@ -14,8 +14,9 @@
 	"veyron2/naming"
 	"veyron2/services/mgmt/appcycle"
 
-	"veyron/lib/testutil"
+	_ "veyron/lib/testutil"
 	"veyron/lib/testutil/blackbox"
+	"veyron/lib/testutil/security"
 	"veyron/runtimes/google/rt"
 	vflag "veyron/security/flag"
 	"veyron/services/mgmt/node"
@@ -264,7 +265,7 @@
 	}
 	c := blackbox.HelperCommand(t, "app")
 	id := r.Identity()
-	idFile := testutil.SaveIdentityToFile(testutil.NewBlessedIdentity(id, "test"))
+	idFile := security.SaveIdentityToFile(security.NewBlessedIdentity(id, "test"))
 	configServer, configServiceName, ch := createConfigServer(t)
 	c.Cmd.Env = append(c.Cmd.Env, fmt.Sprintf("VEYRON_IDENTITY=%v", idFile),
 		fmt.Sprintf("%v=%v", mgmt.ParentNodeManagerConfigKey, configServiceName))
diff --git a/security/flag/flag_test.go b/security/flag/flag_test.go
index 56640e0..5fa5616 100644
--- a/security/flag/flag_test.go
+++ b/security/flag/flag_test.go
@@ -6,7 +6,7 @@
 	"reflect"
 	"testing"
 
-	"veyron/lib/testutil"
+	tsecurity "veyron/lib/testutil/security"
 
 	"veyron2/security"
 )
@@ -31,7 +31,7 @@
 		acl1 = security.ACL{}
 		acl2 = security.ACL{"veyron/alice": security.LabelSet(security.ReadLabel | security.WriteLabel), "veyron/bob": security.LabelSet(security.ReadLabel)}
 	)
-	acl2File := testutil.SaveACLToFile(acl2)
+	acl2File := tsecurity.SaveACLToFile(acl2)
 	defer os.Remove(acl2File)
 
 	testdata := []struct {
diff --git a/services/mgmt/binary/impl/impl_test.go b/services/mgmt/binary/impl/impl_test.go
index b547171..08c69af 100644
--- a/services/mgmt/binary/impl/impl_test.go
+++ b/services/mgmt/binary/impl/impl_test.go
@@ -6,12 +6,11 @@
 	"encoding/hex"
 	"io"
 	"io/ioutil"
-	"math/rand"
 	"os"
 	"path/filepath"
-	"strconv"
 	"testing"
-	"time"
+
+	"veyron/lib/testutil"
 
 	"veyron2/naming"
 	"veyron2/rt"
@@ -20,30 +19,11 @@
 )
 
 const (
-	seedEnv      = "VEYRON_RNG_SEED"
 	veyronPrefix = "veyron_binary_repository"
 )
 
-var (
-	random []byte
-	rnd    *rand.Rand
-)
-
 func init() {
 	rt.Init()
-	// Initialize pseudo-random number generator.
-	seed := time.Now().UnixNano()
-	seedString := os.Getenv(seedEnv)
-	if seedString != "" {
-		var err error
-		base, bitSize := 0, 64
-		seed, err = strconv.ParseInt(seedString, 0, 64)
-		if err != nil {
-			vlog.Fatalf("ParseInt(%v, %v, %v) failed: %v", seedString, base, bitSize, err)
-		}
-	}
-	vlog.VI(0).Infof("Using pseudo-random number generator seed = %v", seed)
-	rnd = rand.New(rand.NewSource(seed))
 }
 
 // invokeUpload invokes the Upload RPC using the given client binary
@@ -105,39 +85,6 @@
 	return output, nil
 }
 
-func generateBits(size int) []byte {
-	buffer := make([]byte, size)
-	offset := 0
-	for {
-		bits := int64(rnd.Int63())
-		for i := 0; i < 8; i++ {
-			buffer[offset] = byte(bits & 0xff)
-			size--
-			if size == 0 {
-				return buffer
-			}
-			offset++
-			bits >>= 8
-		}
-	}
-}
-
-func randomBytes(size int) []byte {
-	buffer := make([]byte, size)
-	// Generate a 4MB of random bytes since that is a value commonly
-	// used in this test.
-	if len(random) == 0 {
-		random = generateBits(4 << 20)
-	}
-	if size > len(random) {
-		extra := generateBits(size - len(random))
-		random = append(random, extra...)
-	}
-	start := rnd.Intn(len(random) - size + 1)
-	copy(buffer, random[start:start+size])
-	return buffer
-}
-
 // startServer starts the binary repository server.
 func startServer(t *testing.T, depth int) (repository.Binary, func()) {
 	// Setup the root of the binary repository.
@@ -196,8 +143,8 @@
 		binary, cleanup := startServer(t, i)
 		defer cleanup()
 		// Create up to 4MB of random bytes.
-		size := rnd.Intn(1000 * bufferLength)
-		data := randomBytes(size)
+		size := testutil.Rand.Intn(1000 * bufferLength)
+		data := testutil.RandomBytes(size)
 		// Test the binary repository interface.
 		if err := binary.Create(rt.R().NewContext(), 1); err != nil {
 			t.Fatalf("Create() failed: %v", err)
@@ -241,8 +188,8 @@
 		// Create <length> chunks of up to 4MB of random bytes.
 		data := make([][]byte, length)
 		for i := 0; i < length; i++ {
-			size := rnd.Intn(1000 * bufferLength)
-			data[i] = randomBytes(size)
+			size := testutil.Rand.Intn(1000 * bufferLength)
+			data[i] = testutil.RandomBytes(size)
 		}
 		// Test the binary repository interface.
 		if err := binary.Create(rt.R().NewContext(), int32(length)); err != nil {
@@ -293,8 +240,8 @@
 		// Create <length> chunks of up to 4MB of random bytes.
 		data := make([][]byte, length)
 		for i := 0; i < length; i++ {
-			size := rnd.Intn(1000 * bufferLength)
-			data[i] = randomBytes(size)
+			size := testutil.Rand.Intn(1000 * bufferLength)
+			data[i] = testutil.RandomBytes(size)
 		}
 		if err := binary.Create(rt.R().NewContext(), int32(length)); err != nil {
 			t.Fatalf("Create() failed: %v", err)
@@ -314,7 +261,7 @@
 				break
 			}
 			for i := 0; i < length; i++ {
-				fail := rnd.Intn(2)
+				fail := testutil.Rand.Intn(2)
 				if parts[i] == MissingPart && fail != 0 {
 					if err := invokeUpload(t, binary, data[i], int32(i)); err != nil {
 						t.FailNow()
@@ -335,10 +282,10 @@
 	length := 2
 	data := make([][]byte, length)
 	for i := 0; i < length; i++ {
-		size := rnd.Intn(1000 * bufferLength)
+		size := testutil.Rand.Intn(1000 * bufferLength)
 		data[i] = make([]byte, size)
 		for j := 0; j < size; j++ {
-			data[i][j] = byte(rnd.Int())
+			data[i][j] = byte(testutil.Rand.Int())
 		}
 	}
 	if err := binary.Create(rt.R().NewContext(), int32(length)); err != nil {
diff --git a/services/mgmt/binary/impl/invoker.go b/services/mgmt/binary/impl/invoker.go
index 05c91ec..84976fa 100644
--- a/services/mgmt/binary/impl/invoker.go
+++ b/services/mgmt/binary/impl/invoker.go
@@ -310,7 +310,6 @@
 	// Use os.Rename() to atomically remove the binary directory
 	// structure.
 	path := filepath.Join(filepath.Dir(i.path), "removing-"+filepath.Base(i.path))
-	vlog.Infof("from %v to %v", i.path, path)
 	if err := os.Rename(i.path, path); err != nil {
 		vlog.Errorf("Rename(%v, %v) failed: %v", i.path, path, err)
 		return errOperationFailed
@@ -467,7 +466,6 @@
 		}
 		return errOperationFailed
 	}
-	vlog.Infof("%v", checksumFile)
 	dataFile := filepath.Join(path, data)
 	if err := os.Rename(file.Name(), dataFile); err != nil {
 		vlog.Errorf("Rename(%v, %v) failed: %v", file.Name(), dataFile, err)
@@ -476,6 +474,5 @@
 		}
 		return errOperationFailed
 	}
-	vlog.Infof("%v", dataFile)
 	return nil
 }
diff --git a/services/mgmt/node/impl/impl_test.go b/services/mgmt/node/impl/impl_test.go
index c1f18fd..5a2d08b 100644
--- a/services/mgmt/node/impl/impl_test.go
+++ b/services/mgmt/node/impl/impl_test.go
@@ -14,8 +14,9 @@
 
 	"veyron/lib/exec"
 	"veyron/lib/signals"
-	"veyron/lib/testutil"
+	_ "veyron/lib/testutil"
 	"veyron/lib/testutil/blackbox"
+	"veyron/lib/testutil/security"
 	"veyron/services/mgmt/node"
 	"veyron/services/mgmt/node/impl"
 	mtlib "veyron/services/mounttable/lib"
@@ -413,7 +414,7 @@
 	//
 	// TODO(ataly): Eventually we want to use the same identity the node
 	// manager would have if it was running in production.
-	idFile := testutil.SaveIdentityToFile(testutil.NewBlessedIdentity(runtime.Identity(), "test"))
+	idFile := security.SaveIdentityToFile(security.NewBlessedIdentity(runtime.Identity(), "test"))
 	defer os.Remove(idFile)
 	child := spawnNodeManager(t, mtName, idFile)
 	defer child.Cleanup()