veyron/runtimes/google/ipc: Pass client to server to allow discharge client
to use client from context.

Change-Id: Ife7ce864964867f1e007748a04f7a40f31bdc795
diff --git a/runtimes/google/ipc/cancel_test.go b/runtimes/google/ipc/cancel_test.go
index 31d5abc..d5e2e01 100644
--- a/runtimes/google/ipc/cancel_test.go
+++ b/runtimes/google/ipc/cancel_test.go
@@ -56,7 +56,7 @@
 func makeCanceld(ns naming.Namespace, name, child string) (*canceld, error) {
 	sm := manager.InternalNew(naming.FixedRoutingID(0x111111111))
 	ctx := testContext()
-	s, err := InternalNewServer(ctx, sm, ns, nil)
+	s, err := testInternalNewServer(ctx, sm, ns)
 	if err != nil {
 		return nil, err
 	}
diff --git a/runtimes/google/ipc/debug_test.go b/runtimes/google/ipc/debug_test.go
index 547d350..e1bf356 100644
--- a/runtimes/google/ipc/debug_test.go
+++ b/runtimes/google/ipc/debug_test.go
@@ -36,7 +36,7 @@
 	defer sm.Shutdown()
 	ns := tnaming.NewSimpleNamespace()
 	ctx := testContext()
-	server, err := InternalNewServer(ctx, sm, ns, nil, ReservedNameDispatcher{debugDisp}, vc.LocalPrincipal{pserver})
+	server, err := testInternalNewServer(ctx, sm, ns, ReservedNameDispatcher{debugDisp}, vc.LocalPrincipal{pserver})
 	if err != nil {
 		t.Fatalf("InternalNewServer failed: %v", err)
 	}
diff --git a/runtimes/google/ipc/full_test.go b/runtimes/google/ipc/full_test.go
index f46b0b7..f9859b2 100644
--- a/runtimes/google/ipc/full_test.go
+++ b/runtimes/google/ipc/full_test.go
@@ -97,6 +97,14 @@
 	return ctx
 }
 
+func testInternalNewServer(ctx *context.T, streamMgr stream.Manager, ns naming.Namespace, opts ...ipc.ServerOpt) (ipc.Server, error) {
+	client, err := InternalNewClient(streamMgr, ns)
+	if err != nil {
+		return nil, err
+	}
+	return InternalNewServer(ctx, streamMgr, ns, client, opts...)
+}
+
 type userType string
 
 type testServer struct{}
@@ -214,7 +222,7 @@
 	vlog.VI(1).Info("InternalNewServer")
 	opts = append(opts, vc.LocalPrincipal{principal})
 	ctx := testContext()
-	server, err := InternalNewServer(ctx, sm, ns, opts...)
+	server, err := testInternalNewServer(ctx, sm, ns, opts...)
 	if err != nil {
 		t.Errorf("InternalNewServer failed: %v", err)
 	}
@@ -364,7 +372,7 @@
 	sm := imanager.InternalNew(naming.FixedRoutingID(0x555555555))
 	ns := tnaming.NewSimpleNamespace()
 	ctx := testContext()
-	server, err := InternalNewServer(ctx, sm, ns, nil, vc.LocalPrincipal{tsecurity.NewPrincipal()})
+	server, err := testInternalNewServer(ctx, sm, ns, vc.LocalPrincipal{tsecurity.NewPrincipal()})
 	if err != nil {
 		t.Errorf("InternalNewServer failed: %v", err)
 	}
@@ -808,7 +816,7 @@
 	// Setup the discharge server.
 	var tester dischargeTestServer
 	ctx := testContext()
-	dischargeServer, err := InternalNewServer(ctx, sm, ns, nil, vc.LocalPrincipal{pdischarger})
+	dischargeServer, err := testInternalNewServer(ctx, sm, ns, vc.LocalPrincipal{pdischarger})
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -821,7 +829,7 @@
 	}
 
 	// Setup the application server.
