From: Shuky Har-Noy Date: Wed, 17 Jun 2020 13:08:49 +0000 (+0000) Subject: Merge "[RIC-395] - E2M new REST API - E2M Set Parameters - Automation + Decoder" X-Git-Tag: R5_RC~71 X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=commitdiff_plain;h=67b5aa5e2f37db23fb7d1c086e9c540a61f43917;hp=-c;p=ric-plt%2Fe2mgr.git Merge "[RIC-395] - E2M new REST API - E2M Set Parameters - Automation + Decoder" --- 67b5aa5e2f37db23fb7d1c086e9c540a61f43917 diff --combined E2Manager/controllers/nodeb_controller.go index 45fdb3f,cef57f9..5bc2a2c --- a/E2Manager/controllers/nodeb_controller.go +++ b/E2Manager/controllers/nodeb_controller.go @@@ -46,6 -46,8 +46,6 @@@ const ContentType = "Content-Type type INodebController interface { Shutdown(writer http.ResponseWriter, r *http.Request) X2Reset(writer http.ResponseWriter, r *http.Request) - X2Setup(writer http.ResponseWriter, r *http.Request) - EndcSetup(writer http.ResponseWriter, r *http.Request) GetNodeb(writer http.ResponseWriter, r *http.Request) UpdateGnb(writer http.ResponseWriter, r *http.Request) GetNodebIdList(writer http.ResponseWriter, r *http.Request) @@@ -101,7 -103,7 +101,7 @@@ func (c *NodebController) SetGeneralCon request := models.GeneralConfigurationRequest{} - if !c.extractJsonBody(r, &request, writer){ + if !c.extractJsonBodyDisallowUnknownFields(r, &request, writer){ return } c.handleRequest(writer, &r.Header, httpmsghandlerprovider.SetGeneralConfigurationRequest, request, false) @@@ -125,6 -127,30 +125,6 @@@ func (c *NodebController) X2Reset(write c.handleRequest(writer, &r.Header, httpmsghandlerprovider.ResetRequest, request, false) } -func (c *NodebController) X2Setup(writer http.ResponseWriter, r *http.Request) { - c.logger.Infof("[Client -> E2 Manager] #NodebController.X2Setup - request: %v", c.prettifyRequest(r)) - - request := models.SetupRequest{} - - if !c.extractJsonBody(r, &request, writer) { - return - } - - c.handleRequest(writer, &r.Header, httpmsghandlerprovider.X2SetupRequest, request, true) -} - -func (c *NodebController) EndcSetup(writer http.ResponseWriter, r *http.Request) { - c.logger.Infof("[Client -> E2 Manager] #NodebController.EndcSetup - request: %v", c.prettifyRequest(r)) - - request := models.SetupRequest{} - - if !c.extractJsonBody(r, &request, writer) { - return - } - - c.handleRequest(writer, &r.Header, httpmsghandlerprovider.EndcSetupRequest, request, true) -} - func (c *NodebController) extractRequestBodyToProto(r *http.Request, pb proto.Message , writer http.ResponseWriter) bool { defer r.Body.Close() @@@ -139,6 -165,21 +139,21 @@@ return true } + func (c *NodebController) extractJsonBodyDisallowUnknownFields(r *http.Request, request models.Request, writer http.ResponseWriter) bool { + defer r.Body.Close() + + decoder := json.NewDecoder(r.Body) + decoder.DisallowUnknownFields() + + if err := decoder.Decode(&request); err != nil { + c.logger.Errorf("[Client -> E2 Manager] #NodebController.extractJsonBody - unable to extract json body - error: %s", err) + c.handleErrorResponse(e2managererrors.NewInvalidJsonError(), writer) + return false + } + + return true + } + func (c *NodebController) extractJsonBody(r *http.Request, request models.Request, writer http.ResponseWriter) bool { defer r.Body.Close() body, err := ioutil.ReadAll(io.LimitReader(r.Body, LimitRequest)) diff --combined E2Manager/controllers/nodeb_controller_test.go index 5541517,8209228..d68ac51 --- a/E2Manager/controllers/nodeb_controller_test.go +++ b/E2Manager/controllers/nodeb_controller_test.go @@@ -24,6 -24,7 +24,6 @@@ import "e2mgr/clients" "e2mgr/configuration" "e2mgr/e2managererrors" - "e2mgr/e2pdus" "e2mgr/logger" "e2mgr/managers" "e2mgr/mocks" @@@ -176,16 -177,92 +176,16 @@@ func setupControllerTest(t *testing.T) e2tInstancesManager := &mocks.E2TInstancesManagerMock{} httpClientMock := &mocks.HttpClientMock{} rmClient := clients.NewRoutingManagerClient(log, config, httpClientMock) - e2tAssociationManager := managers.NewE2TAssociationManager(log, rnibDataService, e2tInstancesManager, rmClient) + 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) controller := NewNodebController(log, handlerProvider) return controller, readerMock, writerMock, rmrMessengerMock, e2tInstancesManager } -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) - - var errorResponse = parseJsonRequest(t, writer.Body) - - assert.Equal(t, http.StatusBadRequest, writer.Result().StatusCode) - assert.Equal(t, e2managererrors.NewInvalidJsonError().Code, errorResponse.Code) -} - -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 - - writer := httptest.NewRecorder() - controller.X2Setup(writer, httpRequest) - - assert.Equal(t, http.StatusNoContent, writer.Result().StatusCode) -} - -func TestEndcSetupSuccess(t *testing.T) { - - controller, readerMock, writerMock, rmrMessengerMock, _ := setupControllerTest(t) - - 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) - - 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) - - 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) - - rmrMessengerMock.On("SendMsg", mock.Anything, true).Return(msg, nil) - - header := http.Header{} - header.Set("Content-Type", "application/json") - httpRequest := tests.GetHttpRequest() - httpRequest.Header = header - - writer := httptest.NewRecorder() - controller.EndcSetup(writer, httpRequest) - - assert.Equal(t, http.StatusNoContent, writer.Result().StatusCode) -} - func TestShutdownHandlerRnibError(t *testing.T) { controller, _, _, _, e2tInstancesManagerMock := setupControllerTest(t) e2tInstancesManagerMock.On("GetE2TAddresses").Return([]string{}, e2managererrors.NewRnibDbError()) @@@ -223,7 -300,7 +223,7 @@@ func TestSetGeneralConfigurationInvalid 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)