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/stretchr/testify/assert"
36 "github.com/stretchr/testify/mock"
43 e2tInstanceFullAddress = "10.0.2.15:9999"
44 e2SetupMsgPrefix = e2tInstanceFullAddress + "|"
45 gnbNodebRanName = "gnb:310-410-b5c67788"
46 enbNodebRanName = "enB_macro:P310-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"
52 E2SetupFailureResponseWithMiscCause = "<E2AP-PDU><unsuccessfulOutcome><procedureCode>1</procedureCode><criticality><reject/></criticality><value><E2setupFailure><protocolIEs><E2setupFailureIEs><id>1</id><criticality><ignore/></criticality><value><Cause><misc><om-intervention/></misc></Cause></value></E2setupFailureIEs><E2setupFailureIEs><id>31</id><criticality><ignore/></criticality><value><TimeToWait><v60s/></TimeToWait></value></E2setupFailureIEs></protocolIEs></E2setupFailure></value></unsuccessfulOutcome></E2AP-PDU>"
53 E2SetupFailureResponseWithTransportCause = "<E2AP-PDU><unsuccessfulOutcome><procedureCode>1</procedureCode><criticality><reject/></criticality><value><E2setupFailure><protocolIEs><E2setupFailureIEs><id>1</id><criticality><ignore/></criticality><value><Cause><transport><transport-resource-unavailable/></transport></Cause></value></E2setupFailureIEs><E2setupFailureIEs><id>31</id><criticality><ignore/></criticality><value><TimeToWait><v60s/></TimeToWait></value></E2setupFailureIEs></protocolIEs></E2setupFailure></value></unsuccessfulOutcome></E2AP-PDU>"
54 E2SetupFailureResponseWithRicCause = "<E2AP-PDU><unsuccessfulOutcome><procedureCode>1</procedureCode><criticality><reject/></criticality><value><E2setupFailure><protocolIEs><E2setupFailureIEs><id>1</id><criticality><ignore/></criticality><value><Cause><ricRequest><request-id-unknown/></ricRequest></Cause></value></E2setupFailureIEs><E2setupFailureIEs><id>31</id><criticality><ignore/></criticality><value><TimeToWait><v60s/></TimeToWait></value></E2setupFailureIEs></protocolIEs></E2setupFailure></value></unsuccessfulOutcome></E2AP-PDU>"
55 StateChangeMessageChannel = "RAN_CONNECTION_STATUS_CHANGE"
58 func initMocks(t *testing.T) (*E2SetupRequestNotificationHandler, *mocks.RnibReaderMock, *mocks.RnibWriterMock, *mocks.RmrMessengerMock, *mocks.E2TInstancesManagerMock, *mocks.RoutingManagerClientMock) {
59 logger := tests.InitLog(t)
60 config := &configuration.Configuration{
61 RnibRetryIntervalMs: 10,
62 MaxRnibConnectionAttempts: 3,
63 RnibWriter: configuration.RnibWriterConfig{
64 StateChangeMessageChannel: StateChangeMessageChannel,
70 }{Mcc: "327", Mnc: "94", RicId: "AACCE"}}
71 rmrMessengerMock := &mocks.RmrMessengerMock{}
72 rmrSender := tests.InitRmrSender(rmrMessengerMock, logger)
73 readerMock := &mocks.RnibReaderMock{}
74 writerMock := &mocks.RnibWriterMock{}
75 routingManagerClientMock := &mocks.RoutingManagerClientMock{}
76 rnibDataService := services.NewRnibDataService(logger, config, readerMock, writerMock)
77 e2tInstancesManagerMock := &mocks.E2TInstancesManagerMock{}
78 ranListManager := managers.NewRanListManager(logger, rnibDataService)
79 ranAlarmService := services.NewRanAlarmService(logger, config)
80 ranConnectStatusChangeManager := managers.NewRanConnectStatusChangeManager(logger, rnibDataService, ranListManager, ranAlarmService)
81 e2tAssociationManager := managers.NewE2TAssociationManager(logger, rnibDataService, e2tInstancesManagerMock, routingManagerClientMock, ranConnectStatusChangeManager)
82 handler := NewE2SetupRequestNotificationHandler(logger, config, e2tInstancesManagerMock, rmrSender, rnibDataService, e2tAssociationManager, ranConnectStatusChangeManager, ranListManager)
83 return handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock
86 func getMbuf(ranName string, msgType int, payloadStr string, request *models.NotificationRequest) *rmrCgo.MBuf {
87 payload := []byte(payloadStr)
88 mbuf := rmrCgo.NewMBuf(msgType, len(payload), ranName, &payload, &request.TransactionId, request.GetMsgSrc())
92 func readXmlFile(t *testing.T, xmlPath string) []byte {
93 path, err := filepath.Abs(xmlPath)
97 xmlAsBytes, err := ioutil.ReadFile(path)
105 func TestParseGnbSetupRequest_Success(t *testing.T) {
106 xmlGnb := readXmlFile(t, GnbSetupRequestXmlPath)
107 handler, _, _, _, _, _ := initMocks(t)
108 prefBytes := []byte(e2SetupMsgPrefix)
109 request, _, err := handler.parseSetupRequest(append(prefBytes, xmlGnb...))
110 assert.Equal(t, "02F829", request.GetPlmnId())
111 assert.Equal(t, "001100000011000000110000", request.GetNbId())
115 func TestParseEnGnbSetupRequest_Success(t *testing.T) {
116 enGnbXml := readXmlFile(t, EnGnbSetupRequestXmlPath)
117 handler, _, _, _, _, _ := initMocks(t)
118 prefBytes := []byte(e2SetupMsgPrefix)
119 request, _, err := handler.parseSetupRequest(append(prefBytes, enGnbXml...))
120 assert.Equal(t, "131014", request.GetPlmnId())
121 assert.Equal(t, "11000101110001101100011111111000", request.GetNbId())
125 func TestParseNgEnbSetupRequest_Success(t *testing.T) {
126 ngEnbXml := readXmlFile(t, NgEnbSetupRequestXmlPath)
127 handler, _, _, _, _, _ := initMocks(t)
128 prefBytes := []byte(e2SetupMsgPrefix)
129 request, _, err := handler.parseSetupRequest(append(prefBytes, ngEnbXml...))
130 assert.Equal(t, "131014", request.GetPlmnId())
131 assert.Equal(t, "101010101010101010", request.GetNbId())
135 func TestParseEnbSetupRequest_Success(t *testing.T) {
136 enbXml := readXmlFile(t, EnbSetupRequestXmlPath)
137 handler, _, _, _, _, _ := initMocks(t)
138 prefBytes := []byte(e2SetupMsgPrefix)
139 request, _, err := handler.parseSetupRequest(append(prefBytes, enbXml...))
140 assert.Equal(t, "6359AB", request.GetPlmnId())
141 assert.Equal(t, "101010101010101010", request.GetNbId())
145 func TestParseSetupRequest_PipFailure(t *testing.T) {
146 xmlGnb := readXmlFile(t, GnbSetupRequestXmlPath)
147 handler, _, _, _, _, _ := initMocks(t)
148 prefBytes := []byte("10.0.2.15:9999")
149 request, _, err := handler.parseSetupRequest(append(prefBytes, xmlGnb...))
150 assert.Nil(t, request)
151 assert.NotNil(t, err)
152 assert.EqualError(t, err, "#E2SetupRequestNotificationHandler.parseSetupRequest - Error parsing E2 Setup Request failed extract Payload: no | separator found")
155 func TestParseSetupRequest_UnmarshalFailure(t *testing.T) {
156 handler, _, _, _, _, _ := initMocks(t)
157 prefBytes := []byte(e2SetupMsgPrefix)
158 request, _, err := handler.parseSetupRequest(append(prefBytes, 1, 2, 3))
159 assert.Nil(t, request)
160 assert.NotNil(t, err)
161 assert.EqualError(t, err, "#E2SetupRequestNotificationHandler.parseSetupRequest - Error unmarshalling E2 Setup Request payload: 31302e302e322e31353a393939397c010203")
164 func TestE2SetupRequestNotificationHandler_HandleParseError(t *testing.T) {
165 xmlGnb := readXmlFile(t, GnbSetupRequestXmlPath)
166 handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t)
167 readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil)
168 notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append([]byte("invalid_prefix"), xmlGnb...)}
169 handler.Handle(notificationRequest)
170 readerMock.AssertNotCalled(t, "GetNodeb", mock.Anything)
171 writerMock.AssertNotCalled(t, "SaveNodeb", mock.Anything, mock.Anything)
172 routingManagerClientMock.AssertNotCalled(t, "AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything)
173 writerMock.AssertNotCalled(t, "UpdateNodebInfo", mock.Anything)
174 e2tInstancesManagerMock.AssertNotCalled(t, "AddRansToInstance", mock.Anything, mock.Anything)
175 rmrMessengerMock.AssertNotCalled(t, "SendMsg", mock.Anything, mock.Anything)
178 func TestE2SetupRequestNotificationHandler_HandleUnmarshalError(t *testing.T) {
179 handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t)
180 readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil)
181 notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append([]byte(e2SetupMsgPrefix), "xmlGnb"...)}
182 handler.Handle(notificationRequest)
183 readerMock.AssertNotCalled(t, "GetNodeb", mock.Anything)
184 writerMock.AssertNotCalled(t, "SaveNodeb", mock.Anything, mock.Anything)
185 routingManagerClientMock.AssertNotCalled(t, "AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything)
186 writerMock.AssertNotCalled(t, "UpdateNodebInfo", mock.Anything)
187 e2tInstancesManagerMock.AssertNotCalled(t, "AddRansToInstance", mock.Anything, mock.Anything)
188 rmrMessengerMock.AssertNotCalled(t, "SendMsg", mock.Anything, mock.Anything)
191 func TestE2SetupRequestNotificationHandler_ConvertTo20BitStringError(t *testing.T) {
192 xmlEnGnb := readXmlFile(t, EnGnbSetupRequestXmlPath)
193 logger := tests.InitLog(t)
194 config := &configuration.Configuration{
195 RnibRetryIntervalMs: 10,
196 MaxRnibConnectionAttempts: 3,
197 RnibWriter: configuration.RnibWriterConfig{
198 StateChangeMessageChannel: StateChangeMessageChannel,
200 GlobalRicId: struct {
204 }{Mcc: "327", Mnc: "94", RicId: "10011001101010101011"}}
205 rmrMessengerMock := &mocks.RmrMessengerMock{}
206 rmrSender := tests.InitRmrSender(rmrMessengerMock, logger)
207 readerMock := &mocks.RnibReaderMock{}
208 writerMock := &mocks.RnibWriterMock{}
209 routingManagerClientMock := &mocks.RoutingManagerClientMock{}
210 rnibDataService := services.NewRnibDataService(logger, config, readerMock, writerMock)
211 e2tInstancesManagerMock := &mocks.E2TInstancesManagerMock{}
212 ranListManager := managers.NewRanListManager(logger, rnibDataService)
213 ranAlarmService := services.NewRanAlarmService(logger, config)
214 ranConnectStatusChangeManager := managers.NewRanConnectStatusChangeManager(logger, rnibDataService, ranListManager, ranAlarmService)
216 e2tAssociationManager := managers.NewE2TAssociationManager(logger, rnibDataService, e2tInstancesManagerMock, routingManagerClientMock, ranConnectStatusChangeManager)
217 handler := NewE2SetupRequestNotificationHandler(logger, config, e2tInstancesManagerMock, rmrSender, rnibDataService, e2tAssociationManager, ranConnectStatusChangeManager, ranListManager)
218 readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil)
219 e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(&entities.E2TInstance{}, nil)
220 var gnb *entities.NodebInfo
221 readerMock.On("GetNodeb", mock.Anything).Return(gnb, common.NewResourceNotFoundError("Not found"))
222 writerMock.On("SaveNodeb", mock.Anything, mock.Anything).Return(nil)
223 writerMock.On("AddNbIdentity", entities.Node_GNB, mock.Anything).Return(nil)
224 writerMock.On("UpdateNodebInfoOnConnectionStatusInversion", mock.Anything, mock.Anything).Return(nil)
225 routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(nil)
226 writerMock.On("UpdateNodebInfo", mock.Anything).Return(nil)
227 e2tInstancesManagerMock.On("AddRansToInstance", mock.Anything, mock.Anything).Return(nil)
229 rmrMessage := &rmrCgo.MBuf{}
230 rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(rmrMessage, errEmpty)
231 prefBytes := []byte(e2SetupMsgPrefix)
232 notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append(prefBytes, xmlEnGnb...)}
233 handler.Handle(notificationRequest)
234 readerMock.AssertCalled(t, "GetNodeb", mock.Anything)
235 e2tInstancesManagerMock.AssertCalled(t, "GetE2TInstance", e2tInstanceFullAddress)
236 writerMock.AssertCalled(t, "SaveNodeb", mock.Anything, mock.Anything)
237 routingManagerClientMock.AssertCalled(t, "AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything)
238 writerMock.AssertCalled(t, "UpdateNodebInfo", mock.Anything)
239 e2tInstancesManagerMock.AssertCalled(t, "AddRansToInstance", mock.Anything, mock.Anything)
240 rmrMessengerMock.AssertNotCalled(t, "SendMsg", mock.Anything, mock.Anything)
243 func TestExtractionOfNodeTypeFromRanName(t *testing.T) {
244 handler, _, _, _, _, _ := initMocks(t)
245 validRanNames := []string{"gnb_P310_410_b5c67788", "en_gnb_P310_410_b5c67788", "ng_enB_macro_P310_410_b5c67788", "ng_enB_shortmacro_P310_410_b5c67788", "ng_enB_longmacro_P310_410_b5c67788", "enB_macro_P310_410_b5c67788", "enB_home_P310_410_b5c67788", "enB_shortmacro_P310_410_b5c67788", "enB_longmacro_P310_410_b5c67788"}
246 for _, v := range validRanNames {
247 nodeb := &entities.NodebInfo{RanName: v}
248 err := handler.setNodeTypeAndConfiguration(nodeb)
251 inValidRanNames := []string{"P310_410_b5c67788", "blabla_P310_410_b5c67788", "ng_enB-macro_P310_410_b5c67788", "ng_enb_shortmacro_P310_410_b5c67788", "ng_enB-longmacro_P310_410_b5c67788", "enB_new_macro_P310_410_b5c67788"}
252 for _, v := range inValidRanNames {
253 nodeb := &entities.NodebInfo{RanName: v}
254 err := handler.setNodeTypeAndConfiguration(nodeb)
255 assert.NotNil(t, err, v)
259 func TestE2SetupRequestNotificationHandler_GetGeneralConfigurationFailure(t *testing.T) {
260 xmlGnb := readXmlFile(t, GnbSetupRequestXmlPath)
261 handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t)
262 readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{}, common.NewInternalError(errors.New("some error")))
263 notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append([]byte(e2SetupMsgPrefix), xmlGnb...)}
264 handler.Handle(notificationRequest)
265 rmrMessengerMock.AssertNotCalled(t, "SendMsg")
266 e2tInstancesManagerMock.AssertNotCalled(t, "GetE2TInstance")
267 routingManagerClientMock.AssertNotCalled(t, "AssociateRanToE2TInstance")
268 readerMock.AssertNotCalled(t, "GetNodeb")
269 writerMock.AssertNotCalled(t, "SaveNodeb")
272 func TestE2SetupRequestNotificationHandler_EnableRicFalse(t *testing.T) {
273 xmlGnb := readXmlFile(t, GnbSetupRequestXmlPath)
274 handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t)
275 readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: false}, nil)
276 notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append([]byte(e2SetupMsgPrefix), xmlGnb...)}
277 mbuf := getMbuf(gnbNodebRanName, rmrCgo.RIC_E2_SETUP_FAILURE, E2SetupFailureResponseWithMiscCause, notificationRequest)
278 rmrMessengerMock.On("WhSendMsg", mbuf, true).Return(&rmrCgo.MBuf{}, nil)
279 handler.Handle(notificationRequest)
280 rmrMessengerMock.AssertCalled(t, "WhSendMsg", mbuf, true)
281 e2tInstancesManagerMock.AssertNotCalled(t, "GetE2TInstance")
282 routingManagerClientMock.AssertNotCalled(t, "AssociateRanToE2TInstance")
283 readerMock.AssertNotCalled(t, "GetNodeb")
284 writerMock.AssertNotCalled(t, "SaveNodeb")
287 func TestE2SetupRequestNotificationHandler_HandleGetE2TInstanceError(t *testing.T) {
288 xmlGnb := readXmlFile(t, GnbSetupRequestXmlPath)
289 handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t)
290 readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil)
291 e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(&entities.E2TInstance{}, common.NewResourceNotFoundError("Not found"))
292 prefBytes := []byte(e2SetupMsgPrefix)
293 notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append(prefBytes, xmlGnb...)}
294 handler.Handle(notificationRequest)
295 e2tInstancesManagerMock.AssertCalled(t, "GetE2TInstance", e2tInstanceFullAddress)
296 readerMock.AssertNotCalled(t, "GetNodeb", mock.Anything)
297 writerMock.AssertNotCalled(t, "SaveNodeb", mock.Anything, mock.Anything)
298 routingManagerClientMock.AssertNotCalled(t, "AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything)
299 writerMock.AssertNotCalled(t, "UpdateNodebInfo", mock.Anything)
300 e2tInstancesManagerMock.AssertNotCalled(t, "AddRansToInstance", mock.Anything, mock.Anything)
301 rmrMessengerMock.AssertNotCalled(t, "SendMsg", mock.Anything, mock.Anything)
304 func TestE2SetupRequestNotificationHandler_HandleGetNodebError(t *testing.T) {
305 xmlGnb := readXmlFile(t, GnbSetupRequestXmlPath)
306 handler, readerMock, writerMock, routingManagerClientMock, e2tInstancesManagerMock, rmrMessengerMock := initMocks(t)
307 readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil)
308 e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(&entities.E2TInstance{}, nil)
309 var gnb *entities.NodebInfo
310 readerMock.On("GetNodeb", mock.Anything).Return(gnb, common.NewInternalError(errors.New("some error")))
311 notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append([]byte(e2SetupMsgPrefix), xmlGnb...)}
312 handler.Handle(notificationRequest)
313 e2tInstancesManagerMock.AssertCalled(t, "GetE2TInstance", e2tInstanceFullAddress)
314 readerMock.AssertCalled(t, "GetNodeb", mock.Anything)
315 writerMock.AssertNotCalled(t, "SaveNodeb", mock.Anything, mock.Anything)
316 routingManagerClientMock.AssertNotCalled(t, "AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything)
317 writerMock.AssertNotCalled(t, "UpdateNodebInfo", mock.Anything)
318 e2tInstancesManagerMock.AssertNotCalled(t, "AddRansToInstance", mock.Anything, mock.Anything)
319 rmrMessengerMock.AssertNotCalled(t, "SendMsg", mock.Anything, mock.Anything)
322 /* New Ran UTs - BEGIN */
324 func TestE2SetupRequestNotificationHandler_HandleNewRanSaveNodebFailure(t *testing.T) {
325 xml := readXmlFile(t, GnbSetupRequestXmlPath)
326 handler, readerMock, writerMock, _, e2tInstancesManagerMock, _ := initMocks(t)
327 readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil)
328 e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(&entities.E2TInstance{}, nil)
329 var gnb *entities.NodebInfo
330 readerMock.On("GetNodeb", gnbNodebRanName).Return(gnb, common.NewResourceNotFoundError("Not found"))
331 notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append([]byte(e2SetupMsgPrefix), xml...)}
332 nodebInfo := getExpectedGnbNodebForNewRan(notificationRequest.Payload)
333 writerMock.On("SaveNodeb", nodebInfo).Return(common.NewInternalError(errors.New("error")))
334 handler.Handle(notificationRequest)
336 readerMock.AssertExpectations(t)
337 writerMock.AssertExpectations(t)
338 e2tInstancesManagerMock.AssertExpectations(t)
341 func TestE2SetupRequestNotificationHandler_HandleNewRan_invalidRanName(t *testing.T) {
342 xml := readXmlFile(t, EnbSetupRequestXmlPath)
343 handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, _ := initMocks(t)
344 readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil)
345 e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(&entities.E2TInstance{}, nil)
346 var enb *entities.NodebInfo
347 invalidEnbRanName := "enB-macro:P310-410-b5c67788"
348 readerMock.On("GetNodeb", invalidEnbRanName).Return(enb, common.NewResourceNotFoundError("Not found"))
349 notificationRequest := &models.NotificationRequest{RanName: invalidEnbRanName, Payload: append([]byte(e2SetupMsgPrefix), xml...)}
350 mbuf := getMbuf(invalidEnbRanName, rmrCgo.RIC_E2_SETUP_FAILURE, E2SetupFailureResponseWithRicCause, notificationRequest)
351 rmrMessengerMock.On("WhSendMsg", mbuf, true).Return(&rmrCgo.MBuf{}, nil)
352 handler.Handle(notificationRequest)
354 readerMock.AssertExpectations(t)
355 writerMock.AssertExpectations(t)
356 rmrMessengerMock.AssertCalled(t, "WhSendMsg", mbuf, true)
357 e2tInstancesManagerMock.AssertExpectations(t)
360 func TestE2SetupRequestNotificationHandler_HandleNewRanAddNbIdentityFailure(t *testing.T) {
361 xml := readXmlFile(t, GnbSetupRequestXmlPath)
362 handler, readerMock, writerMock, _, e2tInstancesManagerMock, _ := initMocks(t)
363 readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil)
364 e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(&entities.E2TInstance{}, nil)
365 var gnb *entities.NodebInfo
366 readerMock.On("GetNodeb", gnbNodebRanName).Return(gnb, common.NewResourceNotFoundError("Not found"))
367 notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append([]byte(e2SetupMsgPrefix), xml...)}
368 nodebInfo := getExpectedGnbNodebForNewRan(notificationRequest.Payload)
369 writerMock.On("SaveNodeb", nodebInfo).Return(nil)
370 nbIdentity := &entities.NbIdentity{InventoryName: gnbNodebRanName, GlobalNbId: nodebInfo.GlobalNbId}
371 writerMock.On("AddNbIdentity", entities.Node_GNB, nbIdentity).Return(common.NewInternalError(errors.New("error")))
372 handler.Handle(notificationRequest)
373 readerMock.AssertExpectations(t)
374 writerMock.AssertExpectations(t)
375 e2tInstancesManagerMock.AssertExpectations(t)
378 func TestE2SetupRequestNotificationHandler_HandleNewRanRoutingManagerError(t *testing.T) {
379 xmlGnb := readXmlFile(t, GnbSetupRequestXmlPath)
381 handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t)
382 readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil)
383 e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(&entities.E2TInstance{}, nil)
384 readerMock.On("GetNodeb", gnbNodebRanName).Return(&entities.NodebInfo{}, common.NewResourceNotFoundError("Not found"))
385 notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append([]byte(e2SetupMsgPrefix), xmlGnb...)}
386 nodebInfo := getExpectedGnbNodebForNewRan(notificationRequest.Payload)
387 writerMock.On("SaveNodeb", nodebInfo).Return(nil)
388 nbIdentity := &entities.NbIdentity{InventoryName: gnbNodebRanName, GlobalNbId: nodebInfo.GlobalNbId}
389 writerMock.On("AddNbIdentity", entities.Node_GNB, nbIdentity).Return(nil)
390 updatedNodebInfo := *nodebInfo
391 routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(errors.New("association error"))
392 updatedNodebInfo.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED
393 writerMock.On("UpdateNodebInfo", &updatedNodebInfo).Return(nil)
395 mbuf := getMbuf(gnbNodebRanName, rmrCgo.RIC_E2_SETUP_FAILURE, E2SetupFailureResponseWithTransportCause, notificationRequest)
396 rmrMessengerMock.On("WhSendMsg", mbuf, true).Return(&rmrCgo.MBuf{}, errEmpty)
397 handler.Handle(notificationRequest)
398 readerMock.AssertExpectations(t)
399 e2tInstancesManagerMock.AssertExpectations(t)
400 writerMock.AssertExpectations(t)
401 routingManagerClientMock.AssertCalled(t, "AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything)
402 e2tInstancesManagerMock.AssertExpectations(t)
403 rmrMessengerMock.AssertCalled(t, "WhSendMsg", mbuf, true)
406 func testE2SetupRequestNotificationHandler_HandleNewRanSuccess(t *testing.T, xmlPath string, nodeType entities.Node_Type) {
407 xml := readXmlFile(t, xmlPath)
409 if nodeType == entities.Node_GNB {
410 ranName = gnbNodebRanName
412 ranName = enbNodebRanName
414 handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t)
415 readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil)
416 e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(&entities.E2TInstance{}, nil)
417 var gnb *entities.NodebInfo
418 readerMock.On("GetNodeb", ranName).Return(gnb, common.NewResourceNotFoundError("Not found"))
419 notificationRequest := &models.NotificationRequest{RanName: ranName, Payload: append([]byte(e2SetupMsgPrefix), xml...)}
420 var expectedNodebInfo *entities.NodebInfo
421 if nodeType == entities.Node_GNB {
422 expectedNodebInfo = getExpectedGnbNodebForNewRan(notificationRequest.Payload)
424 expectedNodebInfo = getExpectedEnbNodebForNewRan(notificationRequest.Payload)
426 writerMock.On("SaveNodeb", expectedNodebInfo).Return(nil)
427 nbIdentity := &entities.NbIdentity{InventoryName: ranName, GlobalNbId: expectedNodebInfo.GlobalNbId}
428 writerMock.On("AddNbIdentity", nodeType, nbIdentity).Return(nil)
429 updatedNodebInfo := *expectedNodebInfo
430 updatedNodebInfo.ConnectionStatus = entities.ConnectionStatus_CONNECTED
431 writerMock.On("UpdateNodebInfoOnConnectionStatusInversion", &updatedNodebInfo, ranName+"_CONNECTED").Return(nil)
432 routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(nil)
433 updatedNodebInfo2 := *expectedNodebInfo
434 updatedNodebInfo2.ConnectionStatus = entities.ConnectionStatus_CONNECTED
435 updatedNodebInfo2.AssociatedE2TInstanceAddress = e2tInstanceFullAddress
436 writerMock.On("UpdateNodebInfo", &updatedNodebInfo2).Return(nil)
437 e2tInstancesManagerMock.On("AddRansToInstance", e2tInstanceFullAddress, []string{ranName}).Return(nil)
438 rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(&rmrCgo.MBuf{}, nil)
440 handler.Handle(notificationRequest)
442 readerMock.AssertExpectations(t)
443 writerMock.AssertExpectations(t)
444 e2tInstancesManagerMock.AssertExpectations(t)
447 func TestE2SetupRequestNotificationHandler_HandleNewGnbSuccess(t *testing.T) {
448 testE2SetupRequestNotificationHandler_HandleNewRanSuccess(t, GnbSetupRequestXmlPath, entities.Node_GNB)
451 func TestE2SetupRequestNotificationHandler_HandleNewGnbWithoutFunctionsSuccess(t *testing.T) {
452 testE2SetupRequestNotificationHandler_HandleNewRanSuccess(t, GnbWithoutFunctionsSetupRequestXmlPath, entities.Node_GNB)
455 func TestE2SetupRequestNotificationHandler_HandleNewEnGnbSuccess(t *testing.T) {
456 testE2SetupRequestNotificationHandler_HandleNewRanSuccess(t, EnGnbSetupRequestXmlPath, entities.Node_GNB)
459 func TestE2SetupRequestNotificationHandler_HandleNewNgEnbSuccess(t *testing.T) {
460 testE2SetupRequestNotificationHandler_HandleNewRanSuccess(t, NgEnbSetupRequestXmlPath, entities.Node_ENB)
463 func getExpectedGnbNodebForNewRan(payload []byte) *entities.NodebInfo {
464 pipInd := bytes.IndexByte(payload, '|')
465 setupRequest := &models.E2SetupRequestMessage{}
466 _ = xml.Unmarshal(normalizeXml(payload[pipInd+1:]), &setupRequest.E2APPDU)
468 nodeb := &entities.NodebInfo{
469 AssociatedE2TInstanceAddress: e2tInstanceFullAddress,
470 RanName: gnbNodebRanName,
471 SetupFromNetwork: true,
472 NodeType: entities.Node_GNB,
473 Configuration: &entities.NodebInfo_Gnb{
475 GnbType: entities.GnbType_GNB,
476 RanFunctions: setupRequest.ExtractRanFunctionsList(),
479 GlobalNbId: &entities.GlobalNbId{
480 PlmnId: setupRequest.GetPlmnId(),
481 NbId: setupRequest.GetNbId(),
488 func getExpectedEnbNodebForNewRan(payload []byte) *entities.NodebInfo {
489 pipInd := bytes.IndexByte(payload, '|')
490 setupRequest := &models.E2SetupRequestMessage{}
491 _ = xml.Unmarshal(normalizeXml(payload[pipInd+1:]), &setupRequest.E2APPDU)
493 nodeb := &entities.NodebInfo{
494 AssociatedE2TInstanceAddress: e2tInstanceFullAddress,
495 RanName: enbNodebRanName,
496 SetupFromNetwork: true,
497 NodeType: entities.Node_ENB,
498 Configuration: &entities.NodebInfo_Enb{
500 EnbType: entities.EnbType_MACRO_ENB,
503 GlobalNbId: &entities.GlobalNbId{
504 PlmnId: setupRequest.GetPlmnId(),
505 NbId: setupRequest.GetNbId(),
512 /* New Ran UTs - END */
514 /* Existing Ran UTs - BEGIN */
516 func getExpectedNodebForExistingRan(nodeb entities.NodebInfo, payload []byte) *entities.NodebInfo {
517 pipInd := bytes.IndexByte(payload, '|')
518 setupRequest := &models.E2SetupRequestMessage{}
519 _ = xml.Unmarshal(normalizeXml(payload[pipInd+1:]), &setupRequest.E2APPDU)
521 if nodeb.NodeType == entities.Node_ENB {
525 if ranFuncs := setupRequest.ExtractRanFunctionsList(); ranFuncs != nil {
526 nodeb.GetGnb().RanFunctions = ranFuncs
531 func TestE2SetupRequestNotificationHandler_HandleExistingConnectedEnbSuccess(t *testing.T) {
532 xmlEnb := readXmlFile(t, EnbSetupRequestXmlPath)
533 handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t)
534 readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil)
535 e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(&entities.E2TInstance{}, nil)
536 var nodebInfo = &entities.NodebInfo{
537 RanName: enbNodebRanName,
538 AssociatedE2TInstanceAddress: e2tInstanceFullAddress,
539 ConnectionStatus: entities.ConnectionStatus_CONNECTED,
540 NodeType: entities.Node_ENB,
541 Configuration: &entities.NodebInfo_Enb{Enb: &entities.Enb{}},
544 readerMock.On("GetNodeb", enbNodebRanName).Return(nodebInfo, nil)
545 routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(nil)
547 notificationRequest := &models.NotificationRequest{RanName: enbNodebRanName, Payload: append([]byte(e2SetupMsgPrefix), xmlEnb...)}
548 enbToUpdate := getExpectedNodebForExistingRan(*nodebInfo, notificationRequest.Payload)
550 writerMock.On("UpdateNodebInfo", enbToUpdate).Return(nil)
551 e2tInstancesManagerMock.On("AddRansToInstance", e2tInstanceFullAddress, []string{enbNodebRanName}).Return(nil)
553 rmrMessengerMock.On("SendMsg", mock.Anything, true).Return(&rmrCgo.MBuf{}, errEmpty)
554 handler.Handle(notificationRequest)
555 readerMock.AssertExpectations(t)
556 writerMock.AssertExpectations(t)
557 e2tInstancesManagerMock.AssertExpectations(t)
558 rmrMessengerMock.AssertCalled(t, "SendMsg", mock.Anything, true)
561 func TestE2SetupRequestNotificationHandler_HandleExistingDisconnectedEnbSuccess(t *testing.T) {
562 xmlEnb := readXmlFile(t, EnbSetupRequestXmlPath)
563 handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t)
564 readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil)
565 e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(&entities.E2TInstance{}, nil)
566 var nodebInfo = &entities.NodebInfo{
567 RanName: enbNodebRanName,
568 AssociatedE2TInstanceAddress: e2tInstanceFullAddress,
569 ConnectionStatus: entities.ConnectionStatus_DISCONNECTED,
570 NodeType: entities.Node_ENB,
571 Configuration: &entities.NodebInfo_Enb{Enb: &entities.Enb{}},
574 readerMock.On("GetNodeb", enbNodebRanName).Return(nodebInfo, nil)
575 routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(nil)
577 notificationRequest := &models.NotificationRequest{RanName: enbNodebRanName, Payload: append([]byte(e2SetupMsgPrefix), xmlEnb...)}
578 enbToUpdate := getExpectedNodebForExistingRan(*nodebInfo, notificationRequest.Payload)
580 enbToUpdate2 := *enbToUpdate
581 enbToUpdate2.ConnectionStatus = entities.ConnectionStatus_CONNECTED
582 writerMock.On("UpdateNodebInfoOnConnectionStatusInversion", &enbToUpdate2, enbNodebRanName+"_CONNECTED").Return(nil)
583 enbToUpdate3 := *enbToUpdate
584 enbToUpdate3.ConnectionStatus = entities.ConnectionStatus_CONNECTED
585 enbToUpdate3.AssociatedE2TInstanceAddress = e2tInstanceFullAddress
586 writerMock.On("UpdateNodebInfo", &enbToUpdate3).Return(nil)
587 e2tInstancesManagerMock.On("AddRansToInstance", e2tInstanceFullAddress, []string{enbNodebRanName}).Return(nil)
589 rmrMessengerMock.On("SendMsg", mock.Anything, true).Return(&rmrCgo.MBuf{}, errEmpty)
590 handler.Handle(notificationRequest)
591 readerMock.AssertExpectations(t)
592 writerMock.AssertExpectations(t)
593 e2tInstancesManagerMock.AssertExpectations(t)
594 rmrMessengerMock.AssertCalled(t, "SendMsg", mock.Anything, true)
597 func testE2SetupRequestNotificationHandler_HandleExistingConnectedGnbSuccess(t *testing.T, withFunctions bool) {
601 xmlGnb = readXmlFile(t, GnbSetupRequestXmlPath)
604 xmlGnb = readXmlFile(t, GnbWithoutFunctionsSetupRequestXmlPath)
606 handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t)
607 readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil)
608 e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(&entities.E2TInstance{}, nil)
609 var nodebInfo = &entities.NodebInfo{
610 RanName: gnbNodebRanName,
611 AssociatedE2TInstanceAddress: e2tInstanceFullAddress,
612 ConnectionStatus: entities.ConnectionStatus_CONNECTED,
613 NodeType: entities.Node_GNB,
614 Configuration: &entities.NodebInfo_Gnb{Gnb: &entities.Gnb{}},
618 gnb := nodebInfo.GetGnb()
619 gnb.RanFunctions = []*entities.RanFunction{{RanFunctionId: 2, RanFunctionRevision: 2}}
622 readerMock.On("GetNodeb", gnbNodebRanName).Return(nodebInfo, nil)
623 routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(nil)
625 notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append([]byte(e2SetupMsgPrefix), xmlGnb...)}
626 gnbToUpdate := getExpectedNodebForExistingRan(*nodebInfo, notificationRequest.Payload)
628 writerMock.On("UpdateNodebInfo", gnbToUpdate).Return(nil)
630 writerMock.On("UpdateNodebInfoAndPublish", gnbToUpdate).Return(nil)
632 e2tInstancesManagerMock.On("AddRansToInstance", e2tInstanceFullAddress, []string{gnbNodebRanName}).Return(nil)
634 rmrMessengerMock.On("SendMsg", mock.Anything, true).Return(&rmrCgo.MBuf{}, errEmpty)
635 handler.Handle(notificationRequest)
636 readerMock.AssertExpectations(t)
637 writerMock.AssertExpectations(t)
638 e2tInstancesManagerMock.AssertExpectations(t)
639 rmrMessengerMock.AssertCalled(t, "SendMsg", mock.Anything, true)
642 func TestE2SetupRequestNotificationHandler_HandleExistingConnectedGnbRoutingManagerError(t *testing.T) {
643 xmlGnb := readXmlFile(t, GnbSetupRequestXmlPath)
644 handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t)
645 readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil)
646 e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(&entities.E2TInstance{}, nil)
647 var nodebInfo = &entities.NodebInfo{
648 RanName: gnbNodebRanName,
649 AssociatedE2TInstanceAddress: e2tInstanceFullAddress,
650 ConnectionStatus: entities.ConnectionStatus_CONNECTED,
651 NodeType: entities.Node_GNB,
652 Configuration: &entities.NodebInfo_Gnb{Gnb: &entities.Gnb{}},
655 gnb := nodebInfo.GetGnb()
656 gnb.RanFunctions = []*entities.RanFunction{{RanFunctionId: 2, RanFunctionRevision: 2}}
658 readerMock.On("GetNodeb", gnbNodebRanName).Return(nodebInfo, nil)
659 routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(errors.New("association error"))
661 notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append([]byte(e2SetupMsgPrefix), xmlGnb...)}
662 gnbToUpdate := getExpectedNodebForExistingRan(*nodebInfo, notificationRequest.Payload)
664 gnbToUpdate2 := *gnbToUpdate
665 gnbToUpdate2.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED
666 writerMock.On("UpdateNodebInfoOnConnectionStatusInversion", &gnbToUpdate2, gnbNodebRanName+"_DISCONNECTED").Return(nil)
669 rmrMessengerMock.On("WhSendMsg", mock.Anything, true).Return(&rmrCgo.MBuf{}, errEmpty)
670 handler.Handle(notificationRequest)
671 readerMock.AssertExpectations(t)
672 writerMock.AssertExpectations(t)
673 e2tInstancesManagerMock.AssertExpectations(t)
674 rmrMessengerMock.AssertCalled(t, "WhSendMsg", mock.Anything, true)
677 func TestE2SetupRequestNotificationHandler_HandleExistingGnbInvalidConnectionStatusError(t *testing.T) {
678 xmlGnb := readXmlFile(t, GnbSetupRequestXmlPath)
679 handler, readerMock, writerMock, _, e2tInstancesManagerMock, rmrMessengerMock := initMocks(t)
680 var gnb = &entities.NodebInfo{RanName: gnbNodebRanName, ConnectionStatus: entities.ConnectionStatus_SHUTTING_DOWN}
681 readerMock.On("GetNodeb", gnbNodebRanName).Return(gnb, nil)
682 readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil)
683 e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(&entities.E2TInstance{}, nil)
684 prefBytes := []byte(e2SetupMsgPrefix)
685 notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append(prefBytes, xmlGnb...)}
686 handler.Handle(notificationRequest)
687 readerMock.AssertExpectations(t)
688 writerMock.AssertExpectations(t)
689 e2tInstancesManagerMock.AssertExpectations(t)
690 rmrMessengerMock.AssertNotCalled(t, "SendMsg", mock.Anything, mock.Anything)
693 func TestE2SetupRequestNotificationHandler_HandleExistingConnectedGnbWithoutFunctionsSuccess(t *testing.T) {
694 testE2SetupRequestNotificationHandler_HandleExistingConnectedGnbSuccess(t, false)
697 func TestE2SetupRequestNotificationHandler_HandleExistingConnectedGnbWithFunctionsSuccess(t *testing.T) {
698 testE2SetupRequestNotificationHandler_HandleExistingConnectedGnbSuccess(t, true)
701 func TestE2SetupRequestNotificationHandler_HandleExistingDisconnectedGnbSuccess(t *testing.T) {
702 xmlGnb := readXmlFile(t, GnbSetupRequestXmlPath)
703 handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t)
704 readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil)
705 e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(&entities.E2TInstance{}, nil)
706 var nodebInfo = &entities.NodebInfo{
707 RanName: gnbNodebRanName,
708 AssociatedE2TInstanceAddress: e2tInstanceFullAddress,
709 ConnectionStatus: entities.ConnectionStatus_DISCONNECTED,
710 NodeType: entities.Node_GNB,
711 Configuration: &entities.NodebInfo_Gnb{Gnb: &entities.Gnb{}},
714 readerMock.On("GetNodeb", gnbNodebRanName).Return(nodebInfo, nil)
715 routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(nil)
717 notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append([]byte(e2SetupMsgPrefix), xmlGnb...)}
718 gnbToUpdate := getExpectedNodebForExistingRan(*nodebInfo, notificationRequest.Payload)
719 gnbToUpdate2 := *gnbToUpdate
720 gnbToUpdate2.ConnectionStatus = entities.ConnectionStatus_CONNECTED
721 writerMock.On("UpdateNodebInfoOnConnectionStatusInversion", &gnbToUpdate2, gnbNodebRanName+"_CONNECTED").Return(nil)
722 gnbToUpdate3 := *gnbToUpdate
723 gnbToUpdate3.ConnectionStatus = entities.ConnectionStatus_CONNECTED
724 gnbToUpdate3.AssociatedE2TInstanceAddress = e2tInstanceFullAddress
725 writerMock.On("UpdateNodebInfo", &gnbToUpdate3).Return(nil)
726 e2tInstancesManagerMock.On("AddRansToInstance", e2tInstanceFullAddress, []string{gnbNodebRanName}).Return(nil)
728 rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(&rmrCgo.MBuf{}, errEmpty)
729 handler.Handle(notificationRequest)
730 readerMock.AssertExpectations(t)
731 writerMock.AssertExpectations(t)
732 e2tInstancesManagerMock.AssertExpectations(t)
735 /* Existing Ran UTs - END */