@@ -53,6 +53,7 @@ import (
5353	"sigs.k8s.io/controller-runtime/pkg/log/zap" 
5454	"sigs.k8s.io/controller-runtime/pkg/manager" 
5555	metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server" 
56+ 	"sigs.k8s.io/controller-runtime/pkg/predicate" 
5657	"sigs.k8s.io/controller-runtime/pkg/reconcile" 
5758	"sigs.k8s.io/controller-runtime/pkg/source" 
5859	"sigs.k8s.io/yaml" 
@@ -449,18 +450,21 @@ var _ = Describe("Reconciler", func() {
449450
450451				selector  :=  metav1.LabelSelector {MatchLabels : map [string ]string {"foo" : "bar" }}
451452				Expect (WithSelector (selector )(r )).To (Succeed ())
452- 				Expect (r .selectorPredicate ).NotTo (BeNil ())
453- 
454- 				Expect (r .selectorPredicate .Create (event.CreateEvent {Object : objLabeled })).To (BeTrue ())
455- 				Expect (r .selectorPredicate .Update (event.UpdateEvent {ObjectOld : objUnlabeled , ObjectNew : objLabeled })).To (BeTrue ())
456- 				Expect (r .selectorPredicate .Delete (event.DeleteEvent {Object : objLabeled })).To (BeTrue ())
457- 				Expect (r .selectorPredicate .Generic (event.GenericEvent {Object : objLabeled })).To (BeTrue ())
458- 
459- 				Expect (r .selectorPredicate .Create (event.CreateEvent {Object : objUnlabeled })).To (BeFalse ())
460- 				Expect (r .selectorPredicate .Update (event.UpdateEvent {ObjectOld : objLabeled , ObjectNew : objUnlabeled })).To (BeFalse ())
461- 				Expect (r .selectorPredicate .Update (event.UpdateEvent {ObjectOld : objUnlabeled , ObjectNew : objUnlabeled })).To (BeFalse ())
462- 				Expect (r .selectorPredicate .Delete (event.DeleteEvent {Object : objUnlabeled })).To (BeFalse ())
463- 				Expect (r .selectorPredicate .Generic (event.GenericEvent {Object : objUnlabeled })).To (BeFalse ())
453+ 				Expect (r .labelSelector ).NotTo (BeNil ())
454+ 
455+ 				selectorPredicate , err  :=  predicate .LabelSelectorPredicate (r .labelSelector )
456+ 				Expect (err ).ToNot (HaveOccurred ())
457+ 
458+ 				Expect (selectorPredicate .Create (event.CreateEvent {Object : objLabeled })).To (BeTrue ())
459+ 				Expect (selectorPredicate .Update (event.UpdateEvent {ObjectOld : objUnlabeled , ObjectNew : objLabeled })).To (BeTrue ())
460+ 				Expect (selectorPredicate .Delete (event.DeleteEvent {Object : objLabeled })).To (BeTrue ())
461+ 				Expect (selectorPredicate .Generic (event.GenericEvent {Object : objLabeled })).To (BeTrue ())
462+ 
463+ 				Expect (selectorPredicate .Create (event.CreateEvent {Object : objUnlabeled })).To (BeFalse ())
464+ 				Expect (selectorPredicate .Update (event.UpdateEvent {ObjectOld : objLabeled , ObjectNew : objUnlabeled })).To (BeFalse ())
465+ 				Expect (selectorPredicate .Update (event.UpdateEvent {ObjectOld : objUnlabeled , ObjectNew : objUnlabeled })).To (BeFalse ())
466+ 				Expect (selectorPredicate .Delete (event.DeleteEvent {Object : objUnlabeled })).To (BeFalse ())
467+ 				Expect (selectorPredicate .Generic (event.GenericEvent {Object : objUnlabeled })).To (BeFalse ())
464468			})
465469		})
466470	})
@@ -1488,6 +1492,45 @@ var _ = Describe("Reconciler", func() {
14881492								})
14891493							})
14901494						})
1495+ 						When ("label selector set" , func () {
1496+ 							It ("reconcile only matching CR" , func () {
1497+ 								By ("adding selector to the reconciler" , func () {
1498+ 									selectorFoo  :=  metav1.LabelSelector {MatchLabels : map [string ]string {"app" : "foo" }}
1499+ 									Expect (WithSelector (selectorFoo )(r )).To (Succeed ())
1500+ 								})
1501+ 
1502+ 								By ("adding not matching label to the CR" , func () {
1503+ 									Expect (mgr .GetClient ().Get (ctx , objKey , obj )).To (Succeed ())
1504+ 									obj .SetLabels (map [string ]string {"app" : "bar" })
1505+ 									Expect (mgr .GetClient ().Update (ctx , obj )).To (Succeed ())
1506+ 								})
1507+ 
1508+ 								By ("reconciling skipped and no actions for the release" , func () {
1509+ 									res , err  :=  r .Reconcile (ctx , req )
1510+ 									Expect (res ).To (Equal (reconcile.Result {}))
1511+ 									Expect (err ).ToNot (HaveOccurred ())
1512+ 								})
1513+ 
1514+ 								By ("verifying the release has not changed" , func () {
1515+ 									rel , err  :=  ac .Get (obj .GetName ())
1516+ 									Expect (err ).ToNot (HaveOccurred ())
1517+ 									Expect (rel ).NotTo (BeNil ())
1518+ 									Expect (* rel ).To (Equal (* currentRelease ))
1519+ 								})
1520+ 
1521+ 								By ("adding matching label to the CR" , func () {
1522+ 									Expect (mgr .GetClient ().Get (ctx , objKey , obj )).To (Succeed ())
1523+ 									obj .SetLabels (map [string ]string {"app" : "foo" })
1524+ 									Expect (mgr .GetClient ().Update (ctx , obj )).To (Succeed ())
1525+ 								})
1526+ 
1527+ 								By ("successfully reconciling with correct labels" , func () {
1528+ 									res , err  :=  r .Reconcile (ctx , req )
1529+ 									Expect (res ).To (Equal (reconcile.Result {}))
1530+ 									Expect (err ).ToNot (HaveOccurred ())
1531+ 								})
1532+ 							})
1533+ 						})
14911534					})
14921535				})
14931536			})
0 commit comments