X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=E2Manager%2Fcontrollers%2Fnodeb_controller_test.go;h=cd22cc6d6050b726c9d15121ced2d154ef4da329;hb=0234dab067e255d03eddc5c49c18cef4834546f7;hp=1b3a7db0f2cd4dc1ec98055cbceeb00f82406bf9;hpb=78b376831653b270b743dfccd375e154a4c7a1a7;p=ric-plt%2Fe2mgr.git diff --git a/E2Manager/controllers/nodeb_controller_test.go b/E2Manager/controllers/nodeb_controller_test.go index 1b3a7db..cd22cc6 100644 --- a/E2Manager/controllers/nodeb_controller_test.go +++ b/E2Manager/controllers/nodeb_controller_test.go @@ -1,6 +1,7 @@ // // Copyright 2019 AT&T Intellectual Property // Copyright 2019 Nokia +// Copyright (c) 2020 Samsung Electronics Co., Ltd. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -160,9 +161,7 @@ func generateServedNrCells(cellIds ...string) []*entities.ServedNRCell { servedNrCells = append(servedNrCells, &entities.ServedNRCell{ServedNrCellInformation: &entities.ServedNRCellInformation{ CellId: v, ChoiceNrMode: &entities.ServedNRCellInformation_ChoiceNRMode{ - Fdd: &entities.ServedNRCellInformation_ChoiceNRMode_FddInfo{ - - }, + Fdd: &entities.ServedNRCellInformation_ChoiceNRMode_FddInfo{}, }, NrMode: entities.Nr_FDD, NrPci: 5, @@ -446,6 +445,11 @@ func activateControllerUpdateEnbMocks(context *controllerUpdateEnbTestContext, r if context.updateEnbCellsParams != nil { updatedNodebInfo := *context.getNodebInfoResult.nodebInfo + + if context.getNodebInfoResult.nodebInfo.SetupFromNetwork { + updateEnbRequest.Enb.EnbType = context.getNodebInfoResult.nodebInfo.GetEnb().EnbType + } + updatedNodebInfo.Configuration = &entities.NodebInfo_Enb{Enb: updateEnbRequest.Enb} writerMock.On("UpdateEnb", &updatedNodebInfo, updateEnbRequest.Enb.ServedCells).Return(context.updateEnbCellsParams.err) @@ -601,7 +605,8 @@ func controllerAddEnbTestExecuter(t *testing.T, context *controllerAddEnbTestCon func controllerDeleteEnbTestExecuter(t *testing.T, context *controllerDeleteEnbTestContext, preAddNbIdentity bool) { controller, readerMock, writerMock, nbIdentity := setupDeleteEnbControllerTest(t, preAddNbIdentity) readerMock.On("GetNodeb", RanName).Return(context.getNodebInfoResult.nodebInfo, context.getNodebInfoResult.rnibError) - if context.getNodebInfoResult.rnibError == nil && context.getNodebInfoResult.nodebInfo.GetNodeType() == entities.Node_ENB { + if context.getNodebInfoResult.rnibError == nil && context.getNodebInfoResult.nodebInfo.GetNodeType() == entities.Node_ENB && + !context.getNodebInfoResult.nodebInfo.SetupFromNetwork { writerMock.On("RemoveEnb", context.getNodebInfoResult.nodebInfo).Return(nil) if preAddNbIdentity { writerMock.On("RemoveNbIdentity", entities.Node_ENB, nbIdentity).Return(nil) @@ -625,8 +630,7 @@ func TestControllerUpdateGnbEmptyServedNrCells(t *testing.T) { context := controllerUpdateGnbTestContext{ getNodebInfoResult: nil, requestBody: map[string]interface{}{ - "servedNrCells": []interface{}{ - }, + "servedNrCells": []interface{}{}, }, expectedStatusCode: http.StatusBadRequest, expectedJsonResponse: ValidationFailureJson, @@ -1157,8 +1161,38 @@ func TestControllerUpdateEnbExistingEmptyCellsSuccess(t *testing.T) { controllerUpdateEnbTestExecuter(t, &context) } +func TestControllerUpdateEnbNgEnbFailure(t *testing.T) { + + requestBody := map[string]interface{}{ + "enb": map[string]interface{}{ + "enbType": 3, + "servedCells": []interface{}{ + buildServedCell(""), + }}, + } + + oldServedCells := generateServedCells("whatever1", "whatever2") + + context := controllerUpdateEnbTestContext{ + getNodebInfoResult: &getNodebInfoResult{ + nodebInfo: &entities.NodebInfo{ + RanName: RanName, + ConnectionStatus: entities.ConnectionStatus_CONNECTED, + AssociatedE2TInstanceAddress: AssociatedE2TInstanceAddress, + NodeType: entities.Node_ENB, + Configuration: &entities.NodebInfo_Enb{Enb: &entities.Enb{ServedCells: oldServedCells, EnbType: entities.EnbType_MACRO_NG_ENB}}, + }, + rnibError: nil, + }, + requestBody: requestBody, + expectedStatusCode: http.StatusBadRequest, + expectedJsonResponse: ValidationFailureJson, + } + + controllerUpdateEnbTestExecuter(t, &context) +} -func TestControllerUpdateEnbSuccess(t *testing.T) { +func TestControllerUpdateEnbSuccessSetupFromNwFalse(t *testing.T) { oldServedCells := generateServedCells("whatever1", "whatever2") context := controllerUpdateEnbTestContext{ removeServedCellsParams: &removeServedCellsParams{ @@ -1174,7 +1208,7 @@ func TestControllerUpdateEnbSuccess(t *testing.T) { ConnectionStatus: entities.ConnectionStatus_CONNECTED, AssociatedE2TInstanceAddress: AssociatedE2TInstanceAddress, NodeType: entities.Node_ENB, - Configuration: &entities.NodebInfo_Enb{Enb: &entities.Enb{ServedCells: oldServedCells, EnbType: entities.EnbType_MACRO_ENB}}, + Configuration: &entities.NodebInfo_Enb{Enb: &entities.Enb{ServedCells: oldServedCells, EnbType: entities.EnbType_LONG_MACRO_ENB}}, }, rnibError: nil, }, @@ -1186,6 +1220,35 @@ func TestControllerUpdateEnbSuccess(t *testing.T) { controllerUpdateEnbTestExecuter(t, &context) } +func TestControllerUpdateEnbSuccessSetupFromNwTrue(t *testing.T) { + oldServedCells := generateServedCells("whatever1", "whatever2") + context := controllerUpdateEnbTestContext{ + removeServedCellsParams: &removeServedCellsParams{ + err: nil, + servedCellInfo: oldServedCells, + }, + updateEnbCellsParams: &updateEnbCellsParams{ + err: nil, + }, + getNodebInfoResult: &getNodebInfoResult{ + nodebInfo: &entities.NodebInfo{ + RanName: RanName, + ConnectionStatus: entities.ConnectionStatus_CONNECTED, + AssociatedE2TInstanceAddress: AssociatedE2TInstanceAddress, + NodeType: entities.Node_ENB, + Configuration: &entities.NodebInfo_Enb{Enb: &entities.Enb{ServedCells: oldServedCells, EnbType: entities.EnbType_LONG_MACRO_ENB}}, + SetupFromNetwork: true, + }, + rnibError: nil, + }, + requestBody: getUpdateEnbRequest(""), + expectedStatusCode: http.StatusOK, + expectedJsonResponse: "{\"ranName\":\"test\",\"connectionStatus\":\"CONNECTED\",\"nodeType\":\"ENB\",\"enb\":{\"enbType\":\"LONG_MACRO_ENB\",\"servedCells\":[{\"pci\":1,\"cellId\":\"whatever\",\"tac\":\"whatever3\",\"broadcastPlmns\":[\"whatever\"],\"choiceEutraMode\":{\"fdd\":{}},\"eutraMode\":\"FDD\"}]},\"associatedE2tInstanceAddress\":\"10.0.2.15:38000\",\"setupFromNetwork\":true}", + } + + controllerUpdateEnbTestExecuter(t, &context) +} + /* AddEnb UTs */ @@ -1340,6 +1403,28 @@ func TestControllerAddEnbMissingRequiredServedCellProps(t *testing.T) { } } +func TestControllerAddEnbNgEnbFailure(t *testing.T) { + + requestBody := map[string]interface{}{ + "ranName": RanName, + "globalNbId": buildGlobalNbId(""), + "enb": map[string]interface{}{ + "enbType": 5, + "servedCells": []interface{}{ + buildServedCell(""), + }, + }, + } + + context := controllerAddEnbTestContext{ + requestBody: requestBody, + expectedStatusCode: http.StatusBadRequest, + expectedJsonResponse: ValidationFailureJson, + } + + controllerAddEnbTestExecuter(t, &context) +} + func TestControllerAddEnbSuccess(t *testing.T) { context := controllerAddEnbTestContext{ addEnbParams: &addEnbParams{ @@ -1403,6 +1488,18 @@ func TestControllerDeleteEnbNodebNotEnb(t *testing.T) { controllerDeleteEnbTestExecuter(t, &context, false) } +func TestControllerDeleteEnbSetupFromNetworkTrueFailure(t *testing.T) { + context := controllerDeleteEnbTestContext{ + getNodebInfoResult: &getNodebInfoResult{ + nodebInfo: &entities.NodebInfo{RanName: RanName, NodeType: entities.Node_ENB, ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, SetupFromNetwork: true}, + rnibError: nil, + }, + expectedStatusCode: http.StatusBadRequest, + expectedJsonResponse: ValidationFailureJson, + } + controllerDeleteEnbTestExecuter(t, &context, true) +} + func TestControllerDeleteEnbSuccess(t *testing.T) { context := controllerDeleteEnbTestContext{ getNodebInfoResult: &getNodebInfoResult{ @@ -1664,6 +1761,21 @@ func TestX2ResetHandleSuccessfulRequestedDefault(t *testing.T) { assert.Equal(t, http.StatusNoContent, writer.Result().StatusCode) } +func TestX2ResetHandleFailureBodyReadError(t *testing.T) { + controller, _, _, _, _, _ := setupControllerTest(t) + + ranName := "test1" + writer := httptest.NewRecorder() + + // Fake reader to return reading error. + req, _ := http.NewRequest("PUT", "https://localhost:3800/nodeb-reset", errReader(0)) + req = mux.SetURLVars(req, map[string]string{"ranName": ranName}) + + controller.X2Reset(writer, req) + assert.Equal(t, http.StatusBadRequest, writer.Result().StatusCode) + +} + func TestX2ResetHandleFailureInvalidBody(t *testing.T) { controller, _, _, _, _, _ := setupControllerTest(t) @@ -1681,6 +1793,34 @@ func TestX2ResetHandleFailureInvalidBody(t *testing.T) { } +/* +func TestControllerHealthCheckRequestSuccess(t *testing.T) { + controller, readerMock, _, rmrMessengerMock, _, _ := setupControllerTest(t) + + ranName := "test1" + // o&m intervention + payload := []byte{0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x05, 0x40, 0x01, 0x64} + var xAction []byte + var msgSrc unsafe.Pointer + msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_RESET, len(payload), ranName, &payload, &xAction, msgSrc) + rmrMessengerMock.On("SendMsg", msg, true).Return(msg, nil) + + writer := httptest.NewRecorder() + + var nodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED} + readerMock.On("GetNodeb", ranName).Return(nodeb, nil) + + data4Req := map[string]interface{}{"ranList": []string{"abcd"}} + b := new(bytes.Buffer) + _ = json.NewEncoder(b).Encode(data4Req) + req, _ := http.NewRequest("PUT", "https://localhost:3800/v1/nodeb/health", b) + req = mux.SetURLVars(req, map[string]string{"ranName": ranName}) + + controller.HealthCheckRequest(writer, req) + assert.Equal(t, http.StatusNoContent, writer.Result().StatusCode) +} +*/ + func TestHandleErrorResponse(t *testing.T) { controller, _, _, _, _, _ := setupControllerTest(t) @@ -1708,6 +1848,10 @@ func TestHandleErrorResponse(t *testing.T) { controller.handleErrorResponse(e2managererrors.NewRmrError(), writer) assert.Equal(t, http.StatusInternalServerError, writer.Result().StatusCode) + writer = httptest.NewRecorder() + controller.handleErrorResponse(e2managererrors.NewNoConnectedRanError(), writer) + assert.Equal(t, http.StatusNotFound, writer.Result().StatusCode) + writer = httptest.NewRecorder() controller.handleErrorResponse(e2managererrors.NewResourceNotFoundError(), writer) assert.Equal(t, http.StatusNotFound, writer.Result().StatusCode) @@ -1722,3 +1866,9 @@ func getRmrSender(rmrMessengerMock *mocks.RmrMessengerMock, log *logger.Logger) rmrMessengerMock.On("Init", tests.GetPort(), tests.MaxMsgSize, tests.Flags, log).Return(&rmrMessenger) return rmrsender.NewRmrSender(log, rmrMessenger) } + +type errReader int + +func (errReader) Read(p []byte) (n int, err error) { + return 0, errors.New("test error") +}