blob: a53e4ec9e151a82a910dacd8db3641596588585f [file] [log] [blame]
Hardik Windlass84861682019-11-10 05:44:33 +00001/*
2 * Copyright 2019-present Open Networking Foundation
3
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7
8 * http://www.apache.org/licenses/LICENSE-2.0
9
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package core
17
18import (
19 "context"
npujar03b018e2019-11-13 15:29:36 +053020 "reflect"
21 "testing"
22
Hardik Windlass84861682019-11-10 05:44:33 +000023 "github.com/opencord/voltha-go/db/model"
24 "github.com/opencord/voltha-go/ro_core/config"
Thomas Lee Se5a44012019-11-07 20:32:24 +053025 "github.com/opencord/voltha-lib-go/v2/pkg/log"
Hardik Windlass84861682019-11-10 05:44:33 +000026 "github.com/opencord/voltha-protos/v2/go/openflow_13"
27 "github.com/opencord/voltha-protos/v2/go/voltha"
28 "github.com/stretchr/testify/assert"
Hardik Windlass84861682019-11-10 05:44:33 +000029)
30
31func MakeTestNewCoreConfig() *Core {
32 var core Core
npujar03b018e2019-11-13 15:29:36 +053033 core.instanceID = "ro_core"
Thomas Lee Se5a44012019-11-07 20:32:24 +053034 var err error
Hardik Windlass84861682019-11-10 05:44:33 +000035 core.config = config.NewROCoreFlags()
36 core.clusterDataRoot = model.NewRoot(&voltha.Voltha{}, nil)
Thomas Lee Se5a44012019-11-07 20:32:24 +053037 core.clusterDataProxy, err = core.clusterDataRoot.CreateProxy(context.Background(), "/", false)
38 if err != nil {
39 log.With(log.Fields{"error": err}).Fatal("Cannot create cluster data proxy")
40 }
Hardik Windlass84861682019-11-10 05:44:33 +000041 core.genericMgr = newModelProxyManager(core.clusterDataProxy)
npujar03b018e2019-11-13 15:29:36 +053042 core.deviceMgr = newDeviceManager(core.clusterDataProxy, core.instanceID)
Hardik Windlass84861682019-11-10 05:44:33 +000043
44 return &core
45}
46
47func TestNewLogicalDeviceManager(t *testing.T) {
48 core := MakeTestNewCoreConfig()
49
50 logicalDevMgr := newLogicalDeviceManager(core.deviceMgr, core.clusterDataProxy)
51 assert.NotNil(t, logicalDevMgr)
52}
53
54func TestAddLogicalDeviceAgentToMap(t *testing.T) {
55 core := MakeTestNewCoreConfig()
56 ldMgr := newLogicalDeviceManager(core.deviceMgr, core.clusterDataProxy)
57 assert.NotNil(t, ldMgr)
58
59 // Before ADD
60 ldAgentNil := ldMgr.getLogicalDeviceAgent("id")
61 assert.Nil(t, ldAgentNil)
62
63 /*** Case: addLogicalDeviceAgentToMap() is Success ***/
64 ldAgent := newLogicalDeviceAgent("id", "", ldMgr, core.deviceMgr, core.clusterDataProxy)
65 assert.NotNil(t, ldAgent)
66 ldMgr.addLogicalDeviceAgentToMap(ldAgent)
67
68 // Verify ADD is successful
69 ldAgentNotNil := ldMgr.getLogicalDeviceAgent("id")
70 assert.NotNil(t, ldAgentNotNil)
npujar03b018e2019-11-13 15:29:36 +053071 assert.Equal(t, "id", ldAgentNotNil.logicalDeviceID)
Hardik Windlass84861682019-11-10 05:44:33 +000072}
73
74func TestGetLogicalDeviceAgent(t *testing.T) {
75 core := MakeTestNewCoreConfig()
76 ldMgr := newLogicalDeviceManager(core.deviceMgr, core.clusterDataProxy)
77 assert.NotNil(t, ldMgr)
78
79 /*** Case: getLogicalDeviceAgent() is NIL ***/
80 ldAgentNil := ldMgr.getLogicalDeviceAgent("id")
81 assert.Nil(t, ldAgentNil)
82
83 /*** Case: getLogicalDeviceAgent() is Success ***/
84 ldAgent := newLogicalDeviceAgent("id", "", ldMgr, core.deviceMgr, core.clusterDataProxy)
85 assert.NotNil(t, ldAgent)
86 ldMgr.addLogicalDeviceAgentToMap(ldAgent)
87 ldAgentNotNil := ldMgr.getLogicalDeviceAgent("id")
88 assert.NotNil(t, ldAgentNotNil)
npujar03b018e2019-11-13 15:29:36 +053089 assert.Equal(t, "id", ldAgentNotNil.logicalDeviceID)
Hardik Windlass84861682019-11-10 05:44:33 +000090}
91
92func TestDeleteLogicalDeviceAgent(t *testing.T) {
93 core := MakeTestNewCoreConfig()
94 ldMgr := newLogicalDeviceManager(core.deviceMgr, core.clusterDataProxy)
95 assert.NotNil(t, ldMgr)
96
97 /*** Case: deleteLogicalDeviceAgent() with Invalid Value ***/
98 ldAgentNilChk := ldMgr.getLogicalDeviceAgent("invalid_id")
99 assert.Nil(t, ldAgentNilChk)
100 ldMgr.deleteLogicalDeviceAgent("invalid_id")
101
102 /*** Case: deleteLogicalDeviceAgent() is Success ***/
103 // Initialize and Add Logical Device Agent
104 ldAgent := newLogicalDeviceAgent("id", "", ldMgr, core.deviceMgr, core.clusterDataProxy)
105 assert.NotNil(t, ldAgent)
106 ldMgr.addLogicalDeviceAgentToMap(ldAgent)
107
108 // Verify ADD is successful
109 ldAgentNotNil := ldMgr.getLogicalDeviceAgent("id")
110 assert.NotNil(t, ldAgentNotNil)
npujar03b018e2019-11-13 15:29:36 +0530111 assert.Equal(t, "id", ldAgentNotNil.logicalDeviceID)
Hardik Windlass84861682019-11-10 05:44:33 +0000112
113 // Method under Test
114 ldMgr.deleteLogicalDeviceAgent("id")
115
116 // Verify DEL is successful
117 ldAgentNil := ldMgr.getLogicalDeviceAgent("id")
118 assert.Nil(t, ldAgentNil)
119}
120
121func TestLdMgrGetLogicalDevice(t *testing.T) {
122 wantResult := &voltha.LogicalDevice{}
123
124 core := MakeTestNewCoreConfig()
125 ldMgr := newLogicalDeviceManager(core.deviceMgr, core.clusterDataProxy)
126 assert.NotNil(t, ldMgr)
127
128 /*** Case: getLogicalDevice() is NIL ***/
129 logicalDevNil, errNotNil := ldMgr.getLogicalDevice("id")
130 assert.Nil(t, logicalDevNil)
131 assert.NotNil(t, errNotNil)
132
133 /*** Case: getLogicalDevice() is Success ***/
134 // Add Data
Thomas Lee Se5a44012019-11-07 20:32:24 +0530135 added, err := core.clusterDataProxy.Add(
Hardik Windlass84861682019-11-10 05:44:33 +0000136 context.Background(),
137 "/logical_devices",
138 &voltha.LogicalDevice{
139 Id: "id",
140 },
Thomas Lee Se5a44012019-11-07 20:32:24 +0530141 "")
142 if err != nil {
143 log.Errorw("failed-to-add-logical-device", log.Fields{"error": err})
144 assert.NotNil(t, err)
145 }
146 if added == nil {
Hardik Windlass84861682019-11-10 05:44:33 +0000147 t.Error("Failed to add logical device")
148 }
149 ldAgent := newLogicalDeviceAgent("id", "device_id", ldMgr, core.deviceMgr, core.clusterDataProxy)
150 assert.NotNil(t, ldAgent)
151 ldMgr.addLogicalDeviceAgentToMap(ldAgent)
152
153 // Verify Add is successful
154 ldAgentNotNil := ldMgr.getLogicalDeviceAgent("id")
155 assert.NotNil(t, ldAgentNotNil)
npujar03b018e2019-11-13 15:29:36 +0530156 assert.Equal(t, "id", ldAgentNotNil.logicalDeviceID)
Hardik Windlass84861682019-11-10 05:44:33 +0000157
158 // Verify getLogicalDevice() is NOT NIL
159 logicalDevNotNil, errNil := ldMgr.getLogicalDevice("id")
160 assert.NotNil(t, logicalDevNotNil)
161 assert.Nil(t, errNil)
162 if reflect.TypeOf(logicalDevNotNil) != reflect.TypeOf(wantResult) {
163 t.Errorf("GetLogicalDevice() = %v, want %v", logicalDevNotNil, wantResult)
164 }
165 assert.Equal(t, "id", logicalDevNotNil.Id)
166}
167
168func TestListLogicalDevices(t *testing.T) {
169 wantResult := &voltha.LogicalDevices{}
170
171 core := MakeTestNewCoreConfig()
172 ldMgr := newLogicalDeviceManager(core.deviceMgr, core.clusterDataProxy)
173 assert.NotNil(t, ldMgr)
174
175 /*** Case: listLogicalDevices() is Empty ***/
176 result, error := ldMgr.listLogicalDevices()
177 assert.NotNil(t, result)
178 assert.Nil(t, error)
179 if reflect.TypeOf(result) != reflect.TypeOf(wantResult) {
180 t.Errorf("ListLogicalDevices() = %v, want %v", result, wantResult)
181 }
182 assert.Empty(t, result)
183}
184
185func TestLoad(t *testing.T) {
186 core := MakeTestNewCoreConfig()
187 ldMgr := newLogicalDeviceManager(core.deviceMgr, core.clusterDataProxy)
188 assert.NotNil(t, ldMgr)
189
190 /*** Case: Error Scenario ***/
191 error := ldMgr.load("id")
192 assert.NotNil(t, error)
193}
194
195func TestGetLogicalDeviceId(t *testing.T) {
196 core := MakeTestNewCoreConfig()
197 ldMgr := newLogicalDeviceManager(core.deviceMgr, core.clusterDataProxy)
198 assert.NotNil(t, ldMgr)
199
200 /*** Case: Logical Device Id Found ***/
npujar03b018e2019-11-13 15:29:36 +0530201 result0, error0 := ldMgr.getLogicalDeviceID(&voltha.Device{Id: "id", Root: true, ParentId: "parent_id"})
Hardik Windlass84861682019-11-10 05:44:33 +0000202 assert.NotNil(t, result0)
203 assert.Nil(t, error0)
204
205 /*** Case: Logical Device Id Not Found ***/
npujar03b018e2019-11-13 15:29:36 +0530206 result1, error1 := ldMgr.getLogicalDeviceID(&voltha.Device{Id: "id", ParentId: "parent_id"})
Hardik Windlass84861682019-11-10 05:44:33 +0000207 assert.Nil(t, result1)
208 assert.NotNil(t, error1)
209}
210
211func TestGetLogicalPortId(t *testing.T) {
212 wantResult := &voltha.LogicalPortId{}
213
214 core := MakeTestNewCoreConfig()
215 ldMgr := newLogicalDeviceManager(core.deviceMgr, core.clusterDataProxy)
216 assert.NotNil(t, ldMgr)
217
218 /*** Case: Logical Port Id Not Found: getLogicalDeviceId() Error ***/
npujar03b018e2019-11-13 15:29:36 +0530219 result0, error0 := ldMgr.getLogicalPortID(&voltha.Device{Id: "id", ParentId: "parent_id"})
Hardik Windlass84861682019-11-10 05:44:33 +0000220 assert.Nil(t, result0)
221 assert.NotNil(t, error0)
222
223 /*** Case: Logical Port Id Not Found: getLogicalDevice() Error ***/
npujar03b018e2019-11-13 15:29:36 +0530224 result1, error1 := ldMgr.getLogicalPortID(&voltha.Device{Id: "id", Root: true, ParentId: "parent_id"})
Hardik Windlass84861682019-11-10 05:44:33 +0000225 assert.Nil(t, result1)
226 assert.NotNil(t, error1)
227
228 /*** Case: Logical Port Id Found ***/
229 device := &voltha.Device{Id: "id", Root: true, ParentId: "parent_id"}
230
231 // Add Data
Thomas Lee Se5a44012019-11-07 20:32:24 +0530232 added, err := core.clusterDataProxy.Add(
Hardik Windlass84861682019-11-10 05:44:33 +0000233 context.Background(),
234 "/logical_devices",
235 &voltha.LogicalDevice{
236 Id: "parent_id",
237 Ports: []*voltha.LogicalPort{
238 {
239 Id: "123",
240 DeviceId: "id",
241 },
242 },
243 },
Thomas Lee Se5a44012019-11-07 20:32:24 +0530244 "")
245 if err != nil {
246 log.Errorw("failed-to-add-logical-device", log.Fields{"error": err})
247 assert.NotNil(t, err)
248 }
249 if added == nil {
Hardik Windlass84861682019-11-10 05:44:33 +0000250 t.Error("Failed to add logical device")
251 }
252 ldAgent := newLogicalDeviceAgent("parent_id", "device_id", ldMgr, core.deviceMgr, core.clusterDataProxy)
253 assert.NotNil(t, ldAgent)
254 ldMgr.addLogicalDeviceAgentToMap(ldAgent)
255
256 // Verify Add is successful
257 ldAgentNotNil := ldMgr.getLogicalDeviceAgent("parent_id")
258 assert.NotNil(t, ldAgentNotNil)
npujar03b018e2019-11-13 15:29:36 +0530259 assert.Equal(t, "parent_id", ldAgentNotNil.logicalDeviceID)
Hardik Windlass84861682019-11-10 05:44:33 +0000260
261 // Verify getLogicalPortId() is Success
npujar03b018e2019-11-13 15:29:36 +0530262 result2, error2 := ldMgr.getLogicalPortID(device)
Hardik Windlass84861682019-11-10 05:44:33 +0000263 assert.NotNil(t, result2)
264 assert.Nil(t, error2)
265 if reflect.TypeOf(result2) != reflect.TypeOf(wantResult) {
266 t.Errorf("GetLogicalPortId() = %v, want %v", result2, wantResult)
267 }
268 assert.Equal(t, "parent_id", result2.Id)
269}
270
271func TestListLogicalDevicePorts(t *testing.T) {
272 core := MakeTestNewCoreConfig()
273 ldMgr := newLogicalDeviceManager(core.deviceMgr, core.clusterDataProxy)
274 assert.NotNil(t, ldMgr)
275
276 /*** Case: Logical Device Ports Not Found ***/
277 result0, error0 := ldMgr.ListLogicalDevicePorts(context.Background(), "id")
278 assert.Nil(t, result0)
279 assert.NotNil(t, error0)
280
281 /*** Case: Logical Device Ports Found ***/
282 wantResult := &voltha.LogicalPorts{
283 Items: []*voltha.LogicalPort{
284 {
285 Id: "123",
286 },
287 },
288 }
289
290 // Add Data
Thomas Lee Se5a44012019-11-07 20:32:24 +0530291 added, err := core.clusterDataProxy.Add(
Hardik Windlass84861682019-11-10 05:44:33 +0000292 context.Background(),
293 "/logical_devices",
294 &voltha.LogicalDevice{
295 Id: "id",
296 Ports: []*voltha.LogicalPort{
297 {
298 Id: "123",
299 },
300 },
301 },
Thomas Lee Se5a44012019-11-07 20:32:24 +0530302 "")
303 if err != nil {
304 log.Errorw("failed-to-add-logical-device", log.Fields{"error": err})
305 assert.NotNil(t, err)
306 }
307 if added == nil {
Hardik Windlass84861682019-11-10 05:44:33 +0000308 t.Error("Failed to add logical device")
309 }
310 ldAgent := newLogicalDeviceAgent("id", "", ldMgr, core.deviceMgr, core.clusterDataProxy)
311 ldMgr.addLogicalDeviceAgentToMap(ldAgent)
312
313 // Verify Add is successful
314 ldAgentNotNil := ldMgr.getLogicalDeviceAgent("id")
315 assert.NotNil(t, ldAgentNotNil)
npujar03b018e2019-11-13 15:29:36 +0530316 assert.Equal(t, "id", ldAgentNotNil.logicalDeviceID)
Hardik Windlass84861682019-11-10 05:44:33 +0000317
318 // Verify ListLogicalDevicePorts() is Success
319 result1, error1 := ldMgr.ListLogicalDevicePorts(context.Background(), "id")
320 assert.NotNil(t, result1)
321 assert.Nil(t, error1)
322 if reflect.TypeOf(result1) != reflect.TypeOf(wantResult) {
323 t.Errorf("ListLogicalDevicePorts() = %v, want %v", result1, wantResult)
324 }
325 assert.Equal(t, wantResult, result1)
326}
327
328func TestListLogicalDeviceFlows(t *testing.T) {
329 core := MakeTestNewCoreConfig()
330 ldMgr := newLogicalDeviceManager(core.deviceMgr, core.clusterDataProxy)
331 assert.NotNil(t, ldMgr)
332
333 /*** Case: Logical Device Flows Not Found ***/
334 result0, error0 := ldMgr.ListLogicalDeviceFlows(context.Background(), "id")
335 assert.Nil(t, result0)
336 assert.NotNil(t, error0)
337
338 /*** Case: Logical Device Flows Found ***/
339 wantResult := &voltha.Flows{}
340
341 // Add Data
Thomas Lee Se5a44012019-11-07 20:32:24 +0530342 added, err := core.clusterDataProxy.Add(
Hardik Windlass84861682019-11-10 05:44:33 +0000343 context.Background(),
344 "/logical_devices",
345 &voltha.LogicalDevice{
346 Id: "id",
347 Flows: &openflow_13.Flows{
348 Items: []*openflow_13.OfpFlowStats{
349 &openflow_13.OfpFlowStats{
350 Id: 1111,
351 },
352 },
353 },
354 },
Thomas Lee Se5a44012019-11-07 20:32:24 +0530355 "")
356 if err != nil {
357 log.Errorw("failed-to-add-logical-device", log.Fields{"error": err})
358 assert.NotNil(t, err)
359 }
360 if added == nil {
Hardik Windlass84861682019-11-10 05:44:33 +0000361 t.Error("Failed to add logical device")
362 }
363 ldAgent := newLogicalDeviceAgent("id", "", ldMgr, core.deviceMgr, core.clusterDataProxy)
364 ldMgr.addLogicalDeviceAgentToMap(ldAgent)
365
366 // Verify Add is successful
367 ldAgentNotNil := ldMgr.getLogicalDeviceAgent("id")
368 assert.NotNil(t, ldAgentNotNil)
npujar03b018e2019-11-13 15:29:36 +0530369 assert.Equal(t, "id", ldAgentNotNil.logicalDeviceID)
Hardik Windlass84861682019-11-10 05:44:33 +0000370
371 // Verify ListLogicalDeviceFlows() is Success
372 result1, error1 := ldMgr.ListLogicalDeviceFlows(context.Background(), "id")
373 assert.NotNil(t, result1)
374 assert.Nil(t, error1)
375 if reflect.TypeOf(result1) != reflect.TypeOf(wantResult) {
376 t.Errorf("ListLogicalDeviceFlows() = %v, want %v", result1, wantResult)
377 }
378 assert.NotEmpty(t, result1)
379}
380
381func TestListLogicalDeviceFlowGroups(t *testing.T) {
382 core := MakeTestNewCoreConfig()
383 ldMgr := newLogicalDeviceManager(core.deviceMgr, core.clusterDataProxy)
384 assert.NotNil(t, ldMgr)
385
386 /*** Case: Logical Device Flow Groups Not Found ***/
387 result0, error0 := ldMgr.ListLogicalDeviceFlowGroups(context.Background(), "id")
388 assert.Nil(t, result0)
389 assert.NotNil(t, error0)
390
391 /*** Case: Logical Device Flow Groups Found ***/
392 wantResult := &voltha.FlowGroups{}
393
394 // Add Data
Thomas Lee Se5a44012019-11-07 20:32:24 +0530395 added, err := core.clusterDataProxy.Add(
Hardik Windlass84861682019-11-10 05:44:33 +0000396 context.Background(),
397 "/logical_devices",
398 &voltha.LogicalDevice{
399 Id: "id",
400 FlowGroups: &openflow_13.FlowGroups{
401 Items: []*openflow_13.OfpGroupEntry{
402 {
403 Stats: &openflow_13.OfpGroupStats{
404 GroupId: 1,
405 },
406 },
407 },
408 },
409 },
Thomas Lee Se5a44012019-11-07 20:32:24 +0530410 "")
411 if err != nil {
412 log.Errorw("failed-to-add-logical-device", log.Fields{"error": err})
413 assert.NotNil(t, err)
414 }
415 if added == nil {
Hardik Windlass84861682019-11-10 05:44:33 +0000416 t.Error("Failed to add logical device")
417 }
418 ldAgent := newLogicalDeviceAgent("id", "", ldMgr, core.deviceMgr, core.clusterDataProxy)
419 ldMgr.addLogicalDeviceAgentToMap(ldAgent)
420
421 // Verify Add is successful
422 ldAgentNotNil := ldMgr.getLogicalDeviceAgent("id")
423 assert.NotNil(t, ldAgentNotNil)
npujar03b018e2019-11-13 15:29:36 +0530424 assert.Equal(t, "id", ldAgentNotNil.logicalDeviceID)
Hardik Windlass84861682019-11-10 05:44:33 +0000425
426 // Verify ListLogicalDeviceFlowGroups() is Success
427 result1, error1 := ldMgr.ListLogicalDeviceFlowGroups(context.Background(), "id")
428 assert.NotNil(t, result1)
429 assert.Nil(t, error1)
430 if reflect.TypeOf(result1) != reflect.TypeOf(wantResult) {
431 t.Errorf("ListLogicalDeviceFlowGroups() = %v, want %v", result1, wantResult)
432 }
433 assert.NotEmpty(t, result1)
434}
435
436func TestGetLogicalPort(t *testing.T) {
437 core := MakeTestNewCoreConfig()
438 ldMgr := newLogicalDeviceManager(core.deviceMgr, core.clusterDataProxy)
439 assert.NotNil(t, ldMgr)
440
441 /*** Case: Logical Port Not Found: getLogicalDevice() Error ***/
442 result0, error0 := ldMgr.getLogicalPort(&voltha.LogicalPortId{Id: "id", PortId: "123"})
443 assert.Nil(t, result0)
444 assert.NotNil(t, error0)
445
446 /*** Case: Logical Port Found ***/
447 wantResult := &voltha.LogicalPort{Id: "123"}
448
449 // Add Data
Thomas Lee Se5a44012019-11-07 20:32:24 +0530450 added, err := core.clusterDataProxy.Add(
Hardik Windlass84861682019-11-10 05:44:33 +0000451 context.Background(),
452 "/logical_devices",
453 &voltha.LogicalDevice{
454 Id: "id",
455 Ports: []*voltha.LogicalPort{
456 {
457 Id: "123",
458 },
459 },
460 },
Thomas Lee Se5a44012019-11-07 20:32:24 +0530461 "")
462 if err != nil {
463 log.Errorw("failed-to-add-logical-device", log.Fields{"error": err})
464 assert.NotNil(t, err)
465 }
466 if added == nil {
Hardik Windlass84861682019-11-10 05:44:33 +0000467 t.Error("Failed to add logical device")
468 }
469 ldAgent := newLogicalDeviceAgent("id", "", ldMgr, core.deviceMgr, core.clusterDataProxy)
470 ldMgr.addLogicalDeviceAgentToMap(ldAgent)
471
472 // Verify Add is successful
473 ldAgentNotNil := ldMgr.getLogicalDeviceAgent("id")
474 assert.NotNil(t, ldAgentNotNil)
npujar03b018e2019-11-13 15:29:36 +0530475 assert.Equal(t, "id", ldAgentNotNil.logicalDeviceID)
Hardik Windlass84861682019-11-10 05:44:33 +0000476
477 // Verify getLogicalPort() is Success
478 result1, error1 := ldMgr.getLogicalPort(&voltha.LogicalPortId{Id: "id", PortId: "123"})
479 assert.NotNil(t, result1)
480 assert.Nil(t, error1)
481 if reflect.TypeOf(result1) != reflect.TypeOf(wantResult) {
482 t.Errorf("getLogicalPort() = %v, want %v", result1, wantResult)
483 }
484 assert.Equal(t, wantResult, result1)
485}