X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=E2Manager%2Fcontrollers%2Fnodeb_controller_test.go;h=eb7b9175d90bf03f3a1b0b03c4a0ecec27f6a2fc;hb=a590417b434ba8e556f1a9b26ff7b6edbb2097ce;hp=a836b5cb4761cb5b90515fb079789b5c08aeea7f;hpb=dc8932a553fabccf33b5cbb4e37084362493dbcf;p=ric-plt%2Fe2mgr.git diff --git a/E2Manager/controllers/nodeb_controller_test.go b/E2Manager/controllers/nodeb_controller_test.go index a836b5c..eb7b917 100644 --- a/E2Manager/controllers/nodeb_controller_test.go +++ b/E2Manager/controllers/nodeb_controller_test.go @@ -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, @@ -300,7 +302,7 @@ func buildGlobalNbId(propToOmit string) map[string]interface{} { return ret } -func setupControllerTest(t *testing.T) (*NodebController, *mocks.RnibReaderMock, *mocks.RnibWriterMock, *mocks.RmrMessengerMock, *mocks.E2TInstancesManagerMock) { +func setupControllerTest(t *testing.T) (*NodebController, *mocks.RnibReaderMock, *mocks.RnibWriterMock, *mocks.RmrMessengerMock, *mocks.E2TInstancesManagerMock, managers.RanListManager) { log := initLog(t) config := configuration.ParseConfiguration() @@ -314,19 +316,19 @@ 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 + return controller, readerMock, writerMock, rmrMessengerMock, e2tInstancesManager, ranListManager } func TestShutdownHandlerRnibError(t *testing.T) { - controller, _, _, _, e2tInstancesManagerMock := setupControllerTest(t) + controller, _, _, _, e2tInstancesManagerMock, _ := setupControllerTest(t) e2tInstancesManagerMock.On("GetE2TAddresses").Return([]string{}, e2managererrors.NewRnibDbError()) writer := httptest.NewRecorder() @@ -340,7 +342,7 @@ func TestShutdownHandlerRnibError(t *testing.T) { } func TestSetGeneralConfigurationHandlerRnibError(t *testing.T) { - controller, readerMock, _, _, _ := setupControllerTest(t) + controller, readerMock, _, _, _ , _:= setupControllerTest(t) configuration := &entities.GeneralConfiguration{} readerMock.On("GetGeneralConfiguration").Return(configuration, e2managererrors.NewRnibDbError()) @@ -358,7 +360,7 @@ func TestSetGeneralConfigurationHandlerRnibError(t *testing.T) { } func TestSetGeneralConfigurationInvalidJson(t *testing.T) { - controller, _, _, _, _ := setupControllerTest(t) + controller, _, _, _, _, _ := setupControllerTest(t) writer := httptest.NewRecorder() @@ -373,7 +375,7 @@ func TestSetGeneralConfigurationInvalidJson(t *testing.T) { } func controllerGetNodebTestExecuter(t *testing.T, context *controllerGetNodebTestContext) { - controller, readerMock, _, _, _ := setupControllerTest(t) + controller, readerMock, _, _, _, _ := setupControllerTest(t) writer := httptest.NewRecorder() readerMock.On("GetNodeb", context.ranName).Return(context.nodebInfo, context.rnibError) req, _ := http.NewRequest(http.MethodGet, "/nodeb", nil) @@ -385,17 +387,23 @@ func controllerGetNodebTestExecuter(t *testing.T, context *controllerGetNodebTes } func controllerGetNodebIdListTestExecuter(t *testing.T, context *controllerGetNodebIdListTestContext) { - controller, readerMock, _, _, _ := setupControllerTest(t) + controller, readerMock, _, _, _, ranListManager := setupControllerTest(t) writer := httptest.NewRecorder() readerMock.On("GetListNodebIds").Return(context.nodebIdList, context.rnibError) - req, _ := http.NewRequest(http.MethodGet, "/nodeb/ids", nil) + + err := ranListManager.InitNbIdentityMap() + if err != nil { + t.Errorf("Error cannot init identity") + } + + req, _ := http.NewRequest(http.MethodGet, "/nodeb/states", nil) controller.GetNodebIdList(writer, req) assert.Equal(t, context.expectedStatusCode, writer.Result().StatusCode) bodyBytes, _ := ioutil.ReadAll(writer.Body) 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) } @@ -489,7 +497,7 @@ func buildAddEnbRequest(context *controllerAddEnbTestContext) *http.Request { } func controllerUpdateEnbTestExecuter(t *testing.T, context *controllerUpdateEnbTestContext) { - controller, readerMock, writerMock, _, _ := setupControllerTest(t) + controller, readerMock, writerMock, _, _, _ := setupControllerTest(t) writer := httptest.NewRecorder() r := buildUpdateEnbRequest(context) @@ -508,7 +516,7 @@ func controllerUpdateEnbTestExecuter(t *testing.T, context *controllerUpdateEnbT } func controllerUpdateGnbTestExecuter(t *testing.T, context *controllerUpdateGnbTestContext) { - controller, readerMock, writerMock, _, _ := setupControllerTest(t) + controller, readerMock, writerMock, _, _, _ := setupControllerTest(t) writer := httptest.NewRecorder() activateControllerUpdateGnbMocks(context, readerMock, writerMock) @@ -533,14 +541,17 @@ 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) } } func controllerAddEnbTestExecuter(t *testing.T, context *controllerAddEnbTestContext) { - controller, readerMock, writerMock, _, _ := setupControllerTest(t) + controller, readerMock, writerMock, _, _, _ := setupControllerTest(t) writer := httptest.NewRecorder() r := buildAddEnbRequest(context) body, _ := ioutil.ReadAll(io.LimitReader(r.Body, LimitRequest)) @@ -556,7 +567,7 @@ func controllerAddEnbTestExecuter(t *testing.T, context *controllerAddEnbTestCon } func controllerDeleteEnbTestExecuter(t *testing.T, context *controllerDeleteEnbTestContext) { - controller, readerMock, writerMock, _, _ := setupControllerTest(t) + controller, readerMock, writerMock, _, _, _ := setupControllerTest(t) 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) @@ -856,7 +867,7 @@ func TestControllerUpdateGnbSuccess(t *testing.T) { } func TestControllerUpdateEnbInvalidRequest(t *testing.T) { - controller, _, _, _, _ := setupControllerTest(t) + controller, _, _, _, _, _ := setupControllerTest(t) writer := httptest.NewRecorder() invalidJson := strings.NewReader("{enb:\"whatever\"") @@ -875,8 +886,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 +897,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 +908,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 +923,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 +937,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 +958,7 @@ func TestControllerUpdateEnbGetNodebSuccessGnbTypeFailure(t *testing.T) { }, rnibError: nil, }, - requestBody: getUpdateEnbRequest(""), + requestBody: getUpdateEnbRequest(""), expectedStatusCode: http.StatusBadRequest, expectedJsonResponse: ValidationFailureJson, } @@ -972,7 +983,7 @@ func TestControllerUpdateEnbGetNodebSuccessRemoveServedCellsFailure(t *testing.T }, rnibError: nil, }, - requestBody: getUpdateEnbRequest(""), + requestBody: getUpdateEnbRequest(""), expectedStatusCode: http.StatusInternalServerError, expectedJsonResponse: RnibErrorJson, } @@ -984,7 +995,7 @@ func TestControllerUpdateEnbGetNodebSuccessUpdateEnbFailure(t *testing.T) { oldServedCells := generateServedCells("whatever1", "whatever2") context := controllerUpdateEnbTestContext{ removeServedCellsParams: &removeServedCellsParams{ - err: nil, + err: nil, servedCellInfo: oldServedCells, }, updateEnbCellsParams: &updateEnbCellsParams{ @@ -1000,7 +1011,7 @@ func TestControllerUpdateEnbGetNodebSuccessUpdateEnbFailure(t *testing.T) { }, rnibError: nil, }, - requestBody: getUpdateEnbRequest(""), + requestBody: getUpdateEnbRequest(""), expectedStatusCode: http.StatusInternalServerError, expectedJsonResponse: RnibErrorJson, } @@ -1012,7 +1023,7 @@ func TestControllerUpdateEnbSuccess(t *testing.T) { oldServedCells := generateServedCells("whatever1", "whatever2") context := controllerUpdateEnbTestContext{ removeServedCellsParams: &removeServedCellsParams{ - err: nil, + err: nil, servedCellInfo: oldServedCells, }, updateEnbCellsParams: &updateEnbCellsParams{ @@ -1028,7 +1039,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 +1092,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 { @@ -1095,7 +1126,7 @@ func TestControllerAddEnbMissingRequiredRequestProps(t *testing.T) { } func TestControllerAddEnbInvalidRequest(t *testing.T) { - controller, _, _, _, _ := setupControllerTest(t) + controller, _, _, _, _, _ := setupControllerTest(t) writer := httptest.NewRecorder() // Invalid json: attribute name without quotes (should be "cause":). @@ -1194,23 +1225,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\"}]}}", } @@ -1349,20 +1371,8 @@ func TestControllerGetNodebIdListEmptySuccess(t *testing.T) { controllerGetNodebIdListTestExecuter(t, &context) } -func TestControllerGetNodebIdListInternal(t *testing.T) { - var nodebIdList []*entities.NbIdentity - context := controllerGetNodebIdListTestContext{ - nodebIdList: nodebIdList, - rnibError: common.NewInternalError(errors.New("#reader.GetNodeb - Internal Error")), - expectedStatusCode: http.StatusInternalServerError, - expectedJsonResponse: RnibErrorJson, - } - - controllerGetNodebIdListTestExecuter(t, &context) -} - func TestHeaderValidationFailed(t *testing.T) { - controller, _, _, _, _ := setupControllerTest(t) + controller, _, _, _, _, _ := setupControllerTest(t) writer := httptest.NewRecorder() @@ -1379,7 +1389,7 @@ func TestHeaderValidationFailed(t *testing.T) { } func TestShutdownStatusNoContent(t *testing.T) { - controller, readerMock, _, _, e2tInstancesManagerMock := setupControllerTest(t) + controller, readerMock, _, _, e2tInstancesManagerMock, _ := setupControllerTest(t) e2tInstancesManagerMock.On("GetE2TAddresses").Return([]string{}, nil) readerMock.On("GetListNodebIds").Return([]*entities.NbIdentity{}, nil) @@ -1390,7 +1400,7 @@ func TestShutdownStatusNoContent(t *testing.T) { } func TestHandleInternalError(t *testing.T) { - controller, _, _, _, _ := setupControllerTest(t) + controller, _, _, _, _, _ := setupControllerTest(t) writer := httptest.NewRecorder() err := e2managererrors.NewInternalError() @@ -1404,7 +1414,7 @@ func TestHandleInternalError(t *testing.T) { } func TestHandleCommandAlreadyInProgressError(t *testing.T) { - controller, _, _, _, _ := setupControllerTest(t) + controller, _, _, _, _, _ := setupControllerTest(t) writer := httptest.NewRecorder() err := e2managererrors.NewCommandAlreadyInProgressError() @@ -1417,7 +1427,7 @@ func TestHandleCommandAlreadyInProgressError(t *testing.T) { } func TestHandleRoutingManagerError(t *testing.T) { - controller, _, _, _, _ := setupControllerTest(t) + controller, _, _, _, _, _ := setupControllerTest(t) writer := httptest.NewRecorder() err := e2managererrors.NewRoutingManagerError() @@ -1430,7 +1440,7 @@ func TestHandleRoutingManagerError(t *testing.T) { } func TestHandleE2TInstanceAbsenceError(t *testing.T) { - controller, _, _, _, _ := setupControllerTest(t) + controller, _, _, _, _, _ := setupControllerTest(t) writer := httptest.NewRecorder() err := e2managererrors.NewE2TInstanceAbsenceError() @@ -1444,7 +1454,7 @@ func TestHandleE2TInstanceAbsenceError(t *testing.T) { } func TestValidateHeaders(t *testing.T) { - controller, _, _, _, _ := setupControllerTest(t) + controller, _, _, _, _, _ := setupControllerTest(t) header := http.Header{} header.Set("Content-Type", "application/json") @@ -1474,7 +1484,7 @@ func initLog(t *testing.T) *logger.Logger { } func TestX2ResetHandleSuccessfulRequestedCause(t *testing.T) { - controller, readerMock, _, rmrMessengerMock, _ := setupControllerTest(t) + controller, readerMock, _, rmrMessengerMock, _, _ := setupControllerTest(t) ranName := "test1" payload := []byte{0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x05, 0x40, 0x01, 0x40} @@ -1500,7 +1510,7 @@ func TestX2ResetHandleSuccessfulRequestedCause(t *testing.T) { } func TestX2ResetHandleSuccessfulRequestedDefault(t *testing.T) { - controller, readerMock, _, rmrMessengerMock, _ := setupControllerTest(t) + controller, readerMock, _, rmrMessengerMock, _, _ := setupControllerTest(t) ranName := "test1" // o&m intervention @@ -1527,7 +1537,7 @@ func TestX2ResetHandleSuccessfulRequestedDefault(t *testing.T) { } func TestX2ResetHandleFailureInvalidBody(t *testing.T) { - controller, _, _, _, _ := setupControllerTest(t) + controller, _, _, _, _, _ := setupControllerTest(t) ranName := "test1" @@ -1544,7 +1554,7 @@ func TestX2ResetHandleFailureInvalidBody(t *testing.T) { } func TestHandleErrorResponse(t *testing.T) { - controller, _, _, _, _ := setupControllerTest(t) + controller, _, _, _, _, _ := setupControllerTest(t) writer := httptest.NewRecorder() controller.handleErrorResponse(e2managererrors.NewRnibDbError(), writer)