@@ -21,11 +21,14 @@ import (
2121
2222 appsv1 "k8s.io/api/apps/v1"
2323 corev1 "k8s.io/api/core/v1"
24+ eventsv1 "k8s.io/api/events/v1"
2425 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2526 "k8s.io/apimachinery/pkg/watch"
27+ "k8s.io/client-go/kubernetes"
2628 "k8s.io/client-go/kubernetes/scheme"
2729 ref "k8s.io/client-go/tools/reference"
2830 "sigs.k8s.io/controller-runtime/pkg/controller"
31+ "sigs.k8s.io/controller-runtime/pkg/envtest"
2932 "sigs.k8s.io/controller-runtime/pkg/handler"
3033 "sigs.k8s.io/controller-runtime/pkg/manager"
3134 "sigs.k8s.io/controller-runtime/pkg/reconcile"
@@ -36,14 +39,14 @@ import (
3639)
3740
3841var _ = Describe ("recorder" , func () {
39- Describe ("recorder" , func () {
42+ Describe ("deprecated recorder" , func () {
4043 It ("should publish events" , func (ctx SpecContext ) {
4144 By ("Creating the Manager" )
4245 cm , err := manager .New (cfg , manager.Options {})
4346 Expect (err ).NotTo (HaveOccurred ())
4447
4548 By ("Creating the Controller" )
46- recorder := cm .GetEventRecorderFor ("test-recorder" ) //nolint:staticcheck
49+ recorder := cm .GetEventRecorderFor ("test-deprecated- recorder" ) //nolint:staticcheck
4750 instance , err := controller .New ("foo-controller" , cm , controller.Options {
4851 Reconciler : reconcile .Func (
4952 func (ctx context.Context , request reconcile.Request ) (reconcile.Result , error ) {
@@ -66,7 +69,7 @@ var _ = Describe("recorder", func() {
6669 }()
6770
6871 deployment := & appsv1.Deployment {
69- ObjectMeta : metav1.ObjectMeta {Name : "deployment-name" },
72+ ObjectMeta : metav1.ObjectMeta {Name : "deprecated- deployment-name" },
7073 Spec : appsv1.DeploymentSpec {
7174 Selector : & metav1.LabelSelector {
7275 MatchLabels : map [string ]string {"foo" : "bar" },
@@ -108,4 +111,88 @@ var _ = Describe("recorder", func() {
108111 Expect (evt .Message ).To (Equal ("test-msg" ))
109112 })
110113 })
114+
115+ Describe ("recorder" , func () {
116+ It ("should publish events" , func (ctx SpecContext ) {
117+ By ("Creating the Manager" )
118+ // this test needs its own env for now to not interfere with the previous one.
119+ // Once the deprecated API is removed this can be removed.
120+ testenv := & envtest.Environment {}
121+
122+ cfg , err := testenv .Start ()
123+ Expect (err ).NotTo (HaveOccurred ())
124+ defer testenv .Stop () //nolint:errcheck
125+
126+ clientset , err := kubernetes .NewForConfig (cfg )
127+ Expect (err ).NotTo (HaveOccurred ())
128+
129+ cm , err := manager .New (cfg , manager.Options {})
130+ Expect (err ).NotTo (HaveOccurred ())
131+
132+ By ("Creating the Controller" )
133+ recorder := cm .GetEventRecorder ("test-recorder" )
134+ instance , err := controller .New ("bar-controller" , cm , controller.Options {
135+ Reconciler : reconcile .Func (
136+ func (ctx context.Context , request reconcile.Request ) (reconcile.Result , error ) {
137+ dp , err := clientset .AppsV1 ().Deployments (request .Namespace ).Get (ctx , request .Name , metav1.GetOptions {})
138+ Expect (err ).NotTo (HaveOccurred ())
139+ recorder .Eventf (dp , nil , corev1 .EventTypeNormal , "test-reason" , "test-action" , "test-msg" )
140+ return reconcile.Result {}, nil
141+ }),
142+ })
143+ Expect (err ).NotTo (HaveOccurred ())
144+
145+ By ("Watching Resources" )
146+ err = instance .Watch (source .Kind (cm .GetCache (), & appsv1.Deployment {}, & handler.TypedEnqueueRequestForObject [* appsv1.Deployment ]{}))
147+ Expect (err ).NotTo (HaveOccurred ())
148+
149+ By ("Starting the Manager" )
150+ go func () {
151+ defer GinkgoRecover ()
152+ Expect (cm .Start (ctx )).NotTo (HaveOccurred ())
153+ }()
154+
155+ deployment := & appsv1.Deployment {
156+ ObjectMeta : metav1.ObjectMeta {Name : "deployment-name" },
157+ Spec : appsv1.DeploymentSpec {
158+ Selector : & metav1.LabelSelector {
159+ MatchLabels : map [string ]string {"foo" : "bar" },
160+ },
161+ Template : corev1.PodTemplateSpec {
162+ ObjectMeta : metav1.ObjectMeta {Labels : map [string ]string {"foo" : "bar" }},
163+ Spec : corev1.PodSpec {
164+ Containers : []corev1.Container {
165+ {
166+ Name : "nginx" ,
167+ Image : "nginx" ,
168+ },
169+ },
170+ },
171+ },
172+ },
173+ }
174+
175+ By ("Invoking Reconciling" )
176+ deployment , err = clientset .AppsV1 ().Deployments ("default" ).Create (ctx , deployment , metav1.CreateOptions {})
177+ Expect (err ).NotTo (HaveOccurred ())
178+
179+ By ("Validate event is published as expected" )
180+ evtWatcher , err := clientset .EventsV1 ().Events ("default" ).Watch (ctx , metav1.ListOptions {})
181+ Expect (err ).NotTo (HaveOccurred ())
182+
183+ resultEvent := <- evtWatcher .ResultChan ()
184+
185+ Expect (resultEvent .Type ).To (Equal (watch .Added ))
186+ evt , isEvent := resultEvent .Object .(* eventsv1.Event )
187+ Expect (isEvent ).To (BeTrue ())
188+
189+ dpRef , err := ref .GetReference (scheme .Scheme , deployment )
190+ Expect (err ).NotTo (HaveOccurred ())
191+
192+ Expect (evt .Regarding ).To (Equal (* dpRef ))
193+ Expect (evt .Type ).To (Equal (corev1 .EventTypeNormal ))
194+ Expect (evt .Reason ).To (Equal ("test-reason" ))
195+ Expect (evt .Note ).To (Equal ("test-msg" ))
196+ })
197+ })
111198})
0 commit comments