mirror of https://github.com/fluxcd/cli-utils.git
223 lines
5.5 KiB
Go
223 lines
5.5 KiB
Go
// Copyright 2020 The Kubernetes Authors.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package object
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
|
)
|
|
|
|
var objMeta1 = ObjMetadata{
|
|
GroupKind: schema.GroupKind{
|
|
Group: "apps",
|
|
Kind: "Deployment",
|
|
},
|
|
Name: "dep",
|
|
Namespace: "default",
|
|
}
|
|
|
|
var objMeta2 = ObjMetadata{
|
|
GroupKind: schema.GroupKind{
|
|
Group: "apps",
|
|
Kind: "StatefulSet",
|
|
},
|
|
Name: "dep",
|
|
Namespace: "default",
|
|
}
|
|
|
|
var objMeta3 = ObjMetadata{
|
|
GroupKind: schema.GroupKind{
|
|
Group: "",
|
|
Kind: "Pod",
|
|
},
|
|
Name: "pod-a",
|
|
Namespace: "default",
|
|
}
|
|
|
|
var objMeta4 = ObjMetadata{
|
|
GroupKind: schema.GroupKind{
|
|
Group: "",
|
|
Kind: "Pod",
|
|
},
|
|
Name: "pod-b",
|
|
Namespace: "default",
|
|
}
|
|
|
|
func TestObjMetadataSetEquals(t *testing.T) {
|
|
testCases := map[string]struct {
|
|
setA ObjMetadataSet
|
|
setB ObjMetadataSet
|
|
isEqual bool
|
|
}{
|
|
"Empty sets results in empty union": {
|
|
setA: ObjMetadataSet{},
|
|
setB: ObjMetadataSet{},
|
|
isEqual: true,
|
|
},
|
|
"Empty second set results in same set": {
|
|
setA: ObjMetadataSet{objMeta1, objMeta3},
|
|
setB: ObjMetadataSet{},
|
|
isEqual: false,
|
|
},
|
|
"Empty initial set results in empty diff": {
|
|
setA: ObjMetadataSet{},
|
|
setB: ObjMetadataSet{objMeta1, objMeta3},
|
|
isEqual: false,
|
|
},
|
|
"Different ordering are equal sets": {
|
|
setA: ObjMetadataSet{objMeta2, objMeta1},
|
|
setB: ObjMetadataSet{objMeta1, objMeta2},
|
|
isEqual: true,
|
|
},
|
|
"One item overlap": {
|
|
setA: ObjMetadataSet{objMeta2, objMeta1},
|
|
setB: ObjMetadataSet{objMeta1, objMeta3},
|
|
isEqual: false,
|
|
},
|
|
"Disjoint sets results in larger set": {
|
|
setA: ObjMetadataSet{objMeta1, objMeta2},
|
|
setB: ObjMetadataSet{objMeta3, objMeta4},
|
|
isEqual: false,
|
|
},
|
|
}
|
|
|
|
for name, tc := range testCases {
|
|
t.Run(name, func(t *testing.T) {
|
|
actual := tc.setA.Equal(tc.setB)
|
|
if tc.isEqual != actual {
|
|
t.Errorf("Equal expected (%t), got (%t)", tc.isEqual, actual)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestObjMetadataSetUnion(t *testing.T) {
|
|
testCases := map[string]struct {
|
|
setA ObjMetadataSet
|
|
setB ObjMetadataSet
|
|
expected ObjMetadataSet
|
|
}{
|
|
"Empty sets results in empty union": {
|
|
setA: ObjMetadataSet{},
|
|
setB: ObjMetadataSet{},
|
|
expected: ObjMetadataSet{},
|
|
},
|
|
"Empty second set results in same set": {
|
|
setA: ObjMetadataSet{objMeta1, objMeta3},
|
|
setB: ObjMetadataSet{},
|
|
expected: ObjMetadataSet{objMeta1, objMeta3},
|
|
},
|
|
"Empty initial set results in empty diff": {
|
|
setA: ObjMetadataSet{},
|
|
setB: ObjMetadataSet{objMeta1, objMeta3},
|
|
expected: ObjMetadataSet{objMeta1, objMeta3},
|
|
},
|
|
"Same sets in different order results in same set": {
|
|
setA: ObjMetadataSet{objMeta2, objMeta1},
|
|
setB: ObjMetadataSet{objMeta1, objMeta2},
|
|
expected: ObjMetadataSet{objMeta1, objMeta2},
|
|
},
|
|
"One item overlap": {
|
|
setA: ObjMetadataSet{objMeta2, objMeta1},
|
|
setB: ObjMetadataSet{objMeta1, objMeta3},
|
|
expected: ObjMetadataSet{objMeta1, objMeta2, objMeta3},
|
|
},
|
|
"Disjoint sets results in larger set": {
|
|
setA: ObjMetadataSet{objMeta1, objMeta2},
|
|
setB: ObjMetadataSet{objMeta3, objMeta4},
|
|
expected: ObjMetadataSet{objMeta1, objMeta2, objMeta3, objMeta4},
|
|
},
|
|
}
|
|
|
|
for name, tc := range testCases {
|
|
t.Run(name, func(t *testing.T) {
|
|
actual := tc.setA.Union(tc.setB)
|
|
if !tc.expected.Equal(actual) {
|
|
t.Errorf("Union expected set (%s), got (%s)", tc.expected, actual)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestObjMetadataSetDiff(t *testing.T) {
|
|
testCases := map[string]struct {
|
|
setA ObjMetadataSet
|
|
setB ObjMetadataSet
|
|
expected ObjMetadataSet
|
|
}{
|
|
"Empty sets results in empty diff": {
|
|
setA: ObjMetadataSet{},
|
|
setB: ObjMetadataSet{},
|
|
expected: ObjMetadataSet{},
|
|
},
|
|
"Empty subtraction set results in same set": {
|
|
setA: ObjMetadataSet{objMeta1, objMeta3},
|
|
setB: ObjMetadataSet{},
|
|
expected: ObjMetadataSet{objMeta1, objMeta3},
|
|
},
|
|
"Empty initial set results in empty diff": {
|
|
setA: ObjMetadataSet{},
|
|
setB: ObjMetadataSet{objMeta1, objMeta3},
|
|
expected: ObjMetadataSet{},
|
|
},
|
|
"Sets equal results in empty diff": {
|
|
setA: ObjMetadataSet{objMeta2, objMeta1},
|
|
setB: ObjMetadataSet{objMeta1, objMeta2},
|
|
expected: ObjMetadataSet{},
|
|
},
|
|
"Basic diff": {
|
|
setA: ObjMetadataSet{objMeta2, objMeta1},
|
|
setB: ObjMetadataSet{objMeta1},
|
|
expected: ObjMetadataSet{objMeta2},
|
|
},
|
|
"Subtract non-elements results in no change": {
|
|
setA: ObjMetadataSet{objMeta1},
|
|
setB: ObjMetadataSet{objMeta3, objMeta4},
|
|
expected: ObjMetadataSet{objMeta1},
|
|
},
|
|
}
|
|
|
|
for name, tc := range testCases {
|
|
t.Run(name, func(t *testing.T) {
|
|
actual := tc.setA.Diff(tc.setB)
|
|
if !tc.expected.Equal(actual) {
|
|
t.Errorf("Diff expected set (%s), got (%s)", tc.expected, actual)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestObjMetadataSetHash(t *testing.T) {
|
|
tests := map[string]struct {
|
|
objs ObjMetadataSet
|
|
expected string
|
|
}{
|
|
"No objects gives valid hash": {
|
|
objs: ObjMetadataSet{},
|
|
expected: "811c9dc5",
|
|
},
|
|
"Single object gives valid hash": {
|
|
objs: ObjMetadataSet{objMeta1},
|
|
expected: "3715cd95",
|
|
},
|
|
"Multiple objects gives valid hash": {
|
|
objs: ObjMetadataSet{objMeta1, objMeta2, objMeta3},
|
|
expected: "d69d726a",
|
|
},
|
|
"Different ordering gives same hash": {
|
|
objs: ObjMetadataSet{objMeta2, objMeta3, objMeta1},
|
|
expected: "d69d726a",
|
|
},
|
|
}
|
|
|
|
for name, tc := range tests {
|
|
t.Run(name, func(t *testing.T) {
|
|
actual := tc.objs.Hash()
|
|
assert.Equal(t, tc.expected, actual)
|
|
})
|
|
}
|
|
}
|