[RIC-433] Add unit test coverage, tag incremented to 5.2.17 04/4404/1
authorAmichai <amichai.sichel@intl.att.com>
Thu, 16 Jul 2020 21:15:32 +0000 (21:15 +0000)
committerAmichai <amichai.sichel@intl.att.com>
Thu, 16 Jul 2020 21:15:42 +0000 (21:15 +0000)
Change-Id: Id5596a2d5bbbcac8b5e3273b7b486c913b22877d
Signed-off-by: Amichai <amichai.sichel@intl.att.com>
E2Manager/container-tag.yaml
E2Manager/controllers/nodeb_controller_test.go
E2Manager/go.mod
E2Manager/go.sum
E2Manager/handlers/httpmsghandlers/delete_enb_request_handler.go
E2Manager/handlers/httpmsghandlers/delete_enb_request_handler_test.go
E2Manager/managers/ran_list_manager.go
E2Manager/providers/httpmsghandlerprovider/incoming_request_handler_provider.go
E2Manager/rNibWriter/rNibWriter_test.go
E2Manager/services/rnib_data_service.go

index 06fe115..b673452 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.16
+tag: 5.2.17
index eb7b917..9730320 100644 (file)
@@ -327,6 +327,37 @@ func setupControllerTest(t *testing.T) (*NodebController, *mocks.RnibReaderMock,
        return controller, readerMock, writerMock, rmrMessengerMock, e2tInstancesManager, ranListManager
 }
 
