1
2
3
4 package object
5
6 import (
7 "testing"
8
9 "sigs.k8s.io/cli-utils/pkg/kstatus/polling/testutil"
10 )
11
12 var resources = map[string]string{
13 "pod1": `
14 apiVersion: v1
15 kind: Pod
16 metadata:
17 name: pod1
18 namespace: default
19 `,
20 "pod1dupe": `
21 apiVersion: v1
22 kind: Pod
23 metadata:
24 name: pod1
25 namespace: default
26 `,
27 "pod2": `
28 apiVersion: v1
29 kind: Pod
30 metadata:
31 name: pod2
32 namespace: default
33 `,
34 "pod3": `
35 apiVersion: v1
36 kind: Pod
37 metadata:
38 name: pod3
39 namespace: default
40 `,
41 "pod4": `
42 apiVersion: v1
43 kind: Pod
44 metadata:
45 name: pod4
46 namespace: default
47 `,
48 }
49
50 func TestUnstructuredSetEquals(t *testing.T) {
51 pod1 := testutil.YamlToUnstructured(t, resources["pod1"])
52 pod1dupe := testutil.YamlToUnstructured(t, resources["pod1dupe"])
53 pod2 := testutil.YamlToUnstructured(t, resources["pod2"])
54 pod3 := testutil.YamlToUnstructured(t, resources["pod3"])
55 pod4 := testutil.YamlToUnstructured(t, resources["pod4"])
56
57 testCases := map[string]struct {
58 setA UnstructuredSet
59 setB UnstructuredSet
60 isEqual bool
61 }{
62 "Empty sets": {
63 setA: UnstructuredSet{},
64 setB: UnstructuredSet{},
65 isEqual: true,
66 },
67 "Empty first set": {
68 setA: UnstructuredSet{},
69 setB: UnstructuredSet{pod1, pod2},
70 isEqual: false,
71 },
72 "Empty second set": {
73 setA: UnstructuredSet{pod1, pod2},
74 setB: UnstructuredSet{},
75 isEqual: false,
76 },
77 "Different order": {
78 setA: UnstructuredSet{pod1, pod2},
79 setB: UnstructuredSet{pod2, pod1},
80 isEqual: true,
81 },
82 "One item overlap": {
83 setA: UnstructuredSet{pod1, pod2},
84 setB: UnstructuredSet{pod2, pod3},
85 isEqual: false,
86 },
87 "Disjoint sets": {
88 setA: UnstructuredSet{pod1, pod2},
89 setB: UnstructuredSet{pod3, pod4},
90 isEqual: false,
91 },
92 "Duplicate pointer": {
93 setA: UnstructuredSet{pod1, pod1},
94 setB: UnstructuredSet{pod1},
95 isEqual: true,
96 },
97 "Duplicate value": {
98 setA: UnstructuredSet{pod1, pod1dupe},
99 setB: UnstructuredSet{pod1},
100 isEqual: true,
101 },
102 "Same value": {
103 setA: UnstructuredSet{pod1},
104 setB: UnstructuredSet{pod1dupe},
105 isEqual: true,
106 },
107 }
108
109 for name, tc := range testCases {
110 t.Run(name, func(t *testing.T) {
111 actual := tc.setA.Equal(tc.setB)
112 if tc.isEqual != actual {
113 t.Errorf("Equal expected (%t), got (%t)", tc.isEqual, actual)
114 }
115 })
116 }
117 }
118
View as plain text