X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=E2Manager%2Fcontrollers%2Fnodeb_controller_test.go;h=d128dad04042b87deff529317f408cf4f96e4a1b;hb=c7018fe32516829bc267efcc5a20818355768762;hp=1543674b6917bd3e2a53f46ba84294e41c65d1b2;hpb=a07b8597afc9d063a7f37a376a5bcf29ba29b557;p=ric-plt%2Fe2mgr.git diff --git a/E2Manager/controllers/nodeb_controller_test.go b/E2Manager/controllers/nodeb_controller_test.go index 1543674..d128dad 100644 --- a/E2Manager/controllers/nodeb_controller_test.go +++ b/E2Manager/controllers/nodeb_controller_test.go @@ -24,7 +24,6 @@ import ( "e2mgr/clients" "e2mgr/configuration" "e2mgr/e2managererrors" - "e2mgr/e2pdus" "e2mgr/logger" "e2mgr/managers" "e2mgr/mocks" @@ -55,15 +54,22 @@ 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\"}" RnibErrorJson = "{\"errorCode\":500,\"errorMessage\":\"RNIB error\"}" InternalErrorJson = "{\"errorCode\":501,\"errorMessage\":\"Internal Server Error. Please try again later\"}" + AddEnbUrl = "/nodeb/enb" ) 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", "tac"} ) type controllerGetNodebTestContext struct { @@ -90,6 +96,12 @@ type updateGnbCellsParams struct { err error } +type saveNodebParams struct { + nodebInfo *entities.NodebInfo + nbIdentity *entities.NbIdentity + err error +} + type removeServedNrCellsParams struct { servedNrCells []*entities.ServedNRCell err error @@ -104,6 +116,20 @@ type controllerUpdateGnbTestContext struct { expectedJsonResponse string } +type controllerAddEnbTestContext struct { + getNodebInfoResult *getNodebInfoResult + saveNodebParams *saveNodebParams + requestBody map[string]interface{} + expectedStatusCode int + expectedJsonResponse string +} + +type controllerDeleteEnbTestContext struct { + getNodebInfoResult *getNodebInfoResult + expectedStatusCode int + expectedJsonResponse string +} + func generateServedNrCells(cellIds ...string) []*entities.ServedNRCell { servedNrCells := []*entities.ServedNRCell{} @@ -162,105 +188,91 @@ func buildServedNrCellInformation(propToOmit string) map[string]interface{} { return ret } -func setupControllerTest(t *testing.T) (*NodebController, *mocks.RnibReaderMock, *mocks.RnibWriterMock, *mocks.RmrMessengerMock, *mocks.E2TInstancesManagerMock) { - log := initLog(t) - config := configuration.ParseConfiguration() - - rmrMessengerMock := &mocks.RmrMessengerMock{} - readerMock := &mocks.RnibReaderMock{} +func buildServedCell(propToOmit string) map[string]interface{} { + ret := map[string]interface{}{ + "cellId": "whatever", + "choiceEutraMode": map[string]interface{}{ + "fdd": map[string]interface{}{}, + }, + "eutraMode": 1, + "pci": 1, + "tac": "whatever3", + "broadcastPlmns": []interface{}{ + "whatever", + }, + } - writerMock := &mocks.RnibWriterMock{} + if len(propToOmit) != 0 { + delete(ret, propToOmit) + } - 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) - e2tAssociationManager := managers.NewE2TAssociationManager(log, rnibDataService, e2tInstancesManager, rmClient) - handlerProvider := httpmsghandlerprovider.NewIncomingRequestHandlerProvider(log, rmrSender, config, rnibDataService, ranSetupManager, e2tInstancesManager, e2tAssociationManager, rmClient) - controller := NewNodebController(log, handlerProvider) - return controller, readerMock, writerMock, rmrMessengerMock, e2tInstancesManager + return ret } -func TestX2SetupInvalidBody(t *testing.T) { - - controller, _, _, _, _ := setupControllerTest(t) - - header := http.Header{} - header.Set("Content-Type", "application/json") - httpRequest, _ := http.NewRequest("POST", "http://localhost:3800/v1/nodeb/x2-setup", strings.NewReader("{}{}")) - httpRequest.Header = header - - writer := httptest.NewRecorder() - controller.X2Setup(writer, httpRequest) +func getAddEnbRequest(propToOmit string) map[string]interface{} { + ret := map[string]interface{}{ + "ranName": RanName, + "globalNbId": buildGlobalNbId(""), + "enb": buildEnb(""), + } - var errorResponse = parseJsonRequest(t, writer.Body) + if len(propToOmit) != 0 { + delete(ret, propToOmit) + } - assert.Equal(t, http.StatusBadRequest, writer.Result().StatusCode) - assert.Equal(t, e2managererrors.NewInvalidJsonError().Code, errorResponse.Code) + return ret } -func TestX2SetupSuccess(t *testing.T) { - - controller, readerMock, writerMock, rmrMessengerMock, _ := setupControllerTest(t) - - ranName := "test" - nb := &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, AssociatedE2TInstanceAddress: "10.0.2.15:8989"} - readerMock.On("GetNodeb", ranName).Return(nb, nil) - var nbUpdated = *nb - writerMock.On("UpdateNodebInfo", &nbUpdated).Return(nil) - - var nbUpdated2 = &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, AssociatedE2TInstanceAddress: "10.0.2.15:8989"} - writerMock.On("UpdateNodebInfo", nbUpdated2).Return(nil) - - payload := e2pdus.PackedX2setupRequest - var xAction []byte - var msgSrc unsafe.Pointer - msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ranName, &payload, &xAction, msgSrc) - - rmrMessengerMock.On("SendMsg", mock.Anything, true).Return(msg, nil) - - header := http.Header{} - header.Set("Content-Type", "application/json") - httpRequest := tests.GetHttpRequest() - httpRequest.Header = header +func buildEnb(propToOmit string) map[string]interface{} { + ret := map[string]interface{}{ + "enbType": 1, + "servedCells": []interface{}{ + buildServedCell(""), + }} - writer := httptest.NewRecorder() - controller.X2Setup(writer, httpRequest) + if len(propToOmit) != 0 { + delete(ret, propToOmit) + } - assert.Equal(t, http.StatusNoContent, writer.Result().StatusCode) + return ret } -func TestEndcSetupSuccess(t *testing.T) { - - controller, readerMock, writerMock, rmrMessengerMock, _ := setupControllerTest(t) +func buildGlobalNbId(propToOmit string) map[string]interface{} { + ret := map[string]interface{}{ + "plmnId": "whatever", + "nbId": "whatever2", + } - ranName := "test" - nb := &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST, AssociatedE2TInstanceAddress: "10.0.2.15:8989"} - readerMock.On("GetNodeb", ranName).Return(nb, nil) - var nbUpdated = *nb - writerMock.On("UpdateNodebInfo", &nbUpdated).Return(nil) + if len(propToOmit) != 0 { + delete(ret, propToOmit) + } - var nbUpdated2 = &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST, AssociatedE2TInstanceAddress: "10.0.2.15:8989"} - writerMock.On("UpdateNodebInfo", nbUpdated2).Return(nil) + return ret +} - payload := e2pdus.PackedEndcX2setupRequest - var xAction []byte - var msgSrc unsafe.Pointer - msg := rmrCgo.NewMBuf(rmrCgo.RIC_ENDC_X2_SETUP_REQ, len(payload), ranName, &payload, &xAction, msgSrc) +func setupControllerTest(t *testing.T) (*NodebController, *mocks.RnibReaderMock, *mocks.RnibWriterMock, *mocks.RmrMessengerMock, *mocks.E2TInstancesManagerMock) { + log := initLog(t) + config := configuration.ParseConfiguration() - rmrMessengerMock.On("SendMsg", mock.Anything, true).Return(msg, nil) + rmrMessengerMock := &mocks.RmrMessengerMock{} + readerMock := &mocks.RnibReaderMock{} - header := http.Header{} - header.Set("Content-Type", "application/json") - httpRequest := tests.GetHttpRequest() - httpRequest.Header = header + writerMock := &mocks.RnibWriterMock{} - writer := httptest.NewRecorder() - controller.EndcSetup(writer, httpRequest) + rnibDataService := services.NewRnibDataService(log, config, readerMock, writerMock) + rmrSender := getRmrSender(rmrMessengerMock, log) + 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) + nodebValidator := managers.NewNodebValidator() + updateEnbManager := managers.NewUpdateEnbManager(log, rnibDataService, nodebValidator) - assert.Equal(t, http.StatusNoContent, writer.Result().StatusCode) + handlerProvider := httpmsghandlerprovider.NewIncomingRequestHandlerProvider(log, rmrSender, config, rnibDataService, e2tInstancesManager, rmClient, ranConnectStatusChangeManager, nodebValidator, updateEnbManager) + controller := NewNodebController(log, handlerProvider) + return controller, readerMock, writerMock, rmrMessengerMock, e2tInstancesManager } func TestShutdownHandlerRnibError(t *testing.T) { @@ -300,7 +312,7 @@ func TestSetGeneralConfigurationInvalidJson(t *testing.T) { writer := httptest.NewRecorder() - httpRequest, _ := http.NewRequest("PUT", "https://localhost:3800/v1/nodeb/parameters", strings.NewReader("{}{}")) + httpRequest, _ := http.NewRequest("PUT", "https://localhost:3800/v1/nodeb/parameters", strings.NewReader("{\"enableRic\":false, \"someValue\":false}")) controller.SetGeneralConfiguration(writer, httpRequest) @@ -358,29 +370,40 @@ func assertControllerUpdateGnb(t *testing.T, context *controllerUpdateGnbTestCon assert.Equal(t, context.expectedJsonResponse, string(bodyBytes)) readerMock.AssertExpectations(t) writerMock.AssertExpectations(t) +} - if context.getNodebInfoResult != nil { - readerMock.AssertNotCalled(t, "GetNodeb") - } - - if context.updateGnbCellsParams != nil { - writerMock.AssertNotCalled(t, "UpdateGnb") - } +func assertControllerAddEnb(t *testing.T, context *controllerAddEnbTestContext, writer *httptest.ResponseRecorder, readerMock *mocks.RnibReaderMock, writerMock *mocks.RnibWriterMock) { + assert.Equal(t, context.expectedStatusCode, writer.Result().StatusCode) + bodyBytes, _ := ioutil.ReadAll(writer.Body) + assert.Equal(t, context.expectedJsonResponse, string(bodyBytes)) + readerMock.AssertExpectations(t) + writerMock.AssertExpectations(t) +} - if context.removeServedNrCellsParams != nil { - writerMock.AssertNotCalled(t, "RemoveServedNrCells") - } +func assertControllerDeleteEnb(t *testing.T, context *controllerDeleteEnbTestContext, writer *httptest.ResponseRecorder, readerMock *mocks.RnibReaderMock, writerMock *mocks.RnibWriterMock) { + assert.Equal(t, context.expectedStatusCode, writer.Result().StatusCode) + bodyBytes, _ := ioutil.ReadAll(writer.Body) + assert.Equal(t, context.expectedJsonResponse, string(bodyBytes)) + readerMock.AssertExpectations(t) + writerMock.AssertExpectations(t) } func buildUpdateGnbRequest(context *controllerUpdateGnbTestContext) *http.Request { updateGnbUrl := fmt.Sprintf("/nodeb/%s/update", RanName) requestBody := getJsonRequestAsBuffer(context.requestBody) - req, _ := http.NewRequest(http.MethodGet, updateGnbUrl, requestBody) + req, _ := http.NewRequest(http.MethodPut, updateGnbUrl, requestBody) req.Header.Set("Content-Type", "application/json") req = mux.SetURLVars(req, map[string]string{"ranName": RanName}) return req } +func buildAddEnbRequest(context *controllerAddEnbTestContext) *http.Request { + requestBody := getJsonRequestAsBuffer(context.requestBody) + req, _ := http.NewRequest(http.MethodPost, AddEnbUrl, requestBody) + req.Header.Set("Content-Type", "application/json") + return req +} + func controllerUpdateGnbTestExecuter(t *testing.T, context *controllerUpdateGnbTestContext) { controller, readerMock, writerMock, _, _ := setupControllerTest(t) writer := httptest.NewRecorder() @@ -391,6 +414,58 @@ func controllerUpdateGnbTestExecuter(t *testing.T, context *controllerUpdateGnbT assertControllerUpdateGnb(t, context, writer, readerMock, writerMock) } +func activateControllerAddEnbMocks(context *controllerAddEnbTestContext, readerMock *mocks.RnibReaderMock, writerMock *mocks.RnibWriterMock, addEnbRequest *models.AddEnbRequest) { + if context.getNodebInfoResult != nil { + readerMock.On("GetNodeb", RanName).Return(context.getNodebInfoResult.nodebInfo, context.getNodebInfoResult.rnibError) + } + + if context.saveNodebParams != nil { + nodebInfo := entities.NodebInfo{ + 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, + } + + nbIdentity := entities.NbIdentity{InventoryName: addEnbRequest.RanName, GlobalNbId: addEnbRequest.GlobalNbId} + + writerMock.On("SaveNodeb", &nbIdentity, &nodebInfo).Return(context.saveNodebParams.err) + } +} + +func controllerAddEnbTestExecuter(t *testing.T, context *controllerAddEnbTestContext) { + controller, readerMock, writerMock, _, _ := setupControllerTest(t) + writer := httptest.NewRecorder() + r := buildAddEnbRequest(context) + body, _ := ioutil.ReadAll(io.LimitReader(r.Body, LimitRequest)) + + addEnbRequest := models.AddEnbRequest{} + + _ = json.Unmarshal(body, &addEnbRequest) + activateControllerAddEnbMocks(context, readerMock, writerMock, &addEnbRequest) + r = buildAddEnbRequest(context) + defer r.Body.Close() + controller.AddEnb(writer, r) + assertControllerAddEnb(t, context, writer, readerMock, writerMock) +} + +func controllerDeleteEnbTestExecuter(t *testing.T, context *controllerDeleteEnbTestContext) { + 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) + } + writer := httptest.NewRecorder() + r, _ := http.NewRequest(http.MethodDelete, AddEnbUrl+"/"+RanName, nil) + r.Header.Set("Content-Type", "application/json") + r = mux.SetURLVars(r, map[string]string{"ranName": RanName}) + controller.DeleteEnb(writer, r) + assertControllerDeleteEnb(t, context, writer, readerMock, writerMock) +} + func TestControllerUpdateGnbEmptyServedNrCells(t *testing.T) { context := controllerUpdateGnbTestContext{ getNodebInfoResult: nil, @@ -677,6 +752,216 @@ 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{ + 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(""), + }, + }, + }, + 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\"}]}}", + } + + controllerAddEnbTestExecuter(t, &context) +} + +func TestControllerDeleteEnbGetNodebInternalError(t *testing.T) { + context := controllerDeleteEnbTestContext{ + getNodebInfoResult: &getNodebInfoResult{ + nodebInfo: nil, + rnibError: common.NewInternalError(errors.New("#reader.GetNodeb - Internal Error")), + }, + expectedStatusCode: http.StatusInternalServerError, + expectedJsonResponse: RnibErrorJson, + } + + controllerDeleteEnbTestExecuter(t, &context) +} + +func TestControllerDeleteEnbNodebNotExistsFailure(t *testing.T) { + context := controllerDeleteEnbTestContext{ + getNodebInfoResult: &getNodebInfoResult{ + nodebInfo: nil, + rnibError: common.NewResourceNotFoundError("#reader.GetNodeb - Not found"), + }, + expectedStatusCode: http.StatusNotFound, + expectedJsonResponse: ResourceNotFoundJson, + } + + controllerDeleteEnbTestExecuter(t, &context) +} + +func TestControllerDeleteEnbNodebNotEnb(t *testing.T) { + context := controllerDeleteEnbTestContext{ + getNodebInfoResult: &getNodebInfoResult{ + nodebInfo: &entities.NodebInfo{RanName: "ran1", NodeType: entities.Node_GNB, ConnectionStatus: entities.ConnectionStatus_DISCONNECTED}, + rnibError: nil, + }, + expectedStatusCode: http.StatusBadRequest, + expectedJsonResponse: ValidationFailureJson, + } + + controllerDeleteEnbTestExecuter(t, &context) +} + +func TestControllerDeleteEnbSuccess(t *testing.T) { + context := controllerDeleteEnbTestContext{ + getNodebInfoResult: &getNodebInfoResult{ + nodebInfo: &entities.NodebInfo{RanName: "ran1", NodeType: entities.Node_ENB, ConnectionStatus: entities.ConnectionStatus_DISCONNECTED}, + rnibError: nil, + }, + expectedStatusCode: http.StatusNoContent, + expectedJsonResponse: "", + } + controllerDeleteEnbTestExecuter(t, &context) +} + func getJsonRequestAsBuffer(requestJson map[string]interface{}) *bytes.Buffer { b := new(bytes.Buffer) _ = json.NewEncoder(b).Encode(requestJson) @@ -745,7 +1030,7 @@ func TestControllerGetNodebIdListSuccess(t *testing.T) { func TestControllerGetNodebIdListEmptySuccess(t *testing.T) { var rnibError error - nodebIdList := []*entities.NbIdentity{} + var nodebIdList []*entities.NbIdentity context := controllerGetNodebIdListTestContext{ nodebIdList: nodebIdList, @@ -776,7 +1061,7 @@ func TestHeaderValidationFailed(t *testing.T) { header := &http.Header{} - controller.handleRequest(writer, header, httpmsghandlerprovider.ShutdownRequest, nil, true) + controller.handleRequest(writer, header, httpmsghandlerprovider.ShutdownRequest, nil, true, 0) var errorResponse = parseJsonRequest(t, writer.Body) err := e2managererrors.NewHeaderValidationError() @@ -925,12 +1210,13 @@ func TestX2ResetHandleSuccessfulRequestedDefault(t *testing.T) { // no body b := new(bytes.Buffer) + data4Req := map[string]interface{}{} + _ = json.NewEncoder(b).Encode(data4Req) req, _ := http.NewRequest("PUT", "https://localhost:3800/nodeb-reset", b) req = mux.SetURLVars(req, map[string]string{"ranName": ranName}) controller.X2Reset(writer, req) assert.Equal(t, http.StatusNoContent, writer.Result().StatusCode) - } func TestX2ResetHandleFailureInvalidBody(t *testing.T) {