diff --git a/profiles/fake/fake.go b/profiles/fake/fake.go
index 58ce2c8..68b2572 100644
--- a/profiles/fake/fake.go
+++ b/profiles/fake/fake.go
@@ -1,14 +1,56 @@
 package fake
 
 import (
+	"sync"
+
 	"v.io/v23"
 	"v.io/v23/context"
+	"v.io/v23/ipc"
+
+	_ "v.io/x/ref/profiles/internal/ipc/protocols/tcp"
+	_ "v.io/x/ref/profiles/internal/ipc/protocols/ws"
+	_ "v.io/x/ref/profiles/internal/ipc/protocols/wsh"
+	"v.io/x/ref/profiles/internal/lib/websocket"
+)
+
+var (
+	runtimeInfo struct {
+		mu       sync.Mutex
+		runtime  v23.Runtime  // GUARDED_BY mu
+		ctx      *context.T   // GUARDED_BY mu
+		shutdown v23.Shutdown // GUARDED_BY mu
+	}
 )
 
 func init() {
 	v23.RegisterProfileInit(Init)
+	ipc.RegisterUnknownProtocol("wsh", websocket.HybridDial, websocket.HybridListener)
 }
 
 func Init(ctx *context.T) (v23.Runtime, *context.T, v23.Shutdown, error) {
+	runtimeInfo.mu.Lock()
+	defer runtimeInfo.mu.Unlock()
+	if runtimeInfo.runtime != nil {
+		shutdown := func() {
+			runtimeInfo.mu.Lock()
+			runtimeInfo.shutdown()
+			runtimeInfo.runtime = nil
+			runtimeInfo.ctx = nil
+			runtimeInfo.shutdown = nil
+			runtimeInfo.mu.Unlock()
+		}
+		return runtimeInfo.runtime, runtimeInfo.ctx, shutdown, nil
+	}
 	return new(ctx)
 }
+
+// InjectRuntime allows packages to inject whichever runtime, ctx, and shutdown.
+// This allows a package that needs different runtimes in tests to swap them as needed.
+// The injected runtime will be valid until the shutdown returned from v23.Init is called.
+func InjectRuntime(runtime v23.Runtime, ctx *context.T, shutdown v23.Shutdown) {
+	runtimeInfo.mu.Lock()
+	runtimeInfo.runtime = runtime
+	runtimeInfo.ctx = ctx
+	runtimeInfo.shutdown = shutdown
+	runtimeInfo.mu.Unlock()
+}
diff --git a/profiles/internal/ipc/full_test.go b/profiles/internal/ipc/full_test.go
index d01c409..1918bfa 100644
--- a/profiles/internal/ipc/full_test.go
+++ b/profiles/internal/ipc/full_test.go
@@ -35,9 +35,12 @@
 	"v.io/x/ref/lib/testutil"
 	tsecurity "v.io/x/ref/lib/testutil/security"
 	_ "v.io/x/ref/profiles/internal/ipc/protocols/tcp"
+	_ "v.io/x/ref/profiles/internal/ipc/protocols/ws"
+	_ "v.io/x/ref/profiles/internal/ipc/protocols/wsh"
 	imanager "v.io/x/ref/profiles/internal/ipc/stream/manager"
 	"v.io/x/ref/profiles/internal/ipc/stream/vc"
 	"v.io/x/ref/profiles/internal/lib/publisher"
+	"v.io/x/ref/profiles/internal/lib/websocket"
 	inaming "v.io/x/ref/profiles/internal/naming"
 	tnaming "v.io/x/ref/profiles/internal/testing/mocks/naming"
 	ivtrace "v.io/x/ref/profiles/internal/vtrace"
