blob: d447fa6948330dcbd3adff9c901b026e7b7c25e4 [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 measure_test
import (
"bytes"
"reflect"
"testing"
"v.io/v23/security/access"
_ "v.io/x/ref/runtime/factories/generic"
sbtu "v.io/x/ref/services/syncbase/testutil"
"v.io/x/sensorlog_lite/internal/config"
"v.io/x/sensorlog_lite/internal/measure"
"v.io/x/sensorlog_lite/internal/sbmodel"
"v.io/x/sensorlog_lite/internal/sbutil"
)
func TestCreateSyncgroup(t *testing.T) {
_, ctxMeasured, sbName, _, cleanup := sbtu.SetupOrDieCustom("one", "one:sb", nil)
defer cleanup()
// Open app/db (create both) as measured.
db, err := sbutil.CreateOrOpenDB(ctxMeasured, sbName, sbmodel.MeasuredTables)
if err != nil {
t.Fatalf("CreateOrOpenDB should have succeeded, got error: %v", err)
}
devId := "measured1"
admin := "root:two"
syncMts := []string{}
// Creating the syncgroup should succeed.
if err := measure.InitSyncgroup(ctxMeasured, db, devId, admin, sbName, syncMts); err != nil {
t.Fatalf("InitSyncgroup failed: %v", err)
}
sgName := config.SyncgroupName(sbName, devId)
if sgs, err := db.GetSyncgroupNames(ctxMeasured); err != nil {
t.Fatalf("GetSyncgroupNames failed: %v", err)
} else if got, want := sgs, []string{sgName}; !reflect.DeepEqual(got, want) {
t.Errorf("GetSyncgroupNames got: %v, want: %v", got, want)
}
// Creating the syncgroup should be idempotent.
if err := measure.InitSyncgroup(ctxMeasured, db, devId, admin, sbName, syncMts); err != nil {
t.Errorf("InitSyncgroup should be idempotent, retry failed: %v", err)
}
// measured should have dropped privileges on <StreamDefTable>/<devId>.
expectPerms, err := access.ReadPermissions(bytes.NewBufferString(`{
"Admin":{"In":["root:two"]},
"Read":{"In":["root:two", "root:one"]},
"Write":{"In":["root:two"]},
"Debug":{"In":["root:two"]},
"Resolve":{"In":["root:two", "root:one"]}
}`))
if err != nil {
t.Fatalf("ReadPermissions should have succeeded, got error: %v", err)
}
sgDataTable := db.Table(sbmodel.KStreamDef{}.Table())
if gotPerms, err := sgDataTable.GetPrefixPermissions(ctxMeasured, devId); err != nil {
t.Errorf("GetPrefixPermissions failed: %v", err)
} else if got, want := gotPerms[0].Perms.Normalize(), expectPerms.Normalize(); !reflect.DeepEqual(got, want) {
t.Errorf("Unexpected permissions on streamdef/<devId>: got %v, want %v", got, want)
}
}