kubelatte-ce

Форк
2
Форк от sbertech/kubelatte-ce
/
render_test.go 
203 строки · 5.2 Кб
1
package creation
2

3
import (
4
	"context"
5
	"fmt"
6
	"github.com/Masterminds/sprig/v3"
7
	"github.com/stretchr/testify/assert"
8
	"github.com/stretchr/testify/mock"
9
	v1alpha12 "gitverse.ru/synapse/kubelatte/pkg/api/v1alpha1"
10
	"gitverse.ru/synapse/kubelatte/pkg/observability/logger/lib"
11
	"gitverse.ru/synapse/kubelatte/pkg/operator/controllers/clientset"
12
	"gitverse.ru/synapse/kubelatte/pkg/operator/controllers/clientset/mocks"
13
	"gitverse.ru/synapse/kubelatte/pkg/operator/utils"
14
	"gitverse.ru/synapse/kubelatte/pkg/storage"
15
	"gitverse.ru/synapse/kubelatte/pkg/util/templates"
16
	"go.uber.org/zap"
17
	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
18
	"strings"
19
	"testing"
20
	"text/template"
21
)
22

23
func TestRenderController(t *testing.T) {
24
	lib.ZapLogger = zap.NewNop()
25

26
	templateClient := mocks.NewTemplateInterface(t)
27
	templateClient.On("List", mock.Anything, mock.Anything).Return(&v1alpha12.TemplateList{
28
		Items: []v1alpha12.Template{
29
			{
30
				ObjectMeta: v1.ObjectMeta{
31
					Name:      "template",
32
					Namespace: "test",
33
				},
34
				Spec: v1alpha12.TemplateSpec{
35
					Kind:       "Pod",
36
					ApiVersion: "v1",
37
					Data:       "metadata:\n name: pod\nspec:\n abc: test",
38
				},
39
			},
40
		},
41
	}, nil).Maybe()
42
	triggerClient := mocks.NewTriggerInterface(t)
43
	triggerClient.On("List", mock.Anything, mock.Anything).Return(&v1alpha12.TriggerList{
44
		Items: []v1alpha12.Trigger{
45
			{
46
				ObjectMeta: v1.ObjectMeta{
47
					Name:      "trigger",
48
					Namespace: "test",
49
				},
50
				Spec: v1alpha12.TriggerSpec{
51
					CreationConfigs: []v1alpha12.CreationConfig{
52
						{
53
							Name: "creation",
54
							LabelSelector: v1.LabelSelector{
55
								MatchExpressions: []v1.LabelSelectorRequirement{
56
									{
57
										Key:      "test",
58
										Operator: "In",
59
										Values:   []string{"test"},
60
									},
61
								},
62
							},
63
							AnnotationNamespace: "test",
64
							AnnotationTrigger:   "test",
65
							TemplateRefs:        []string{"test/template"},
66
						},
67
					},
68
				},
69
			},
70
		},
71
	}, nil).Maybe()
72

73
	ti := v1alpha12.TriggerInstance{
74
		Status: v1alpha12.TriggerInstanceStatus{
75
			ResourceStatus: []v1alpha12.ResourceStatus{
76
				{
77
					Name:       "pod",
78
					Kind:       "Pod",
79
					ApiVersion: "v1",
80
					Message:    "REMOVED",
81
					Phase:      "",
82
					Status:     "REMOVED",
83
				},
84
			},
85
		},
86
	}
87

88
	scopeClient := mocks.NewScopeInterface(t)
89
	triggerInstanceClient := mocks.NewTriggerInstanceInterface(t)
90
	triggerInstanceClient.On("Get", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(&ti, nil).Maybe()
91
	triggerInstanceClient.On("updateStatus", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil).Maybe()
92

93
	clt := clientset.V1Alpha1Client{
94
		TriggerClient:         triggerClient,
95
		TemplateClient:        templateClient,
96
		ScopeClient:           scopeClient,
97
		TriggerInstanceClient: triggerInstanceClient,
98
	}
99

100
	utils.Cl = &clt
101

102
	r := RenderController{}
103
	InitTestStorage()
104

105
	t.Run("Check getRenders", func(t *testing.T) {
106
		ti2 := v1alpha12.TriggerInstance{
107
			ObjectMeta: v1.ObjectMeta{
108
				Name:      "test",
109
				Namespace: "test",
110
				Annotations: map[string]string{
111
					"test/test": "true",
112
				},
113
			},
114
			Status: v1alpha12.TriggerInstanceStatus{},
115
		}
116
		renderItems := r.GetRenders(context.Background(), &ti2)
117
		assert.Equal(t, 1, len(renderItems))
118
	})
119
}
120

121
func InitTestStorage() {
122
	var storageController = &storage.StorageController{}
123
	storageController.Start(false, false)
124
	storageController.UpdateScope(v1alpha12.Scope{
125
		ObjectMeta: v1.ObjectMeta{
126
			Name: "TestScope",
127
		},
128
		Spec: v1alpha12.ScopeSpec{
129
			Type: "mutation",
130
			Items: []v1alpha12.Item{
131
				{
132
					Name: "TestScopeItem",
133
				},
134
			},
135
		},
136
	})
137
	storageController.UpdateTrigger(&v1alpha12.Trigger{
138
		ObjectMeta: v1.ObjectMeta{
139
			Name:      "trigger",
140
			Namespace: "test",
141
		},
142
		Spec: v1alpha12.TriggerSpec{
143
			CreationConfigs: []v1alpha12.CreationConfig{
144
				{
145
					Name: "creation",
146
					LabelSelector: v1.LabelSelector{
147
						MatchExpressions: []v1.LabelSelectorRequirement{
148
							{
149
								Key:      "test",
150
								Operator: "In",
151
								Values:   []string{"test"},
152
							},
153
						},
154
					},
155
					AnnotationNamespace: "test",
156
					AnnotationTrigger:   "test",
157
					TemplateRefs:        []string{"test/template"},
158
				},
159
			},
160
		},
161
	})
162
	storageController.UpdateTemplate(&v1alpha12.Template{
163
		ObjectMeta: v1.ObjectMeta{
164
			Name:      "template",
165
			Namespace: "test",
166
		},
167
		Spec: v1alpha12.TemplateSpec{
168
			Kind:       "Pod",
169
			ApiVersion: "v1",
170
			Data:       "metadata:\n name: pod\nspec:\n abc: test",
171
		},
172
	})
173
	storage.Storage = storageController
174
}
175

176
func TestTemplateEngine(t *testing.T) {
177
	var Data = "{{% .spec.dataObj.spec.host %}}"
178
	var tiObject = map[string]interface{}{
179
		"spec": map[string]interface{}{
180
			"dataObj": map[string]interface{}{
181
				"spec": map[string]interface{}{
182
					"host": "aaaaaaaaaa",
183
				},
184
			},
185
		},
186
	}
187
	templateEngine := template.New("common").
188
		Delims("{{%", "%}}").
189
		Funcs(template.FuncMap{
190
			"fromYaml": templates.FromYAML,
191
		}).
192
		Funcs(sprig.TxtFuncMap())
193
	temp, err := templateEngine.New("test").Parse(Data)
194
	if err != nil {
195
		_ = fmt.Errorf(fmt.Sprintf("TestTemplateEngine: ReloadTemplates failed %s", err))
196
	}
197
	var tempBuffer strings.Builder
198
	err = temp.Execute(&tempBuffer, tiObject)
199
	if err != nil {
200
		_ = fmt.Errorf(fmt.Sprintf("RenderController: getRenders failed %s", err))
201
	}
202
	fmt.Println(tempBuffer.String())
203
}
204

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

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

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

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