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 // This source code is part of the near-RT RIC (RAN Intelligent Controller)
18 // platform project (RICP).
20 package rmrmsghandlers
33 "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
34 "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
35 "github.com/golang/protobuf/ptypes/wrappers"
36 "github.com/stretchr/testify/assert"
37 "github.com/stretchr/testify/mock"
44 prefix = "10.0.2.15:9999|"
45 e2tInstanceFullAddress = "10.0.2.15:9999"
46 nodebRanName = "gnb:310-410-b5c67788"
47 GnbSetupRequestXmlPath = "../../tests/resources/setupRequest_gnb.xml"
48 EnGnbSetupRequestXmlPath = "../../tests/resources/setupRequest_en-gNB.xml"
49 NgEnbSetupRequestXmlPath = "../../tests/resources/setupRequest_ng-eNB.xml"
50 EnbSetupRequestXmlPath = "../../tests/resources/setupRequest_enb.xml"
51 GnbWithoutFunctionsSetupRequestXmlPath = "../../tests/resources/setupRequest_gnb_without_functions.xml"
54 func readXmlFile(t *testing.T, xmlPath string) []byte {
55 path, err := filepath.Abs(xmlPath)
59 xmlAsBytes, err := ioutil.ReadFile(path)
67 func TestParseGnbSetupRequest_Success(t *testing.T) {
68 xmlGnb := readXmlFile(t, GnbSetupRequestXmlPath)
69 handler, _, _, _, _, _ := initMocks(t)
70 prefBytes := []byte(prefix)
71 request, _, err := handler.parseSetupRequest(append(prefBytes, xmlGnb...))
72 assert.Equal(t, "02F829", request.GetPlmnId())
73 assert.Equal(t, "001100000011000000110000", request.GetNbId())
77 func TestParseEnGnbSetupRequest_Success(t *testing.T) {
78 enGnbXml := readXmlFile(t, EnGnbSetupRequestXmlPath)
79 handler, _, _, _, _, _ := initMocks(t)
80 prefBytes := []byte(prefix)
81 request, _, err := handler.parseSetupRequest(append(prefBytes, enGnbXml...))
82 assert.Equal(t, "131014", request.GetPlmnId())
83 assert.Equal(t, "11000101110001101100011111111000", request.GetNbId())
87 func TestParseNgEnbSetupRequest_Success(t *testing.T) {
88 ngEnbXml := readXmlFile(t, NgEnbSetupRequestXmlPath)
89 handler, _, _, _, _, _ := initMocks(t)
90 prefBytes := []byte(prefix)
91 request, _, err := handler.parseSetupRequest(append(prefBytes, ngEnbXml...))
92 assert.Equal(t, "131014", request.GetPlmnId())
93 assert.Equal(t, "101010101010101010", request.GetNbId())
97 func TestParseEnbSetupRequest_Success(t *testing.T) {
98 enbXml := readXmlFile(t, EnbSetupRequestXmlPath)
99 handler, _, _, _, _, _ := initMocks(t)
100 prefBytes := []byte(prefix)
101 request, _, err := handler.parseSetupRequest(append(prefBytes, enbXml...))
102 assert.Equal(t, "6359AB", request.GetPlmnId())
103 assert.Equal(t, "101010101010101010", request.GetNbId())
107 func TestParseSetupRequest_PipFailure(t *testing.T) {
108 xmlGnb := readXmlFile(t, GnbSetupRequestXmlPath)
109 handler, _, _, _, _, _ := initMocks(t)
110 prefBytes := []byte("10.0.2.15:9999")
111 request, _, err := handler.parseSetupRequest(append(prefBytes, xmlGnb...))
112 assert.Nil(t, request)
113 assert.NotNil(t, err)
114 assert.EqualError(t, err, "#E2SetupRequestNotificationHandler.parseSetupRequest - Error parsing E2 Setup Request failed extract Payload: no | separator found")
117 func TestParseSetupRequest_UnmarshalFailure(t *testing.T) {
118 handler, _, _, _, _, _ := initMocks(t)
119 prefBytes := []byte(prefix)
120 request, _, err := handler.parseSetupRequest(append(prefBytes, 1, 2, 3))
121 assert.Nil(t, request)
122 assert.NotNil(t, err)
123 assert.EqualError(t, err, "#E2SetupRequestNotificationHandler.parseSetupRequest - Error unmarshalling E2 Setup Request payload: 31302e302e322e31353a393939397c010203")
126 func TestE2SetupRequestNotificationHandler_HandleNewGnbSuccess(t *testing.T) {
127 xmlGnb := readXmlFile(t, GnbSetupRequestXmlPath)
128 handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t)
129 var e2tInstance = &entities.E2TInstance{}
130 e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(e2tInstance, nil)
131 var gnb *entities.NodebInfo
132 readerMock.On("GetNodeb", mock.Anything).Return(gnb, common.NewResourceNotFoundError("Not found"))
133 notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append([]byte(prefix), xmlGnb...)}
134 nodebInfo := getExpectedNodebWithFunctionsForNewRan(notificationRequest.Payload)
135 writerMock.On("SaveNodeb", mock.Anything, nodebInfo).Return(nil)
136 routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(nil)
137 writerMock.On("UpdateNodebInfo", mock.Anything).Return(nil)
138 e2tInstancesManagerMock.On("AddRansToInstance", mock.Anything, mock.Anything).Return(nil)
140 rmrMessage := &rmrCgo.MBuf{}
141 rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(rmrMessage, errEmpty)
142 handler.Handle(notificationRequest)
143 writerMock.AssertCalled(t, "SaveNodeb", mock.Anything, nodebInfo)
144 assertNewNodebSuccessCalls(readerMock, t, e2tInstancesManagerMock, writerMock, routingManagerClientMock, rmrMessengerMock)
147 func TestE2SetupRequestNotificationHandler_HandleNewGnbWithoutFunctionsSuccess(t *testing.T) {
148 xmlGnb := readXmlFile(t, GnbWithoutFunctionsSetupRequestXmlPath)
149 handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t)
150 var e2tInstance = &entities.E2TInstance{}
151 e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(e2tInstance, nil)
152 var gnb *entities.NodebInfo
153 readerMock.On("GetNodeb", mock.Anything).Return(gnb, common.NewResourceNotFoundError("Not found"))
154 notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append([]byte(prefix), xmlGnb...)}
155 nodebInfo := getExpectedNodebWithFunctionsForNewRan(notificationRequest.Payload)
156 writerMock.On("SaveNodeb", mock.Anything, nodebInfo).Return(nil)
157 routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(nil)
158 writerMock.On("UpdateNodebInfo", mock.Anything).Return(nil)
159 e2tInstancesManagerMock.On("AddRansToInstance", mock.Anything, mock.Anything).Return(nil)
161 rmrMessage := &rmrCgo.MBuf{}
162 rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(rmrMessage, errEmpty)
163 handler.Handle(notificationRequest)
164 writerMock.AssertCalled(t, "SaveNodeb", mock.Anything, nodebInfo)
165 assertNewNodebSuccessCalls(readerMock, t, e2tInstancesManagerMock, writerMock, routingManagerClientMock, rmrMessengerMock)
168 func TestE2SetupRequestNotificationHandler_HandleNewEnGnbSuccess(t *testing.T) {
169 xmlEnGnb := readXmlFile(t, EnGnbSetupRequestXmlPath)
170 handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t)
171 var e2tInstance = &entities.E2TInstance{}
172 e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(e2tInstance, nil)
173 var gnb *entities.NodebInfo
174 readerMock.On("GetNodeb", mock.Anything).Return(gnb, common.NewResourceNotFoundError("Not found"))
175 writerMock.On("SaveNodeb", mock.Anything, mock.Anything).Return(nil)
176 routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(nil)
177 writerMock.On("UpdateNodebInfo", mock.Anything).Return(nil)
178 e2tInstancesManagerMock.On("AddRansToInstance", mock.Anything, mock.Anything).Return(nil)
180 rmrMessage := &rmrCgo.MBuf{}
181 rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(rmrMessage, errEmpty)
182 prefBytes := []byte(prefix)
183 notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append(prefBytes, xmlEnGnb...)}
184 handler.Handle(notificationRequest)
185 assertNewNodebSuccessCalls(readerMock, t, e2tInstancesManagerMock, writerMock, routingManagerClientMock, rmrMessengerMock)
188 func TestE2SetupRequestNotificationHandler_HandleNewNgEnbSuccess(t *testing.T) {
189 xmlNgEnb := readXmlFile(t, NgEnbSetupRequestXmlPath)
190 handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t)
191 var e2tInstance = &entities.E2TInstance{}
192 e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(e2tInstance, nil)
193 var gnb *entities.NodebInfo
194 readerMock.On("GetNodeb", mock.Anything).Return(gnb, common.NewResourceNotFoundError("Not found"))
195 writerMock.On("SaveNodeb", mock.Anything, mock.Anything).Return(nil)
196 routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(nil)
197 writerMock.On("UpdateNodebInfo", mock.Anything).Return(nil)
198 e2tInstancesManagerMock.On("AddRansToInstance", mock.Anything, mock.Anything).Return(nil)
200 rmrMessage := &rmrCgo.MBuf{}
201 rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(rmrMessage, errEmpty)
202 prefBytes := []byte(prefix)
203 notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append(prefBytes, xmlNgEnb...)}
204 handler.Handle(notificationRequest)
205 assertNewNodebSuccessCalls(readerMock, t, e2tInstancesManagerMock, writerMock, routingManagerClientMock, rmrMessengerMock)
208 func TestE2SetupRequestNotificationHandler_HandleExistingGnbSuccess(t *testing.T) {
209 xmlGnb := readXmlFile(t, GnbSetupRequestXmlPath)
211 handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t)
212 var e2tInstance = &entities.E2TInstance{}
213 e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(e2tInstance, nil)
214 var gnb = &entities.NodebInfo{
215 RanName: nodebRanName,
216 AssociatedE2TInstanceAddress: e2tInstanceFullAddress,
217 ConnectionStatus: entities.ConnectionStatus_CONNECTED,
218 NodeType: entities.Node_GNB,
219 Configuration: &entities.NodebInfo_Gnb{Gnb: &entities.Gnb{}},
221 readerMock.On("GetNodeb", mock.Anything).Return(gnb, nil)
222 routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(nil)
224 notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append([]byte(prefix), xmlGnb...)}
225 gnbToUpdate := getExpectedNodebWithFunctionsForExistingRan(*gnb, notificationRequest.Payload)
226 writerMock.On("UpdateNodebInfo", gnbToUpdate).Return(nil)
227 e2tInstancesManagerMock.On("AddRansToInstance", mock.Anything, mock.Anything).Return(nil)
229 rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(&rmrCgo.MBuf{}, errEmpty)
230 handler.Handle(notificationRequest)
231 writerMock.AssertCalled(t, "UpdateNodebInfo", gnbToUpdate)
232 assertExistingNodebSuccessCalls(readerMock, t, e2tInstancesManagerMock, writerMock, routingManagerClientMock, rmrMessengerMock)
235 func TestE2SetupRequestNotificationHandler_HandleExistingGnbWithFunctionsSuccess(t *testing.T) {
236 xmlGnb := readXmlFile(t, GnbSetupRequestXmlPath)
238 handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t)
239 var e2tInstance = &entities.E2TInstance{}
240 e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(e2tInstance, nil)
241 var gnb = &entities.NodebInfo{
242 RanName: nodebRanName,
243 AssociatedE2TInstanceAddress: e2tInstanceFullAddress,
244 ConnectionStatus: entities.ConnectionStatus_CONNECTED,
245 NodeType: entities.Node_GNB,
246 Configuration: &entities.NodebInfo_Gnb{Gnb: &entities.Gnb{RanFunctions: []*entities.RanFunction{
248 RanFunctionId: &wrappers.UInt32Value{Value:2},
249 RanFunctionRevision: &wrappers.UInt32Value{Value:2},
253 readerMock.On("GetNodeb", mock.Anything).Return(gnb, nil)
254 routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(nil)
256 notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append([]byte(prefix), xmlGnb...)}
257 gnbToUpdate := getExpectedNodebWithFunctionsForExistingRan(*gnb, notificationRequest.Payload)
259 writerMock.On("UpdateNodebInfo", gnbToUpdate).Return(nil)
260 e2tInstancesManagerMock.On("AddRansToInstance", mock.Anything, mock.Anything).Return(nil)
262 rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(&rmrCgo.MBuf{}, errEmpty)
263 handler.Handle(notificationRequest)
264 writerMock.AssertCalled(t, "UpdateNodebInfo", gnbToUpdate)
265 assertExistingNodebSuccessCalls(readerMock, t, e2tInstancesManagerMock, writerMock, routingManagerClientMock, rmrMessengerMock)
268 func getExpectedNodebWithFunctionsForExistingRan(nodeb entities.NodebInfo , payload []byte) *entities.NodebInfo {
269 pipInd := bytes.IndexByte(payload, '|')
270 setupRequest := &models.E2SetupRequestMessage{}
271 _ = xml.Unmarshal(normalizeXml(payload[pipInd+1:]), &setupRequest.E2APPDU)
272 nodeb.GetGnb().RanFunctions = setupRequest.ExtractRanFunctionsList()
276 func getExpectedNodebWithFunctionsForNewRan(payload []byte) *entities.NodebInfo {
277 pipInd := bytes.IndexByte(payload, '|')
278 setupRequest := &models.E2SetupRequestMessage{}
279 _ = xml.Unmarshal(normalizeXml(payload[pipInd+1:]), &setupRequest.E2APPDU)
281 nodeb := &entities.NodebInfo{
282 AssociatedE2TInstanceAddress: e2tInstanceFullAddress,
283 ConnectionStatus: entities.ConnectionStatus_CONNECTED,
284 RanName: nodebRanName,
285 NodeType: entities.Node_GNB,
286 Configuration: &entities.NodebInfo_Gnb{
288 RanFunctions: setupRequest.ExtractRanFunctionsList(),
291 GlobalNbId: &entities.GlobalNbId{
292 PlmnId: setupRequest.GetPlmnId(),
293 NbId: setupRequest.GetNbId(),
300 func TestE2SetupRequestNotificationHandler_HandleParseError(t *testing.T) {
301 xmlGnb := readXmlFile(t, GnbSetupRequestXmlPath)
303 handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t)
304 prefBytes := []byte("invalid_prefix")
305 notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append(prefBytes, xmlGnb...)}
306 handler.Handle(notificationRequest)
307 readerMock.AssertNotCalled(t, "GetNodeb", mock.Anything)
308 writerMock.AssertNotCalled(t, "SaveNodeb", mock.Anything, mock.Anything)
309 routingManagerClientMock.AssertNotCalled(t, "AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything)
310 writerMock.AssertNotCalled(t, "UpdateNodebInfo", mock.Anything)
311 e2tInstancesManagerMock.AssertNotCalled(t, "AddRansToInstance", mock.Anything, mock.Anything)
312 rmrMessengerMock.AssertNotCalled(t, "SendMsg", mock.Anything, mock.Anything)
315 func TestE2SetupRequestNotificationHandler_HandleUnmarshalError(t *testing.T) {
316 handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t)
317 prefBytes := []byte(prefix)
318 notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append(prefBytes, "xmlGnb"...)}
319 handler.Handle(notificationRequest)
320 readerMock.AssertNotCalled(t, "GetNodeb", mock.Anything)
321 writerMock.AssertNotCalled(t, "SaveNodeb", mock.Anything, mock.Anything)
322 routingManagerClientMock.AssertNotCalled(t, "AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything)
323 writerMock.AssertNotCalled(t, "UpdateNodebInfo", mock.Anything)
324 e2tInstancesManagerMock.AssertNotCalled(t, "AddRansToInstance", mock.Anything, mock.Anything)
325 rmrMessengerMock.AssertNotCalled(t, "SendMsg", mock.Anything, mock.Anything)
328 func TestE2SetupRequestNotificationHandler_HandleGetE2TInstanceError(t *testing.T) {
329 xmlGnb := readXmlFile(t, GnbSetupRequestXmlPath)
330 handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t)
331 var e2tInstance *entities.E2TInstance
332 e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(e2tInstance, common.NewResourceNotFoundError("Not found"))
333 prefBytes := []byte(prefix)
334 notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append(prefBytes, xmlGnb...)}
335 handler.Handle(notificationRequest)
336 e2tInstancesManagerMock.AssertCalled(t, "GetE2TInstance", e2tInstanceFullAddress)
337 readerMock.AssertNotCalled(t, "GetNodeb", mock.Anything)
338 writerMock.AssertNotCalled(t, "SaveNodeb", mock.Anything, mock.Anything)
339 routingManagerClientMock.AssertNotCalled(t, "AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything)
340 writerMock.AssertNotCalled(t, "UpdateNodebInfo", mock.Anything)
341 e2tInstancesManagerMock.AssertNotCalled(t, "AddRansToInstance", mock.Anything, mock.Anything)
342 rmrMessengerMock.AssertNotCalled(t, "SendMsg", mock.Anything, mock.Anything)
345 func TestE2SetupRequestNotificationHandler_HandleGetNodebError(t *testing.T) {
346 xmlGnb := readXmlFile(t, GnbSetupRequestXmlPath)
348 handler, readerMock, writerMock, routingManagerClientMock, e2tInstancesManagerMock, rmrMessengerMock := initMocks(t)
349 var e2tInstance = &entities.E2TInstance{}
350 e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(e2tInstance, nil)
351 var gnb *entities.NodebInfo
352 readerMock.On("GetNodeb", mock.Anything).Return(gnb, common.NewInternalError(errors.New("some error")))
353 prefBytes := []byte(prefix)
354 notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append(prefBytes, xmlGnb...)}
355 handler.Handle(notificationRequest)
356 e2tInstancesManagerMock.AssertCalled(t, "GetE2TInstance", e2tInstanceFullAddress)
357 readerMock.AssertCalled(t, "GetNodeb", mock.Anything)
358 writerMock.AssertNotCalled(t, "SaveNodeb", mock.Anything, mock.Anything)
359 routingManagerClientMock.AssertNotCalled(t, "AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything)
360 writerMock.AssertNotCalled(t, "UpdateNodebInfo", mock.Anything)
361 e2tInstancesManagerMock.AssertNotCalled(t, "AddRansToInstance", mock.Anything, mock.Anything)
362 rmrMessengerMock.AssertNotCalled(t, "SendMsg", mock.Anything, mock.Anything)
365 func TestE2SetupRequestNotificationHandler_HandleAssociationError(t *testing.T) {
366 xmlGnb := readXmlFile(t, GnbSetupRequestXmlPath)
368 handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t)
369 var e2tInstance = &entities.E2TInstance{}
370 e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(e2tInstance, nil)
371 var gnb *entities.NodebInfo
372 readerMock.On("GetNodeb", mock.Anything).Return(gnb, common.NewResourceNotFoundError("Not found"))
373 writerMock.On("SaveNodeb", mock.Anything, mock.Anything).Return(nil)
374 writerMock.On("UpdateNodebInfo", mock.Anything).Return(nil)
375 e2tInstancesManagerMock.On("AddRansToInstance", mock.Anything, mock.Anything).Return(nil)
376 routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(errors.New("association error"))
378 rmrMessage := &rmrCgo.MBuf{}
379 rmrMessengerMock.On("WhSendMsg", mock.Anything, mock.Anything).Return(rmrMessage, errEmpty)
381 prefBytes := []byte(prefix)
382 notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append(prefBytes, xmlGnb...)}
383 handler.Handle(notificationRequest)
384 readerMock.AssertCalled(t, "GetNodeb", mock.Anything)
385 e2tInstancesManagerMock.AssertCalled(t, "GetE2TInstance", e2tInstanceFullAddress)
386 writerMock.AssertCalled(t, "SaveNodeb", mock.Anything, mock.Anything)
387 routingManagerClientMock.AssertCalled(t, "AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything)
388 writerMock.AssertCalled(t, "UpdateNodebInfo", mock.Anything)
389 e2tInstancesManagerMock.AssertNotCalled(t, "AddRansToInstance", mock.Anything, mock.Anything)
390 rmrMessengerMock.AssertCalled(t, "WhSendMsg", mock.Anything, mock.Anything)
393 func TestE2SetupRequestNotificationHandler_ConvertTo20BitStringError(t *testing.T) {
394 xmlEnGnb := readXmlFile(t, EnGnbSetupRequestXmlPath)
395 logger := tests.InitLog(t)
396 config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3, GlobalRicId: struct {
400 }{Mcc: "327", Mnc: "94" ,RicId: "10011001101010101011"}}
401 rmrMessengerMock := &mocks.RmrMessengerMock{}
402 rmrSender := tests.InitRmrSender(rmrMessengerMock, logger)
403 readerMock := &mocks.RnibReaderMock{}
404 writerMock := &mocks.RnibWriterMock{}
405 routingManagerClientMock := &mocks.RoutingManagerClientMock{}
406 rnibDataService := services.NewRnibDataService(logger, config, readerMock, writerMock)
407 e2tInstancesManagerMock := &mocks.E2TInstancesManagerMock{}
408 e2tAssociationManager := managers.NewE2TAssociationManager(logger, rnibDataService, e2tInstancesManagerMock, routingManagerClientMock)
409 handler := NewE2SetupRequestNotificationHandler(logger, config, e2tInstancesManagerMock, rmrSender, rnibDataService, e2tAssociationManager)
411 var e2tInstance = &entities.E2TInstance{}
412 e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(e2tInstance, nil)
413 var gnb *entities.NodebInfo
414 readerMock.On("GetNodeb", mock.Anything).Return(gnb, common.NewResourceNotFoundError("Not found"))
415 writerMock.On("SaveNodeb", mock.Anything, mock.Anything).Return(nil)
416 routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(nil)
417 writerMock.On("UpdateNodebInfo", mock.Anything).Return(nil)
418 e2tInstancesManagerMock.On("AddRansToInstance", mock.Anything, mock.Anything).Return(nil)
420 rmrMessage := &rmrCgo.MBuf{}
421 rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(rmrMessage, errEmpty)
422 prefBytes := []byte(prefix)
423 notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append(prefBytes, xmlEnGnb...)}
424 handler.Handle(notificationRequest)
425 readerMock.AssertCalled(t, "GetNodeb", mock.Anything)
426 e2tInstancesManagerMock.AssertCalled(t, "GetE2TInstance", e2tInstanceFullAddress)
427 writerMock.AssertCalled(t, "SaveNodeb", mock.Anything, mock.Anything)
428 routingManagerClientMock.AssertCalled(t, "AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything)
429 writerMock.AssertCalled(t, "UpdateNodebInfo", mock.Anything)
430 e2tInstancesManagerMock.AssertCalled(t, "AddRansToInstance", mock.Anything, mock.Anything)
431 rmrMessengerMock.AssertNotCalled(t, "SendMsg", mock.Anything, mock.Anything)
434 func TestE2SetupRequestNotificationHandler_HandleExistingGnbInvalidStatusError(t *testing.T) {
435 xmlGnb := readXmlFile(t, GnbSetupRequestXmlPath)
436 handler, readerMock, writerMock, routingManagerClientMock, e2tInstancesManagerMock, rmrMessengerMock := initMocks(t)
437 var gnb = &entities.NodebInfo{RanName: nodebRanName, ConnectionStatus: entities.ConnectionStatus_SHUTTING_DOWN}
438 readerMock.On("GetNodeb", mock.Anything).Return(gnb, nil)
439 var e2tInstance = &entities.E2TInstance{}
440 e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(e2tInstance, nil)
441 prefBytes := []byte(prefix)
442 notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append(prefBytes, xmlGnb...)}
443 handler.Handle(notificationRequest)
444 readerMock.AssertCalled(t, "GetNodeb", mock.Anything)
445 e2tInstancesManagerMock.AssertCalled(t, "GetE2TInstance", e2tInstanceFullAddress)
446 writerMock.AssertNotCalled(t, "SaveNodeb", mock.Anything, mock.Anything)
447 routingManagerClientMock.AssertNotCalled(t, "AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything)
448 writerMock.AssertNotCalled(t, "UpdateNodebInfo", mock.Anything)
449 e2tInstancesManagerMock.AssertNotCalled(t, "AddRansToInstance", mock.Anything, mock.Anything)
450 rmrMessengerMock.AssertNotCalled(t, "SendMsg", mock.Anything, mock.Anything)
453 func initMocks(t *testing.T) (E2SetupRequestNotificationHandler, *mocks.RnibReaderMock, *mocks.RnibWriterMock, *mocks.RmrMessengerMock, *mocks.E2TInstancesManagerMock, *mocks.RoutingManagerClientMock) {
454 logger := tests.InitLog(t)
455 config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3, GlobalRicId: struct {
459 }{Mcc: "327", Mnc: "94" ,RicId: "AACCE"}}
460 rmrMessengerMock := &mocks.RmrMessengerMock{}
461 rmrSender := tests.InitRmrSender(rmrMessengerMock, logger)
462 readerMock := &mocks.RnibReaderMock{}
463 writerMock := &mocks.RnibWriterMock{}
464 routingManagerClientMock := &mocks.RoutingManagerClientMock{}
465 rnibDataService := services.NewRnibDataService(logger, config, readerMock, writerMock)
466 e2tInstancesManagerMock := &mocks.E2TInstancesManagerMock{}
467 e2tAssociationManager := managers.NewE2TAssociationManager(logger, rnibDataService, e2tInstancesManagerMock, routingManagerClientMock)
468 handler := NewE2SetupRequestNotificationHandler(logger, config, e2tInstancesManagerMock, rmrSender, rnibDataService, e2tAssociationManager)
469 return handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock
472 func assertNewNodebSuccessCalls(readerMock *mocks.RnibReaderMock, t *testing.T, e2tInstancesManagerMock *mocks.E2TInstancesManagerMock, writerMock *mocks.RnibWriterMock, routingManagerClientMock *mocks.RoutingManagerClientMock, rmrMessengerMock *mocks.RmrMessengerMock) {
473 readerMock.AssertCalled(t, "GetNodeb", mock.Anything)
474 writerMock.AssertCalled(t, "SaveNodeb", mock.Anything, mock.Anything)
475 e2tInstancesManagerMock.AssertCalled(t, "GetE2TInstance", e2tInstanceFullAddress)
476 routingManagerClientMock.AssertCalled(t, "AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything)
477 writerMock.AssertCalled(t, "UpdateNodebInfo", mock.Anything)
478 e2tInstancesManagerMock.AssertCalled(t, "AddRansToInstance", mock.Anything, mock.Anything)
479 rmrMessengerMock.AssertCalled(t, "SendMsg", mock.Anything, mock.Anything)
482 func assertExistingNodebSuccessCalls(readerMock *mocks.RnibReaderMock, t *testing.T, e2tInstancesManagerMock *mocks.E2TInstancesManagerMock, writerMock *mocks.RnibWriterMock, routingManagerClientMock *mocks.RoutingManagerClientMock, rmrMessengerMock *mocks.RmrMessengerMock) {
483 readerMock.AssertCalled(t, "GetNodeb", mock.Anything)
484 writerMock.AssertNotCalled(t, "SaveNodeb", mock.Anything, mock.Anything)
485 e2tInstancesManagerMock.AssertCalled(t, "GetE2TInstance", e2tInstanceFullAddress)
486 routingManagerClientMock.AssertCalled(t, "AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything)
487 writerMock.AssertCalled(t, "UpdateNodebInfo", mock.Anything)
488 e2tInstancesManagerMock.AssertCalled(t, "AddRansToInstance", mock.Anything, mock.Anything)
489 rmrMessengerMock.AssertCalled(t, "SendMsg", mock.Anything, mock.Anything)