2 ==================================================================================
3 Copyright (c) 2019 AT&T Intellectual Property.
4 Copyright (c) 2019 Nokia
6 Licensed under the Apache License, Version 2.0 (the "License");
7 you may not use this file except in compliance with the License.
8 You may obtain a copy of the License at
10 http://www.apache.org/licenses/LICENSE-2.0
12 Unless required by applicable law or agreed to in writing, software
13 distributed under the License is distributed on an "AS IS" BASIS,
14 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 See the License for the specific language governing permissions and
16 limitations under the License.
17 ==================================================================================
30 var helmSearchOutput = `
31 helm-repo/anr 0.0.1 1.0 Helm Chart for Nokia ANR (Automatic Neighbour Relation) xAPP
32 helm-repo/appmgr 0.0.2 1.0 Helm Chart for xAppManager
33 helm-repo/dualco 0.0.1 1.0 Helm Chart for Nokia dualco xAPP
34 helm-repo/reporter 0.0.1 1.0 Helm Chart for Reporting xAPP
35 helm-repo/uemgr 0.0.1 1.0 Helm Chart for Nokia uemgr xAPP
37 type ConfigSample struct {
42 type MockedConfigMapper struct {
45 func (cm *MockedConfigMapper) UploadConfig() (cfg []XAppConfig) {
49 func (cm *MockedConfigMapper) CreateConfigMap(r XAppConfig) (errList []CMError, err error){
53 func (cm *MockedConfigMapper) UpdateConfigMap(r XAppConfig) (errList []CMError, err error){
57 func (cm *MockedConfigMapper) DeleteConfigMap(r XAppConfig) (c interface{}, err error){
61 func (cm *MockedConfigMapper) PurgeConfigMap(m XappDeploy) (c interface{}, err error){
65 func (cm *MockedConfigMapper) RestoreConfigMap(m XappDeploy, c interface{}) (err error) {
69 func (cm *MockedConfigMapper) ReadConfigMap(name string, ns string, c *interface{}) (err error) {
73 func (cm *MockedConfigMapper) ApplyConfigMap(r XAppConfig, action string) (err error) {
77 func (cm *MockedConfigMapper) FetchChart(name string) (err error) {
81 func (cm *MockedConfigMapper) GetMessages(name string) (msgs MessageTypes) {
86 func TestGetMessages(t *testing.T) {
88 expectedMsgs := MessageTypes{}
90 if !reflect.DeepEqual(cm.GetMessages("dummy-xapp"), expectedMsgs) {
91 t.Errorf("TestGetMessages failed!")
95 func TestFetchChartFails(t *testing.T) {
98 if cm.FetchChart("dummy-xapp") == nil {
99 t.Errorf("TestFetchChart failed!")
103 func TestFetchChartSuccess(t *testing.T) {
106 HelmExec = func(args string) (out []byte, err error) {
110 if cm.FetchChart("dummy-xapp") != nil {
111 t.Errorf("TestFetchChart failed!")
115 func TestGetNamesFromHelmRepoSuccess(t *testing.T) {
117 expectedResult := []string{"anr", "appmgr", "dualco", "reporter", "uemgr"}
118 HelmExec = func(args string) (out []byte, err error) {
119 return []byte(helmSearchOutput), nil
122 names := cm.GetNamesFromHelmRepo()
123 if !reflect.DeepEqual(names, expectedResult) {
124 t.Errorf("GetNamesFromHelmRepo failed: expected %v, got %v", expectedResult, names)
128 func TestGetNamesFromHelmRepoFailure(t *testing.T) {
130 expectedResult := []string{}
131 HelmExec = func(args string) (out []byte, err error) {
132 return []byte(helmSearchOutput), errors.New("Command failed!")
135 names := cm.GetNamesFromHelmRepo()
137 t.Errorf("GetNamesFromHelmRepo failed: expected %v, got %v", expectedResult, names)
141 func TestApplyConfigMapSuccess(t *testing.T) {
143 m := ConfigMetadata{Name: "dummy-xapp", Namespace: "ricxapp"}
144 s := ConfigSample{5, "localhost"}
146 KubectlExec = func(args string) (out []byte, err error) {
147 log.Println("TestApplyConfigMapSuccess: ", args)
148 return []byte(`{"logger": {"level": 2}}`), nil
151 err := cm.ApplyConfigMap(XAppConfig{Metadata: m, Configuration: s}, "create")
153 t.Errorf("ApplyConfigMap failed: %v", err)
157 func TestRestoreConfigMapSuccess(t *testing.T) {
159 m := XappDeploy{Name: "dummy-xapp", Namespace: "ricxapp"}
160 s := ConfigSample{5, "localhost"}
162 KubectlExec = func(args string) (out []byte, err error) {
163 log.Println("TestRestoreConfigMapSuccess: ", args)
164 return []byte(`{"logger": {"level": 2}}`), nil
167 err := cm.RestoreConfigMap(m, s)
169 t.Errorf("RestoreConfigMap failed: %v", err)
173 func TestDeleteConfigMapSuccess(t *testing.T) {
176 HelmExec = func(args string) (out []byte, err error) {
177 return []byte("ok"), nil
180 KubectlExec = func(args string) (out []byte, err error) {
181 log.Println("TestDeleteConfigMapSuccess: ", args)
182 return []byte(`{"logger": {"level": 2}}`), nil
185 c, err := cm.DeleteConfigMap(XAppConfig{})
187 t.Errorf("DeleteConfigMap failed: %v -> %v", err, c)
191 func TestPurgeConfigMapSuccess(t *testing.T) {
194 HelmExec = func(args string) (out []byte, err error) {
195 return []byte("ok"), nil
198 KubectlExec = func(args string) (out []byte, err error) {
199 return []byte(`{"logger": {"level": 2}}`), nil
202 c, err := cm.PurgeConfigMap(XappDeploy{})
204 t.Errorf("PurgeConfigMap failed: %v -> %v", err, c)
208 func TestCreateConfigMapFails(t *testing.T) {
211 c, err := cm.CreateConfigMap(XAppConfig{})
213 t.Errorf("CreateConfigMap failed: %v -> %v", err, c)
217 func TestUpdateConfigMapFails(t *testing.T) {
220 c, err := cm.UpdateConfigMap(XAppConfig{})
222 t.Errorf("CreateConfigMap failed: %v -> %v", err, c)
226 func TestValidationSuccess(t *testing.T) {
229 var cfg map[string]interface{}
231 err := json.Unmarshal([]byte(`{"local": {"host": ":8080"}, "logger": {"level": 3}}`), &cfg)
233 err = cm.ReadFile("./test/schema.json", &d)
235 t.Errorf("ReadFile failed: %v -> %v", err, d)
238 feedback, err := cm.doValidate(d, cfg)
240 t.Errorf("doValidate failed: %v -> %v", err, feedback)
244 func TestValidationFails(t *testing.T) {
247 var cfg map[string]interface{}
249 err := json.Unmarshal([]byte(`{"local": {"host": ":8080"}, "logger": {"level": "INVALID"}}`), &cfg)
251 err = cm.ReadFile("./test/schema.json", &d)
253 t.Errorf("ConfigMetadata failed: %v -> %v", err, d)
256 feedback, err := cm.doValidate(d, cfg)
258 t.Errorf("doValidate should faile but didn't: %v -> %v", err, feedback)
261 log.Println("Feedbacks: ", feedback)