kubelatte-ce

Форк
2
Форк от sbertech/kubelatte-ce
/
sideeffect_op_recreate_test.go 
915 строк · 39.4 Кб
1
package sideeffect
2

3
import (
4
	"context"
5
	"errors"
6
	"github.com/stretchr/testify/mock"
7
	"gitverse.ru/synapse/kubelatte/pkg/api/v1alpha1"
8
	"gitverse.ru/synapse/kubelatte/pkg/kubeapi"
9
	"gitverse.ru/synapse/kubelatte/pkg/observability/logger/lib"
10
	"gitverse.ru/synapse/kubelatte/pkg/operator/controllers/clientset"
11
	mocks2 "gitverse.ru/synapse/kubelatte/pkg/operator/controllers/clientset/mocks"
12
	semodles "gitverse.ru/synapse/kubelatte/pkg/sideeffect"
13
	"gitverse.ru/synapse/kubelatte/pkg/storage"
14
	"gitverse.ru/synapse/kubelatte/pkg/util/env"
15
	"go.uber.org/zap"
16
	errors2 "k8s.io/apimachinery/pkg/api/errors"
17
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
18
	"k8s.io/apimachinery/pkg/runtime/schema"
19
	"k8s.io/client-go/kubernetes"
20
	"k8s.io/client-go/rest"
21
	"os"
22
	"sync"
23
	"testing"
24
	"time"
25
)
26

27
func TestMain(m *testing.M) {
28
	kubeapi.GetKBLTClient = func() (*clientset.V1Alpha1Client, error) {
29
		return nil, nil
30
	}
31
	kubeapi.GetResourceMeta = func(client *kubernetes.Clientset, kind string, version string) *kubeapi.ResourceMeta {
32
		return &kubeapi.ResourceMeta{Name: "sth"}
33
	}
34
	kubeapi.GetResource = func(ctx context.Context, resourceMeta *kubeapi.ResourceMeta, resourceName string, namespace string) ([]byte, error) {
35
		return []byte("{\"apiVersion\":\"v1\",\"kind\":\"Pod\",\"metadata\":{\"name\":\"pod-se-plus-mutation\",\"resourceVersion\": \"verse1\",\"uid\": \"31ce6848-bee4-40fb-be85-7f796dd11685\",\"namespace\":\"kate-kblt-dev\",\"labels\":{\"sidecar.istio.io/inject\":\"false\",\"side-effect-plus-mutation\":\"enabled\"},\"annotations\":{\"kblt.annot-ns/merge\":\"enabled\", \"kblt.sideEffect.resource/tag\": \"5\"}},\"spec\":{\"hostNetwork\":false,\"serviceAccount\":\"default\",\"serviceAccountName\":\"default\",\"restartPolicy\":\"Never\",\"automountServiceAccountToken\":false,\"securityContext\":{\"runAsNonRoot\":true,\"seccompProfile\":{\"type\":\"RuntimeDefault\"}},\"containers\":[{\"image\":\"dzo.sw.sbc.space/sbt_dev/ci90000221_fedmesh_dev/federation-demo@sha256:548cc416011c86bb1e2c6d06289aab0771a0f749c044656deaac5fc86d891fea\",\"name\":\"test\",\"imagePullPolicy\":\"Always\",\"securityContext\":{\"allowPrivilegeEscalation\":false,\"capabilities\":{\"drop\":[\"ALL\"]},\"runAsNonRoot\":true,\"privileged\":false}}]}}"), nil
36
	}
37
	kubeapi.GetClient = func() *kubernetes.Clientset {
38
		return nil
39
	}
40
	kubeapi.InvalidateCacheAndTryGetResourceMeta = func(client *kubernetes.Clientset, kind string, version string) *kubeapi.ResourceMeta {
41
		return nil
42
	}
43
	kubeapi.CheckResourceMeta = func(client *kubernetes.Clientset, kind string, version string) *kubeapi.ResourceMeta {
44
		return nil
45
	}
46
	kubeapi.GetRawResourceFromKubeApi = func(ctx context.Context, client rest.Interface, resourceMeta *kubeapi.ResourceMeta, resourceName string, namespaceName string) ([]byte, error) {
47
		return []byte{}, nil
48
	}
49

50
	kubeapi.CreateResourceInKubeApi = func(ctx context.Context, client rest.Interface, resourceMeta *kubeapi.ResourceMeta, jsBody []byte, namespaceName string) ([]byte, error, error) {
51
		return nil, nil, nil
52
	}
53
	lib.ZapLogger = zap.NewNop()
54
	code := m.Run()
55
	os.Exit(code)
56
}
57

