open-nomad/helper/opaque_test.go

89 lines
1.8 KiB
Go

package helper
import (
"testing"
"github.com/hashicorp/nomad/ci"
"github.com/shoenig/test/must"
)
func Test_OpaqueMapsEqual(t *testing.T) {
ci.Parallel(t)
type public struct {
F int
}
type private struct {
g int
}
type mix struct {
F int
g int
}
cases := []struct {
name string
a, b map[string]any
exp bool
}{{
name: "both nil",
a: nil,
b: nil,
exp: true,
}, {
name: "empty and nil",
a: nil,
b: make(map[string]any),
exp: true,
}, {
name: "same strings",
a: map[string]any{"a": "A"},
b: map[string]any{"a": "A"},
exp: true,
}, {
name: "same public struct",
a: map[string]any{"a": &public{F: 42}},
b: map[string]any{"a": &public{F: 42}},
exp: true,
}, {
name: "different public struct",
a: map[string]any{"a": &public{F: 42}},
b: map[string]any{"a": &public{F: 10}},
exp: false,
}, {
name: "different private struct",
a: map[string]any{"a": &private{g: 42}},
b: map[string]any{"a": &private{g: 10}},
exp: true, // private fields not compared
}, {
name: "mix same public different private",
a: map[string]any{"a": &mix{F: 42, g: 1}},
b: map[string]any{"a": &mix{F: 42, g: 2}},
exp: true, // private fields not compared
}, {
name: "mix different public same private",
a: map[string]any{"a": &mix{F: 42, g: 1}},
b: map[string]any{"a": &mix{F: 10, g: 1}},
exp: false,
}, {
name: "nil vs empty slice values",
a: map[string]any{"key": []string(nil)},
b: map[string]any{"key": make([]string, 0)},
exp: true,
}, {
name: "nil vs empty map values",
a: map[string]any{"key": map[int]int(nil)},
b: map[string]any{"key": make(map[int]int, 0)},
exp: true,
}}
for _, tc := range cases {
t.Run(tc.name, func(t *testing.T) {
result := OpaqueMapsEqual(tc.a, tc.b)
must.Eq(t, tc.exp, result)
})
}
}