3bf06e61b1fc56a133e0f06424213053b229d116
[icn/sdwan.git] /
1 // SPDX-License-Identifier: Apache-2.0\r
2 // Copyright (c) 2020 Intel Corporation\r
3 \r
4 package controller\r
5 \r
6 import (\r
7         "reflect"\r
8         "strings"\r
9         "testing"\r
10 \r
11         "github.com/open-ness/EMCO/src/orchestrator/pkg/infra/db"\r
12         "github.com/open-ness/EMCO/src/orchestrator/pkg/module/types"\r
13 \r
14         pkgerrors "github.com/pkg/errors"\r
15 )\r
16 \r
17 func TestCreateController(t *testing.T) {\r
18         testCases := []struct {\r
19                 label         string\r
20                 inp           Controller\r
21                 expectedError string\r
22                 mockdb        *db.MockDB\r
23                 expected      Controller\r
24         }{\r
25                 {\r
26                         label: "Create Controller",\r
27                         inp: Controller{\r
28                                 Metadata: types.Metadata{\r
29                                         Name: "testController",\r
30                                 },\r
31                                 Spec: ControllerSpec{\r
32                                         Host: "132.156.0.10",\r
33                                         Port: 8080,\r
34                                 },\r
35                         },\r
36                         expected: Controller{\r
37                                 Metadata: types.Metadata{\r
38                                         Name: "testController",\r
39                                 },\r
40                                 Spec: ControllerSpec{\r
41                                         Host: "132.156.0.10",\r
42                                         Port: 8080,\r
43                                 },\r
44                         },\r
45                         expectedError: "",\r
46                         mockdb:        &db.MockDB{},\r
47                 },\r
48                 {\r
49                         label:         "Failed Create Controller",\r
50                         expectedError: "Error Creating Controller",\r
51                         mockdb: &db.MockDB{\r
52                                 Err: pkgerrors.New("Error Creating Controller"),\r
53                         },\r
54                 },\r
55         }\r
56 \r
57         for _, testCase := range testCases {\r
58                 t.Run(testCase.label, func(t *testing.T) {\r
59                         db.DBconn = testCase.mockdb\r
60                         impl := NewControllerClient()\r
61                         got, err := impl.CreateController(testCase.inp, false)\r
62                         if err != nil {\r
63                                 if testCase.expectedError == "" {\r
64                                         t.Fatalf("Create returned an unexpected error %s", err)\r
65                                 }\r
66                                 if strings.Contains(err.Error(), testCase.expectedError) == false {\r
67                                         t.Fatalf("Create returned an unexpected error %s", err)\r
68                                 }\r
69                         } else {\r
70                                 if reflect.DeepEqual(testCase.expected, got) == false {\r
71                                         t.Errorf("Create returned unexpected body: got %v;"+\r
72                                                 " expected %v", got, testCase.expected)\r
73                                 }\r
74                         }\r
75                 })\r
76         }\r
77 }\r
78 \r
79 func TestGetController(t *testing.T) {\r
80 \r
81         testCases := []struct {\r
82                 label         string\r
83                 name          string\r
84                 expectedError string\r
85                 mockdb        *db.MockDB\r
86                 inp           string\r
87                 expected      Controller\r
88         }{\r
89                 {\r
90                         label: "Get Controller",\r
91                         name:  "testController",\r
92                         expected: Controller{\r
93                                 Metadata: types.Metadata{\r
94                                         Name: "testController",\r
95                                 },\r
96                                 Spec: ControllerSpec{\r
97                                         Host: "132.156.0.10",\r
98                                         Port: 8080,\r
99                                 },\r
100                         },\r
101                         expectedError: "",\r
102                         mockdb: &db.MockDB{\r
103                                 Items: map[string]map[string][]byte{\r
104                                         ControllerKey{ControllerName: "testController"}.String(): {\r
105                                                 "controllermetadata": []byte(\r
106                                                         "{\"metadata\":{" +\r
107                                                                 "\"name\":\"testController\"" +\r
108                                                                 "}," +\r
109                                                                 "\"spec\":{" +\r
110                                                                 "\"host\":\"132.156.0.10\"," +\r
111                                                                 "\"port\": 8080 }}"),\r
112                                         },\r
113                                 },\r
114                         },\r
115                 },\r
116                 {\r
117                         label:         "Get Error",\r
118                         expectedError: "DB Error",\r
119                         mockdb: &db.MockDB{\r
120                                 Err: pkgerrors.New("DB Error"),\r
121                         },\r
122                 },\r
123         }\r
124 \r
125         for _, testCase := range testCases {\r
126                 t.Run(testCase.label, func(t *testing.T) {\r
127                         db.DBconn = testCase.mockdb\r
128                         impl := NewControllerClient()\r
129                         got, err := impl.GetController(testCase.name)\r
130                         if err != nil {\r
131                                 if testCase.expectedError == "" {\r
132                                         t.Fatalf("Get returned an unexpected error: %s", err)\r
133                                 }\r
134                                 if strings.Contains(err.Error(), testCase.expectedError) == false {\r
135                                         t.Fatalf("Get returned an unexpected error: %s", err)\r
136                                 }\r
137                         } else {\r
138                                 if reflect.DeepEqual(testCase.expected, got) == false {\r
139                                         t.Errorf("Get returned unexpected body: got %v;"+\r
140                                                 " expected %v", got, testCase.expected)\r
141                                 }\r
142                         }\r
143                 })\r
144         }\r
145 }\r
146 \r
147 func TestDeleteController(t *testing.T) {\r
148 \r
149         testCases := []struct {\r
150                 label         string\r
151                 name          string\r
152                 expectedError string\r
153                 mockdb        *db.MockDB\r
154         }{\r
155                 {\r
156                         label:  "Delete Controller",\r
157                         name:   "testController",\r
158                         mockdb: &db.MockDB{},\r
159                 },\r
160                 {\r
161                         label:         "Delete Error",\r
162                         expectedError: "DB Error",\r
163                         mockdb: &db.MockDB{\r
164                                 Err: pkgerrors.New("DB Error"),\r
165                         },\r
166                 },\r
167         }\r
168 \r
169         for _, testCase := range testCases {\r
170                 t.Run(testCase.label, func(t *testing.T) {\r
171                         db.DBconn = testCase.mockdb\r
172                         impl := NewControllerClient()\r
173                         err := impl.DeleteController(testCase.name)\r
174                         if err != nil {\r
175                                 if testCase.expectedError == "" {\r
176                                         t.Fatalf("Delete returned an unexpected error %s", err)\r
177                                 }\r
178                                 if strings.Contains(err.Error(), testCase.expectedError) == false {\r
179                                         t.Fatalf("Delete returned an unexpected error %s", err)\r
180                                 }\r
181                         }\r
182                 })\r
183         }\r
184 }\r