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
38 var kubectlConfigmapOutput = `
47 "protPort": "tcp:4560",
50 "txMessages": ["RIC_X2_LOAD_INFORMATION"],
51 "rxMessages": ["RIC_X2_LOAD_INFORMATION"]
54 "namespace": "ricxapp",
61 type ConfigSample struct {
66 type MockedConfigMapper struct {
69 func (cm *MockedConfigMapper) UploadConfig() (cfg []XAppConfig) {
73 func (cm *MockedConfigMapper) CreateConfigMap(r XAppConfig) (errList []CMError, err error){
77 func (cm *MockedConfigMapper) UpdateConfigMap(r XAppConfig) (errList []CMError, err error){
81 func (cm *MockedConfigMapper) DeleteConfigMap(r XAppConfig) (c interface{}, err error){
85 func (cm *MockedConfigMapper) PurgeConfigMap(m XappDeploy) (c interface{}, err error){
89 func (cm *MockedConfigMapper) RestoreConfigMap(m XappDeploy, c interface{}) (err error) {
93 func (cm *MockedConfigMapper) ReadConfigMap(name string, ns string, c *interface{}) (err error) {
97 func (cm *MockedConfigMapper) ApplyConfigMap(r XAppConfig, action string) (err error) {
101 func (cm *MockedConfigMapper) FetchChart(name string) (err error) {
105 func (cm *MockedConfigMapper) GetMessages(name string) (msgs MessageTypes) {
110 func TestGetMessages(t *testing.T) {
112 expectedMsgs := MessageTypes{
113 TxMessages: []string{"RIC_X2_LOAD_INFORMATION"},
114 RxMessages: []string{"RIC_X2_LOAD_INFORMATION"},
117 KubectlExec = func(args string) (out []byte, err error) {
118 return []byte(kubectlConfigmapOutput), nil
121 result := cm.GetMessages("dummy-xapp")
122 if !reflect.DeepEqual(result, expectedMsgs) {
123 t.Errorf("TestGetMessages failed: expected: %v, got: %v", expectedMsgs, result)
127 func TestFetchChartFails(t *testing.T) {
130 if cm.FetchChart("dummy-xapp") == nil {
131 t.Errorf("TestFetchChart failed!")
135 func TestFetchChartSuccess(t *testing.T) {
138 HelmExec = func(args string) (out []byte, err error) {
142 if cm.FetchChart("dummy-xapp") != nil {
143 t.Errorf("TestFetchChart failed!")
147 func TestGetNamesFromHelmRepoSuccess(t *testing.T) {
149 expectedResult := []string{"anr", "appmgr", "dualco", "reporter", "uemgr"}
150 HelmExec = func(args string) (out []byte, err error) {
151 return []byte(helmSearchOutput), nil
154 names := cm.GetNamesFromHelmRepo()
155 if !reflect.DeepEqual(names, expectedResult) {
156 t.Errorf("GetNamesFromHelmRepo failed: expected %v, got %v", expectedResult, names)
160 func TestGetNamesFromHelmRepoFailure(t *testing.T) {
162 expectedResult := []string{}
163 HelmExec = func(args string) (out []byte, err error) {
164 return []byte(helmSearchOutput), errors.New("Command failed!")
167 names := cm.GetNamesFromHelmRepo()
169 t.Errorf("GetNamesFromHelmRepo failed: expected %v, got %v", expectedResult, names)
173 func TestApplyConfigMapSuccess(t *testing.T) {
175 m := ConfigMetadata{Name: "dummy-xapp", Namespace: "ricxapp"}
176 s := ConfigSample{5, "localhost"}
178 KubectlExec = func(args string) (out []byte, err error) {
179 log.Println("TestApplyConfigMapSuccess: ", args)
180 return []byte(`{"logger": {"level": 2}}`), nil
183 err := cm.ApplyConfigMap(XAppConfig{Metadata: m, Configuration: s}, "create")
185 t.Errorf("ApplyConfigMap failed: %v", err)
189 func TestRestoreConfigMapSuccess(t *testing.T) {
191 m := XappDeploy{Name: "dummy-xapp", Namespace: "ricxapp"}
192 s := ConfigSample{5, "localhost"}
194 KubectlExec = func(args string) (out []byte, err error) {
195 log.Println("TestRestoreConfigMapSuccess: ", args)
196 return []byte(`{"logger": {"level": 2}}`), nil
199 err := cm.RestoreConfigMap(m, s)
201 t.Errorf("RestoreConfigMap failed: %v", err)
205 func TestDeleteConfigMapSuccess(t *testing.T) {
208 HelmExec = func(args string) (out []byte, err error) {
209 return []byte("ok"), nil
212 KubectlExec = func(args string) (out []byte, err error) {
213 log.Println("TestDeleteConfigMapSuccess: ", args)
214 return []byte(`{"logger": {"level": 2}}`), nil
217 c, err := cm.DeleteConfigMap(XAppConfig{})
219 t.Errorf("DeleteConfigMap failed: %v -> %v", err, c)
223 func TestPurgeConfigMapSuccess(t *testing.T) {
226 HelmExec = func(args string) (out []byte, err error) {
227 return []byte("ok"), nil
230 KubectlExec = func(args string) (out []byte, err error) {
231 return []byte(`{"logger": {"level": 2}}`), nil
234 c, err := cm.PurgeConfigMap(XappDeploy{})
236 t.Errorf("PurgeConfigMap failed: %v -> %v", err, c)
240 func TestCreateConfigMapFails(t *testing.T) {
243 c, err := cm.CreateConfigMap(XAppConfig{})
245 t.Errorf("CreateConfigMap failed: %v -> %v", err, c)
249 func TestUpdateConfigMapFails(t *testing.T) {
252 c, err := cm.UpdateConfigMap(XAppConfig{})
254 t.Errorf("CreateConfigMap failed: %v -> %v", err, c)
258 func TestValidationSuccess(t *testing.T) {
261 var cfg map[string]interface{}
263 err := json.Unmarshal([]byte(`{"local": {"host": ":8080"}, "logger": {"level": 3}}`), &cfg)
265 err = cm.ReadFile("./test/schema.json", &d)
267 t.Errorf("ReadFile failed: %v -> %v", err, d)
270 feedback, err := cm.doValidate(d, cfg)
272 t.Errorf("doValidate failed: %v -> %v", err, feedback)
276 func TestValidationFails(t *testing.T) {
279 var cfg map[string]interface{}
281 err := json.Unmarshal([]byte(`{"local": {"host": ":8080"}, "logger": {"level": "INVALID"}}`), &cfg)
283 err = cm.ReadFile("./test/schema.json", &d)
285 t.Errorf("ConfigMetadata failed: %v -> %v", err, d)
288 feedback, err := cm.doValidate(d, cfg)
290 t.Errorf("doValidate should faile but didn't: %v -> %v", err, feedback)
293 log.Println("Feedbacks: ", feedback)