58
// hashes should be different only if one of ControlFields have diffs (ann, labels, spec or data)
59
func TestController_getObjControlFieldsHash_SimilarHashes(t *testing.T) {
60
	type args struct {
61
		obj map[string]any
62
	}
63
	env.PrefixSideEffectRecreate = "kblt/"
64
	tests := []struct {
65
		name    string
66
		args1   args
67
		args2   args
68
		args3   args
69
		want    string
70
		wantErr bool
71
	}{
72
		{
73
			name: "equal hashes annots + labels",
74
			args1: args{obj: map[string]any{
75
				"metadata": map[string]any{
76
					"name":        "some_name1",
77
					"namespace":   "incl_ns1",
78
					"annotations": map[string]any{*prefix + ".annotNS/annotTr": "Enabled"},
79
					"labels": map[string]any{
80
						*prefix + ".key1": "val1",
81
						*prefix + ".key2": "val2",
82
						*prefix + ".key3": "val3"},
83
				},
84
			}},
85
			args2: args{obj: map[string]any{
86
				"metadata": map[string]any{
87
					"name":        "some_name2",
88
					"field":       "incl_ns2",
89
					"annotations": map[string]any{*prefix + ".annotNS/annotTr": "Enabled"},
90
					"labels": map[string]any{
91
						"key_without_pref333333": "val",
92
						*prefix + ".key1":        "val1",
93
						*prefix + ".key2":        "val2",
94
						*prefix + ".key3":        "val3"}},
95
			}},
96
			args3: args{obj: map[string]any{
97
				"metadata": map[string]any{
98
					"name":        "some_name3",
99
					"namespace":   "incl_ns3",
100
					"annotations": map[string]any{*prefix + ".annotNS/annotTr": "Enabled"},
101
					"labels": map[string]any{
102
						"key_without_pref1": "val",
103
						"key_without_pref2": "val",
104
						"key_without_pref3": "val",
105
						"key_without_pref4": "val",
106
						"key_without_pref5": "val",
107
						"key_without_pref6": "val",
108
						*prefix + ".key1":   "val1",
109
						"key_without_pref7": "val",
110
						"key_without_pref8": "val",
111
						*prefix + ".key2":   "val2",
112
						"key_without_pref9": "val",
113
						*prefix + ".key3":   "val3"}},
114
			}},
115
			want:    "2708313859359176490",
116
			wantErr: false,
117
		},
118
		{
119
			name: "equal hashes spec + data",
120
			args1: args{obj: map[string]any{
121
				"metadata": map[string]any{
122
					"name":      "some_name1",
123
					"namespace": "incl_ns1",
124
					"spec":      map[string]any{"img": "image]"},
125
					"data":      map[string]any{"key1": "val1", "key2": "val2", "key3": "val3"},
126
				},
127
			}},
128
			args2: args{obj: map[string]any{
129
				"metadata": map[string]any{
130
					"name":  "some_name2",
131
					"field": "incl_ns2",
132
					"spec":  map[string]any{"img": "image]"},
133
					"data":  map[string]any{"key1": "val1", "key2": "val2", "key3": "val3"},
134
				},
135
			}},
136
			args3: args{obj: map[string]any{
137
				"metadata": map[string]any{
138
					"name":      "some_name3",
139
					"namespace": "incl_ns3",
140
					"spec":      map[string]any{"img": "image]"},
141
					"data":      map[string]any{"key1": "val1", "key2": "val2", "key3": "val3"},
142
				},
143
			}},
144
			want:    "10562426954055529816",
145
			wantErr: false,
146
		},
147
		{
148
			name: "equal hashes annots + labels + spec + data",
149
			args1: args{obj: map[string]any{
150
				"metadata": map[string]any{
151
					"name":        "some_name1",
152
					"namespace":   "incl_ns1",
153
					"spec":        map[string]any{"img": "image]"},
154
					"data":        map[string]any{"key1": "val1", "key2": "val2", "key3": "val3"},
155
					"annotations": map[string]any{*prefix + ".annotNS/annotTr": "Enabled"},
156
					"labels": map[string]any{
157
						"key_without_pref1": "val",
158
						"key_without_pref2": "val",
159
						"key_without_pref3": "val",
160
						"key_without_pref4": "val",
161
						"key_without_pref5": "val",
162
						"key_without_pref6": "val",
163
						*prefix + ".key1":   "val1",
164
						"key_without_pref7": "val",
165
						"key_without_pref8": "val",
166
						*prefix + ".key2":   "val2",
167
						"key_without_pref9": "val",
168
						*prefix + ".key3":   "val3"}},
169
			},
170
			},
171
			args2: args{obj: map[string]any{
172
				"metadata": map[string]any{
173
					"name":        "some_name2",
174
					"field":       "incl_ns2",
175
					"spec":        map[string]any{"img": "image]"},
176
					"data":        map[string]any{"key1": "val1", "key2": "val2", "key3": "val3"},
177
					"annotations": map[string]any{*prefix + ".annotNS/annotTr": "Enabled"},
178
					"labels": map[string]any{
179
						"key_without_pref333333": "val",
180
						*prefix + ".key2":        "val2",
181
						*prefix + ".key1":        "val1",
182
						*prefix + ".key3":        "val3"},
183
				},
184
			}},
185
			args3: args{obj: map[string]any{
186
				"metadata": map[string]any{
187
					"name":        "some_name3",
188
					"namespace":   "incl_ns3",
189
					"spec":        map[string]any{"img": "image]"},
190
					"data":        map[string]any{"key1": "val1", "key2": "val2", "key3": "val3"},
191
					"annotations": map[string]any{*prefix + ".annotNS/annotTr": "Enabled"},
192
					"labels": map[string]any{
193
						*prefix + ".key1": "val1",
194
						*prefix + ".key2": "val2",
195
						*prefix + ".key3": "val3"},
196
				},
197
			}},
198
			want:    "2708313859359176490",
199
			wantErr: false,
200
		},
201
	}
202
	for _, tt := range tests {
203
		t.Run(tt.name, func(t *testing.T) {
204
			c := &Executor{}
205

206
			got1, err1 := c.getObjControlFieldsHash(context.Background(), tt.args1.obj)
207
			got2, err2 := c.getObjControlFieldsHash(context.Background(), tt.args2.obj)
208
			got3, err3 := c.getObjControlFieldsHash(context.Background(), tt.args3.obj)
209

210
			if (err1 != nil) != tt.wantErr || (err2 != nil) != tt.wantErr || (err3 != nil) != tt.wantErr {
211
				t.Errorf("getObjControlFieldsHash() errors: %v, %v, %v, wantErr %v", err1.Error(), err2.Error(), err3.Error(), tt.wantErr)
212
				return
213
			}
214

215
			if got1 != tt.want {
216
				t.Errorf("getObjControlFieldsHash() got = %v, want %v", got1, tt.want)
217
			}
218
			if got2 != tt.want {
219
				t.Errorf("getObjControlFieldsHash() got = %v, want %v", got2, tt.want)
220
			}
221
			if got3 != tt.want {
222
				t.Errorf("getObjControlFieldsHash() got = %v, want %v", got3, tt.want)
223
			}
224

225
			if got1 != got2 || got2 != got3 {
226
				t.Errorf("results are not equal to each ther: \n1: %v, \n2: %v, \n3: %v", got1, got2, got3)
227
			}
228
		})
229
	}
230
}
231

