2 // Copyright 2019 AT&T Intellectual Property
3 // Copyright 2019 Nokia
5 // Licensed under the Apache License, Version 2.0 (the "License");
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://www.apache.org/licenses/LICENSE-2.0
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
22 "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
23 "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
24 "github.com/golang/protobuf/proto"
25 "github.com/stretchr/testify/assert"
30 var namespace = "namespace"
32 func TestInit(t *testing.T) {
35 assert.NotNil(t, readerPool)
36 assert.NotNil(t, readerPool.New)
37 assert.NotNil(t, readerPool.Destroy)
38 available, created := readerPool.Stats()
39 assert.Equal(t, 0, available, "number of available objects in the readerPool should be 0")
40 assert.Equal(t, 0, created, "number of created objects in the readerPool should be 0")
43 func TestInitPool(t *testing.T) {
45 sdlInstanceMock := new(MockSdlInstance)
46 initPool(1, func() interface{} {
47 sdlI := common.ISdlInstance(sdlInstanceMock)
48 return &rNibReaderInstance{sdl: &sdlI, namespace: namespace}
50 func(obj interface{}) {
53 assert.NotNil(t, readerPool)
54 assert.NotNil(t, readerPool.New)
55 assert.NotNil(t, readerPool.Destroy)
56 available, created := readerPool.Stats()
57 assert.Equal(t, 0, available, "number of available objects in the readerPool should be 0")
58 assert.Equal(t, 0, created, "number of created objects in the readerPool should be 0")
61 func initSdlInstanceMock(namespace string, poolSize int) *MockSdlInstance {
62 sdlInstanceMock := new(MockSdlInstance)
63 initPool(poolSize, func() interface{} {
64 sdlI := common.ISdlInstance(sdlInstanceMock)
65 return &rNibReaderInstance{sdl: &sdlI, namespace: namespace}
67 func(obj interface{}) {
70 return sdlInstanceMock
73 func TestGetNodeB(t *testing.T) {
76 sdlInstanceMock := initSdlInstanceMock(namespace, 1)
78 nb := entities.NodebInfo{}
79 nb.ConnectionStatus = 1
83 cell := entities.ServedCellInfo{Tac: "tac"}
84 enb.ServedCells = []*entities.ServedCellInfo{&cell}
85 nb.Configuration = &entities.NodebInfo_Enb{Enb: &enb}
87 data, err := proto.Marshal(&nb)
89 t.Errorf("#rNibReader_test.TestGetNb - Failed to marshal ENB instance. Error: %v", err)
91 redisKey, rNibErr := common.ValidateAndBuildNodeBNameKey(name)
93 t.Errorf("#rNibReader_test.TestGetNodeB - failed to validate key parameter")
95 ret := map[string]interface{}{redisKey: string(data)}
96 sdlInstanceMock.On("Get", []string{redisKey}).Return(ret, e)
97 getNb, er := w.GetNodeb(name)
99 assert.Equal(t, getNb.Ip, nb.Ip)
100 assert.Equal(t, getNb.Port, nb.Port)
101 assert.Equal(t, getNb.ConnectionStatus, nb.ConnectionStatus)
102 assert.Len(t, getNb.GetEnb().GetServedCells(), 1)
103 assert.Equal(t, getNb.GetEnb().GetServedCells()[0].Tac, nb.GetEnb().GetServedCells()[0].Tac)
106 func TestGetNodeBNotFoundFailure(t *testing.T) {
109 sdlInstanceMock := initSdlInstanceMock(namespace, 1)
112 var ret map[string]interface{}
113 redisKey, rNibErr := common.ValidateAndBuildNodeBNameKey(name)
115 t.Errorf("#rNibReader_test.TestGetNodeBNotFoundFailure - failed to validate key parameter")
117 sdlInstanceMock.On("Get", []string{redisKey}).Return(ret, e)
118 getNb, er := w.GetNodeb(name)
121 assert.Equal(t, 1, er.GetCode())
122 assert.EqualValues(t, "1 RESOURCE_NOT_FOUND - #rNibReader.getNodeb - responding node not found. Key: RAN:name", er.Error())
125 func TestGetNodeBUnmarshalFailure(t *testing.T) {
128 sdlInstanceMock := initSdlInstanceMock(namespace, 1)
131 ret := make(map[string]interface{}, 1)
132 redisKey, rNibErr := common.ValidateAndBuildNodeBNameKey(name)
134 t.Errorf("#rNibReader_test.TestGetNodeBUnmarshalFailure - failed to validate key parameter")
136 ret[redisKey] = "data"
137 sdlInstanceMock.On("Get", []string{redisKey}).Return(ret, e)
138 getNb, er := w.GetNodeb(name)
141 assert.Equal(t, 2, er.GetCode())
142 assert.EqualValues(t, "2 INTERNAL_ERROR - proto: can't skip unknown wire type 4", er.Error())
145 func TestGetNodeBSdlgoFailure(t *testing.T) {
147 errMsg := "expected Sdlgo error"
148 errMsgExpected := "2 INTERNAL_ERROR - expected Sdlgo error"
150 sdlInstanceMock := initSdlInstanceMock(namespace, 1)
152 e := errors.New(errMsg)
153 var ret map[string]interface{}
154 redisKey, rNibErr := common.ValidateAndBuildNodeBNameKey(name)
156 t.Errorf("#rNibReader_test.TestGetNodeBSdlgoFailure - failed to validate key parameter")
158 sdlInstanceMock.On("Get", []string{redisKey}).Return(ret, e)
159 getNb, er := w.GetNodeb(name)
162 assert.Equal(t, 2, er.GetCode())
163 assert.EqualValues(t, errMsgExpected, er.Error())
166 func TestGetNodeBCellsListEnb(t *testing.T) {
169 sdlInstanceMock := initSdlInstanceMock(namespace, 1)
171 nb := entities.NodebInfo{}
172 nb.ConnectionStatus = 1
175 enb := entities.Enb{}
176 cell := entities.ServedCellInfo{Tac: "tac"}
177 enb.ServedCells = []*entities.ServedCellInfo{&cell}
178 nb.Configuration = &entities.NodebInfo_Enb{Enb: &enb}
180 data, err := proto.Marshal(&nb)
182 t.Errorf("#rNibReader_test.GetNodeBCellsList - Failed to marshal ENB instance. Error: %v", err)
184 redisKey, rNibErr := common.ValidateAndBuildNodeBNameKey(name)
186 t.Errorf("#rNibReader_test.TestGetNodeBCellsListEnb - failed to validate key parameter")
188 ret := map[string]interface{}{redisKey: string(data)}
189 sdlInstanceMock.On("Get", []string{redisKey}).Return(ret, e)
190 cells, er := w.GetCellList(name)
192 assert.NotNil(t, cells)
193 assert.Len(t, cells.GetServedCellInfos().GetServedCells(), 1)
194 retCell := cells.GetServedCellInfos().GetServedCells()[0]
195 assert.Equal(t, retCell.Tac, "tac")
198 func TestGetNodeBCellsListGnb(t *testing.T) {
201 sdlInstanceMock := initSdlInstanceMock(namespace, 1)
203 nb := entities.NodebInfo{}
204 nb.ConnectionStatus = 1
207 nb.NodeType = entities.Node_GNB
208 gnb := entities.Gnb{}
209 cell := entities.ServedNRCell{ServedNrCellInformation: &entities.ServedNRCellInformation{NrPci: 10}}
210 gnb.ServedNrCells = []*entities.ServedNRCell{&cell}
211 nb.Configuration = &entities.NodebInfo_Gnb{Gnb: &gnb}
213 data, err := proto.Marshal(&nb)
215 t.Errorf("#rNibReader_test.GetNodeBCellsList - Failed to marshal GNB instance. Error: %v", err)
217 redisKey, rNibErr := common.ValidateAndBuildNodeBNameKey(name)
219 t.Errorf("#rNibReader_test.TestGetNodeBCellsListGnb - failed to validate key parameter")
221 ret := map[string]interface{}{redisKey: string(data)}
222 sdlInstanceMock.On("Get", []string{redisKey}).Return(ret, e)
223 cells, er := w.GetCellList(name)
225 assert.NotNil(t, cells)
226 assert.Len(t, cells.GetServedNrCells().GetServedCells(), 1)
227 retCell := cells.GetServedNrCells().GetServedCells()[0]
228 assert.Equal(t, retCell.GetServedNrCellInformation().GetNrPci(), uint32(10))
231 func TestGetNodeBCellsListNodeUnmarshalFailure(t *testing.T) {
234 sdlInstanceMock := initSdlInstanceMock(namespace, 1)
237 ret := make(map[string]interface{}, 1)
238 redisKey, rNibErr := common.ValidateAndBuildNodeBNameKey(name)
240 t.Errorf("#rNibReader_test.TestGetNodeBCellsListNodeUnmarshalFailure - failed to validate key parameter")
242 ret[redisKey] = "data"
243 sdlInstanceMock.On("Get", []string{redisKey}).Return(ret, e)
244 cells, er := w.GetCellList(name)
247 assert.Equal(t, 2, er.GetCode())
248 assert.EqualValues(t, "2 INTERNAL_ERROR - proto: can't skip unknown wire type 4", er.Error())
251 func TestGetNodeBCellsListNodeNotFoundFailure(t *testing.T) {
254 sdlInstanceMock := initSdlInstanceMock(namespace, 1)
257 var ret map[string]interface{}
258 redisKey, rNibErr := common.ValidateAndBuildNodeBNameKey(name)
260 t.Errorf("#rNibReader_test.TestGetNodeBCellsListNodeNotFoundFailure - failed to validate key parameter")
262 sdlInstanceMock.On("Get", []string{redisKey}).Return(ret, e)
263 cells, er := w.GetCellList(name)
266 assert.Equal(t, 1, er.GetCode())
267 assert.EqualValues(t, "1 RESOURCE_NOT_FOUND - #rNibReader.getNodeb - responding node not found. Key: RAN:name", er.Error())
270 func TestGetNodeBCellsListNotFoundFailureEnb(t *testing.T) {
273 sdlInstanceMock := initSdlInstanceMock(namespace, 1)
275 nb := entities.NodebInfo{}
276 nb.ConnectionStatus = 1
279 enb := entities.Enb{}
280 nb.Configuration = &entities.NodebInfo_Enb{Enb: &enb}
282 data, err := proto.Marshal(&nb)
284 t.Errorf("#rNibReader_test.TestGetNbCellsListNotFoundFailure - Failed to marshal ENB instance. Error: %v", err)
286 redisKey, rNibErr := common.ValidateAndBuildNodeBNameKey(name)
288 t.Errorf("#rNibReader_test.TestGetNodeBCellsListNotFoundFailureEnb - failed to validate key parameter")
290 ret := map[string]interface{}{redisKey: string(data)}
291 sdlInstanceMock.On("Get", []string{redisKey}).Return(ret, e)
292 _, er := w.GetCellList(name)
294 assert.EqualValues(t, "1 RESOURCE_NOT_FOUND - #rNibReader.GetCellList - served cells not found. Responding node RAN name: name.", er.Error())
297 func TestGetNodeBCellsListNotFoundFailureGnb(t *testing.T) {
300 sdlInstanceMock := initSdlInstanceMock(namespace, 1)
302 nb := entities.NodebInfo{}
303 nb.ConnectionStatus = 1
306 gnb := entities.Gnb{}
307 nb.Configuration = &entities.NodebInfo_Gnb{Gnb: &gnb}
309 data, err := proto.Marshal(&nb)
311 t.Errorf("#rNibReader_test.TestGetNodeBCellsListNotFoundFailureGnb - Failed to marshal ENB instance. Error: %v", err)
313 redisKey, rNibErr := common.ValidateAndBuildNodeBNameKey(name)
315 t.Errorf("#rNibReader_test.TestGetNodeBCellsListNotFoundFailureGnb - failed to validate key parameter")
317 ret := map[string]interface{}{redisKey: string(data)}
318 sdlInstanceMock.On("Get", []string{redisKey}).Return(ret, e)
319 _, er := w.GetCellList(name)
321 assert.EqualValues(t, "1 RESOURCE_NOT_FOUND - #rNibReader.GetCellList - served cells not found. Responding node RAN name: name.", er.Error())
324 func TestCloseOnClosedPoolFailure(t *testing.T) {
326 instanceMock := initSdlInstanceMock(namespace, 1)
327 w1 := GetRNibReader()
329 available, created := readerPool.Stats()
330 assert.Equal(t, 1, available, "number of available objects in the readerPool should be 1")
331 assert.Equal(t, 1, created, "number of created objects in the readerPool should be 1")
333 instanceMock.On("Close").Return(e)
335 assert.Panics(t, func() { Close() })
338 func TestCloseFailure(t *testing.T) {
340 instanceMock := initSdlInstanceMock(namespace, 2)
341 w1 := GetRNibReader()
343 available, created := readerPool.Stats()
344 assert.Equal(t, 1, available, "number of available objects in the readerPool should be 1")
345 assert.Equal(t, 1, created, "number of created objects in the readerPool should be 1")
346 e := errors.New("expected error")
347 instanceMock.On("Close").Return(e)
349 available, created = readerPool.Stats()
350 assert.Equal(t, 0, available, "number of available objects in the readerPool should be 0")
351 assert.Equal(t, 0, created, "number of created objects in the readerPool should be 0")
354 func TestGetListGnbIdsUnmarshalFailure(t *testing.T) {
356 sdlInstanceMock := initSdlInstanceMock(namespace, 1)
359 sdlInstanceMock.On("GetMembers", GnbType).Return([]string{"data"}, e)
360 ids, er := w.GetListGnbIds()
363 assert.Equal(t, 2, er.GetCode())
364 assert.Equal(t, "2 INTERNAL_ERROR - proto: can't skip unknown wire type 4", er.Error())
367 func TestGetListGnbIdsSdlgoFailure(t *testing.T) {
368 errMsg := "expected Sdlgo error"
369 errMsgExpected := "2 INTERNAL_ERROR - expected Sdlgo error"
371 sdlInstanceMock := initSdlInstanceMock(namespace, 1)
373 e := errors.New(errMsg)
375 sdlInstanceMock.On("GetMembers", GnbType).Return(data, e)
376 ids, er := w.GetListGnbIds()
379 assert.Equal(t, 2, er.GetCode())
380 assert.EqualValues(t, errMsgExpected, er.Error())
383 func TestGetListNodesIdsGnbSdlgoFailure(t *testing.T) {
386 sdlInstanceMock := initSdlInstanceMock(namespace, 1)
392 nbIdentity := &entities.NbIdentity{InventoryName: name, GlobalNbId: &entities.GlobalNbId{PlmnId: plmnId, NbId: nbId}}
394 data, err := proto.Marshal(nbIdentity)
396 t.Errorf("#rNibReader_test.TestGetListNodesIdsGnbSdlgoFailure - Failed to marshal nodeb identity entity. Error: %v", err)
398 sdlInstanceMock.On("GetMembers", EnbType).Return([]string{string(data)}, nilError)
400 errMsg := "expected Sdlgo error"
401 errMsgExpected := "2 INTERNAL_ERROR - expected Sdlgo error"
402 expectedError := errors.New(errMsg)
404 sdlInstanceMock.On("GetMembers", GnbType).Return(nilData, expectedError)
406 ids, er := w.GetListNodebIds()
409 assert.Equal(t, 2, er.GetCode())
410 assert.EqualValues(t, errMsgExpected, er.Error())
413 func TestGetListNodesIdsEnbSdlgoFailure(t *testing.T) {
416 sdlInstanceMock := initSdlInstanceMock(namespace, 1)
422 nbIdentity := &entities.NbIdentity{InventoryName: name, GlobalNbId: &entities.GlobalNbId{PlmnId: plmnId, NbId: nbId}}
424 data, err := proto.Marshal(nbIdentity)
426 t.Errorf("#rNibReader_test.TestGetListNodesIdsEnbSdlgoFailure - Failed to marshal nodeb identity entity. Error: %v", err)
428 sdlInstanceMock.On("GetMembers", GnbType).Return([]string{string(data)}, nilError)
430 errMsg := "expected Sdlgo error"
431 errMsgExpected := "2 INTERNAL_ERROR - expected Sdlgo error"
432 expectedError := errors.New(errMsg)
434 sdlInstanceMock.On("GetMembers", EnbType).Return(nilData, expectedError)
436 ids, er := w.GetListNodebIds()
439 assert.Equal(t, 2, er.GetCode())
440 assert.EqualValues(t, errMsgExpected, er.Error())
443 func TestGetListNodesIdsEnbSdlgoSuccess(t *testing.T) {
446 sdlInstanceMock := initSdlInstanceMock(namespace, 1)
452 nbIdentity := &entities.NbIdentity{InventoryName: name, GlobalNbId: &entities.GlobalNbId{PlmnId: plmnId, NbId: nbId}}
454 data, err := proto.Marshal(nbIdentity)
456 t.Errorf("#rNibReader_test.TestGetListNodesIdsEnbSdlgoFailure - Failed to marshal nodeb identity entity. Error: %v", err)
458 sdlInstanceMock.On("GetMembers", GnbType).Return([]string{string(data)}, nilError)
459 sdlInstanceMock.On("GetMembers", EnbType).Return([]string{string(data)}, nilError)
461 ids, er := w.GetListNodebIds()
463 assert.NotNil(t, ids)
464 assert.Len(t, ids, 2)
467 func TestGetListEnbIdsUnmarshalFailure(t *testing.T) {
469 sdlInstanceMock := initSdlInstanceMock(namespace, 1)
472 sdlInstanceMock.On("GetMembers", EnbType).Return([]string{"data"}, e)
473 ids, er := w.GetListEnbIds()
476 assert.Equal(t, 2, er.GetCode())
477 assert.Equal(t, "2 INTERNAL_ERROR - proto: can't skip unknown wire type 4", er.Error())
480 func TestGetListEnbIdsOneId(t *testing.T) {
485 sdlInstanceMock := initSdlInstanceMock(namespace, 1)
487 nbIdentity := &entities.NbIdentity{InventoryName: name, GlobalNbId: &entities.GlobalNbId{PlmnId: plmnId, NbId: nbId}}
489 data, err := proto.Marshal(nbIdentity)
491 t.Errorf("#rNibReader_test.TestGetListEnbIds - Failed to marshal nodeb identity entity. Error: %v", err)
493 sdlInstanceMock.On("GetMembers", EnbType).Return([]string{string(data)}, e)
494 ids, er := w.GetListEnbIds()
496 assert.Len(t, *ids, 1)
497 assert.Equal(t, (*ids)[0].GetInventoryName(), name)
498 assert.Equal(t, (*ids)[0].GetGlobalNbId().GetPlmnId(), nbIdentity.GetGlobalNbId().GetPlmnId())
499 assert.Equal(t, (*ids)[0].GetGlobalNbId().GetNbId(), nbIdentity.GetGlobalNbId().GetNbId())
502 func TestGetListEnbIdsNoIds(t *testing.T) {
504 sdlInstanceMock := initSdlInstanceMock(namespace, 1)
507 sdlInstanceMock.On("GetMembers", EnbType).Return([]string{}, e)
508 ids, er := w.GetListEnbIds()
510 assert.Len(t, *ids, 0)
513 func TestGetListEnbIds(t *testing.T) {
519 sdlInstanceMock := initSdlInstanceMock(namespace, 1)
521 idsData := make([]string, listSize)
522 idsEntities := make([]*entities.NbIdentity, listSize)
523 for i := 0; i < listSize; i++ {
524 nbIdentity := &entities.NbIdentity{InventoryName: name, GlobalNbId: &entities.GlobalNbId{PlmnId: string(plmnId + i), NbId: string(nbId + i)}}
525 data, err := proto.Marshal(nbIdentity)
527 t.Errorf("#rNibReader_test.TestGetListEnbIds - Failed to marshal nodeb identity entity. Error: %v", err)
529 idsData[i] = string(data)
530 idsEntities[i] = nbIdentity
533 sdlInstanceMock.On("GetMembers", EnbType).Return(idsData, e)
534 ids, er := w.GetListEnbIds()
536 assert.Len(t, *ids, listSize)
537 for i, id := range *ids {
538 assert.Equal(t, id.GetInventoryName(), name)
539 assert.Equal(t, id.GetGlobalNbId().GetPlmnId(), idsEntities[i].GetGlobalNbId().GetPlmnId())
540 assert.Equal(t, id.GetGlobalNbId().GetNbId(), idsEntities[i].GetGlobalNbId().GetNbId())
544 func TestGetListGnbIdsOneId(t *testing.T) {
549 sdlInstanceMock := initSdlInstanceMock(namespace, 1)
551 nbIdentity := &entities.NbIdentity{InventoryName: name, GlobalNbId: &entities.GlobalNbId{PlmnId: plmnId, NbId: nbId}}
553 data, err := proto.Marshal(nbIdentity)
555 t.Errorf("#rNibReader_test.TestGetListGnbIds - Failed to marshal nodeb identity entity. Error: %v", err)
557 sdlInstanceMock.On("GetMembers", GnbType).Return([]string{string(data)}, e)
558 ids, er := w.GetListGnbIds()
560 assert.Len(t, *ids, 1)
561 assert.Equal(t, (*ids)[0].GetInventoryName(), name)
562 assert.Equal(t, (*ids)[0].GetGlobalNbId().GetPlmnId(), nbIdentity.GetGlobalNbId().GetPlmnId())
563 assert.Equal(t, (*ids)[0].GetGlobalNbId().GetNbId(), nbIdentity.GetGlobalNbId().GetNbId())
566 func TestGetListGnbIdsNoIds(t *testing.T) {
568 sdlInstanceMock := initSdlInstanceMock(namespace, 1)
571 sdlInstanceMock.On("GetMembers", GnbType).Return([]string{}, e)
572 ids, er := w.GetListGnbIds()
574 assert.Len(t, *ids, 0)
577 func TestGetListGnbIds(t *testing.T) {
583 sdlInstanceMock := initSdlInstanceMock(namespace, 1)
585 idsData := make([]string, listSize)
586 idsEntities := make([]*entities.NbIdentity, listSize)
587 for i := 0; i < listSize; i++ {
588 nbIdentity := &entities.NbIdentity{InventoryName: name, GlobalNbId: &entities.GlobalNbId{PlmnId: string(plmnId + i), NbId: string(nbId + i)}}
589 data, err := proto.Marshal(nbIdentity)
591 t.Errorf("#rNibReader_test.TestGetListGnbIds - Failed to marshal nodeb identity entity. Error: %v", err)
593 idsData[i] = string(data)
594 idsEntities[i] = nbIdentity
597 sdlInstanceMock.On("GetMembers", GnbType).Return(idsData, e)
598 ids, er := w.GetListGnbIds()
600 assert.Len(t, *ids, listSize)
601 for i, id := range *ids {
602 assert.Equal(t, id.GetInventoryName(), name)
603 assert.Equal(t, id.GetGlobalNbId().GetPlmnId(), idsEntities[i].GetGlobalNbId().GetPlmnId())
604 assert.Equal(t, id.GetGlobalNbId().GetNbId(), idsEntities[i].GetGlobalNbId().GetNbId())
608 func TestGetListEnbIdsSdlgoFailure(t *testing.T) {
609 errMsg := "expected Sdlgo error"
610 errMsgExpected := "2 INTERNAL_ERROR - expected Sdlgo error"
612 sdlInstanceMock := initSdlInstanceMock(namespace, 1)
614 e := errors.New(errMsg)
616 sdlInstanceMock.On("GetMembers", EnbType).Return(data, e)
617 ids, er := w.GetListEnbIds()
620 assert.Equal(t, 2, er.GetCode())
621 assert.EqualValues(t, errMsgExpected, er.Error())
624 func TestGetCountGnbListOneId(t *testing.T) {
626 sdlInstanceMock := initSdlInstanceMock(namespace, 1)
629 sdlInstanceMock.On("GroupSize", GnbType).Return(1, e)
630 count, er := w.GetCountGnbList()
632 assert.Equal(t, count, 1)
635 func TestGetCountGnbList(t *testing.T) {
637 sdlInstanceMock := initSdlInstanceMock(namespace, 1)
640 sdlInstanceMock.On("GroupSize", GnbType).Return(3, e)
641 count, er := w.GetCountGnbList()
643 assert.Equal(t, count, 3)
646 func TestGetCountGnbListSdlgoFailure(t *testing.T) {
647 errMsg := "expected Sdlgo error"
648 errMsgExpected := "2 INTERNAL_ERROR - expected Sdlgo error"
650 sdlInstanceMock := initSdlInstanceMock(namespace, 1)
652 e := errors.New(errMsg)
654 sdlInstanceMock.On("GroupSize", GnbType).Return(count, e)
655 count, er := w.GetCountGnbList()
657 assert.Equal(t, 0, count)
658 assert.Equal(t, 2, er.GetCode())
659 assert.EqualValues(t, errMsgExpected, er.Error())
662 func TestGetCell(t *testing.T) {
666 sdlInstanceMock := initSdlInstanceMock(namespace, 1)
668 cellEntity := entities.Cell{Type: entities.Cell_LTE_CELL, Cell: &entities.Cell_ServedCellInfo{ServedCellInfo: &entities.ServedCellInfo{Pci: pci}}}
669 cellData, err := proto.Marshal(&cellEntity)
671 t.Errorf("#rNibReader_test.TestGetCell - Failed to marshal Cell entity. Error: %v", err)
674 key, rNibErr := common.ValidateAndBuildCellNamePciKey(name, pci)
676 t.Errorf("#rNibReader_test.TestGetCell - failed to validate key parameter")
678 ret := map[string]interface{}{key: string(cellData)}
679 sdlInstanceMock.On("Get", []string{key}).Return(ret, e)
680 cell, er := w.GetCell(name, pci)
682 assert.NotNil(t, cell)
683 assert.Equal(t, cell.Type, entities.Cell_LTE_CELL)
684 assert.NotNil(t, cell.GetServedCellInfo())
685 assert.Equal(t, cell.GetServedCellInfo().GetPci(), pci)
688 func TestGetCellNotFoundFailure(t *testing.T) {
692 sdlInstanceMock := initSdlInstanceMock(namespace, 1)
695 var ret map[string]interface{}
696 key, rNibErr := common.ValidateAndBuildCellNamePciKey(name, pci)
698 t.Errorf("#rNibReader_test.TestGetCellNotFoundFailure - failed to validate key parameter")
700 sdlInstanceMock.On("Get", []string{key}).Return(ret, e)
701 cell, er := w.GetCell(name, pci)
704 assert.Equal(t, 1, er.GetCode())
705 assert.EqualValues(t, "1 RESOURCE_NOT_FOUND - #rNibReader.getCellByKey - cell not found, key: PCI:name:00", er.Error())
708 func TestGetCellUnmarshalFailure(t *testing.T) {
712 sdlInstanceMock := initSdlInstanceMock(namespace, 1)
715 ret := make(map[string]interface{}, 1)
716 key, rNibErr := common.ValidateAndBuildCellNamePciKey(name, pci)
718 t.Errorf("#rNibReader_test.TestGetCellUnmarshalFailure - failed to validate key parameter")
721 sdlInstanceMock.On("Get", []string{key}).Return(ret, e)
722 cell, er := w.GetCell(name, pci)
725 assert.Equal(t, 2, er.GetCode())
726 assert.EqualValues(t, "2 INTERNAL_ERROR - proto: can't skip unknown wire type 4", er.Error())
729 func TestGetCellSdlgoFailure(t *testing.T) {
732 errMsg := "expected Sdlgo error"
733 errMsgExpected := "2 INTERNAL_ERROR - expected Sdlgo error"
735 sdlInstanceMock := initSdlInstanceMock(namespace, 1)
737 e := errors.New(errMsg)
738 var ret map[string]interface{}
739 key, rNibErr := common.ValidateAndBuildCellNamePciKey(name, pci)
741 t.Errorf("#rNibReader_test.TestGetCellSdlgoFailure - failed to validate key parameter")
743 sdlInstanceMock.On("Get", []string{key}).Return(ret, e)
744 cell, er := w.GetCell(name, pci)
747 assert.Equal(t, 2, er.GetCode())
748 assert.EqualValues(t, errMsgExpected, er.Error())
751 func TestGetNodebById(t *testing.T) {
753 sdlInstanceMock := initSdlInstanceMock(namespace, 1)
755 nb := entities.NodebInfo{NodeType: entities.Node_ENB}
756 nb.ConnectionStatus = 1
759 enb := entities.Enb{}
760 cell := entities.ServedCellInfo{Tac: "tac"}
761 enb.ServedCells = []*entities.ServedCellInfo{&cell}
762 nb.Configuration = &entities.NodebInfo_Enb{Enb: &enb}
764 data, err := proto.Marshal(&nb)
766 t.Errorf("#rNibReader_test.TestGetNodebById - Failed to marshal ENB instance. Error: %v", err)
771 key, rNibErr := common.ValidateAndBuildNodeBIdKey(entities.Node_ENB.String(), plmnId, nbId)
773 t.Errorf("Failed to validate nodeb identity, plmnId: %s, nbId: %s", plmnId, nbId)
775 ret := map[string]interface{}{key: string(data)}
776 sdlInstanceMock.On("Get", []string{key}).Return(ret, e)
777 globalNbId := &entities.GlobalNbId{PlmnId: plmnId, NbId: nbId}
778 getNb, er := w.GetNodebByGlobalNbId(entities.Node_ENB, globalNbId)
780 assert.Equal(t, getNb.Ip, nb.Ip)
781 assert.Equal(t, getNb.Port, nb.Port)
782 assert.Equal(t, getNb.ConnectionStatus, nb.ConnectionStatus)
783 assert.Len(t, getNb.GetEnb().GetServedCells(), 1)
784 assert.Equal(t, getNb.GetEnb().GetServedCells()[0].Tac, nb.GetEnb().GetServedCells()[0].Tac)
787 func TestGetNodebByIdNotFoundFailureEnb(t *testing.T) {
791 sdlInstanceMock := initSdlInstanceMock(namespace, 1)
794 key, rNibErr := common.ValidateAndBuildNodeBIdKey(entities.Node_ENB.String(), plmnId, nbId)
796 t.Errorf("Failed to validate nodeb identity, plmnId: %s, nbId: %s", plmnId, nbId)
798 var ret map[string]interface{}
799 sdlInstanceMock.On("Get", []string{key}).Return(ret, e)
800 globalNbId := &entities.GlobalNbId{PlmnId: plmnId, NbId: nbId}
801 getNb, er := w.GetNodebByGlobalNbId(entities.Node_ENB, globalNbId)
804 assert.Equal(t, 1, er.GetCode())
805 assert.EqualValues(t, "1 RESOURCE_NOT_FOUND - #rNibReader.getNodeb - responding node not found. Key: ENB:02f829:4a952a0a", er.Error())
808 func TestGetNodebByIdNotFoundFailureGnb(t *testing.T) {
812 sdlInstanceMock := initSdlInstanceMock(namespace, 1)
815 key, rNibErr := common.ValidateAndBuildNodeBIdKey(entities.Node_GNB.String(), plmnId, nbId)
817 t.Errorf("Failed to validate nodeb identity, plmnId: %s, nbId: %s", plmnId, nbId)
819 var ret map[string]interface{}
820 sdlInstanceMock.On("Get", []string{key}).Return(ret, e)
821 globalNbId := &entities.GlobalNbId{PlmnId: plmnId, NbId: nbId}
822 getNb, er := w.GetNodebByGlobalNbId(entities.Node_GNB, globalNbId)
825 assert.Equal(t, 1, er.GetCode())
826 assert.EqualValues(t, "1 RESOURCE_NOT_FOUND - #rNibReader.getNodeb - responding node not found. Key: GNB:02f829:4a952a0a", er.Error())
829 func TestGetNodeByIdUnmarshalFailure(t *testing.T) {
833 sdlInstanceMock := initSdlInstanceMock(namespace, 1)
835 key, rNibErr := common.ValidateAndBuildNodeBIdKey(entities.Node_ENB.String(), plmnId, nbId)
837 t.Errorf("Failed to validate nodeb identity, plmnId: %s, nbId: %s", plmnId, nbId)
840 ret := make(map[string]interface{}, 1)
842 sdlInstanceMock.On("Get", []string{key}).Return(ret, e)
843 globalNbId := &entities.GlobalNbId{PlmnId: plmnId, NbId: nbId}
844 getNb, er := w.GetNodebByGlobalNbId(entities.Node_ENB, globalNbId)
847 assert.Equal(t, 2, er.GetCode())
848 assert.EqualValues(t, "2 INTERNAL_ERROR - proto: can't skip unknown wire type 4", er.Error())
851 func TestGetNodeByIdSdlgoFailure(t *testing.T) {
854 errMsg := "expected Sdlgo error"
855 errMsgExpected := "2 INTERNAL_ERROR - expected Sdlgo error"
857 sdlInstanceMock := initSdlInstanceMock(namespace, 1)
859 key, rNibErr := common.ValidateAndBuildNodeBIdKey(entities.Node_GNB.String(), plmnId, nbId)
861 t.Errorf("Failed to validate nodeb identity, plmnId: %s, nbId: %s", plmnId, nbId)
863 e := errors.New(errMsg)
864 var ret map[string]interface{}
865 sdlInstanceMock.On("Get", []string{key}).Return(ret, e)
866 globalNbId := &entities.GlobalNbId{PlmnId: plmnId, NbId: nbId}
867 getNb, er := w.GetNodebByGlobalNbId(entities.Node_GNB, globalNbId)
870 assert.Equal(t, 2, er.GetCode())
871 assert.EqualValues(t, errMsgExpected, er.Error())
874 func TestGetCellById(t *testing.T) {
878 sdlInstanceMock := initSdlInstanceMock(namespace, 1)
880 cellEntity := entities.Cell{Type: entities.Cell_LTE_CELL, Cell: &entities.Cell_ServedCellInfo{ServedCellInfo: &entities.ServedCellInfo{Pci: pci}}}
881 cellData, err := proto.Marshal(&cellEntity)
883 t.Errorf("#rNibReader_test.TestGetCellById - Failed to marshal Cell entity. Error: %v", err)
886 key, rNibErr := common.ValidateAndBuildCellIdKey(cellId)
888 t.Errorf("#rNibReader_test.TestGetCellById - failed to validate key parameter")
890 ret := map[string]interface{}{key: string(cellData)}
891 sdlInstanceMock.On("Get", []string{key}).Return(ret, e)
892 cell, er := w.GetCellById(entities.Cell_LTE_CELL, cellId)
894 assert.NotNil(t, cell)
895 assert.Equal(t, cell.Type, entities.Cell_LTE_CELL)
896 assert.NotNil(t, cell.GetServedCellInfo())
897 assert.Equal(t, cell.GetServedCellInfo().GetPci(), pci)
900 func TestGetCellByIdNotFoundFailureEnb(t *testing.T) {
903 sdlInstanceMock := initSdlInstanceMock(namespace, 1)
906 var ret map[string]interface{}
907 key, rNibErr := common.ValidateAndBuildCellIdKey(cellId)
909 t.Errorf("#rNibReader_test.TestGetCellByIdNotFoundFailure - failed to validate key parameter")
911 sdlInstanceMock.On("Get", []string{key}).Return(ret, e)
912 cell, er := w.GetCellById(entities.Cell_LTE_CELL, cellId)
915 assert.Equal(t, 1, er.GetCode())
916 assert.EqualValues(t, "1 RESOURCE_NOT_FOUND - #rNibReader.getCellByKey - cell not found, key: CELL:bbbb", er.Error())
919 func TestGetCellByIdNotFoundFailureGnb(t *testing.T) {
922 sdlInstanceMock := initSdlInstanceMock(namespace, 1)
925 var ret map[string]interface{}
926 key, rNibErr := common.ValidateAndBuildNrCellIdKey(cellId)
928 t.Errorf("#rNibReader_test.TestGetCellByIdNotFoundFailure - failed to validate key parameter")
930 sdlInstanceMock.On("Get", []string{key}).Return(ret, e)
931 cell, er := w.GetCellById(entities.Cell_NR_CELL, cellId)
934 assert.Equal(t, 1, er.GetCode())
935 assert.EqualValues(t, "1 RESOURCE_NOT_FOUND - #rNibReader.getCellByKey - cell not found, key: NRCELL:bbbb", er.Error())
938 func TestGetCellByIdTypeValidationFailure(t *testing.T) {
941 initSdlInstanceMock(namespace, 1)
943 cell, er := w.GetCellById(5, cellId)
946 assert.Equal(t, 3, er.GetCode())
947 assert.EqualValues(t, "3 VALIDATION_ERROR - #rNibReader.GetCellById - invalid cell type: 5", er.Error())
950 func TestGetCellByIdValidationFailureGnb(t *testing.T) {
953 initSdlInstanceMock(namespace, 1)
955 cell, er := w.GetCellById(entities.Cell_NR_CELL, cellId)
958 assert.Equal(t, 3, er.GetCode())
959 assert.EqualValues(t, "3 VALIDATION_ERROR - #utils.ValidateAndBuildNrCellIdKey - an empty cell id received", er.Error())
962 func TestGetCellByIdValidationFailureEnb(t *testing.T) {
965 initSdlInstanceMock(namespace, 1)
967 cell, er := w.GetCellById(entities.Cell_LTE_CELL, cellId)
970 assert.Equal(t, 3, er.GetCode())
971 assert.EqualValues(t, "3 VALIDATION_ERROR - #utils.ValidateAndBuildCellIdKey - an empty cell id received", er.Error())
974 func TestGetRanLoadInformation(t *testing.T) {
977 sdlInstanceMock := initSdlInstanceMock(namespace, 1)
979 loadInfo := generateRanLoadInformation()
981 data, err := proto.Marshal(loadInfo)
983 t.Errorf("#rNibReader_test.TestGetRanLoadInformation - Failed to marshal RanLoadInformation entity. Error: %v", err)
985 redisKey, rNibErr := common.ValidateAndBuildRanLoadInformationKey(name)
987 t.Errorf("#rNibReader_test.TestGetRanLoadInformationNotFoundFailure - failed to validate key parameter")
989 ret := map[string]interface{}{redisKey: string(data)}
990 sdlInstanceMock.On("Get", []string{redisKey}).Return(ret, e)
991 getLoadInfo, er := w.GetRanLoadInformation(name)
993 assert.NotNil(t, getLoadInfo)
994 expected, err := json.Marshal(loadInfo)
996 t.Errorf("#rNibReader_test.TestGetRanLoadInformation - Failed to marshal RanLoadInformation entity. Error: %v", err)
998 actual, err := json.Marshal(getLoadInfo)
1000 t.Errorf("#rNibReader_test.TestGetRanLoadInformation - Failed to marshal RanLoadInformation entity. Error: %v", err)
1002 assert.EqualValues(t, expected, actual)
1005 func TestGetRanLoadInformationNotFoundFailure(t *testing.T) {
1008 sdlInstanceMock := initSdlInstanceMock(namespace, 1)
1009 w := GetRNibReader()
1011 var ret map[string]interface{}
1012 redisKey, rNibErr := common.ValidateAndBuildRanLoadInformationKey(name)
1014 t.Errorf("#rNibReader_test.TestGetRanLoadInformationNotFoundFailure - failed to validate key parameter")
1016 sdlInstanceMock.On("Get", []string{redisKey}).Return(ret, e)
1017 getNb, er := w.GetRanLoadInformation(name)
1018 assert.NotNil(t, er)
1019 assert.Nil(t, getNb)
1020 assert.Equal(t, 1, er.GetCode())
1021 assert.EqualValues(t, "1 RESOURCE_NOT_FOUND - #rNibReader.getByKeyAndUnmarshal - entity of type *entities.RanLoadInformation not found. Key: LOAD:name", er.Error())
1024 func TestGetRanLoadInformationUnmarshalFailure(t *testing.T) {
1027 sdlInstanceMock := initSdlInstanceMock(namespace, 1)
1028 w := GetRNibReader()
1030 ret := make(map[string]interface{}, 1)
1031 redisKey, rNibErr := common.ValidateAndBuildRanLoadInformationKey(name)
1033 t.Errorf("#rNibReader_test.TestGetRanLoadInformationUnmarshalFailure - failed to validate key parameter")
1035 ret[redisKey] = "data"
1036 sdlInstanceMock.On("Get", []string{redisKey}).Return(ret, e)
1037 getNb, er := w.GetRanLoadInformation(name)
1038 assert.NotNil(t, er)
1039 assert.Nil(t, getNb)
1040 assert.Equal(t, 2, er.GetCode())
1041 assert.EqualValues(t, "2 INTERNAL_ERROR - proto: can't skip unknown wire type 4", er.Error())
1044 func TestGetRanLoadInformationSdlgoFailure(t *testing.T) {
1046 errMsg := "expected Sdlgo error"
1047 errMsgExpected := "2 INTERNAL_ERROR - expected Sdlgo error"
1049 sdlInstanceMock := initSdlInstanceMock(namespace, 1)
1050 w := GetRNibReader()
1051 e := errors.New(errMsg)
1052 var ret map[string]interface{}
1053 redisKey, rNibErr := common.ValidateAndBuildRanLoadInformationKey(name)
1055 t.Errorf("#rNibReader_test.TestGetRanLoadInformationSdlgoFailure - failed to validate key parameter")
1057 sdlInstanceMock.On("Get", []string{redisKey}).Return(ret, e)
1058 getNb, er := w.GetRanLoadInformation(name)
1059 assert.NotNil(t, er)
1060 assert.Nil(t, getNb)
1061 assert.Equal(t, 2, er.GetCode())
1062 assert.EqualValues(t, errMsgExpected, er.Error())
1065 func generateCellLoadInformation() *entities.CellLoadInformation {
1066 cellLoadInformation := entities.CellLoadInformation{}
1068 cellLoadInformation.CellId = "123"
1070 ulInterferenceOverloadIndication := entities.UlInterferenceOverloadIndication_HIGH_INTERFERENCE
1071 cellLoadInformation.UlInterferenceOverloadIndications = []entities.UlInterferenceOverloadIndication{ulInterferenceOverloadIndication}
1073 ulHighInterferenceInformation := entities.UlHighInterferenceInformation{
1075 UlHighInterferenceIndication:"xxx",
1078 cellLoadInformation.UlHighInterferenceInfos = []*entities.UlHighInterferenceInformation{&ulHighInterferenceInformation }
1080 cellLoadInformation.RelativeNarrowbandTxPower = &entities.RelativeNarrowbandTxPower{
1082 RntpThreshold:entities.RntpThreshold_NEG_4,
1083 NumberOfCellSpecificAntennaPorts: entities.NumberOfCellSpecificAntennaPorts_V1_ANT_PRT,
1085 PdcchInterferenceImpact:2,
1086 EnhancedRntp: &entities.EnhancedRntp{
1087 EnhancedRntpBitmap:"xxx",
1088 RntpHighPowerThreshold:entities.RntpThreshold_NEG_2,
1089 EnhancedRntpStartTime: &entities.StartTime{StartSfn:500,StartSubframeNumber:5},
1093 cellLoadInformation.AbsInformation = &entities.AbsInformation{
1094 Mode: entities.AbsInformationMode_ABS_INFO_FDD,
1095 AbsPatternInfo:"xxx",
1096 NumberOfCellSpecificAntennaPorts:entities.NumberOfCellSpecificAntennaPorts_V2_ANT_PRT,
1097 MeasurementSubset:"xxx",
1100 cellLoadInformation.InvokeIndication = entities.InvokeIndication_ABS_INFORMATION
1102 cellLoadInformation.ExtendedUlInterferenceOverloadInfo = &entities.ExtendedUlInterferenceOverloadInfo{
1103 AssociatedSubframes:"xxx",
1104 ExtendedUlInterferenceOverloadIndications:cellLoadInformation.UlInterferenceOverloadIndications,
1107 compInformationItem := &entities.CompInformationItem{
1108 CompHypothesisSets: []*entities.CompHypothesisSet{&entities.CompHypothesisSet{CellId: "789", CompHypothesis:"xxx"}},
1112 cellLoadInformation.CompInformation = &entities.CompInformation{
1113 CompInformationItems:[]*entities.CompInformationItem{compInformationItem},
1114 CompInformationStartTime:&entities.StartTime{StartSfn:123,StartSubframeNumber:456},
1117 cellLoadInformation.DynamicDlTransmissionInformation = &entities.DynamicDlTransmissionInformation{
1118 State: entities.NaicsState_NAICS_ACTIVE,
1119 TransmissionModes:"xxx",
1121 PAList:[]entities.PA{entities.PA_DB_NEG_3},
1124 return &cellLoadInformation
1127 func generateRanLoadInformation() *entities.RanLoadInformation {
1128 ranLoadInformation := entities.RanLoadInformation{}
1130 ranLoadInformation.LoadTimestamp = uint64(time.Now().UnixNano())
1132 cellLoadInformation := generateCellLoadInformation()
1133 ranLoadInformation.CellLoadInfos = []*entities.CellLoadInformation{cellLoadInformation}
1135 return &ranLoadInformation
1140 //func TestGetEnbInteg(t *testing.T){
1141 // name := "nameEnb1"
1142 // Init("namespace", 1)
1143 // w := GetRNibReader()
1144 // nb, err := w.GetNodeb(name)
1148 // fmt.Printf("#TestGetEnbInteg - responding node type: %v\n", nb)
1152 //func TestGetEnbCellsInteg(t *testing.T){
1153 // name := "nameEnb1"
1154 // Init("namespace", 1)
1155 // w := GetRNibReader()
1156 // cells, err := w.GetCellList(name)
1159 // } else if cells != nil{
1160 // for _, cell := range cells.GetServedCellInfos().ServedCells{
1161 // fmt.Printf("responding node type Cell: %v\n", *cell)
1166 //func TestGetGnbInteg(t *testing.T){
1167 // name := "nameGnb1"
1168 // Init("namespace", 1)
1169 // w := GetRNibReader()
1170 // nb, err := w.GetNodeb(name)
1174 // fmt.Printf("#TestGetGnbInteg - responding node type: %v\n", nb)
1178 //func TestGetGnbCellsInteg(t *testing.T){
1179 // name := "nameGnb1"
1180 // Init("namespace", 1)
1181 // w := GetRNibReader()
1182 // cells, err := w.GetCellList(name)
1185 // } else if cells != nil{
1186 // for _, cell := range cells.GetServedNrCells().ServedCells{
1187 // fmt.Printf("responding node type NR Cell: %v\n", *cell)
1192 //func TestGetListEnbIdsInteg(t *testing.T) {
1193 // Init("namespace", 1)
1194 // w := GetRNibReader()
1195 // ids, err := w.GetListEnbIds()
1199 // for _, id := range *ids{
1200 // fmt.Printf("#TestGetListEnbIdsInteg - ENB ID: %s\n", id)
1205 //func TestGetListGnbIdsInteg(t *testing.T) {
1206 // Init("namespace", 1)
1207 // w := GetRNibReader()
1208 // ids, err := w.GetListGnbIds()
1212 // for _, id := range *ids{
1213 // fmt.Printf("#TestGetListGnbIdsInteg - GNB ID: %s\n", id)
1218 //func TestGetCountGnbListInteg(t *testing.T) {
1219 // Init("namespace", 1)
1220 // w := GetRNibReader()
1221 // count, err := w.GetCountGnbList()
1225 // fmt.Printf("#TestGetCountGnbListInteg - count Gnb list: %d\n", count)
1229 //func TestGetGnbCellInteg(t *testing.T){
1230 // name := "nameGnb7"
1232 // Init("namespace", 1)
1233 // w := GetRNibReader()
1234 // cell, err := w.GetCell(name, uint32(pci))
1237 // } else if cell != nil{
1238 // fmt.Printf("responding node type NR Cell: %v\n", cell.GetServedNrCell())
1242 //func TestGetEnbCellInteg(t *testing.T) {
1243 // name := "nameEnb1"
1245 // Init("namespace", 1)
1246 // w := GetRNibReader()
1247 // cell, err := w.GetCell(name, uint32(pci))
1250 // } else if cell != nil {
1251 // fmt.Printf("responding node type LTE Cell: %v\n", cell.GetServedCellInfo())
1255 //func TestGetEnbCellByIdInteg(t *testing.T){
1256 // Init("namespace", 1)
1257 // w := GetRNibReader()
1258 // cell, err := w.GetCellById(entities.Cell_NR_CELL, "45d")
1261 // } else if cell != nil{
1262 // fmt.Printf("responding node type NR Cell: %v\n", cell.GetServedNrCell())