-	appServer, err := InternalNewServer(ctx, sm, ns, nil, vc.LocalPrincipal{pserver})
+	appServer, err := testInternalNewServer(ctx, sm, ns, vc.LocalPrincipal{pserver})
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -1276,7 +1284,7 @@
 		return []ipc.Address{&netstate.AddrIfc{Addr: a}}, nil
 	}
 	ctx := testContext()
-	server, err := InternalNewServer(ctx, sm, ns, nil, vc.LocalPrincipal{tsecurity.NewPrincipal("server")})
+	server, err := testInternalNewServer(ctx, sm, ns, vc.LocalPrincipal{tsecurity.NewPrincipal("server")})
 	if err != nil {
 		t.Errorf("InternalNewServer failed: %v", err)
 	}
@@ -1318,7 +1326,7 @@
 		return nil, fmt.Errorf("oops")
 	}
 	ctx := testContext()
-	server, err := InternalNewServer(ctx, sm, ns, nil, vc.LocalPrincipal{tsecurity.NewPrincipal("server")})
+	server, err := testInternalNewServer(ctx, sm, ns, vc.LocalPrincipal{tsecurity.NewPrincipal("server")})
 	if err != nil {
 		t.Errorf("InternalNewServer failed: %v", err)
 	}
@@ -1347,7 +1355,7 @@
 	defer sm.Shutdown()
 	ns := tnaming.NewSimpleNamespace()
 	ctx := testContext()
-	server, err := InternalNewServer(ctx, sm, ns, nil, options.VCSecurityNone)
+	server, err := testInternalNewServer(ctx, sm, ns, options.VCSecurityNone)
 	if err != nil {
 		t.Fatalf("InternalNewServer failed: %v", err)
 	}
@@ -1419,7 +1427,7 @@
 			t.Fatal(err)
 		}
 		sm := imanager.InternalNew(rid)
-		server, err := InternalNewServer(ctx, sm, ns, opts...)
+		server, err := testInternalNewServer(ctx, sm, ns, opts...)
 		if err != nil {
 			t.Fatal(err)
 		}
@@ -1513,7 +1521,7 @@
 			t.Fatal(err)
 		}
 		sm := imanager.InternalNew(rid)
-		server, err := InternalNewServer(ctx, sm, ns, nil, vc.LocalPrincipal{principal})
+		server, err := testInternalNewServer(ctx, sm, ns, vc.LocalPrincipal{principal})
 		if err != nil {
 			t.Fatal(err)
 		}
@@ -1589,7 +1597,7 @@
 			t.Fatal(err)
 		}
 		sm := imanager.InternalNew(rid)
-		server, err := InternalNewServer(ctx, sm, ns, nil, vc.LocalPrincipal{principal})
+		server, err := testInternalNewServer(ctx, sm, ns, vc.LocalPrincipal{principal})
 		if err != nil {
 			t.Fatal(err)
 		}
