11package event_handler
22
33import (
4+ "errors"
5+ keptnv2 "github.com/keptn/go-utils/pkg/lib/v0_2_0"
6+ "github.com/sirupsen/logrus"
7+ "github.com/sirupsen/logrus/hooks/test"
8+ "github.com/stretchr/testify/require"
9+ "k8s.io/apimachinery/pkg/runtime"
10+ "k8s.io/client-go/kubernetes/fake"
11+ k8stesting "k8s.io/client-go/testing"
412 "reflect"
513 "testing"
614
@@ -9,29 +17,20 @@ import (
917 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1018
1119 keptn "github.com/keptn/go-utils/pkg/lib"
12- keptncommon "github.com/keptn/go-utils/pkg/lib/keptn "
20+ keptnevents "github.com/keptn/go-utils/pkg/lib"
1321)
1422
1523func TestConfigureMonitoringHandler_getSLISourceConfigMap (t * testing.T ) {
16- type fields struct {
17- Logger * keptncommon.Logger
18- Event cloudevents.Event
19- }
2024 type args struct {
2125 e * keptn.ConfigureMonitoringEventData
2226 }
2327 tests := []struct {
24- name string
25- fields fields
26- args args
27- want * v1.ConfigMap
28+ name string
29+ args args
30+ want * v1.ConfigMap
2831 }{
2932 {
3033 name : "configure for prometheus monitoring" ,
31- fields : fields {
32- Logger : nil ,
33- Event : cloudevents.Event {},
34- },
3534 args : args {
3635 e : & keptn.ConfigureMonitoringEventData {
3736 Type : "prometheus" ,
@@ -51,10 +50,6 @@ func TestConfigureMonitoringHandler_getSLISourceConfigMap(t *testing.T) {
5150 },
5251 {
5352 name : "configure for dynatrace monitoring" ,
54- fields : fields {
55- Logger : nil ,
56- Event : cloudevents.Event {},
57- },
5853 args : args {
5954 e : & keptn.ConfigureMonitoringEventData {
6055 Type : "dynatrace" ,
@@ -78,13 +73,127 @@ func TestConfigureMonitoringHandler_getSLISourceConfigMap(t *testing.T) {
7873
7974 for _ , tt := range tests {
8075 t .Run (tt .name , func (t * testing.T ) {
81- eh := & ConfigureMonitoringHandler {
82- KeptnHandler : nil ,
83- Event : tt .fields .Event ,
84- }
85- if got := eh .getSLISourceConfigMap (tt .args .e ); ! reflect .DeepEqual (got , tt .want ) {
76+ if got := getSLISourceConfigMap (tt .args .e ); ! reflect .DeepEqual (got , tt .want ) {
8677 t .Errorf ("getSLISourceConfigMap() = %v, want %v" , got , tt .want )
8778 }
8879 })
8980 }
9081}
82+
83+ func TestConfigureMonitoringHandler_HandleEvent_ConfigMapDoesntExistYet (t * testing.T ) {
84+ ce := cloudevents .NewEvent ()
85+
86+ configureMonitoringData := & keptnevents.ConfigureMonitoringEventData {
87+ Project : "my-project" ,
88+ Service : "my-service" ,
89+ Type : "my-sli-provider" ,
90+ }
91+ ce .SetType (keptnv2 .GetTriggeredEventType (keptnv2 .ConfigureMonitoringTaskName ))
92+ ce .SetData (cloudevents .ApplicationJSON , configureMonitoringData )
93+
94+ logger , _ := test .NewNullLogger ()
95+
96+ fakeK8sClient := fake .NewSimpleClientset ()
97+
98+ handler , err := NewConfigureMonitoringHandler (ce , logger , WithK8sClient (fakeK8sClient ))
99+ require .Nil (t , err )
100+
101+ err = handler .HandleEvent ()
102+ require .Nil (t , err )
103+ require .Len (t , fakeK8sClient .Actions (), 1 )
104+ require .Equal (t , "create" , fakeK8sClient .Actions ()[0 ].GetVerb ())
105+ }
106+
107+ func TestConfigureMonitoringHandler_HandleEvent_ConfigMapDoesntExistYetAndCreateFails (t * testing.T ) {
108+ ce := cloudevents .NewEvent ()
109+
110+ configureMonitoringData := & keptnevents.ConfigureMonitoringEventData {
111+ Project : "my-project" ,
112+ Service : "my-service" ,
113+ Type : "my-sli-provider" ,
114+ }
115+ ce .SetType (keptnv2 .GetTriggeredEventType (keptnv2 .ConfigureMonitoringTaskName ))
116+ ce .SetData (cloudevents .ApplicationJSON , configureMonitoringData )
117+
118+ logger , hook := test .NewNullLogger ()
119+
120+ fakeK8sClient := fake .NewSimpleClientset ()
121+
122+ fakeK8sClient .PrependReactor ("create" , "configmaps" , func (action k8stesting.Action ) (handled bool , ret runtime.Object , err error ) {
123+ return true , nil , errors .New ("oops" )
124+ })
125+
126+ handler , err := NewConfigureMonitoringHandler (ce , logger , WithK8sClient (fakeK8sClient ))
127+ require .Nil (t , err )
128+
129+ err = handler .HandleEvent ()
130+ require .NotNil (t , err )
131+ require .Len (t , fakeK8sClient .Actions (), 1 )
132+ require .Equal (t , "create" , fakeK8sClient .Actions ()[0 ].GetVerb ())
133+
134+ require .NotNil (t , hook )
135+ require .NotEmpty (t , hook .Entries )
136+ require .Contains (t , hook .LastEntry ().Message , "could not create" )
137+ require .Equal (t , logrus .ErrorLevel , hook .LastEntry ().Level )
138+ }
139+
140+ func TestConfigureMonitoringHandler_HandleEvent_ConfigMapAlreadyExists (t * testing.T ) {
141+ ce := cloudevents .NewEvent ()
142+
143+ configureMonitoringData := & keptnevents.ConfigureMonitoringEventData {
144+ Project : "my-project" ,
145+ Service : "my-service" ,
146+ Type : "my-sli-provider" ,
147+ }
148+ ce .SetType (keptnv2 .GetTriggeredEventType (keptnv2 .ConfigureMonitoringTaskName ))
149+ ce .SetData (cloudevents .ApplicationJSON , configureMonitoringData )
150+
151+ logger , _ := test .NewNullLogger ()
152+
153+ // initialize the fake k8s client with an already existing configmap for the project
154+ fakeK8sClient := fake .NewSimpleClientset (getSLISourceConfigMap (configureMonitoringData ))
155+
156+ handler , err := NewConfigureMonitoringHandler (ce , logger , WithK8sClient (fakeK8sClient ))
157+ require .Nil (t , err )
158+
159+ err = handler .HandleEvent ()
160+ require .Nil (t , err )
161+ require .Len (t , fakeK8sClient .Actions (), 2 )
162+ require .Equal (t , "create" , fakeK8sClient .Actions ()[0 ].GetVerb ())
163+ require .Equal (t , "update" , fakeK8sClient .Actions ()[1 ].GetVerb ())
164+ }
165+
166+ func TestConfigureMonitoringHandler_HandleEvent_ConfigMapAlreadyExistsUpdateFails (t * testing.T ) {
167+ ce := cloudevents .NewEvent ()
168+
169+ configureMonitoringData := & keptnevents.ConfigureMonitoringEventData {
170+ Project : "my-project" ,
171+ Service : "my-service" ,
172+ Type : "my-sli-provider" ,
173+ }
174+ ce .SetType (keptnv2 .GetTriggeredEventType (keptnv2 .ConfigureMonitoringTaskName ))
175+ ce .SetData (cloudevents .ApplicationJSON , configureMonitoringData )
176+
177+ logger , hook := test .NewNullLogger ()
178+
179+ // initialize the fake k8s client with an already existing configmap for the project
180+ fakeK8sClient := fake .NewSimpleClientset (getSLISourceConfigMap (configureMonitoringData ))
181+
182+ fakeK8sClient .PrependReactor ("update" , "configmaps" , func (action k8stesting.Action ) (handled bool , ret runtime.Object , err error ) {
183+ return true , nil , errors .New ("oops" )
184+ })
185+
186+ handler , err := NewConfigureMonitoringHandler (ce , logger , WithK8sClient (fakeK8sClient ))
187+ require .Nil (t , err )
188+
189+ err = handler .HandleEvent ()
190+ require .NotNil (t , err )
191+ require .Len (t , fakeK8sClient .Actions (), 2 )
192+ require .Equal (t , "create" , fakeK8sClient .Actions ()[0 ].GetVerb ())
193+ require .Equal (t , "update" , fakeK8sClient .Actions ()[1 ].GetVerb ())
194+
195+ require .NotNil (t , hook )
196+ require .NotEmpty (t , hook .Entries )
197+ require .Contains (t , hook .LastEntry ().Message , "could not update" )
198+ require .Equal (t , logrus .ErrorLevel , hook .LastEntry ().Level )
199+ }
0 commit comments