[RIC-431] REDESIGN - Add RanListManager methods | Add/Update RnibWriter methods 82/4382/1
authoridanshal <idan.shalom@intl.att.com>
Tue, 14 Jul 2020 07:31:02 +0000 (07:31 +0000)
committeridanshal <idan.shalom@intl.att.com>
Tue, 14 Jul 2020 07:31:07 +0000 (07:31 +0000)
Change-Id: I3d567a5098c45d492020388891e351fa9e8e25fd
Signed-off-by: idanshal <idan.shalom@intl.att.com>
28 files changed:
E2Manager/app/main.go
E2Manager/container-tag.yaml
E2Manager/controllers/e2t_controller_test.go
E2Manager/controllers/nodeb_controller_test.go
E2Manager/go.mod
E2Manager/go.sum
E2Manager/handlers/httpmsghandlers/add_enb_request_handler.go
E2Manager/handlers/httpmsghandlers/delete_all_request_handler_test.go
E2Manager/handlers/rmrmsghandlers/e2_setup_request_notification_handler.go
E2Manager/handlers/rmrmsghandlers/e2_setup_request_notification_handler_test.go
E2Manager/handlers/rmrmsghandlers/e2_term_init_notification_handler_test.go
E2Manager/handlers/rmrmsghandlers/ran_lost_connection_handler_test.go
E2Manager/handlers/rmrmsghandlers/setup_response_notification_handler.go
E2Manager/handlers/rmrmsghandlers/setup_response_notification_handler_test.go
E2Manager/managers/e2t_association_manager_test.go
E2Manager/managers/e2t_shutdown_manager_test.go
E2Manager/managers/notificationmanager/notification_manager_test.go
E2Manager/managers/ran_disconnection_manager_test.go
E2Manager/managers/ran_list_manager.go
E2Manager/mocks/ran_list_manager_mock.go
E2Manager/mocks/rnibWriterMock.go
E2Manager/providers/httpmsghandlerprovider/incoming_request_handler_provider_test.go
E2Manager/providers/rmrmsghandlerprovider/notification_handler_provider_test.go
E2Manager/rNibWriter/rNibWriter.go
E2Manager/rNibWriter/rNibWriter_test.go
E2Manager/services/rmrreceiver/rmr_receiver_test.go
E2Manager/services/rnib_data_service.go
E2Manager/services/rnib_data_service_test.go

index dd30907..109a0da 100644 (file)
@@ -54,12 +54,21 @@ func main() {
        sdl := sdlgo.NewSdlInstance("e2Manager", db)
        defer sdl.Close()
        rnibDataService := services.NewRnibDataService(logger, config, reader.GetRNibReader(sdl), rNibWriter.GetRNibWriter(sdl, config.RnibWriter))
+
+       ranListManager := managers.NewRanListManager(logger, rnibDataService)
+
+       err = ranListManager.InitNbIdentityMap()
+
+       if err != nil {
+               logger.Errorf("#app.main - quit")
+               os.Exit(1)
+       }
+
        var msgImpl *rmrCgo.Context
        rmrMessenger := msgImpl.Init("tcp:"+strconv.Itoa(config.Rmr.Port), config.Rmr.MaxMsgSize, 0, logger)
        rmrSender := rmrsender.NewRmrSender(logger, rmrMessenger)
        e2tInstancesManager := managers.NewE2TInstancesManager(rnibDataService, logger)
        routingManagerClient := clients.NewRoutingManagerClient(logger, config, clients.NewHttpClient())
-       ranListManager := managers.NewRanListManager(logger)
        ranAlarmService := services.NewRanAlarmService(logger, config)
        ranConnectStatusChangeManager := managers.NewRanConnectStatusChangeManager(logger, rnibDataService, ranListManager, ranAlarmService)
        e2tAssociationManager := managers.NewE2TAssociationManager(logger, rnibDataService, e2tInstancesManager, routingManagerClient, ranConnectStatusChangeManager)
index e68769b..46e43c8 100644 (file)
@@ -1,4 +1,4 @@
 # The Jenkins job requires a tag to build the Docker image.
 # Global-JJB script assumes this file is in the repo root.
 ---
-tag: 5.2.12
+tag: 5.2.13
index 5db1832..872bb62 100644 (file)
@@ -55,7 +55,7 @@ func setupE2TControllerTest(t *testing.T) (*E2TController, *mocks.RnibReaderMock
        rnibDataService := services.NewRnibDataService(log, config, readerMock, nil)
        e2tInstancesManager := managers.NewE2TInstancesManager(rnibDataService, log)
 
-       ranListManager := managers.NewRanListManager(log)
+       ranListManager := managers.NewRanListManager(log, rnibDataService)
        ranAlarmService := services.NewRanAlarmService(log, config)
        ranConnectStatusChangeManager := managers.NewRanConnectStatusChangeManager(log, rnibDataService,ranListManager, ranAlarmService)
        nodebValidator := managers.NewNodebValidator()
index 79df8ce..a836b5c 100644 (file)
@@ -533,9 +533,9 @@ func activateControllerAddEnbMocks(context *controllerAddEnbTestContext, readerM
                        ConnectionStatus: entities.ConnectionStatus_DISCONNECTED,
                }
 
-               nbIdentity := entities.NbIdentity{InventoryName: addEnbRequest.RanName, GlobalNbId: addEnbRequest.GlobalNbId}
-
-               writerMock.On("SaveNodeb", &nbIdentity, &nodebInfo).Return(context.saveNodebParams.err)
+               //nbIdentity := entities.NbIdentity{InventoryName: addEnbRequest.RanName, GlobalNbId: addEnbRequest.GlobalNbId}
+               writerMock.On("SaveNodeb", &nodebInfo).Return(context.saveNodebParams.err)
+               // TODO: add writerMock.On("AddNbIdentity")
        }
 }
 
index a814482..adf931d 100644 (file)
@@ -1,9 +1,9 @@
 module e2mgr
 
 require (
-       gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common v1.0.44
-       gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.44
-       gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.44
+       gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common v1.0.45
+       gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.45
+       gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.45
        gerrit.o-ran-sc.org/r/ric-plt/sdlgo v0.5.2
        github.com/golang/protobuf v1.4.2
        github.com/gorilla/mux v1.7.0
index 4e490fb..7a519c9 100644 (file)
@@ -1,10 +1,16 @@
 cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
 gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common v1.0.44 h1:rda7Ubx7ZW579wWNduk/MD/9Fl7fsKo08KE+2ngIkZM=
 gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common v1.0.44/go.mod h1:QJ1uPPZosGbhxUWpUpeM5fLqFHdnWTrVnvW2DgyOCes=
+gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common v1.0.45 h1:2zwckksGVcIkXJeymAPvtyaO3bb+8UCyRENY8/q1yZs=
+gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common v1.0.45/go.mod h1:QJ1uPPZosGbhxUWpUpeM5fLqFHdnWTrVnvW2DgyOCes=
 gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.44 h1:/Kye3C5ZAJkK1ux1mNrQEE4Jph537EV6DJ1qOCtKPqQ=
 gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.44/go.mod h1:YaQ+XEI4PcAoISxp9wUpUr2TP0J7JihpQTD0G1Lpd4A=
+gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.45 h1:YuNGHpf6UsHkvi4qqxbE6ijuceRqoz5+qdWe6nUTNIU=
+gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.45/go.mod h1:YaQ+XEI4PcAoISxp9wUpUr2TP0J7JihpQTD0G1Lpd4A=
 gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.44 h1:VCOBMhSZJE3hZJLA+eJOZCrCoifCDi7ZmR3aMdV5mP8=
 gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.44/go.mod h1:eRI+ExoQG8rEzexqRtW5Shn2tT/7w9l+WqaiPZqOsEA=
+gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.45 h1:p+yPMhomeiQy+qermMGzBhwh/i9T2gaL8cWOT3V5DG4=
+gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.45/go.mod h1:3p1bZS4GA2MGVg5CHZEnMlCuO7KXpfW3Y38HTAbo6/4=
 gerrit.o-ran-sc.org/r/ric-plt/sdlgo.git v0.5.2 h1:UK7awyRKIkVdokWvvkYvazlg3EWIfMnIqCcJxTnLlDA=
 gerrit.o-ran-sc.org/r/ric-plt/sdlgo.git v0.5.2/go.mod h1:y2WhrCvdLkAKdH+ySdHSOSehACJkTMyZghCGVcqoZzc=
 github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
index e620d3c..92afb33 100644 (file)
@@ -70,16 +70,16 @@ func (h *AddEnbRequestHandler) Handle(request models.Request) (models.IResponse,
                return nil, e2managererrors.NewRnibDbError()
        }
 
-       nbIdentity := h.createNbIdentity(addEnbRequest)
        nodebInfo := h.createNodebInfo(addEnbRequest)
-
-       err = h.rNibDataService.SaveNodeb(nbIdentity, nodebInfo)
+       err = h.rNibDataService.SaveNodeb(nodebInfo)
 
        if err != nil {
                h.logger.Errorf("#AddEnbRequestHandler.Handle - RAN name: %s - failed to save nodeb entity in RNIB. Error: %s", addEnbRequest.RanName, err)
                return nil, e2managererrors.NewRnibDbError()
        }
 
+       _ = h.createNbIdentity(addEnbRequest) // TODO: add call to ranListManager
+
        return models.NewAddEnbResponse(nodebInfo), nil
 }
 
