[RIC-432] - Support Update eNB REST API.
[ric-plt/e2mgr.git] / E2Manager / controllers / nodeb_controller_test.go
index c63d36b..7ee44d7 100644 (file)
@@ -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\"}"
@@ -66,6 +67,7 @@ var (
        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"}
 )
@@ -203,12 +205,9 @@ func buildServedCell(propToOmit string) map[string]interface{} {
 
 func getAddEnbRequest(propToOmit string) map[string]interface{} {
        ret := map[string]interface{}{
-               "ranName": RanName,
-               "globalNbId": map[string]interface{}{
-                       "plmnId": "whatever",
-                       "nbId":   "whatever2",
-               },
-               "enb": buildEnb(""),
+               "ranName":    RanName,
+               "globalNbId": buildGlobalNbId(""),
+               "enb":        buildEnb(""),
        }
 
        if len(propToOmit) != 0 {
@@ -232,6 +231,19 @@ func buildEnb(propToOmit string) map[string]interface{} {
        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()
@@ -250,7 +262,9 @@ func setupControllerTest(t *testing.T) (*NodebController, *mocks.RnibReaderMock,
        ranAlarmService := &mocks.RanAlarmServiceMock{}
        ranConnectStatusChangeManager := managers.NewRanConnectStatusChangeManager(log, rnibDataService, ranListManager, ranAlarmService)
        nodebValidator := managers.NewNodebValidator()
-       handlerProvider := httpmsghandlerprovider.NewIncomingRequestHandlerProvider(log, rmrSender, config, rnibDataService, e2tInstancesManager, rmClient, ranConnectStatusChangeManager, nodebValidator)
+       updateEnbManager := managers.NewUpdateEnbManager(log, rnibDataService, nodebValidator)
+
+       handlerProvider := httpmsghandlerprovider.NewIncomingRequestHandlerProvider(log, rmrSender, config, rnibDataService, e2tInstancesManager, rmClient, ranConnectStatusChangeManager, nodebValidator, updateEnbManager)
        controller := NewNodebController(log, handlerProvider)
        return controller, readerMock, writerMock, rmrMessengerMock, e2tInstancesManager
 }
@@ -396,6 +410,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,
@@ -767,6 +782,38 @@ func TestControllerAddEnbMissingRequiredRequestProps(t *testing.T) {
        }
 }
 
+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("")
@@ -830,7 +877,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)
@@ -904,7 +951,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,