You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
boundary/internal/credential/vault/secret_test.go

136 lines
3.7 KiB

// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: BUSL-1.1
package vault
import (
"encoding/json"
"fmt"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestTokenSecret_String(t *testing.T) {
t.Parallel()
t.Run("redacted", func(t *testing.T) {
assert := assert.New(t)
const want = redactedTokenSecret
tk := TokenSecret("special secret")
assert.Equalf(want, tk.String(), "TokenSecret.String() = %v, want %v", tk.String(), want)
// Verify stringer is called
s := fmt.Sprintf("%s", tk)
assert.Equalf(want, s, "TokenSecret.String() = %v, want %v", s, want)
})
}
func TestTokenSecret_GoString(t *testing.T) {
t.Parallel()
t.Run("redacted", func(t *testing.T) {
assert := assert.New(t)
const want = redactedTokenSecret
tk := TokenSecret("magic secret")
assert.Equalf(want, tk.GoString(), "TokenSecret.GoString() = %v, want %v", tk.GoString(), want)
// Verify gostringer is called
s := fmt.Sprintf("%#v", tk)
assert.Equalf(want, s, "TokenSecret.GoString() = %v, want %v", s, want)
})
}
func TestTokenSecret_MarshalJSON(t *testing.T) {
t.Parallel()
t.Run("redacted", func(t *testing.T) {
assert, require := assert.New(t), require.New(t)
want, err := json.Marshal([]byte(redactedTokenSecret))
require.NoError(err)
tk := TokenSecret("normal secret")
got, err := tk.MarshalJSON()
require.NoError(err)
assert.Equalf(want, got, "TokenSecret.MarshalJSON() = %s, want %s", got, want)
})
t.Run("within-struct", func(t *testing.T) {
assert, require := assert.New(t), require.New(t)
want := fmt.Sprintf(`%s`, redactedTokenSecret)
type secretContainer struct {
S TokenSecret
B []byte
}
testB := []byte("my secret")
secret := secretContainer{S: testB, B: testB}
m, err := json.Marshal(secret)
require.NoError(err)
var sec secretContainer
err = json.Unmarshal(m, &sec)
require.NoError(err)
assert.Equal(TokenSecret(want), sec.S)
assert.Equal(testB, sec.B)
})
}
func TestKeySecret_String(t *testing.T) {
t.Parallel()
t.Run("redacted", func(t *testing.T) {
assert := assert.New(t)
const want = redactedKeySecret
tk := KeySecret("our secret")
assert.Equalf(want, tk.String(), "KeySecret.String() = %v, want %v", tk.String(), want)
// Verify stringer is called
s := fmt.Sprintf("%s", tk)
assert.Equalf(want, s, "KeySecret.String() = %v, want %v", s, want)
})
}
func TestKeySecret_GoString(t *testing.T) {
t.Parallel()
t.Run("redacted", func(t *testing.T) {
assert := assert.New(t)
const want = redactedKeySecret
tk := KeySecret("private secret")
assert.Equalf(want, tk.GoString(), "KeySecret.GoString() = %v, want %v", tk.GoString(), want)
// Verify gostringer is called
s := fmt.Sprintf("%#v", tk)
assert.Equalf(want, s, "KeySecret.GoString() = %v, want %v", s, want)
})
}
func TestKeySecret_MarshalJSON(t *testing.T) {
t.Parallel()
t.Run("redacted", func(t *testing.T) {
assert, require := assert.New(t), require.New(t)
want, err := json.Marshal([]byte(redactedKeySecret))
require.NoError(err)
tk := KeySecret("hidden secret")
got, err := tk.MarshalJSON()
require.NoError(err)
assert.Equalf(want, got, "KeySecret.MarshalJSON() = %s, want %s", got, want)
})
t.Run("within-struct", func(t *testing.T) {
assert, require := assert.New(t), require.New(t)
want := fmt.Sprintf(`%s`, redactedKeySecret)
type secretContainer struct {
S KeySecret
B []byte
}
testB := []byte("secure secret")
secret := secretContainer{S: testB, B: testB}
m, err := json.Marshal(secret)
require.NoError(err)
var sec secretContainer
err = json.Unmarshal(m, &sec)
require.NoError(err)
assert.Equal(KeySecret(want), sec.S)
assert.Equal(testB, sec.B)
})
}