Improve unit test coverage
[ric-plt/e2mgr.git] / E2Manager / controllers / nodeb_controller_test.go
index e62e7c0..cd22cc6 100644 (file)
@@ -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,
@@ -631,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,
@@ -1167,14 +1165,25 @@ func TestControllerUpdateEnbNgEnbFailure(t *testing.T) {
 
        requestBody := map[string]interface{}{
                "enb": map[string]interface{}{
-                       "enbType": 5,
+                       "enbType": 3,
                        "servedCells": []interface{}{
                                buildServedCell(""),
                        }},
        }
 
+       oldServedCells := generateServedCells("whatever1", "whatever2")
+
        context := controllerUpdateEnbTestContext{
-               getNodebInfoResult:   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_MACRO_NG_ENB}},
+                       },
+                       rnibError: nil,
+               },
                requestBody:          requestBody,
                expectedStatusCode:   http.StatusBadRequest,
                expectedJsonResponse: ValidationFailureJson,
@@ -1752,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)
 
@@ -1769,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)
 
@@ -1796,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)
@@ -1810,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")
+}