// Copyright (c) HashiCorp, Inc. // SPDX-License-Identifier: MPL-2.0 package logical import ( "context" "testing" "github.com/go-test/deep" ) var keyList = []string{ "a", "b", "d", "foo", "foo42", "foo/a/b/c", "c/d/e/f/g", } func TestScanView(t *testing.T) { s := prepKeyStorage(t) keys := make([]string, 0) err := ScanView(context.Background(), s, func(path string) { keys = append(keys, path) }) if err != nil { t.Fatal(err) } if diff := deep.Equal(keys, keyList); diff != nil { t.Fatal(diff) } } func TestScanView_CancelContext(t *testing.T) { s := prepKeyStorage(t) ctx, cancelCtx := context.WithCancel(context.Background()) var i int err := ScanView(ctx, s, func(path string) { cancelCtx() i++ }) if err == nil { t.Error("Want context cancel err, got none") } if i != 1 { t.Errorf("Want i==1, got %d", i) } } func TestCollectKeys(t *testing.T) { s := prepKeyStorage(t) keys, err := CollectKeys(context.Background(), s) if err != nil { t.Fatal(err) } if diff := deep.Equal(keys, keyList); diff != nil { t.Fatal(diff) } } func TestCollectKeysPrefix(t *testing.T) { s := prepKeyStorage(t) keys, err := CollectKeysWithPrefix(context.Background(), s, "foo") if err != nil { t.Fatal(err) } exp := []string{ "foo", "foo42", "foo/a/b/c", } if diff := deep.Equal(keys, exp); diff != nil { t.Fatal(diff) } } func prepKeyStorage(t *testing.T) Storage { t.Helper() s := &InmemStorage{} for _, key := range keyList { if err := s.Put(context.Background(), &StorageEntry{ Key: key, Value: nil, SealWrap: false, }); err != nil { t.Fatal(err) } } return s }