package middleware
import (
"testing"
"gotest.tools/v3/assert"
is "gotest.tools/v3/assert/cmp"
)
func TestMaskSecretKeys(t *testing.T) {
tests := []struct {
doc string
input map[string]any
expected map[string]any
}{
{
doc: "secret/config create and update requests",
input: map[string]any{"Data": "foo", "Name": "name", "Labels": map[string]any{}},
expected: map[string]any{"Data": "*****", "Name": "name", "Labels": map[string]any{}},
},
{
doc: "masking other fields (recursively)",
input: map[string]any{
"password": "pass",
"secret": "secret",
"jointoken": "jointoken",
"unlockkey": "unlockkey",
"signingcakey": "signingcakey",
"other": map[string]any{
"password": "pass",
"secret": "secret",
"jointoken": "jointoken",
"unlockkey": "unlockkey",
"signingcakey": "signingcakey",
},
},
expected: map[string]any{
"password": "*****",
"secret": "*****",
"jointoken": "*****",
"unlockkey": "*****",
"signingcakey": "*****",
"other": map[string]any{
"password": "*****",
"secret": "*****",
"jointoken": "*****",
"unlockkey": "*****",
"signingcakey": "*****",
},
},
},
{
doc: "case insensitive field matching",
input: map[string]any{
"PASSWORD": "pass",
"other": map[string]any{
"PASSWORD": "pass",
},
},
expected: map[string]any{
"PASSWORD": "*****",
"other": map[string]any{
"PASSWORD": "*****",
},
},
},
}
for _, testcase := range tests {
t.Run(testcase.doc, func(t *testing.T) {
maskSecretKeys(testcase.input)
assert.Check(t, is.DeepEqual(testcase.expected, testcase.input))
})
}
}