go.mondoo.com/cnquery@v0.0.0-20231005093811-59568235f6ea/providers-sdk/v1/vault/hashivault/hashivault_test.go (about) 1 // Copyright (c) Mondoo, Inc. 2 // SPDX-License-Identifier: BUSL-1.1 3 4 //go:build debugtest 5 // +build debugtest 6 7 package hashivault 8 9 import ( 10 "context" 11 "encoding/json" 12 "testing" 13 14 "github.com/hashicorp/vault/api" 15 "github.com/stretchr/testify/assert" 16 "github.com/stretchr/testify/require" 17 "go.mondoo.com/cnquery/providers-sdk/v1/vault" 18 ) 19 20 func TestHashiVault(t *testing.T) { 21 endpoint := "http://127.0.0.1:8200" 22 token := "secretgoeshere" 23 24 // store secret 25 c, err := client(endpoint, token) 26 require.NoError(t, err) 27 ctx := context.Background() 28 29 key := "test-key" 30 fields := map[string]string{ 31 "key": "value", 32 "key2": "value2", 33 } 34 id, err := set(c, key, fields) 35 require.NoError(t, err) 36 37 // get secret 38 v := New(endpoint, token) 39 newCred, err := v.Get(ctx, id) 40 require.NoError(t, err) 41 42 jsonSecret := make(map[string]string) 43 err = json.Unmarshal(newCred.Data, &jsonSecret) 44 require.NoError(t, err) 45 46 assert.Equal(t, jsonSecret, fields) 47 } 48 49 func client(endpoint string, token string) (*api.Client, error) { 50 c, err := api.NewClient(&api.Config{ 51 Address: endpoint, 52 }) 53 if err != nil { 54 return nil, err 55 } 56 if token != "" { 57 c.SetToken(token) 58 } 59 return c, nil 60 } 61 62 func set(c *api.Client, key string, fields map[string]string) (*vault.SecretID, error) { 63 err := validKey(key) 64 if err != nil { 65 return nil, err 66 } 67 68 // convert creds fields to vault struct 69 // TODO: we could store labels as part of the content fields, may not look as nice 70 // see https://github.com/hashicorp/vault/issues/7905 71 data := map[string]interface{}{} 72 for k, v := range fields { 73 data[k] = v 74 } 75 76 // encapsulate data into v2 secrets api 77 secretData := map[string]interface{}{ 78 "data": data, 79 } 80 81 // store secret 82 _, err = c.Logical().Write(vaultSecretId(key), secretData) 83 if err != nil { 84 return nil, err 85 } 86 87 return &vault.SecretID{Key: key}, nil 88 }