X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=E2Manager%2Fcontrollers%2Fnodeb_controller_test.go;h=fc59673bfc6d57fa44cde84b8dca00680ae0287e;hb=611eba27c24f595a57f7c55068605a57788ead95;hp=78be089f23578f9942c05d0cd269abc433c326ab;hpb=14eb5132c3dca8cdad98e7e5420701b04f452046;p=ric-plt%2Fe2mgr.git diff --git a/E2Manager/controllers/nodeb_controller_test.go b/E2Manager/controllers/nodeb_controller_test.go index 78be089..fc59673 100644 --- a/E2Manager/controllers/nodeb_controller_test.go +++ b/E2Manager/controllers/nodeb_controller_test.go @@ -54,6 +54,7 @@ import ( const ( RanName = "test" AssociatedE2TInstanceAddress = "10.0.2.15:38000" + CorruptedJson = "{\"errorCode\":401,\"errorMessage\":\"corrupted json\"}" ValidationFailureJson = "{\"errorCode\":402,\"errorMessage\":\"Validation error\"}" ResourceNotFoundJson = "{\"errorCode\":404,\"errorMessage\":\"Resource not found\"}" NodebExistsJson = "{\"errorCode\":406,\"errorMessage\":\"Nodeb already exists\"}" @@ -63,10 +64,12 @@ const ( ) var ( - ServedNrCellInformationRequiredFields = []string{"cellId", "choiceNrMode", "nrMode", "nrPci", "servedPlmns"} - NrNeighbourInformationRequiredFields = []string{"nrCgi", "choiceNrMode", "nrMode", "nrPci"} + ServedNrCellInformationRequiredFields = []string{"cellId", "choiceNrMode", "nrMode", "servedPlmns"} + NrNeighbourInformationRequiredFields = []string{"nrCgi", "choiceNrMode", "nrMode"} + AddEnbRequestRequiredFields = []string{"ranName", "enb", "globalNbId"} + GlobalIdRequiredFields = []string{"plmnId", "nbId"} EnbRequiredFields = []string{"enbType", "servedCells"} - ServedCellRequiredFields = []string{"broadcastPlmns", "cellId", "choiceEutraMode", "eutraMode", "pci", "tac"} + ServedCellRequiredFields = []string{"broadcastPlmns", "cellId", "choiceEutraMode", "eutraMode", "tac"} ) type controllerGetNodebTestContext struct { @@ -94,9 +97,9 @@ type updateGnbCellsParams struct { } type saveNodebParams struct { - nodebInfo *entities.NodebInfo + nodebInfo *entities.NodebInfo nbIdentity *entities.NbIdentity - err error + err error } type removeServedNrCellsParams struct { @@ -200,6 +203,47 @@ func buildServedCell(propToOmit string) map[string]interface{} { return ret } +func getAddEnbRequest(propToOmit string) map[string]interface{} { + ret := map[string]interface{}{ + "ranName": RanName, + "globalNbId": buildGlobalNbId(""), + "enb": buildEnb(""), + } + + if len(propToOmit) != 0 { + delete(ret, propToOmit) + } + + return ret +} + +func buildEnb(propToOmit string) map[string]interface{} { + ret := map[string]interface{}{ + "enbType": 1, + "servedCells": []interface{}{ + buildServedCell(""), + }} + + if len(propToOmit) != 0 { + delete(ret, propToOmit) + } + + return ret +} + +func buildGlobalNbId(propToOmit string) map[string]interface{} { + ret := map[string]interface{}{ + "plmnId": "whatever", + "nbId": "whatever2", + } + + if len(propToOmit) != 0 { + delete(ret, propToOmit) + } + + return ret +} + func setupControllerTest(t *testing.T) (*NodebController, *mocks.RnibReaderMock, *mocks.RnibWriterMock, *mocks.RmrMessengerMock, *mocks.E2TInstancesManagerMock) { log := initLog(t) config := configuration.ParseConfiguration() @@ -211,16 +255,14 @@ func setupControllerTest(t *testing.T) (*NodebController, *mocks.RnibReaderMock, rnibDataService := services.NewRnibDataService(log, config, readerMock, writerMock) rmrSender := getRmrSender(rmrMessengerMock, log) - ranSetupManager := managers.NewRanSetupManager(log, rmrSender, rnibDataService) e2tInstancesManager := &mocks.E2TInstancesManagerMock{} httpClientMock := &mocks.HttpClientMock{} rmClient := clients.NewRoutingManagerClient(log, config, httpClientMock) ranListManager := &mocks.RanListManagerMock{} ranAlarmService := &mocks.RanAlarmServiceMock{} ranConnectStatusChangeManager := managers.NewRanConnectStatusChangeManager(log, rnibDataService, ranListManager, ranAlarmService) - - e2tAssociationManager := managers.NewE2TAssociationManager(log, rnibDataService, e2tInstancesManager, rmClient, ranConnectStatusChangeManager) - handlerProvider := httpmsghandlerprovider.NewIncomingRequestHandlerProvider(log, rmrSender, config, rnibDataService, ranSetupManager, e2tInstancesManager, e2tAssociationManager, rmClient, ranConnectStatusChangeManager) + nodebValidator := managers.NewNodebValidator() + handlerProvider := httpmsghandlerprovider.NewIncomingRequestHandlerProvider(log, rmrSender, config, rnibDataService, e2tInstancesManager, rmClient, ranConnectStatusChangeManager, nodebValidator) controller := NewNodebController(log, handlerProvider) return controller, readerMock, writerMock, rmrMessengerMock, e2tInstancesManager } @@ -366,6 +408,7 @@ func activateControllerAddEnbMocks(context *controllerAddEnbTestContext, readerM RanName: addEnbRequest.RanName, Ip: addEnbRequest.Ip, Port: addEnbRequest.Port, + NodeType: entities.Node_ENB, GlobalNbId: addEnbRequest.GlobalNbId, Configuration: &entities.NodebInfo_Enb{Enb: addEnbRequest.Enb}, ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, @@ -373,7 +416,7 @@ func activateControllerAddEnbMocks(context *controllerAddEnbTestContext, readerM nbIdentity := entities.NbIdentity{InventoryName: addEnbRequest.RanName, GlobalNbId: addEnbRequest.GlobalNbId} - writerMock.On("SaveNodeb",&nbIdentity, &nodebInfo).Return(context.saveNodebParams.err) + writerMock.On("SaveNodeb", &nbIdentity, &nodebInfo).Return(context.saveNodebParams.err) } } @@ -381,14 +424,15 @@ func controllerAddEnbTestExecuter(t *testing.T, context *controllerAddEnbTestCon controller, readerMock, writerMock, _, _ := setupControllerTest(t) writer := httptest.NewRecorder() r := buildAddEnbRequest(context) - defer r.Body.Close() body, _ := ioutil.ReadAll(io.LimitReader(r.Body, LimitRequest)) addEnbRequest := models.AddEnbRequest{} _ = json.Unmarshal(body, &addEnbRequest) activateControllerAddEnbMocks(context, readerMock, writerMock, &addEnbRequest) - controller.AddEnb(writer, buildAddEnbRequest(context)) + r = buildAddEnbRequest(context) + defer r.Body.Close() + controller.AddEnb(writer, r) assertControllerAddEnb(t, context, writer, readerMock, writerMock) } @@ -678,6 +722,136 @@ func TestControllerUpdateGnbSuccess(t *testing.T) { controllerUpdateGnbTestExecuter(t, &context) } +func TestControllerAddEnbGetNodebInternalError(t *testing.T) { + context := controllerAddEnbTestContext{ + getNodebInfoResult: &getNodebInfoResult{ + nodebInfo: nil, + rnibError: common.NewInternalError(errors.New("#reader.GetNodeb - Internal Error")), + }, + requestBody: getAddEnbRequest(""), + expectedStatusCode: http.StatusInternalServerError, + expectedJsonResponse: RnibErrorJson, + } + + controllerAddEnbTestExecuter(t, &context) +} + +func TestControllerAddEnbNodebExistsFailure(t *testing.T) { + context := controllerAddEnbTestContext{ + getNodebInfoResult: &getNodebInfoResult{ + nodebInfo: &entities.NodebInfo{}, + rnibError: nil, + }, + requestBody: getAddEnbRequest(""), + expectedStatusCode: http.StatusBadRequest, + expectedJsonResponse: NodebExistsJson, + } + + controllerAddEnbTestExecuter(t, &context) +} + +func TestControllerAddEnbSaveNodebFailure(t *testing.T) { + context := controllerAddEnbTestContext{ + saveNodebParams: &saveNodebParams{ + err: common.NewInternalError(errors.New("#reader.SaveeNodeb - 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 { + context := controllerAddEnbTestContext{ + requestBody: getAddEnbRequest(v), + expectedStatusCode: http.StatusBadRequest, + expectedJsonResponse: ValidationFailureJson, + } + + controllerAddEnbTestExecuter(t, &context) + } +} + +func TestControllerAddEnbInvalidRequest(t *testing.T) { + controller, _, _, _, _ := setupControllerTest(t) + writer := httptest.NewRecorder() + + // Invalid json: attribute name without quotes (should be "cause":). + invalidJson := strings.NewReader("{ranName:\"whatever\"") + req, _ := http.NewRequest(http.MethodPost, AddEnbUrl, invalidJson) + + controller.AddEnb(writer, req) + assert.Equal(t, http.StatusBadRequest, writer.Result().StatusCode) + bodyBytes, _ := ioutil.ReadAll(writer.Body) + assert.Equal(t, CorruptedJson, string(bodyBytes)) + +} + +func TestControllerAddEnbMissingRequiredGlobalNbIdProps(t *testing.T) { + + r := getAddEnbRequest("") + + for _, v := range GlobalIdRequiredFields { + r["globalNbId"] = buildGlobalNbId(v) + + context := controllerAddEnbTestContext{ + requestBody: r, + expectedStatusCode: http.StatusBadRequest, + expectedJsonResponse: ValidationFailureJson, + } + + controllerAddEnbTestExecuter(t, &context) + } +} + +func TestControllerAddEnbMissingRequiredEnbProps(t *testing.T) { + + r := getAddEnbRequest("") + + for _, v := range EnbRequiredFields { + r["enb"] = buildEnb(v) + + context := controllerAddEnbTestContext{ + requestBody: r, + expectedStatusCode: http.StatusBadRequest, + expectedJsonResponse: ValidationFailureJson, + } + + controllerAddEnbTestExecuter(t, &context) + } +} + +func TestControllerAddEnbMissingRequiredServedCellProps(t *testing.T) { + + r := getAddEnbRequest("") + + for _, v := range ServedCellRequiredFields { + enb := r["enb"] + + enbMap, _ := enb.(map[string]interface{}) + + enbMap["servedCells"] = []interface{}{ + buildServedCell(v), + } + + context := controllerAddEnbTestContext{ + requestBody: r, + expectedStatusCode: http.StatusBadRequest, + expectedJsonResponse: ValidationFailureJson, + } + + controllerAddEnbTestExecuter(t, &context) + } +} + func TestControllerAddEnbSuccess(t *testing.T) { context := controllerAddEnbTestContext{ saveNodebParams: &saveNodebParams{ @@ -701,7 +875,7 @@ func TestControllerAddEnbSuccess(t *testing.T) { }, }, expectedStatusCode: http.StatusCreated, - expectedJsonResponse: "{\"ranName\":\"test\",\"connectionStatus\":\"DISCONNECTED\",\"globalNbId\":{\"plmnId\":\"whatever\",\"nbId\":\"whatever2\"},\"enb\":{\"enbType\":\"MACRO_ENB\",\"servedCells\":[{\"pci\":1,\"cellId\":\"whatever\",\"tac\":\"whatever3\",\"broadcastPlmns\":[\"whatever\"],\"choiceEutraMode\":{\"fdd\":{}},\"eutraMode\":\"FDD\"}]}}", + 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\"}]}}", } controllerAddEnbTestExecuter(t, &context)