1 package kmp
2
3 import (
4 "testing"
5
6 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
7
8 "edge-infra.dev/pkg/k8s/meta/status"
9 "edge-infra.dev/pkg/k8s/runtime/conditions"
10 )
11
12 func TestConditions(t *testing.T) {
13 t.Parallel()
14
15 var (
16 empty = &metav1.Condition{}
17 rdy = conditions.TrueCondition(status.ReadyCondition, "", "")
18 rdySuccess = conditions.TrueCondition(status.ReadyCondition, status.SucceededReason, "")
19 rdyMsg = conditions.TrueCondition(status.ReadyCondition, status.SucceededReason, "we done it")
20 rdyMsg2 = conditions.TrueCondition(status.ReadyCondition, status.SucceededReason, "we done it again")
21 recFalse = conditions.FalseCondition(status.ReconcilingCondition, "Progressing", "")
22 recFalse2 = conditions.FalseCondition(status.ReconcilingCondition, "", "")
23 stalled = conditions.TrueCondition(status.StalledCondition, status.DependencyInvalidReason, "")
24 )
25
26 tcs := map[string]map[string]testCase{
27 "SameCondition": {
28 "nil is same": {
29 SameCondition(nil, nil),
30 true,
31 },
32 "empty is same": {
33 SameCondition(empty, empty),
34 true,
35 },
36 "empty is not same": {
37 SameCondition(empty, rdy),
38 false,
39 },
40 "same": {
41 SameCondition(rdy, rdy),
42 true,
43 },
44 "same with reason": {
45 SameCondition(rdySuccess, rdySuccess),
46 true,
47 },
48 "same with message": {
49 SameCondition(rdyMsg, rdyMsg),
50 true,
51 },
52 "not same with substring message": {
53 SameCondition(rdyMsg, rdyMsg2),
54 false,
55 },
56 "not same with empty message": {
57 SameCondition(rdy, rdyMsg),
58 false,
59 },
60 "not same with different status": {
61 SameCondition(recFalse, recFalse2),
62 false,
63 },
64 "not same with different type": {
65 SameCondition(rdy, stalled),
66 false,
67 },
68 },
69 "SameConditions": {
70 "same": {
71 SameConditions(
72 []metav1.Condition{*stalled, *recFalse},
73 []metav1.Condition{*stalled, *recFalse},
74 ),
75 true,
76 },
77 "empty is same": {
78 SameConditions(
79 []metav1.Condition{},
80 []metav1.Condition{},
81 ),
82 true,
83 },
84 "not same": {
85 SameConditions(
86 []metav1.Condition{*rdyMsg, *recFalse},
87 []metav1.Condition{*rdyMsg2, *recFalse},
88 ),
89 false,
90 },
91 "not same with different lengths": {
92 SameConditions(
93 []metav1.Condition{*rdy, *recFalse},
94 []metav1.Condition{*rdy},
95 ),
96 false,
97 },
98 },
99 "EqualCondition": {
100 "nil is equal": {
101 EqualCondition(nil, nil),
102 true,
103 },
104 "empty is equal": {
105 EqualCondition(empty, empty),
106 true,
107 },
108 "equal": {
109 EqualCondition(rdy, rdy),
110 true,
111 },
112 "equal with reason": {
113 EqualCondition(rdySuccess, rdySuccess),
114 true,
115 },
116 "equal with same message": {
117 EqualCondition(rdyMsg, rdyMsg),
118 true,
119 },
120 "equal with substring message": {
121 EqualCondition(rdyMsg2, rdyMsg),
122 true,
123 },
124 "empty is not equal": {
125 EqualCondition(empty, rdy),
126 false,
127 },
128 "not equal with empty message": {
129 EqualCondition(rdy, rdyMsg),
130 false,
131 },
132 "not equal with different status": {
133 EqualCondition(recFalse, recFalse2),
134 false,
135 },
136 "not equal with different type": {
137 EqualCondition(rdy, stalled),
138 false,
139 },
140 },
141 "EqualConditions": {
142 "empty is equal": {
143 EqualConditions(
144 []metav1.Condition{},
145 []metav1.Condition{},
146 ),
147 true,
148 },
149 "equal": {
150 EqualConditions(
151 []metav1.Condition{*stalled, *recFalse},
152 []metav1.Condition{*stalled, *recFalse},
153 ),
154 true,
155 },
156 "equal with substring message": {
157 EqualConditions(
158 []metav1.Condition{*rdyMsg, *recFalse},
159 []metav1.Condition{*rdyMsg2, *recFalse},
160 ),
161 true,
162 },
163 "not equal": {
164 EqualConditions(
165 []metav1.Condition{*rdyMsg, *recFalse},
166 []metav1.Condition{*rdy, *recFalse},
167 ),
168 false,
169 },
170 "not equal with different lengths": {
171 EqualConditions(
172 []metav1.Condition{*rdy, *recFalse},
173 []metav1.Condition{*rdy},
174 ),
175 false,
176 },
177 },
178 }
179
180 for fn, fnTestCases := range tcs {
181 fnTestCases := fnTestCases
182
183
184 t.Run(fn, func(t *testing.T) {
185 t.Parallel()
186 for name, tc := range fnTestCases {
187 t.Run(name, func(t *testing.T) {
188 run(t, tc)
189 })
190 }
191 })
192 }
193 }
194
View as plain text