232
func TestController_getObjControlFieldsHash_DiffHashes(t *testing.T) {
233
	type args struct {
234
		obj map[string]any
235
	}
236
	env.PrefixSideEffectRecreate = "kblt/"
237
	tests := []struct {
238
		name    string
239
		args1   args
240
		args2   args
241
		want    string
242
		wantErr bool
243
	}{
244
		{
245
			name: "equal hashes annots + labels",
246
			args1: args{obj: map[string]any{
247
				"metadata": map[string]any{
248
					"name":        "some_name1",
249
					"namespace":   "incl_ns1",
250
					"annotations": map[string]any{*prefix + ".annotNS/annotTr": "Enabled"},
251
					"labels": map[string]any{
252
						*prefix + ".key1": "val1",
253
						*prefix + ".key2": "val2",
254
						*prefix + ".key3": "val3"},
255
				},
256
			}},
257
			args2: args{obj: map[string]any{
258
				"metadata": map[string]any{
259
					"name":        "some_name2",
260
					"field":       "incl_ns2",
261
					"annotations": map[string]any{*prefix + ".annotNS/annotTr": "Enabled"},
262
					"labels": map[string]any{
263
						"key_without_pref333333": "val",
264
						*prefix + ".key1":        "val1",
265
						*prefix + ".key2":        "val2",
266
						*prefix + ".key3":        "val3"}},
267
			}},
268
			want:    "2708313859359176490",
269
			wantErr: false,
270
		},
271
		{
272
			name: "equal hashes spec + data",
273
			args1: args{obj: map[string]any{
274
				"metadata": map[string]any{
275
					"name":      "some_name1",
276
					"namespace": "incl_ns1",
277
					"spec":      map[string]any{"img": "image]"},
278
					"data":      map[string]any{"key1": "val1", "key2": "val2", "key3": "val3"},
279
				},
280
			}},
281
			args2: args{obj: map[string]any{
282
				"metadata": map[string]any{
283
					"name":  "some_name2",
284
					"field": "incl_ns2",
285
					"spec":  map[string]any{"img": "image]"},
286
					"data":  map[string]any{"key1": "val1", "key2": "val2", "key3": "val3"},
287
				},
288
			}},
289
			want:    "10562426954055529816",
290
			wantErr: false,
291
		},
292
		{
293
			name: "equal hashes annots + labels + spec + data",
294
			args1: args{obj: map[string]any{
295
				"metadata": map[string]any{
296
					"name":      "some_name1",
297
					"namespace": "incl_ns1",
298
					"spec":      map[string]any{"img": "image]"},
299
					"data":      map[string]any{"key1": "val1", "key2": "val2", "key3": "val3"},
300
					"labels": map[string]any{
301
						"key_without_pref1": "val",
302
						"key_without_pref2": "val",
303
						"key_without_pref3": "val",
304
						"key_without_pref4": "val",
305
						"key_without_pref5": "val",
306
						"key_without_pref6": "val",
307
						*prefix + ".key1":   "val1",
308
						"key_without_pref7": "val",
309
						"key_without_pref8": "val",
310
						*prefix + ".key2":   "val2",
311
						"key_without_pref9": "val",
312
						*prefix + ".key3":   "val3"}},
313
			},
314
			},
315
			args2: args{obj: map[string]any{
316
				"metadata": map[string]any{
317
					"name":        "some_name2",
318
					"field":       "incl_ns2",
319
					"spec":        map[string]any{"img": "image]"},
320
					"data":        map[string]any{"key1": "val1", "key2": "val2", "key3": "val3"},
321
					"annotations": map[string]any{*prefix + ".annotNS/annotTr": "Enabled"},
322
					"labels": map[string]any{
323
						"key_without_pref333333": "val",
324
						*prefix + ".key1":        "val1",
325
						*prefix + ".key2":        "val2",
326
						*prefix + ".key3":        "val3"},
327
				},
328
			}},
329
			want:    "18154908706307353440",
330
			wantErr: false,
331
		},
332
	}
333
	for _, tt := range tests {
334
		t.Run(tt.name, func(t *testing.T) {
335
			c := &Executor{}
336

337
			got1, err1 := c.getObjControlFieldsHash(context.Background(), tt.args1.obj)
338
			got2, err2 := c.getObjControlFieldsHash(context.Background(), tt.args1.obj)
339
			got3, err3 := c.getObjControlFieldsHash(context.Background(), tt.args1.obj)
340

341
			if (err1 != nil) != tt.wantErr || (err2 != nil) != tt.wantErr || (err3 != nil) != tt.wantErr {
342
				t.Errorf("getObjControlFieldsHash() errors: %v, %v, %v, wantErr %v", err1.Error(), err2.Error(), err3.Error(), tt.wantErr)
343
				return
344
			}
345

346
			if got1 != tt.want {
347
				t.Errorf("getObjControlFieldsHash() got = %v, want %v", got1, tt.want)
348
			}
349
			if got2 != tt.want {
350
				t.Errorf("getObjControlFieldsHash() got = %v, want %v", got1, tt.want)
351
			}
352
			if got3 != tt.want {
353
				t.Errorf("getObjControlFieldsHash() got = %v, want %v", got1, tt.want)
354
			}
355

356
			if got1 != got2 || got2 != got3 {
357
				t.Errorf("results are not equal to each ther: \n1: %v, \n2: %v, \n3: %v", got1, got2, got3)
358
			}
359
		})
360
	}
361
}
362

