// Copyright (c) HashiCorp, Inc. // SPDX-License-Identifier: MPL-2.0 package okta import ( "context" "strings" "testing" "time" "github.com/go-test/deep" log "github.com/hashicorp/go-hclog" "github.com/hashicorp/vault/sdk/helper/logging" "github.com/hashicorp/vault/sdk/logical" ) func TestGroupsList(t *testing.T) { b, storage := getBackend(t) groups := []string{ "%20\\", "foo", "zfoo", "🙂", "foo/nested", "foo/even/more/nested", } for _, group := range groups { req := &logical.Request{ Operation: logical.UpdateOperation, Path: "groups/" + group, Storage: storage, Data: map[string]interface{}{ "policies": []string{group + "_a", group + "_b"}, }, } resp, err := b.HandleRequest(context.Background(), req) if err != nil || (resp != nil && resp.IsError()) { t.Fatalf("err:%s resp:%#v\n", err, resp) } } for _, group := range groups { for _, upper := range []bool{false, true} { groupPath := group if upper { groupPath = strings.ToUpper(group) } req := &logical.Request{ Operation: logical.ReadOperation, Path: "groups/" + groupPath, Storage: storage, } resp, err := b.HandleRequest(context.Background(), req) if err != nil || (resp != nil && resp.IsError()) { t.Fatalf("err:%s resp:%#v\n", err, resp) } if resp == nil { t.Fatal("unexpected nil response") } expected := []string{group + "_a", group + "_b"} if diff := deep.Equal(resp.Data["policies"].([]string), expected); diff != nil { t.Fatal(diff) } } } req := &logical.Request{ Operation: logical.ListOperation, Path: "groups", Storage: storage, } resp, err := b.HandleRequest(context.Background(), req) if err != nil || (resp != nil && resp.IsError()) { t.Fatalf("err:%s resp:%#v\n", err, resp) } if diff := deep.Equal(resp.Data["keys"].([]string), groups); diff != nil { t.Fatal(diff) } } func getBackend(t *testing.T) (logical.Backend, logical.Storage) { defaultLeaseTTLVal := time.Hour * 12 maxLeaseTTLVal := time.Hour * 24 config := &logical.BackendConfig{ Logger: logging.NewVaultLogger(log.Trace), System: &logical.StaticSystemView{ DefaultLeaseTTLVal: defaultLeaseTTLVal, MaxLeaseTTLVal: maxLeaseTTLVal, }, StorageView: &logical.InmemStorage{}, } b, err := Factory(context.Background(), config) if err != nil { t.Fatalf("unable to create backend: %v", err) } return b, config.StorageView }