+func setupDeleteEnbControllerTest(t *testing.T, preAddNbIdentity bool) (*NodebController, *mocks.RnibReaderMock, *mocks.RnibWriterMock, *entities.NbIdentity) {
+       log := initLog(t)
+       config := configuration.ParseConfiguration()
+
+       rmrMessengerMock := &mocks.RmrMessengerMock{}
+       readerMock := &mocks.RnibReaderMock{}
+
+       writerMock := &mocks.RnibWriterMock{}
+
+       rnibDataService := services.NewRnibDataService(log, config, readerMock, writerMock)
+       rmrSender := getRmrSender(rmrMessengerMock, log)
+       e2tInstancesManager := &mocks.E2TInstancesManagerMock{}
+       httpClientMock := &mocks.HttpClientMock{}
+       rmClient := clients.NewRoutingManagerClient(log, config, httpClientMock)
+       ranListManager := managers.NewRanListManager(log, rnibDataService)
+       var nbIdentity *entities.NbIdentity
+       if preAddNbIdentity {
+               nbIdentity = &entities.NbIdentity{InventoryName: RanName, ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, GlobalNbId: &entities.GlobalNbId{PlmnId: "plmnId1", NbId: "nbId1"}}
+               writerMock.On("AddNbIdentity", entities.Node_ENB, nbIdentity).Return(nil)
+               ranListManager.AddNbIdentity(entities.Node_ENB, nbIdentity)
+       }
+       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, ranListManager)
+       controller := NewNodebController(log, handlerProvider)
+       return controller, readerMock, writerMock, nbIdentity
+}
+
 func TestShutdownHandlerRnibError(t *testing.T) {
        controller, _, _, _, e2tInstancesManagerMock, _ := setupControllerTest(t)
        e2tInstancesManagerMock.On("GetE2TAddresses").Return([]string{}, e2managererrors.NewRnibDbError())
@@ -566,11 +597,14 @@ func controllerAddEnbTestExecuter(t *testing.T, context *controllerAddEnbTestCon
        assertControllerAddEnb(t, context, writer, readerMock, writerMock)
 }
 
-func controllerDeleteEnbTestExecuter(t *testing.T, context *controllerDeleteEnbTestContext) {
-       controller, readerMock, writerMock, _, _, _ := setupControllerTest(t)
+func controllerDeleteEnbTestExecuter(t *testing.T, context *controllerDeleteEnbTestContext, preAddNbIdentity bool) {
+       controller, readerMock, writerMock, nbIdentity := setupDeleteEnbControllerTest(t, preAddNbIdentity)
        readerMock.On("GetNodeb", RanName).Return(context.getNodebInfoResult.nodebInfo, context.getNodebInfoResult.rnibError)
        if context.getNodebInfoResult.rnibError == nil && context.getNodebInfoResult.nodebInfo.GetNodeType() == entities.Node_ENB {
                writerMock.On("RemoveEnb", context.getNodebInfoResult.nodebInfo).Return(nil)
+               if preAddNbIdentity {
+                       writerMock.On("RemoveNbIdentity", entities.Node_ENB,  nbIdentity).Return(nil)
+               }
        }
        writer := httptest.NewRecorder()
        r, _ := http.NewRequest(http.MethodDelete, AddEnbUrl+"/"+RanName, nil)
@@ -1250,7 +1284,7 @@ func TestControllerDeleteEnbGetNodebInternalError(t *testing.T) {
                expectedJsonResponse: RnibErrorJson,
        }
 
-       controllerDeleteEnbTestExecuter(t, &context)
+       controllerDeleteEnbTestExecuter(t, &context, false)
 }
 
 func TestControllerDeleteEnbNodebNotExistsFailure(t *testing.T) {
@@ -1263,7 +1297,7 @@ func TestControllerDeleteEnbNodebNotExistsFailure(t *testing.T) {
                expectedJsonResponse: ResourceNotFoundJson,
        }
 
-       controllerDeleteEnbTestExecuter(t, &context)
+       controllerDeleteEnbTestExecuter(t, &context, false)
 }
 
 func TestControllerDeleteEnbNodebNotEnb(t *testing.T) {
@@ -1276,19 +1310,19 @@ func TestControllerDeleteEnbNodebNotEnb(t *testing.T) {
                expectedJsonResponse: ValidationFailureJson,
        }
 
-       controllerDeleteEnbTestExecuter(t, &context)
+       controllerDeleteEnbTestExecuter(t, &context, false)
 }
 
 func TestControllerDeleteEnbSuccess(t *testing.T) {
        context := controllerDeleteEnbTestContext{
                getNodebInfoResult: &getNodebInfoResult{
-                       nodebInfo: &entities.NodebInfo{RanName: "ran1", NodeType: entities.Node_ENB, ConnectionStatus: entities.ConnectionStatus_DISCONNECTED},
+                       nodebInfo: &entities.NodebInfo{RanName: RanName, NodeType: entities.Node_ENB, ConnectionStatus: entities.ConnectionStatus_DISCONNECTED},
                        rnibError: nil,
                },
                expectedStatusCode:   http.StatusNoContent,
                expectedJsonResponse: "",
        }
-       controllerDeleteEnbTestExecuter(t, &context)
+       controllerDeleteEnbTestExecuter(t, &context, true)
 }
 
 func getJsonRequestAsBuffer(requestJson map[string]interface{}) *bytes.Buffer {
index adf931d..9cf5006 100644 (file)
@@ -1,9 +1,9 @@
 module e2mgr
 
 require (
-       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/nodeb-rnib.git/common v1.0.46
+       gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.46
+       gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.46
        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 7a519c9..62ac537 100644 (file)
@@ -3,14 +3,20 @@ gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common v1.0.44 h1:rda7Ubx7ZW579wWNd
 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/common v1.0.46 h1:mUn8CsJYcliKK35Xm7xMjkrTnhksZ9AinPkTu44ABKA=
+gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common v1.0.46/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/entities v1.0.46 h1:bd1nDjy20ia7vUWw3Dqvxf9shMSAtJOObSotr4iwGxM=
+gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.46/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/nodeb-rnib.git/reader v1.0.46 h1:GlwpSMYc0wuARKfiEfF0p0ttsinWhmvKVpFZknGor24=
+gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.46/go.mod h1:O83fcA6x8B7tPBgr2ihBXsfRkcL0m3NWYMLsD/gvGWU=
 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 c669dd1..c346bb6 100644 (file)
@@ -22,6 +22,7 @@ package httpmsghandlers
 import (
        "e2mgr/e2managererrors"
        "e2mgr/logger"
+       "e2mgr/managers"
        "e2mgr/models"
        "e2mgr/services"
        "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
@@ -31,12 +32,14 @@ import (
 type DeleteEnbRequestHandler struct {
        logger          *logger.Logger
        rNibDataService services.RNibDataService
+       ranListManager  managers.RanListManager
 }
 
-func NewDeleteEnbRequestHandler(logger *logger.Logger, rNibDataService services.RNibDataService) *DeleteEnbRequestHandler {
+func NewDeleteEnbRequestHandler(logger *logger.Logger, rNibDataService services.RNibDataService, ranListManager managers.RanListManager) *DeleteEnbRequestHandler {
        return &DeleteEnbRequestHandler{
                logger:          logger,
                rNibDataService: rNibDataService,
+               ranListManager:  ranListManager,
        }
 }
 
@@ -64,15 +67,18 @@ func (h *DeleteEnbRequestHandler) Handle(request models.Request) (models.IRespon
                return nil, e2managererrors.NewRequestValidationError()
        }
 
-
        err = h.rNibDataService.RemoveEnb(nodebInfo)
-
        if err != nil {
                h.logger.Errorf("#DeleteEnbRequestHandler.Handle - RAN name: %s - failed to delete nodeb entity in RNIB. Error: %s", deleteEnbRequest.RanName, err)
                return nil, e2managererrors.NewRnibDbError()
        }
 
+       err = h.ranListManager.RemoveNbIdentity(entities.Node_ENB, deleteEnbRequest.RanName)
+       if err != nil {
+               h.logger.Errorf("#DeleteEnbRequestHandler.Handle - RAN name: %s - failed to delete nbIdentity in RNIB. Error: %s", deleteEnbRequest.RanName, err)
+               return nil, e2managererrors.NewRnibDbError()
+       }
+
        h.logger.Infof("#DeleteEnbRequestHandler.Handle - RAN name: %s - deleted successfully.", deleteEnbRequest.RanName)
        return models.NewNodebResponse(nodebInfo), nil
 }
-
index b039c8b..6734618 100644 (file)
@@ -22,6 +22,7 @@ package httpmsghandlers
 
 import (
        "e2mgr/configuration"
+       "e2mgr/managers"
        "e2mgr/mocks"
        "e2mgr/models"
        "e2mgr/services"
@@ -32,20 +33,45 @@ import (
        "testing"
 )
 
-func setupDeleteEnbRequestHandlerTest(t *testing.T) (*DeleteEnbRequestHandler, *mocks.RnibReaderMock, *mocks.RnibWriterMock) {
+func setupDeleteEnbRequestHandlerTest(t *testing.T, emptyList bool) (*DeleteEnbRequestHandler, *mocks.RnibReaderMock, *mocks.RnibWriterMock) {
        log := initLog(t)
        config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
        readerMock := &mocks.RnibReaderMock{}
        writerMock := &mocks.RnibWriterMock{}
        rnibDataService := services.NewRnibDataService(log, config, readerMock, writerMock)
-       handler := NewDeleteEnbRequestHandler(log, rnibDataService)
+       ranListManager := managers.NewRanListManager(log, rnibDataService)
+       if !emptyList {
+               nbIdentity := &entities.NbIdentity{InventoryName: "ran1", ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, GlobalNbId: &entities.GlobalNbId{PlmnId: "plmnId1", NbId: "nbId1"}}
+               writerMock.On("AddNbIdentity", entities.Node_ENB, nbIdentity).Return(nil)
+               if err := ranListManager.AddNbIdentity(entities.Node_ENB, nbIdentity); err != nil {
+                       t.Errorf("#setupDeleteEnbRequestHandlerTest - Failed to add nbIdentity prior to DeleteEnb test")
+               }
+       }
+       handler := NewDeleteEnbRequestHandler(log, rnibDataService, ranListManager)
        return handler, readerMock, writerMock
 }
 
 func TestHandleDeleteEnbSuccess(t *testing.T) {
-       handler, readerMock, writerMock := setupDeleteEnbRequestHandlerTest(t)
+       handler, readerMock, writerMock := setupDeleteEnbRequestHandlerTest(t, false)
 
-       ranName := "test1"
+       ranName := "ran1"
+       var rnibError error
+       nodebInfo := &entities.NodebInfo{RanName: ranName, NodeType: entities.Node_ENB}
+       readerMock.On("GetNodeb", ranName).Return(nodebInfo, rnibError)
+       writerMock.On("RemoveEnb", nodebInfo).Return(nil)
+       writerMock.On("RemoveNbIdentity", entities.Node_ENB, &entities.NbIdentity{InventoryName: "ran1", ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, GlobalNbId: &entities.GlobalNbId{PlmnId: "plmnId1", NbId: "nbId1"}}).Return(nil)
+       result, err := handler.Handle(&models.DeleteEnbRequest{RanName: ranName})
+       assert.Nil(t, err)
+       assert.NotNil(t, result)
+       assert.IsType(t, &models.NodebResponse{}, result)
+       readerMock.AssertExpectations(t)
+       writerMock.AssertExpectations(t)
+}
+
+func TestHandleDeleteEnbSuccessNoEnb(t *testing.T) {
+       handler, readerMock, writerMock := setupDeleteEnbRequestHandlerTest(t, true)
+
+       ranName := "ran1"
        var rnibError error
        nodebInfo := &entities.NodebInfo{RanName: ranName, NodeType: entities.Node_ENB}
        readerMock.On("GetNodeb", ranName).Return(nodebInfo, rnibError)
@@ -59,9 +85,9 @@ func TestHandleDeleteEnbSuccess(t *testing.T) {
 }
 
 func TestHandleDeleteEnbInternalGetNodebError(t *testing.T) {
-       handler, readerMock, writerMock := setupDeleteEnbRequestHandlerTest(t)
+       handler, readerMock, writerMock := setupDeleteEnbRequestHandlerTest(t, false)
 
-       ranName := "test1"
+       ranName := "ran1"
        rnibError := errors.New("for test")
        var nodebInfo *entities.NodebInfo
        readerMock.On("GetNodeb", ranName).Return(nodebInfo, rnibError)
@@ -73,9 +99,9 @@ func TestHandleDeleteEnbInternalGetNodebError(t *testing.T) {
 }
 
 func TestHandleDeleteEnbInternalRemoveEnbError(t *testing.T) {
-       handler, readerMock, writerMock := setupDeleteEnbRequestHandlerTest(t)
+       handler, readerMock, writerMock := setupDeleteEnbRequestHandlerTest(t, false)
 
-       ranName := "test1"
+       ranName := "ran1"
        rnibError := errors.New("for test")
        nodebInfo  := &entities.NodebInfo{RanName: ranName, NodeType: entities.Node_ENB}
        readerMock.On("GetNodeb", ranName).Return(nodebInfo, nil)
@@ -87,10 +113,26 @@ func TestHandleDeleteEnbInternalRemoveEnbError(t *testing.T) {
        writerMock.AssertExpectations(t)
 }
 
+func TestHandleDeleteEnbInternalRemoveNbIdentityError(t *testing.T) {
+       handler, readerMock, writerMock := setupDeleteEnbRequestHandlerTest(t, false)
+
+       ranName := "ran1"
+       rnibError := errors.New("for test")
+       nodebInfo  := &entities.NodebInfo{RanName: ranName, NodeType: entities.Node_ENB}
+       readerMock.On("GetNodeb", ranName).Return(nodebInfo, nil)
+       writerMock.On("RemoveEnb", nodebInfo).Return(nil)
+       writerMock.On("RemoveNbIdentity", entities.Node_ENB, &entities.NbIdentity{InventoryName: "ran1", ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, GlobalNbId: &entities.GlobalNbId{PlmnId: "plmnId1", NbId: "nbId1"}}).Return(rnibError)
+       result, err := handler.Handle(&models.DeleteEnbRequest{RanName: ranName})
+       assert.NotNil(t, err)
+       assert.Nil(t, result)
+       readerMock.AssertExpectations(t)
+       writerMock.AssertExpectations(t)
+}
+
 func TestHandleDeleteEnbResourceNotFoundError(t *testing.T) {
-       handler, readerMock, writerMock := setupDeleteEnbRequestHandlerTest(t)
+       handler, readerMock, writerMock := setupDeleteEnbRequestHandlerTest(t, false)
 
-       ranName := "test1"
+       ranName := "ran1"
        rnibError := common.NewResourceNotFoundError("for test")
        var nodebInfo *entities.NodebInfo
        readerMock.On("GetNodeb", ranName).Return(nodebInfo, rnibError)
@@ -102,9 +144,9 @@ func TestHandleDeleteEnbResourceNotFoundError(t *testing.T) {
 }
 
 func TestHandleDeleteEnbNodeTypeNotEnbError(t *testing.T) {
-       handler, readerMock, writerMock := setupDeleteEnbRequestHandlerTest(t)
+       handler, readerMock, writerMock := setupDeleteEnbRequestHandlerTest(t, false)
 
-       ranName := "test1"
+       ranName := "ran1"
        nodebInfo  := &entities.NodebInfo{RanName: ranName, NodeType: entities.Node_GNB}
        readerMock.On("GetNodeb", ranName).Return(nodebInfo, nil)
        result, err := handler.Handle(&models.DeleteEnbRequest{RanName: ranName})
index d6dbd8e..d392e3d 100644 (file)
@@ -97,7 +97,26 @@ func (m *ranListManagerInstance) UpdateNbIdentityConnectionStatus(nodeType entit
 }
 
 func (m *ranListManagerInstance) RemoveNbIdentity(nodeType entities.Node_Type, ranName string) error {
-       //TODO: implement
+       m.mux.Lock()
+       defer m.mux.Unlock()
+
+       m.logger.Infof("#ranListManagerInstance.RemoveNbIdentity - RAN name: %s - deleting nodeb identity from memory and db...", ranName)
+
+       nbIdentity, ok := m.nbIdentityMap[ranName]
+       if !ok {
+               m.logger.Infof("#ranListManagerInstance.RemoveNbIdentity - RAN name: %s - nodeb identity not found", ranName)
+               return nil
+       }
+
+       delete(m.nbIdentityMap, ranName)
+
+       err := m.rnibDataService.RemoveNbIdentity(nodeType, nbIdentity)
+       if err != nil {
+               m.logger.Errorf("#ranListManagerInstance.RemoveNbIdentity - RAN name: %s - Failed removing nodeb identity from DB. error: %s", ranName, err)
+               return err
+       }
+
+       m.logger.Infof("#ranListManagerInstance.RemoveNbIdentity - RAN name: %s - Successfully deleted nodeb identity", ranName)
        return nil
 }
 
index 77128c5..96f7e0e 100644 (file)
@@ -72,7 +72,7 @@ func initRequestHandlerMap(logger *logger.Logger, rmrSender *rmrsender.RmrSender
                UpdateGnbRequest:               httpmsghandlers.NewUpdateGnbRequestHandler(logger, rNibDataService),
                UpdateEnbRequest:               httpmsghandlers.NewUpdateNodebRequestHandler(logger, rNibDataService, updateEnbManager),
                AddEnbRequest:                  httpmsghandlers.NewAddEnbRequestHandler(logger, rNibDataService, nodebValidator, ranListManager),
-               DeleteEnbRequest:               httpmsghandlers.NewDeleteEnbRequestHandler(logger, rNibDataService),
+               DeleteEnbRequest:               httpmsghandlers.NewDeleteEnbRequestHandler(logger, rNibDataService, ranListManager),
        }
 }
 
index 3dadce8..75240fa 100644 (file)
@@ -1045,6 +1045,36 @@ func TestRemoveEnbRemoveAndPublishError(t *testing.T) {
        sdlInstanceMock.AssertExpectations(t)
 }
 
+func TestRemoveNbIdentitySuccess(t *testing.T) {
+       w, sdlInstanceMock := initSdlInstanceMock(namespace)
+       nbIdentity := &entities.NbIdentity{InventoryName: "ran1", ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, GlobalNbId: &entities.GlobalNbId{PlmnId: "plmnId1", NbId: "nbId1"}}
+       nbIdData, err := proto.Marshal(nbIdentity)
+       if err != nil {
+               t.Errorf("#TestRemoveNbIdentitySuccess - failed to Marshal NbIdentity")
+       }
+
+       sdlInstanceMock.On("RemoveMember", entities.Node_ENB.String(), []interface{}{nbIdData}).Return(nil)
+
+       rNibErr := w.RemoveNbIdentity(entities.Node_ENB, nbIdentity)
+       assert.Nil(t, rNibErr)
+       sdlInstanceMock.AssertExpectations(t)
+}
+
+func TestRemoveNbIdentityError(t *testing.T) {
+       w, sdlInstanceMock := initSdlInstanceMock(namespace)
+       nbIdentity := &entities.NbIdentity{InventoryName: "ran1", ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, GlobalNbId: &entities.GlobalNbId{PlmnId: "plmnId1", NbId: "nbId1"}}
+       nbIdData, err := proto.Marshal(nbIdentity)
+       if err != nil {
+               t.Errorf("#TestRemoveNbIdentitySuccess - failed to Marshal NbIdentity")
+       }
+
+       sdlInstanceMock.On("RemoveMember", entities.Node_ENB.String(), []interface{}{nbIdData}).Return(fmt.Errorf("for test"))
+
+       rNibErr := w.RemoveNbIdentity(entities.Node_ENB, nbIdentity)
+       assert.NotNil(t, rNibErr)
+       sdlInstanceMock.AssertExpectations(t)
+}
+
 //Integration tests
 //
 //func TestSaveEnbGnbInteg(t *testing.T){
index f4e0b5a..7125271 100644 (file)
@@ -56,6 +56,7 @@ type RNibDataService interface {
        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
 }
 
 type rNibDataService struct {
@@ -87,6 +88,17 @@ func (w *rNibDataService) AddNbIdentity(nodeType entities.Node_Type, nbIdentity
        return err
 }
 
+func (w *rNibDataService) RemoveNbIdentity(nodeType entities.Node_Type, nbIdentity *entities.NbIdentity) error{
+       w.logger.Infof("#RnibDataService.RemoveNbIdentity - nbIdentity: %s", nbIdentity)
+
+       err := w.retry("RemoveNbIdentity", func() (err error) {
+               err = w.rnibWriter.RemoveNbIdentity(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)