ref: Change many uses of v23.NewServer to use xrpc.New*Server instead.

This is designed to reduce boilerplate and prove out the xrpc interface.
All but about 10 uses were replaced.

Some of the remaining calls are more complicated because the services/dispatchers
currently take the serving address as a construction parameter.

MultiPart: 2/9

Change-Id: Ie9768365a9fb27918d8ddf949b017570c806cf55
diff --git a/lib/signals/signals_test.go b/lib/signals/signals_test.go
index 63b0097..2acdad1 100644
--- a/lib/signals/signals_test.go
+++ b/lib/signals/signals_test.go
@@ -16,12 +16,12 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/naming"
 	"v.io/v23/rpc"
 	"v.io/v23/services/appcycle"
 	"v.io/v23/vtrace"
 	"v.io/x/ref/lib/mgmt"
 	"v.io/x/ref/lib/security/securityflag"
+	"v.io/x/ref/lib/xrpc"
 	"v.io/x/ref/services/device"
 	"v.io/x/ref/test"
 	"v.io/x/ref/test/modules"
@@ -334,23 +334,6 @@
 
 }
 
-func createConfigServer(t *testing.T, ctx *context.T) (rpc.Server, string, <-chan string) {
-	server, err := v23.NewServer(ctx)
-	if err != nil {
-		t.Fatalf("Got error: %v", err)
-	}
-	ch := make(chan string)
-	var ep []naming.Endpoint
-	if ep, err = server.Listen(v23.GetListenSpec(ctx)); err != nil {
-		t.Fatalf("Got error: %v", err)
-	}
-	if err := server.Serve("", device.ConfigServer(&configServer{ch}), securityflag.NewAuthorizerOrDie()); err != nil {
-		t.Fatalf("Got error: %v", err)
-	}
-	return server, ep[0].Name(), ch
-
-}
-
 // TestCleanRemoteShutdown verifies that remote shutdown works correctly.
 func TestCleanRemoteShutdown(t *testing.T) {
 	ctx, shutdown := test.V23Init()
@@ -362,8 +345,13 @@
 	}
 	defer sh.Cleanup(os.Stderr, os.Stderr)
 
-	configServer, configServiceName, ch := createConfigServer(t, ctx)
-	defer configServer.Stop()
+	ch := make(chan string)
+	server, err := xrpc.NewServer(ctx, "", device.ConfigServer(&configServer{ch}), securityflag.NewAuthorizerOrDie())
+	if err != nil {
+		t.Fatalf("Got error: %v", err)
+	}
+	configServiceName := server.Status().Endpoints[0].Name()
+
 	sh.SetConfigKey(mgmt.ParentNameConfigKey, configServiceName)
 	sh.SetConfigKey(mgmt.ProtocolConfigKey, "tcp")
 	sh.SetConfigKey(mgmt.AddressConfigKey, "127.0.0.1:0")
diff --git a/lib/xrpc/xserver.go b/lib/xrpc/xserver.go
index cc1f775..30bb7c1 100644
--- a/lib/xrpc/xserver.go
+++ b/lib/xrpc/xserver.go
@@ -41,9 +41,11 @@
 		return nil, err
 	}
 	if _, err = s.Listen(v23.GetListenSpec(ctx)); err != nil {
+		s.Stop()
 		return nil, err
 	}
 	if err = s.Serve(name, object, auth); err != nil {
+		s.Stop()
 		return nil, err
 	}
 	return &Server{s: s}, nil