blob: 0c0f4f34145f989f89cc9d2947621c680399f2f5 [file] [log] [blame]
// 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 sbtree_test
import (
"testing"
"v.io/v23/syncbase"
_ "v.io/x/ref/runtime/factories/generic"
"v.io/x/ref/services/debug/debug/browseserver/sbtree"
tu "v.io/x/ref/services/syncbase/testutil"
"v.io/x/ref/test"
)
func TestWithNoServer(t *testing.T) {
if testing.Short() {
t.Skip("skipping test, because has long timeout.")
}
ctx, cleanup := test.V23Init()
defer cleanup()
_, err := sbtree.AssembleSyncbaseTree(ctx, "no-such-server")
if err == nil || err == sbtree.NoSyncbaseError {
t.Errorf("Got %v, want not nil and not %v", err, sbtree.NoSyncbaseError)
}
}
func TestWithEmptyService(t *testing.T) {
ctx, serverName, cleanup := tu.SetupOrDie(nil)
defer cleanup()
got, err := sbtree.AssembleSyncbaseTree(ctx, serverName)
if err != nil {
t.Fatal(err)
}
if got.Service.FullName() != serverName {
t.Errorf("got %q, want %q", got.Service.FullName(), serverName)
}
if len(got.Dbs) != 0 {
t.Errorf("want no databases, got %v", got.Dbs)
}
}
func TestWithMultipleEmptyDbs(t *testing.T) {
ctx, serverName, cleanup := tu.SetupOrDie(nil)
defer cleanup()
var (
service = syncbase.NewService(serverName)
dbNames = []string{"db_a", "db_b", "db_c"}
)
for _, dbName := range dbNames {
tu.CreateDatabase(t, ctx, service, dbName)
}
got, err := sbtree.AssembleSyncbaseTree(ctx, serverName)
if err != nil {
t.Fatal(err)
}
if len(got.Dbs) != 3 {
t.Fatalf("want 3 databases, got %v", got.Dbs)
}
for i, db := range got.Dbs {
if db.Database.Id().Name != dbNames[i] {
t.Errorf("got %q, want %q", db.Database.Id().Name, dbNames[i])
}
if len(db.Collections) != 0 {
t.Errorf("want no collections, got %v", db.Collections)
}
if len(db.Syncgroups) != 0 {
t.Errorf("want no syncgroups, got %v", db.Syncgroups)
}
}
}
func TestWithMultipleCollections(t *testing.T) {
ctx, serverName, cleanup := tu.SetupOrDie(nil)
defer cleanup()
var (
service = syncbase.NewService(serverName)
collNames = []string{"coll_a", "coll_b", "coll_c"}
database = tu.CreateDatabase(t, ctx, service, "the_db")
)
for _, collName := range collNames {
tu.CreateCollection(t, ctx, database, collName)
}
got, err := sbtree.AssembleSyncbaseTree(ctx, serverName)
if err != nil {
t.Fatal(err)
}
if len(got.Dbs) != 1 {
t.Fatalf("want 1 database, got %v", got.Dbs)
}
for i, coll := range got.Dbs[0].Collections {
if coll.Id().Name != collNames[i] {
t.Errorf("got %q, want %q", coll.Id().Name, collNames[i])
}
exists, err := coll.Exists(ctx)
if err != nil {
t.Fatal(err)
}
if !exists {
t.Error("want collection to exist, but it does not")
}
}
}
func TestWithMultipleSyncgroups(t *testing.T) {
ctx, serverName, cleanup := tu.SetupOrDie(nil)
defer cleanup()
var (
service = syncbase.NewService(serverName)
sgNames = []string{"syncgroup_a", "syncgroup_b", "syncgroup_c"}
sgDescriptions = []string{"AAA", "BBB", "CCC"}
database = tu.CreateDatabase(t, ctx, service, "the_db")
coll = tu.CreateCollection(t, ctx, database, "the_collection")
)
for i, sgName := range sgNames {
tu.CreateSyncgroup(t, ctx, database, coll, sgName, sgDescriptions[i])
}
got, err := sbtree.AssembleSyncbaseTree(ctx, serverName)
if err != nil {
t.Fatal(err)
}
if len(got.Dbs) != 1 {
t.Fatalf("want 1 database, got %v", got.Dbs)
}
for i, sg := range got.Dbs[0].Syncgroups {
if sg.Syncgroup.Id().Name != sgNames[i] {
t.Errorf("got %q, want %q", sg.Syncgroup.Id().Name, sgNames[i])
}
if sg.Spec.Description != sgDescriptions[i] {
t.Errorf("got %q, want %q", sg.Spec.Description, sgDescriptions[i])
}
if sg.Spec.Collections[0].Name != "the_collection" {
t.Errorf(`got %q, want "the_collection"`,
sg.Spec.Collections[0].Name)
}
}
}