| // 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 ( |
| "reflect" |
| "testing" |
| |
| "v.io/v23/security" |
| "v.io/v23/security/access" |
| _ "v.io/x/ref/runtime/factories/generic" |
| sbtu "v.io/x/ref/services/syncbase/testutil" |
| "v.io/x/sensorlog/internal/config" |
| "v.io/x/sensorlog/internal/measure" |
| "v.io/x/sensorlog/internal/sbmodel" |
| "v.io/x/sensorlog/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 := access.Permissions{}. |
| Add(security.BlessingPattern("root:one"), string(access.Resolve), string(access.Read)). |
| Add(security.BlessingPattern("root:two"), string(access.Resolve), string(access.Read), string(access.Write), string(access.Admin)) |
| 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) |
| } |
| } |