67 lines
1.6 KiB
Go
67 lines
1.6 KiB
Go
package security
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
|
|
"github.com/brianvoe/gofakeit/v6"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestNewSensitiveString(t *testing.T) {
|
|
secretValue := gofakeit.LetterN(10)
|
|
s := NewSensitiveString(secretValue)
|
|
require.Equal(t, secretValue, s.Reveal())
|
|
}
|
|
|
|
func TestStringRedaction(t *testing.T) {
|
|
secretValue := gofakeit.LetterN(10)
|
|
s := NewSensitiveString(secretValue)
|
|
require.Equal(t, RedactionPlaceholder, s.String())
|
|
}
|
|
|
|
func TestEmptyStringRedaction(t *testing.T) {
|
|
s := NewSensitiveString("")
|
|
require.Equal(t, "", s.String())
|
|
}
|
|
|
|
func TestMarshalJSON(t *testing.T) {
|
|
secretValue := gofakeit.LetterN(10)
|
|
s := NewSensitiveString(secretValue)
|
|
data, err := json.Marshal(s)
|
|
require.NoError(t, err)
|
|
require.JSONEq(t, `"`+RedactionPlaceholder+`"`, string(data))
|
|
}
|
|
|
|
func TestMarshalJSONPointer(t *testing.T) {
|
|
secretValue := gofakeit.LetterN(10)
|
|
s := NewSensitiveString(secretValue)
|
|
data, err := json.Marshal(&s)
|
|
require.NoError(t, err)
|
|
require.JSONEq(t, `"`+RedactionPlaceholder+`"`, string(data))
|
|
}
|
|
|
|
func TestUnmarshalJSON(t *testing.T) {
|
|
secretValue := gofakeit.LetterN(10)
|
|
data := `"` + secretValue + `"`
|
|
var s SensitiveString
|
|
err := json.Unmarshal([]byte(data), &s)
|
|
require.NoError(t, err)
|
|
require.Equal(t, secretValue, s.Reveal())
|
|
}
|
|
|
|
func TestUnamarshalJSONError(t *testing.T) {
|
|
// Can't unmarshal a non-string value
|
|
var s SensitiveString
|
|
data := `{"key": "value"}`
|
|
err := json.Unmarshal([]byte(data), &s)
|
|
require.Error(t, err)
|
|
}
|
|
|
|
func TestCopySensitiveString(t *testing.T) {
|
|
secretValue := gofakeit.LetterN(10)
|
|
s := NewSensitiveString(secretValue)
|
|
sCopy := s
|
|
require.Equal(t, secretValue, sCopy.Reveal())
|
|
}
|