package middleware // import "github.com/docker/docker/api/server/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]interface{} expected map[string]interface{} }{ { doc: "secret/config create and update requests", input: map[string]interface{}{"Data": "foo", "Name": "name", "Labels": map[string]interface{}{}}, expected: map[string]interface{}{"Data": "*****", "Name": "name", "Labels": map[string]interface{}{}}, }, { doc: "masking other fields (recursively)", input: map[string]interface{}{ "password": "pass", "secret": "secret", "jointoken": "jointoken", "unlockkey": "unlockkey", "signingcakey": "signingcakey", "other": map[string]interface{}{ "password": "pass", "secret": "secret", "jointoken": "jointoken", "unlockkey": "unlockkey", "signingcakey": "signingcakey", }, }, expected: map[string]interface{}{ "password": "*****", "secret": "*****", "jointoken": "*****", "unlockkey": "*****", "signingcakey": "*****", "other": map[string]interface{}{ "password": "*****", "secret": "*****", "jointoken": "*****", "unlockkey": "*****", "signingcakey": "*****", }, }, }, { doc: "case insensitive field matching", input: map[string]interface{}{ "PASSWORD": "pass", "other": map[string]interface{}{ "PASSWORD": "pass", }, }, expected: map[string]interface{}{ "PASSWORD": "*****", "other": map[string]interface{}{ "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)) }) } }