@@ -1654,7 +1662,7 @@
 	}
 	runServer := func(principal security.Principal, rid naming.RoutingID) (ipc.Server, stream.Manager, naming.Endpoint) {
 		sm := imanager.InternalNew(rid)
-		server, err := InternalNewServer(ctx, sm, ns, nil, vc.LocalPrincipal{principal})
+		server, err := testInternalNewServer(ctx, sm, ns, vc.LocalPrincipal{principal})
 		if err != nil {
 			t.Fatal(err)
 		}
diff --git a/runtimes/google/ipc/server.go b/runtimes/google/ipc/server.go
index 12eeba0..936402c 100644
--- a/runtimes/google/ipc/server.go
+++ b/runtimes/google/ipc/server.go
@@ -146,7 +146,7 @@
 
 func (ReservedNameDispatcher) IPCServerOpt() {}
 
-func InternalNewServer(ctx *context.T, streamMgr stream.Manager, ns naming.Namespace, opts ...ipc.ServerOpt) (ipc.Server, error) {
+func InternalNewServer(ctx *context.T, streamMgr stream.Manager, ns naming.Namespace, client ipc.Client, opts ...ipc.ServerOpt) (ipc.Server, error) {
 	ctx, _ = vtrace.SetNewSpan(ctx, "NewServer")
 	statsPrefix := naming.Join("ipc", "server", "routing-id", streamMgr.RoutingID().String())
 	s := &server{
@@ -184,10 +184,6 @@
 			s.preferredProtocols = []string(opt)
 		}
 	}
-	client, err := InternalNewClient(streamMgr, ns)
-	if err != nil {
-		return nil, fmt.Errorf("failed to create discharge-client: %v", err)
-	}
 	dc := InternalNewDischargeClient(ctx, client)
 	s.listenerOpts = append(s.listenerOpts, dc)
 	blessingsStatsName := naming.Join(statsPrefix, "security", "blessings")
diff --git a/runtimes/google/ipc/server_test.go b/runtimes/google/ipc/server_test.go
index 8502416..9caf0d3 100644
--- a/runtimes/google/ipc/server_test.go
+++ b/runtimes/google/ipc/server_test.go
@@ -49,7 +49,7 @@
 	ns := tnaming.NewSimpleNamespace()
 
 	ctx := testContext()
-	server, err := InternalNewServer(ctx, sm, ns, nil)
+	server, err := testInternalNewServer(ctx, sm, ns)
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -153,7 +153,7 @@
 	}
 	defer client.Close()
 	ctx := testContext()
-	server, err := InternalNewServer(ctx, sm, ns, nil, vc.LocalPrincipal{tsecurity.NewPrincipal("server")})
+	server, err := testInternalNewServer(ctx, sm, ns, vc.LocalPrincipal{tsecurity.NewPrincipal("server")})
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -343,7 +343,7 @@
 	sm := imanager.InternalNew(naming.FixedRoutingID(0x555555555))
 	ns := tnaming.NewSimpleNamespace()
 	principal := vc.LocalPrincipal{tsecurity.NewPrincipal("testServerStatus")}
-	server, err := InternalNewServer(testContext(), sm, ns, principal)
+	server, err := testInternalNewServer(testContext(), sm, ns, principal)
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -445,7 +445,7 @@
 		}
 	}
 
-	server, err := InternalNewServer(testContext(), sm, ns)
+	server, err := testInternalNewServer(testContext(), sm, ns)
 	expectNoError(err)
 
 	expectState := func(s ipc.ServerState) {
diff --git a/runtimes/google/rt/runtime.go b/runtimes/google/rt/runtime.go
index 4a5d3da..fceb78e 100644
--- a/runtimes/google/rt/runtime.go
+++ b/runtimes/google/rt/runtime.go
@@ -228,7 +228,7 @@
 	if protocols, ok := ctx.Value(protocolsKey).([]string); ok {
 		otherOpts = append(otherOpts, iipc.PreferredServerResolveProtocols(protocols))
 	}
-	server, err := iipc.InternalNewServer(ctx, sm, ns, otherOpts...)
+	server, err := iipc.InternalNewServer(ctx, sm, ns, r.GetClient(ctx), otherOpts...)
 	if err != nil {
 		return nil, err
 	}
diff --git a/runtimes/google/vtrace/vtrace_test.go b/runtimes/google/vtrace/vtrace_test.go
index 61f46c6..323ef8c 100644
--- a/runtimes/google/vtrace/vtrace_test.go
+++ b/runtimes/google/vtrace/vtrace_test.go
@@ -89,7 +89,11 @@
 
 func makeTestServer(ctx *context.T, ns naming.Namespace, name, child string, forceCollect bool) (*testServer, error) {
 	sm := manager.InternalNew(naming.FixedRoutingID(0x111111111))
-	s, err := iipc.InternalNewServer(ctx, sm, ns, nil)
+	client, err := iipc.InternalNewClient(sm, ns)
+	if err != nil {
+		return nil, err
+	}
+	s, err := iipc.InternalNewServer(ctx, sm, ns, client)
 	if err != nil {
 		return nil, err
 	}