@@ -98,12 +98,11 @@ func (h *AddEnbRequestHandler) createNodebInfo(addEnbRequest *models.AddEnbReque
 }
 
 func (h *AddEnbRequestHandler) createNbIdentity(addEnbRequest *models.AddEnbRequest) *entities.NbIdentity {
-       nbIdentity := entities.NbIdentity{
-               GlobalNbId:    addEnbRequest.GlobalNbId,
-               InventoryName: addEnbRequest.RanName,
+       return &entities.NbIdentity{
+               GlobalNbId:       addEnbRequest.GlobalNbId,
+               InventoryName:    addEnbRequest.RanName,
+               ConnectionStatus: entities.ConnectionStatus_DISCONNECTED,
        }
-
-       return &nbIdentity
 }
 
 func (h *AddEnbRequestHandler) validateRequestBody(addEnbRequest *models.AddEnbRequest) error {
index f2c5e15..ef9a765 100644 (file)
@@ -62,7 +62,7 @@ func setupDeleteAllRequestHandlerTest(t *testing.T) (*DeleteAllRequestHandler, *
        httpClientMock := &mocks.HttpClientMock{}
        rmClient := clients.NewRoutingManagerClient(log, config, httpClientMock)
 
-       ranListManager := managers.NewRanListManager(log)
+       ranListManager := managers.NewRanListManager(log, rnibDataService)
        ranAlarmService := services.NewRanAlarmService(log, config)
        ranConnectStatusChangeManager := managers.NewRanConnectStatusChangeManager(log, rnibDataService,ranListManager, ranAlarmService)
 
index 0b8ce33..fd505de 100644 (file)
@@ -137,20 +137,15 @@ func (h *E2SetupRequestNotificationHandler) Handle(request *models.NotificationR
 
 func (h *E2SetupRequestNotificationHandler) handleNewRan(ranName string, e2tIpAddress string, setupRequest *models.E2SetupRequestMessage) (*entities.NodebInfo, error) {
 
-       nodebInfo, err := h.buildNodebInfo(ranName, e2tIpAddress, setupRequest)
+       nodebInfo := h.buildNodebInfo(ranName, e2tIpAddress, setupRequest)
+       err := h.rNibDataService.SaveNodeb(nodebInfo)
 
        if err != nil {
-               h.logger.Errorf("#E2SetupRequestNotificationHandler.handleNewRan - RAN name: %s - failed to build nodebInfo entity. Error: %s", ranName, err)
+               h.logger.Errorf("#E2SetupRequestNotificationHandler.handleNewRan - RAN name: %s - failed saving nodebInfo. Error: %s", ranName, err)
                return nil, err
        }
 
-       nbIdentity := h.buildNbIdentity(ranName, setupRequest)
-       err = h.rNibDataService.SaveNodeb(nbIdentity, nodebInfo)
-
-       if err != nil {
-               h.logger.Errorf("#E2SetupRequestNotificationHandler.handleNewRan - RAN name: %s - failed to save nodebInfo entity. Error: %s", ranName, err)
-               return nil, err
-       }
+       _ = h.buildNbIdentity(ranName, setupRequest) // TODO: add call to ranListManager
 
        return nodebInfo, nil
 }
@@ -286,9 +281,7 @@ func normalizeXml(payload []byte) []byte {
        return []byte(normalized)
 }
 
-func (h *E2SetupRequestNotificationHandler) buildNodebInfo(ranName string, e2tAddress string, request *models.E2SetupRequestMessage) (*entities.NodebInfo, error) {
-
-       var err error
+func (h *E2SetupRequestNotificationHandler) buildNodebInfo(ranName string, e2tAddress string, request *models.E2SetupRequestMessage) *entities.NodebInfo {
        nodebInfo := &entities.NodebInfo{
                AssociatedE2TInstanceAddress: e2tAddress,
                RanName:                      ranName,
@@ -298,7 +291,7 @@ func (h *E2SetupRequestNotificationHandler) buildNodebInfo(ranName string, e2tAd
        }
 
        h.setGnbFunctions(nodebInfo, request)
-       return nodebInfo, err
+       return nodebInfo
 }
 
 func (h *E2SetupRequestNotificationHandler) buildGlobalNbId(setupRequest *models.E2SetupRequestMessage) *entities.GlobalNbId {
index 137464b..2e2c693 100644 (file)
@@ -169,9 +169,9 @@ func TestE2SetupRequestNotificationHandler_HandleNewRanError(t *testing.T) {
        readerMock.On("GetNodeb", nodebRanName).Return(gnb, common.NewResourceNotFoundError("Not found"))
        notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append([]byte(e2SetupMsgPrefix), xml...)}
        nodebInfo := getExpectedNodebForNewRan(notificationRequest.Payload)
-       nbIdentity := &entities.NbIdentity{InventoryName: nodebRanName, GlobalNbId: nodebInfo.GlobalNbId}
-       writerMock.On("SaveNodeb", nbIdentity, nodebInfo).Return(common.NewInternalError(errors.New("error")))
-
+       writerMock.On("SaveNodeb", nodebInfo).Return(common.NewInternalError(errors.New("error")))
+       //nbIdentity := &entities.NbIdentity{InventoryName: nodebRanName, GlobalNbId: nodebInfo.GlobalNbId}
+       // TODO: add writerMock.On("AddNbIdentity")
        handler.Handle(notificationRequest)
 
        readerMock.AssertExpectations(t)
@@ -188,8 +188,9 @@ func testE2SetupRequestNotificationHandler_HandleNewRanSuccess(t *testing.T, xml
        readerMock.On("GetNodeb", nodebRanName).Return(gnb, common.NewResourceNotFoundError("Not found"))
        notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append([]byte(e2SetupMsgPrefix), xml...)}
        nodebInfo := getExpectedNodebForNewRan(notificationRequest.Payload)
-       nbIdentity := &entities.NbIdentity{InventoryName: nodebRanName, GlobalNbId: nodebInfo.GlobalNbId}
-       writerMock.On("SaveNodeb", nbIdentity, nodebInfo).Return(nil)
+       writerMock.On("SaveNodeb", nodebInfo).Return(nil)
+       //nbIdentity := &entities.NbIdentity{InventoryName: nodebRanName, GlobalNbId: nodebInfo.GlobalNbId}
+       // TODO: add writerMock.On("AddNbIdentity")
        updatedNodebInfo := *nodebInfo
        updatedNodebInfo.ConnectionStatus = entities.ConnectionStatus_CONNECTED
        writerMock.On("UpdateNodebInfoOnConnectionStatusInversion", &updatedNodebInfo, nodebRanName+"_CONNECTED").Return(nil)
@@ -408,7 +409,7 @@ func TestE2SetupRequestNotificationHandler_HandleAssociationError(t *testing.T)
        readerMock.On("GetNodeb", mock.Anything).Return(gnb, common.NewResourceNotFoundError("Not found"))
        notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append([]byte(e2SetupMsgPrefix), xmlGnb...)}
        nodebInfo := getExpectedNodebForNewRan(notificationRequest.Payload)
-       writerMock.On("SaveNodeb", mock.Anything, nodebInfo).Return(nil)
+       writerMock.On("SaveNodeb", nodebInfo).Return(nil)
        updatedNodebInfo := *nodebInfo
        updatedNodebInfo.ConnectionStatus = entities.ConnectionStatus_CONNECTED
        writerMock.On("UpdateNodebInfoOnConnectionStatusInversion", &updatedNodebInfo, nodebRanName+"_CONNECTED").Return(nil)
@@ -451,7 +452,7 @@ func TestE2SetupRequestNotificationHandler_ConvertTo20BitStringError(t *testing.
        routingManagerClientMock := &mocks.RoutingManagerClientMock{}
        rnibDataService := services.NewRnibDataService(logger, config, readerMock, writerMock)
        e2tInstancesManagerMock := &mocks.E2TInstancesManagerMock{}
-       ranListManager := managers.NewRanListManager(logger)
+       ranListManager := managers.NewRanListManager(logger, rnibDataService)
        ranAlarmService := services.NewRanAlarmService(logger, config)
        ranConnectStatusChangeManager := managers.NewRanConnectStatusChangeManager(logger, rnibDataService, ranListManager, ranAlarmService)
 
@@ -520,7 +521,7 @@ func initMocks(t *testing.T) (*E2SetupRequestNotificationHandler, *mocks.RnibRea
        routingManagerClientMock := &mocks.RoutingManagerClientMock{}
        rnibDataService := services.NewRnibDataService(logger, config, readerMock, writerMock)
        e2tInstancesManagerMock := &mocks.E2TInstancesManagerMock{}
-       ranListManager := managers.NewRanListManager(logger)
+       ranListManager := managers.NewRanListManager(logger, rnibDataService)
        ranAlarmService := services.NewRanAlarmService(logger, config)
        ranConnectStatusChangeManager := managers.NewRanConnectStatusChangeManager(logger, rnibDataService, ranListManager, ranAlarmService)
        e2tAssociationManager := managers.NewE2TAssociationManager(logger, rnibDataService, e2tInstancesManagerMock, routingManagerClientMock, ranConnectStatusChangeManager)
index 20e5a73..710503f 100644 (file)
@@ -88,7 +88,7 @@ func initRanLostConnectionTestWithRealE2tInstanceManager(t *testing.T) (*logger.
        rnibDataService := services.NewRnibDataService(logger, config, readerMock, writerMock)
 
        e2tInstancesManager := managers.NewE2TInstancesManager(rnibDataService, logger)
-       ranListManager := managers.NewRanListManager(logger)
+       ranListManager := managers.NewRanListManager(logger, rnibDataService)
        ranAlarmService := services.NewRanAlarmService(logger, config)
        ranConnectStatusChangeManager := managers.NewRanConnectStatusChangeManager(logger, rnibDataService,ranListManager, ranAlarmService)
        e2tAssociationManager := managers.NewE2TAssociationManager(logger, rnibDataService, e2tInstancesManager, routingManagerClient, ranConnectStatusChangeManager)
index c9c7366..3a428c1 100644 (file)
@@ -55,7 +55,7 @@ func setupLostConnectionHandlerTest(isSuccessfulHttpPost bool) (*RanLostConnecti
        e2tInstancesManager := managers.NewE2TInstancesManager(rnibDataService, logger)
        httpClientMock := &mocks.HttpClientMock{}
        routingManagerClient := clients.NewRoutingManagerClient(logger, config, httpClientMock)
-       ranListManager := managers.NewRanListManager(logger)
+       ranListManager := managers.NewRanListManager(logger, rnibDataService)
        ranAlarmService := services.NewRanAlarmService(logger, config)
        ranConnectStatusChangeManager := managers.NewRanConnectStatusChangeManager(logger, rnibDataService, ranListManager, ranAlarmService)
 
index 695a09f..1a7bb45 100644 (file)
@@ -80,7 +80,7 @@ func (h SetupResponseNotificationHandler) Handle(request *models.NotificationReq
                return
        }
 
-       rnibErr = h.rnibDataService.SaveNodeb(nbIdentity, nodebInfo)
+       rnibErr = h.rnibDataService.SaveNodeb(nodebInfo)
 
        if rnibErr != nil {
                h.logger.Errorf("#SetupResponseNotificationHandler - RAN name: %s - Error saving RAN to rNib: %v", request.RanName, rnibErr)
index 4d3a0ee..b401cbb 100644 (file)
@@ -149,7 +149,7 @@ func executeHandleSetupSuccessResponse(t *testing.T, tc setupSuccessResponseTest
        }
 
        testContext.readerMock.On("GetNodeb", RanName).Return(nodebInfo, rnibErr)
-       testContext.writerMock.On("SaveNodeb", mock.Anything, mock.Anything).Return(tc.saveNodebMockError)
+       testContext.writerMock.On("SaveNodeb", mock.Anything).Return(tc.saveNodebMockError)
        testContext.rmrMessengerMock.On("SendMsg", tc.statusChangeMbuf, true).Return(&rmrCgo.MBuf{}, tc.sendMsgError)
        handler.Handle(&notificationRequest)
 
@@ -186,7 +186,7 @@ func executeHandleSetupFailureResponse(t *testing.T, tc setupFailureResponseTest
        }
 
        testContext.readerMock.On("GetNodeb", RanName).Return(nodebInfo, rnibErr)
-       testContext.writerMock.On("SaveNodeb", mock.Anything, mock.Anything).Return(tc.saveNodebMockError)
+       testContext.writerMock.On("SaveNodeb", mock.Anything).Return(tc.saveNodebMockError)
        handler.Handle(&notificationRequest)
 
        return testContext, nodebInfo
@@ -207,7 +207,7 @@ func TestX2SetupResponse(t *testing.T) {
 
        testContext, nodebInfo := executeHandleSetupSuccessResponse(t, tc)
        testContext.readerMock.AssertCalled(t, "GetNodeb", RanName)
-       testContext.writerMock.AssertCalled(t, "SaveNodeb", mock.Anything, nodebInfo)
+       testContext.writerMock.AssertCalled(t, "SaveNodeb", nodebInfo)
        assert.EqualValues(t, entities.ConnectionStatus_CONNECTED, nodebInfo.ConnectionStatus)
        assert.EqualValues(t, entities.Node_ENB, nodebInfo.NodeType)
 
@@ -229,7 +229,7 @@ func TestX2SetupFailureResponse(t *testing.T) {
 
        testContext, nodebInfo := executeHandleSetupFailureResponse(t, tc)
        testContext.readerMock.AssertCalled(t, "GetNodeb", RanName)
-       testContext.writerMock.AssertCalled(t, "SaveNodeb", mock.Anything, nodebInfo)
+       testContext.writerMock.AssertCalled(t, "SaveNodeb", nodebInfo)
        assert.EqualValues(t, entities.ConnectionStatus_CONNECTED_SETUP_FAILED, nodebInfo.ConnectionStatus)
        assert.EqualValues(t, entities.Failure_X2_SETUP_FAILURE, nodebInfo.FailureType)
        assert.NotNil(t, nodebInfo.SetupFailure)
@@ -251,7 +251,7 @@ func TestEndcSetupResponse(t *testing.T) {
 
        testContext, nodebInfo := executeHandleSetupSuccessResponse(t, tc)
        testContext.readerMock.AssertCalled(t, "GetNodeb", RanName)
-       testContext.writerMock.AssertCalled(t, "SaveNodeb", mock.Anything, nodebInfo)
+       testContext.writerMock.AssertCalled(t, "SaveNodeb", nodebInfo)
        assert.EqualValues(t, entities.ConnectionStatus_CONNECTED, nodebInfo.ConnectionStatus)
        assert.EqualValues(t, entities.Node_GNB, nodebInfo.NodeType)
        assert.IsType(t, &entities.NodebInfo_Gnb{}, nodebInfo.Configuration)
@@ -273,7 +273,7 @@ func TestEndcSetupFailureResponse(t *testing.T) {
 
        testContext, nodebInfo := executeHandleSetupFailureResponse(t, tc)
        testContext.readerMock.AssertCalled(t, "GetNodeb", RanName)
-       testContext.writerMock.AssertCalled(t, "SaveNodeb", mock.Anything, nodebInfo)
+       testContext.writerMock.AssertCalled(t, "SaveNodeb", nodebInfo)
        assert.EqualValues(t, entities.ConnectionStatus_CONNECTED_SETUP_FAILED, nodebInfo.ConnectionStatus)
        assert.EqualValues(t, entities.Failure_ENDC_X2_SETUP_FAILURE, nodebInfo.FailureType)
        assert.NotNil(t, nodebInfo.SetupFailure)
@@ -309,7 +309,7 @@ func TestSetupResponseSaveNodebFailure(t *testing.T) {
 
        testContext, nodebInfo := executeHandleSetupSuccessResponse(t, tc)
        testContext.readerMock.AssertCalled(t, "GetNodeb", RanName)
-       testContext.writerMock.AssertCalled(t, "SaveNodeb", mock.Anything, nodebInfo)
+       testContext.writerMock.AssertCalled(t, "SaveNodeb", nodebInfo)
        testContext.rmrMessengerMock.AssertNotCalled(t, "SendMsg")
 }
 
@@ -328,7 +328,7 @@ func TestSetupResponseStatusChangeSendFailure(t *testing.T) {
 
        testContext, nodebInfo := executeHandleSetupSuccessResponse(t, tc)
        testContext.readerMock.AssertCalled(t, "GetNodeb", RanName)
-       testContext.writerMock.AssertCalled(t, "SaveNodeb", mock.Anything, nodebInfo)
+       testContext.writerMock.AssertCalled(t, "SaveNodeb", nodebInfo)
        assert.EqualValues(t, entities.ConnectionStatus_CONNECTED, nodebInfo.ConnectionStatus)
        assert.EqualValues(t, entities.Node_ENB, nodebInfo.NodeType)
 
index 3f8cad9..bc17295 100644 (file)
@@ -54,7 +54,7 @@ func initE2TAssociationManagerTest(t *testing.T) (*E2TAssociationManager, *mocks
        e2tInstancesManager := NewE2TInstancesManager(rnibDataService, log)
        httpClientMock := &mocks.HttpClientMock{}
        rmClient := clients.NewRoutingManagerClient(log, config, httpClientMock)
-       ranListManager := NewRanListManager(log)
+       ranListManager := NewRanListManager(log, rnibDataService)
        ranAlarmService := services.NewRanAlarmService(log, config)
        ranConnectStatusChangeManager := NewRanConnectStatusChangeManager(log, rnibDataService, ranListManager, ranAlarmService)
        e2tAssociationManager := NewE2TAssociationManager(log, rnibDataService, e2tInstancesManager, rmClient, ranConnectStatusChangeManager)
index fcf8649..537d153 100644 (file)
@@ -56,7 +56,7 @@ func initE2TShutdownManagerTest(t *testing.T) (*E2TShutdownManager, *mocks.RnibR
        httpClientMock := &mocks.HttpClientMock{}
        rmClient := clients.NewRoutingManagerClient(log, config, httpClientMock)
 
-       ranListManager := NewRanListManager(log)
+       ranListManager := NewRanListManager(log, rnibDataService)
        ranAlarmService := services.NewRanAlarmService(log, config)
        ranConnectStatusChangeManager := NewRanConnectStatusChangeManager(log, rnibDataService, ranListManager, ranAlarmService)
        associationManager := NewE2TAssociationManager(log, rnibDataService, e2tInstancesManager, rmClient, ranConnectStatusChangeManager)
index 3d73bd3..38631dd 100644 (file)
@@ -48,7 +48,7 @@ func initNotificationManagerTest(t *testing.T) (*logger.Logger, *mocks.RnibReade
        rnibDataService := services.NewRnibDataService(logger, config, readerMock, writerMock)
        e2tInstancesManager := managers.NewE2TInstancesManager(rnibDataService, logger)
        routingManagerClient := clients.NewRoutingManagerClient(logger, config, httpClient)
-       ranListManager := managers.NewRanListManager(logger)
+       ranListManager := managers.NewRanListManager(logger, rnibDataService)
        ranAlarmService := services.NewRanAlarmService(logger, config)
        ranConnectStatusChangeManager := managers.NewRanConnectStatusChangeManager(logger, rnibDataService,ranListManager, ranAlarmService)
        e2tAssociationManager := managers.NewE2TAssociationManager(logger, rnibDataService, e2tInstancesManager, routingManagerClient, ranConnectStatusChangeManager)
index abc7ffd..3773a55 100644 (file)
@@ -52,7 +52,7 @@ func initRanLostConnectionTest(t *testing.T) (*logger.Logger, *mocks.RmrMessenge
        e2tInstancesManager := NewE2TInstancesManager(rnibDataService, logger)
        httpClient := &mocks.HttpClientMock{}
        routingManagerClient := clients.NewRoutingManagerClient(logger, config, httpClient)
-       ranListManager := NewRanListManager(logger)
+       ranListManager := NewRanListManager(logger, rnibDataService)
        ranAlarmService := services.NewRanAlarmService(logger, config)
        ranConnectStatusChangeManager := NewRanConnectStatusChangeManager(logger, rnibDataService,ranListManager, ranAlarmService)
        e2tAssociationManager := NewE2TAssociationManager(logger, rnibDataService, e2tInstancesManager, routingManagerClient, ranConnectStatusChangeManager)
index 9ad10f2..90864c1 100644 (file)
@@ -21,24 +21,89 @@ package managers
 
 import (
        "e2mgr/logger"
+       "e2mgr/services"
        "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
+       "sync"
 )
 
 type ranListManagerInstance struct {
-       logger *logger.Logger
+       logger          *logger.Logger
+       rnibDataService services.RNibDataService
+       mux             sync.Mutex
+       nbIdentityMap   map[string]*entities.NbIdentity
 }
 
 type RanListManager interface {
-       UpdateRanState(nodebInfo *entities.NodebInfo) error
+       InitNbIdentityMap() error
+       AddNbIdentity(nodeType entities.Node_Type, nbIdentity *entities.NbIdentity) error
+       UpdateNbIdentityConnectionStatus(nodeType entities.Node_Type, ranName string, connectionStatus entities.ConnectionStatus) error
+       RemoveNbIdentity(nodeType entities.Node_Type, ranName string) error
+       GetNbIdentityList() []*entities.NbIdentity
+       UpdateRanState(nodebInfo *entities.NodebInfo) error // TODO: replace with UpdateNbIdentityConnectionStatus
 }
 
-func NewRanListManager(logger *logger.Logger) RanListManager {
+func NewRanListManager(logger *logger.Logger, rnibDataService services.RNibDataService) RanListManager {
        return &ranListManagerInstance{
-               logger: logger,
+               logger:          logger,
+               rnibDataService: rnibDataService,
+               nbIdentityMap:   make(map[string]*entities.NbIdentity),
        }
 }
 
+// TODO: replace with UpdateNbIdentityConnectionStatus
 func (m *ranListManagerInstance) UpdateRanState(nodebInfo *entities.NodebInfo) error {
        m.logger.Infof("#ranListManagerInstance.UpdateRanState - RAN name: %s - Updating state...", nodebInfo.RanName)
        return nil
 }
+
+func (m *ranListManagerInstance) InitNbIdentityMap() error {
+       nbIds, err := m.rnibDataService.GetListNodebIds()
+
+       if err != nil {
+               m.logger.Errorf("#ranListManagerInstance.InitRanList - Failed fetching RAN list from DB. error: %s", err)
+               return err
+       }
+
+       for _, v := range nbIds {
+               m.nbIdentityMap[v.InventoryName] = v
+       }
+
+       m.logger.Infof("#ranListManagerInstance.InitRanList - Successfully initiated nodeb identity map")
+       return nil
+}
+
+func (m *ranListManagerInstance) AddNbIdentity(nodeType entities.Node_Type, nbIdentity *entities.NbIdentity) error {
+       m.mux.Lock()
+       defer m.mux.Unlock()
+
+       m.nbIdentityMap[nbIdentity.InventoryName] = nbIdentity
+
+       err := m.rnibDataService.AddNbIdentity(nodeType, nbIdentity)
+
+       if err != nil {
+               m.logger.Errorf("#ranListManagerInstance.AddNbIdentity - RAN name: %s - Failed adding nodeb identity to DB. error: %s", nbIdentity.InventoryName, err)
+               return err
+       }
+
+       m.logger.Infof("#ranListManagerInstance.AddNbIdentity - RAN name: %s - Successfully added nodeb identity", nbIdentity.InventoryName)
+       return nil
+}
+
+func (m *ranListManagerInstance) UpdateNbIdentityConnectionStatus(nodeType entities.Node_Type, ranName string, connectionStatus entities.ConnectionStatus) error {
+       //TODO: implement
+       return nil
+}
+
+func (m *ranListManagerInstance) RemoveNbIdentity(nodeType entities.Node_Type, ranName string) error {
+       //TODO: implement
+       return nil
+}
+
+func (m *ranListManagerInstance) GetNbIdentityList() []*entities.NbIdentity {
+       nbIds := make([]*entities.NbIdentity, len(m.nbIdentityMap))
+       for _, v := range m.nbIdentityMap {
+               nbIds = append(nbIds, v)
+       }
+
+       return nbIds
+}
index 6df5c4f..9606070 100644 (file)
@@ -28,8 +28,34 @@ type RanListManagerMock struct {
        mock.Mock
 }
 
+// TODO: remove after replaced with UpdateNbIdentityConnectionStatus
 func (m *RanListManagerMock) UpdateRanState(nodebInfo *entities.NodebInfo) error {
 
        args := m.Called(nodebInfo)
        return args.Error(0)
-}
\ No newline at end of file
+}
+
+func (m *RanListManagerMock) InitNbIdentityMap() error {
+       args := m.Called()
+       return args.Error(0)
+}
+
+func (m *RanListManagerMock) AddNbIdentity(nodeType entities.Node_Type, nbIdentity *entities.NbIdentity) error {
+       args := m.Called(nodeType, nbIdentity)
+       return args.Error(0)
+}
+
+func (m *RanListManagerMock) UpdateNbIdentityConnectionStatus(nodeType entities.Node_Type, ranName string, connectionStatus entities.ConnectionStatus) error {
+       args := m.Called(nodeType, ranName, connectionStatus)
+       return args.Error(0)
+}
+
+func (m *RanListManagerMock) RemoveNbIdentity(nodeType entities.Node_Type, ranName string) error {
+       args := m.Called(nodeType, ranName)
+       return args.Error(0)
+}
+
+func (m *RanListManagerMock) GetNbIdentityList() []*entities.NbIdentity {
+       args := m.Called()
+       return args.Get(0).([]*entities.NbIdentity)
+}
index f84d845..fa711fb 100644 (file)
@@ -28,8 +28,8 @@ type RnibWriterMock struct {
        mock.Mock
 }
 
-func (rnibWriterMock *RnibWriterMock) SaveNodeb(nbIdentity *entities.NbIdentity, nb *entities.NodebInfo) error {
-       args := rnibWriterMock.Called(nbIdentity, nb)
+func (rnibWriterMock *RnibWriterMock) SaveNodeb(nodebInfo *entities.NodebInfo) error {
+       args := rnibWriterMock.Called(nodebInfo)
 
        errArg := args.Get(0)
 
@@ -120,4 +120,13 @@ func (rnibWriterMock *RnibWriterMock) UpdateEnb(nodebInfo *entities.NodebInfo, s
        args := rnibWriterMock.Called(nodebInfo, servedCells)
 
        return args.Error(0)
-}
\ No newline at end of file
+}
+
+func (rnibWriterMock *RnibWriterMock) AddNbIdentity(nodeType entities.Node_Type, nbIdentity *entities.NbIdentity) error {
+       args := rnibWriterMock.Called(nodeType, nbIdentity)
+       return args.Error(0)
+}
+func (rnibWriterMock *RnibWriterMock) RemoveNbIdentity(nodeType entities.Node_Type, nbIdentity *entities.NbIdentity) error {
+       args := rnibWriterMock.Called(nodeType, nbIdentity)
+       return args.Error(0)
+}
index 5ce3b9c..a0126c5 100644 (file)
@@ -54,7 +54,7 @@ func setupTest(t *testing.T) *IncomingRequestHandlerProvider {
        e2tInstancesManager := managers.NewE2TInstancesManager(rnibDataService, log)
        httpClientMock := &mocks.HttpClientMock{}
        rmClient := clients.NewRoutingManagerClient(log, config, httpClientMock)
-       ranListManager := managers.NewRanListManager(log)
+       ranListManager := managers.NewRanListManager(log, rnibDataService)
        ranAlarmService := services.NewRanAlarmService(log, config)
        ranConnectStatusChangeManager := managers.NewRanConnectStatusChangeManager(log, rnibDataService, ranListManager, ranAlarmService)
        nodebValidator := managers.NewNodebValidator()
index a1410e9..adf2a04 100644 (file)
@@ -53,7 +53,7 @@ func initTestCase(t *testing.T) (*logger.Logger, *configuration.Configuration, s
        rnibDataService := services.NewRnibDataService(logger, config, readerMock, writerMock)
        e2tInstancesManager := managers.NewE2TInstancesManager(rnibDataService, logger)
        routingManagerClient := clients.NewRoutingManagerClient(logger, config, httpClient)
-       ranListManager := managers.NewRanListManager(logger)
+       ranListManager := managers.NewRanListManager(logger, rnibDataService)
        ranAlarmService := services.NewRanAlarmService(logger, config)
        ranConnectStatusChangeManager := managers.NewRanConnectStatusChangeManager(logger, rnibDataService, ranListManager, ranAlarmService)
        e2tAssociationManager := managers.NewE2TAssociationManager(logger, rnibDataService, e2tInstancesManager, routingManagerClient, ranConnectStatusChangeManager)
index d874938..4c84d49 100644 (file)
@@ -44,7 +44,7 @@ type rNibWriterInstance struct {
 RNibWriter interface allows saving data to the redis DB
 */
 type RNibWriter interface {
-       SaveNodeb(nbIdentity *entities.NbIdentity, nb *entities.NodebInfo) error
+       SaveNodeb(nodebInfo *entities.NodebInfo) error
        UpdateNodebInfo(nodebInfo *entities.NodebInfo) error
        SaveRanLoadInformation(inventoryName string, ranLoadInformation *entities.RanLoadInformation) error
        SaveE2TInstance(e2tInstance *entities.E2TInstance) error
@@ -57,6 +57,8 @@ type RNibWriter interface {
        RemoveEnb(nodebInfo *entities.NodebInfo) error
        RemoveServedCells(inventoryName string, servedCells []*entities.ServedCellInfo) error
        UpdateEnb(nodebInfo *entities.NodebInfo, servedCells []*entities.ServedCellInfo) error
+       AddNbIdentity(nodeType entities.Node_Type, nbIdentity *entities.NbIdentity) error
+       RemoveNbIdentity(nodeType entities.Node_Type, nbIdentity *entities.NbIdentity) error
 }
 
 /*
@@ -67,6 +69,21 @@ func GetRNibWriter(sdl common.ISdlInstance, rnibWriterConfig configuration.RnibW
        return &rNibWriterInstance{sdl: sdl, rnibWriterConfig: rnibWriterConfig}
 }
 
+func (w *rNibWriterInstance) AddNbIdentity(nodeType entities.Node_Type, nbIdentity *entities.NbIdentity) error {
+       nbIdData, err := proto.Marshal(nbIdentity)
+
+       if err != nil {
+               return common.NewInternalError(err)
+       }
+
+       err = w.sdl.AddMember(nodeType.String(), nbIdData)
+
+       if err != nil {
+               return common.NewInternalError(err)
+       }
+       return nil
+}
+
 func (w *rNibWriterInstance) RemoveServedNrCells(inventoryName string, servedNrCells []*entities.ServedNRCell) error {
        cellKeysToRemove := buildServedNRCellKeysToRemove(inventoryName, servedNrCells)
 
@@ -105,23 +122,16 @@ func (w *rNibWriterInstance) SaveGeneralConfiguration(config *entities.GeneralCo
 /*
 SaveNodeb saves nodeB entity data in the redis DB according to the specified data model
 */
-func (w *rNibWriterInstance) SaveNodeb(nbIdentity *entities.NbIdentity, entity *entities.NodebInfo) error {
-       isNotEmptyIdentity := isNotEmpty(nbIdentity)
-
-       nodeType := entity.GetNodeType()
-
-       if isNotEmptyIdentity && nodeType == entities.Node_UNKNOWN {
-               return common.NewValidationError(fmt.Sprintf("#rNibWriter.saveNodeB - Unknown responding node type, entity: %v", entity))
-       }
+func (w *rNibWriterInstance) SaveNodeb(nodebInfo *entities.NodebInfo) error {
 
-       data, err := proto.Marshal(entity)
+       data, err := proto.Marshal(nodebInfo)
 
        if err != nil {
                return common.NewInternalError(err)
        }
 
        var pairs []interface{}
-       key, rNibErr := common.ValidateAndBuildNodeBNameKey(nbIdentity.InventoryName)
+       key, rNibErr := common.ValidateAndBuildNodeBNameKey(nodebInfo.RanName)
 
        if rNibErr != nil {
                return rNibErr
@@ -129,31 +139,31 @@ func (w *rNibWriterInstance) SaveNodeb(nbIdentity *entities.NbIdentity, entity *
 
        pairs = append(pairs, key, data)
 
-       if isNotEmptyIdentity {
+       if nodebInfo.GlobalNbId != nil {
 
-               key, rNibErr = common.ValidateAndBuildNodeBIdKey(nodeType.String(), nbIdentity.GlobalNbId.GetPlmnId(), nbIdentity.GlobalNbId.GetNbId())
+               key, rNibErr = common.ValidateAndBuildNodeBIdKey(nodebInfo.GetNodeType().String(), nodebInfo.GlobalNbId.GetPlmnId(), nodebInfo.GlobalNbId.GetNbId())
                if rNibErr != nil {
                        return rNibErr
                }
                pairs = append(pairs, key, data)
        }
 
-       if entity.GetEnb() != nil {
-               pairs, rNibErr = appendEnbCells(nbIdentity.InventoryName, entity.GetEnb().GetServedCells(), pairs)
+       if nodebInfo.GetEnb() != nil {
+               pairs, rNibErr = appendEnbCells(nodebInfo.RanName, nodebInfo.GetEnb().GetServedCells(), pairs)
                if rNibErr != nil {
                        return rNibErr
                }
        }
 
-       if entity.GetGnb() != nil {
-               pairs, rNibErr = appendGnbCells(nbIdentity.InventoryName, entity.GetGnb().GetServedNrCells(), pairs)
+       if nodebInfo.GetGnb() != nil {
+               pairs, rNibErr = appendGnbCells(nodebInfo.RanName, nodebInfo.GetGnb().GetServedNrCells(), pairs)
                if rNibErr != nil {
                        return rNibErr
                }
        }
 
-       if nodeType == entities.Node_ENB {
-               err = w.sdl.SetAndPublish([]string{w.rnibWriterConfig.RanManipulationMessageChannel, fmt.Sprintf("%s_%s", entity.RanName, RanAddedEvent)}, pairs)
+       if nodebInfo.GetNodeType() == entities.Node_ENB {
+               err = w.sdl.SetAndPublish([]string{w.rnibWriterConfig.RanManipulationMessageChannel, fmt.Sprintf("%s_%s", nodebInfo.RanName, RanAddedEvent)}, pairs)
        } else {
                err = w.sdl.Set(pairs)
        }
@@ -162,28 +172,6 @@ func (w *rNibWriterInstance) SaveNodeb(nbIdentity *entities.NbIdentity, entity *
                return common.NewInternalError(err)
        }
 
-       ranNameIdentity := &entities.NbIdentity{InventoryName: nbIdentity.InventoryName}
-
-       if isNotEmptyIdentity {
-               err := w.removeNbIdentity(entities.Node_UNKNOWN, ranNameIdentity)
-               if err != nil {
-                       return common.NewInternalError(err)
-               }
-       } else {
-               nbIdentity = ranNameIdentity
-       }
-
-       nbIdData, err := proto.Marshal(nbIdentity)
-
-       if err != nil {
-               return common.NewInternalError(err)
-       }
-
-       err = w.sdl.AddMember(nodeType.String(), nbIdData)
-
-       if err != nil {
-               return common.NewInternalError(err)
-       }
        return nil
 }
 
@@ -298,7 +286,7 @@ func (w *rNibWriterInstance) buildRemoveEnbKeys(nodebInfo *entities.NodebInfo) (
        return keys, nil
 }
 
-func (w *rNibWriterInstance) removeNbIdentity(nodeType entities.Node_Type ,nbIdentity *entities.NbIdentity) error {
+func (w *rNibWriterInstance) RemoveNbIdentity(nodeType entities.Node_Type, nbIdentity *entities.NbIdentity) error {
        nbIdData, err := proto.Marshal(nbIdentity)
        if err != nil {
                return common.NewInternalError(err)
@@ -459,12 +447,6 @@ func (w *rNibWriterInstance) UpdateNodebInfoOnConnectionStatusInversion(nodebInf
 }
 
 func (w *rNibWriterInstance) RemoveEnb(nodebInfo *entities.NodebInfo) error {
-       ranNameIdentity := &entities.NbIdentity{InventoryName: nodebInfo.RanName, GlobalNbId: nodebInfo.GetGlobalNbId()}
-       err := w.removeNbIdentity(entities.Node_ENB, ranNameIdentity)
-       if err != nil {
-               return err
-       }
-
        keysToRemove, err := w.buildRemoveEnbKeys(nodebInfo)
        if err != nil {
                return err
@@ -501,6 +483,7 @@ func (w *rNibWriterInstance) UpdateEnb(nodebInfo *entities.NodebInfo, servedCell
 
        return nil
 }
+
 /*
 Close the writer
 */
@@ -548,8 +531,4 @@ func appendGnbCells(inventoryName string, cells []*entities.ServedNRCell, pairs
                pairs = append(pairs, key, cellData)
        }
        return pairs, nil
-}
-
-func isNotEmpty(nbIdentity *entities.NbIdentity) bool {
-       return nbIdentity.GlobalNbId != nil && nbIdentity.GlobalNbId.PlmnId != "" && nbIdentity.GlobalNbId.NbId != ""
 }
\ No newline at end of file
index 0685743..3dadce8 100644 (file)
@@ -97,7 +97,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 +112,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),
                })
        }
 
@@ -314,15 +314,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}}
@@ -342,31 +347,18 @@ 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)
+       setExpected = append(setExpected, fmt.Sprintf("PCI:%s:%02x", RanName, cell.GetPci()), cellData)
 
-       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)
+       sdlInstanceMock.On("SetAndPublish", []string{"RAN_MANIPULATION", RanName + "_" + RanAddedEvent}, []interface{}{setExpected}).Return(e)
 
-       rNibErr := w.SaveNodeb(nbIdentity, &nb)
+       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"
@@ -375,9 +367,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())
@@ -385,27 +375,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"
@@ -416,22 +409,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}
@@ -452,23 +450,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)
 }
 
@@ -620,18 +605,16 @@ 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)
 }
 
@@ -647,12 +630,11 @@ func TestSaveEntityFailure(t *testing.T) {
        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)
 }
 
@@ -1023,13 +1005,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)
@@ -1045,26 +1020,6 @@ func TestRemoveEnbSuccess(t *testing.T) {
        sdlInstanceMock.AssertExpectations(t)
 }
 
-func TestRemoveEnbRemoveNbIdentityError(t *testing.T) {
-       inventoryName := "name"
-       plmnId := "02f829"
-       nbId := "4a952a0a"
-       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()}
-       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(errors.New("for test"))
-
-       rNibErr := w.RemoveEnb(nodebInfo)
-       assert.NotNil(t, rNibErr)
-       sdlInstanceMock.AssertExpectations(t)
-}
-
 func TestRemoveEnbRemoveAndPublishError(t *testing.T) {
        inventoryName := "name"
        plmnId := "02f829"
@@ -1075,15 +1030,6 @@ func TestRemoveEnbRemoveAndPublishError(t *testing.T) {
        nodebInfo := generateNodebInfo(inventoryName, entities.Node_ENB, plmnId, nbId)
        nodebInfo.GetEnb().ServedCells = generateServedCellInfos("cell1", "cell2")
 
-       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)
index 4a196cf..d4d4529 100644 (file)
@@ -70,7 +70,7 @@ func initRmrReceiver(logger *logger.Logger) *RmrReceiver {
        rmrSender := rmrsender.NewRmrSender(logger, rmrMessenger)
        e2tInstancesManager := managers.NewE2TInstancesManager(rnibDataService, logger)
        routingManagerClient := clients.NewRoutingManagerClient(logger, config, httpClient)
-       ranListManager := managers.NewRanListManager(logger)
+       ranListManager := managers.NewRanListManager(logger, rnibDataService)
        ranAlarmService := services.NewRanAlarmService(logger, config)
        ranConnectStatusChangeManager := managers.NewRanConnectStatusChangeManager(logger, rnibDataService, ranListManager, ranAlarmService)
        e2tAssociationManager := managers.NewE2TAssociationManager(logger, rnibDataService, e2tInstancesManager, routingManagerClient, ranConnectStatusChangeManager)
index c1bf97b..f4e0b5a 100644 (file)
@@ -31,7 +31,7 @@ import (
 )
 
 type RNibDataService interface {
-       SaveNodeb(nbIdentity *entities.NbIdentity, nb *entities.NodebInfo) error
+       SaveNodeb(nodebInfo *entities.NodebInfo) error
        UpdateNodebInfo(nodebInfo *entities.NodebInfo) error
        SaveRanLoadInformation(inventoryName string, ranLoadInformation *entities.RanLoadInformation) error
        GetNodeb(ranName string) (*entities.NodebInfo, error)
@@ -55,26 +55,38 @@ type RNibDataService interface {
        RemoveEnb(nodebInfo *entities.NodebInfo) error
        RemoveServedCells(inventoryName string, servedCells []*entities.ServedCellInfo) error
        UpdateEnb(nodebInfo *entities.NodebInfo, servedCells []*entities.ServedCellInfo) error
+       AddNbIdentity(nodeType entities.Node_Type, nbIdentity *entities.NbIdentity) error
 }
 
 type rNibDataService struct {
-       logger           *logger.Logger
-       rnibReader       reader.RNibReader
-       rnibWriter       rNibWriter.RNibWriter
-       maxAttempts      int
-       retryInterval    time.Duration
+       logger        *logger.Logger
+       rnibReader    reader.RNibReader
+       rnibWriter    rNibWriter.RNibWriter
+       maxAttempts   int
+       retryInterval time.Duration
 }
 
 func NewRnibDataService(logger *logger.Logger, config *configuration.Configuration, rnibReader reader.RNibReader, rnibWriter rNibWriter.RNibWriter) *rNibDataService {
        return &rNibDataService{
-               logger:           logger,
-               rnibReader:       rnibReader,
-               rnibWriter:       rnibWriter,
-               maxAttempts:      config.MaxRnibConnectionAttempts,
-               retryInterval:    time.Duration(config.RnibRetryIntervalMs) * time.Millisecond,
+               logger:        logger,
+               rnibReader:    rnibReader,
+               rnibWriter:    rnibWriter,
+               maxAttempts:   config.MaxRnibConnectionAttempts,
+               retryInterval: time.Duration(config.RnibRetryIntervalMs) * time.Millisecond,
        }
 }
 
+func (w *rNibDataService) AddNbIdentity(nodeType entities.Node_Type, nbIdentity *entities.NbIdentity) error {
+       w.logger.Infof("#RnibDataService.AddNbIdentity - nbIdentity: %s", nbIdentity)
+
+       err := w.retry("AddNbIdentity", func() (err error) {
+               err = w.rnibWriter.AddNbIdentity(nodeType, nbIdentity)
+               return
+       })
+
+       return err
+}
+
 func (w *rNibDataService) RemoveServedNrCells(inventoryName string, servedNrCells []*entities.ServedNRCell) error {
        err := w.retry("RemoveServedNrCells", func() (err error) {
                err = w.rnibWriter.RemoveServedNrCells(inventoryName, servedNrCells)
@@ -117,11 +129,11 @@ func (w *rNibDataService) UpdateNodebInfo(nodebInfo *entities.NodebInfo) error {
        return err
 }
 
-func (w *rNibDataService) SaveNodeb(nbIdentity *entities.NbIdentity, nb *entities.NodebInfo) error {
-       w.logger.Infof("#RnibDataService.SaveNodeb - nbIdentity: %s, nodebInfo: %s", nbIdentity, nb)
+func (w *rNibDataService) SaveNodeb(nodebInfo *entities.NodebInfo) error {
+       w.logger.Infof("#RnibDataService.SaveNodeb - nodebInfo: %s", nodebInfo)
 
        err := w.retry("SaveNodeb", func() (err error) {
-               err = w.rnibWriter.SaveNodeb(nbIdentity, nb)
+               err = w.rnibWriter.SaveNodeb(nodebInfo)
                return
        })
 
index 07e2c45..5460608 100644 (file)
@@ -17,7 +17,6 @@
 //  This source code is part of the near-RT RIC (RAN Intelligent Controller)
 //  platform project (RICP).
 
-
 package services
 
 import (
@@ -47,10 +46,8 @@ func setupRnibDataServiceTestWithMaxAttempts(t *testing.T, maxAttempts int) (*rN
 
        readerMock := &mocks.RnibReaderMock{}
 
-
        writerMock := &mocks.RnibWriterMock{}
 
-
        rnibDataService := NewRnibDataService(logger, config, readerMock, writerMock)
        assert.NotNil(t, rnibDataService)
 
@@ -61,10 +58,9 @@ func TestSuccessfulSaveNodeb(t *testing.T) {
        rnibDataService, _, writerMock := setupRnibDataServiceTest(t)
 
        nodebInfo := &entities.NodebInfo{}
-       nbIdentity := &entities.NbIdentity{}
-       writerMock.On("SaveNodeb", nbIdentity, nodebInfo).Return(nil)
+       writerMock.On("SaveNodeb", nodebInfo).Return(nil)
 
-       rnibDataService.SaveNodeb(nbIdentity, nodebInfo)
+       rnibDataService.SaveNodeb(nodebInfo)
        writerMock.AssertNumberOfCalls(t, "SaveNodeb", 1)
 }
 
@@ -72,11 +68,10 @@ func TestConnFailureSaveNodeb(t *testing.T) {
        rnibDataService, _, writerMock := setupRnibDataServiceTest(t)
 
        nodebInfo := &entities.NodebInfo{}
-       nbIdentity := &entities.NbIdentity{}
        mockErr := &common.InternalError{Err: &net.OpError{Err: fmt.Errorf("connection error")}}
-       writerMock.On("SaveNodeb", nbIdentity, nodebInfo).Return(mockErr)
+       writerMock.On("SaveNodeb", nodebInfo).Return(mockErr)
 
-       rnibDataService.SaveNodeb(nbIdentity, nodebInfo)
+       rnibDataService.SaveNodeb(nodebInfo)
        writerMock.AssertNumberOfCalls(t, "SaveNodeb", 3)
 }
 
@@ -84,11 +79,10 @@ func TestNonConnFailureSaveNodeb(t *testing.T) {
        rnibDataService, _, writerMock := setupRnibDataServiceTest(t)
 
        nodebInfo := &entities.NodebInfo{}
-       nbIdentity := &entities.NbIdentity{}
        mockErr := &common.InternalError{Err: fmt.Errorf("non connection failure")}
-       writerMock.On("SaveNodeb", nbIdentity, nodebInfo).Return(mockErr)
+       writerMock.On("SaveNodeb", nodebInfo).Return(mockErr)
 
-       rnibDataService.SaveNodeb(nbIdentity, nodebInfo)
+       rnibDataService.SaveNodeb(nodebInfo)
        writerMock.AssertNumberOfCalls(t, "SaveNodeb", 1)
 }
 
@@ -159,7 +153,7 @@ func TestConnFailureGetNodeb(t *testing.T) {
 
        res, err := rnibDataService.GetNodeb(invName)
        readerMock.AssertNumberOfCalls(t, "GetNodeb", 3)
-       assert.True(t, strings.Contains(err.Error(), "connection error"))
+       assert.True(t, strings.Contains(err.Error(), "connection error"))
        assert.Equal(t, nodeb, res)
 }
 
@@ -184,7 +178,7 @@ func TestConnFailureGetNodebIdList(t *testing.T) {
 
        res, err := rnibDataService.GetListNodebIds()
        readerMock.AssertNumberOfCalls(t, "GetListNodebIds", 3)
-       assert.True(t, strings.Contains(err.Error(), "connection error"))
+       assert.True(t, strings.Contains(err.Error(), "connection error"))
        assert.Equal(t, nodeIds, res)
 }
 
@@ -200,12 +194,12 @@ func TestConnFailureTwiceGetNodebIdList(t *testing.T) {
 
        res, err := rnibDataService.GetListNodebIds()
        readerMock.AssertNumberOfCalls(t, "GetListNodebIds", 3)
-       assert.True(t, strings.Contains(err.Error(), "connection error"))
+       assert.True(t, strings.Contains(err.Error(), "connection error"))
        assert.Equal(t, nodeIds, res)
 
        res2, err := rnibDataService.GetNodeb(invName)
        readerMock.AssertNumberOfCalls(t, "GetNodeb", 3)
-       assert.True(t, strings.Contains(err.Error(), "connection error"))
+       assert.True(t, strings.Contains(err.Error(), "connection error"))
        assert.Equal(t, nodeb, res2)
 }
 
@@ -218,7 +212,7 @@ func TestConnFailureWithAnotherConfig(t *testing.T) {
 
        res, err := rnibDataService.GetListNodebIds()
        readerMock.AssertNumberOfCalls(t, "GetListNodebIds", 5)
-       assert.True(t, strings.Contains(err.Error(), "connection error"))
+       assert.True(t, strings.Contains(err.Error(), "connection error"))
        assert.Equal(t, nodeIds, res)
 }
 
@@ -280,21 +274,6 @@ func TestConnFailureUpdateNodebInfoOnConnectionStatusInversion(t *testing.T) {
        writerMock.AssertNumberOfCalls(t, "UpdateNodebInfoOnConnectionStatusInversion", 3)
 }
 
-//func TestConnFailureThenSuccessGetNodebIdList(t *testing.T) {
-//     rnibDataService, readerMock, _ := setupRnibDataServiceTest(t)
-//
-//     var nilNodeIds []*entities.NbIdentity = nil
-//     nodeIds := []*entities.NbIdentity{}
-//     mockErr := &common.InternalError{Err: &net.OpError{Err:fmt.Errorf("connection error")}}
-//     //readerMock.On("GetListNodebIds").Return(nilNodeIds, mockErr)
-//     //readerMock.On("GetListNodebIds").Return(nodeIds, nil)
-//
-//     res, err := rnibDataService.GetListNodebIds()
-//     readerMock.AssertNumberOfCalls(t, "GetListNodebIds", 2)
-//     assert.True(t, strings.Contains(err.Error(),"connection failure", ))
-//     assert.Equal(t, nodeIds, res)
-//}
-
 func TestGetE2TInstanceConnFailure(t *testing.T) {
        rnibDataService, readerMock, _ := setupRnibDataServiceTest(t)
 
@@ -369,4 +348,4 @@ func TestRemoveEnbOtherError(t *testing.T) {
        err := rnibDataService.RemoveEnb(nodebInfo)
        writerMock.AssertNumberOfCalls(t, "RemoveEnb", 1)
        assert.NotNil(t, err)
-}
\ No newline at end of file
+}