2 // Copyright 2019 AT&T Intellectual Property
3 // Copyright 2019 Nokia
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
9 // http://www.apache.org/licenses/LICENSE-2.0
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.
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"
41 func setupNodebControllerTest(t *testing.T) (*logger.Logger, services.RNibDataService, *mocks.RnibReaderMock){
42 logger, err := logger.InitLogger(logger.DebugLevel)
44 t.Errorf("#... - failed to initialize logger, error: %s", err)
46 config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
47 readerMock := &mocks.RnibReaderMock{}
48 rnibReaderProvider := func() reader.RNibReader {
51 rnibWriterProvider := func() rNibWriter.RNibWriter {
52 return &mocks.RnibWriterMock{}
54 rnibDataService := services.NewRnibDataService(logger, config, rnibReaderProvider, rnibWriterProvider)
55 return logger, rnibDataService, readerMock
58 func TestNewRequestController(t *testing.T) {
59 logger, rnibDataService, _ := setupNodebControllerTest(t)
60 assert.NotNil(t, NewNodebController(logger, &services.RmrService{}, rnibDataService))
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)
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)
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"})
81 NewNodebController(logger, nil, rnibDataService).GetNodeb(writer, req)
84 func TestNodebController_GetNodeb_Success(t *testing.T) {
85 logger, rnibDataService, rnibReaderMock := setupNodebControllerTest(t)
87 writer := httptest.NewRecorder()
91 rnibReaderMock.On("GetNodeb", "testNode").Return(&entities.NodebInfo{}, rnibError)
93 executeGetNodeb(logger, writer, rnibDataService)
95 assert.Equal(t, writer.Result().StatusCode, http.StatusOK)
98 func TestNodebController_GetNodeb_NotFound(t *testing.T) {
99 logger, rnibDataService, rnibReaderMock := setupNodebControllerTest(t)
101 writer := httptest.NewRecorder()
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)
107 executeGetNodeb(logger, writer, rnibDataService)
108 assert.Equal(t, writer.Result().StatusCode, http.StatusNotFound)
111 func TestNodebController_GetNodeb_InternalError(t *testing.T) {
112 logger, rnibDataService, rnibReaderMock := setupNodebControllerTest(t)
114 writer := httptest.NewRecorder()
116 rnibError := common.NewInternalError(errors.New("#reader.GetNodeb - Internal Error"))
117 var nodebInfo *entities.NodebInfo
118 rnibReaderMock.On("GetNodeb", "testNode").Return(nodebInfo, rnibError)
120 executeGetNodeb(logger, writer, rnibDataService)
121 assert.Equal(t, writer.Result().StatusCode, http.StatusInternalServerError)
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)
129 func TestNodebController_GetNodebIdList_Success(t *testing.T) {
130 logger, rnibDataService, rnibReaderMock := setupNodebControllerTest(t)
131 writer := httptest.NewRecorder()
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: ""}},
140 rnibReaderMock.On("GetListNodebIds").Return(nbList, rnibError)
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))
148 func TestNodebController_GetNodebIdList_EmptyList(t *testing.T) {
149 logger, rnibDataService, rnibReaderMock := setupNodebControllerTest(t)
151 writer := httptest.NewRecorder()
154 nbList := []*entities.NbIdentity{}
155 rnibReaderMock.On("GetListNodebIds").Return(nbList, rnibError)
158 executeGetNodebIdList(logger, writer, rnibDataService)
160 assert.Equal(t, writer.Result().StatusCode, http.StatusOK)
161 bodyBytes, _ := ioutil.ReadAll(writer.Body)
162 assert.Equal(t, "[]", string(bodyBytes))
165 func TestNodebController_GetNodebIdList_InternalError(t *testing.T) {
166 logger, rnibDataService, rnibReaderMock := setupNodebControllerTest(t)
168 writer := httptest.NewRecorder()
170 rnibError := common.NewInternalError(errors.New("#reader.GetEnbIdList - Internal Error"))
171 var nbList []*entities.NbIdentity
172 rnibReaderMock.On("GetListNodebIds").Return(nbList, rnibError)
174 executeGetNodebIdList(logger, writer, rnibDataService)
175 assert.Equal(t, writer.Result().StatusCode, http.StatusInternalServerError)