sensorlog: Port tests to v23shell.

Change-Id: I3bccbebf0e4314ef2e11ed853719200a92591f92
diff --git a/go/src/v.io/x/sensorlog/internal/client/device_v23_test.go b/go/src/v.io/x/sensorlog/internal/client/device_v23_test.go
index 8db81a6..dfb98fa 100644
--- a/go/src/v.io/x/sensorlog/internal/client/device_v23_test.go
+++ b/go/src/v.io/x/sensorlog/internal/client/device_v23_test.go
@@ -2,28 +2,21 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// TODO(ivanpi): Port to v23test and reenable.
-// +build ignore
-
 package client_test
 
 import (
-	"bytes"
 	"fmt"
+	"os"
 	"reflect"
 	"sort"
-	"syscall"
+	"testing"
 	"time"
 
 	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/v23/naming"
-	"v.io/x/ref/lib/signals"
-	_ "v.io/x/ref/runtime/factories/generic"
-	sbtu "v.io/x/ref/services/syncbase/testutil"
-	"v.io/x/ref/test/modules"
-	"v.io/x/ref/test/v23tests"
-	slltu "v.io/x/sensorlog/internal/client/testutil"
+	"v.io/x/ref/lib/v23test"
+	sltu "v.io/x/sensorlog/internal/client/testutil"
 	"v.io/x/sensorlog/internal/measure"
 	"v.io/x/sensorlog/internal/sbmodel"
 	"v.io/x/sensorlog/internal/sbutil"
@@ -32,29 +25,30 @@
 
 const (
 	dummyScript   = "echo 42;"
-	dummyInterval = "1s"
+	dummyInterval = 1 * time.Second
 )
 
-func V23TestDeviceAddAndStreamCreate(t *v23tests.T) {
+func TestV23DeviceAddAndStreamCreate(t *testing.T) {
+	v23test.SkipUnlessRunningIntegrationTests(t)
+	sh := v23test.NewShell(t, v23test.Opts{})
+	defer sh.Cleanup()
 	// Start a 'global' mounttable.
-	globalMT, globalMTHandle := startAdditionalMT(t, "--v23.tcp.address=127.0.0.1:0")
+	globalMT, globalMTShutdown := startAdditionalMT(sh, "--v23.tcp.address=127.0.0.1:0")
 	// Mount the local mounttable in the global one.
 	localMT := naming.Join(globalMT, "localmt")
-	v23tests.RunRootMT(t, "--v23.tcp.address=127.0.0.1:0", "--name="+localMT)
+	sh.StartRootMountTable("--name=" + localMT)
 
 	clientSb := "sb/client"
-	clientCreds, _ := t.Shell().NewChildCredentials("client")
-	clientSbCreds, _ := t.Shell().NewChildCredentials("client:sb")
-	cleanup := sbtu.StartSyncbased(t, clientSbCreds, clientSb, "",
-		`{"Read": {"In":["root:client"]}, "Write": {"In":["root:client"]}, "Admin": {"In":["root:client"]}, "Resolve": {"In":["..."]}}`)
-	defer cleanup()
+	clientCtx := sh.ForkContext("u:client")
+	clientSbCreds := sh.ForkCredentials("u:client:sb")
+	sh.StartSyncbase(clientSbCreds, clientSb, "",
+		`{"Read": {"In":["root:u:client"]}, "Write": {"In":["root:u:client"]}, "Admin": {"In":["root:u:client"]}, "Resolve": {"In":["..."]}}`)
 
 	measuredSb := "sb/measured"
-	measuredCreds, _ := t.Shell().NewChildCredentials("measured")
-	measuredSbCreds, _ := t.Shell().NewChildCredentials("measured:sb")
-	cleanup = sbtu.StartSyncbased(t, measuredSbCreds, measuredSb, "",
-		`{"Read": {"In":["root:measured"]}, "Write": {"In":["root:measured"]}, "Admin": {"In":["root:measured"]}, "Resolve": {"In":["..."]}}`)
-	defer cleanup()
+	measuredCtx := sh.ForkContext("u:measured")
+	measuredSbCreds := sh.ForkCredentials("u:measured:sb")
+	sh.StartSyncbase(measuredSbCreds, measuredSb, "",
+		`{"Read": {"In":["root:u:measured"]}, "Write": {"In":["root:u:measured"]}, "Admin": {"In":["root:u:measured"]}, "Resolve": {"In":["..."]}}`)
 
 	time.Sleep(1 * time.Second)
 
@@ -62,65 +56,62 @@
 	// of measured Syncbase for publishing.
 	devId := "measured1"
 	publishSb := naming.Join(localMT, measuredSb)
-	sbtu.RunClient(t, measuredCreds, runInitSyncgroup, measuredSb, devId, "root:client", publishSb, globalMT)
+	if err := initSyncgroup(measuredCtx, measuredSb, devId, "root:u:client", publishSb, globalMT); err != nil {
+		t.Fatalf("failed initializing syncgroup for device %s: %v", devId, err)
+	}
 
 	// Add measuring device to client, joining its syncgroup.
-	sbtu.RunClient(t, clientCreds, slltu.RunAddDevice, clientSb, devId, publishSb)
+	if err := sltu.AddTestDevice(clientCtx, clientSb, devId, publishSb); err != nil {
+		t.Errorf("failed adding device %s: %v", devId, err)
+	}
 
 	// Allow time for syncgroup metadata sync.
 	time.Sleep(3 * time.Second)
 
 	// After syncgroup has been joined, sync can use local mounttable. Kill the
 	// global one.
-	if err := globalMTHandle.Kill(syscall.SIGINT); err != nil {
-		t.Fatalf("failed to kill global mounttable: %v", err)
-	}
-	if err := globalMTHandle.Shutdown(nil, nil); err != nil {
-		t.Fatalf("failed to shutdown global mounttable: %v", err)
-	}
+	globalMTShutdown(os.Interrupt)
 
 	streamIds := []string{"str1", "str2", "str3"}
 
 	// Create stream before starting measured watcher.
-	sbtu.RunClient(t, clientCreds, slltu.RunCreateStream, clientSb, devId, streamIds[0], dummyScript, dummyInterval)
-
-	time.Sleep(1 * time.Second)
-
-	measureWatcher, err := t.Shell().StartWithOpts(
-		t.Shell().DefaultStartOpts().WithCustomCredentials(measuredCreds).WithSessions(t, 60*time.Second), nil,
-		runWatchForStreams, append([]string{measuredSb, devId}, streamIds...)...)
-	if err != nil {
-		t.Fatalf("failed to start measureWatcher: %v", err)
+	if err := sltu.CreateTestStream(clientCtx, clientSb, devId, streamIds[0], dummyScript, dummyInterval); err != nil {
+		t.Errorf("failed creating stream %s: %v", streamIds[0], err)
 	}
 
+	time.Sleep(1 * time.Second)
+
+	stopWatch := watchForStreams(measuredCtx, measuredSb, devId)
+
 	// Create more streams.
-	sbtu.RunClient(t, clientCreds, slltu.RunCreateStream, clientSb, devId, streamIds[1], dummyScript, dummyInterval)
+	if err := sltu.CreateTestStream(clientCtx, clientSb, devId, streamIds[1], dummyScript, dummyInterval); err != nil {
+		t.Errorf("failed creating stream %s: %v", streamIds[1], err)
+	}
 
 	time.Sleep(1 * time.Second)
 
-	sbtu.RunClient(t, clientCreds, slltu.RunCreateStream, clientSb, devId, streamIds[2], dummyScript, dummyInterval)
+	if err := sltu.CreateTestStream(clientCtx, clientSb, devId, streamIds[2], dummyScript, dummyInterval); err != nil {
+		t.Errorf("failed creating stream %s: %v", streamIds[2], err)
+	}
 
 	// Allow time for sync.
 	time.Sleep(3 * time.Second)
 
-	// Kill will stop the watcher and cause it to verify that seen streams match
-	// expectations.
-	if err := syscall.Kill(measureWatcher.Pid(), syscall.SIGINT); err != nil {
-		t.Fatalf("failed to kill measureWatcher: %v", err)
+	// Stop the watcher.
+	gotStreams, err := stopWatch()
+	if err != nil {
+		t.Fatalf("measureWatcher failed: %v", err)
 	}
-	var stdout, stderr bytes.Buffer
-	if err := measureWatcher.Shutdown(&stdout, &stderr); err != nil {
-		t.Errorf("failed to shutdown measureWatcher: %v")
+
+	// Compare streams seen by watcher to expectations.
+	sort.Strings(gotStreams)
+	sort.Strings(streamIds)
+	if got, want := gotStreams, streamIds; !reflect.DeepEqual(got, want) {
+		t.Errorf("watch returned streams do not match: got %v, want %v", got, want)
 	}
-	t.Logf("measureWatcher stdout:\n%s", stdout.String())
-	t.Logf("measureWatcher stderr:\n%s", stderr.String())
 }
 
-var runInitSyncgroup = modules.Register(func(env *modules.Env, args ...string) error {
-	sbService, devId, admin, publishSb, sgMT := args[0], args[1], args[2], args[3], args[4]
-
-	ctx, cleanup := v23.Init()
-	defer cleanup()
+func initSyncgroup(ctx *context.T, sbService, devId, admin, publishSb, sgMT string) error {
 	db, err := sbutil.CreateOrOpenDB(ctx, sbService, sbmodel.MeasuredTables)
 	if err != nil {
 		return fmt.Errorf("failed initializing measured database: %v", err)
@@ -135,22 +126,19 @@
 	}
 
 	return nil
-}, "runInitSyncgroup")
+}
 
-var runWatchForStreams = modules.Register(func(env *modules.Env, args ...string) error {
-	sbService, devId, expectStreams := args[0], args[1], args[2:]
-
-	ctx, cleanup := v23.Init()
-	defer cleanup()
-
+func watchForStreams(ctx *context.T, sbService, devId string) (stop func() (gotStreams []string, err error)) {
 	db, err := sbutil.CreateOrOpenDB(ctx, sbService, sbmodel.MeasuredTables)
 	if err != nil {
-		return fmt.Errorf("failed opening measured database: %v", err)
+		return func() ([]string, error) {
+			return nil, fmt.Errorf("failed opening measured database: %v", err)
+		}
 	}
 
-	gotStreams := make([]string, 0, len(expectStreams))
+	var gotStreams []string
 
-	ctx, stop := context.WithCancel(ctx)
+	ctx, cancel := context.WithCancel(ctx)
 	wait := util.AsyncRun(func() error {
 		return measure.WatchForStreams(ctx, db, devId, func(key *sbmodel.KStreamDef, _ *sbmodel.VStreamDef) error {
 			if got, want := key.DevId, devId; got != want {
@@ -160,29 +148,21 @@
 			return nil
 		})
 	}, func(err error) {
-		stop()
+		cancel()
 	})
 
-	// Wait for kill, then stop watcher.
-	<-signals.ShutdownOnSignals(nil)
-	stop()
-
-	if err := wait(); err != nil {
-		return err
+	return func() ([]string, error) {
+		cancel()
+		if err := wait(); err != nil {
+			return nil, err
+		}
+		return gotStreams, nil
 	}
+}
 
-	// Compare streams seen by watcher to expectations.
-	sort.Strings(gotStreams)
-	sort.Strings(expectStreams)
-	if got, want := gotStreams, expectStreams; !reflect.DeepEqual(got, want) {
-		return fmt.Errorf("watch returned streams do not match: got %v, want %v", got, want)
-	}
-
-	return nil
-}, "runWatchForStreams")
-
-func startAdditionalMT(t *v23tests.T, args ...string) (string, *v23tests.Invocation) {
-	bin := t.BuildV23Pkg("v.io/x/ref/services/mounttable/mounttabled")
-	inv := bin.Start(args...)
-	return inv.ExpectVar("NAME"), inv
+func startAdditionalMT(sh *v23test.Shell, args ...string) (string, func(sig os.Signal)) {
+	mounttabledPath := sh.BuildGoPkg("v.io/x/ref/services/mounttable/mounttabled")
+	inv := sh.Cmd(mounttabledPath, args...)
+	inv.Start()
+	return inv.S.ExpectVar("NAME"), inv.Shutdown
 }
diff --git a/go/src/v.io/x/sensorlog/internal/client/measured_v23_test.go b/go/src/v.io/x/sensorlog/internal/client/measured_v23_test.go
index c1ae430..3fc0410 100644
--- a/go/src/v.io/x/sensorlog/internal/client/measured_v23_test.go
+++ b/go/src/v.io/x/sensorlog/internal/client/measured_v23_test.go
@@ -2,117 +2,108 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// TODO(ivanpi): Port to v23test and reenable.
-// +build ignore
-
 package client_test
 
 import (
-	"bytes"
 	"fmt"
-	"strconv"
-	"syscall"
+	"os"
+	"testing"
 	"time"
 
 	"v.io/v23"
+	"v.io/v23/context"
 	"v.io/v23/naming"
-	"v.io/x/ref"
-	_ "v.io/x/ref/runtime/factories/generic"
-	sbtu "v.io/x/ref/services/syncbase/testutil"
-	"v.io/x/ref/test/modules"
-	"v.io/x/ref/test/v23tests"
+	"v.io/x/ref/lib/v23test"
 	"v.io/x/sensorlog/internal/client"
-	slltu "v.io/x/sensorlog/internal/client/testutil"
+	sltu "v.io/x/sensorlog/internal/client/testutil"
 	"v.io/x/sensorlog/internal/sbmodel"
 	"v.io/x/sensorlog/internal/sbutil"
 )
 
-func V23TestStreamConfigAndList(t *v23tests.T) {
-	v23tests.RunRootMT(t, "--v23.tcp.address=127.0.0.1:0")
-	mtName, _ := t.Shell().GetVar(ref.EnvNamespacePrefix)
+func TestV23StreamConfigAndList(t *testing.T) {
+	v23test.SkipUnlessRunningIntegrationTests(t)
+	sh := v23test.NewShell(t, v23test.Opts{})
+	defer sh.Cleanup()
+	sh.StartRootMountTable()
+	mtName := v23.GetNamespace(sh.Ctx).Roots()[0]
 
 	clientSb := "sb/client"
-	clientCreds, _ := t.Shell().NewChildCredentials("client")
-	clientSbCreds, _ := t.Shell().NewChildCredentials("client:sb")
-	cleanup := sbtu.StartSyncbased(t, clientSbCreds, clientSb, "",
-		`{"Read": {"In":["root:client"]}, "Write": {"In":["root:client"]}, "Admin": {"In":["root:client"]}, "Resolve": {"In":["..."]}}`)
-	defer cleanup()
+	clientCtx := sh.ForkContext("u:client")
+	clientSbCreds := sh.ForkCredentials("u:client:sb")
+	sh.StartSyncbase(clientSbCreds, clientSb, "",
+		`{"Read": {"In":["root:u:client"]}, "Write": {"In":["root:u:client"]}, "Admin": {"In":["root:u:client"]}, "Resolve": {"In":["..."]}}`)
 
 	measuredSb := "sb/measured"
-	measuredCreds, _ := t.Shell().NewChildCredentials("measured")
-	measuredSbCreds, _ := t.Shell().NewChildCredentials("measured:sb")
-	cleanup = sbtu.StartSyncbased(t, measuredSbCreds, measuredSb, "",
-		`{"Read": {"In":["root:measured"]}, "Write": {"In":["root:measured"]}, "Admin": {"In":["root:measured"]}, "Resolve": {"In":["..."]}}`)
-	defer cleanup()
+	measuredCreds := sh.ForkCredentials("u:measured")
+	measuredSbCreds := sh.ForkCredentials("u:measured:sb")
+	sh.StartSyncbase(measuredSbCreds, measuredSb, "",
+		`{"Read": {"In":["root:u:measured"]}, "Write": {"In":["root:u:measured"]}, "Admin": {"In":["root:u:measured"]}, "Resolve": {"In":["..."]}}`)
 
 	time.Sleep(1 * time.Second)
 
 	// Start measured.
-	measuredBin := t.BuildV23Pkg("v.io/x/sensorlog/measured")
+	measuredPath := sh.BuildGoPkg("v.io/x/sensorlog/measured")
 	devId := "measured1"
 	publishSb := naming.Join(mtName, measuredSb)
-	measuredOpts := measuredBin.StartOpts().WithCustomCredentials(measuredCreds).WithSessions(t, 180*time.Second)
-	measured := measuredBin.WithStartOpts(measuredOpts).Start(
-		"-alsologtostderr", "-service="+measuredSb, "-devid="+devId, "-admin=root:client",
-		"-publish-sb="+publishSb)
+	measured := sh.Cmd(measuredPath, "-alsologtostderr", "-service="+measuredSb,
+		"-devid="+devId, "-admin=root:u:client", "-publish-sb="+publishSb)
+	measured = measured.WithCredentials(measuredCreds)
+	measured.PropagateOutput = true
+	measured.Start()
 
 	time.Sleep(3 * time.Second)
 
 	// Add measuring device to client, joining its syncgroup.
-	sbtu.RunClient(t, clientCreds, slltu.RunAddDevice, clientSb, devId, publishSb)
+	if err := sltu.AddTestDevice(clientCtx, clientSb, devId, publishSb); err != nil {
+		t.Errorf("failed adding device %s: %v", devId, err)
+	}
 
 	// Create streams.
-	streamId1, result1, interval1 := "str1", "42", "2s"
-	sbtu.RunClient(t, clientCreds, slltu.RunCreateStream, clientSb, devId,
-		streamId1, fmt.Sprintf("echo %s;", result1), interval1, "")
+	streamId1, result1, interval1 := "str1", 42.0, 2*time.Second
+	if err := sltu.CreateTestStream(clientCtx, clientSb, devId,
+		streamId1, fmt.Sprintf("echo %f;", result1), interval1); err != nil {
+		t.Errorf("failed creating stream %s: %v", streamId1, err)
+	}
 
 	time.Sleep(1 * time.Second)
 
-	streamId2, result2, interval2 := "str2", "47", "1s"
-	sbtu.RunClient(t, clientCreds, slltu.RunCreateStream, clientSb, devId,
-		streamId2, fmt.Sprintf("echo %s;", result2), interval2, "")
+	streamId2, result2, interval2 := "str2", 47.0, 1*time.Second
+	if err := sltu.CreateTestStream(clientCtx, clientSb, devId,
+		streamId2, fmt.Sprintf("echo %f;", result2), interval2); err != nil {
+		t.Errorf("failed creating stream %s: %v", streamId2, err)
+	}
 
 	// streamId has another streamId as prefix to verify ListDataStreams prefix
 	// handling.
-	streamId3, result3, interval3 := "str12", "3.14159", "0.5s"
-	sbtu.RunClient(t, clientCreds, slltu.RunCreateStream, clientSb, devId,
-		streamId3, fmt.Sprintf("echo %s;", result3), interval3, "")
+	streamId3, result3, interval3 := "str12", 3.14159, 500*time.Millisecond
+	if err := sltu.CreateTestStream(clientCtx, clientSb, devId,
+		streamId3, fmt.Sprintf("echo %f;", result3), interval3); err != nil {
+		t.Errorf("failed creating stream %s: %v", streamId3, err)
+	}
 
 	// Allow time for sync and at least 3 measurements.
 	time.Sleep(10 * time.Second)
 
-	// Kill will gracefully stop measured.
-	if err := syscall.Kill(measured.Pid(), syscall.SIGINT); err != nil {
-		t.Fatalf("failed to kill measured: %v", err)
-	}
-	var stdout, stderr bytes.Buffer
-	if err := measured.Shutdown(&stdout, &stderr); err != nil {
-		t.Errorf("failed to shutdown measured: %v")
-	}
-	t.Logf("measured stdout:\n%s", stdout.String())
-	t.Logf("measured stderr:\n%s", stderr.String())
+	// SIGINT will gracefully stop measured.
+	measured.Shutdown(os.Interrupt)
 
 	// Check that both streams have at least 3 measurements synced back to
 	// client device Syncbase.
-	sbtu.RunClient(t, clientCreds, runListStreamData, clientSb, devId, streamId1, result1)
-	sbtu.RunClient(t, clientCreds, runListStreamData, clientSb, devId, streamId2, result2)
-	sbtu.RunClient(t, clientCreds, runListStreamData, clientSb, devId, streamId3, result3)
+	if err := listStreamData(clientCtx, clientSb, devId, streamId1, result1); err != nil {
+		t.Errorf("failed listing stream %s data: %v", streamId1, err)
+	}
+	if err := listStreamData(clientCtx, clientSb, devId, streamId2, result2); err != nil {
+		t.Errorf("failed listing stream %s data: %v", streamId2, err)
+	}
+	if err := listStreamData(clientCtx, clientSb, devId, streamId3, result3); err != nil {
+		t.Errorf("failed listing stream %s data: %v", streamId3, err)
+	}
 }
 
-var runListStreamData = modules.Register(func(env *modules.Env, args ...string) error {
-	sbService, devId, streamId, expectValStr := args[0], args[1], args[2], args[3]
-
-	expectVal, err := strconv.ParseFloat(expectValStr, 64)
+func listStreamData(ctx *context.T, sbService, devId, streamId string, expectVal float64) error {
+	db, err := sbutil.CreateOrOpenDB(ctx, sbService, sbmodel.MasterTables)
 	if err != nil {
-		return err
-	}
-
-	ctx, cleanup := v23.Init()
-	defer cleanup()
-
-	db, err := sbutil.CreateOrOpenDB(ctx, sbService, sbmodel.MeasuredTables)
-	if err != nil {
-		return fmt.Errorf("failed opening measured database: %v", err)
+		return fmt.Errorf("failed opening master database: %v", err)
 	}
 
 	count := 0
@@ -143,4 +134,4 @@
 	}
 
 	return nil
-}, "runListStreamData")
+}
diff --git a/go/src/v.io/x/sensorlog/internal/client/testutil/testutil.go b/go/src/v.io/x/sensorlog/internal/client/testutil/testutil.go
index b31a6c5..de36070 100644
--- a/go/src/v.io/x/sensorlog/internal/client/testutil/testutil.go
+++ b/go/src/v.io/x/sensorlog/internal/client/testutil/testutil.go
@@ -9,23 +9,17 @@
 	"fmt"
 	"time"
 
-	"v.io/v23"
+	"v.io/v23/context"
 	"v.io/v23/verror"
-	"v.io/x/ref/test/modules"
 	"v.io/x/sensorlog/internal/client"
 	"v.io/x/sensorlog/internal/sbmodel"
 	"v.io/x/sensorlog/internal/sbutil"
 )
 
-// Required parameters: sbService, devId, publishSb
-var RunAddDevice = modules.Register(func(env *modules.Env, args ...string) error {
-	sbService, devId, publishSb := args[0], args[1], args[2]
-
-	ctx, cleanup := v23.Init()
-	defer cleanup()
+func AddTestDevice(ctx *context.T, sbService, devId, publishSb string) error {
 	db, err := sbutil.CreateOrOpenDB(ctx, sbService, sbmodel.MasterTables)
 	if err != nil {
-		return fmt.Errorf("failed initializing master database: %v", err)
+		return fmt.Errorf("failed opening master database: %v", err)
 	}
 
 	if _, err := client.AddDevice(ctx, db, devId, publishSb, ""); err != nil {
@@ -36,19 +30,9 @@
 	}
 
 	return nil
-}, "runAddDevice")
+}
 
-// Required parameters: sbService, devId, streamId, script, interval
-var RunCreateStream = modules.Register(func(env *modules.Env, args ...string) error {
-	sbService, devId, streamId, script, intervalStr := args[0], args[1], args[2], args[3], args[4]
-
-	interval, err := time.ParseDuration(intervalStr)
-	if err != nil {
-		return err
-	}
-
-	ctx, cleanup := v23.Init()
-	defer cleanup()
+func CreateTestStream(ctx *context.T, sbService, devId, streamId, script string, interval time.Duration) error {
 	db, err := sbutil.CreateOrOpenDB(ctx, sbService, sbmodel.MasterTables)
 	if err != nil {
 		return fmt.Errorf("failed opening master database: %v", err)
@@ -68,4 +52,4 @@
 	}
 
 	return nil
-}, "runCreateStream")
+}
diff --git a/go/src/v.io/x/sensorlog/internal/client/v23_main_test.go b/go/src/v.io/x/sensorlog/internal/client/v23_main_test.go
new file mode 100644
index 0000000..7a84ee5
--- /dev/null
+++ b/go/src/v.io/x/sensorlog/internal/client/v23_main_test.go
@@ -0,0 +1,17 @@
+// Copyright 2015 The Vanadium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package client_test
+
+import (
+	"os"
+	"testing"
+
+	"v.io/x/ref/lib/v23test"
+	_ "v.io/x/ref/runtime/factories/generic"
+)
+
+func TestMain(m *testing.M) {
+	os.Exit(v23test.Run(m.Run))
+}
diff --git a/go/src/v.io/x/sensorlog/internal/client/v23_test.go b/go/src/v.io/x/sensorlog/internal/client/v23_test.go
deleted file mode 100644
index de4a73b..0000000
--- a/go/src/v.io/x/sensorlog/internal/client/v23_test.go
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2015 The Vanadium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// TODO(ivanpi): Port to v23test and reenable.
-// +build ignore
-
-package client_test
-
-import (
-	"os"
-	"testing"
-
-	"v.io/x/ref/test/modules"
-	"v.io/x/ref/test/v23tests"
-)
-
-func TestMain(m *testing.M) {
-	modules.DispatchAndExitIfChild()
-	cleanup := v23tests.UseSharedBinDir()
-	r := m.Run()
-	cleanup()
-	os.Exit(r)
-}
-
-func TestV23DeviceAddAndStreamCreate(t *testing.T) {
-	v23tests.RunTest(t, V23TestDeviceAddAndStreamCreate)
-}
-
-func TestV23StreamConfigAndList(t *testing.T) {
-	v23tests.RunTest(t, V23TestStreamConfigAndList)
-}