X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=E2Manager%2FrNibWriter%2FrNibWriter_test.go;h=4e0cdfc347a247dcc1bedf35bdf5b06c28267d5e;hb=7ec48b27b054a29e96e901eb43dfed257dea2990;hp=75cf7b01c08556ec373673cd624de61314a4b153;hpb=c7018fe32516829bc267efcc5a20818355768762;p=ric-plt%2Fe2mgr.git diff --git a/E2Manager/rNibWriter/rNibWriter_test.go b/E2Manager/rNibWriter/rNibWriter_test.go index 75cf7b0..4e0cdfc 100644 --- a/E2Manager/rNibWriter/rNibWriter_test.go +++ b/E2Manager/rNibWriter/rNibWriter_test.go @@ -37,6 +37,8 @@ var namespace = "namespace" const ( RanName = "test" + PlmnId = "02f829" + NbId = "4a952a0a" ) func initSdlInstanceMock(namespace string) (w RNibWriter, sdlInstanceMock *mocks.MockSdlInstance) { @@ -97,7 +99,7 @@ func generateServedCells(cellIds ...string) []*entities.ServedCellInfo { ChoiceEutraMode: &entities.ChoiceEUTRAMode{ Fdd: &entities.FddInfo{}, }, - Pci: uint32(i + 1), + Pci: uint32(i + 1), BroadcastPlmns: []string{"whatever"}, }) } @@ -112,7 +114,7 @@ func generateServedCellInfos(cellIds ...string) []*entities.ServedCellInfo { for i, v := range cellIds { servedCells = append(servedCells, &entities.ServedCellInfo{ CellId: v, - Pci: uint32(i + 1), + Pci: uint32(i + 1), }) } @@ -139,11 +141,39 @@ func TestUpdateGnbCellsInvalidNodebInfoFailure(t *testing.T) { w, sdlInstanceMock := initSdlInstanceMock(namespace) servedNrCells := generateServedNrCells("test1", "test2") nodebInfo := &entities.NodebInfo{} - sdlInstanceMock.AssertNotCalled(t, "Set") + sdlInstanceMock.AssertNotCalled(t, "SetAndPublish") rNibErr := w.UpdateGnbCells(nodebInfo, servedNrCells) assert.IsType(t, &common.ValidationError{}, rNibErr) } +func TestAddNbIdentitySuccess(t *testing.T) { + w, sdlInstanceMock := initSdlInstanceMock(namespace) + + nbIdentity := &entities.NbIdentity{InventoryName: RanName, GlobalNbId: &entities.GlobalNbId{PlmnId: PlmnId, NbId: NbId}} + nbIdData, err := proto.Marshal(nbIdentity) + if err != nil { + t.Fatalf("#rNibWriter_test.TestAddNbIdentitySuccess - Failed to marshal NodeB Identity entity. Error: %v", err) + } + + sdlInstanceMock.On("AddMember", "ENB", []interface{}{nbIdData}).Return(nil) + rNibErr := w.AddNbIdentity(entities.Node_ENB,nbIdentity) + assert.Nil(t, rNibErr) +} + +func TestAddNbIdentitySdlFailure(t *testing.T) { + w, sdlInstanceMock := initSdlInstanceMock(namespace) + + nbIdentity := &entities.NbIdentity{InventoryName: RanName, GlobalNbId: &entities.GlobalNbId{PlmnId: PlmnId, NbId: NbId}} + nbIdData, err := proto.Marshal(nbIdentity) + if err != nil { + t.Fatalf("#rNibWriter_test.TestAddNbIdentitySdlFailure - Failed to marshal NodeB Identity entity. Error: %v", err) + } + + sdlInstanceMock.On("AddMember", "ENB", []interface{}{nbIdData}).Return(errors.New("expected error")) + rNibErr := w.AddNbIdentity(entities.Node_ENB,nbIdentity) + assert.IsType(t, &common.InternalError{}, rNibErr) +} + func TestUpdateGnbCellsInvalidCellFailure(t *testing.T) { inventoryName := "name" plmnId := "02f829" @@ -152,11 +182,39 @@ func TestUpdateGnbCellsInvalidCellFailure(t *testing.T) { servedNrCells := []*entities.ServedNRCell{{ServedNrCellInformation: &entities.ServedNRCellInformation{}}} nodebInfo := generateNodebInfo(inventoryName, entities.Node_GNB, plmnId, nbId) nodebInfo.GetGnb().ServedNrCells = servedNrCells - sdlInstanceMock.AssertNotCalled(t, "Set") + sdlInstanceMock.AssertNotCalled(t, "SetAndPublish") rNibErr := w.UpdateGnbCells(nodebInfo, servedNrCells) assert.IsType(t, &common.ValidationError{}, rNibErr) } +func getUpdateEnbCellsSetExpected(t *testing.T, nodebInfo *entities.NodebInfo, servedCells []*entities.ServedCellInfo) []interface{} { + + nodebInfoData, err := proto.Marshal(nodebInfo) + if err != nil { + t.Fatalf("#rNibWriter_test.getUpdateEnbCellsSetExpected - Failed to marshal NodeB entity. Error: %s", err) + } + + nodebNameKey, _ := common.ValidateAndBuildNodeBNameKey(nodebInfo.RanName) + nodebIdKey, _ := common.ValidateAndBuildNodeBIdKey(nodebInfo.NodeType.String(), nodebInfo.GlobalNbId.PlmnId, nodebInfo.GlobalNbId.NbId) + setExpected := []interface{}{nodebNameKey, nodebInfoData, nodebIdKey, nodebInfoData} + + for _, cell := range servedCells { + + cellEntity := entities.Cell{Type: entities.Cell_LTE_CELL, Cell: &entities.Cell_ServedCellInfo{ServedCellInfo: cell}} + cellData, err := proto.Marshal(&cellEntity) + + if err != nil { + t.Fatalf("#rNibWriter_test.getUpdateEnbCellsSetExpected - Failed to marshal cell entity. Error: %s", err) + } + + nrCellIdKey, _ := common.ValidateAndBuildCellIdKey(cell.GetCellId()) + cellNamePciKey, _ := common.ValidateAndBuildCellNamePciKey(nodebInfo.RanName, cell.GetPci()) + setExpected = append(setExpected, nrCellIdKey, cellData, cellNamePciKey, cellData) + } + + return setExpected +} + func getUpdateGnbCellsSetExpected(t *testing.T, nodebInfo *entities.NodebInfo, servedNrCells []*entities.ServedNRCell) []interface{} { nodebInfoData, err := proto.Marshal(nodebInfo) @@ -194,7 +252,7 @@ func TestUpdateGnbCellsSdlFailure(t *testing.T) { nodebInfo := generateNodebInfo(inventoryName, entities.Node_GNB, plmnId, nbId) nodebInfo.GetGnb().ServedNrCells = servedNrCells setExpected := getUpdateGnbCellsSetExpected(t, nodebInfo, servedNrCells) - sdlInstanceMock.On("Set", []interface{}{setExpected}).Return(errors.New("expected error")) + sdlInstanceMock.On("SetAndPublish", []string{"RAN_MANIPULATION", inventoryName + "_" + RanUpdatedEvent}, []interface{}{setExpected}).Return(errors.New("expected error")) rNibErr := w.UpdateGnbCells(nodebInfo, servedNrCells) assert.IsType(t, &common.InternalError{}, rNibErr) } @@ -209,7 +267,7 @@ func TestUpdateGnbCellsSuccess(t *testing.T) { nodebInfo.GetGnb().ServedNrCells = servedNrCells setExpected := getUpdateGnbCellsSetExpected(t, nodebInfo, servedNrCells) var e error - sdlInstanceMock.On("Set", []interface{}{setExpected}).Return(e) + sdlInstanceMock.On("SetAndPublish",[]string{"RAN_MANIPULATION", inventoryName + "_" + RanUpdatedEvent}, []interface{}{setExpected}).Return(e) rNibErr := w.UpdateGnbCells(nodebInfo, servedNrCells) assert.Nil(t, rNibErr) } @@ -286,15 +344,20 @@ func TestUpdateNodebInfoMissingGlobalNbId(t *testing.T) { } func TestSaveEnb(t *testing.T) { - name := "name" - ranName := "RAN:" + name + ranName := "RAN:" + RanName w, sdlInstanceMock := initSdlInstanceMock(namespace) - nb := entities.NodebInfo{} - nb.RanName = name - nb.NodeType = entities.Node_ENB - nb.ConnectionStatus = 1 - nb.Ip = "localhost" - nb.Port = 5656 + nb := entities.NodebInfo{ + RanName: RanName, + NodeType: entities.Node_ENB, + ConnectionStatus: entities.ConnectionStatus_CONNECTED, + Ip: "localhost", + Port: 5656, + GlobalNbId: &entities.GlobalNbId{ + NbId: "4a952a0a", + PlmnId: "02f829", + }, + } + enb := entities.Enb{} cell := &entities.ServedCellInfo{CellId: "aaff", Pci: 3} cellEntity := entities.Cell{Type: entities.Cell_LTE_CELL, Cell: &entities.Cell_ServedCellInfo{ServedCellInfo: cell}} @@ -314,31 +377,17 @@ func TestSaveEnb(t *testing.T) { setExpected = append(setExpected, ranName, data) setExpected = append(setExpected, "ENB:02f829:4a952a0a", data) setExpected = append(setExpected, fmt.Sprintf("CELL:%s", cell.GetCellId()), cellData) - setExpected = append(setExpected, fmt.Sprintf("PCI:%s:%02x", name, cell.GetPci()), cellData) - - sdlInstanceMock.On("SetAndPublish", []string{"RAN_MANIPULATION", name + "_" + RanAddedEvent}, []interface{}{setExpected}).Return(e) - - nbIdData, err := proto.Marshal(&entities.NbIdentity{InventoryName: name}) - if err != nil { - t.Errorf("#rNibWriter_test.TestSaveEnb - Failed to marshal nbIdentity entity. Error: %v", err) - } - sdlInstanceMock.On("RemoveMember", entities.Node_UNKNOWN.String(), []interface{}{nbIdData}).Return(e) - - nbIdentity := &entities.NbIdentity{InventoryName: name, GlobalNbId: &entities.GlobalNbId{PlmnId: "02f829", NbId: "4a952a0a"}} - nbIdData, err = proto.Marshal(nbIdentity) - if err != nil { - t.Errorf("#rNibWriter_test.TestSaveEnb - Failed to marshal NodeB Identity entity. Error: %v", err) - } - sdlInstanceMock.On("AddMember", "ENB", []interface{}{nbIdData}).Return(e) + setExpected = append(setExpected, fmt.Sprintf("PCI:%s:%02x", RanName, cell.GetPci()), cellData) - rNibErr := w.SaveNodeb(nbIdentity, &nb) + sdlInstanceMock.On("Set", []interface{}{setExpected}).Return(e) + rNibErr := w.SaveNodeb(&nb) assert.Nil(t, rNibErr) } func TestSaveEnbCellIdValidationFailure(t *testing.T) { - name := "name" w, _ := initSdlInstanceMock(namespace) nb := entities.NodebInfo{} + nb.RanName = "name" nb.NodeType = entities.Node_ENB nb.ConnectionStatus = 1 nb.Ip = "localhost" @@ -347,9 +396,7 @@ func TestSaveEnbCellIdValidationFailure(t *testing.T) { cell := &entities.ServedCellInfo{Pci: 3} enb.ServedCells = []*entities.ServedCellInfo{cell} nb.Configuration = &entities.NodebInfo_Enb{Enb: &enb} - - nbIdentity := &entities.NbIdentity{InventoryName: name, GlobalNbId: &entities.GlobalNbId{PlmnId: "02f829", NbId: "4a952a0a"}} - rNibErr := w.SaveNodeb(nbIdentity, &nb) + rNibErr := w.SaveNodeb(&nb) assert.NotNil(t, rNibErr) assert.IsType(t, &common.ValidationError{}, rNibErr) assert.Equal(t, "#utils.ValidateAndBuildCellIdKey - an empty cell id received", rNibErr.Error()) @@ -357,27 +404,30 @@ func TestSaveEnbCellIdValidationFailure(t *testing.T) { func TestSaveEnbInventoryNameValidationFailure(t *testing.T) { w, _ := initSdlInstanceMock(namespace) - nb := entities.NodebInfo{} - nb.NodeType = entities.Node_ENB - nb.ConnectionStatus = 1 - nb.Ip = "localhost" - nb.Port = 5656 + nb := entities.NodebInfo{ + NodeType: entities.Node_ENB, + ConnectionStatus: entities.ConnectionStatus_CONNECTED, + Ip: "localhost", + Port: 5656, + GlobalNbId: &entities.GlobalNbId{ + NbId: "4a952a0a", + PlmnId: "02f829", + }, + } enb := entities.Enb{} cell := &entities.ServedCellInfo{CellId: "aaa", Pci: 3} enb.ServedCells = []*entities.ServedCellInfo{cell} nb.Configuration = &entities.NodebInfo_Enb{Enb: &enb} - - nbIdentity := &entities.NbIdentity{InventoryName: "", GlobalNbId: &entities.GlobalNbId{PlmnId: "02f829", NbId: "4a952a0a"}} - rNibErr := w.SaveNodeb(nbIdentity, &nb) + rNibErr := w.SaveNodeb(&nb) assert.NotNil(t, rNibErr) assert.IsType(t, &common.ValidationError{}, rNibErr) assert.Equal(t, "#utils.ValidateAndBuildNodeBNameKey - an empty inventory name received", rNibErr.Error()) } func TestSaveGnbCellIdValidationFailure(t *testing.T) { - name := "name" w, _ := initSdlInstanceMock(namespace) nb := entities.NodebInfo{} + nb.RanName = "name" nb.NodeType = entities.Node_GNB nb.ConnectionStatus = 1 nb.Ip = "localhost" @@ -388,22 +438,27 @@ func TestSaveGnbCellIdValidationFailure(t *testing.T) { gnb.ServedNrCells = []*entities.ServedNRCell{cell} nb.Configuration = &entities.NodebInfo_Gnb{Gnb: &gnb} - nbIdentity := &entities.NbIdentity{InventoryName: name, GlobalNbId: &entities.GlobalNbId{PlmnId: "02f829", NbId: "4a952a0a"}} - rNibErr := w.SaveNodeb(nbIdentity, &nb) + rNibErr := w.SaveNodeb(&nb) assert.NotNil(t, rNibErr) assert.IsType(t, &common.ValidationError{}, rNibErr) assert.Equal(t, "#utils.ValidateAndBuildNrCellIdKey - an empty cell id received", rNibErr.Error()) } func TestSaveGnb(t *testing.T) { - name := "name" - ranName := "RAN:" + name + ranName := "RAN:" + RanName w, sdlInstanceMock := initSdlInstanceMock(namespace) - nb := entities.NodebInfo{} - nb.NodeType = entities.Node_GNB - nb.ConnectionStatus = 1 - nb.Ip = "localhost" - nb.Port = 5656 + nb := entities.NodebInfo{ + RanName: RanName, + NodeType: entities.Node_GNB, + ConnectionStatus: 1, + GlobalNbId: &entities.GlobalNbId{ + NbId: "4a952a0a", + PlmnId: "02f829", + }, + Ip: "localhost", + Port: 5656, + } + gnb := entities.Gnb{} cellInfo := &entities.ServedNRCellInformation{NrPci: 2, CellId: "ccdd"} cell := &entities.ServedNRCell{ServedNrCellInformation: cellInfo} @@ -424,23 +479,10 @@ func TestSaveGnb(t *testing.T) { setExpected = append(setExpected, ranName, data) setExpected = append(setExpected, "GNB:02f829:4a952a0a", data) setExpected = append(setExpected, fmt.Sprintf("NRCELL:%s", cell.GetServedNrCellInformation().GetCellId()), cellData) - setExpected = append(setExpected, fmt.Sprintf("PCI:%s:%02x", name, cell.GetServedNrCellInformation().GetNrPci()), cellData) + setExpected = append(setExpected, fmt.Sprintf("PCI:%s:%02x", RanName, cell.GetServedNrCellInformation().GetNrPci()), cellData) sdlInstanceMock.On("Set", []interface{}{setExpected}).Return(e) - nbIdentity := &entities.NbIdentity{InventoryName: name, GlobalNbId: &entities.GlobalNbId{PlmnId: "02f829", NbId: "4a952a0a"}} - nbIdData, err := proto.Marshal(nbIdentity) - if err != nil { - t.Errorf("#rNibWriter_test.TestSaveGnb - Failed to marshal NodeB Identity entity. Error: %v", err) - } - sdlInstanceMock.On("AddMember", "GNB", []interface{}{nbIdData}).Return(e) - - nbIdData, err = proto.Marshal(&entities.NbIdentity{InventoryName: name}) - if err != nil { - t.Errorf("#rNibWriter_test.TestSaveEnb - Failed to marshal nbIdentity entity. Error: %v", err) - } - sdlInstanceMock.On("RemoveMember", entities.Node_UNKNOWN.String(), []interface{}{nbIdData}).Return(e) - - rNibErr := w.SaveNodeb(nbIdentity, &nb) + rNibErr := w.SaveNodeb(&nb) assert.Nil(t, rNibErr) } @@ -592,39 +634,74 @@ func generateRanLoadInformation() *entities.RanLoadInformation { func TestSaveNilEntityFailure(t *testing.T) { w, _ := initSdlInstanceMock(namespace) expectedErr := common.NewInternalError(errors.New("proto: Marshal called with nil")) - nbIdentity := &entities.NbIdentity{} - actualErr := w.SaveNodeb(nbIdentity, nil) + actualErr := w.SaveNodeb(nil) assert.Equal(t, expectedErr, actualErr) } func TestSaveUnknownTypeEntityFailure(t *testing.T) { w, _ := initSdlInstanceMock(namespace) - nbIdentity := &entities.NbIdentity{InventoryName: "name", GlobalNbId: &entities.GlobalNbId{PlmnId: "02f829", NbId: "4a952a0a"}} nb := &entities.NodebInfo{} nb.Port = 5656 nb.Ip = "localhost" - actualErr := w.SaveNodeb(nbIdentity, nb) + actualErr := w.SaveNodeb(nb) assert.IsType(t, &common.ValidationError{}, actualErr) } -func TestSaveEntityFailure(t *testing.T) { +func TestSaveEntitySetFailure(t *testing.T) { name := "name" plmnId := "02f829" nbId := "4a952a0a" w, sdlInstanceMock := initSdlInstanceMock(namespace) - gnb := entities.NodebInfo{} - gnb.NodeType = entities.Node_GNB + gnb := entities.NodebInfo{ + RanName: name, + NodeType: entities.Node_GNB, + ConnectionStatus: 1, + GlobalNbId: &entities.GlobalNbId{ + NbId: nbId, + PlmnId: plmnId, + }, + Ip: "localhost", + Port: 5656, + } data, err := proto.Marshal(&gnb) if err != nil { t.Errorf("#rNibWriter_test.TestSaveEntityFailure - Failed to marshal NodeB entity. Error: %v", err) } - nbIdentity := &entities.NbIdentity{InventoryName: name, GlobalNbId: &entities.GlobalNbId{PlmnId: plmnId, NbId: nbId}} setExpected := []interface{}{"RAN:" + name, data} setExpected = append(setExpected, "GNB:"+plmnId+":"+nbId, data) expectedErr := errors.New("expected error") sdlInstanceMock.On("Set", []interface{}{setExpected}).Return(expectedErr) - rNibErr := w.SaveNodeb(nbIdentity, &gnb) + rNibErr := w.SaveNodeb(&gnb) + assert.NotEmpty(t, rNibErr) +} + +func TestSaveEntitySetAndPublishFailure(t *testing.T) { + name := "name" + plmnId := "02f829" + nbId := "4a952a0a" + + w, sdlInstanceMock := initSdlInstanceMock(namespace) + enb := entities.NodebInfo{ + RanName: name, + NodeType: entities.Node_ENB, + ConnectionStatus: 1, + GlobalNbId: &entities.GlobalNbId{ + NbId: nbId, + PlmnId: plmnId, + }, + Ip: "localhost", + Port: 5656, + } + data, err := proto.Marshal(&enb) + if err != nil { + t.Errorf("#rNibWriter_test.TestSaveEntityFailure - Failed to marshal NodeB entity. Error: %v", err) + } + setExpected := []interface{}{"RAN:" + name, data} + setExpected = append(setExpected, "ENB:"+plmnId+":"+nbId, data) + expectedErr := errors.New("expected error") + sdlInstanceMock.On("SetAndPublish", []string{"RAN_MANIPULATION", name + "_" + RanAddedEvent}, []interface{}{setExpected}).Return(expectedErr) + rNibErr := w.AddEnb(&enb) assert.NotEmpty(t, rNibErr) } @@ -884,6 +961,18 @@ func TestSaveGeneralConfigurationDbError(t *testing.T) { assert.NotNil(t, rNibErr) } + +func TestRemoveServedCellsFailure(t *testing.T) { + w, sdlInstanceMock := initSdlInstanceMock(namespace) + servedCellsToRemove := generateServedCells("whatever1", "whatever2") + expectedErr := errors.New("expected error") + sdlInstanceMock.On("Remove", buildServedCellInfoKeysToRemove(RanName, servedCellsToRemove)).Return(expectedErr) + + rNibErr := w.RemoveServedCells(RanName, servedCellsToRemove) + + assert.NotNil(t, rNibErr) +} + func TestRemoveServedCellsSuccess(t *testing.T) { w, sdlInstanceMock := initSdlInstanceMock(namespace) servedCellsToRemove := generateServedCells("whatever1", "whatever2") @@ -914,35 +1003,35 @@ func TestUpdateEnbInvalidCellFailure(t *testing.T) { assert.IsType(t, &common.ValidationError{}, rNibErr) } -/*func TestUpdateEnbSdlFailure(t *testing.T) { - inventoryName := "ranName" +func TestUpdateEnbSdlFailure(t *testing.T) { + inventoryName := "name" plmnId := "02f829" nbId := "4a952a0a" w, sdlInstanceMock := initSdlInstanceMock(namespace) servedCells := generateServedCells("test1", "test2") - nodebInfo := generateNodebInfo(inventoryName, entities.Node_GNB, plmnId, nbId) + nodebInfo := generateNodebInfo(inventoryName, entities.Node_ENB, plmnId, nbId) nodebInfo.GetEnb().ServedCells = servedCells - setExpected := getUpdateEnbSetExpected(t, nodebInfo, servedCells) + setExpected := getUpdateEnbCellsSetExpected(t, nodebInfo, servedCells) sdlInstanceMock.On("SetAndPublish", []string{"RAN_MANIPULATION", inventoryName + "_" + RanUpdatedEvent}, []interface{}{setExpected}).Return(errors.New("expected error")) rNibErr := w.UpdateEnb(nodebInfo, servedCells) assert.IsType(t, &common.InternalError{}, rNibErr) -}*/ +} -/*func TestUpdateEnbSuccess(t *testing.T) { - inventoryName := "ranName" +func TestUpdateEnbSuccess(t *testing.T) { + inventoryName := "name" plmnId := "02f829" nbId := "4a952a0a" w, sdlInstanceMock := initSdlInstanceMock(namespace) servedCells := generateServedCells("test1", "test2") - nodebInfo := generateNodebInfo(inventoryName, entities.Node_GNB, plmnId, nbId) + nodebInfo := generateNodebInfo(inventoryName, entities.Node_ENB, plmnId, nbId) nodebInfo.GetEnb().ServedCells = servedCells - setExpected := getUpdateEnbSetExpected(t, nodebInfo, servedCells) + setExpected := getUpdateEnbCellsSetExpected(t, nodebInfo, servedCells) var e error sdlInstanceMock.On("SetAndPublish", []string{"RAN_MANIPULATION", inventoryName + "_" + RanUpdatedEvent}, []interface{}{setExpected}).Return(e) rNibErr := w.UpdateEnb(nodebInfo, servedCells) assert.Nil(t, rNibErr) -}*/ +} func getUpdateEnbSetExpected(t *testing.T, nodebInfo *entities.NodebInfo, servedCells []*entities.ServedCellInfo) []interface{} { @@ -983,13 +1072,6 @@ func TestRemoveEnbSuccess(t *testing.T) { var e error - nbIdentity := &entities.NbIdentity{InventoryName: nodebInfo.RanName, GlobalNbId: nodebInfo.GetGlobalNbId()} - nbIdData, err := proto.Marshal(nbIdentity) - if err != nil { - t.Errorf("#rNibWriter_test.TestRemoveEnbSuccess - Failed to marshal NbIdentity entity. Error: %v", err) - } - sdlInstanceMock.On("RemoveMember", entities.Node_ENB.String(), []interface{}{nbIdData}).Return(e) - expectedKeys := []string{} cell1Key := fmt.Sprintf("CELL:%s", nodebInfo.GetEnb().ServedCells[0].CellId) cell1PciKey := fmt.Sprintf("PCI:%s:%02x", inventoryName, nodebInfo.GetEnb().ServedCells[0].Pci) @@ -1005,58 +1087,141 @@ func TestRemoveEnbSuccess(t *testing.T) { sdlInstanceMock.AssertExpectations(t) } -func TestRemoveEnbRemoveNbIdentityError(t *testing.T) { +func TestRemoveEnbRemoveAndPublishError(t *testing.T) { inventoryName := "name" plmnId := "02f829" nbId := "4a952a0a" + channelName := "RAN_MANIPULATION" + eventName := inventoryName + "_" + "DELETED" w, sdlInstanceMock := initSdlInstanceMock(namespace) nodebInfo := generateNodebInfo(inventoryName, entities.Node_ENB, plmnId, nbId) nodebInfo.GetEnb().ServedCells = generateServedCellInfos("cell1", "cell2") - nbIdentity := &entities.NbIdentity{InventoryName: nodebInfo.RanName, GlobalNbId: nodebInfo.GetGlobalNbId()} + expectedKeys := []string{} + cell1Key := fmt.Sprintf("CELL:%s", nodebInfo.GetEnb().ServedCells[0].CellId) + cell1PciKey := fmt.Sprintf("PCI:%s:%02x", inventoryName, nodebInfo.GetEnb().ServedCells[0].Pci) + cell2Key := fmt.Sprintf("CELL:%s", nodebInfo.GetEnb().ServedCells[1].CellId) + cell2PciKey := fmt.Sprintf("PCI:%s:%02x", inventoryName, nodebInfo.GetEnb().ServedCells[1].Pci) + nodebNameKey := fmt.Sprintf("RAN:%s", inventoryName) + nodebIdKey := fmt.Sprintf("ENB:%s:%s", plmnId, nbId) + expectedKeys = append(expectedKeys, cell1Key, cell1PciKey, cell2Key, cell2PciKey, nodebNameKey, nodebIdKey) + sdlInstanceMock.On("RemoveAndPublish", []string{channelName, eventName}, expectedKeys).Return(errors.New("for test")) + + rNibErr := w.RemoveEnb(nodebInfo) + assert.NotNil(t, rNibErr) + sdlInstanceMock.AssertExpectations(t) +} + +func TestRemoveNbIdentitySuccess(t *testing.T) { + w, sdlInstanceMock := initSdlInstanceMock(namespace) + nbIdentity := &entities.NbIdentity{InventoryName: "ran1", ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, GlobalNbId: &entities.GlobalNbId{PlmnId: "plmnId1", NbId: "nbId1"}} nbIdData, err := proto.Marshal(nbIdentity) if err != nil { - t.Errorf("#rNibWriter_test.TestRemoveEnbSuccess - Failed to marshal NbIdentity entity. Error: %v", err) + t.Errorf("#TestRemoveNbIdentitySuccess - failed to Marshal NbIdentity") } - sdlInstanceMock.On("RemoveMember", entities.Node_ENB.String(), []interface{}{nbIdData}).Return(errors.New("for test")) - rNibErr := w.RemoveEnb(nodebInfo) + sdlInstanceMock.On("RemoveMember", entities.Node_ENB.String(), []interface{}{nbIdData}).Return(nil) + + rNibErr := w.RemoveNbIdentity(entities.Node_ENB, nbIdentity) + assert.Nil(t, rNibErr) + sdlInstanceMock.AssertExpectations(t) +} + +func TestRemoveNbIdentityError(t *testing.T) { + w, sdlInstanceMock := initSdlInstanceMock(namespace) + nbIdentity := &entities.NbIdentity{InventoryName: "ran1", ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, GlobalNbId: &entities.GlobalNbId{PlmnId: "plmnId1", NbId: "nbId1"}} + nbIdData, err := proto.Marshal(nbIdentity) + if err != nil { + t.Errorf("#TestRemoveNbIdentitySuccess - failed to Marshal NbIdentity") + } + + sdlInstanceMock.On("RemoveMember", entities.Node_ENB.String(), []interface{}{nbIdData}).Return(fmt.Errorf("for test")) + + rNibErr := w.RemoveNbIdentity(entities.Node_ENB, nbIdentity) assert.NotNil(t, rNibErr) sdlInstanceMock.AssertExpectations(t) } -func TestRemoveEnbRemoveAndPublishError(t *testing.T) { - inventoryName := "name" - plmnId := "02f829" - nbId := "4a952a0a" - channelName := "RAN_MANIPULATION" - eventName := inventoryName + "_" + "DELETED" +func TestAddEnb(t *testing.T) { + ranName := "RAN:" + RanName w, sdlInstanceMock := initSdlInstanceMock(namespace) - nodebInfo := generateNodebInfo(inventoryName, entities.Node_ENB, plmnId, nbId) - nodebInfo.GetEnb().ServedCells = generateServedCellInfos("cell1", "cell2") + nb := entities.NodebInfo{ + RanName: RanName, + NodeType: entities.Node_ENB, + ConnectionStatus: entities.ConnectionStatus_CONNECTED, + Ip: "localhost", + Port: 5656, + GlobalNbId: &entities.GlobalNbId{ + NbId: "4a952a0a", + PlmnId: "02f829", + }, + } + enb := entities.Enb{} + cell := &entities.ServedCellInfo{CellId: "aaff", Pci: 3} + cellEntity := entities.Cell{Type: entities.Cell_LTE_CELL, Cell: &entities.Cell_ServedCellInfo{ServedCellInfo: cell}} + enb.ServedCells = []*entities.ServedCellInfo{cell} + nb.Configuration = &entities.NodebInfo_Enb{Enb: &enb} + data, err := proto.Marshal(&nb) + if err != nil { + t.Errorf("#rNibWriter_test.TestSaveEnb - Failed to marshal NodeB entity. Error: %v", err) + } var e error - nbIdentity := &entities.NbIdentity{InventoryName: nodebInfo.RanName, GlobalNbId: nodebInfo.GetGlobalNbId()} - nbIdData, err := proto.Marshal(nbIdentity) + cellData, err := proto.Marshal(&cellEntity) if err != nil { - t.Errorf("#rNibWriter_test.TestRemoveEnbSuccess - Failed to marshal NbIdentity entity. Error: %v", err) + t.Errorf("#rNibWriter_test.TestSaveEnb - Failed to marshal Cell entity. Error: %v", err) } - sdlInstanceMock.On("RemoveMember", entities.Node_ENB.String(), []interface{}{nbIdData}).Return(e) + var setExpected []interface{} + setExpected = append(setExpected, ranName, data) + setExpected = append(setExpected, "ENB:02f829:4a952a0a", data) + setExpected = append(setExpected, fmt.Sprintf("CELL:%s", cell.GetCellId()), cellData) + setExpected = append(setExpected, fmt.Sprintf("PCI:%s:%02x", RanName, cell.GetPci()), cellData) - expectedKeys := []string{} - cell1Key := fmt.Sprintf("CELL:%s", nodebInfo.GetEnb().ServedCells[0].CellId) - cell1PciKey := fmt.Sprintf("PCI:%s:%02x", inventoryName, nodebInfo.GetEnb().ServedCells[0].Pci) - cell2Key := fmt.Sprintf("CELL:%s", nodebInfo.GetEnb().ServedCells[1].CellId) - cell2PciKey := fmt.Sprintf("PCI:%s:%02x", inventoryName, nodebInfo.GetEnb().ServedCells[1].Pci) - nodebNameKey := fmt.Sprintf("RAN:%s", inventoryName) - nodebIdKey := fmt.Sprintf("ENB:%s:%s", plmnId, nbId) - expectedKeys = append(expectedKeys, cell1Key, cell1PciKey, cell2Key, cell2PciKey, nodebNameKey, nodebIdKey) - sdlInstanceMock.On("RemoveAndPublish", []string{channelName, eventName}, expectedKeys).Return(errors.New("for test")) + sdlInstanceMock.On("SetAndPublish", []string{"RAN_MANIPULATION", RanName + "_" + RanAddedEvent}, []interface{}{setExpected}).Return(e) - rNibErr := w.RemoveEnb(nodebInfo) + rNibErr := w.AddEnb(&nb) + assert.Nil(t, rNibErr) +} + +func TestAddEnbCellIdValidationFailure(t *testing.T) { + w, _ := initSdlInstanceMock(namespace) + nb := entities.NodebInfo{} + nb.RanName = "name" + nb.NodeType = entities.Node_ENB + nb.ConnectionStatus = 1 + nb.Ip = "localhost" + nb.Port = 5656 + enb := entities.Enb{} + cell := &entities.ServedCellInfo{Pci: 3} + enb.ServedCells = []*entities.ServedCellInfo{cell} + nb.Configuration = &entities.NodebInfo_Enb{Enb: &enb} + rNibErr := w.AddEnb(&nb) assert.NotNil(t, rNibErr) - sdlInstanceMock.AssertExpectations(t) + assert.IsType(t, &common.ValidationError{}, rNibErr) + assert.Equal(t, "#utils.ValidateAndBuildCellIdKey - an empty cell id received", rNibErr.Error()) +} + +func TestAddEnbInventoryNameValidationFailure(t *testing.T) { + w, _ := initSdlInstanceMock(namespace) + nb := entities.NodebInfo{ + NodeType: entities.Node_ENB, + ConnectionStatus: entities.ConnectionStatus_CONNECTED, + Ip: "localhost", + Port: 5656, + GlobalNbId: &entities.GlobalNbId{ + NbId: "4a952a0a", + PlmnId: "02f829", + }, + } + enb := entities.Enb{} + cell := &entities.ServedCellInfo{CellId: "aaa", Pci: 3} + enb.ServedCells = []*entities.ServedCellInfo{cell} + nb.Configuration = &entities.NodebInfo_Enb{Enb: &enb} + rNibErr := w.AddEnb(&nb) + assert.NotNil(t, rNibErr) + assert.IsType(t, &common.ValidationError{}, rNibErr) + assert.Equal(t, "#utils.ValidateAndBuildNodeBNameKey - an empty inventory name received", rNibErr.Error()) } //Integration tests