syncbase/v23: simple integration test

Change-Id: I70b3c10ea3f4581918ec64063da2e76d238053ad
diff --git a/services/syncbase/server/dispatcher.go b/services/syncbase/server/dispatcher.go
index 17fb042..46f7f7e 100644
--- a/services/syncbase/server/dispatcher.go
+++ b/services/syncbase/server/dispatcher.go
@@ -9,6 +9,7 @@
 
 	wire "v.io/syncbase/v23/services/syncbase"
 	pubutil "v.io/syncbase/v23/syncbase/util"
+	"v.io/syncbase/x/ref/services/syncbase/server/interfaces"
 	"v.io/syncbase/x/ref/services/syncbase/server/nosql"
 	"v.io/syncbase/x/ref/services/syncbase/server/util"
 	"v.io/v23/rpc"
@@ -36,7 +37,7 @@
 	}
 
 	if parts[0] == util.SyncbaseSuffix {
-		return disp.s.sync, nil, nil
+		return interfaces.SyncServer(disp.s.sync), nil, nil
 	}
 
 	// Validate all key atoms up front, so that we can avoid doing so in all our
diff --git a/services/syncbase/server/interfaces/sync.vdl b/services/syncbase/server/interfaces/sync.vdl
index fe64066..082d645 100644
--- a/services/syncbase/server/interfaces/sync.vdl
+++ b/services/syncbase/server/interfaces/sync.vdl
@@ -6,6 +6,7 @@
 
 import (
 	wire "v.io/syncbase/v23/services/syncbase/nosql"
+	"v.io/v23/security/access"
 )
 
 // Sync defines methods for data exchange between Syncbases.
@@ -14,21 +15,21 @@
 	// GetDeltas returns the responder's current generation vector
 	// and all the missing log records when compared to the
 	// initiator's generation vector.
-	GetDeltas() error
+	GetDeltas() error {access.Read}
 
 	// SyncGroup-related methods.
 
 	// PublishSyncGroup is typically invoked on a "central" peer
 	// to publish the SyncGroup.
-	PublishSyncGroup(sg SyncGroup) error
+	PublishSyncGroup(sg SyncGroup) error {access.Write}
 
 	// JoinSyncGroupAtAdmin is invoked by a prospective SyncGroup member's
 	// Syncbase on a SyncGroup admin. It checks whether the requestor is
 	// allowed to join the named SyncGroup, and if so, adds the requestor to
 	// the SyncGroup.
-	JoinSyncGroupAtAdmin(sgName, joinerName string, myInfo wire.SyncGroupMemberInfo) (SyncGroup | error)
+	JoinSyncGroupAtAdmin(sgName, joinerName string, myInfo wire.SyncGroupMemberInfo) (SyncGroup | error) {access.Read}
 
 	// BlobSync methods.
 	// FetchBlob returns the requested blob.
-	FetchBlob() error
+	FetchBlob() error {access.Read}
 }
diff --git a/services/syncbase/server/interfaces/sync.vdl.go b/services/syncbase/server/interfaces/sync.vdl.go
index de16181..594ab0f 100644
--- a/services/syncbase/server/interfaces/sync.vdl.go
+++ b/services/syncbase/server/interfaces/sync.vdl.go
@@ -12,9 +12,11 @@
 	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/v23/rpc"
+	"v.io/v23/vdl"
 
 	// VDL user imports
 	"v.io/syncbase/v23/services/syncbase/nosql"
+	"v.io/v23/security/access"
 )
 
 // SyncClientMethods is the client interface
@@ -169,6 +171,7 @@
 		{
 			Name: "GetDeltas",
 			Doc:  "// GetDeltas returns the responder's current generation vector\n// and all the missing log records when compared to the\n// initiator's generation vector.",
+			Tags: []*vdl.Value{vdl.ValueOf(access.Tag("Read"))},
 		},
 		{
 			Name: "PublishSyncGroup",
@@ -176,6 +179,7 @@
 			InArgs: []rpc.ArgDesc{
 				{"sg", ``}, // SyncGroup
 			},
+			Tags: []*vdl.Value{vdl.ValueOf(access.Tag("Write"))},
 		},
 		{
 			Name: "JoinSyncGroupAtAdmin",
@@ -188,10 +192,12 @@
 			OutArgs: []rpc.ArgDesc{
 				{"", ``}, // SyncGroup
 			},
+			Tags: []*vdl.Value{vdl.ValueOf(access.Tag("Read"))},
 		},
 		{
 			Name: "FetchBlob",
 			Doc:  "// BlobSync methods.\n// FetchBlob returns the requested blob.",
+			Tags: []*vdl.Value{vdl.ValueOf(access.Tag("Read"))},
 		},
 	},
 }
diff --git a/services/syncbase/vsync/syncgroup.go b/services/syncbase/vsync/syncgroup.go
index 3a9a6fb..823aeb1 100644
--- a/services/syncbase/vsync/syncgroup.go
+++ b/services/syncbase/vsync/syncgroup.go
@@ -334,7 +334,7 @@
 func getSGNameEntry(ctx *context.T, st store.StoreReader, name string) (interfaces.GroupId, error) {
 	var gid interfaces.GroupId
 	if err := util.GetObject(st, sgNameKey(name), &gid); err != nil {
-		return gid, verror.New(verror.ErrInternal, ctx, err)
+		return gid, verror.New(verror.ErrNoExist, ctx, err)
 	}
 	return gid, nil
 }
@@ -474,6 +474,7 @@
 	ss := sd.db.App().Service().Sync().(*syncService)
 
 	// Contact a SyncGroup Admin to join the SyncGroup.
+	sg = &interfaces.SyncGroup{}
 	*sg, err = sd.joinSyncGroupAtAdmin(ctx, call, sgName, ss.name, myInfo)
 	if err != nil {
 		return nullSpec, err