[RIC-431] REDESIGN - Modify Setup Flows to call AddNbIdentity | Modify UTs 91/4391/1
authoridanshal <idan.shalom@intl.att.com>
Wed, 15 Jul 2020 08:59:15 +0000 (08:59 +0000)
committeridanshal <idan.shalom@intl.att.com>
Wed, 15 Jul 2020 08:59:21 +0000 (08:59 +0000)
Change-Id: I170ea888d3b53cb1ecad66c471fa4081f06872c9
Signed-off-by: idanshal <idan.shalom@intl.att.com>
15 files changed:
E2Manager/app/main.go
E2Manager/container-tag.yaml
E2Manager/controllers/e2t_controller_test.go
E2Manager/controllers/nodeb_controller_test.go
E2Manager/handlers/httpmsghandlers/add_enb_request_handler.go
E2Manager/handlers/rmrmsghandlers/e2_setup_request_notification_handler.go
E2Manager/handlers/rmrmsghandlers/e2_setup_request_notification_handler_test.go
E2Manager/managers/notificationmanager/notification_manager_test.go
E2Manager/managers/ran_list_manager.go
E2Manager/managers/ran_list_manager_test.go [new file with mode: 0644]
E2Manager/providers/httpmsghandlerprovider/incoming_request_handler_provider.go
E2Manager/providers/httpmsghandlerprovider/incoming_request_handler_provider_test.go
E2Manager/providers/rmrmsghandlerprovider/notification_handler_provider.go
E2Manager/providers/rmrmsghandlerprovider/notification_handler_provider_test.go
E2Manager/services/rmrreceiver/rmr_receiver_test.go

