[RICPLT-2146] Remove E2Sessions......
[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/logger"
22         "e2mgr/mocks"
23         "e2mgr/models"
24         "e2mgr/rNibWriter"
25         "e2mgr/rmrCgo"
26         "e2mgr/services"
27         "e2mgr/tests"
28         "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
29         "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
30         "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
31         "github.com/gorilla/mux"
32         "github.com/pkg/errors"
33         "github.com/stretchr/testify/assert"
34         "io/ioutil"
35         "net/http"
36         "net/http/httptest"
37         "testing"
38 )
39
40 func TestNewRequestController(t *testing.T) {
41         rnibReaderProvider := func() reader.RNibReader {
42                 return &mocks.RnibReaderMock{}
43         }
44         rnibWriterProvider := func() rNibWriter.RNibWriter {
45                 return &mocks.RnibWriterMock{}
46         }
47
48         assert.NotNil(t, NewNodebController(&logger.Logger{}, &services.RmrService{}, rnibReaderProvider, rnibWriterProvider))
49 }
50
51 func TestHandleHealthCheckRequest(t *testing.T) {
52         rc := NewNodebController(nil, nil, nil, nil)
53         writer := httptest.NewRecorder()
54         rc.HandleHealthCheckRequest(writer, nil)
55         assert.Equal(t, writer.Result().StatusCode, http.StatusOK)
56 }
57
58 func getRmrService(rmrMessengerMock *mocks.RmrMessengerMock, log *logger.Logger) *services.RmrService {
59         rmrMessenger := rmrCgo.RmrMessenger(rmrMessengerMock)
60         messageChannel := make(chan *models.NotificationResponse)
61         rmrMessengerMock.On("Init", tests.GetPort(), tests.MaxMsgSize, tests.Flags, log).Return(&rmrMessenger)
62         return services.NewRmrService(services.NewRmrConfig(tests.Port, tests.MaxMsgSize, tests.Flags, log), rmrMessenger, messageChannel)
63 }
64
65 func executeGetNodeb(logger *logger.Logger, writer *httptest.ResponseRecorder, rnibReaderProvider func() reader.RNibReader) {
66         req, _ := http.NewRequest("GET", "/nodeb", nil)
67         req = mux.SetURLVars(req, map[string]string{"ranName": "testNode"})
68
69         NewNodebController(logger, nil, rnibReaderProvider, nil).GetNodeb(writer, req)
70 }
71
72 func TestNodebController_GetNodeb_Success(t *testing.T) {
73         log, err := logger.InitLogger(logger.InfoLevel)
74
75         if err != nil {
76                 t.Errorf("#nodeb_controller_test.TestNodebController_GetNodeb_Success - failed to initialize logger, error: %s", err)
77         }
78
79         writer := httptest.NewRecorder()
80
81         rnibReaderMock := mocks.RnibReaderMock{}
82
83         var rnibError error
84         rnibReaderMock.On("GetNodeb", "testNode").Return(&entities.NodebInfo{}, rnibError)
85
86         rnibReaderProvider := func() reader.RNibReader {
87                 return &rnibReaderMock
88         }
89
90         executeGetNodeb(log, writer, rnibReaderProvider)
91
92         assert.Equal(t, writer.Result().StatusCode, http.StatusOK)
93 }
94
95 func TestNodebController_GetNodeb_NotFound(t *testing.T) {
96         log, err := logger.InitLogger(logger.InfoLevel)
97
98         if err != nil {
99                 t.Errorf("#nodeb_controller_test.TestNodebController_GetNodeb_NotFound - failed to initialize logger, error: %s", err)
100         }
101
102         writer := httptest.NewRecorder()
103
104         rnibReaderMock := mocks.RnibReaderMock{}
105         rnibError := common.NewResourceNotFoundErrorf("#reader.GetNodeb - responding node %s not found", "testNode")
106         var nodebInfo *entities.NodebInfo
107         rnibReaderMock.On("GetNodeb", "testNode").Return(nodebInfo, rnibError)
108
109         rnibReaderProvider := func() reader.RNibReader {
110                 return &rnibReaderMock
111         }
112
113         executeGetNodeb(log, writer, rnibReaderProvider)
114         assert.Equal(t, writer.Result().StatusCode, http.StatusNotFound)
115 }
116
117 func TestNodebController_GetNodeb_InternalError(t *testing.T) {
118         log, err := logger.InitLogger(logger.InfoLevel)
119
120         if err != nil {
121                 t.Errorf("#nodeb_controller_test.TestNodebController_GetNodeb_InternalError - failed to initialize logger, error: %s", err)
122         }
123
124         writer := httptest.NewRecorder()
125
126         rnibReaderMock := mocks.RnibReaderMock{}
127
128         rnibError := common.NewInternalError(errors.New("#reader.GetNodeb - Internal Error"))
129         var nodebInfo *entities.NodebInfo
130         rnibReaderMock.On("GetNodeb", "testNode").Return(nodebInfo, rnibError)
131
132         rnibReaderProvider := func() reader.RNibReader {
133                 return &rnibReaderMock
134         }
135
136         executeGetNodeb(log, writer, rnibReaderProvider)
137         assert.Equal(t, writer.Result().StatusCode, http.StatusInternalServerError)
138 }
139
140 func executeGetNodebIdList(logger *logger.Logger, writer *httptest.ResponseRecorder, rnibReaderProvider func() reader.RNibReader) {
141         req, _ := http.NewRequest("GET", "/nodeb-ids", nil)
142         NewNodebController(logger, nil, rnibReaderProvider, nil).GetNodebIdList(writer, req)
143 }
144
145 func TestNodebController_GetNodebIdList_Success(t *testing.T) {
146         logger, err := logger.InitLogger(logger.InfoLevel)
147
148         if err != nil {
149                 t.Errorf("#nodeb_controller_test.TestNodebController_GetNodebIdList_Success - failed to initialize logger, error: %s", err)
150         }
151
152         writer := httptest.NewRecorder()
153
154         rnibReaderMock := mocks.RnibReaderMock{}
155         var rnibError error
156
157         nbList := []*entities.NbIdentity{
158                 {InventoryName: "test1", GlobalNbId: &entities.GlobalNbId{PlmnId: "plmnId1", NbId: "nbId1"}},
159                 {InventoryName: "test2", GlobalNbId: &entities.GlobalNbId{PlmnId: "plmnId2", NbId: "nbId2"}},
160                 {InventoryName: "test3", GlobalNbId: &entities.GlobalNbId{PlmnId: "", NbId: ""}},
161         }
162         rnibReaderMock.On("GetListNodebIds").Return(nbList, rnibError)
163
164         rnibReaderProvider := func() reader.RNibReader {
165                 return &rnibReaderMock
166         }
167
168         executeGetNodebIdList(logger, writer, rnibReaderProvider)
169         assert.Equal(t, writer.Result().StatusCode, http.StatusOK)
170         bodyBytes, err := ioutil.ReadAll(writer.Body)
171         assert.Equal(t, "[{\"inventoryName\":\"test1\",\"globalNbId\":{\"plmnId\":\"plmnId1\",\"nbId\":\"nbId1\"}},{\"inventoryName\":\"test2\",\"globalNbId\":{\"plmnId\":\"plmnId2\",\"nbId\":\"nbId2\"}},{\"inventoryName\":\"test3\",\"globalNbId\":{}}]", string(bodyBytes))
172 }
173
174 func TestNodebController_GetNodebIdList_EmptyList(t *testing.T) {
175         log, err := logger.InitLogger(logger.InfoLevel)
176
177         if err != nil {
178                 t.Errorf("#nodeb_controller_test.TestNodebController_GetNodebIdList_EmptyList - failed to initialize logger, error: %s", err)
179         }
180
181         writer := httptest.NewRecorder()
182
183         rnibReaderMock := mocks.RnibReaderMock{}
184
185         var rnibError error
186         nbList := []*entities.NbIdentity{}
187         rnibReaderMock.On("GetListNodebIds").Return(nbList, rnibError)
188
189         rnibReaderProvider := func() reader.RNibReader {
190                 return &rnibReaderMock
191         }
192
193         executeGetNodebIdList(log, writer, rnibReaderProvider)
194
195         assert.Equal(t, writer.Result().StatusCode, http.StatusOK)
196         bodyBytes, err := ioutil.ReadAll(writer.Body)
197         assert.Equal(t, "[]", string(bodyBytes))
198 }
199
200 func TestNodebController_GetNodebIdList_InternalError(t *testing.T) {
201         logger, err := logger.InitLogger(logger.InfoLevel)
202
203         if err != nil {
204                 t.Errorf("#nodeb_controller_test.TestNodebController_GetNodebIdList_InternalError - failed to initialize logger, error: %s", err)
205         }
206
207         writer := httptest.NewRecorder()
208
209         rnibReaderMock := mocks.RnibReaderMock{}
210
211         rnibError := common.NewInternalError(errors.New("#reader.GetEnbIdList - Internal Error"))
212         var nbList []*entities.NbIdentity
213         rnibReaderMock.On("GetListNodebIds").Return(nbList, rnibError)
214
215         rnibReaderProvider := func() reader.RNibReader {
216                 return &rnibReaderMock
217         }
218
219         executeGetNodebIdList(logger, writer, rnibReaderProvider)
220         assert.Equal(t, writer.Result().StatusCode, http.StatusInternalServerError)
221 }