js.core: 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: 3/9

Change-Id: Ib7e5d5c7957a7f363e06f9a866997eb099e2c913
diff --git a/go/src/v.io/x/js.core/stress/stressd/main.go b/go/src/v.io/x/js.core/stress/stressd/main.go
index 021593e..6f4cb97 100644
--- a/go/src/v.io/x/js.core/stress/stressd/main.go
+++ b/go/src/v.io/x/js.core/stress/stressd/main.go
@@ -8,7 +8,10 @@
 	"runtime"
 
 	"v.io/v23"
+	"v.io/v23/security"
+	"v.io/x/lib/vlog"
 	"v.io/x/ref/lib/signals"
+	"v.io/x/ref/lib/xrpc"
 	_ "v.io/x/ref/runtime/factories/generic"
 )
 
@@ -17,8 +20,9 @@
 	ctx, shutdown := v23.Init()
 	defer shutdown()
 
-	s := startServer(ctx, v23.GetListenSpec(ctx))
-	defer s.Stop()
-
+	_, err := xrpc.NewServer(ctx, "", NewStressService(), security.AllowEveryone())
+	if err != nil {
+		vlog.Fatalf("NewServer failed: %v", err)
+	}
 	<-signals.ShutdownOnSignals(ctx)
 }
diff --git a/go/src/v.io/x/js.core/stress/stressd/server.go b/go/src/v.io/x/js.core/stress/stressd/server.go
index 0ebb6fa..0f041dd 100644
--- a/go/src/v.io/x/js.core/stress/stressd/server.go
+++ b/go/src/v.io/x/js.core/stress/stressd/server.go
@@ -9,18 +9,19 @@
 	"fmt"
 	"time"
 
-	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/v23/rpc"
-	"v.io/v23/security"
 	"v.io/x/js.core/stress"
-	"v.io/x/lib/vlog"
 )
 
 const payloadSize = 1000
 
 type impl struct{}
 
+func NewStressService() stress.StressServerStub {
+	return stress.StressServer(&impl{})
+}
+
 func (s *impl) Echo(_ *context.T, _ rpc.ServerCall, payload []byte) ([]byte, error) {
 	return payload, nil
 }
@@ -54,21 +55,3 @@
 	res.MsecsPerRpc = 1000 / res.Qps
 	return res, nil
 }
-
-func startServer(ctx *context.T, listenSpec rpc.ListenSpec) rpc.Server {
-	server, err := v23.NewServer(ctx)
-	if err != nil {
-		vlog.Fatalf("NewServer failed: %v", err)
-	}
-	_, err = server.Listen(listenSpec)
-	if err != nil {
-		vlog.Fatalf("Listen failed: %v", err)
-	}
-
-	s := impl{}
-	if err := server.Serve("", stress.StressServer(&s), security.AllowEveryone()); err != nil {
-		vlog.Fatalf("Serve failed: %v", err)
-	}
-
-	return server
-}
diff --git a/go/src/v.io/x/js.core/test_service/test_serviced/main.go b/go/src/v.io/x/js.core/test_service/test_serviced/main.go
index ec964e8..3bde24e 100644
--- a/go/src/v.io/x/js.core/test_service/test_serviced/main.go
+++ b/go/src/v.io/x/js.core/test_service/test_serviced/main.go
@@ -10,20 +10,22 @@
 	"log"
 
 	"v.io/v23"
+	"v.io/x/ref/lib/flags"
 	"v.io/x/ref/lib/signals"
+	"v.io/x/ref/lib/xrpc"
 	_ "v.io/x/ref/runtime/factories/generic"
 )
 
 func main() {
+	flags.SetDefaultHostPort("127.0.0.1:0")
 	ctx, shutdown := v23.Init()
 	defer shutdown()
 
-	s, endpoint, err := StartServer(ctx)
+	s, err := xrpc.NewDispatchingServer(ctx, "test_service", NewDispatcher())
 	if err != nil {
-		log.Fatal("", err)
+		log.Fatalf("failure creating server: %v", err)
 	}
-	defer s.Stop()
-
+	endpoint := s.Status().Endpoints[0]
 	fmt.Printf("Listening at: %v\n", endpoint)
 	<-signals.ShutdownOnSignals(ctx)
 }
diff --git a/go/src/v.io/x/js.core/test_service/test_serviced/test_serviced.go b/go/src/v.io/x/js.core/test_service/test_serviced/test_serviced.go
index 092ae64..7d51839 100644
--- a/go/src/v.io/x/js.core/test_service/test_serviced/test_serviced.go
+++ b/go/src/v.io/x/js.core/test_service/test_serviced/test_serviced.go
@@ -8,9 +8,7 @@
 	"fmt"
 	"strings"
 
-	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/v23/naming"
 	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/x/js.core/test_service"
@@ -32,6 +30,17 @@
 	caveatedInvoker interface{}
 }
 
+func NewDispatcher() rpc.Dispatcher {
+	disp := &testServiceDispatcher{
+		cache:           test_service.CacheServer(NewCached()),
+		errorThrower:    test_service.ErrorThrowerServer(NewErrorThrower()),
+		cancelCollector: test_service.CancelCollectorServer(NewCancelCollector()),
+		native:          test_service.NativeTestServer(NewNativeTest()),
+		caveatedInvoker: test_service.InvokeMethodWithCaveatedIdentityServer(NewInvokeMethodWithCaveatedIdentityServer()),
+	}
+	return disp
+}
+
 func (sd *testServiceDispatcher) Lookup(suffix string) (interface{}, security.Authorizer, error) {
 	authorizer := openAuthorizer{}
 
@@ -58,34 +67,3 @@
 
 	return rpc.ReflectInvokerOrDie(sd.cache), authorizer, nil
 }
-
-func StartServer(ctx *context.T) (rpc.Server, naming.Endpoint, error) {
-	// Create a new server instance.
-	s, err := v23.NewServer(ctx)
-	if err != nil {
-		return nil, nil, fmt.Errorf("failure creating server: %v", err)
-	}
-
-	disp := &testServiceDispatcher{
-		cache:           test_service.CacheServer(NewCached()),
-		errorThrower:    test_service.ErrorThrowerServer(NewErrorThrower()),
-		cancelCollector: test_service.CancelCollectorServer(NewCancelCollector()),
-		native:          test_service.NativeTestServer(NewNativeTest()),
-		caveatedInvoker: test_service.InvokeMethodWithCaveatedIdentityServer(NewInvokeMethodWithCaveatedIdentityServer()),
-	}
-
-	// Create an endpoint and begin listening.
-	spec := rpc.ListenSpec{Addrs: rpc.ListenAddrs{{"ws", "127.0.0.1:0"}}}
-	endpoints, err := s.Listen(spec)
-	if err != nil {
-		return nil, nil, fmt.Errorf("error listening to service: %v", err)
-	}
-
-	// Publish the services. This will register them in the mount table and
-	// maintain the registration until StopServing is called.
-	if err := s.ServeDispatcher("test_service", disp); err != nil {
-		return nil, nil, fmt.Errorf("error publishing service '%s': %v", err)
-	}
-
-	return s, endpoints[0], nil
-}