blob: 2b25d991203c05c98f7215b18fd57ae265792f6d [file] [log] [blame]
// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0
package custommetadata
import (
"strconv"
"strings"
"testing"
)
func TestValidate(t *testing.T) {
cases := []struct {
name string
input map[string]string
shouldPass bool
}{
{
"valid",
map[string]string{
"foo": "abc",
"bar": "def",
"baz": "ghi",
},
true,
},
{
"too_many_keys",
func() map[string]string {
cm := make(map[string]string)
for i := 0; i < maxKeyLength+1; i++ {
s := strconv.Itoa(i)
cm[s] = s
}
return cm
}(),
false,
},
{
"key_too_long",
map[string]string{
strings.Repeat("a", maxKeyLength+1): "abc",
},
false,
},
{
"value_too_long",
map[string]string{
"foo": strings.Repeat("a", maxValueLength+1),
},
false,
},
{
"unprintable_key",
map[string]string{
"unprint\u200bable": "abc",
},
false,
},
{
"unprintable_value",
map[string]string{
"foo": "unprint\u200bable",
},
false,
},
}
for _, tc := range cases {
tc := tc
t.Run(tc.name, func(t *testing.T) {
t.Parallel()
err := Validate(tc.input)
if tc.shouldPass && err != nil {
t.Fatalf("expected validation to pass, input: %#v, err: %v", tc.input, err)
}
if !tc.shouldPass && err == nil {
t.Fatalf("expected validation to fail, input: %#v, err: %v", tc.input, err)
}
})
}
}