veyron/runtimes/google/ipc: new Serve method to replace Register+Publish.

Change-Id: Icc69645e753a3e84c5d87a3e9d2d4abd36275fff
diff --git a/services/mgmt/application/applicationd/main.go b/services/mgmt/application/applicationd/main.go
index f5bf624..d5e0a33 100644
--- a/services/mgmt/application/applicationd/main.go
+++ b/services/mgmt/application/applicationd/main.go
@@ -34,16 +34,12 @@
 	if err != nil {
 		vlog.Fatalf("NewDispatcher() failed: %v", err)
 	}
-	suffix := ""
-	if err := server.Register(suffix, dispatcher); err != nil {
-		vlog.Fatalf("Register(%v, %v) failed: %v", suffix, dispatcher, err)
-	}
 	endpoint, err := server.Listen(protocol, address)
 	if err != nil {
 		vlog.Fatalf("Listen(%v, %v) failed: %v", protocol, address, err)
 	}
-	if err := server.Publish(name); err != nil {
-		vlog.Fatalf("Publish(%v) failed: %v", name, err)
+	if err := server.Serve(name, dispatcher); err != nil {
+		vlog.Fatalf("Serve(%v) failed: %v", name, err)
 	}
 	vlog.VI(0).Infof("Application manager published at %v/%v", endpoint, name)
 
diff --git a/services/mgmt/application/impl/impl_test.go b/services/mgmt/application/impl/impl_test.go
index cee0cdb..76a0fd6 100644
--- a/services/mgmt/application/impl/impl_test.go
+++ b/services/mgmt/application/impl/impl_test.go
@@ -24,24 +24,30 @@
 	if err != nil {
 		t.Fatalf("NewServer() failed: %v", err)
 	}
+	defer server.Stop()
 
 	// Setup and start a store server.
-	name, cleanup := testutil.NewStore(t, server, runtime.Identity().PublicID())
+	store, cleanup := testutil.NewStore(t, server, runtime.Identity().PublicID())
 	defer cleanup()
 
-	dispatcher, err := NewDispatcher(name, nil)
+	server, err = runtime.NewServer()
+	if err != nil {
+		t.Fatalf("NewServer() failed: %v", err)
+	}
+
+	dispatcher, err := NewDispatcher(store, nil)
 	if err != nil {
 		t.Fatalf("NewDispatcher() failed: %v", err)
 	}
-	suffix := ""
-	if err := server.Register(suffix, dispatcher); err != nil {
-		t.Fatalf("Register(%v, %v) failed: %v", suffix, dispatcher, err)
-	}
+
 	protocol, hostname := "tcp", "localhost:0"
 	endpoint, err := server.Listen(protocol, hostname)
 	if err != nil {
 		t.Fatalf("Listen(%v, %v) failed: %v", protocol, hostname, err)
 	}
+	if err := server.Serve("", dispatcher); err != nil {
+		t.Fatalf("Serve(%v) failed: %v", dispatcher, err)
+	}
 
 	// Create client stubs for talking to the server.
 	stub, err := repository.BindApplication(naming.JoinAddressName(endpoint.String(), "//search"))
diff --git a/services/mgmt/node/impl/impl_test.go b/services/mgmt/node/impl/impl_test.go
index 5a2d08b..361f399 100644
--- a/services/mgmt/node/impl/impl_test.go
+++ b/services/mgmt/node/impl/impl_test.go
@@ -262,10 +262,7 @@
 	if err != nil {
 		vlog.Fatalf("NewServer() failed: %v", err)
 	}
-	suffix, dispatcher := "", ipc.SoloDispatcher(repository.NewServerApplication(&arInvoker{}), nil)
-	if err := server.Register(suffix, dispatcher); err != nil {
-		vlog.Fatalf("Register(%v, %v) failed: %v", suffix, dispatcher, err)
-	}
+	dispatcher := ipc.SoloDispatcher(repository.NewServerApplication(&arInvoker{}), nil)
 	protocol, hostname := "tcp", "localhost:0"
 	endpoint, err := server.Listen(protocol, hostname)
 	if err != nil {
@@ -273,8 +270,8 @@
 	}
 	vlog.VI(1).Infof("Application repository running at endpoint: %s", endpoint)
 	name := "ar"
-	if err := server.Publish(name); err != nil {
-		vlog.Fatalf("Publish(%v) failed: %v", name, err)
+	if err := server.Serve(name, dispatcher); err != nil {
+		vlog.Fatalf("Serve(%v) failed: %v", name, err)
 	}
 	return name, func() {
 		if err := server.Stop(); err != nil {
@@ -288,10 +285,7 @@
 	if err != nil {
 		vlog.Fatalf("NewServer() failed: %v", err)
 	}
-	suffix, dispatcher := "", ipc.SoloDispatcher(repository.NewServerBinary(&crInvoker{}), nil)
-	if err := server.Register(suffix, dispatcher); err != nil {
-		vlog.Fatalf("Register(%v, %v) failed: %v", suffix, dispatcher, err)
-	}
+	dispatcher := ipc.SoloDispatcher(repository.NewServerContent(&crInvoker{}), nil)
 	protocol, hostname := "tcp", "localhost:0"
 	endpoint, err := server.Listen(protocol, hostname)
 	if err != nil {
@@ -299,8 +293,8 @@
 	}
 	vlog.VI(1).Infof("Binary repository running at endpoint: %s", endpoint)
 	name := "cr"
-	if err := server.Publish(name); err != nil {
-		vlog.Fatalf("Publish(%v) failed: %v", name, err)
+	if err := server.Serve(name, dispatcher); err != nil {
+		vlog.Fatalf("Serve(%v) failed: %v", name, err)
 	}
 	return name, func() {
 		if err := server.Stop(); err != nil {
@@ -318,16 +312,15 @@
 	if err != nil {
 		t.Fatalf("NewMountTable() failed: %v", err)
 	}
-	suffix := "mt"
-	if err := server.Register(suffix, dispatcher); err != nil {
-		t.Fatalf("Register(%v, %v) failed: %v", suffix, dispatcher, err)
-	}
 	protocol, hostname := "tcp", "localhost:0"
 	endpoint, err := server.Listen(protocol, hostname)
 	if err != nil {
 		t.Fatalf("Listen(%v, %v) failed: %v", protocol, hostname, err)
 	}
-	name := naming.JoinAddressName(endpoint.String(), suffix)
+	if err := server.Serve("", dispatcher); err != nil {
+		t.Fatalf("Serve(%v) failed: %v", dispatcher, err)
+	}
+	name := naming.JoinAddressName(endpoint.String(), "")
 	vlog.VI(1).Infof("Mount table name: %v", name)
 	return name, func() {
 		if err := server.Stop(); err != nil {
@@ -346,18 +339,15 @@
 	if err != nil {
 		vlog.Fatalf("Listen(%v, %v) failed: %v", protocol, hostname, err)
 	}
-	suffix, envelope := "", &application.Envelope{}
-	name := naming.MakeTerminal(naming.JoinAddressName(endpoint.String(), suffix))
+	envelope := &application.Envelope{}
+	name := naming.MakeTerminal(naming.JoinAddressName(endpoint.String(), ""))
 	vlog.VI(0).Infof("Node manager name: %v", name)
 	// TODO(jsimsa): Replace <PreviousEnv> with a command-line flag when
 	// command-line flags in tests are supported.
 	dispatcher := impl.NewDispatcher(nil, envelope, name, os.Getenv(impl.PreviousEnv))
-	if err := server.Register(suffix, dispatcher); err != nil {
-		vlog.Fatalf("Register(%v, %v) failed: %v", suffix, dispatcher, err)
-	}
 	publishAs := "nm"
-	if err := server.Publish(publishAs); err != nil {
-		vlog.Fatalf("Publish(%v) failed: %v", publishAs, err)
+	if err := server.Serve(publishAs, dispatcher); err != nil {
+		vlog.Fatalf("Serve(%v) failed: %v", publishAs, err)
 	}
 	fmt.Printf("ready\n")
 	return name, func() {
@@ -408,7 +398,7 @@
 	ns := runtime.Namespace()
 	// The local, client-side Namespace is now relative to the
 	// MountTable server started above.
-	ns.SetRoots([]string{mtName})
+	ns.SetRoots(mtName)
 	// Spawn a node manager with an identity blessed by the MountTable's
 	// identity under the name "test", and obtain its address.
 	//
diff --git a/services/mgmt/node/noded/main.go b/services/mgmt/node/noded/main.go
index ec9762b..af7c5d2 100644
--- a/services/mgmt/node/noded/main.go
+++ b/services/mgmt/node/noded/main.go
@@ -44,13 +44,8 @@
 	// TODO(jsimsa): Replace <PreviousEnv> with a command-line flag when
 	// command-line flags are supported in tests.
 	dispatcher := impl.NewDispatcher(vflag.NewAuthorizerOrDie(), envelope, name, os.Getenv(impl.PreviousEnv))
-	if err := server.Register(suffix, dispatcher); err != nil {
-		vlog.Fatalf("Register(%v, %v) failed: %v", suffix, dispatcher, err)
-	}
-	if len(publishAs) > 0 {
-		if err := server.Publish(publishAs); err != nil {
-			vlog.Fatalf("Publish(%v) failed: %v", publishAs, err)
-		}
+	if err := server.Serve(publishAs, dispatcher); err != nil {
+		vlog.Fatalf("Serve(%v) failed: %v", publishAs, err)
 	}
 	handle, _ := exec.GetChildHandle()
 	if handle != nil {
diff --git a/services/mgmt/profile/impl/impl_test.go b/services/mgmt/profile/impl/impl_test.go
index 777444c..6822260 100644
--- a/services/mgmt/profile/impl/impl_test.go
+++ b/services/mgmt/profile/impl/impl_test.go
@@ -35,29 +35,31 @@
 	if err != nil {
 		t.Fatalf("NewServer() failed: %v", err)
 	}
+	defer server.Stop()
 
 	// Setup and start a store server.
 	mountPoint, cleanup := testutil.NewStore(t, server, runtime.Identity().PublicID())
 	defer cleanup()
 
+	// Setup and start the profile server.
+	server, err = runtime.NewServer()
+	if err != nil {
+		t.Fatalf("NewServer() failed: %v", err)
+	}
+
 	dispatcher, err := NewDispatcher(mountPoint, nil)
 	if err != nil {
 		t.Fatalf("NewDispatcher() failed: %v", err)
 	}
-	suffix := ""
-	if err := server.Register(suffix, dispatcher); err != nil {
-		t.Fatalf("Register(%v, %v) failed: %v", suffix, dispatcher, err)
-	}
 	protocol, hostname := "tcp", "localhost:0"
 	endpoint, err := server.Listen(protocol, hostname)
 	if err != nil {
 		t.Fatalf("Listen(%v, %v) failed: %v", protocol, hostname, err)
 	}
-	name := ""
-	if err := server.Publish(name); err != nil {
-		t.Fatalf("Publish(%v) failed: %v", name, err)
+	if err := server.Serve("", dispatcher); err != nil {
+		t.Fatalf("Serve failed: %v", err)
 	}
-	t.Logf("Profile repository published at %v/%v", endpoint, name)
+	t.Logf("Profile repository at %v", endpoint)
 
 	// Create client stubs for talking to the server.
 	stub, err := repository.BindProfile(naming.JoinAddressName(endpoint.String(), "//linux/base"))
diff --git a/services/mgmt/profile/profiled/main.go b/services/mgmt/profile/profiled/main.go
index 51ca649..cc33f62 100644
--- a/services/mgmt/profile/profiled/main.go
+++ b/services/mgmt/profile/profiled/main.go
@@ -33,16 +33,13 @@
 	if err != nil {
 		vlog.Fatalf("NewDispatcher() failed: %v", err)
 	}
-	suffix := ""
-	if err := server.Register(suffix, dispatcher); err != nil {
-		vlog.Fatalf("Register(%v, %v) failed: %v", suffix, dispatcher, err)
-	}
+
 	endpoint, err := server.Listen(protocol, address)
 	if err != nil {
 		vlog.Fatalf("Listen(%v, %v) failed: %v", protocol, address, err)
 	}
-	if err := server.Publish(name); err != nil {
-		vlog.Fatalf("Publish(%v) failed: %v", name, err)
+	if err := server.Serve(name, dispatcher); err != nil {
+		vlog.Fatalf("Serve(%v) failed: %v", name, err)
 	}
 	vlog.VI(0).Infof("Profile manager published at %v/%v", endpoint, name)
 
diff --git a/services/mgmt/root/rootd/main.go b/services/mgmt/root/rootd/main.go
index d28b6f4..ae4b33a 100644
--- a/services/mgmt/root/rootd/main.go
+++ b/services/mgmt/root/rootd/main.go
@@ -17,11 +17,7 @@
 		return
 	}
 	defer server.Stop()
-	suffix, dispatcher := "", impl.NewDispatcher()
-	if err := server.Register(suffix, dispatcher); err != nil {
-		vlog.Errorf("Register(%v, %v) failed: %v", suffix, dispatcher, err)
-		return
-	}
+	dispatcher := impl.NewDispatcher()
 	protocol, hostname := "tcp", "localhost:0"
 	ep, err := server.Listen(protocol, hostname)
 	if err != nil {
@@ -30,8 +26,8 @@
 	}
 	vlog.VI(0).Infof("Listening on %v", ep)
 	name := ""
-	if err := server.Publish(name); err != nil {
-		vlog.Errorf("Publish(%v) failed: %v", name, err)
+	if err := server.Serve(name, dispatcher); err != nil {
+		vlog.Errorf("Serve(%v) failed: %v", name, err)
 		return
 	}