Adding Unit Test cases
[ric-plt/appmgr.git] / pkg / helm / helm_test.go
1 /*
2 ==================================================================================
3   Copyright (c) 2019 AT&T Intellectual Property.
4   Copyright (c) 2019 Nokia
5
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
9
10        http://www.apache.org/licenses/LICENSE-2.0
11
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 ==================================================================================
18 */
19
20 package helm
21
22 import (
23         "errors"
24         "github.com/spf13/viper"
25         "os"
26         "reflect"
27         "strconv"
28         "strings"
29         "testing"
30         "github.com/stretchr/testify/assert"
31         "gerrit.o-ran-sc.org/r/ric-plt/appmgr/pkg/cm"
32         "gerrit.o-ran-sc.org/r/ric-plt/appmgr/pkg/appmgr"
33         "gerrit.o-ran-sc.org/r/ric-plt/appmgr/pkg/models"
34         "gerrit.o-ran-sc.org/r/ric-plt/appmgr/pkg/util"
35 )
36
37 var caughtKubeExecArgs string
38 var kubeExecRetOut string
39 var kubeExecRetErr error
40 var caughtHelmExecArgs string
41 var helmExecRetOut string
42 var helmExecRetErr error
43 var helmStatusOutput = `
44 LAST DEPLOYED: Sat Mar  9 06:50:45 2019
45 NAMESPACE: default
46 STATUS: DEPLOYED
47
48 RESOURCES:
49 ==> v1/Pod(related)
50 NAME                        READY  STATUS   RESTARTS  AGE
51 dummy-xapp-8984fc9fd-bkcbp  1/1    Running  0         55m
52 dummy-xapp-8984fc9fd-l6xch  1/1    Running  0         55m
53 dummy-xapp-8984fc9fd-pp4hg  1/1    Running  0         55m
54
55 ==> v1/Service
56 NAME                         TYPE       CLUSTER-IP      EXTERNAL-IP  PORT(S)  AGE
57 dummy-xapp-dummy-xapp-chart  ClusterIP  10.102.184.212  <none>       80/TCP   55m
58
59 ==> v1beta1/Deployment
60 NAME        READY  UP-TO-DATE  AVAILABLE  AGE
61 dummy-xapp  3/3    3           3          55m
62 `
63
64 var helListAllOutput = `Next: ""
65 Releases:
66 - AppVersion: "1.0"
67   Chart: dummy-xapp-chart-0.1.0
68   Name: dummy-xapp
69   Namespace: default
70   Revision: 1
71   Status: DEPLOYED
72   Updated: Mon Mar 11 06:55:05 2019
73 - AppVersion: "2.0"
74   Chart: dummy-xapp-chart-0.1.0
75   Name: dummy-xapp2
76   Namespace: default
77   Revision: 1
78   Status: DEPLOYED
79   Updated: Mon Mar 11 06:55:05 2019
80 - AppVersion: "1.0"
81   Chart: appmgr-0.0.1
82   Name: appmgr
83   Namespace: default
84   Revision: 1
85   Status: DEPLOYED
86   Updated: Sun Mar 24 07:17:00 2019
87   `
88
89 var helListOutput = `Next: ""
90 Releases:
91 - AppVersion: "1.0"
92   Chart: dummy-xapp-chart-0.1.0
93   Name: dummy-xapp
94   Namespace: default
95   Revision: 1
96   Status: DEPLOYED
97   Updated: Mon Mar 11 06:55:05 2019
98   `
99
100 var kubeServiceOutput = `{
101     "apiVersion": "v1",
102     "kind": "Service",
103     "metadata": {
104         "creationTimestamp": "2020-03-31T12:27:12Z",
105         "labels": {
106             "app": "ricxapp-dummy-xapp",
107             "chart": "dummy-xapp-0.0.4",
108             "heritage": "Tiller",
109             "release": "dummy-xapp"
110         },
111         "name": "service-ricxapp-dummy-xapp-rmr",
112         "namespace": "ricxapp",
113         "resourceVersion": "4423380",
114         "selfLink": "/api/v1/namespaces/ricxapp/services/service-ricxapp-dummy-xapp-rmr",
115         "uid": "2254b77d-7dd6-43e0-beff-3e2a7b24c89a"
116     },
117     "spec": {
118         "clusterIP": "10.98.239.107",
119         "ports": [
120             {
121                 "name": "rmrdata",
122                 "port": 4560,
123                 "protocol": "TCP",
124                 "targetPort": "rmrdata"
125             },
126             {
127                 "name": "rmrroute",
128                 "port": 4561,
129                 "protocol": "TCP",
130                 "targetPort": "rmrroute"
131             }
132         ],
133         "selector": {
134             "app": "ricxapp-dummy-xapp",
135             "release": "dummy-xapp"
136         },
137         "sessionAffinity": "None",
138         "type": "ClusterIP"
139     },
140     "status": {
141         "loadBalancer": {}
142     }
143 }`
144
145
146 // Test cases
147 func TestMain(m *testing.M) {
148         appmgr.Init()
149         appmgr.Logger.SetLevel(0)
150         
151         code := m.Run()
152         os.Exit(code)
153 }
154
155 func TestInit(t *testing.T) {
156         defer func() { resetHelmExecMock() }()
157         var expectedHelmCommand string = ""
158         helmExec = mockedHelmExec
159
160         NewHelm().Init()
161         if cm.EnvHelmVersion == cm.HELM_VERSION_2{
162                 expectedHelmCommand = "init -c --skip-refresh"
163                 if caughtHelmExecArgs != expectedHelmCommand {
164                         t.Errorf("Init failed: expected %v, got %v", expectedHelmCommand, caughtHelmExecArgs)
165                 }
166         }
167 }
168
169 func TestAddRepoSuccess(t *testing.T) {
170         defer func() {
171                 resetHelmExecMock()
172                 removeTestUsernameFile()
173                 removeTestPasswordFile()
174         }()
175         helmExec = mockedHelmExec
176
177         if err := writeTestUsernameFile(); err != nil {
178                 t.Errorf("AddRepo username file create failed: %s", err)
179                 return
180         }
181         if err := writeTestPasswordFile(); err != nil {
182                 t.Errorf("AddRepo password file create failed: %s", err)
183                 return
184         }
185
186         if _, err := NewHelm().AddRepo(); err != nil {
187                 t.Errorf("AddRepo failed: %v", err)
188         }
189
190         if !strings.Contains(caughtHelmExecArgs, "repo add") {
191                 t.Errorf("AddRepo failed: expected %v, got %v", "repo add", caughtHelmExecArgs)
192         }
193         NewHelm().initDone = true
194         NewHelm().Initialize()
195 }
196
197 func TestFuncsWithHelmv3(t *testing.T){
198         var err error
199         name := "dymmy-xapp"
200
201         if err = os.Setenv("HELMVERSION", "3"); err != nil { 
202                 t.Logf("Tiller Env Setting Failed: %v", err.Error())      
203         }           
204         helm := NewHelm()
205         
206         xapp, err := helm.Status(name)
207         if err == nil {
208                 t.Logf("Status returned: %v", err)
209         }
210         xapp2, err := helm.Delete(name)
211         if err != nil {
212                 assert.NotEqual(t, err, "Error: release: not found")            
213         }else{
214                 t.Logf("xapp : %+v, Xapp2 : %+v",xapp,xapp2)
215         }
216         helm.Init()
217         
218         if version := helm.GetVersion(name); version != "" {
219                 t.Logf("GetVersion expected to return empty string, got %v", version)
220         }
221         
222         x := models.XappDescriptor{XappName: &name, Namespace: "ricxapp"}
223         x.OverrideFile = "../../test/dummy-xapp_values.json"
224         if args := helm.GetInstallArgs(x, false); args == "" {
225                 t.Logf("GetInstallArgs failed: got %v", args)
226         }
227
228         if err = os.Setenv("HELMVERSION", "2"); err != nil { 
229                 t.Logf("after set Tiller Env Setting Failed: %v", err.Error())      
230         }
231  
232 }
233
234 func TestAddRepoReturnsErrorIfNoUsernameFile(t *testing.T) {
235         if _, err := NewHelm().AddRepo(); err == nil {
236                 t.Errorf("AddRepo expected to fail but it didn't")
237         }
238 }
239
240 func TestAddRepoReturnsErrorIfNoPasswordFile(t *testing.T) {
241         defer func() { resetHelmExecMock(); removeTestUsernameFile() }()
242         helmExec = mockedHelmExec
243
244         if err := writeTestUsernameFile(); err != nil {
245                 t.Errorf("AddRepo username file create failed: %s", err)
246                 return
247         }
248         if _, err := NewHelm().AddRepo(); err == nil {
249                 t.Errorf("AddRepo expected to fail but it didn't")
250         }
251 }
252
253 func TestInstallSuccess(t *testing.T) {
254         name := "dummy-xapp"
255         xappDesc := models.XappDescriptor{XappName: &name, Namespace: "ricxapp"}
256
257         defer func() { resetHelmExecMock() }()
258         helmExec = mockedHelmExec
259         helmExecRetOut = helmStatusOutput
260
261         defer func() { resetKubeExecMock() }()
262         kubeExec = mockedKubeExec
263         kubeExecRetOut = kubeServiceOutput
264
265         xapp, err := NewHelm().Install(xappDesc)
266         if err != nil {
267                 t.Errorf("Install failed: %v", err)
268         }
269         validateXappModel(t, xapp)
270 }
271
272 func TestInstallReturnsErrorIfHelmRepoUpdateFails(t *testing.T) {
273         name := "dummy-xapp"
274         xappDesc := models.XappDescriptor{XappName: &name, Namespace: "ricxapp"}
275
276         defer func() { resetHelmExecMock() }()
277         helmExec = mockedHelmExec
278         helmExecRetErr = errors.New("some helm command error")
279
280         if _, err := NewHelm().Install(xappDesc); err == nil {
281                 t.Errorf("Install expected to fail but it didn't")
282         }
283 }
284
285 func TestStatusSuccess(t *testing.T) {
286         name := "dummy-xapp"
287
288         defer func() { resetHelmExecMock() }()
289         helmExec = mockedHelmExec
290         helmExecRetOut = helmStatusOutput
291
292         xapp, err := NewHelm().Status(name)
293         if err != nil {
294                 t.Errorf("Status failed: %v", err)
295         }
296         validateXappModel(t, xapp)
297 }
298
299 func TestStatusReturnsErrorIfHelmStatusFails(t *testing.T) {
300         name := "dummy-xapp"
301         
302         defer func() { resetHelmExecMock() }()
303         helmExec = mockedHelmExec
304         helmExecRetErr = errors.New("some helm command error")
305
306         if _, err := NewHelm().Status(name); err == nil {
307                 t.Errorf("Status expected to fail but it didn't")
308         }else{
309                 assert.Equal(t, err, helmExecRetErr)            
310         }
311 }
312
313 func TestParseStatusSuccess(t *testing.T) {
314         defer func() { resetHelmExecMock() }()
315         var expectedHelmCommand string = ""
316         helmExec = mockedHelmExec
317         helmExecRetOut = helListOutput
318
319         defer func() { resetKubeExecMock() }()
320         kubeExec = mockedKubeExec
321         kubeExecRetOut = kubeServiceOutput
322
323         xapp, err := NewHelm().ParseStatus("dummy-xapp", helmStatusOutput)
324         if err != nil {
325                 t.Errorf("ParseStatus failed: %v", err)
326         }
327         
328         validateXappModel(t, xapp)
329
330         if cm.EnvHelmVersion == cm.HELM_VERSION_2 {
331                 expectedHelmCommand = "list --deployed --output yaml --namespace=ricxapp dummy-xapp"
332         }else {
333                 expectedHelmCommand = "list --deployed --output yaml --namespace=ricxapp -f dummy-xapp"
334         }
335         if caughtHelmExecArgs != expectedHelmCommand {
336                 t.Errorf("ParseStatus failed: expected %v, got %v", expectedHelmCommand, caughtHelmExecArgs)
337         }
338 }
339
340 func TestListSuccess(t *testing.T) {
341         defer func() { resetHelmExecMock() }()
342         helmExec = mockedHelmExec
343         helmExecRetOut = helListAllOutput
344
345         names, err := NewHelm().List()
346         if err != nil {
347                 t.Errorf("List failed: %v", err)
348         }
349
350         if !reflect.DeepEqual(names, []string{"dummy-xapp", "dummy-xapp2"}) {
351                 t.Errorf("List failed: %v", err)
352         }
353         expectedHelmCommand := "list --all --deployed --output yaml --namespace=ricxapp"
354         if caughtHelmExecArgs != expectedHelmCommand {
355                 t.Errorf("List: expected %v, got %v", expectedHelmCommand, caughtHelmExecArgs)
356         }
357         
358         var str models.AllDeployableXapps
359         str = NewHelm().SearchAll()     
360         if str != nil {
361                 t.Logf("Search end..str : %s\n",str)    
362         }else{
363                 assert.Nil(t,str)               
364         }
365 }
366
367 func TestListReturnsErrorIfHelmListFails(t *testing.T) {
368         defer func() { resetHelmExecMock() }()
369         helmExec = mockedHelmExec
370         helmExecRetErr = errors.New("some helm command error")
371
372         if _, err := NewHelm().List(); err == nil {
373                 t.Errorf("List expected to fail but it didn't")
374         }
375
376 }
377
378 func TestDeleteSuccess(t *testing.T) {
379         name := "dummy-xapp"
380
381         var expectedHelmCommand string = ""
382         defer func() { resetHelmExecMock() }()
383         helmExec = mockedHelmExec
384         helmExecRetOut = helmStatusOutput
385
386         defer func() { resetKubeExecMock() }()
387         kubeExec = mockedKubeExec
388         kubeExecRetOut = kubeServiceOutput
389
390         xapp, err := NewHelm().Delete(name)
391         if err != nil {
392                 t.Errorf("Delete failed: %v", err)
393         }
394
395         validateXappModel(t, xapp)
396
397         if cm.EnvHelmVersion == cm.HELM_VERSION_2 {
398                 expectedHelmCommand = "del --purge dummy-xapp"
399         } else {
400                 expectedHelmCommand =   "uninstall dummy-xapp -n ricxapp"
401         }
402         if caughtHelmExecArgs != expectedHelmCommand {
403                 t.Errorf("Delete failed: expected %v, got %v", expectedHelmCommand, caughtHelmExecArgs)
404         }
405 }
406
407 func TestDeleteReturnsErrorIfHelmStatusFails(t *testing.T) {
408         name := "dummy-xapp"
409
410         defer func() { resetHelmExecMock() }()
411         helmExec = mockedHelmExec
412         helmExecRetErr = errors.New("some helm command error")
413
414         if _, err := NewHelm().Delete(name); err == nil {
415                 t.Errorf("Delete expected to fail but it didn't")
416         }
417 }
418
419 func TestFetchSuccessIfCmdArgHasTestSuffix(t *testing.T) {
420         if err := NewHelm().Fetch("lsfuis", "../../helm_chart/appmgr/values.yaml"); err != nil {
421                 t.Errorf("Fetch failed: %v", err)
422         }
423 }
424
425 func TestGetVersionSuccess(t *testing.T) {
426         defer func() { resetHelmExecMock() }()
427         var expectedHelmCommand string = ""
428         helmExec = mockedHelmExec
429         helmExecRetOut = helListOutput
430
431         if version := NewHelm().GetVersion("dummy-xapp"); version != "1.0" {
432                 t.Errorf("GetVersion failed: expected 1.0, got %v", version)
433         }
434
435         if cm.EnvHelmVersion == cm.HELM_VERSION_2{
436                 expectedHelmCommand = "list --deployed --output yaml --namespace=ricxapp dummy-xapp"
437         }else {
438                 expectedHelmCommand = "list --deployed --output yaml --namespace=ricxapp -f dummy-xapp"
439         }
440         if caughtHelmExecArgs != expectedHelmCommand {
441                 t.Errorf("GetVersion failed: expected %v, got %v", expectedHelmCommand, caughtHelmExecArgs)
442         }
443 }
444
445 func TestGetVersionReturnsEmptyStringIfHelmListFails(t *testing.T) {
446         defer func() { resetHelmExecMock() }()
447         helmExec = mockedHelmExec
448         helmExecRetErr = errors.New("some helm command error")
449
450         if version := NewHelm().GetVersion("dummy-xapp"); version != "" {
451                 t.Errorf("GetVersion expected to return empty string, got %v", version)
452         }
453 }
454
455 func TestGetAddressSuccess(t *testing.T) {
456         ip, port := NewHelm().GetAddress(helmStatusOutput)
457         if ip != "10.102.184.212" {
458                 t.Errorf("GetAddress failed: expected 10.102.184.212, got %v", ip)
459         }
460         if port != "80/TCP" {
461                 t.Errorf("GetAddress failed: expected 80/TCP, got %v", port)
462         }
463 }
464
465 func TestGetEndpointInfoSuccess(t *testing.T) {
466         defer func() { resetKubeExecMock() }()
467         kubeExec = mockedKubeExec
468         kubeExecRetOut = kubeServiceOutput
469
470         svc, port := NewHelm().GetEndpointInfo("dummy-xapp")
471         
472         expectedSvc := "service-ricxapp-dummy-xapp-rmr.ricxapp"
473         if svc != expectedSvc {
474                 t.Errorf("GetEndpointInfo failed: expected %v, got %v", expectedSvc, svc)
475         }
476         if port != 4560 {
477                 t.Errorf("GetEndpointInfo failed: expected port 4560, got %v", port)
478         }
479         expectedKubeCommand := " get service -n ricxapp service-ricxapp-dummy-xapp-rmr -o json"
480         if caughtKubeExecArgs != expectedKubeCommand {
481                 t.Errorf("GetEndpointInfo failed: expected %v, got %v", expectedKubeCommand, caughtKubeExecArgs)
482         }
483 }
484
485 func TestGetEndpointInfoReturnsDefaultPortIfJsonParseFails(t *testing.T) {
486         defer func() { resetKubeExecMock() }()
487         kubeExec = mockedKubeExec
488         kubeExecRetOut = "not-json-syntax"
489
490         svc, port := NewHelm().GetEndpointInfo("dummy-xapp")
491         expectedSvc := "service-ricxapp-dummy-xapp-rmr.ricxapp"
492         if svc != expectedSvc {
493                 t.Errorf("GetEndpointInfo failed: expected %v, got %v", expectedSvc, svc)
494         }
495         if port != 4560 {
496                 t.Errorf("GetEndpointInfo failed: expected port 4560, got %v", port)
497         }
498 }
499
500 func TestGetEndpointInfoReturnsDefaultPortIfKubeGetServiceFails(t *testing.T) {
501         defer func() { resetKubeExecMock() }()
502         kubeExec = mockedKubeExec
503         kubeExecRetErr = errors.New("some helm command error")
504
505         svc, port := NewHelm().GetEndpointInfo("dummy-xapp")
506         expectedSvc := "service-ricxapp-dummy-xapp-rmr.ricxapp"
507         if svc != expectedSvc {
508                 t.Errorf("GetEndpointInfo failed: expected %v, got %v", expectedSvc, svc)
509         }
510         if port != 4560 {
511                 t.Errorf("GetEndpointInfo failed: expected port 4560, got %v", port)
512         }
513 }
514
515 func TestHelmStatusAllSuccess(t *testing.T) {
516         defer func() { resetHelmExecMock() }()
517         helmExec = mockedHelmExec
518         helmExecRetOut = helListAllOutput
519
520         if _, err := NewHelm().StatusAll(); err != nil {
521                 t.Errorf("StatusAll failed: %v", err)
522         }
523         // Todo: check StatusAll response content
524 }
525
526 func TestStatusAllReturnsErrorIfHelmListFails(t *testing.T) {
527         defer func() { resetHelmExecMock() }()
528         helmExec = mockedHelmExec
529         helmExecRetErr = errors.New("some helm command error")
530
531         if _, err := NewHelm().StatusAll(); err == nil {
532                 t.Errorf("StatusAll expected to fail but it didn't")
533         }
534 }
535
536 func TestGetNamesSuccess(t *testing.T) {
537         names, err := NewHelm().GetNames(helListAllOutput)
538         if err != nil {
539                 t.Errorf("GetNames failed: %v", err)
540         }
541         if !reflect.DeepEqual(names, []string{"dummy-xapp", "dummy-xapp2"}) {
542                 t.Errorf("GetNames failed: %v", err)
543         }
544 }
545
546 func TestGetNamesFail(t *testing.T) {
547         names, err := NewHelm().GetNames("helListAll")
548         if err != nil {
549                 t.Errorf("GetNames failed: %v", err)
550         }
551         if reflect.DeepEqual(names, []string{"dummy-xapp", "dummy-xapp2"}) {
552                 t.Errorf("GetNames succ")
553         }
554 }
555 func TestAddTillerEnv(t *testing.T) {
556         if err := NewHelm().AddTillerEnv(); err != nil {
557                 t.Errorf("AddTillerEnv failed!")
558         }
559 }
560
561 func TestGetInstallArgs(t *testing.T) {
562         name := "dummy-xapp"
563         var expectedArgs string = ""
564
565         x := models.XappDescriptor{XappName: &name, Namespace: "ricxapp"}
566
567         if cm.EnvHelmVersion == cm.HELM_VERSION_3 {
568                 expectedArgs = "install dummy-xapp helm-repo/dummy-xapp --namespace=ricxapp"
569         }else {
570                 expectedArgs = "install helm-repo/dummy-xapp --namespace=ricxapp --name=dummy-xapp"
571         }
572
573         if args := NewHelm().GetInstallArgs(x, false); args != expectedArgs {
574                 t.Errorf("GetInstallArgs failed: expected '%v', got '%v'", expectedArgs, args)
575         }
576
577         expectedArgs += " --set ricapp.appconfig.override=dummy-xapp-appconfig"
578         if args := NewHelm().GetInstallArgs(x, true); args != expectedArgs {
579                 t.Errorf("GetInstallArgs failed: expected %v, got %v", expectedArgs, args)
580         }
581
582         x.HelmVersion = "1.2.3"
583         if cm.EnvHelmVersion == cm.HELM_VERSION_3 {
584                 expectedArgs = "install dummy-xapp helm-repo/dummy-xapp --namespace=ricxapp --version=1.2.3"
585         } else {
586                 expectedArgs = "install helm-repo/dummy-xapp --namespace=ricxapp --version=1.2.3 --name=dummy-xapp"
587         }
588         if args := NewHelm().GetInstallArgs(x, false); args != expectedArgs {
589                 t.Errorf("GetInstallArgs failed: expected %v, got %v", expectedArgs, args)
590         }
591
592
593         x.ReleaseName = "ueec-xapp"
594         if cm.EnvHelmVersion == cm.HELM_VERSION_3 {
595                 expectedArgs = "install dummy-xapp helm-repo/dummy-xapp --namespace=ricxapp --version=1.2.3"
596         } else {
597                 expectedArgs = "install helm-repo/dummy-xapp --namespace=ricxapp --version=1.2.3 --name=ueec-xapp"
598         }
599         if args := NewHelm().GetInstallArgs(x, false); args != expectedArgs {
600                 t.Errorf("GetInstallArgs failed: expected %v, got %v", expectedArgs, args)
601         }
602
603         x.OverrideFile = "../../test/dummy-xapp_values.json"
604         expectedArgs += " -f=/tmp/appmgr_override.yaml"
605         if args := NewHelm().GetInstallArgs(x, false); args != expectedArgs {
606                 t.Errorf("GetInstallArgs failed: expected %v, got %v", expectedArgs, args)
607         }
608 }
609
610 func writeTestUsernameFile() error {
611         f, err := os.Create(viper.GetString("helm.helm-username-file"))
612         if err != nil {
613                 return err
614         }
615         _, err = f.WriteString("some-username")
616         f.Close()
617         return err
618 }
619
620 func removeTestUsernameFile() error {
621         return os.Remove(viper.GetString("helm.helm-username-file"))
622 }
623
624 func writeTestPasswordFile() (err error) {
625         f, err := os.Create(viper.GetString("helm.helm-password-file"))
626         if err != nil {
627                 return err
628         }
629
630         _, err = f.WriteString("some-password")
631         f.Close()
632         return err
633 }
634
635 func removeTestPasswordFile() error {
636         return os.Remove(viper.GetString("helm.helm-password-file"))
637 }
638
639 func getXappData() (x models.Xapp) {
640         //name1 := "dummy-xapp-8984fc9fd-l6xch"
641         //name2 := "dummy-xapp-8984fc9fd-pp4hg"
642         x = generateXapp("dummy-xapp", "deployed", "1.0", "dummy-xapp-8984fc9fd-bkcbp", "running", "service-ricxapp-dummy-xapp-rmr.ricxapp", "4560")
643         //x.Instances = append(x.Instances, x.Instances[0])
644         //x.Instances = append(x.Instances, x.Instances[0])
645         //x.Instances[1].Name = &name1
646         //x.Instances[2].Name = &name2
647
648         return x
649 }
650
651 func generateXapp(name, status, ver, iname, istatus, ip, port string) (x models.Xapp) {
652         x.Name = &name
653         x.Status = status
654         x.Version = ver
655         p, _ := strconv.Atoi(port)
656         var msgs appmgr.RtmData
657
658         instance := &models.XappInstance{
659                 Name:       &iname,
660                 Status:     istatus,
661                 IP:         ip,
662                 Port:       int64(p),
663                 TxMessages: msgs.TxMessages,
664                 RxMessages: msgs.RxMessages,
665         }
666         x.Instances = append(x.Instances, instance)
667
668         return
669 }
670
671 func mockedKubeExec(args string) (out []byte, err error) {
672         caughtKubeExecArgs = args
673         return []byte(kubeExecRetOut), kubeExecRetErr
674 }
675
676 func resetKubeExecMock() {
677         kubeExec = util.KubectlExec
678         caughtKubeExecArgs = ""
679         kubeExecRetOut = ""
680         kubeExecRetErr = nil
681 }
682
683 func mockedHelmExec(args string) (out []byte, err error) {
684         caughtHelmExecArgs = args
685         return []byte(helmExecRetOut), helmExecRetErr
686 }
687
688 func resetHelmExecMock() {
689         helmExec = util.HelmExec
690         caughtHelmExecArgs = ""
691         helmExecRetOut = ""
692         helmExecRetErr = nil
693 }
694
695 func validateXappModel(t *testing.T, xapp models.Xapp) {
696         expXapp := getXappData()
697         xapp.Version = "1.0"
698
699         if *expXapp.Name != *xapp.Name || expXapp.Status != xapp.Status || expXapp.Version != xapp.Version {
700                 t.Errorf("\n%v \n%v", *xapp.Name, *expXapp.Name)
701         }
702
703         if *expXapp.Instances[0].Name != *xapp.Instances[0].Name || expXapp.Instances[0].Status != xapp.Instances[0].Status {
704                 t.Errorf("\n1:%v 2:%v", *expXapp.Instances[0].Name, *xapp.Instances[0].Name)
705         }
706
707         if expXapp.Instances[0].IP != xapp.Instances[0].IP || expXapp.Instances[0].Port != xapp.Instances[0].Port {
708                 t.Errorf("\n%v - %v, %v - %v", expXapp.Instances[0].IP, xapp.Instances[0].IP, expXapp.Instances[0].Port, xapp.Instances[0].Port)
709         }
710 }