@@ -2010,6 +2013,7 @@
 }
 
 func init() {
+	ipc.RegisterUnknownProtocol("wsh", websocket.HybridDial, websocket.HybridListener)
 	security.RegisterCaveatValidator(fakeTimeCaveat, func(_ security.Call, _ security.CallSide, t int64) error {
 		if now := clock.Now(); now > t {
 			return fmt.Errorf("fakeTimeCaveat expired: now=%d > then=%d", now, t)
diff --git a/profiles/internal/ipc/resolve_test.go b/profiles/internal/ipc/resolve_test.go
index 91a1331..95a47db 100644
--- a/profiles/internal/ipc/resolve_test.go
+++ b/profiles/internal/ipc/resolve_test.go
@@ -1,23 +1,63 @@
 package ipc_test
 
 import (
+	"flag"
 	"fmt"
 	"testing"
 	"time"
 
 	"v.io/v23"
+	"v.io/v23/context"
+	"v.io/v23/ipc"
 	"v.io/v23/naming"
 
+	"v.io/x/ref/lib/flags"
 	"v.io/x/ref/lib/modules"
 	"v.io/x/ref/lib/modules/core"
 	"v.io/x/ref/lib/testutil"
 	"v.io/x/ref/lib/testutil/expect"
+	"v.io/x/ref/profiles/fake"
+	"v.io/x/ref/profiles/internal"
 	iipc "v.io/x/ref/profiles/internal/ipc"
+	"v.io/x/ref/profiles/internal/lib/appcycle"
 	inaming "v.io/x/ref/profiles/internal/naming"
+	grt "v.io/x/ref/profiles/internal/rt"
 )
 
+var commonFlags *flags.Flags
+
+func init() {
+	commonFlags = flags.CreateAndRegister(flag.CommandLine, flags.Runtime)
+	if err := internal.ParseFlags(commonFlags); err != nil {
+		panic(err)
+	}
+
+	ac := appcycle.New()
+
+	listenSpec := ipc.ListenSpec{Addrs: ipc.ListenAddrs{{"tcp", "127.0.0.1:0"}}}
+
+	rootctx, rootcancel := context.RootContext()
+	ctx, cancel := context.WithCancel(rootctx)
+	runtime, ctx, sd, err := grt.Init(ctx,
+		ac,
+		nil,
+		&listenSpec,
+		commonFlags.RuntimeFlags(),
+		nil)
+	if err != nil {
+		panic(err)
+	}
+	shutdown := func() {
+		ac.Shutdown()
+		cancel()
+		sd()
+		rootcancel()
+	}
+	fake.InjectRuntime(runtime, ctx, shutdown)
+}
+
 func startMT(t *testing.T, sh *modules.Shell) string {
-	h, err := sh.Start(core.RootMTCommand, nil, "--veyron.tcp.address=127.0.0.1:0")
+	h, err := sh.Start(core.RootMTCommand, nil)
 	if err != nil {
 		t.Fatalf("unexpected error for root mt: %s", err)
 	}
diff --git a/profiles/internal/ipc/client_test.go b/profiles/internal/ipc/test/client_test.go
similarity index 99%
rename from profiles/internal/ipc/client_test.go
rename to profiles/internal/ipc/test/client_test.go
index 01807eb..a5a2156 100644
--- a/profiles/internal/ipc/client_test.go
+++ b/profiles/internal/ipc/test/client_test.go
@@ -1,4 +1,4 @@
-package ipc_test
+package test
 
 import (
 	"fmt"
diff --git a/profiles/internal/ipc/test/doc.go b/profiles/internal/ipc/test/doc.go
new file mode 100644
index 0000000..0580f89
--- /dev/null
+++ b/profiles/internal/ipc/test/doc.go
@@ -0,0 +1,2 @@
+// package test contains test for ipc code that do not rely on unexposed ipc declarations.
+package test
diff --git a/profiles/internal/ipc/glob_test.go b/profiles/internal/ipc/test/glob_test.go
similarity index 96%
rename from profiles/internal/ipc/glob_test.go
rename to profiles/internal/ipc/test/glob_test.go
index 4ea0c1c..bbdabf2 100644
--- a/profiles/internal/ipc/glob_test.go
+++ b/profiles/internal/ipc/test/glob_test.go
@@ -1,4 +1,4 @@
-package ipc_test
+package test
 
 import (
 	"errors"
@@ -21,7 +21,7 @@
 	_ "v.io/x/ref/profiles"
 )
 
-func startServer(ctx *context.T, tree *node) (string, func(), error) {
+func startGlobServer(ctx *context.T, tree *node) (string, func(), error) {
 	server, err := v23.NewServer(ctx)
 	if err != nil {
 		return "", nil, fmt.Errorf("failed to start debug server: %v", err)
@@ -54,9 +54,9 @@
 		tree.find(strings.Split(p, "/"), true)
 	}
 
-	ep, stop, err := startServer(ctx, tree)
+	ep, stop, err := startGlobServer(ctx, tree)
 	if err != nil {
-		t.Fatalf("startServer: %v", err)
+		t.Fatalf("startGlobServer: %v", err)
 	}
 	defer stop()
 
@@ -205,9 +205,9 @@
 	tree := newNode()
 	tree.find([]string{"a", "b"}, true)
 	tree.find([]string{"a", "deny", "x"}, true)
-	ep, stop, err := startServer(ctx, tree)
+	ep, stop, err := startGlobServer(ctx, tree)
 	if err != nil {
-		t.Fatalf("startServer: %v", err)
+		t.Fatalf("startGlobServer: %v", err)
 	}
 	defer stop()
 
@@ -248,7 +248,7 @@
 			// We check the actual error string to make sure that we don't start
 			// leaking new information by accident.
 			expectedStr := fmt.Sprintf(
-				`ipc.test:"%s".__Glob: some matches might have been omitted`,
+				`test.test:"%s".__Glob: some matches might have been omitted`,
 				tc.name)
 			if got := gerr.Error.Error(); got != expectedStr {
 				t.Errorf("unexpected error string: Got %q, expected %q", got, expectedStr)
diff --git a/profiles/internal/ipc/proxy_test.go b/profiles/internal/ipc/test/proxy_test.go
similarity index 99%
rename from profiles/internal/ipc/proxy_test.go
rename to profiles/internal/ipc/test/proxy_test.go
index 6eed70a..95310b0 100644
--- a/profiles/internal/ipc/proxy_test.go
+++ b/profiles/internal/ipc/test/proxy_test.go
@@ -1,4 +1,4 @@
-package ipc_test
+package test
 
 import (
 	"fmt"
diff --git a/profiles/internal/ipc/signature_test.go b/profiles/internal/ipc/test/signature_test.go
similarity index 99%
rename from profiles/internal/ipc/signature_test.go
rename to profiles/internal/ipc/test/signature_test.go
index 5d35fd6..293f2f9 100644
--- a/profiles/internal/ipc/signature_test.go
+++ b/profiles/internal/ipc/test/signature_test.go
@@ -1,4 +1,4 @@
-package ipc_test
+package test
 
 import (
 	"fmt"
diff --git a/profiles/internal/ipc/simple_test.go b/profiles/internal/ipc/test/simple_test.go
similarity index 98%
rename from profiles/internal/ipc/simple_test.go
rename to profiles/internal/ipc/test/simple_test.go
index dff3463..ad75cb7 100644
--- a/profiles/internal/ipc/simple_test.go
+++ b/profiles/internal/ipc/test/simple_test.go
@@ -1,4 +1,4 @@
-package ipc_test
+package test
 
 import (
 	"io"
diff --git a/profiles/internal/ipc/v23_test.go b/profiles/internal/ipc/test/v23_test.go
similarity index 97%
rename from profiles/internal/ipc/v23_test.go
rename to profiles/internal/ipc/test/v23_test.go
index a5def16..3c00214 100644
--- a/profiles/internal/ipc/v23_test.go
+++ b/profiles/internal/ipc/test/v23_test.go
@@ -4,7 +4,7 @@
 
 // This file was auto-generated via go generate.
 // DO NOT UPDATE MANUALLY
-package ipc_test
+package test
 
 import "fmt"
 import "testing"
diff --git a/profiles/internal/ipc/v23_test.go b/profiles/internal/ipc/v23_internal_test.go
similarity index 80%
copy from profiles/internal/ipc/v23_test.go
copy to profiles/internal/ipc/v23_internal_test.go
index a5def16..20b059a 100644
--- a/profiles/internal/ipc/v23_test.go
+++ b/profiles/internal/ipc/v23_internal_test.go
@@ -4,7 +4,7 @@
 
 // This file was auto-generated via go generate.
 // DO NOT UPDATE MANUALLY
-package ipc_test
+package ipc
 
 import "fmt"
 import "testing"
@@ -13,11 +13,6 @@
 import "v.io/x/ref/lib/modules"
 import "v.io/x/ref/lib/testutil"
 
-func init() {
-	modules.RegisterChild("childPing", ``, childPing)
-	modules.RegisterChild("proxyServer", ``, proxyServer)
-}
-
 func TestMain(m *testing.M) {
 	testutil.Init()
 	if modules.IsModulesChildProcess() {
diff --git a/profiles/internal/rt/ipc_test.go b/profiles/internal/rt/ipc_test.go
index 36ec91f..60ff811 100644
--- a/profiles/internal/rt/ipc_test.go
+++ b/profiles/internal/rt/ipc_test.go
@@ -35,7 +35,7 @@
 	return nil
 }
 
-func newCtx(rootCtx *context.T) *context.T {
+func newCtxPrincipal(rootCtx *context.T) *context.T {
 	ctx, err := v23.SetPrincipal(rootCtx, tsecurity.NewPrincipal("defaultBlessings"))
 	if err != nil {
 		panic(err)
@@ -101,7 +101,7 @@
 
 	var (
 		rootAlpha, rootBeta, rootUnrecognized = tsecurity.NewIDProvider("alpha"), tsecurity.NewIDProvider("beta"), tsecurity.NewIDProvider("unrecognized")
-		clientCtx, serverCtx                  = newCtx(ctx), newCtx(ctx)
+		clientCtx, serverCtx                  = newCtxPrincipal(ctx), newCtxPrincipal(ctx)
 		pclient                               = v23.GetPrincipal(clientCtx)
 		pserver                               = v23.GetPrincipal(serverCtx)
 
@@ -285,7 +285,7 @@
 	defer shutdown()
 
 	var (
-		dischargerCtx, clientCtx, serverCtx = newCtx(ctx), newCtx(ctx), newCtx(ctx)
+		dischargerCtx, clientCtx, serverCtx = newCtxPrincipal(ctx), newCtxPrincipal(ctx), newCtxPrincipal(ctx)
 		pdischarger                         = v23.GetPrincipal(dischargerCtx)
 		pclient                             = v23.GetPrincipal(clientCtx)
 		pserver                             = v23.GetPrincipal(serverCtx)
