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.
17 package httpmsghandlers
21 "e2mgr/e2managererrors"
26 "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
27 "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
32 //func TestSetupHandleNewRanSave_Error(t *testing.T) {
33 // readerMock, writerMock, handler, rmrMessengerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST)
35 // ranName := "RanName"
36 // rnibErr := &common.ResourceNotFoundError{}
37 // sr := models.SetupRequest{"127.0.0.1", 8080, ranName,}
39 // nb := &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST}
40 // readerMock.On("GetNodeb", ranName).Return(nb, rnibErr)
42 // vErr := &common.ValidationError{}
43 // updatedNb, _ := createInitialNodeInfo(&sr, entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST)
44 // writerMock.On("SaveNodeb", mock.Anything, updatedNb).Return(vErr)
46 // var nbUpdated = &entities.NodebInfo{RanName: ranName, Ip: sr.RanIp, Port: uint32(sr.RanPort), ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST, ConnectionAttempts: 1}
47 // writerMock.On("UpdateNodebInfo", nbUpdated).Return(nil)
49 // payload := e2pdus.PackedEndcX2setupRequest
50 // xaction := []byte(ranName)
51 // msg := rmrCgo.NewMBuf(rmrCgo.RIC_ENDC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction)
53 // rmrMessengerMock.On("SendMsg", mock.Anything).Return(msg, nil)
55 // _, actual := handler.Handle(sr)
56 // expected := &e2managererrors.RnibDbError{}
58 // if reflect.TypeOf(actual) != reflect.TypeOf(expected) {
59 // t.Errorf("Error actual = %v, and Expected = %v.", actual, expected)
62 // writerMock.AssertNumberOfCalls(t, "SaveNodeb", 1)
63 // writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 0)
64 // rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 0)
67 //func TestSetupHandleNewRan_Success(t *testing.T) {
68 // readerMock, writerMock, handler, rmrMessengerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST)
70 // ranName := "RanName"
71 // rnibErr := &common.ResourceNotFoundError{}
72 // sr := models.SetupRequest{"127.0.0.1", 8080, ranName,}
74 // nb := &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST}
75 // readerMock.On("GetNodeb", ranName).Return(nb, rnibErr)
77 // updatedNb, _ := createInitialNodeInfo(&sr, entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST)
78 // writerMock.On("SaveNodeb", mock.Anything, updatedNb).Return(nil)
80 // var nbUpdated = &entities.NodebInfo{RanName: ranName, Ip: sr.RanIp, Port: uint32(sr.RanPort), ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST, ConnectionAttempts: 1}
81 // writerMock.On("UpdateNodebInfo", nbUpdated).Return(nil)
83 // payload := e2pdus.PackedEndcX2setupRequest
84 // xaction := []byte(ranName)
85 // msg := rmrCgo.NewMBuf(rmrCgo.RIC_ENDC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction)
87 // rmrMessengerMock.On("SendMsg", mock.Anything).Return(msg, nil)
89 // _, actual := handler.Handle(sr)
91 // assert.Nil(t, actual)
93 // writerMock.AssertNumberOfCalls(t, "SaveNodeb", 1)
94 // writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 1)
95 // rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 1)
98 //func TestEndcSetupHandleRmr_Error(t *testing.T) {
99 // readerMock, writerMock, handler, rmrMessengerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST)
101 // ranName := "RanName"
102 // nb := &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST}
103 // readerMock.On("GetNodeb", ranName).Return(nb, nil)
105 // var nbUpdated = &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST, ConnectionAttempts: 1}
106 // writerMock.On("UpdateNodebInfo", nbUpdated).Return(nil)
108 // var nbDisconnected = &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST, ConnectionAttempts: 0}
109 // writerMock.On("UpdateNodebInfo", nbDisconnected).Return(nil)
111 // payload := e2pdus.PackedEndcX2setupRequest
112 // xaction := []byte(ranName)
113 // msg := rmrCgo.NewMBuf(rmrCgo.RIC_ENDC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction)
115 // rmrErr := &e2managererrors.RmrError{}
116 // rmrMessengerMock.On("SendMsg", mock.Anything).Return(msg, rmrErr)
118 // sr := models.SetupRequest{"127.0.0.1", 8080, ranName,}
119 // _, actual := handler.Handle(sr)
121 // if reflect.TypeOf(actual) != reflect.TypeOf(rmrErr) {
122 // t.Errorf("Error actual = %v, and Expected = %v.", actual, rmrErr)
125 // writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 2)
126 // rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 1)
129 //func TestEndcSetupHandleExistingDisconnectedRan_Success(t *testing.T) {
130 // readerMock, writerMock, handler, rmrMessengerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST)
132 // ranName := "RanName"
133 // nb := &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST}
134 // readerMock.On("GetNodeb", ranName).Return(nb, nil)
136 // var nbUpdated = &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST, ConnectionAttempts: 1}
137 // writerMock.On("UpdateNodebInfo", nbUpdated).Return(nil)
139 // payload := e2pdus.PackedEndcX2setupRequest
140 // xaction := []byte(ranName)
141 // msg := rmrCgo.NewMBuf(rmrCgo.RIC_ENDC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction)
143 // rmrMessengerMock.On("SendMsg", mock.Anything).Return(msg, nil)
145 // sr := models.SetupRequest{"127.0.0.1", 8080, ranName,}
146 // _, actual := handler.Handle(sr)
148 // assert.Nil(t, actual)
150 // writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 1)
151 // rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 1)
154 //func TestX2SetupHandleExistingConnectedRan_Success(t *testing.T) {
155 // readerMock, writerMock, handler, rmrMessengerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
157 // ranName := "RanName"
158 // nb := &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
159 // readerMock.On("GetNodeb", ranName).Return(nb, nil)
161 // var nbUpdated = &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
162 // writerMock.On("UpdateNodebInfo", nbUpdated).Return(nil)
164 // payload := e2pdus.PackedX2setupRequest
165 // xaction := []byte(ranName)
166 // msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction)
168 // rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(msg, nil)
170 // sr := models.SetupRequest{"127.0.0.1", 8080, ranName,}
171 // _, actual := handler.Handle(sr)
173 // assert.Nil(t, actual)
175 // writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 1)
176 // rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 1)
179 func TestX2SetupHandleRnibGet_Error(t *testing.T) {
180 readerMock, _, handler, rmrMessengerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
182 rnibErr := &common.ValidationError{}
183 nb := &entities.NodebInfo{RanName: "RanName", ConnectionStatus: entities.ConnectionStatus_SHUTTING_DOWN,}
184 readerMock.On("GetNodeb", "RanName").Return(nb, rnibErr)
186 sr := models.SetupRequest{"127.0.0.1", 8080, "RanName",}
187 _, actual := handler.Handle(sr)
189 expected := &e2managererrors.RnibDbError{}
190 if reflect.TypeOf(actual) != reflect.TypeOf(expected) {
191 t.Errorf("Error actual = %v, and Expected = %v.", actual, expected)
193 rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 0)
196 //func TestEndcSetupHandleShuttingDownRan_Error(t *testing.T) {
197 // readerMock, writerMock, handler, rmrMessengerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST)
199 // nb := &entities.NodebInfo{RanName: "RanName", ConnectionStatus: entities.ConnectionStatus_SHUTTING_DOWN,}
200 // readerMock.On("GetNodeb", "RanName").Return(nb, nil)
202 // sr := models.SetupRequest{"127.0.0.1", 8080, "RanName",}
203 // _, actual := handler.Handle(sr)
205 // expected := &e2managererrors.WrongStateError{}
206 // if reflect.TypeOf(actual) != reflect.TypeOf(expected) {
207 // t.Errorf("Error actual = %v, and Expected = %v.", actual, expected)
209 // writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 0)
210 // rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 0)
213 //func TestX2SetupHandleShuttingDownRan_Error(t *testing.T) {
214 // readerMock, writerMock, handler, rmrMessengerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
216 // nb := &entities.NodebInfo{RanName: "RanName", ConnectionStatus: entities.ConnectionStatus_SHUTTING_DOWN,}
217 // readerMock.On("GetNodeb", "RanName").Return(nb, nil)
219 // sr := models.SetupRequest{"127.0.0.1", 8080, "RanName",}
220 // _, actual := handler.Handle(sr)
222 // expected := &e2managererrors.WrongStateError{}
223 // if reflect.TypeOf(actual) != reflect.TypeOf(expected) {
224 // t.Errorf("Error actual = %v, and Expected = %v.", actual, expected)
226 // writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 0)
227 // rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 0)
230 func TestX2SetupHandleNoPort_Error(t *testing.T) {
231 _, writerMock, handler, rmrMessengerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
233 sr := models.SetupRequest{"127.0.0.1", 0, "RanName",}
234 _, actual := handler.Handle(sr)
236 expected := &e2managererrors.RequestValidationError{}
237 if reflect.TypeOf(actual) != reflect.TypeOf(expected) {
238 t.Errorf("Error actual = %v, and Expected = %v.", actual, expected)
240 writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 0)
241 rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 0)
244 func TestX2SetupHandleNoRanName_Error(t *testing.T) {
245 _, writerMock, handler, rmrMessengerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
247 sr := models.SetupRequest{}
249 sr.RanIp = "127.0.0.1"
251 _, actual := handler.Handle(sr)
253 expected := &e2managererrors.RequestValidationError{}
254 if reflect.TypeOf(actual) != reflect.TypeOf(expected) {
255 t.Errorf("Error actual = %v, and Expected = %v.", actual, expected)
257 writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 0)
258 rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 0)
261 func TestX2SetupHandleNoIP_Error(t *testing.T) {
262 _, writerMock, handler, rmrMessengerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
264 sr := models.SetupRequest{}
266 sr.RanName = "RanName"
268 _, actual := handler.Handle(sr)
270 expected := &e2managererrors.RequestValidationError{}
271 if reflect.TypeOf(actual) != reflect.TypeOf(expected) {
272 t.Errorf("Error actual = %v, and Expected = %v.", actual, expected)
274 writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 0)
275 rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 0)
278 func TestX2SetupHandleInvalidIp_Error(t *testing.T) {
279 _, writerMock, handler, rmrMessengerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
281 sr := models.SetupRequest{}
283 sr.RanName = "RanName"
284 sr.RanIp = "invalid ip"
286 _, actual := handler.Handle(sr)
288 expected := &e2managererrors.RequestValidationError{}
289 if reflect.TypeOf(actual) != reflect.TypeOf(expected) {
290 t.Errorf("Error actual = %v, and Expected = %v.", actual, expected)
292 writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 0)
293 rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 0)
296 func initSetupRequestTest(t *testing.T, protocol entities.E2ApplicationProtocol) (*mocks.RnibReaderMock, *mocks.RnibWriterMock, *SetupRequestHandler, *mocks.RmrMessengerMock, *mocks.E2TInstancesManagerMock) {
298 config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
300 readerMock := &mocks.RnibReaderMock{}
301 writerMock := &mocks.RnibWriterMock{}
303 rmrMessengerMock := &mocks.RmrMessengerMock{}
304 rmrSender := getRmrSender(rmrMessengerMock, log)
306 rnibDataService := services.NewRnibDataService(log, config, readerMock, writerMock)
308 ranSetupManager := managers.NewRanSetupManager(log, rmrSender, rnibDataService)
309 e2tInstancesManager := &mocks.E2TInstancesManagerMock{}
310 handler := NewSetupRequestHandler(log, rnibDataService, ranSetupManager, protocol, e2tInstancesManager)
312 return readerMock, writerMock, handler, rmrMessengerMock, e2tInstancesManager