363
func TestController_applySideEffectRecreate(t *testing.T) {
364
	type args struct {
365
		info *semodles.SE
366
	}
367
	tests := []struct {
368
		name     string
369
		setVars  func()
370
		template v1alpha1.Template
371
		trigger  v1alpha1.Trigger
372
		args     args
373
		ti       v1alpha1.TriggerInstance
374
	}{
375
		{
376
			name: "success recreation",
377
			ti: v1alpha1.TriggerInstance{
378
				TypeMeta: metav1.TypeMeta{
379
					Kind:       "",
380
					APIVersion: "",
381
				},
382
				ObjectMeta: metav1.ObjectMeta{
383
					Name:   "",
384
					Labels: nil,
385
					Annotations: map[string]string{
386
						env.AnnotSideEffConfigName: "SideEffConfigName",
387
						env.AnnotTriggerNamespace:  "TriggerNamespace",
388
						env.AnnotTriggerName:       "TriggerName",
389
						env.AnnotParentHash:        "12345677",
390
					},
391
				},
392
				Spec:   v1alpha1.TriggerInstanceSpec{},
393
				Status: v1alpha1.TriggerInstanceStatus{},
394
			},
395
			setVars: func() {
396
				kubeapi.GetResourceMeta = func(client *kubernetes.Clientset, kind string, version string) *kubeapi.ResourceMeta {
397
					return &kubeapi.ResourceMeta{
398
						Name:         "Pod",
399
						Plural:       "pods",
400
						Path:         "api",
401
						Namespaced:   true,
402
						GroupVersion: "v1",
403
					}
404
				}
405
				env.TimeoutSideEffectParentPublicationWaiting = 2 * time.Second
406
				kubeapi.GetResource = func(ctx context.Context, resourceMeta *kubeapi.ResourceMeta, resourceName string, namespaceName string) ([]byte, error) {
407
					return []byte("{\"apiVersion\":\"v1\",\"kind\":\"Pod\",\"metadata\":{\"name\":\"pod-se-plus-mutation\",\"resourceVersion\": \"verse1\",\"uid\": \"31ce6848-bee4-40fb-be85-7f796dd11685\",\"namespace\":\"kate-kblt-dev\",\"labels\":{\"sidecar.istio.io/inject\":\"false\",\"side-effect-plus-mutation\":\"enabled\"},\"annotations\":{\"kblt.annot-ns/merge\":\"enabled\", \"kblt.sideEffect.resource/tag\": \"5\"}},\"spec\":{\"hostNetwork\":false,\"serviceAccount\":\"default\",\"serviceAccountName\":\"default\",\"restartPolicy\":\"Never\",\"automountServiceAccountToken\":false,\"securityContext\":{\"runAsNonRoot\":true,\"seccompProfile\":{\"type\":\"RuntimeDefault\"}},\"containers\":[{\"image\":\"dzo.sw.sbc.space/sbt_dev/ci90000221_fedmesh_dev/federation-demo@sha256:548cc416011c86bb1e2c6d06289aab0771a0f749c044656deaac5fc86d891fea\",\"name\":\"test\",\"imagePullPolicy\":\"Always\",\"securityContext\":{\"allowPrivilegeEscalation\":false,\"capabilities\":{\"drop\":[\"ALL\"]},\"runAsNonRoot\":true,\"privileged\":false}}]}}"), nil
408
				}
409
			},
410
			trigger: v1alpha1.Trigger{
411
				ObjectMeta: metav1.ObjectMeta{Name: "TriggerName", Namespace: "TriggerNamespace"},
412
				Spec: v1alpha1.TriggerSpec{
413
					SideEffectConfigs: []v1alpha1.SideEffectConfig{{
414
						Name:         "SideEffConfigName",
415
						TemplateRefs: []string{"templNs/templName"},
416
					}}},
417
			},
418
			template: v1alpha1.Template{
419
				ObjectMeta: metav1.ObjectMeta{
420
					Namespace: "templNs",
421
					Name:      "templName",
422
				},
423
				Spec: v1alpha1.TemplateSpec{
424
					Data: "---\nkind: TriggerInstance\napiVersion: kubelatte.synapse.sber/v1alpha1\nmetadata:\n  name: trigger-instance-se-plus-mutation\n  annotations:\n    kblt/side-effect-plus-mutation: enabled\nspec:\n  data: data\n",
425
				},
426
			},
427
			args: args{
428
				info: &semodles.SE{
429
					SeMode: int32(semodles.Recreation),
430
					Configs: semodles.Configs{
431
						Kind:       "Pod",
432
						ApiVersion: "v1",
433
						Metadata: semodles.Metadata{
434
							Namespace: "kblt-dev",
435
							Name:      "podik :D ! XD",
436
						},
437
						ParentTag:    5,
438
						TemplateRefs: []string{"templNs/templName"},
439
						TriggerRef: semodles.TriggerRef{
440
							Name:             "TriggerName",
441
							Namespace:        "TriggerNamespace",
442
							SideEffectConfig: "SideEffConfigName",
443
						},
444
					},
445
				}},
446
		},
447
		{
448
			name: "no parent hash",
449
			ti: v1alpha1.TriggerInstance{
450
				TypeMeta: metav1.TypeMeta{
451
					Kind:       "",
452
					APIVersion: "",
453
				},
454
				ObjectMeta: metav1.ObjectMeta{
455
					Name:   "",
456
					Labels: nil,
457
					Annotations: map[string]string{
458
						env.AnnotSideEffConfigName: "SideEffConfigName",
459
						env.AnnotTriggerNamespace:  "TriggerNamespace",
460
						env.AnnotTriggerName:       "TriggerName",
461
						env.AnnotParentHash:        "",
462
					},
463
				},
464
				Spec:   v1alpha1.TriggerInstanceSpec{},
465
				Status: v1alpha1.TriggerInstanceStatus{},
466
			},
467
			setVars: func() {
468
				kubeapi.GetResourceMeta = func(client *kubernetes.Clientset, kind string, version string) *kubeapi.ResourceMeta {
469
					return &kubeapi.ResourceMeta{
470
						Name:         "Pod",
471
						Plural:       "pods",
472
						Path:         "api",
473
						Namespaced:   true,
474
						GroupVersion: "v1",
475
					}
476
				}
477
				env.TimeoutSideEffectParentPublicationWaiting = 2 * time.Second
478
				kubeapi.GetResource = func(ctx context.Context, resourceMeta *kubeapi.ResourceMeta, resourceName string, namespaceName string) ([]byte, error) {
479
					return []byte("{\"apiVersion\":\"v1\",\"kind\":\"Pod\",\"metadata\":{\"name\":\"pod-se-plus-mutation\",\"resourceVersion\": \"verse1\",\"uid\": \"31ce6848-bee4-40fb-be85-7f796dd11685\",\"namespace\":\"kate-kblt-dev\",\"labels\":{\"sidecar.istio.io/inject\":\"false\",\"side-effect-plus-mutation\":\"enabled\"},\"annotations\":{\"kblt.annot-ns/merge\":\"enabled\", \"kblt.sideEffect.resource/tag\": \"5\"}},\"spec\":{\"hostNetwork\":false,\"serviceAccount\":\"default\",\"serviceAccountName\":\"default\",\"restartPolicy\":\"Never\",\"automountServiceAccountToken\":false,\"securityContext\":{\"runAsNonRoot\":true,\"seccompProfile\":{\"type\":\"RuntimeDefault\"}},\"containers\":[{\"image\":\"dzo.sw.sbc.space/sbt_dev/ci90000221_fedmesh_dev/federation-demo@sha256:548cc416011c86bb1e2c6d06289aab0771a0f749c044656deaac5fc86d891fea\",\"name\":\"test\",\"imagePullPolicy\":\"Always\",\"securityContext\":{\"allowPrivilegeEscalation\":false,\"capabilities\":{\"drop\":[\"ALL\"]},\"runAsNonRoot\":true,\"privileged\":false}}]}}"), nil
480
				}
481
			},
482
			trigger: v1alpha1.Trigger{
483
				ObjectMeta: metav1.ObjectMeta{Name: "TriggerName", Namespace: "TriggerNamespace"},
484
				Spec: v1alpha1.TriggerSpec{
485
					SideEffectConfigs: []v1alpha1.SideEffectConfig{{
486
						Name:         "SideEffConfigName",
487
						TemplateRefs: []string{"templNs/templName"},
488
					}}},
489
			},
490
			template: v1alpha1.Template{
491
				ObjectMeta: metav1.ObjectMeta{
492
					Namespace: "templNs",
493
					Name:      "templName",
494
				},
495
				Spec: v1alpha1.TemplateSpec{
496
					Data: "---\nkind: TriggerInstance\napiVersion: kubelatte.synapse.sber/v1alpha1\nmetadata:\n  name: trigger-instance-se-plus-mutation\n  annotations:\n    kblt/side-effect-plus-mutation: enabled\nspec:\n  data: data\n",
497
				},
498
			},
499
			args: args{
500
				info: &semodles.SE{
501
					SeMode: int32(semodles.Recreation),
502
					Configs: semodles.Configs{
503
						Kind:       "Pod",
504
						ApiVersion: "v1",
505
						Metadata: semodles.Metadata{
506
							Namespace: "kblt-dev",
507
							Name:      "podik :D ! XD",
508
						},
509
						ParentTag:    5,
510
						TemplateRefs: []string{"templNs/templName"},
511
						TriggerRef: semodles.TriggerRef{
512
							Name:             "TriggerName",
513
							Namespace:        "TriggerNamespace",
514
							SideEffectConfig: "SideEffConfigName",
515
						},
516
					},
517
				}},
518
		},
519
		{
520
			name: "empty timeout",
521
			ti: v1alpha1.TriggerInstance{
522
				TypeMeta: metav1.TypeMeta{
523
					Kind:       "",
524
					APIVersion: "",
525
				},
526
				ObjectMeta: metav1.ObjectMeta{
527
					Name:   "",
528
					Labels: nil,
529
					Annotations: map[string]string{
530
						env.AnnotSideEffConfigName: "SideEffConfigName",
531
						env.AnnotTriggerNamespace:  "TriggerNamespace",
532
						env.AnnotTriggerName:       "TriggerName",
533
						env.AnnotParentHash:        "12345677",
534
					},
535
				},
536
				Spec:   v1alpha1.TriggerInstanceSpec{},
537
				Status: v1alpha1.TriggerInstanceStatus{},
538
			},
539
			setVars: func() {
540
				kubeapi.GetResourceMeta = func(client *kubernetes.Clientset, kind string, version string) *kubeapi.ResourceMeta {
541
					return &kubeapi.ResourceMeta{
542
						Name:         "Pod",
543
						Plural:       "pods",
544
						Path:         "api",
545
						Namespaced:   true,
546
						GroupVersion: "v1",
547
					}
548
				}
549
				kubeapi.GetResource = func(ctx context.Context, resourceMeta *kubeapi.ResourceMeta, resourceName string, namespaceName string) ([]byte, error) {
550
					return []byte("{\"apiVersion\":\"v1\",\"kind\":\"Pod\",\"metadata\":{\"name\":\"pod-se-plus-mutation\",\"resourceVersion\": \"verse1\",\"uid\": \"31ce6848-bee4-40fb-be85-7f796dd11685\",\"namespace\":\"kate-kblt-dev\",\"labels\":{\"sidecar.istio.io/inject\":\"false\",\"side-effect-plus-mutation\":\"enabled\"},\"annotations\":{\"kblt.annot-ns/merge\":\"enabled\", \"kblt.sideEffect.resource/tag\": \"5\"}},\"spec\":{\"hostNetwork\":false,\"serviceAccount\":\"default\",\"serviceAccountName\":\"default\",\"restartPolicy\":\"Never\",\"automountServiceAccountToken\":false,\"securityContext\":{\"runAsNonRoot\":true,\"seccompProfile\":{\"type\":\"RuntimeDefault\"}},\"containers\":[{\"image\":\"dzo.sw.sbc.space/sbt_dev/ci90000221_fedmesh_dev/federation-demo@sha256:548cc416011c86bb1e2c6d06289aab0771a0f749c044656deaac5fc86d891fea\",\"name\":\"test\",\"imagePullPolicy\":\"Always\",\"securityContext\":{\"allowPrivilegeEscalation\":false,\"capabilities\":{\"drop\":[\"ALL\"]},\"runAsNonRoot\":true,\"privileged\":false}}]}}"), nil
551
				}
552
			},
553
			trigger: v1alpha1.Trigger{
554
				ObjectMeta: metav1.ObjectMeta{Name: "TriggerName", Namespace: "TriggerNamespace"},
555
				Spec: v1alpha1.TriggerSpec{
556
					SideEffectConfigs: []v1alpha1.SideEffectConfig{{
557
						Name:         "SideEffConfigName",
558
						TemplateRefs: []string{"templNs/templName"},
559
					}}},
560
			},
561
			template: v1alpha1.Template{
562
				ObjectMeta: metav1.ObjectMeta{
563
					Namespace: "templNs",
564
					Name:      "templName",
565
				},
566
				Spec: v1alpha1.TemplateSpec{
567
					Data: "---\nkind: TriggerInstance\napiVersion: kubelatte.synapse.sber/v1alpha1\nmetadata:\n  name: trigger-instance-se-plus-mutation\n  annotations:\n    kblt/side-effect-plus-mutation: enabled\nspec:\n  data: data\n",
568
				},
569
			},
570
			args: args{
571
				info: &semodles.SE{
572
					SeMode: int32(semodles.Recreation),
573
					Configs: semodles.Configs{
574
						Kind:       "Pod",
575
						ApiVersion: "v1",
576
						Metadata: semodles.Metadata{
577
							Namespace: "kblt-dev",
578
							Name:      "podik :D ! XD",
579
						},
580
						ParentTag:    5,
581
						TemplateRefs: []string{"templNs/templName"},
582
						TriggerRef: semodles.TriggerRef{
583
							Name:             "TriggerName",
584
							Namespace:        "TriggerNamespace",
585
							SideEffectConfig: "SideEffConfigName",
586
						},
587
					},
588
				}},
589
		},
590
		{
591
			name: "gettimg parent error",
592
			ti: v1alpha1.TriggerInstance{
593
				TypeMeta: metav1.TypeMeta{
594
					Kind:       "",
595
					APIVersion: "",
596
				},
597
				ObjectMeta: metav1.ObjectMeta{
598
					Name:   "",
599
					Labels: nil,
600
					Annotations: map[string]string{
601
						env.AnnotSideEffConfigName: "SideEffConfigName",
602
						env.AnnotTriggerNamespace:  "TriggerNamespace",
603
						env.AnnotTriggerName:       "TriggerName",
604
						env.AnnotParentHash:        "12345677",
605
					},
606
				},
607
				Spec:   v1alpha1.TriggerInstanceSpec{},
608
				Status: v1alpha1.TriggerInstanceStatus{},
609
			},
610
			setVars: func() {
611
				kubeapi.GetResourceMeta = func(client *kubernetes.Clientset, kind string, version string) *kubeapi.ResourceMeta {
612
					return &kubeapi.ResourceMeta{
613
						Name:         "Pod",
614
						Plural:       "pods",
615
						Path:         "api",
616
						Namespaced:   true,
617
						GroupVersion: "v1",
618
					}
619
				}
620
				env.TimeoutSideEffectParentPublicationWaiting = 2 * time.Second
621
				kubeapi.GetResource = func(ctx context.Context, resourceMeta *kubeapi.ResourceMeta, resourceName string, namespaceName string) ([]byte, error) {
622
					return []byte("{\"apiVersion\":\"v1\",\"kind\":\"Pod\",\"metadata\":{\"name\":\"pod-se-plus-mutation\",\"resourceVersion\": \"verse1\",\"uid\": \"31ce6848-bee4-40fb-be85-7f796dd11685\",\"namespace\":\"kate-kblt-dev\",\"labels\":{\"sidecar.istio.io/inject\":\"false\",\"side-effect-plus-mutation\":\"enabled\"},\"annotations\":{\"kblt.annot-ns/merge\":\"enabled\", \"kblt.sideEffect.resource/tag\": \"5\"}},\"spec\":{\"hostNetwork\":false,\"serviceAccount\":\"default\",\"serviceAccountName\":\"default\",\"restartPolicy\":\"Never\",\"automountServiceAccountToken\":false,\"securityContext\":{\"runAsNonRoot\":true,\"seccompProfile\":{\"type\":\"RuntimeDefault\"}},\"containers\":[{\"image\":\"dzo.sw.sbc.space/sbt_dev/ci90000221_fedmesh_dev/federation-demo@sha256:548cc416011c86bb1e2c6d06289aab0771a0f749c044656deaac5fc86d891fea\",\"name\":\"test\",\"imagePullPolicy\":\"Always\",\"securityContext\":{\"allowPrivilegeEscalation\":false,\"capabilities\":{\"drop\":[\"ALL\"]},\"runAsNonRoot\":true,\"privileged\":false}}]}}"), errors.New("")
623
				}
624
			},
625
			trigger: v1alpha1.Trigger{
626
				ObjectMeta: metav1.ObjectMeta{Name: "TriggerName", Namespace: "TriggerNamespace"},
627
				Spec: v1alpha1.TriggerSpec{
628
					SideEffectConfigs: []v1alpha1.SideEffectConfig{{
629
						Name:         "SideEffConfigName",
630
						TemplateRefs: []string{"templNs/templName"},
631
					}}},
632
			},
633
			template: v1alpha1.Template{
634
				ObjectMeta: metav1.ObjectMeta{
635
					Namespace: "templNs",
636
					Name:      "templName",
637
				},
638
				Spec: v1alpha1.TemplateSpec{
639
					Data: "---\nkind: TriggerInstance\napiVersion: kubelatte.synapse.sber/v1alpha1\nmetadata:\n  name: trigger-instance-se-plus-mutation\n  annotations:\n    kblt/side-effect-plus-mutation: enabled\nspec:\n  data: data\n",
640
				},
641
			},
642
			args: args{
643
				info: &semodles.SE{
644
					SeMode: int32(semodles.Recreation),
645
					Configs: semodles.Configs{
646
						Kind:       "Pod",
647
						ApiVersion: "v1",
648
						Metadata: semodles.Metadata{
649
							Namespace: "kblt-dev",
650
							Name:      "podik :D ! XD",
651
						},
652
						ParentTag:    5,
653
						TemplateRefs: []string{"templNs/templName"},
654
						TriggerRef: semodles.TriggerRef{
655
							Name:             "TriggerName",
656
							Namespace:        "TriggerNamespace",
657
							SideEffectConfig: "SideEffConfigName",
658
						},
659
					},
660
				}},
661
		},
662
		{
663
			name: "no templates",
664
			ti: v1alpha1.TriggerInstance{
665
				TypeMeta: metav1.TypeMeta{
666
					Kind:       "",
667
					APIVersion: "",
668
				},
669
				ObjectMeta: metav1.ObjectMeta{
670
					Name:   "",
671
					Labels: nil,
672
					Annotations: map[string]string{
673
						env.AnnotSideEffConfigName: "SideEffConfigName",
674
						env.AnnotTriggerNamespace:  "TriggerNamespace",
675
						env.AnnotTriggerName:       "TriggerName",
676
						env.AnnotParentHash:        "12345677",
677
					},
678
				},
679
				Spec:   v1alpha1.TriggerInstanceSpec{},
680
				Status: v1alpha1.TriggerInstanceStatus{},
681
			},
682
			setVars: func() {
683
				kubeapi.GetResourceMeta = func(client *kubernetes.Clientset, kind string, version string) *kubeapi.ResourceMeta {
684
					return &kubeapi.ResourceMeta{
685
						Name:         "Pod",
686
						Plural:       "pods",
687
						Path:         "api",
688
						Namespaced:   true,
689
						GroupVersion: "v1",
690
					}
691
				}
692
				env.TimeoutSideEffectParentPublicationWaiting = 2 * time.Second
693
				kubeapi.GetResource = func(ctx context.Context, resourceMeta *kubeapi.ResourceMeta, resourceName string, namespaceName string) ([]byte, error) {
694
					return []byte("{\"apiVersion\":\"v1\",\"kind\":\"Pod\",\"metadata\":{\"name\":\"pod-se-plus-mutation\",\"resourceVersion\": \"verse1\",\"uid\": \"31ce6848-bee4-40fb-be85-7f796dd11685\",\"namespace\":\"kate-kblt-dev\",\"labels\":{\"sidecar.istio.io/inject\":\"false\",\"side-effect-plus-mutation\":\"enabled\"},\"annotations\":{\"kblt.annot-ns/merge\":\"enabled\", \"kblt.sideEffect.resource/tag\": \"5\"}},\"spec\":{\"hostNetwork\":false,\"serviceAccount\":\"default\",\"serviceAccountName\":\"default\",\"restartPolicy\":\"Never\",\"automountServiceAccountToken\":false,\"securityContext\":{\"runAsNonRoot\":true,\"seccompProfile\":{\"type\":\"RuntimeDefault\"}},\"containers\":[{\"image\":\"dzo.sw.sbc.space/sbt_dev/ci90000221_fedmesh_dev/federation-demo@sha256:548cc416011c86bb1e2c6d06289aab0771a0f749c044656deaac5fc86d891fea\",\"name\":\"test\",\"imagePullPolicy\":\"Always\",\"securityContext\":{\"allowPrivilegeEscalation\":false,\"capabilities\":{\"drop\":[\"ALL\"]},\"runAsNonRoot\":true,\"privileged\":false}}]}}"), errors.New("")
695
				}
696
			},
697
			trigger: v1alpha1.Trigger{
698
				ObjectMeta: metav1.ObjectMeta{Name: "TriggerName", Namespace: "TriggerNamespace"},
699
				Spec: v1alpha1.TriggerSpec{
700
					SideEffectConfigs: []v1alpha1.SideEffectConfig{{
701
						Name:         "SideEffConfigName",
702
						TemplateRefs: []string{"templNs/templName"},
703
					}}},
704
			},
705
			template: v1alpha1.Template{
706
				ObjectMeta: metav1.ObjectMeta{
707
					Namespace: "templNs",
708
					Name:      "templName",
709
				},
710
				Spec: v1alpha1.TemplateSpec{
711
					Data: "---\nkind: TriggerInstance\napiVersion: kubelatte.synapse.sber/v1alpha1\nmetadata:\n  name: trigger-instance-se-plus-mutation\n  annotations:\n    kblt/side-effect-plus-mutation: enabled\nspec:\n  data: data\n",
712
				},
713
			},
714
			args: args{
715
				info: &semodles.SE{
716
					SeMode: int32(semodles.Recreation),
717
					Configs: semodles.Configs{
718
						Kind:       "Pod",
719
						ApiVersion: "v1",
720
						Metadata: semodles.Metadata{
721
							Namespace: "kblt-dev",
722
							Name:      "podik :D ! XD",
723
						},
724
						ParentTag:    5,
725
						TemplateRefs: []string{"templNs/templName"},
726
						TriggerRef: semodles.TriggerRef{
727
							Name:             "TriggerName",
728
							Namespace:        "TriggerNamespace",
729
							SideEffectConfig: "SideEffConfigName",
730
						},
731
					},
732
				}},
733
		},
734
	}
735
	for _, tt := range tests {
736
		t.Run(tt.name, func(t *testing.T) {
737
			tt.setVars()
738

739
			triggerInstanceClient := mocks2.NewTriggerInstanceInterface(t)
740
			triggerInstanceClient.On("Get", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, errors2.NewNotFound(schema.GroupResource{}, "ti")).Maybe()
741
			triggerInstanceClient.On("Create", mock.Anything, mock.Anything, mock.Anything).Return(nil, nil).Maybe()
742
			triggerInstanceClient.On("Delete", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil).Maybe()
743
			triggerInstanceClient.On("List", mock.Anything, mock.Anything, mock.Anything).Return(&v1alpha1.TriggerInstanceList{
744
				Items: []v1alpha1.TriggerInstance{tt.ti},
745
			}, nil).Maybe()
746

747
			kbtlKubeClientMock := mocks2.NewV1Alpha1Interface(t)
748
			kbtlKubeClientMock.On("TriggerInstance").Return(triggerInstanceClient).Maybe()
749

750
			storage.Storage = &storage.StorageController{}
751
			storage.Storage.Start(false, false)
752
			storage.Storage.UpdateTemplate(&tt.template)
753
			storage.Storage.UpdateTrigger(&tt.trigger)
754

755
			c := Executor{kbtlKubeClient: kbtlKubeClientMock, mu: &sync.Mutex{}}
756
			c.act = &c
757
			c.ApplySideEffectRecreate(context.Background(), tt.args.info)
758
		})
759
	}
760
}
761

