Merge "[RIC-395] - E2M new REST API - E2M Set Parameters - Automation + Decoder"
[ric-plt/e2mgr.git] / E2Manager / controllers / nodeb_controller_test.go
index c61249e..d68ac51 100644 (file)
@@ -24,7 +24,6 @@ import (
        "e2mgr/clients"
        "e2mgr/configuration"
        "e2mgr/e2managererrors"
-       "e2mgr/e2pdus"
        "e2mgr/logger"
        "e2mgr/managers"
        "e2mgr/mocks"
@@ -92,16 +91,16 @@ type updateGnbCellsParams struct {
 
 type removeServedNrCellsParams struct {
        servedNrCells []*entities.ServedNRCell
-       err error
+       err           error
 }
 
 type controllerUpdateGnbTestContext struct {
-       getNodebInfoResult   *getNodebInfoResult
+       getNodebInfoResult        *getNodebInfoResult
        removeServedNrCellsParams *removeServedNrCellsParams
-       updateGnbCellsParams *updateGnbCellsParams
-       requestBody          map[string]interface{}
-       expectedStatusCode   int
-       expectedJsonResponse string
+       updateGnbCellsParams      *updateGnbCellsParams
+       requestBody               map[string]interface{}
+       expectedStatusCode        int
+       expectedJsonResponse      string
 }
 
 func generateServedNrCells(cellIds ...string) []*entities.ServedNRCell {
@@ -177,104 +176,61 @@ func setupControllerTest(t *testing.T) (*NodebController, *mocks.RnibReaderMock,
        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
+func TestShutdownHandlerRnibError(t *testing.T) {
+       controller, _, _, _, e2tInstancesManagerMock := setupControllerTest(t)
+       e2tInstancesManagerMock.On("GetE2TAddresses").Return([]string{}, e2managererrors.NewRnibDbError())
 
        writer := httptest.NewRecorder()
-       controller.X2Setup(writer, httpRequest)
+
+       controller.Shutdown(writer, tests.GetHttpRequest())
 
        var errorResponse = parseJsonRequest(t, writer.Body)
 
-       assert.Equal(t, http.StatusBadRequest, writer.Result().StatusCode)
-       assert.Equal(t, e2managererrors.NewInvalidJsonError().Code, errorResponse.Code)
+       assert.Equal(t, http.StatusInternalServerError, writer.Result().StatusCode)
+       assert.Equal(t, errorResponse.Code, e2managererrors.NewRnibDbError().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)
+func TestSetGeneralConfigurationHandlerRnibError(t *testing.T) {
+       controller, readerMock, _, _, _ := setupControllerTest(t)
 
-       header := http.Header{}
-       header.Set("Content-Type", "application/json")
-       httpRequest := tests.GetHttpRequest()
-       httpRequest.Header = header
+       configuration := &entities.GeneralConfiguration{}
+       readerMock.On("GetGeneralConfiguration").Return(configuration, e2managererrors.NewRnibDbError())
 
        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)
+       httpRequest, _ := http.NewRequest("PUT", "https://localhost:3800/v1/nodeb/parameters", strings.NewReader("{\"enableRic\":false}"))
 
-       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)
+       controller.SetGeneralConfiguration(writer, httpRequest)
 
-       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)
+       var errorResponse = parseJsonRequest(t, writer.Body)
 
-       assert.Equal(t, http.StatusNoContent, writer.Result().StatusCode)
+       assert.Equal(t, http.StatusInternalServerError, writer.Result().StatusCode)
+       assert.Equal(t, e2managererrors.NewRnibDbError().Code, errorResponse.Code)
 }
 
-func TestShutdownHandlerRnibError(t *testing.T) {
-       controller, _, _, _, e2tInstancesManagerMock := setupControllerTest(t)
-       e2tInstancesManagerMock.On("GetE2TAddresses").Return([]string{}, e2managererrors.NewRnibDbError())
+func TestSetGeneralConfigurationInvalidJson(t *testing.T) {
+       controller, _, _, _, _ := setupControllerTest(t)
 
        writer := httptest.NewRecorder()
 
-       controller.Shutdown(writer, tests.GetHttpRequest())
+       httpRequest, _ := http.NewRequest("PUT", "https://localhost:3800/v1/nodeb/parameters", strings.NewReader("{\"enableRic\":false, \"someValue\":false}"))
+
+       controller.SetGeneralConfiguration(writer, httpRequest)
 
        var errorResponse = parseJsonRequest(t, writer.Body)
 
-       assert.Equal(t, http.StatusInternalServerError, writer.Result().StatusCode)
-       assert.Equal(t, errorResponse.Code, e2managererrors.NewRnibDbError().Code)
+       assert.Equal(t, http.StatusBadRequest, writer.Result().StatusCode)
+       assert.Equal(t, e2managererrors.NewInvalidJsonError().Code, errorResponse.Code)
 }
 
 func controllerGetNodebTestExecuter(t *testing.T, context *controllerGetNodebTestContext) {
@@ -545,10 +501,10 @@ func TestControllerUpdateGnbGetNodebSuccessInvalidGnbConfiguration(t *testing.T)
 }
 
 func TestControllerUpdateGnbGetNodebSuccessRemoveServedNrCellsFailure(t *testing.T) {
-       oldServedNrCells := generateServedNrCells("whatever1","whatever2")
+       oldServedNrCells := generateServedNrCells("whatever1", "whatever2")
        context := controllerUpdateGnbTestContext{
                removeServedNrCellsParams: &removeServedNrCellsParams{
-                       err: common.NewInternalError(errors.New("#writer.UpdateGnbCells - Internal Error")),
+                       err:           common.NewInternalError(errors.New("#writer.UpdateGnbCells - Internal Error")),
                        servedNrCells: oldServedNrCells,
                },
                getNodebInfoResult: &getNodebInfoResult{
@@ -578,10 +534,10 @@ func TestControllerUpdateGnbGetNodebSuccessRemoveServedNrCellsFailure(t *testing
 }
 
 func TestControllerUpdateGnbGetNodebSuccessUpdateGnbCellsFailure(t *testing.T) {
-       oldServedNrCells := generateServedNrCells("whatever1","whatever2")
+       oldServedNrCells := generateServedNrCells("whatever1", "whatever2")
        context := controllerUpdateGnbTestContext{
                removeServedNrCellsParams: &removeServedNrCellsParams{
-                       err: nil,
+                       err:           nil,
                        servedNrCells: oldServedNrCells,
                },
                updateGnbCellsParams: &updateGnbCellsParams{
@@ -647,7 +603,7 @@ func TestControllerUpdateGnbSuccess(t *testing.T) {
 func getJsonRequestAsBuffer(requestJson map[string]interface{}) *bytes.Buffer {
        b := new(bytes.Buffer)
        _ = json.NewEncoder(b).Encode(requestJson)
-       return b;
+       return b
 }
 
 func TestControllerGetNodebSuccess(t *testing.T) {
@@ -835,7 +791,7 @@ func parseJsonRequest(t *testing.T, r io.Reader) models.ErrorResponse {
        if err != nil {
                t.Errorf("Error cannot deserialize json request")
        }
-       _ =json.Unmarshal(body, &errorResponse)
+       _ = json.Unmarshal(body, &errorResponse)
 
        return errorResponse
 }