x/ref: Refactor services/binary packages.

cmd/binary                     -> services/binary/binary
services/mgmt/binary/binaryd   -> services/binary/binaryd
services/mgmt/binary/impl      -> services/binary/binarylib
services/mgmt/binary/multipart -> services/binary/internal/multipart

In the future, we may be able to reduce the size of binarylib,
or even move it under internal somewhere.  But that'll be much
easier after we've refactored moved packages under
services/mgmt/* - before that's done, there are too many moving
pieces.

Change-Id: I2aa684c57d074f2977934445c043118763f72d16
diff --git a/cmd/mgmt/mgmt_v23_test.go b/cmd/mgmt/mgmt_v23_test.go
index 2d79ba4..c1e9ba3 100644
--- a/cmd/mgmt/mgmt_v23_test.go
+++ b/cmd/mgmt/mgmt_v23_test.go
@@ -86,9 +86,9 @@
 		namespaceBin    = i.BuildV23Pkg("v.io/x/ref/cmd/namespace").WithStartOpts(aliceOpts)
 		debugBin        = i.BuildV23Pkg("v.io/x/ref/cmd/debug").WithStartOpts(aliceOpts)
 		deviceBin       = i.BuildV23Pkg("v.io/x/ref/cmd/mgmt/device").WithStartOpts(aliceOpts)
-		binaryBin       = i.BuildV23Pkg("v.io/x/ref/cmd/binary").WithStartOpts(aliceOpts)
+		binaryBin       = i.BuildV23Pkg("v.io/x/ref/services/binary/binary").WithStartOpts(aliceOpts)
 		applicationBin  = i.BuildV23Pkg("v.io/x/ref/services/application/application").WithStartOpts(aliceOpts)
-		binarydBin      = i.BuildV23Pkg("v.io/x/ref/services/mgmt/binary/binaryd").WithStartOpts(aliceOpts)
+		binarydBin      = i.BuildV23Pkg("v.io/x/ref/services/binary/binaryd").WithStartOpts(aliceOpts)
 		applicationdBin = i.BuildV23Pkg("v.io/x/ref/services/application/applicationd").WithStartOpts(aliceOpts)
 
 		// The devicex script is not provided with any credentials, it
diff --git a/cmd/mgmt/suid_test.sh b/cmd/mgmt/suid_test.sh
index 85e5ea8..f6fbaa1 100755
--- a/cmd/mgmt/suid_test.sh
+++ b/cmd/mgmt/suid_test.sh
@@ -52,8 +52,8 @@
 
 build() {
   echo ">> Building binaries"
-  BINARYD_BIN="$(shell_test::build_go_binary 'v.io/x/ref/services/mgmt/binary/binaryd')"
-  BINARY_BIN="$(shell_test::build_go_binary 'v.io/x/ref/cmd/binary')"
+  BINARYD_BIN="$(shell_test::build_go_binary 'v.io/x/ref/services/binary/binaryd')"
+  BINARY_BIN="$(shell_test::build_go_binary 'v.io/x/ref/services/binary/binary')"
   APPLICATIOND_BIN="$(shell_test::build_go_binary 'v.io/x/ref/services/application/applicationd')"
   APPLICATION_BIN="$(shell_test::build_go_binary 'v.io/x/ref/services/application/application')"
   AGENTD_BIN="$(shell_test::build_go_binary 'v.io/x/ref/security/agent/agentd')"
diff --git a/cmd/binary/doc.go b/services/binary/binary/doc.go
similarity index 100%
rename from cmd/binary/doc.go
rename to services/binary/binary/doc.go
diff --git a/cmd/binary/impl.go b/services/binary/binary/impl.go
similarity index 100%
rename from cmd/binary/impl.go
rename to services/binary/binary/impl.go
diff --git a/cmd/binary/impl_test.go b/services/binary/binary/impl_test.go
similarity index 100%
rename from cmd/binary/impl_test.go
rename to services/binary/binary/impl_test.go
diff --git a/cmd/binary/main.go b/services/binary/binary/main.go
similarity index 100%
rename from cmd/binary/main.go
rename to services/binary/binary/main.go
diff --git a/cmd/binary/v23_internal_test.go b/services/binary/binary/v23_internal_test.go
similarity index 100%
rename from cmd/binary/v23_internal_test.go
rename to services/binary/binary/v23_internal_test.go
diff --git a/services/mgmt/binary/binaryd/binaryd_v23_test.go b/services/binary/binaryd/binaryd_v23_test.go
similarity index 98%
rename from services/mgmt/binary/binaryd/binaryd_v23_test.go
rename to services/binary/binaryd/binaryd_v23_test.go
index 0e93686..e0611a6 100644
--- a/services/mgmt/binary/binaryd/binaryd_v23_test.go
+++ b/services/binary/binaryd/binaryd_v23_test.go
@@ -102,8 +102,8 @@
 	// The client must run as a "delegate" of the server in order to pass
 	// the default authorization checks on the server.
 	var (
-		binaryRepoBin = binaryWithCredentials(i, "binaryd", "v.io/x/ref/services/mgmt/binary/binaryd")
-		clientBin     = binaryWithCredentials(i, "binaryd/client", "v.io/x/ref/cmd/binary")
+		binaryRepoBin = binaryWithCredentials(i, "binaryd", "v.io/x/ref/services/binary/binaryd")
+		clientBin     = binaryWithCredentials(i, "binaryd/client", "v.io/x/ref/services/binary/binary")
 	)
 
 	// Start the build server.
diff --git a/services/mgmt/binary/binaryd/main.go b/services/binary/binaryd/main.go
similarity index 89%
rename from services/mgmt/binary/binaryd/main.go
rename to services/binary/binaryd/main.go
index 5a69333..d0a48c5 100644
--- a/services/mgmt/binary/binaryd/main.go
+++ b/services/binary/binaryd/main.go
@@ -17,7 +17,7 @@
 	"v.io/x/lib/netstate"
 	"v.io/x/ref/lib/signals"
 	_ "v.io/x/ref/profiles/roaming"
-	"v.io/x/ref/services/mgmt/binary/impl"
+	"v.io/x/ref/services/binary/binarylib"
 )
 
 const defaultDepth = 3
@@ -54,7 +54,7 @@
 	ctx, shutdown := v23.Init()
 	defer shutdown()
 
-	rootDir, err := impl.SetupRootDir(*rootDirFlag)
+	rootDir, err := binarylib.SetupRootDir(*rootDirFlag)
 	if err != nil {
 		vlog.Errorf("SetupRootDir(%q) failed: %v", *rootDirFlag, err)
 		return
@@ -67,14 +67,14 @@
 		os.Exit(1)
 	}
 	rootURL := toIPPort(ctx, listener.Addr().String())
-	state, err := impl.NewState(rootDir, rootURL, defaultDepth)
+	state, err := binarylib.NewState(rootDir, rootURL, defaultDepth)
 	if err != nil {
 		vlog.Errorf("NewState(%v, %v, %v) failed: %v", rootDir, rootURL, defaultDepth, err)
 		return
 	}
 	vlog.Infof("Binary repository HTTP server at: %q", rootURL)
 	go func() {
-		if err := http.Serve(listener, http.FileServer(impl.NewHTTPRoot(state))); err != nil {
+		if err := http.Serve(listener, http.FileServer(binarylib.NewHTTPRoot(state))); err != nil {
 			vlog.Errorf("Serve() failed: %v", err)
 			os.Exit(1)
 		}
@@ -92,7 +92,7 @@
 		return
 	}
 
-	dis, err := impl.NewDispatcher(v23.GetPrincipal(ctx), state)
+	dis, err := binarylib.NewDispatcher(v23.GetPrincipal(ctx), state)
 	if err != nil {
 		vlog.Errorf("NewDispatcher() failed: %v\n", err)
 		return
diff --git a/services/mgmt/binary/binaryd/v23_test.go b/services/binary/binaryd/v23_test.go
similarity index 100%
rename from services/mgmt/binary/binaryd/v23_test.go
rename to services/binary/binaryd/v23_test.go
diff --git a/services/mgmt/binary/impl/acl_test.go b/services/binary/binarylib/acl_test.go
similarity index 98%
rename from services/mgmt/binary/impl/acl_test.go
rename to services/binary/binarylib/acl_test.go
index da76e54..488b841 100644
--- a/services/mgmt/binary/impl/acl_test.go
+++ b/services/binary/binarylib/acl_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package impl_test
+package binarylib_test
 
 import (
 	"fmt"
@@ -23,7 +23,7 @@
 
 	"v.io/x/ref/lib/signals"
 	vsecurity "v.io/x/ref/security"
-	"v.io/x/ref/services/mgmt/binary/impl"
+	"v.io/x/ref/services/binary/binarylib"
 	mgmttest "v.io/x/ref/services/mgmt/lib/testutil"
 	"v.io/x/ref/test"
 	"v.io/x/ref/test/testutil"
@@ -53,11 +53,11 @@
 	vlog.VI(1).Infof("binaryd name: %v", name)
 
 	depth := 2
-	state, err := impl.NewState(storedir, "", depth)
+	state, err := binarylib.NewState(storedir, "", depth)
 	if err != nil {
 		vlog.Fatalf("NewState(%v, %v, %v) failed: %v", storedir, "", depth, err)
 	}
-	dispatcher, err := impl.NewDispatcher(v23.GetPrincipal(ctx), state)
+	dispatcher, err := binarylib.NewDispatcher(v23.GetPrincipal(ctx), state)
 	if err != nil {
 		vlog.Fatalf("Failed to create binaryd dispatcher: %v", err)
 	}
diff --git a/services/mgmt/binary/impl/dispatcher.go b/services/binary/binarylib/dispatcher.go
similarity index 98%
rename from services/mgmt/binary/impl/dispatcher.go
rename to services/binary/binarylib/dispatcher.go
index ff967c4..93c268c 100644
--- a/services/mgmt/binary/impl/dispatcher.go
+++ b/services/binary/binarylib/dispatcher.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package impl
+package binarylib
 
 import (
 	"path/filepath"
diff --git a/services/mgmt/binary/impl/fs_utils.go b/services/binary/binarylib/fs_utils.go
similarity index 99%
rename from services/mgmt/binary/impl/fs_utils.go
rename to services/binary/binarylib/fs_utils.go
index 2295899..4165a87 100644
--- a/services/mgmt/binary/impl/fs_utils.go
+++ b/services/binary/binarylib/fs_utils.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package impl
+package binarylib
 
 import (
 	"fmt"
diff --git a/services/mgmt/binary/impl/http.go b/services/binary/binarylib/http.go
similarity index 95%
rename from services/mgmt/binary/impl/http.go
rename to services/binary/binarylib/http.go
index 94520e8..dec5e34 100644
--- a/services/mgmt/binary/impl/http.go
+++ b/services/binary/binarylib/http.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package impl
+package binarylib
 
 import (
 	"net/http"
@@ -13,7 +13,7 @@
 	"v.io/v23/verror"
 	"v.io/x/lib/vlog"
 
-	"v.io/x/ref/services/mgmt/binary/impl/multipart"
+	"v.io/x/ref/services/binary/internal/multipart"
 )
 
 // NewHTTPRoot returns an implementation of http.FileSystem that can be used
diff --git a/services/mgmt/binary/impl/http_test.go b/services/binary/binarylib/http_test.go
similarity index 94%
rename from services/mgmt/binary/impl/http_test.go
rename to services/binary/binarylib/http_test.go
index d4c10d8..7ce42dc 100644
--- a/services/mgmt/binary/impl/http_test.go
+++ b/services/binary/binarylib/http_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package impl_test
+package binarylib_test
 
 import (
 	"bytes"
@@ -16,7 +16,7 @@
 	"v.io/v23/naming"
 	"v.io/v23/services/repository"
 
-	"v.io/x/ref/services/mgmt/binary/impl"
+	"v.io/x/ref/services/binary/binarylib"
 	"v.io/x/ref/test"
 	"v.io/x/ref/test/testutil"
 )
@@ -37,7 +37,7 @@
 		data := make([][]byte, length)
 		for i := 0; i < length; i++ {
 			// Random size, but at least 1 (avoid empty parts).
-			size := testutil.Intn(1000*impl.BufferLength) + 1
+			size := testutil.Intn(1000*binarylib.BufferLength) + 1
 			data[i] = testutil.RandomBytes(size)
 		}
 		mediaInfo := repository.MediaInfo{Type: "application/octet-stream"}
diff --git a/services/mgmt/binary/impl/impl_test.go b/services/binary/binarylib/impl_test.go
similarity index 94%
rename from services/mgmt/binary/impl/impl_test.go
rename to services/binary/binarylib/impl_test.go
index 435465f..571000a 100644
--- a/services/mgmt/binary/impl/impl_test.go
+++ b/services/binary/binarylib/impl_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package impl_test
+package binarylib_test
 
 import (
 	"bytes"
@@ -22,7 +22,7 @@
 	"v.io/x/lib/vlog"
 
 	_ "v.io/x/ref/profiles/static"
-	"v.io/x/ref/services/mgmt/binary/impl"
+	"v.io/x/ref/services/binary/binarylib"
 	mgmttest "v.io/x/ref/services/mgmt/lib/testutil"
 	"v.io/x/ref/test"
 	"v.io/x/ref/test/testutil"
@@ -45,16 +45,16 @@
 	if err != nil {
 		t.Fatal(err)
 	}
-	state, err := impl.NewState(rootDir, listener.Addr().String(), depth)
+	state, err := binarylib.NewState(rootDir, listener.Addr().String(), depth)
 	if err != nil {
 		t.Fatalf("NewState(%v, %v) failed: %v", rootDir, listener.Addr().String(), depth, err)
 	}
 	go func() {
-		if err := http.Serve(listener, http.FileServer(impl.NewHTTPRoot(state))); err != nil {
+		if err := http.Serve(listener, http.FileServer(binarylib.NewHTTPRoot(state))); err != nil {
 			vlog.Fatalf("Serve() failed: %v", err)
 		}
 	}()
-	dispatcher, err := impl.NewDispatcher(v23.GetPrincipal(ctx), state)
+	dispatcher, err := binarylib.NewDispatcher(v23.GetPrincipal(ctx), state)
 	if err != nil {
 		t.Fatalf("NewDispatcher failed: %v", err)
 	}
@@ -210,14 +210,14 @@
 			}
 			finished := true
 			for _, part := range parts {
-				finished = finished && (part != impl.MissingPart)
+				finished = finished && (part != binarylib.MissingPart)
 			}
 			if finished {
 				break
 			}
 			for i := 0; i < length; i++ {
 				fail := testutil.Intn(2)
-				if parts[i] == impl.MissingPart && fail != 0 {
+				if parts[i] == binarylib.MissingPart && fail != 0 {
 					if streamErr, err := invokeUpload(t, ctx, binary, data[i], int32(i)); streamErr != nil || err != nil {
 						t.FailNow()
 					}
@@ -279,12 +279,12 @@
 	for _, part := range []int32{-1, length} {
 		if _, err := invokeUpload(t, ctx, binary, []byte("dummy"), part); err == nil {
 			t.Fatalf("Upload() did not fail when it should have")
-		} else if want := impl.ErrInvalidPart.ID; verror.ErrorID(err) != want {
+		} else if want := binarylib.ErrInvalidPart.ID; verror.ErrorID(err) != want {
 			t.Fatalf("Unexpected error: %v, expected error id %v", err, want)
 		}
 		if _, _, err := invokeDownload(t, ctx, binary, part); err == nil {
 			t.Fatalf("Download() did not fail when it should have")
-		} else if want := impl.ErrInvalidPart.ID; verror.ErrorID(err) != want {
+		} else if want := binarylib.ErrInvalidPart.ID; verror.ErrorID(err) != want {
 			t.Fatalf("Unexpected error: %v, expected error id %v", err, want)
 		}
 	}
diff --git a/services/mgmt/binary/impl/service.go b/services/binary/binarylib/service.go
similarity index 99%
rename from services/mgmt/binary/impl/service.go
rename to services/binary/binarylib/service.go
index 2b3e488..caf878d 100644
--- a/services/mgmt/binary/impl/service.go
+++ b/services/binary/binarylib/service.go
@@ -27,7 +27,7 @@
 // TODO(jsimsa): Add an "fsck" method that cleans up existing on-disk
 // repository and provide a command-line flag that identifies whether
 // fsck should run when new repository server process starts up.
-package impl
+package binarylib
 
 import (
 	"crypto/md5"
@@ -63,7 +63,7 @@
 	aclstore *acls.PathStore
 }
 
-const pkgPath = "v.io/x/ref/services/mgmt/binary/impl"
+const pkgPath = "v.io/x/ref/services/binary/binarylib"
 
 var (
 	ErrInProgress      = verror.Register(pkgPath+".errInProgress", verror.NoRetry, "{1:}{2:} identical upload already in progress{:_}")
diff --git a/services/mgmt/binary/impl/setup.go b/services/binary/binarylib/setup.go
similarity index 98%
rename from services/mgmt/binary/impl/setup.go
rename to services/binary/binarylib/setup.go
index cc1e756..aad59eb 100644
--- a/services/mgmt/binary/impl/setup.go
+++ b/services/binary/binarylib/setup.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package impl
+package binarylib
 
 import (
 	"io/ioutil"
diff --git a/services/mgmt/binary/impl/state.go b/services/binary/binarylib/state.go
similarity index 99%
rename from services/mgmt/binary/impl/state.go
rename to services/binary/binarylib/state.go
index b862aad..391bda2 100644
--- a/services/mgmt/binary/impl/state.go
+++ b/services/binary/binarylib/state.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package impl
+package binarylib
 
 import (
 	"crypto/md5"
diff --git a/services/mgmt/binary/impl/util_test.go b/services/binary/binarylib/util_test.go
similarity index 87%
rename from services/mgmt/binary/impl/util_test.go
rename to services/binary/binarylib/util_test.go
index 8f8534f..2be5369 100644
--- a/services/mgmt/binary/impl/util_test.go
+++ b/services/binary/binarylib/util_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package impl_test
+package binarylib_test
 
 import (
 	"io/ioutil"
@@ -13,7 +13,7 @@
 	"v.io/v23/context"
 	"v.io/v23/services/repository"
 
-	"v.io/x/ref/services/mgmt/binary/impl"
+	"v.io/x/ref/services/binary/binarylib"
 	"v.io/x/ref/test/testutil"
 )
 
@@ -81,15 +81,15 @@
 }
 
 func prepDirectory(t *testing.T, rootDir string) {
-	path, perm := filepath.Join(rootDir, impl.VersionFile), os.FileMode(0600)
-	if err := ioutil.WriteFile(path, []byte(impl.Version), perm); err != nil {
-		t.Fatalf(testutil.FormatLogLine(2, "WriteFile(%v, %v, %v) failed: %v", path, impl.Version, perm, err))
+	path, perm := filepath.Join(rootDir, binarylib.VersionFile), os.FileMode(0600)
+	if err := ioutil.WriteFile(path, []byte(binarylib.Version), perm); err != nil {
+		t.Fatalf(testutil.FormatLogLine(2, "WriteFile(%v, %v, %v) failed: %v", path, binarylib.Version, perm, err))
 	}
 }
 
 // testData creates up to 4MB of random bytes.
 func testData() []byte {
-	size := testutil.Intn(1000 * impl.BufferLength)
+	size := testutil.Intn(1000 * binarylib.BufferLength)
 	data := testutil.RandomBytes(size)
 	return data
 }
diff --git a/services/mgmt/binary/impl/v23_test.go b/services/binary/binarylib/v23_test.go
similarity index 96%
rename from services/mgmt/binary/impl/v23_test.go
rename to services/binary/binarylib/v23_test.go
index bfab5a1..06b7552 100644
--- a/services/mgmt/binary/impl/v23_test.go
+++ b/services/binary/binarylib/v23_test.go
@@ -4,7 +4,7 @@
 
 // This file was auto-generated via go generate.
 // DO NOT UPDATE MANUALLY
-package impl_test
+package binarylib_test
 
 import "fmt"
 import "testing"
diff --git a/services/mgmt/binary/impl/multipart/multipart.go b/services/binary/internal/multipart/multipart.go
similarity index 100%
rename from services/mgmt/binary/impl/multipart/multipart.go
rename to services/binary/internal/multipart/multipart.go
diff --git a/services/mgmt/binary/impl/multipart/multipart_test.go b/services/binary/internal/multipart/multipart_test.go
similarity index 98%
rename from services/mgmt/binary/impl/multipart/multipart_test.go
rename to services/binary/internal/multipart/multipart_test.go
index b4f623e..7acab57 100644
--- a/services/mgmt/binary/impl/multipart/multipart_test.go
+++ b/services/binary/internal/multipart/multipart_test.go
@@ -14,7 +14,7 @@
 	"strings"
 	"testing"
 
-	"v.io/x/ref/services/mgmt/binary/impl/multipart"
+	"v.io/x/ref/services/binary/internal/multipart"
 )
 
 func read(t *testing.T, m http.File, thisMuch int) string {
diff --git a/services/mgmt/device/impl/impl_test.go b/services/mgmt/device/impl/impl_test.go
index d155a1d..60ae7d6 100644
--- a/services/mgmt/device/impl/impl_test.go
+++ b/services/mgmt/device/impl/impl_test.go
@@ -45,7 +45,7 @@
 
 	"v.io/x/ref/envvar"
 	"v.io/x/ref/lib/signals"
-	binaryimpl "v.io/x/ref/services/mgmt/binary/impl"
+	"v.io/x/ref/services/binary/binarylib"
 	"v.io/x/ref/services/mgmt/device/config"
 	"v.io/x/ref/services/mgmt/device/impl"
 	"v.io/x/ref/services/mgmt/device/starter"
@@ -859,16 +859,16 @@
 }
 
 func startRealBinaryRepository(t *testing.T, ctx *context.T, von string) func() {
-	rootDir, err := binaryimpl.SetupRootDir("")
+	rootDir, err := binarylib.SetupRootDir("")
 	if err != nil {
-		t.Fatalf("binaryimpl.SetupRootDir failed: %v", err)
+		t.Fatalf("binarylib.SetupRootDir failed: %v", err)
 	}
-	state, err := binaryimpl.NewState(rootDir, "", 3)
+	state, err := binarylib.NewState(rootDir, "", 3)
 	if err != nil {
-		t.Fatalf("binaryimpl.NewState failed: %v", err)
+		t.Fatalf("binarylib.NewState failed: %v", err)
 	}
 	server, _ := mgmttest.NewServer(ctx)
-	d, err := binaryimpl.NewDispatcher(v23.GetPrincipal(ctx), state)
+	d, err := binarylib.NewDispatcher(v23.GetPrincipal(ctx), state)
 	if err != nil {
 		t.Fatalf("server.NewDispatcher failed: %v", err)
 	}
diff --git a/services/mgmt/lib/binary/impl_test.go b/services/mgmt/lib/binary/impl_test.go
index 91523f6..7bb0543 100644
--- a/services/mgmt/lib/binary/impl_test.go
+++ b/services/mgmt/lib/binary/impl_test.go
@@ -20,7 +20,7 @@
 	"v.io/x/lib/vlog"
 
 	_ "v.io/x/ref/profiles"
-	"v.io/x/ref/services/mgmt/binary/impl"
+	"v.io/x/ref/services/binary/binarylib"
 	"v.io/x/ref/test"
 	"v.io/x/ref/test/testutil"
 )
@@ -37,9 +37,9 @@
 	if err != nil {
 		t.Fatalf("TempDir() failed: %v", err)
 	}
-	path, perm := filepath.Join(rootDir, impl.VersionFile), os.FileMode(0600)
-	if err := ioutil.WriteFile(path, []byte(impl.Version), perm); err != nil {
-		vlog.Fatalf("WriteFile(%v, %v, %v) failed: %v", path, impl.Version, perm, err)
+	path, perm := filepath.Join(rootDir, binarylib.VersionFile), os.FileMode(0600)
+	if err := ioutil.WriteFile(path, []byte(binarylib.Version), perm); err != nil {
+		vlog.Fatalf("WriteFile(%v, %v, %v) failed: %v", path, binarylib.Version, perm, err)
 	}
 	// Setup and start the binary repository server.
 	server, err := v23.NewServer(ctx)
@@ -47,12 +47,12 @@
 		t.Fatalf("NewServer() failed: %v", err)
 	}
 	depth := 2
-	state, err := impl.NewState(rootDir, "http://test-root-url", depth)
+	state, err := binarylib.NewState(rootDir, "http://test-root-url", depth)
 	if err != nil {
 		t.Fatalf("NewState(%v, %v) failed: %v", rootDir, depth, err)
 	}
 
-	dispatcher, err := impl.NewDispatcher(v23.GetPrincipal(ctx), state)
+	dispatcher, err := binarylib.NewDispatcher(v23.GetPrincipal(ctx), state)
 	if err != nil {
 		t.Fatalf("NewDispatcher() failed: %v\n", err)
 	}