f49cd8cc2b1045f379f364a9dda347003d522136
[ric-plt/e2mgr.git] / E2Manager / controllers / nodeb_controller_test.go
1 //
2 // Copyright 2019 AT&T Intellectual Property
3 // Copyright 2019 Nokia
4 //
5 // Licensed under the Apache License, Version 2.0 (the "License");
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 //      http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17
18 package controllers
19
20 import (
21         "e2mgr/configuration"
22         "e2mgr/logger"
23         "e2mgr/mocks"
24         "e2mgr/models"
25         "e2mgr/rNibWriter"
26         "e2mgr/rmrCgo"
27         "e2mgr/services"
28         "e2mgr/tests"
29         "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
30         "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
31         "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
32         "github.com/gorilla/mux"
33         "github.com/pkg/errors"
34         "github.com/stretchr/testify/assert"
35         "io/ioutil"
36         "net/http"
37         "net/http/httptest"
38         "testing"
39 )
40
41 func setupNodebControllerTest(t *testing.T) (*logger.Logger, services.RNibDataService, *mocks.RnibReaderMock){
42         logger, err := logger.InitLogger(logger.DebugLevel)
43         if err != nil {
44                 t.Errorf("#... - failed to initialize logger, error: %s", err)
45         }
46         config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
47         readerMock := &mocks.RnibReaderMock{}
48         rnibReaderProvider := func() reader.RNibReader {
49                 return readerMock
50         }
51         rnibWriterProvider := func() rNibWriter.RNibWriter {
52                 return &mocks.RnibWriterMock{}
53         }
54         rnibDataService := services.NewRnibDataService(logger, config, rnibReaderProvider, rnibWriterProvider)
55         return logger, rnibDataService, readerMock
56 }
57
58 func TestNewRequestController(t *testing.T) {
59         logger, rnibDataService, _ := setupNodebControllerTest(t)
60         assert.NotNil(t, NewNodebController(logger, &services.RmrService{}, rnibDataService))
61 }
62
63 func TestHandleHealthCheckRequest(t *testing.T) {
64         rc := NewNodebController(nil, nil, nil)
65         writer := httptest.NewRecorder()
66         rc.HandleHealthCheckRequest(writer, nil)
67         assert.Equal(t, writer.Result().StatusCode, http.StatusOK)
68 }
69
70 func getRmrService(rmrMessengerMock *mocks.RmrMessengerMock, log *logger.Logger) *services.RmrService {
71         rmrMessenger := rmrCgo.RmrMessenger(rmrMessengerMock)
72         messageChannel := make(chan *models.NotificationResponse)
73         rmrMessengerMock.On("Init", tests.GetPort(), tests.MaxMsgSize, tests.Flags, log).Return(&rmrMessenger)
74         return services.NewRmrService(services.NewRmrConfig(tests.Port, tests.MaxMsgSize, tests.Flags, log), rmrMessenger, messageChannel)
75 }
76
77 func executeGetNodeb(logger *logger.Logger, writer *httptest.ResponseRecorder, rnibDataService services.RNibDataService) {
78         req, _ := http.NewRequest("GET", "/nodeb", nil)
79         req = mux.SetURLVars(req, map[string]string{"ranName": "testNode"})
80
81         NewNodebController(logger, nil, rnibDataService).GetNodeb(writer, req)
82 }
83
84 func TestNodebController_GetNodeb_Success(t *testing.T) {
85         logger, rnibDataService, rnibReaderMock := setupNodebControllerTest(t)
86
87         writer := httptest.NewRecorder()
88
89
90         var rnibError error
91         rnibReaderMock.On("GetNodeb", "testNode").Return(&entities.NodebInfo{}, rnibError)
92
93         executeGetNodeb(logger, writer, rnibDataService)
94
95         assert.Equal(t, writer.Result().StatusCode, http.StatusOK)
96 }
97
98 func TestNodebController_GetNodeb_NotFound(t *testing.T) {
99         logger, rnibDataService, rnibReaderMock := setupNodebControllerTest(t)
100
101         writer := httptest.NewRecorder()
102
103         rnibError := common.NewResourceNotFoundErrorf("#reader.GetNodeb - responding node %s not found", "testNode")
104         var nodebInfo *entities.NodebInfo
105         rnibReaderMock.On("GetNodeb", "testNode").Return(nodebInfo, rnibError)
106
107         executeGetNodeb(logger, writer, rnibDataService)
108         assert.Equal(t, writer.Result().StatusCode, http.StatusNotFound)
109 }
110
111 func TestNodebController_GetNodeb_InternalError(t *testing.T) {
112         logger, rnibDataService, rnibReaderMock := setupNodebControllerTest(t)
113
114         writer := httptest.NewRecorder()
115
116         rnibError := common.NewInternalError(errors.New("#reader.GetNodeb - Internal Error"))
117         var nodebInfo *entities.NodebInfo
118         rnibReaderMock.On("GetNodeb", "testNode").Return(nodebInfo, rnibError)
119
120         executeGetNodeb(logger, writer, rnibDataService)
121         assert.Equal(t, writer.Result().StatusCode, http.StatusInternalServerError)
122 }
123
124 func executeGetNodebIdList(logger *logger.Logger, writer *httptest.ResponseRecorder, rnibDataService services.RNibDataService) {
125         req, _ := http.NewRequest("GET", "/nodeb-ids", nil)
126         NewNodebController(logger, nil, rnibDataService).GetNodebIdList(writer,req)
127 }
128
129 func TestNodebController_GetNodebIdList_Success(t *testing.T) {
130         logger, rnibDataService, rnibReaderMock := setupNodebControllerTest(t)
131         writer := httptest.NewRecorder()
132
133         var rnibError error
134
135         nbList := []*entities.NbIdentity{
136                 {InventoryName: "test1", GlobalNbId: &entities.GlobalNbId{PlmnId: "plmnId1", NbId: "nbId1"}},
137                 {InventoryName: "test2", GlobalNbId: &entities.GlobalNbId{PlmnId: "plmnId2", NbId: "nbId2"}},
138                 {InventoryName: "test3", GlobalNbId: &entities.GlobalNbId{PlmnId: "", NbId: ""}},
139         }
140         rnibReaderMock.On("GetListNodebIds").Return(nbList, rnibError)
141
142         executeGetNodebIdList(logger, writer, rnibDataService)
143         assert.Equal(t, writer.Result().StatusCode, http.StatusOK)
144         bodyBytes, _ := ioutil.ReadAll(writer.Body)
145         assert.Equal(t, "[{\"inventoryName\":\"test1\",\"globalNbId\":{\"plmnId\":\"plmnId1\",\"nbId\":\"nbId1\"}},{\"inventoryName\":\"test2\",\"globalNbId\":{\"plmnId\":\"plmnId2\",\"nbId\":\"nbId2\"}},{\"inventoryName\":\"test3\",\"globalNbId\":{}}]", string(bodyBytes))
146 }
147
148 func TestNodebController_GetNodebIdList_EmptyList(t *testing.T) {
149         logger, rnibDataService, rnibReaderMock := setupNodebControllerTest(t)
150
151         writer := httptest.NewRecorder()
152
153         var rnibError error
154         nbList := []*entities.NbIdentity{}
155         rnibReaderMock.On("GetListNodebIds").Return(nbList, rnibError)
156
157
158         executeGetNodebIdList(logger, writer, rnibDataService)
159
160         assert.Equal(t, writer.Result().StatusCode, http.StatusOK)
161         bodyBytes, _ := ioutil.ReadAll(writer.Body)
162         assert.Equal(t, "[]", string(bodyBytes))
163 }
164
165 func TestNodebController_GetNodebIdList_InternalError(t *testing.T) {
166         logger, rnibDataService, rnibReaderMock := setupNodebControllerTest(t)
167
168         writer := httptest.NewRecorder()
169
170         rnibError := common.NewInternalError(errors.New("#reader.GetEnbIdList - Internal Error"))
171         var nbList []*entities.NbIdentity
172         rnibReaderMock.On("GetListNodebIds").Return(nbList, rnibError)
173
174         executeGetNodebIdList(logger, writer, rnibDataService)
175         assert.Equal(t, writer.Result().StatusCode, http.StatusInternalServerError)
176 }