762
func TestExecutor_waitForUpdatedParentPublication(t *testing.T) {
763
	type fields struct {
764
		kubeCli        *kubernetes.Clientset
765
		kbtlKubeClient clientset.V1Alpha1Interface
766
		mu             *sync.Mutex
767
	}
768
	type args struct {
769
		ctx           context.Context
770
		oldParentHash string
771
		info          *semodles.SE
772
	}
773
	tests := []struct {
774
		name    string
775
		fields  fields
776
		args    args
777
		setup   func()
778
		want    []byte
779
		wantErr bool
780
	}{
781
		{
782
			name: "parent NotYetUpdated",
783
			args: args{
784
				ctx:           context.Background(),
785
				oldParentHash: "hash",
786
				info: &semodles.SE{
787
					Configs: semodles.Configs{
788
						ParentTag: 123,
789
					},
790
					SeMode: int32(semodles.Recreation),
791
				},
792
			},
793
			setup: func() {
794
				env.TimeoutSideEffectParentPublicationWaiting = 2 * time.Second
795
				kubeapi.GetResourceMeta = func(client *kubernetes.Clientset, kind string, version string) *kubeapi.ResourceMeta {
796
					return &kubeapi.ResourceMeta{Name: "sth"}
797
				}
798
				kubeapi.GetResource = func(ctx context.Context, resourceMeta *kubeapi.ResourceMeta, resourceName string, namespace string) ([]byte, error) {
799
					return []byte("{\"apiVersion\":\"v1\",\"kind\":\"Pod\",\"metadata\":{\"name\":\"pod-se-plus-mutation\",\"resourceVersion\": \"verse1\",\"uid\": \"31ce6848-bee4-40fb-be85-7f796dd11685\",\"namespace\":\"kate-kblt-dev\",\"labels\":{\"sidecar.istio.io/inject\":\"false\",\"side-effect-plus-mutation\":\"enabled\"},\"annotations\":{\"kblt.annot-ns/merge\":\"enabled\", \"sideEffect.resource/tag\": \"5\"}},\"spec\":{\"hostNetwork\":false,\"serviceAccount\":\"default\",\"serviceAccountName\":\"default\",\"restartPolicy\":\"Never\",\"automountServiceAccountToken\":false,\"securityContext\":{\"runAsNonRoot\":true,\"seccompProfile\":{\"type\":\"RuntimeDefault\"}},\"containers\":[{\"image\":\"dzo.sw.sbc.space/sbt_dev/ci90000221_fedmesh_dev/federation-demo@sha256:548cc416011c86bb1e2c6d06289aab0771a0f749c044656deaac5fc86d891fea\",\"name\":\"test\",\"imagePullPolicy\":\"Always\",\"securityContext\":{\"allowPrivilegeEscalation\":false,\"capabilities\":{\"drop\":[\"ALL\"]},\"runAsNonRoot\":true,\"privileged\":false}}]}}"), nil
800
				}
801
			},
802
			want:    nil,
803
			wantErr: true,
804
		},
805
		{
806
			name: "parent Obtained",
807
			args: args{
808
				ctx:           context.Background(),
809
				oldParentHash: "hash",
810
				info: &semodles.SE{
811
					Configs: semodles.Configs{
812
						ParentTag: 0,
813
					},
814
					SeMode: int32(semodles.Recreation),
815
				},
816
			},
817
			setup: func() {
818
				env.TimeoutSideEffectParentPublicationWaiting = 2 * time.Second
819
				kubeapi.GetResourceMeta = func(client *kubernetes.Clientset, kind string, version string) *kubeapi.ResourceMeta {
820
					return &kubeapi.ResourceMeta{Name: "sth"}
821
				}
822
				kubeapi.GetResource = func(ctx context.Context, resourceMeta *kubeapi.ResourceMeta, resourceName string, namespace string) ([]byte, error) {
823
					return []byte("{\"apiVersion\":\"v1\",\"kind\":\"Pod\",\"metadata\":{\"name\":\"pod-se-plus-mutation\",\"resourceVersion\": \"verse1\",\"uid\": \"31ce6848-bee4-40fb-be85-7f796dd11685\",\"namespace\":\"kate-kblt-dev\",\"labels\":{\"sidecar.istio.io/inject\":\"false\",\"side-effect-plus-mutation\":\"enabled\"},\"annotations\":{\"kblt.annot-ns/merge\":\"enabled\", \"sideEffect.resource/tag\": \"5\"}},\"spec\":{\"hostNetwork\":false,\"serviceAccount\":\"default\",\"serviceAccountName\":\"default\",\"restartPolicy\":\"Never\",\"automountServiceAccountToken\":false,\"securityContext\":{\"runAsNonRoot\":true,\"seccompProfile\":{\"type\":\"RuntimeDefault\"}},\"containers\":[{\"image\":\"dzo.sw.sbc.space/sbt_dev/ci90000221_fedmesh_dev/federation-demo@sha256:548cc416011c86bb1e2c6d06289aab0771a0f749c044656deaac5fc86d891fea\",\"name\":\"test\",\"imagePullPolicy\":\"Always\",\"securityContext\":{\"allowPrivilegeEscalation\":false,\"capabilities\":{\"drop\":[\"ALL\"]},\"runAsNonRoot\":true,\"privileged\":false}}]}}"), nil
824
				}
825
			},
826
			want:    nil,
827
			wantErr: true,
828
		},
829
		{
830
			name: "parent PublishedHashChanged",
831
			args: args{
832
				ctx:           context.Background(),
833
				oldParentHash: "хеш",
834
				info: &semodles.SE{
835
					Configs: semodles.Configs{
836
						ParentTag: 5,
837
					},
838
					SeMode: int32(semodles.Recreation),
839
				},
840
			},
841
			setup: func() {
842
				env.TimeoutSideEffectParentPublicationWaiting = 2 * time.Second
843
				kubeapi.GetResourceMeta = func(client *kubernetes.Clientset, kind string, version string) *kubeapi.ResourceMeta {
844
					return &kubeapi.ResourceMeta{Name: "sth"}
845
				}
846
				kubeapi.GetResource = func(ctx context.Context, resourceMeta *kubeapi.ResourceMeta, resourceName string, namespace string) ([]byte, error) {
847
					return []byte("{\"apiVersion\":\"v1\",\"kind\":\"Pod\",\"metadata\":{\"name\":\"pod-se-plus-mutation\",\"resourceVersion\": \"verse1\",\"uid\": \"31ce6848-bee4-40fb-be85-7f796dd11685\",\"namespace\":\"kate-kblt-dev\",\"labels\":{\"sidecar.istio.io/inject\":\"false\",\"side-effect-plus-mutation\":\"enabled\"},\"annotations\":{\"kblt.annot-ns/merge\":\"enabled\", \"sideEffect.resource/tag\": \"5\"}},\"spec\":{\"hostNetwork\":false,\"serviceAccount\":\"default\",\"serviceAccountName\":\"default\",\"restartPolicy\":\"Never\",\"automountServiceAccountToken\":false,\"securityContext\":{\"runAsNonRoot\":true,\"seccompProfile\":{\"type\":\"RuntimeDefault\"}},\"containers\":[{\"image\":\"dzo.sw.sbc.space/sbt_dev/ci90000221_fedmesh_dev/federation-demo@sha256:548cc416011c86bb1e2c6d06289aab0771a0f749c044656deaac5fc86d891fea\",\"name\":\"test\",\"imagePullPolicy\":\"Always\",\"securityContext\":{\"allowPrivilegeEscalation\":false,\"capabilities\":{\"drop\":[\"ALL\"]},\"runAsNonRoot\":true,\"privileged\":false}}]}}"), nil
848
				}
849
			},
850
			wantErr: false,
851
		},
852
		{
853
			name: "parent PublishedHashNotChanged",
854
			args: args{
855
				ctx:           context.Background(),
856
				oldParentHash: "9079847633250741385",
857
				info: &semodles.SE{
858
					Configs: semodles.Configs{
859
						ParentTag: 5,
860
					},
861
					SeMode: int32(semodles.Recreation),
862
				},
863
			},
864
			setup: func() {
865
				env.TimeoutSideEffectParentPublicationWaiting = 2 * time.Second
866
				kubeapi.GetKBLTClient = func() (*clientset.V1Alpha1Client, error) {
867
					return nil, nil
868
				}
869
				kubeapi.GetResourceMeta = func(client *kubernetes.Clientset, kind string, version string) *kubeapi.ResourceMeta {
870
					return &kubeapi.ResourceMeta{Name: "sth"}
871
				}
872
				kubeapi.GetResource = func(ctx context.Context, resourceMeta *kubeapi.ResourceMeta, resourceName string, namespace string) ([]byte, error) {
873
					return []byte("{\"apiVersion\":\"v1\",\"kind\":\"Pod\",\"metadata\":{\"name\":\"pod-se-plus-mutation\",\"resourceVersion\": \"verse1\",\"uid\": \"31ce6848-bee4-40fb-be85-7f796dd11685\",\"namespace\":\"kate-kblt-dev\",\"labels\":{\"sidecar.istio.io/inject\":\"false\",\"side-effect-plus-mutation\":\"enabled\"},\"annotations\":{\"kblt.annot-ns/merge\":\"enabled\", \"sideEffect.resource/tag\": \"5\"}},\"spec\":{\"hostNetwork\":false,\"serviceAccount\":\"default\",\"serviceAccountName\":\"default\",\"restartPolicy\":\"Never\",\"automountServiceAccountToken\":false,\"securityContext\":{\"runAsNonRoot\":true,\"seccompProfile\":{\"type\":\"RuntimeDefault\"}},\"containers\":[{\"image\":\"dzo.sw.sbc.space/sbt_dev/ci90000221_fedmesh_dev/federation-demo@sha256:548cc416011c86bb1e2c6d06289aab0771a0f749c044656deaac5fc86d891fea\",\"name\":\"test\",\"imagePullPolicy\":\"Always\",\"securityContext\":{\"allowPrivilegeEscalation\":false,\"capabilities\":{\"drop\":[\"ALL\"]},\"runAsNonRoot\":true,\"privileged\":false}}]}}"), nil
874
				}
875
			},
876
			wantErr: false,
877
		},
878
	}
879
	for _, tt := range tests {
880
		t.Run(tt.name, func(t *testing.T) {
881
			tt.setup()
882
			e := &Executor{}
883
			e.act = e
884
			_, err := e.waitForUpdatedParentPublication(tt.args.ctx, tt.args.oldParentHash, tt.args.info)
885
			if (err != nil) != tt.wantErr {
886
				t.Errorf("waitForUpdatedParentPublication() error = %v, wantErr %v", err, tt.wantErr)
887
				return
888
			}
889
		})
890
	}
891
}
892

893
func TestExecutor_deleteTIs(t *testing.T) {
894
	t.Run("ok", func(t *testing.T) {
895
		kbltKubeClientMock := mocks2.NewV1Alpha1Interface(t)
896
		timock := mocks2.NewTriggerInstanceInterface(t)
897
		timock.On("Delete", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil)
898
		kbltKubeClientMock.On("TriggerInstance").Return(timock)
899
		e := &Executor{
900
			kbtlKubeClient: kbltKubeClientMock,
901
		}
902
		e.deleteTIs(context.Background(), []*v1alpha1.TriggerInstance{{}}, "")
903
	})
904

905
	t.Run("error", func(t *testing.T) {
906
		kbltKubeClientMock := mocks2.NewV1Alpha1Interface(t)
907
		timock := mocks2.NewTriggerInstanceInterface(t)
908
		timock.On("Delete", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(errors.New("err"))
909
		kbltKubeClientMock.On("TriggerInstance").Return(timock)
910
		e := &Executor{
911
			kbtlKubeClient: kbltKubeClientMock,
912
		}
913
		e.deleteTIs(context.Background(), []*v1alpha1.TriggerInstance{{}}, "")
914
	})
915
}
916

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.