kubelatte-ce
Форк от sbertech/kubelatte-ce
203 строки · 5.2 Кб
1package creation
2
3import (
4"context"
5"fmt"
6"github.com/Masterminds/sprig/v3"
7"github.com/stretchr/testify/assert"
8"github.com/stretchr/testify/mock"
9v1alpha12 "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"
17v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
18"strings"
19"testing"
20"text/template"
21)
22
23func TestRenderController(t *testing.T) {
24lib.ZapLogger = zap.NewNop()
25
26templateClient := mocks.NewTemplateInterface(t)
27templateClient.On("List", mock.Anything, mock.Anything).Return(&v1alpha12.TemplateList{
28Items: []v1alpha12.Template{
29{
30ObjectMeta: v1.ObjectMeta{
31Name: "template",
32Namespace: "test",
33},
34Spec: v1alpha12.TemplateSpec{
35Kind: "Pod",
36ApiVersion: "v1",
37Data: "metadata:\n name: pod\nspec:\n abc: test",
38},
39},
40},
41}, nil).Maybe()
42triggerClient := mocks.NewTriggerInterface(t)
43triggerClient.On("List", mock.Anything, mock.Anything).Return(&v1alpha12.TriggerList{
44Items: []v1alpha12.Trigger{
45{
46ObjectMeta: v1.ObjectMeta{
47Name: "trigger",
48Namespace: "test",
49},
50Spec: v1alpha12.TriggerSpec{
51CreationConfigs: []v1alpha12.CreationConfig{
52{
53Name: "creation",
54LabelSelector: v1.LabelSelector{
55MatchExpressions: []v1.LabelSelectorRequirement{
56{
57Key: "test",
58Operator: "In",
59Values: []string{"test"},
60},
61},
62},
63AnnotationNamespace: "test",
64AnnotationTrigger: "test",
65TemplateRefs: []string{"test/template"},
66},
67},
68},
69},
70},
71}, nil).Maybe()
72
73ti := v1alpha12.TriggerInstance{
74Status: v1alpha12.TriggerInstanceStatus{
75ResourceStatus: []v1alpha12.ResourceStatus{
76{
77Name: "pod",
78Kind: "Pod",
79ApiVersion: "v1",
80Message: "REMOVED",
81Phase: "",
82Status: "REMOVED",
83},
84},
85},
86}
87
88scopeClient := mocks.NewScopeInterface(t)
89triggerInstanceClient := mocks.NewTriggerInstanceInterface(t)
90triggerInstanceClient.On("Get", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(&ti, nil).Maybe()
91triggerInstanceClient.On("updateStatus", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil).Maybe()
92
93clt := clientset.V1Alpha1Client{
94TriggerClient: triggerClient,
95TemplateClient: templateClient,
96ScopeClient: scopeClient,
97TriggerInstanceClient: triggerInstanceClient,
98}
99
100utils.Cl = &clt
101
102r := RenderController{}
103InitTestStorage()
104
105t.Run("Check getRenders", func(t *testing.T) {
106ti2 := v1alpha12.TriggerInstance{
107ObjectMeta: v1.ObjectMeta{
108Name: "test",
109Namespace: "test",
110Annotations: map[string]string{
111"test/test": "true",
112},
113},
114Status: v1alpha12.TriggerInstanceStatus{},
115}
116renderItems := r.GetRenders(context.Background(), &ti2)
117assert.Equal(t, 1, len(renderItems))
118})
119}
120
121func InitTestStorage() {
122var storageController = &storage.StorageController{}
123storageController.Start(false, false)
124storageController.UpdateScope(v1alpha12.Scope{
125ObjectMeta: v1.ObjectMeta{
126Name: "TestScope",
127},
128Spec: v1alpha12.ScopeSpec{
129Type: "mutation",
130Items: []v1alpha12.Item{
131{
132Name: "TestScopeItem",
133},
134},
135},
136})
137storageController.UpdateTrigger(&v1alpha12.Trigger{
138ObjectMeta: v1.ObjectMeta{
139Name: "trigger",
140Namespace: "test",
141},
142Spec: v1alpha12.TriggerSpec{
143CreationConfigs: []v1alpha12.CreationConfig{
144{
145Name: "creation",
146LabelSelector: v1.LabelSelector{
147MatchExpressions: []v1.LabelSelectorRequirement{
148{
149Key: "test",
150Operator: "In",
151Values: []string{"test"},
152},
153},
154},
155AnnotationNamespace: "test",
156AnnotationTrigger: "test",
157TemplateRefs: []string{"test/template"},
158},
159},
160},
161})
162storageController.UpdateTemplate(&v1alpha12.Template{
163ObjectMeta: v1.ObjectMeta{
164Name: "template",
165Namespace: "test",
166},
167Spec: v1alpha12.TemplateSpec{
168Kind: "Pod",
169ApiVersion: "v1",
170Data: "metadata:\n name: pod\nspec:\n abc: test",
171},
172})
173storage.Storage = storageController
174}
175
176func TestTemplateEngine(t *testing.T) {
177var Data = "{{% .spec.dataObj.spec.host %}}"
178var 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}
187templateEngine := template.New("common").
188Delims("{{%", "%}}").
189Funcs(template.FuncMap{
190"fromYaml": templates.FromYAML,
191}).
192Funcs(sprig.TxtFuncMap())
193temp, err := templateEngine.New("test").Parse(Data)
194if err != nil {
195_ = fmt.Errorf(fmt.Sprintf("TestTemplateEngine: ReloadTemplates failed %s", err))
196}
197var tempBuffer strings.Builder
198err = temp.Execute(&tempBuffer, tiObject)
199if err != nil {
200_ = fmt.Errorf(fmt.Sprintf("RenderController: getRenders failed %s", err))
201}
202fmt.Println(tempBuffer.String())
203}
204