@@ -21,11 +21,14 @@ import (
21
21
22
22
appsv1 "k8s.io/api/apps/v1"
23
23
corev1 "k8s.io/api/core/v1"
24
+ eventsv1 "k8s.io/api/events/v1"
24
25
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
25
26
"k8s.io/apimachinery/pkg/watch"
27
+ "k8s.io/client-go/kubernetes"
26
28
"k8s.io/client-go/kubernetes/scheme"
27
29
ref "k8s.io/client-go/tools/reference"
28
30
"sigs.k8s.io/controller-runtime/pkg/controller"
31
+ "sigs.k8s.io/controller-runtime/pkg/envtest"
29
32
"sigs.k8s.io/controller-runtime/pkg/handler"
30
33
"sigs.k8s.io/controller-runtime/pkg/manager"
31
34
"sigs.k8s.io/controller-runtime/pkg/reconcile"
@@ -36,14 +39,14 @@ import (
36
39
)
37
40
38
41
var _ = Describe ("recorder" , func () {
39
- Describe ("recorder" , func () {
42
+ Describe ("deprecated recorder" , func () {
40
43
It ("should publish events" , func (ctx SpecContext ) {
41
44
By ("Creating the Manager" )
42
45
cm , err := manager .New (cfg , manager.Options {})
43
46
Expect (err ).NotTo (HaveOccurred ())
44
47
45
48
By ("Creating the Controller" )
46
- recorder := cm .GetEventRecorderFor ("test-recorder" ) //nolint:staticcheck
49
+ recorder := cm .GetEventRecorderFor ("test-deprecated- recorder" ) //nolint:staticcheck
47
50
instance , err := controller .New ("foo-controller" , cm , controller.Options {
48
51
Reconciler : reconcile .Func (
49
52
func (ctx context.Context , request reconcile.Request ) (reconcile.Result , error ) {
@@ -66,7 +69,7 @@ var _ = Describe("recorder", func() {
66
69
}()
67
70
68
71
deployment := & appsv1.Deployment {
69
- ObjectMeta : metav1.ObjectMeta {Name : "deployment-name" },
72
+ ObjectMeta : metav1.ObjectMeta {Name : "deprecated- deployment-name" },
70
73
Spec : appsv1.DeploymentSpec {
71
74
Selector : & metav1.LabelSelector {
72
75
MatchLabels : map [string ]string {"foo" : "bar" },
@@ -108,4 +111,88 @@ var _ = Describe("recorder", func() {
108
111
Expect (evt .Message ).To (Equal ("test-msg" ))
109
112
})
110
113
})
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
+ })
111
198
})
0 commit comments