index 109a0da..eebd773 100644 (file)
@@ -75,7 +75,7 @@ func main() {
        e2tShutdownManager := managers.NewE2TShutdownManager(logger, config, rnibDataService, e2tInstancesManager, e2tAssociationManager, ranConnectStatusChangeManager)
        e2tKeepAliveWorker := managers.NewE2TKeepAliveWorker(logger, rmrSender, e2tInstancesManager, e2tShutdownManager, config)
        rmrNotificationHandlerProvider := rmrmsghandlerprovider.NewNotificationHandlerProvider()
-       rmrNotificationHandlerProvider.Init(logger, config, rnibDataService, rmrSender, e2tInstancesManager, routingManagerClient, e2tAssociationManager, ranConnectStatusChangeManager)
+       rmrNotificationHandlerProvider.Init(logger, config, rnibDataService, rmrSender, e2tInstancesManager, routingManagerClient, e2tAssociationManager, ranConnectStatusChangeManager, ranListManager)
 
        notificationManager := notificationmanager.NewNotificationManager(logger, rmrNotificationHandlerProvider)
        rmrReceiver := rmrreceiver.NewRmrReceiver(logger, rmrMessenger, notificationManager)
@@ -89,7 +89,7 @@ func main() {
        go rmrReceiver.ListenAndHandle()
        go e2tKeepAliveWorker.Execute()
 
-       httpMsgHandlerProvider := httpmsghandlerprovider.NewIncomingRequestHandlerProvider(logger, rmrSender, config, rnibDataService, e2tInstancesManager, routingManagerClient, ranConnectStatusChangeManager, nodebValidator, updateEnbManager)
+       httpMsgHandlerProvider := httpmsghandlerprovider.NewIncomingRequestHandlerProvider(logger, rmrSender, config, rnibDataService, e2tInstancesManager, routingManagerClient, ranConnectStatusChangeManager, nodebValidator, updateEnbManager, ranListManager)
        rootController := controllers.NewRootController(rnibDataService)
        nodebController := controllers.NewNodebController(logger, httpMsgHandlerProvider)
        e2tController := controllers.NewE2TController(logger, httpMsgHandlerProvider)
index 354d043..d09274c 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.14
+tag: 5.2.15
index 872bb62..1b87f86 100644 (file)
@@ -61,7 +61,7 @@ func setupE2TControllerTest(t *testing.T) (*E2TController, *mocks.RnibReaderMock
        nodebValidator := managers.NewNodebValidator()
        updateEnbManager := managers.NewUpdateEnbManager(log, rnibDataService, nodebValidator)
 
-       handlerProvider := httpmsghandlerprovider.NewIncomingRequestHandlerProvider(log, nil, config, rnibDataService, e2tInstancesManager, nil, ranConnectStatusChangeManager, nodebValidator, updateEnbManager)
+       handlerProvider := httpmsghandlerprovider.NewIncomingRequestHandlerProvider(log, nil, config, rnibDataService, e2tInstancesManager, nil, ranConnectStatusChangeManager, nodebValidator, updateEnbManager, ranListManager)
        controller := NewE2TController(log, handlerProvider)
        return controller, readerMock
 }
index a836b5c..a872777 100644 (file)
@@ -102,9 +102,11 @@ type updateEnbCellsParams struct {
 }
 
 type saveNodebParams struct {
-       nodebInfo  *entities.NodebInfo
-       nbIdentity *entities.NbIdentity
-       err        error
+       err error
+}
+
+type addNbIdentityParams struct {
+       err error
 }
 
 type removeServedCellsParams struct {
@@ -138,6 +140,7 @@ type controllerUpdateGnbTestContext struct {
 type controllerAddEnbTestContext struct {
        getNodebInfoResult   *getNodebInfoResult
        saveNodebParams      *saveNodebParams
+       addNbIdentityParams  *addNbIdentityParams
        requestBody          map[string]interface{}
        expectedStatusCode   int
        expectedJsonResponse string
@@ -248,7 +251,7 @@ func buildServedCell(propToOmit string) map[string]interface{} {
 
 func getUpdateEnbRequest(propToOmit string) map[string]interface{} {
        ret := map[string]interface{}{
-               "enb":        buildEnb(propToOmit),
+               "enb": buildEnb(propToOmit),
        }
 
        if len(propToOmit) != 0 {
@@ -258,7 +261,6 @@ func getUpdateEnbRequest(propToOmit string) map[string]interface{} {
        return ret
 }
 
-
 func getAddEnbRequest(propToOmit string) map[string]interface{} {
        ret := map[string]interface{}{
                "ranName":    RanName,
@@ -314,13 +316,13 @@ func setupControllerTest(t *testing.T) (*NodebController, *mocks.RnibReaderMock,
        e2tInstancesManager := &mocks.E2TInstancesManagerMock{}
        httpClientMock := &mocks.HttpClientMock{}
        rmClient := clients.NewRoutingManagerClient(log, config, httpClientMock)
-       ranListManager := &mocks.RanListManagerMock{}
+       ranListManager := managers.NewRanListManager(log, rnibDataService)
        ranAlarmService := &mocks.RanAlarmServiceMock{}
        ranConnectStatusChangeManager := managers.NewRanConnectStatusChangeManager(log, rnibDataService, ranListManager, ranAlarmService)
        nodebValidator := managers.NewNodebValidator()
        updateEnbManager := managers.NewUpdateEnbManager(log, rnibDataService, nodebValidator)
 
-       handlerProvider := httpmsghandlerprovider.NewIncomingRequestHandlerProvider(log, rmrSender, config, rnibDataService, e2tInstancesManager, rmClient, ranConnectStatusChangeManager, nodebValidator, updateEnbManager)
+       handlerProvider := httpmsghandlerprovider.NewIncomingRequestHandlerProvider(log, rmrSender, config, rnibDataService, e2tInstancesManager, rmClient, ranConnectStatusChangeManager, nodebValidator, updateEnbManager, ranListManager)
        controller := NewNodebController(log, handlerProvider)
        return controller, readerMock, writerMock, rmrMessengerMock, e2tInstancesManager
 }
@@ -395,7 +397,7 @@ func controllerGetNodebIdListTestExecuter(t *testing.T, context *controllerGetNo
        assert.Equal(t, context.expectedJsonResponse, string(bodyBytes))
 }
 
-func activateControllerUpdateEnbMocks(context *controllerUpdateEnbTestContext, readerMock *mocks.RnibReaderMock, writerMock *mocks.RnibWriterMock,updateEnbRequest *models.UpdateEnbRequest) {
+func activateControllerUpdateEnbMocks(context *controllerUpdateEnbTestContext, readerMock *mocks.RnibReaderMock, writerMock *mocks.RnibWriterMock, updateEnbRequest *models.UpdateEnbRequest) {
        if context.getNodebInfoResult != nil {
                readerMock.On("GetNodeb", RanName).Return(context.getNodebInfoResult.nodebInfo, context.getNodebInfoResult.rnibError)
        }
@@ -533,9 +535,12 @@ func activateControllerAddEnbMocks(context *controllerAddEnbTestContext, readerM
                        ConnectionStatus: entities.ConnectionStatus_DISCONNECTED,
                }
 
-               //nbIdentity := entities.NbIdentity{InventoryName: addEnbRequest.RanName, GlobalNbId: addEnbRequest.GlobalNbId}
                writerMock.On("SaveNodeb", &nodebInfo).Return(context.saveNodebParams.err)
-               // TODO: add writerMock.On("AddNbIdentity")
+       }
+
+       if context.addNbIdentityParams != nil {
+               nbIdentity := entities.NbIdentity{InventoryName: addEnbRequest.RanName, GlobalNbId: addEnbRequest.GlobalNbId, ConnectionStatus: entities.ConnectionStatus_DISCONNECTED}
+               writerMock.On("AddNbIdentity", entities.Node_ENB, &nbIdentity).Return(context.addNbIdentityParams.err)
        }
 }
 
@@ -875,8 +880,8 @@ func TestControllerUpdateEnbInvalidRequest(t *testing.T) {
 
 func TestControllerUpdateEnbEmptyEnbType(t *testing.T) {
        context := controllerUpdateEnbTestContext{
-               getNodebInfoResult: nil,
-               requestBody: getUpdateEnbRequest(EnbRequiredFields[0]),
+               getNodebInfoResult:   nil,
+               requestBody:          getUpdateEnbRequest(EnbRequiredFields[0]),
                expectedStatusCode:   http.StatusBadRequest,
                expectedJsonResponse: ValidationFailureJson,
        }
@@ -886,8 +891,8 @@ func TestControllerUpdateEnbEmptyEnbType(t *testing.T) {
 
 func TestControllerUpdateEnbEmptyServedCells(t *testing.T) {
        context := controllerUpdateEnbTestContext{
-               getNodebInfoResult: nil,
-               requestBody: getUpdateEnbRequest(EnbRequiredFields[1]),
+               getNodebInfoResult:   nil,
+               requestBody:          getUpdateEnbRequest(EnbRequiredFields[1]),
                expectedStatusCode:   http.StatusBadRequest,
                expectedJsonResponse: ValidationFailureJson,
        }
@@ -897,8 +902,8 @@ func TestControllerUpdateEnbEmptyServedCells(t *testing.T) {
 
 func TestControllerUpdateEnbMissingEnb(t *testing.T) {
        context := controllerUpdateEnbTestContext{
-               getNodebInfoResult: nil,
-               requestBody: getUpdateEnbRequest(UpdateEnbRequestRequiredFields[0]),
+               getNodebInfoResult:   nil,
+               requestBody:          getUpdateEnbRequest(UpdateEnbRequestRequiredFields[0]),
                expectedStatusCode:   http.StatusBadRequest,
                expectedJsonResponse: ValidationFailureJson,
        }
@@ -912,7 +917,7 @@ func TestControllerUpdateEnbValidServedCellsGetNodebNotFound(t *testing.T) {
                        nodebInfo: nil,
                        rnibError: common.NewResourceNotFoundError("#reader.GetNodeb - Not found Error"),
                },
-               requestBody: getUpdateEnbRequest(""),
+               requestBody:          getUpdateEnbRequest(""),
                expectedStatusCode:   http.StatusNotFound,
                expectedJsonResponse: ResourceNotFoundJson,
        }
@@ -926,7 +931,7 @@ func TestControllerUpdateEnbValidServedCellsGetNodebInternalError(t *testing.T)
                        nodebInfo: nil,
                        rnibError: common.NewInternalError(errors.New("#reader.GetNodeb - Internal Error")),
                },
-               requestBody: getUpdateEnbRequest(""),
+               requestBody:          getUpdateEnbRequest(""),
                expectedStatusCode:   http.StatusInternalServerError,
                expectedJsonResponse: RnibErrorJson,
        }
@@ -947,7 +952,7 @@ func TestControllerUpdateEnbGetNodebSuccessGnbTypeFailure(t *testing.T) {
                        },
                        rnibError: nil,
                },
-               requestBody: getUpdateEnbRequest(""),
+               requestBody:          getUpdateEnbRequest(""),
                expectedStatusCode:   http.StatusBadRequest,
                expectedJsonResponse: ValidationFailureJson,
        }
@@ -972,7 +977,7 @@ func TestControllerUpdateEnbGetNodebSuccessRemoveServedCellsFailure(t *testing.T
                        },
                        rnibError: nil,
                },
-               requestBody: getUpdateEnbRequest(""),
+               requestBody:          getUpdateEnbRequest(""),
                expectedStatusCode:   http.StatusInternalServerError,
                expectedJsonResponse: RnibErrorJson,
        }
@@ -984,7 +989,7 @@ func TestControllerUpdateEnbGetNodebSuccessUpdateEnbFailure(t *testing.T) {
        oldServedCells := generateServedCells("whatever1", "whatever2")
        context := controllerUpdateEnbTestContext{
                removeServedCellsParams: &removeServedCellsParams{
-                       err:           nil,
+                       err:            nil,
                        servedCellInfo: oldServedCells,
                },
                updateEnbCellsParams: &updateEnbCellsParams{
@@ -1000,7 +1005,7 @@ func TestControllerUpdateEnbGetNodebSuccessUpdateEnbFailure(t *testing.T) {
                        },
                        rnibError: nil,
                },
-               requestBody: getUpdateEnbRequest(""),
+               requestBody:          getUpdateEnbRequest(""),
                expectedStatusCode:   http.StatusInternalServerError,
                expectedJsonResponse: RnibErrorJson,
        }
@@ -1012,7 +1017,7 @@ func TestControllerUpdateEnbSuccess(t *testing.T) {
        oldServedCells := generateServedCells("whatever1", "whatever2")
        context := controllerUpdateEnbTestContext{
                removeServedCellsParams: &removeServedCellsParams{
-                       err:           nil,
+                       err:            nil,
                        servedCellInfo: oldServedCells,
                },
                updateEnbCellsParams: &updateEnbCellsParams{
@@ -1028,7 +1033,7 @@ func TestControllerUpdateEnbSuccess(t *testing.T) {
                        },
                        rnibError: nil,
                },
-               requestBody: getUpdateEnbRequest(""),
+               requestBody:          getUpdateEnbRequest(""),
                expectedStatusCode:   http.StatusOK,
                expectedJsonResponse: "{\"ranName\":\"test\",\"connectionStatus\":\"CONNECTED\",\"nodeType\":\"ENB\",\"enb\":{\"enbType\":\"MACRO_ENB\",\"servedCells\":[{\"pci\":1,\"cellId\":\"whatever\",\"tac\":\"whatever3\",\"broadcastPlmns\":[\"whatever\"],\"choiceEutraMode\":{\"fdd\":{}},\"eutraMode\":\"FDD\"}]},\"associatedE2tInstanceAddress\":\"10.0.2.15:38000\"}",
        }
@@ -1081,6 +1086,26 @@ func TestControllerAddEnbSaveNodebFailure(t *testing.T) {
        controllerAddEnbTestExecuter(t, &context)
 }
 
+func TestControllerAddEnbAddNbIdentityFailure(t *testing.T) {
+       context := controllerAddEnbTestContext{
+               saveNodebParams: &saveNodebParams{
+                       err: nil,
+               },
+               addNbIdentityParams: &addNbIdentityParams{
+                       err: common.NewInternalError(errors.New("#writer.addNbIdentity - Internal Error")),
+               },
+               getNodebInfoResult: &getNodebInfoResult{
+                       nodebInfo: nil,
+                       rnibError: common.NewResourceNotFoundError("#reader.GetNodeb - Not found Error"),
+               },
+               requestBody:          getAddEnbRequest(""),
+               expectedStatusCode:   http.StatusInternalServerError,
+               expectedJsonResponse: RnibErrorJson,
+       }
+
+       controllerAddEnbTestExecuter(t, &context)
+}
+
 func TestControllerAddEnbMissingRequiredRequestProps(t *testing.T) {
 
        for _, v := range AddEnbRequestRequiredFields {
@@ -1194,23 +1219,14 @@ func TestControllerAddEnbSuccess(t *testing.T) {
                saveNodebParams: &saveNodebParams{
                        err: nil,
                },
+               addNbIdentityParams: &addNbIdentityParams{
+                       err: nil,
+               },
                getNodebInfoResult: &getNodebInfoResult{
                        nodebInfo: nil,
                        rnibError: common.NewResourceNotFoundError("#reader.GetNodeb - Not found Error"),
                },
-               requestBody: map[string]interface{}{
-                       "ranName": RanName,
-                       "globalNbId": map[string]interface{}{
-                               "plmnId": "whatever",
-                               "nbId":   "whatever2",
-                       },
-                       "enb": map[string]interface{}{
-                               "enbType": 1,
-                               "servedCells": []interface{}{
-                                       buildServedCell(""),
-                               },
-                       },
-               },
+               requestBody:          getAddEnbRequest(""),
                expectedStatusCode:   http.StatusCreated,
                expectedJsonResponse: "{\"ranName\":\"test\",\"connectionStatus\":\"DISCONNECTED\",\"globalNbId\":{\"plmnId\":\"whatever\",\"nbId\":\"whatever2\"},\"nodeType\":\"ENB\",\"enb\":{\"enbType\":\"MACRO_ENB\",\"servedCells\":[{\"pci\":1,\"cellId\":\"whatever\",\"tac\":\"whatever3\",\"broadcastPlmns\":[\"whatever\"],\"choiceEutraMode\":{\"fdd\":{}},\"eutraMode\":\"FDD\"}]}}",
        }
index e5a1c5e..46cd802 100644 (file)
@@ -34,13 +34,15 @@ type AddEnbRequestHandler struct {
        logger          *logger.Logger
        nodebValidator  *managers.NodebValidator
        rNibDataService services.RNibDataService
+       ranListManager  managers.RanListManager
 }
 
-func NewAddEnbRequestHandler(logger *logger.Logger, rNibDataService services.RNibDataService, nodebValidator *managers.NodebValidator) *AddEnbRequestHandler {
+func NewAddEnbRequestHandler(logger *logger.Logger, rNibDataService services.RNibDataService, nodebValidator *managers.NodebValidator, ranListManager managers.RanListManager) *AddEnbRequestHandler {
        return &AddEnbRequestHandler{
                logger:          logger,
                nodebValidator:  nodebValidator,
                rNibDataService: rNibDataService,
+               ranListManager:  ranListManager,
        }
 }
 
@@ -78,7 +80,12 @@ func (h *AddEnbRequestHandler) Handle(request models.Request) (models.IResponse,
                return nil, e2managererrors.NewRnibDbError()
        }
 
-       _ = h.createNbIdentity(addEnbRequest) // TODO: add call to ranListManager
+       nbIdentity := h.createNbIdentity(addEnbRequest)
+       err = h.ranListManager.AddNbIdentity(entities.Node_ENB, nbIdentity)
+
+       if err != nil {
+               return nil, e2managererrors.NewRnibDbError()
+       }
 
        return models.NewNodebResponse(nodebInfo), nil
 }
index fd505de..04b33d7 100644 (file)
@@ -51,9 +51,10 @@ type E2SetupRequestNotificationHandler struct {
        rNibDataService               services.RNibDataService
        e2tAssociationManager         *managers.E2TAssociationManager
        ranConnectStatusChangeManager managers.IRanConnectStatusChangeManager
+       ranListManager managers.RanListManager
 }
 
-func NewE2SetupRequestNotificationHandler(logger *logger.Logger, config *configuration.Configuration, e2tInstancesManager managers.IE2TInstancesManager, rmrSender *rmrsender.RmrSender, rNibDataService services.RNibDataService, e2tAssociationManager *managers.E2TAssociationManager, ranConnectStatusChangeManager managers.IRanConnectStatusChangeManager) *E2SetupRequestNotificationHandler {
+func NewE2SetupRequestNotificationHandler(logger *logger.Logger, config *configuration.Configuration, e2tInstancesManager managers.IE2TInstancesManager, rmrSender *rmrsender.RmrSender, rNibDataService services.RNibDataService, e2tAssociationManager *managers.E2TAssociationManager, ranConnectStatusChangeManager managers.IRanConnectStatusChangeManager, ranListManager managers.RanListManager) *E2SetupRequestNotificationHandler {
        return &E2SetupRequestNotificationHandler{
                logger:                        logger,
                config:                        config,
@@ -62,6 +63,7 @@ func NewE2SetupRequestNotificationHandler(logger *logger.Logger, config *configu
                rNibDataService:               rNibDataService,
                e2tAssociationManager:         e2tAssociationManager,
                ranConnectStatusChangeManager: ranConnectStatusChangeManager,
+               ranListManager: ranListManager,
        }
 }
 
@@ -145,7 +147,13 @@ func (h *E2SetupRequestNotificationHandler) handleNewRan(ranName string, e2tIpAd
                return nil, err
        }
 
-       _ = h.buildNbIdentity(ranName, setupRequest) // TODO: add call to ranListManager
+       nbIdentity := h.buildNbIdentity(ranName, setupRequest)
+
+       err = h.ranListManager.AddNbIdentity(entities.Node_GNB, nbIdentity)
+
+       if err != nil {
+               return nil, err
+       }
 
        return nodebInfo, nil
 }
index 2e2c693..a52e8f5 100644 (file)
@@ -160,7 +160,7 @@ func TestE2SetupRequestNotificationHandler_EnableRicFalse(t *testing.T) {
 }
 
 
-func TestE2SetupRequestNotificationHandler_HandleNewRanError(t *testing.T) {
+func TestE2SetupRequestNotificationHandler_HandleNewRanSaveNodebFailure(t *testing.T) {
        xml := readXmlFile(t, GnbSetupRequestXmlPath)
        handler, readerMock, writerMock, _, e2tInstancesManagerMock, _ := initMocks(t)
        readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil)
@@ -170,8 +170,6 @@ func TestE2SetupRequestNotificationHandler_HandleNewRanError(t *testing.T) {
        notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append([]byte(e2SetupMsgPrefix), xml...)}
        nodebInfo := getExpectedNodebForNewRan(notificationRequest.Payload)
        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)
@@ -179,6 +177,24 @@ func TestE2SetupRequestNotificationHandler_HandleNewRanError(t *testing.T) {
        e2tInstancesManagerMock.AssertExpectations(t)
 }
 
+func TestE2SetupRequestNotificationHandler_HandleNewRanAddNbIdentityFailure(t *testing.T) {
+       xml := readXmlFile(t, GnbSetupRequestXmlPath)
+       handler, readerMock, writerMock, _, e2tInstancesManagerMock, _ := initMocks(t)
+       readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil)
+       e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(&entities.E2TInstance{}, nil)
+       var gnb *entities.NodebInfo
+       readerMock.On("GetNodeb", nodebRanName).Return(gnb, common.NewResourceNotFoundError("Not found"))
+       notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append([]byte(e2SetupMsgPrefix), xml...)}
+       nodebInfo := getExpectedNodebForNewRan(notificationRequest.Payload)
+       writerMock.On("SaveNodeb", nodebInfo).Return(nil)
+       nbIdentity := &entities.NbIdentity{InventoryName: nodebRanName, GlobalNbId: nodebInfo.GlobalNbId}
+       writerMock.On("AddNbIdentity", entities.Node_GNB, nbIdentity).Return(common.NewInternalError(errors.New("error")))
+       handler.Handle(notificationRequest)
+       readerMock.AssertExpectations(t)
+       writerMock.AssertExpectations(t)
+       e2tInstancesManagerMock.AssertExpectations(t)
+}
+
 func testE2SetupRequestNotificationHandler_HandleNewRanSuccess(t *testing.T, xmlPath string) {
        xml := readXmlFile(t, xmlPath)
        handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t)
@@ -189,8 +205,8 @@ func testE2SetupRequestNotificationHandler_HandleNewRanSuccess(t *testing.T, xml
        notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append([]byte(e2SetupMsgPrefix), xml...)}
        nodebInfo := getExpectedNodebForNewRan(notificationRequest.Payload)
        writerMock.On("SaveNodeb", nodebInfo).Return(nil)
-       //nbIdentity := &entities.NbIdentity{InventoryName: nodebRanName, GlobalNbId: nodebInfo.GlobalNbId}
-       // TODO: add writerMock.On("AddNbIdentity")
+       nbIdentity := &entities.NbIdentity{InventoryName: nodebRanName, GlobalNbId: nodebInfo.GlobalNbId}
+       writerMock.On("AddNbIdentity", entities.Node_GNB, nbIdentity).Return(nil)
        updatedNodebInfo := *nodebInfo
        updatedNodebInfo.ConnectionStatus = entities.ConnectionStatus_CONNECTED
        writerMock.On("UpdateNodebInfoOnConnectionStatusInversion", &updatedNodebInfo, nodebRanName+"_CONNECTED").Return(nil)
@@ -410,6 +426,8 @@ func TestE2SetupRequestNotificationHandler_HandleAssociationError(t *testing.T)
        notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append([]byte(e2SetupMsgPrefix), xmlGnb...)}
        nodebInfo := getExpectedNodebForNewRan(notificationRequest.Payload)
        writerMock.On("SaveNodeb", nodebInfo).Return(nil)
+       nbIdentity := &entities.NbIdentity{InventoryName: nodebRanName, GlobalNbId: nodebInfo.GlobalNbId}
+       writerMock.On("AddNbIdentity", entities.Node_GNB, nbIdentity).Return(nil)
        updatedNodebInfo := *nodebInfo
        updatedNodebInfo.ConnectionStatus = entities.ConnectionStatus_CONNECTED
        writerMock.On("UpdateNodebInfoOnConnectionStatusInversion", &updatedNodebInfo, nodebRanName+"_CONNECTED").Return(nil)
@@ -457,12 +475,13 @@ func TestE2SetupRequestNotificationHandler_ConvertTo20BitStringError(t *testing.
        ranConnectStatusChangeManager := managers.NewRanConnectStatusChangeManager(logger, rnibDataService, ranListManager, ranAlarmService)
 
        e2tAssociationManager := managers.NewE2TAssociationManager(logger, rnibDataService, e2tInstancesManagerMock, routingManagerClientMock, ranConnectStatusChangeManager)
-       handler := NewE2SetupRequestNotificationHandler(logger, config, e2tInstancesManagerMock, rmrSender, rnibDataService, e2tAssociationManager, ranConnectStatusChangeManager)
+       handler := NewE2SetupRequestNotificationHandler(logger, config, e2tInstancesManagerMock, rmrSender, rnibDataService, e2tAssociationManager, ranConnectStatusChangeManager, ranListManager)
        readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil)
        e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(&entities.E2TInstance{}, nil)
        var gnb *entities.NodebInfo
        readerMock.On("GetNodeb", mock.Anything).Return(gnb, common.NewResourceNotFoundError("Not found"))
        writerMock.On("SaveNodeb", mock.Anything, mock.Anything).Return(nil)
+       writerMock.On("AddNbIdentity", entities.Node_GNB, mock.Anything).Return(nil)
        writerMock.On("UpdateNodebInfoOnConnectionStatusInversion", mock.Anything, mock.Anything).Return(nil)
        routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(nil)
        writerMock.On("UpdateNodebInfo", mock.Anything).Return(nil)
@@ -525,6 +544,6 @@ func initMocks(t *testing.T) (*E2SetupRequestNotificationHandler, *mocks.RnibRea
        ranAlarmService := services.NewRanAlarmService(logger, config)
        ranConnectStatusChangeManager := managers.NewRanConnectStatusChangeManager(logger, rnibDataService, ranListManager, ranAlarmService)
        e2tAssociationManager := managers.NewE2TAssociationManager(logger, rnibDataService, e2tInstancesManagerMock, routingManagerClientMock, ranConnectStatusChangeManager)
-       handler := NewE2SetupRequestNotificationHandler(logger, config, e2tInstancesManagerMock, rmrSender, rnibDataService, e2tAssociationManager, ranConnectStatusChangeManager)
+       handler := NewE2SetupRequestNotificationHandler(logger, config, e2tInstancesManagerMock, rmrSender, rnibDataService, e2tAssociationManager, ranConnectStatusChangeManager, ranListManager)
        return handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock
 }
index 38631dd..9b9ffe5 100644 (file)
@@ -53,7 +53,7 @@ func initNotificationManagerTest(t *testing.T) (*logger.Logger, *mocks.RnibReade
        ranConnectStatusChangeManager := managers.NewRanConnectStatusChangeManager(logger, rnibDataService,ranListManager, ranAlarmService)
        e2tAssociationManager := managers.NewE2TAssociationManager(logger, rnibDataService, e2tInstancesManager, routingManagerClient, ranConnectStatusChangeManager)
        rmrNotificationHandlerProvider := rmrmsghandlerprovider.NewNotificationHandlerProvider()
-       rmrNotificationHandlerProvider.Init(logger, config, rnibDataService, rmrSender, e2tInstancesManager,routingManagerClient, e2tAssociationManager, ranConnectStatusChangeManager)
+       rmrNotificationHandlerProvider.Init(logger, config, rnibDataService, rmrSender, e2tInstancesManager,routingManagerClient, e2tAssociationManager, ranConnectStatusChangeManager, ranListManager)
        notificationManager := NewNotificationManager(logger, rmrNotificationHandlerProvider )
        return logger, readerMock, notificationManager
 }
index 90864c1..26de59d 100644 (file)
@@ -60,7 +60,7 @@ 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)
+               m.logger.Errorf("#ranListManagerInstance.InitNbIdentityMap - Failed fetching RAN list from DB. error: %s", err)
                return err
        }
 
@@ -68,7 +68,8 @@ func (m *ranListManagerInstance) InitNbIdentityMap() error {
                m.nbIdentityMap[v.InventoryName] = v
        }
 
-       m.logger.Infof("#ranListManagerInstance.InitRanList - Successfully initiated nodeb identity map")
+       m.logger.Infof("#ranListManagerInstance.InitNbIdentityMap - Successfully initiated nodeb identity map")
+       m.logger.Debugf("#ranListManagerInstance.InitNbIdentityMap - nodeb Identity map: %s", m.nbIdentityMap)
        return nil
 }
 
@@ -86,6 +87,7 @@ func (m *ranListManagerInstance) AddNbIdentity(nodeType entities.Node_Type, nbId
        }
 
        m.logger.Infof("#ranListManagerInstance.AddNbIdentity - RAN name: %s - Successfully added nodeb identity", nbIdentity.InventoryName)
+       m.logger.Debugf("#ranListManagerInstance.AddNbIdentity - nodeb Identity map: %s", m.nbIdentityMap)
        return nil
 }
 
diff --git a/E2Manager/managers/ran_list_manager_test.go b/E2Manager/managers/ran_list_manager_test.go
new file mode 100644 (file)
index 0000000..87eb8a7
--- /dev/null
@@ -0,0 +1,62 @@
+//
+// Copyright 2019 AT&T Intellectual Property
+// Copyright 2019 Nokia
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//  This source code is part of the near-RT RIC (RAN Intelligent Controller)
+//  platform project (RICP).
+
+package managers
+
+import (
+       "e2mgr/configuration"
+       "e2mgr/logger"
+       "e2mgr/mocks"
+       "e2mgr/services"
+       "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
+       "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
+       "github.com/pkg/errors"
+       "github.com/stretchr/testify/assert"
+       "testing"
+)
+
+func initRanListManagerTest(t *testing.T) (*mocks.RnibReaderMock, *mocks.RnibWriterMock, RanListManager) {
+       logger, err := logger.InitLogger(logger.DebugLevel)
+       if err != nil {
+               t.Fatalf("#... - failed to initialize logger, error: %s", err)
+       }
+
+       config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3,
+               RnibWriter: configuration.RnibWriterConfig{StateChangeMessageChannel: "RAN_CONNECTION_STATUS_CHANGE"}}
+
+       readerMock := &mocks.RnibReaderMock{}
+       writerMock := &mocks.RnibWriterMock{}
+       rnibDataService := services.NewRnibDataService(logger, config, readerMock, writerMock)
+       ranListManager := NewRanListManager(logger, rnibDataService)
+       return readerMock, writerMock, ranListManager
+}
+
+func TestRanListManagerInstance_InitNbIdentityMapSuccess(t *testing.T) {
+       readerMock, _, ranListManager := initRanListManagerTest(t)
+       readerMock.On("GetListNodebIds").Return([]*entities.NbIdentity{{InventoryName: RanName, GlobalNbId: &entities.GlobalNbId{NbId: "asd", PlmnId: "efg"}, ConnectionStatus: entities.ConnectionStatus_CONNECTED}}, nil)
+       err := ranListManager.InitNbIdentityMap()
+       assert.Nil(t, err)
+}
+
+func TestRanListManagerInstance_InitNbIdentityMapFailure(t *testing.T) {
+       readerMock, _, ranListManager := initRanListManagerTest(t)
+       readerMock.On("GetListNodebIds").Return([]*entities.NbIdentity{}, common.NewInternalError(errors.New("#reader.GetListNodebIds - Internal Error")))
+       err := ranListManager.InitNbIdentityMap()
+       assert.NotNil(t, err)
+}
\ No newline at end of file
index 2dba750..e52aab7 100644 (file)
@@ -51,16 +51,16 @@ type IncomingRequestHandlerProvider struct {
        ranConnectStatusChangeManager managers.IRanConnectStatusChangeManager
 }
 
-func NewIncomingRequestHandlerProvider(logger *logger.Logger, rmrSender *rmrsender.RmrSender, config *configuration.Configuration, rNibDataService services.RNibDataService, e2tInstancesManager managers.IE2TInstancesManager, rmClient clients.IRoutingManagerClient, ranConnectStatusChangeManager managers.IRanConnectStatusChangeManager, nodebValidator *managers.NodebValidator, updateEnbManager managers.IUpdateNodebManager) *IncomingRequestHandlerProvider {
+func NewIncomingRequestHandlerProvider(logger *logger.Logger, rmrSender *rmrsender.RmrSender, config *configuration.Configuration, rNibDataService services.RNibDataService, e2tInstancesManager managers.IE2TInstancesManager, rmClient clients.IRoutingManagerClient, ranConnectStatusChangeManager managers.IRanConnectStatusChangeManager, nodebValidator *managers.NodebValidator, updateEnbManager managers.IUpdateNodebManager, ranListManager managers.RanListManager) *IncomingRequestHandlerProvider {
 
        return &IncomingRequestHandlerProvider{
-               requestMap:                    initRequestHandlerMap(logger, rmrSender, config, rNibDataService, e2tInstancesManager, rmClient, ranConnectStatusChangeManager, nodebValidator, updateEnbManager),
+               requestMap:                    initRequestHandlerMap(logger, rmrSender, config, rNibDataService, e2tInstancesManager, rmClient, ranConnectStatusChangeManager, nodebValidator, updateEnbManager, ranListManager),
                logger:                        logger,
                ranConnectStatusChangeManager: ranConnectStatusChangeManager,
        }
 }
 
-func initRequestHandlerMap(logger *logger.Logger, rmrSender *rmrsender.RmrSender, config *configuration.Configuration, rNibDataService services.RNibDataService, e2tInstancesManager managers.IE2TInstancesManager, rmClient clients.IRoutingManagerClient, ranConnectStatusChangeManager managers.IRanConnectStatusChangeManager, nodebValidator *managers.NodebValidator, updateEnbManager managers.IUpdateNodebManager) map[IncomingRequest]httpmsghandlers.RequestHandler {
+func initRequestHandlerMap(logger *logger.Logger, rmrSender *rmrsender.RmrSender, config *configuration.Configuration, rNibDataService services.RNibDataService, e2tInstancesManager managers.IE2TInstancesManager, rmClient clients.IRoutingManagerClient, ranConnectStatusChangeManager managers.IRanConnectStatusChangeManager, nodebValidator *managers.NodebValidator, updateEnbManager managers.IUpdateNodebManager, ranListManager managers.RanListManager) map[IncomingRequest]httpmsghandlers.RequestHandler {
 
        return map[IncomingRequest]httpmsghandlers.RequestHandler{
                ShutdownRequest:                httpmsghandlers.NewDeleteAllRequestHandler(logger, rmrSender, config, rNibDataService, e2tInstancesManager, rmClient, ranConnectStatusChangeManager),
@@ -71,7 +71,7 @@ func initRequestHandlerMap(logger *logger.Logger, rmrSender *rmrsender.RmrSender
                GetE2TInstancesRequest:         httpmsghandlers.NewGetE2TInstancesRequestHandler(logger, e2tInstancesManager),
                UpdateGnbRequest:               httpmsghandlers.NewUpdateGnbRequestHandler(logger, rNibDataService),
                UpdateEnbRequest:               httpmsghandlers.NewUpdateNodebRequestHandler(logger, rNibDataService, updateEnbManager),
-               AddEnbRequest:                  httpmsghandlers.NewAddEnbRequestHandler(logger, rNibDataService, nodebValidator),
+               AddEnbRequest:                  httpmsghandlers.NewAddEnbRequestHandler(logger, rNibDataService, nodebValidator, ranListManager),
                DeleteEnbRequest:               httpmsghandlers.NewDeleteEnbRequestHandler(logger, rNibDataService),
        }
 }
index a0126c5..0b662df 100644 (file)
@@ -60,7 +60,7 @@ func setupTest(t *testing.T) *IncomingRequestHandlerProvider {
        nodebValidator := managers.NewNodebValidator()
        updateEnbManager := managers.NewUpdateEnbManager(log, rnibDataService, nodebValidator)
 
-       return NewIncomingRequestHandlerProvider(log, rmrSender, configuration.ParseConfiguration(), rnibDataService, e2tInstancesManager, rmClient, ranConnectStatusChangeManager, nodebValidator, updateEnbManager)
+       return NewIncomingRequestHandlerProvider(log, rmrSender, configuration.ParseConfiguration(), rnibDataService, e2tInstancesManager, rmClient, ranConnectStatusChangeManager, nodebValidator, updateEnbManager, ranListManager)
 }
 
 func TestNewIncomingRequestHandlerProvider(t *testing.T) {
index 1391c32..4565070 100644 (file)
@@ -60,7 +60,7 @@ func (provider *NotificationHandlerProvider) Register(msgType int, handler rmrms
 func (provider *NotificationHandlerProvider) Init(logger *logger.Logger, config *configuration.Configuration,
        rnibDataService services.RNibDataService, rmrSender *rmrsender.RmrSender, e2tInstancesManager managers.IE2TInstancesManager,
        routingManagerClient clients.IRoutingManagerClient, e2tAssociationManager *managers.E2TAssociationManager,
-       ranConnectStatusChangeManager managers.IRanConnectStatusChangeManager) {
+       ranConnectStatusChangeManager managers.IRanConnectStatusChangeManager, ranListManager managers.RanListManager) {
 
        // Init converters
        x2SetupResponseConverter := converters.NewX2SetupResponseConverter(logger)
@@ -91,7 +91,7 @@ func (provider *NotificationHandlerProvider) Init(logger *logger.Logger, config
        x2ResetRequestNotificationHandler := rmrmsghandlers.NewX2ResetRequestNotificationHandler(logger, rnibDataService, ranStatusChangeManager, rmrSender)
        e2TermInitNotificationHandler := rmrmsghandlers.NewE2TermInitNotificationHandler(logger, ranReconnectionManager, e2tInstancesManager, routingManagerClient)
        e2TKeepAliveResponseHandler := rmrmsghandlers.NewE2TKeepAliveResponseHandler(logger, rnibDataService, e2tInstancesManager)
-       e2SetupRequestNotificationHandler := rmrmsghandlers.NewE2SetupRequestNotificationHandler(logger, config, e2tInstancesManager, rmrSender, rnibDataService, e2tAssociationManager, ranConnectStatusChangeManager)
+       e2SetupRequestNotificationHandler := rmrmsghandlers.NewE2SetupRequestNotificationHandler(logger, config, e2tInstancesManager, rmrSender, rnibDataService, e2tAssociationManager, ranConnectStatusChangeManager, ranListManager)
 
        provider.Register(rmrCgo.RIC_X2_SETUP_RESP, x2SetupResponseHandler)
        provider.Register(rmrCgo.RIC_X2_SETUP_FAILURE, x2SetupFailureResponseHandler)
index adf2a04..d7410e8 100644 (file)
@@ -41,7 +41,7 @@ import (
  * Verify support for known providers.
  */
 
-func initTestCase(t *testing.T) (*logger.Logger, *configuration.Configuration, services.RNibDataService, *rmrsender.RmrSender, managers.IE2TInstancesManager, clients.IRoutingManagerClient, *managers.E2TAssociationManager, managers.IRanConnectStatusChangeManager) {
+func initTestCase(t *testing.T) (*logger.Logger, *configuration.Configuration, services.RNibDataService, *rmrsender.RmrSender, managers.IE2TInstancesManager, clients.IRoutingManagerClient, *managers.E2TAssociationManager, managers.IRanConnectStatusChangeManager, managers.RanListManager) {
        logger := initLog(t)
        config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3, RnibWriter: configuration.RnibWriterConfig{StateChangeMessageChannel: "RAN_CONNECTION_STATUS_CHANGE", RanManipulationMessageChannel: "RAN_MANIPULATION"}}
 
@@ -58,12 +58,12 @@ func initTestCase(t *testing.T) (*logger.Logger, *configuration.Configuration, s
        ranConnectStatusChangeManager := managers.NewRanConnectStatusChangeManager(logger, rnibDataService, ranListManager, ranAlarmService)
        e2tAssociationManager := managers.NewE2TAssociationManager(logger, rnibDataService, e2tInstancesManager, routingManagerClient, ranConnectStatusChangeManager)
 
-       return logger, config, rnibDataService, rmrSender, e2tInstancesManager, routingManagerClient, e2tAssociationManager, ranConnectStatusChangeManager
+       return logger, config, rnibDataService, rmrSender, e2tInstancesManager, routingManagerClient, e2tAssociationManager, ranConnectStatusChangeManager, ranListManager
 }
 
 func TestGetNotificationHandlerSuccess(t *testing.T) {
 
-       logger, config, rnibDataService, rmrSender, e2tInstancesManager, routingManagerClient, e2tAssociationManager, ranConnectStatusChangeManager := initTestCase(t)
+       logger, config, rnibDataService, rmrSender, e2tInstancesManager, routingManagerClient, e2tAssociationManager, ranConnectStatusChangeManager, ranListManager := initTestCase(t)
 
        ranDisconnectionManager := managers.NewRanDisconnectionManager(logger, configuration.ParseConfiguration(), rnibDataService, e2tAssociationManager, ranConnectStatusChangeManager)
        ranStatusChangeManager := managers.NewRanStatusChangeManager(logger, rmrSender)
@@ -101,7 +101,7 @@ func TestGetNotificationHandlerSuccess(t *testing.T) {
        for _, tc := range testCases {
 
                provider := NewNotificationHandlerProvider()
-               provider.Init(logger, config, rnibDataService, rmrSender, e2tInstancesManager, routingManagerClient, e2tAssociationManager, ranConnectStatusChangeManager)
+               provider.Init(logger, config, rnibDataService, rmrSender, e2tInstancesManager, routingManagerClient, e2tAssociationManager, ranConnectStatusChangeManager, ranListManager)
                t.Run(fmt.Sprintf("%d", tc.msgType), func(t *testing.T) {
                        handler, err := provider.GetNotificationHandler(tc.msgType)
                        if err != nil {
@@ -130,9 +130,9 @@ func TestGetNotificationHandlerFailure(t *testing.T) {
        }
        for _, tc := range testCases {
 
-               logger, config, rnibDataService, rmrSender, e2tInstancesManager, routingManagerClient, e2tAssociationManager, ranConnectStatusChangeManager := initTestCase(t)
+               logger, config, rnibDataService, rmrSender, e2tInstancesManager, routingManagerClient, e2tAssociationManager, ranConnectStatusChangeManager, ranListManager := initTestCase(t)
                provider := NewNotificationHandlerProvider()
-               provider.Init(logger, config, rnibDataService, rmrSender, e2tInstancesManager, routingManagerClient, e2tAssociationManager, ranConnectStatusChangeManager)
+               provider.Init(logger, config, rnibDataService, rmrSender, e2tInstancesManager, routingManagerClient, e2tAssociationManager, ranConnectStatusChangeManager, ranListManager)
                t.Run(fmt.Sprintf("%d", tc.msgType), func(t *testing.T) {
                        _, err := provider.GetNotificationHandler(tc.msgType)
                        if err == nil {
index d4d4529..72ae10a 100644 (file)
@@ -75,7 +75,7 @@ func initRmrReceiver(logger *logger.Logger) *RmrReceiver {
        ranConnectStatusChangeManager := managers.NewRanConnectStatusChangeManager(logger, rnibDataService, ranListManager, ranAlarmService)
        e2tAssociationManager := managers.NewE2TAssociationManager(logger, rnibDataService, e2tInstancesManager, routingManagerClient, ranConnectStatusChangeManager)
        rmrNotificationHandlerProvider := rmrmsghandlerprovider.NewNotificationHandlerProvider()
-       rmrNotificationHandlerProvider.Init(logger, config, rnibDataService, rmrSender, e2tInstancesManager, routingManagerClient, e2tAssociationManager, ranConnectStatusChangeManager)
+       rmrNotificationHandlerProvider.Init(logger, config, rnibDataService, rmrSender, e2tInstancesManager, routingManagerClient, e2tAssociationManager, ranConnectStatusChangeManager, ranListManager)
        notificationManager := notificationmanager.NewNotificationManager(logger, rmrNotificationHandlerProvider)
        return NewRmrReceiver(logger, rmrMessenger, notificationManager)
 }