//
// 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.
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,
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)
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)
context := controllerUpdateGnbTestContext{
getNodebInfoResult: nil,
requestBody: map[string]interface{}{
- "servedNrCells": []interface{}{
- },
+ "servedNrCells": []interface{}{},
},
expectedStatusCode: http.StatusBadRequest,
expectedJsonResponse: ValidationFailureJson,
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{
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,
},
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
*/
}
}
+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{
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{
}
func initLog(t *testing.T) *logger.Logger {
- log, err := logger.InitLogger(logger.InfoLevel)
+ InfoLevel := int8(3)
+ log, err := logger.InitLogger(InfoLevel)
if err != nil {
t.Errorf("#delete_all_request_handler_test.TestHandleSuccessFlow - failed to initialize logger, error: %s", err)
}
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)
}
+/*
+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)
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)
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")
+}