@@ -159,3 +159,126 @@ func TestMergeSpec(t *testing.T) {
159159 })
160160 })
161161}
162+
163+ func TestMergeSpecLabelSelector (t * testing.T ) {
164+ tests := []struct {
165+ name string
166+ original appsv1.StatefulSet
167+ override appsv1.StatefulSet
168+ expected * metav1.LabelSelector
169+ }{
170+ {
171+ name : "Empty label selectors in both sources" ,
172+ original : New (WithName ("original" )),
173+ override : New (WithName ("override" )),
174+ expected : nil ,
175+ },
176+ {
177+ name : "Empty original label selector" ,
178+ original : New (WithName ("original" )),
179+ override : New (WithName ("override" ), WithSelector (& metav1.LabelSelector {
180+ MatchLabels : map [string ]string {
181+ "a" : "10" ,
182+ "b" : "2" ,
183+ },
184+ })),
185+ expected : & metav1.LabelSelector {
186+ MatchLabels : map [string ]string {
187+ "a" : "10" ,
188+ "b" : "2" ,
189+ },
190+ },
191+ },
192+ {
193+ name : "Empty override label selector" ,
194+ original : New (WithName ("original" ), WithSelector (& metav1.LabelSelector {
195+ MatchLabels : map [string ]string {
196+ "a" : "10" ,
197+ "b" : "2" ,
198+ },
199+ })),
200+ override : New (WithName ("override" )),
201+ expected : & metav1.LabelSelector {
202+ MatchLabels : map [string ]string {
203+ "a" : "10" ,
204+ "b" : "2" ,
205+ },
206+ },
207+ },
208+ {
209+ name : "Merge values label selectors from both resources" ,
210+ original : New (WithName ("original" ), WithSelector (& metav1.LabelSelector {
211+ MatchLabels : map [string ]string {
212+ "a" : "1" ,
213+ "b" : "2" ,
214+ "c" : "3" ,
215+ "e" : "4" ,
216+ },
217+ MatchExpressions : []metav1.LabelSelectorRequirement {
218+ {
219+ Key : "key-0" ,
220+ Operator : metav1 .LabelSelectorOpIn ,
221+ Values : []string {"A" , "B" , "C" },
222+ },
223+ {
224+ Key : "key-2" ,
225+ Operator : metav1 .LabelSelectorOpExists ,
226+ Values : []string {"F" , "D" , "E" },
227+ },
228+ },
229+ })),
230+ override : New (WithName ("override" ), WithSelector (& metav1.LabelSelector {
231+ MatchLabels : map [string ]string {
232+ "a" : "10" ,
233+ "b" : "2" ,
234+ "c" : "30" ,
235+ "d" : "40" ,
236+ },
237+ MatchExpressions : []metav1.LabelSelectorRequirement {
238+ {
239+ Key : "key-0" ,
240+ Operator : metav1 .LabelSelectorOpDoesNotExist ,
241+ Values : []string {"Z" },
242+ },
243+ {
244+ Key : "key-1" ,
245+ Operator : metav1 .LabelSelectorOpExists ,
246+ Values : []string {"A" , "B" , "C" , "D" },
247+ },
248+ },
249+ })),
250+ expected : & metav1.LabelSelector {
251+ MatchLabels : map [string ]string {
252+ "a" : "10" ,
253+ "b" : "2" ,
254+ "c" : "30" ,
255+ "d" : "40" ,
256+ "e" : "4" ,
257+ },
258+ MatchExpressions : []metav1.LabelSelectorRequirement {
259+ {
260+ Key : "key-0" ,
261+ Operator : metav1 .LabelSelectorOpDoesNotExist ,
262+ Values : []string {"A" , "B" , "C" , "Z" },
263+ },
264+ {
265+ Key : "key-1" ,
266+ Operator : metav1 .LabelSelectorOpExists ,
267+ Values : []string {"A" , "B" , "C" , "D" },
268+ },
269+ {
270+ Key : "key-2" ,
271+ Operator : metav1 .LabelSelectorOpExists ,
272+ Values : []string {"D" , "E" , "F" },
273+ },
274+ },
275+ },
276+ },
277+ }
278+ for _ , tt := range tests {
279+ t .Run (tt .name , func (t * testing.T ) {
280+ mergedSpec := merge .StatefulSets (tt .original , tt .override )
281+ assert .Equal (t , tt .expected , mergedSpec .Spec .Selector )
282+ })
283+ }
284+ }
0 commit comments