2 // Copyright 2019 AT&T Intellectual Property
3 // Copyright 2019 Nokia
4 // Copyright (c) 2020 Samsung Electronics Co., Ltd. All Rights Reserved.
6 // Licensed under the Apache License, Version 2.0 (the "License");
7 // you may not use this file except in compliance with the License.
8 // You may obtain a copy of the License at
10 // http://www.apache.org/licenses/LICENSE-2.0
12 // Unless required by applicable law or agreed to in writing, software
13 // distributed under the License is distributed on an "AS IS" BASIS,
14 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 // See the License for the specific language governing permissions and
16 // limitations under the License.
18 // This source code is part of the near-RT RIC (RAN Intelligent Controller)
19 // platform project (RICP).
21 package rmrmsghandlers
35 "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
36 "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
37 "github.com/stretchr/testify/assert"
38 "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/setupRequest_gnb.xml"
48 GnbWithZeroFunctionsSetupRequestXmlPath = "../../tests/resources/setupRequest/setupRequest_gnb_with_zero_functions.xml"
49 EnGnbSetupRequestXmlPath = "../../tests/resources/setupRequest/setupRequest_en-gNB.xml"
50 NgEnbSetupRequestXmlPath = "../../tests/resources/setupRequest/setupRequest_ng-eNB.xml"
51 EnbSetupRequestXmlPath = "../../tests/resources/setupRequest/setupRequest_enb.xml"
52 GnbWithoutFunctionsSetupRequestXmlPath = "../../tests/resources/setupRequest/setupRequest_gnb_without_functions.xml"
53 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>"
54 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>"
55 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>"
56 StateChangeMessageChannel = "RAN_CONNECTION_STATUS_CHANGE"
59 func initMocks(t *testing.T) (*E2SetupRequestNotificationHandler, *mocks.RnibReaderMock, *mocks.RnibWriterMock, *mocks.RmrMessengerMock, *mocks.E2TInstancesManagerMock, *mocks.RoutingManagerClientMock, managers.RanListManager) {
60 logger := tests.InitLog(t)
61 config := &configuration.Configuration{
62 RnibRetryIntervalMs: 10,
63 MaxRnibConnectionAttempts: 3,
64 RnibWriter: configuration.RnibWriterConfig{
65 StateChangeMessageChannel: StateChangeMessageChannel,
71 }{Mcc: "327", Mnc: "94", RicId: "AACCE"}}
72 rmrMessengerMock := &mocks.RmrMessengerMock{}
73 rmrSender := tests.InitRmrSender(rmrMessengerMock, logger)
74 readerMock := &mocks.RnibReaderMock{}
75 writerMock := &mocks.RnibWriterMock{}
76 routingManagerClientMock := &mocks.RoutingManagerClientMock{}
77 rnibDataService := services.NewRnibDataService(logger, config, readerMock, writerMock)
78 e2tInstancesManagerMock := &mocks.E2TInstancesManagerMock{}
79 ranListManager := managers.NewRanListManager(logger, rnibDataService)
80 ranAlarmService := services.NewRanAlarmService(logger, config)
81 ranConnectStatusChangeManager := managers.NewRanConnectStatusChangeManager(logger, rnibDataService, ranListManager, ranAlarmService)
82 e2tAssociationManager := managers.NewE2TAssociationManager(logger, rnibDataService, e2tInstancesManagerMock, routingManagerClientMock, ranConnectStatusChangeManager)
83 handler := NewE2SetupRequestNotificationHandler(logger, config, e2tInstancesManagerMock, rmrSender, rnibDataService, e2tAssociationManager, ranConnectStatusChangeManager, ranListManager)
84 return handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock, ranListManager
87 func getMbuf(ranName string, msgType int, payloadStr string, request *models.NotificationRequest) *rmrCgo.MBuf {
88 payload := []byte(payloadStr)
89 mbuf := rmrCgo.NewMBuf(msgType, len(payload), ranName, &payload, &request.TransactionId, request.GetMsgSrc())
93 func TestParseGnbSetupRequest_Success(t *testing.T) {
94 xmlGnb := utils.ReadXmlFile(t, GnbSetupRequestXmlPath)
95 handler, _, _, _, _, _, _ := initMocks(t)
96 prefBytes := []byte(e2SetupMsgPrefix)
97 request, _, err := handler.parseSetupRequest(append(prefBytes, xmlGnb...))
98 assert.Equal(t, "02F829", request.GetPlmnId())
99 assert.Equal(t, "001100000011000000110000", request.GetNbId())
103 func TestParseEnGnbSetupRequest_Success(t *testing.T) {
104 enGnbXml := utils.ReadXmlFile(t, EnGnbSetupRequestXmlPath)
105 handler, _, _, _, _, _, _ := initMocks(t)
106 prefBytes := []byte(e2SetupMsgPrefix)
107 request, _, err := handler.parseSetupRequest(append(prefBytes, enGnbXml...))
108 assert.Equal(t, "131014", request.GetPlmnId())
109 assert.Equal(t, "11000101110001101100011111111000", request.GetNbId())
113 func TestParseNgEnbSetupRequest_Success(t *testing.T) {
114 ngEnbXml := utils.ReadXmlFile(t, NgEnbSetupRequestXmlPath)
115 handler, _, _, _, _, _, _ := initMocks(t)
116 prefBytes := []byte(e2SetupMsgPrefix)
117 request, _, err := handler.parseSetupRequest(append(prefBytes, ngEnbXml...))
118 assert.Equal(t, "131014", request.GetPlmnId())
119 assert.Equal(t, "101010101010101010", request.GetNbId())
123 func TestParseEnbSetupRequest_Success(t *testing.T) {
124 enbXml := utils.ReadXmlFile(t, EnbSetupRequestXmlPath)
125 handler, _, _, _, _, _, _ := initMocks(t)
126 prefBytes := []byte(e2SetupMsgPrefix)
127 request, _, err := handler.parseSetupRequest(append(prefBytes, enbXml...))
128 assert.Equal(t, "6359AB", request.GetPlmnId())
129 assert.Equal(t, "101010101010101010", request.GetNbId())
133 func TestParseSetupRequest_PipFailure(t *testing.T) {
134 xmlGnb := utils.ReadXmlFile(t, GnbSetupRequestXmlPath)
135 handler, _, _, _, _, _, _ := initMocks(t)
136 prefBytes := []byte("10.0.2.15:9999")
137 request, _, err := handler.parseSetupRequest(append(prefBytes, xmlGnb...))
138 assert.Nil(t, request)
139 assert.NotNil(t, err)
140 assert.EqualError(t, err, "#E2SetupRequestNotificationHandler.parseSetupRequest - Error parsing E2 Setup Request failed extract Payload: no | separator found")
143 func TestParseSetupRequest_UnmarshalFailure(t *testing.T) {
144 handler, _, _, _, _, _, _ := initMocks(t)
145 prefBytes := []byte(e2SetupMsgPrefix)
146 request, _, err := handler.parseSetupRequest(append(prefBytes, 1, 2, 3))
147 assert.Nil(t, request)
148 assert.NotNil(t, err)
149 assert.EqualError(t, err, "#E2SetupRequestNotificationHandler.parseSetupRequest - Error unmarshalling E2 Setup Request payload: 31302e302e322e31353a393939397c010203")
152 func TestE2SetupRequestNotificationHandler_HandleParseError(t *testing.T) {
153 xmlGnb := utils.ReadXmlFile(t, GnbSetupRequestXmlPath)
154 handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock, _ := initMocks(t)
155 readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil)
156 notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append([]byte("invalid_prefix"), xmlGnb...)}
157 handler.Handle(notificationRequest)
158 readerMock.AssertNotCalled(t, "GetNodeb", mock.Anything)
159 writerMock.AssertNotCalled(t, "SaveNodeb", mock.Anything, mock.Anything)
160 routingManagerClientMock.AssertNotCalled(t, "AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything)
161 writerMock.AssertNotCalled(t, "UpdateNodebInfo", mock.Anything)
162 e2tInstancesManagerMock.AssertNotCalled(t, "AddRansToInstance", mock.Anything, mock.Anything)
163 rmrMessengerMock.AssertNotCalled(t, "SendMsg", mock.Anything, mock.Anything)
166 func TestE2SetupRequestNotificationHandler_HandleUnmarshalError(t *testing.T) {
167 handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock, _ := initMocks(t)
168 readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil)
169 notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append([]byte(e2SetupMsgPrefix), "xmlGnb"...)}
170 handler.Handle(notificationRequest)
171 readerMock.AssertNotCalled(t, "GetNodeb", mock.Anything)
172 writerMock.AssertNotCalled(t, "SaveNodeb", mock.Anything, mock.Anything)
173 routingManagerClientMock.AssertNotCalled(t, "AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything)
174 writerMock.AssertNotCalled(t, "UpdateNodebInfo", mock.Anything)
175 e2tInstancesManagerMock.AssertNotCalled(t, "AddRansToInstance", mock.Anything, mock.Anything)
176 rmrMessengerMock.AssertNotCalled(t, "SendMsg", mock.Anything, mock.Anything)
179 func TestE2SetupRequestNotificationHandler_ConvertTo20BitStringError(t *testing.T) {
180 xmlEnGnb := utils.ReadXmlFile(t, EnGnbSetupRequestXmlPath)
181 logger := tests.InitLog(t)
182 config := &configuration.Configuration{
183 RnibRetryIntervalMs: 10,
184 MaxRnibConnectionAttempts: 3,
185 RnibWriter: configuration.RnibWriterConfig{
186 StateChangeMessageChannel: StateChangeMessageChannel,
188 GlobalRicId: struct {
192 }{Mcc: "327", Mnc: "94", RicId: "10011001101010101011"}}
193 rmrMessengerMock := &mocks.RmrMessengerMock{}
194 rmrSender := tests.InitRmrSender(rmrMessengerMock, logger)
195 readerMock := &mocks.RnibReaderMock{}
196 writerMock := &mocks.RnibWriterMock{}
197 routingManagerClientMock := &mocks.RoutingManagerClientMock{}
198 rnibDataService := services.NewRnibDataService(logger, config, readerMock, writerMock)
199 e2tInstancesManagerMock := &mocks.E2TInstancesManagerMock{}
200 ranListManager := managers.NewRanListManager(logger, rnibDataService)
201 ranAlarmService := services.NewRanAlarmService(logger, config)
202 ranConnectStatusChangeManager := managers.NewRanConnectStatusChangeManager(logger, rnibDataService, ranListManager, ranAlarmService)
204 e2tAssociationManager := managers.NewE2TAssociationManager(logger, rnibDataService, e2tInstancesManagerMock, routingManagerClientMock, ranConnectStatusChangeManager)
205 handler := NewE2SetupRequestNotificationHandler(logger, config, e2tInstancesManagerMock, rmrSender, rnibDataService, e2tAssociationManager, ranConnectStatusChangeManager, ranListManager)
206 readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil)
207 e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(&entities.E2TInstance{}, nil)
208 var gnb *entities.NodebInfo
209 readerMock.On("GetNodeb", mock.Anything).Return(gnb, common.NewResourceNotFoundError("Not found"))
210 writerMock.On("SaveNodeb", mock.Anything, mock.Anything).Return(nil)
211 writerMock.On("AddNbIdentity", entities.Node_GNB, mock.Anything).Return(nil)
212 writerMock.On("UpdateNodebInfoOnConnectionStatusInversion", mock.Anything, mock.Anything).Return(nil)
213 routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(nil)
214 writerMock.On("UpdateNodebInfo", mock.Anything).Return(nil)
215 writerMock.On("UpdateNbIdentities", mock.Anything, mock.Anything, mock.Anything).Return(nil)
216 e2tInstancesManagerMock.On("AddRansToInstance", mock.Anything, mock.Anything).Return(nil)
218 rmrMessage := &rmrCgo.MBuf{}
219 rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(rmrMessage, errEmpty)
220 prefBytes := []byte(e2SetupMsgPrefix)
221 notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append(prefBytes, xmlEnGnb...)}
222 handler.Handle(notificationRequest)
223 readerMock.AssertCalled(t, "GetNodeb", mock.Anything)
224 e2tInstancesManagerMock.AssertCalled(t, "GetE2TInstance", e2tInstanceFullAddress)
225 writerMock.AssertCalled(t, "SaveNodeb", mock.Anything, mock.Anything)
226 routingManagerClientMock.AssertCalled(t, "AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything)
227 writerMock.AssertCalled(t, "UpdateNodebInfo", mock.Anything)
228 e2tInstancesManagerMock.AssertCalled(t, "AddRansToInstance", mock.Anything, mock.Anything)
229 rmrMessengerMock.AssertNotCalled(t, "SendMsg", mock.Anything, mock.Anything)
232 func TestExtractionOfNodeTypeFromRanName(t *testing.T) {
233 handler, _, _, _, _, _, _ := initMocks(t)
234 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"}
235 for _, v := range validRanNames {
236 nodeb := &entities.NodebInfo{RanName: v}
237 err := handler.setNodeTypeAndConfiguration(nodeb)
240 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"}
241 for _, v := range inValidRanNames {
242 nodeb := &entities.NodebInfo{RanName: v}
243 err := handler.setNodeTypeAndConfiguration(nodeb)
244 assert.NotNil(t, err, v)
248 func TestE2SetupRequestNotificationHandler_GetGeneralConfigurationFailure(t *testing.T) {
249 xmlGnb := utils.ReadXmlFile(t, GnbSetupRequestXmlPath)
250 handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock, _ := initMocks(t)
251 readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{}, common.NewInternalError(errors.New("some error")))
252 notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append([]byte(e2SetupMsgPrefix), xmlGnb...)}
253 handler.Handle(notificationRequest)
254 rmrMessengerMock.AssertNotCalled(t, "SendMsg")
255 e2tInstancesManagerMock.AssertNotCalled(t, "GetE2TInstance")
256 routingManagerClientMock.AssertNotCalled(t, "AssociateRanToE2TInstance")
257 readerMock.AssertNotCalled(t, "GetNodeb")
258 writerMock.AssertNotCalled(t, "SaveNodeb")
261 func TestE2SetupRequestNotificationHandler_EnableRicFalse(t *testing.T) {
262 xmlGnb := utils.ReadXmlFile(t, GnbSetupRequestXmlPath)
263 handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock, _ := initMocks(t)
264 readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: false}, nil)
265 notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append([]byte(e2SetupMsgPrefix), xmlGnb...)}
266 mbuf := getMbuf(gnbNodebRanName, rmrCgo.RIC_E2_SETUP_FAILURE, E2SetupFailureResponseWithMiscCause, notificationRequest)
267 rmrMessengerMock.On("WhSendMsg", mbuf, true).Return(&rmrCgo.MBuf{}, nil)
268 handler.Handle(notificationRequest)
269 rmrMessengerMock.AssertCalled(t, "WhSendMsg", mbuf, true)
270 e2tInstancesManagerMock.AssertNotCalled(t, "GetE2TInstance")
271 routingManagerClientMock.AssertNotCalled(t, "AssociateRanToE2TInstance")
272 readerMock.AssertNotCalled(t, "GetNodeb")
273 writerMock.AssertNotCalled(t, "SaveNodeb")
276 func TestE2SetupRequestNotificationHandler_HandleGetE2TInstanceError(t *testing.T) {
277 xmlGnb := utils.ReadXmlFile(t, GnbSetupRequestXmlPath)
278 handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock, _ := initMocks(t)
279 readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil)
280 e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(&entities.E2TInstance{}, common.NewResourceNotFoundError("Not found"))
281 prefBytes := []byte(e2SetupMsgPrefix)
282 notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append(prefBytes, xmlGnb...)}
283 handler.Handle(notificationRequest)
284 e2tInstancesManagerMock.AssertCalled(t, "GetE2TInstance", e2tInstanceFullAddress)
285 readerMock.AssertNotCalled(t, "GetNodeb", mock.Anything)
286 writerMock.AssertNotCalled(t, "SaveNodeb", mock.Anything, mock.Anything)
287 routingManagerClientMock.AssertNotCalled(t, "AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything)
288 writerMock.AssertNotCalled(t, "UpdateNodebInfo", mock.Anything)
289 e2tInstancesManagerMock.AssertNotCalled(t, "AddRansToInstance", mock.Anything, mock.Anything)
290 rmrMessengerMock.AssertNotCalled(t, "SendMsg", mock.Anything, mock.Anything)
293 func TestE2SetupRequestNotificationHandler_HandleGetNodebError(t *testing.T) {
294 xmlGnb := utils.ReadXmlFile(t, GnbSetupRequestXmlPath)
295 handler, readerMock, writerMock, routingManagerClientMock, e2tInstancesManagerMock, rmrMessengerMock, _ := initMocks(t)
296 readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil)
297 e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(&entities.E2TInstance{}, nil)
298 var gnb *entities.NodebInfo
299 readerMock.On("GetNodeb", mock.Anything).Return(gnb, common.NewInternalError(errors.New("some error")))
300 notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append([]byte(e2SetupMsgPrefix), xmlGnb...)}
301 handler.Handle(notificationRequest)
302 e2tInstancesManagerMock.AssertCalled(t, "GetE2TInstance", e2tInstanceFullAddress)
303 readerMock.AssertCalled(t, "GetNodeb", mock.Anything)
304 writerMock.AssertNotCalled(t, "SaveNodeb", mock.Anything, mock.Anything)
305 routingManagerClientMock.AssertNotCalled(t, "AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything)
306 writerMock.AssertNotCalled(t, "UpdateNodebInfo", mock.Anything)
307 e2tInstancesManagerMock.AssertNotCalled(t, "AddRansToInstance", mock.Anything, mock.Anything)
308 rmrMessengerMock.AssertNotCalled(t, "SendMsg", mock.Anything, mock.Anything)
311 /* New Ran UTs - BEGIN */
313 func TestE2SetupRequestNotificationHandler_HandleNewRanSaveNodebFailure(t *testing.T) {
314 xml := utils.ReadXmlFile(t, GnbSetupRequestXmlPath)
315 handler, readerMock, writerMock, _, e2tInstancesManagerMock, _, _ := initMocks(t)
316 readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil)
317 e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(&entities.E2TInstance{}, nil)
318 var gnb *entities.NodebInfo
319 readerMock.On("GetNodeb", gnbNodebRanName).Return(gnb, common.NewResourceNotFoundError("Not found"))
320 notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append([]byte(e2SetupMsgPrefix), xml...)}
321 nodebInfo := getExpectedGnbNodebForNewRan(notificationRequest.Payload)
322 writerMock.On("SaveNodeb", nodebInfo).Return(common.NewInternalError(errors.New("error")))
323 handler.Handle(notificationRequest)
325 readerMock.AssertExpectations(t)
326 writerMock.AssertExpectations(t)
327 e2tInstancesManagerMock.AssertExpectations(t)
330 func TestE2SetupRequestNotificationHandler_HandleNewRan_invalidRanName(t *testing.T) {
331 xml := utils.ReadXmlFile(t, EnbSetupRequestXmlPath)
332 handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, _, _ := initMocks(t)
333 readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil)
334 e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(&entities.E2TInstance{}, nil)
335 var enb *entities.NodebInfo
336 invalidEnbRanName := "enB-macro:P310-410-b5c67788"
337 readerMock.On("GetNodeb", invalidEnbRanName).Return(enb, common.NewResourceNotFoundError("Not found"))
338 notificationRequest := &models.NotificationRequest{RanName: invalidEnbRanName, Payload: append([]byte(e2SetupMsgPrefix), xml...)}
339 mbuf := getMbuf(invalidEnbRanName, rmrCgo.RIC_E2_SETUP_FAILURE, E2SetupFailureResponseWithRicCause, notificationRequest)
340 rmrMessengerMock.On("WhSendMsg", mbuf, true).Return(&rmrCgo.MBuf{}, nil)
341 handler.Handle(notificationRequest)
343 readerMock.AssertExpectations(t)
344 writerMock.AssertExpectations(t)
345 rmrMessengerMock.AssertCalled(t, "WhSendMsg", mbuf, true)
346 e2tInstancesManagerMock.AssertExpectations(t)
349 func TestE2SetupRequestNotificationHandler_HandleNewRanAddNbIdentityFailure(t *testing.T) {
350 xml := utils.ReadXmlFile(t, GnbSetupRequestXmlPath)
351 handler, readerMock, writerMock, _, e2tInstancesManagerMock, _, _ := initMocks(t)
352 readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil)
353 e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(&entities.E2TInstance{}, nil)
354 var gnb *entities.NodebInfo
355 readerMock.On("GetNodeb", gnbNodebRanName).Return(gnb, common.NewResourceNotFoundError("Not found"))
356 notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append([]byte(e2SetupMsgPrefix), xml...)}
357 nodebInfo := getExpectedGnbNodebForNewRan(notificationRequest.Payload)
358 writerMock.On("SaveNodeb", nodebInfo).Return(nil)
359 nbIdentity := &entities.NbIdentity{InventoryName: gnbNodebRanName, GlobalNbId: nodebInfo.GlobalNbId}
360 writerMock.On("AddNbIdentity", entities.Node_GNB, nbIdentity).Return(common.NewInternalError(errors.New("error")))
361 handler.Handle(notificationRequest)
362 readerMock.AssertExpectations(t)
363 writerMock.AssertExpectations(t)
364 e2tInstancesManagerMock.AssertExpectations(t)
367 func TestE2SetupRequestNotificationHandler_HandleNewRanRoutingManagerError(t *testing.T) {
368 xmlGnb := utils.ReadXmlFile(t, GnbSetupRequestXmlPath)
370 handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock, _ := initMocks(t)
371 readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil)
372 e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(&entities.E2TInstance{}, nil)
373 readerMock.On("GetNodeb", gnbNodebRanName).Return(&entities.NodebInfo{}, common.NewResourceNotFoundError("Not found"))
374 notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append([]byte(e2SetupMsgPrefix), xmlGnb...)}
375 nodebInfo := getExpectedGnbNodebForNewRan(notificationRequest.Payload)
376 writerMock.On("SaveNodeb", nodebInfo).Return(nil)
377 nbIdentity := &entities.NbIdentity{InventoryName: gnbNodebRanName, GlobalNbId: nodebInfo.GlobalNbId}
378 writerMock.On("AddNbIdentity", entities.Node_GNB, nbIdentity).Return(nil)
379 updatedNodebInfo := *nodebInfo
380 routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(errors.New("association error"))
381 updatedNodebInfo.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED
382 writerMock.On("UpdateNodebInfo", &updatedNodebInfo).Return(nil)
383 writerMock.On("UpdateNbIdentities", mock.Anything, mock.Anything, mock.Anything).Return(nil)
385 mbuf := getMbuf(gnbNodebRanName, rmrCgo.RIC_E2_SETUP_FAILURE, E2SetupFailureResponseWithTransportCause, notificationRequest)
386 rmrMessengerMock.On("WhSendMsg", mbuf, true).Return(&rmrCgo.MBuf{}, errEmpty)
387 handler.Handle(notificationRequest)
388 readerMock.AssertExpectations(t)
389 e2tInstancesManagerMock.AssertExpectations(t)
390 writerMock.AssertExpectations(t)
391 routingManagerClientMock.AssertCalled(t, "AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything)
392 e2tInstancesManagerMock.AssertExpectations(t)
393 rmrMessengerMock.AssertCalled(t, "WhSendMsg", mbuf, true)
396 func testE2SetupRequestNotificationHandler_HandleNewRanSuccess(t *testing.T, xmlPath string, nodeType entities.Node_Type) {
397 xml := utils.ReadXmlFile(t, xmlPath)
399 if nodeType == entities.Node_GNB {
400 ranName = gnbNodebRanName
402 ranName = enbNodebRanName
404 handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock, _ := initMocks(t)
405 readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil)
406 e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(&entities.E2TInstance{}, nil)
407 var gnb *entities.NodebInfo
408 readerMock.On("GetNodeb", ranName).Return(gnb, common.NewResourceNotFoundError("Not found"))
409 notificationRequest := &models.NotificationRequest{RanName: ranName, Payload: append([]byte(e2SetupMsgPrefix), xml...)}
410 var expectedNodebInfo *entities.NodebInfo
411 if nodeType == entities.Node_GNB {
412 expectedNodebInfo = getExpectedGnbNodebForNewRan(notificationRequest.Payload)
414 expectedNodebInfo = getExpectedEnbNodebForNewRan(notificationRequest.Payload)
416 writerMock.On("SaveNodeb", expectedNodebInfo).Return(nil)
417 nbIdentity := &entities.NbIdentity{InventoryName: ranName, GlobalNbId: expectedNodebInfo.GlobalNbId}
418 writerMock.On("AddNbIdentity", nodeType, nbIdentity).Return(nil)
419 updatedNodebInfo := *expectedNodebInfo
420 updatedNodebInfo.ConnectionStatus = entities.ConnectionStatus_CONNECTED
421 writerMock.On("UpdateNodebInfoOnConnectionStatusInversion", &updatedNodebInfo, ranName+"_CONNECTED").Return(nil)
422 routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(nil)
423 updatedNodebInfo2 := *expectedNodebInfo
424 updatedNodebInfo2.ConnectionStatus = entities.ConnectionStatus_CONNECTED
425 updatedNodebInfo2.AssociatedE2TInstanceAddress = e2tInstanceFullAddress
426 writerMock.On("UpdateNodebInfo", &updatedNodebInfo2).Return(nil)
428 newNbIdentity := &entities.NbIdentity{InventoryName: ranName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, GlobalNbId: expectedNodebInfo.GlobalNbId}
429 writerMock.On("UpdateNbIdentities", updatedNodebInfo2.GetNodeType(), []*entities.NbIdentity{nbIdentity}, []*entities.NbIdentity{newNbIdentity}).Return(nil)
431 e2tInstancesManagerMock.On("AddRansToInstance", e2tInstanceFullAddress, []string{ranName}).Return(nil)
432 rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(&rmrCgo.MBuf{}, nil)
434 handler.Handle(notificationRequest)
436 readerMock.AssertExpectations(t)
437 writerMock.AssertExpectations(t)
438 e2tInstancesManagerMock.AssertExpectations(t)
441 func TestE2SetupRequestNotificationHandler_HandleNewGnbSuccess(t *testing.T) {
442 testE2SetupRequestNotificationHandler_HandleNewRanSuccess(t, GnbSetupRequestXmlPath, entities.Node_GNB)
445 func TestE2SetupRequestNotificationHandler_HandleNewGnbWithoutFunctionsSuccess(t *testing.T) {
446 testE2SetupRequestNotificationHandler_HandleNewRanSuccess(t, GnbWithoutFunctionsSetupRequestXmlPath, entities.Node_GNB)
449 func TestE2SetupRequestNotificationHandler_HandleNewEnGnbSuccess(t *testing.T) {
450 testE2SetupRequestNotificationHandler_HandleNewRanSuccess(t, EnGnbSetupRequestXmlPath, entities.Node_GNB)
453 func TestE2SetupRequestNotificationHandler_HandleNewNgEnbSuccess(t *testing.T) {
454 testE2SetupRequestNotificationHandler_HandleNewRanSuccess(t, NgEnbSetupRequestXmlPath, entities.Node_ENB)
457 func getExpectedGnbNodebForNewRan(payload []byte) *entities.NodebInfo {
458 pipInd := bytes.IndexByte(payload, '|')
459 setupRequest := &models.E2SetupRequestMessage{}
460 _ = xml.Unmarshal(utils.NormalizeXml(payload[pipInd+1:]), &setupRequest.E2APPDU)
462 nodeb := &entities.NodebInfo{
463 AssociatedE2TInstanceAddress: e2tInstanceFullAddress,
464 RanName: gnbNodebRanName,
465 SetupFromNetwork: true,
466 NodeType: entities.Node_GNB,
467 Configuration: &entities.NodebInfo_Gnb{
469 GnbType: entities.GnbType_GNB,
470 RanFunctions: setupRequest.ExtractRanFunctionsList(),
473 GlobalNbId: &entities.GlobalNbId{
474 PlmnId: setupRequest.GetPlmnId(),
475 NbId: setupRequest.GetNbId(),
482 func getExpectedEnbNodebForNewRan(payload []byte) *entities.NodebInfo {
483 pipInd := bytes.IndexByte(payload, '|')
484 setupRequest := &models.E2SetupRequestMessage{}
485 _ = xml.Unmarshal(utils.NormalizeXml(payload[pipInd+1:]), &setupRequest.E2APPDU)
487 nodeb := &entities.NodebInfo{
488 AssociatedE2TInstanceAddress: e2tInstanceFullAddress,
489 RanName: enbNodebRanName,
490 SetupFromNetwork: true,
491 NodeType: entities.Node_ENB,
492 Configuration: &entities.NodebInfo_Enb{
494 EnbType: entities.EnbType_MACRO_ENB,
497 GlobalNbId: &entities.GlobalNbId{
498 PlmnId: setupRequest.GetPlmnId(),
499 NbId: setupRequest.GetNbId(),
506 /* New Ran UTs - END */
508 /* Existing Ran UTs - BEGIN */
510 func getExpectedNodebForExistingRan(nodeb *entities.NodebInfo, payload []byte) *entities.NodebInfo {
511 pipInd := bytes.IndexByte(payload, '|')
512 setupRequest := &models.E2SetupRequestMessage{}
513 _ = xml.Unmarshal(utils.NormalizeXml(payload[pipInd+1:]), &setupRequest.E2APPDU)
517 if nodeb.NodeType == entities.Node_ENB {
521 if ranFuncs := setupRequest.ExtractRanFunctionsList(); ranFuncs != nil {
522 updatedGnb := *nodeb.GetGnb()
523 updatedGnb.RanFunctions = ranFuncs
524 nb.Configuration =&entities.NodebInfo_Gnb{Gnb: &updatedGnb}
530 func TestE2SetupRequestNotificationHandler_HandleExistingConnectedEnbSuccess(t *testing.T) {
531 xmlEnb := utils.ReadXmlFile(t, EnbSetupRequestXmlPath)
532 handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock, ranListManager := initMocks(t)
534 oldNbIdentity := &entities.NbIdentity{InventoryName: enbNodebRanName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, GlobalNbId: &entities.GlobalNbId{PlmnId: "plmnId1", NbId: "nbId1"}}
535 readerMock.On("GetListNodebIds").Return([]*entities.NbIdentity{oldNbIdentity}, nil)
537 err := ranListManager.InitNbIdentityMap()
539 t.Errorf("Error cannot init identity")
541 readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil)
542 e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(&entities.E2TInstance{}, nil)
543 var nodebInfo = &entities.NodebInfo{
544 RanName: enbNodebRanName,
545 AssociatedE2TInstanceAddress: e2tInstanceFullAddress,
546 ConnectionStatus: entities.ConnectionStatus_CONNECTED,
547 NodeType: entities.Node_ENB,
548 Configuration: &entities.NodebInfo_Enb{Enb: &entities.Enb{}},
551 readerMock.On("GetNodeb", enbNodebRanName).Return(nodebInfo, nil)
552 routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(nil)
554 notificationRequest := &models.NotificationRequest{RanName: enbNodebRanName, Payload: append([]byte(e2SetupMsgPrefix), xmlEnb...)}
555 enbToUpdate := getExpectedNodebForExistingRan(nodebInfo, notificationRequest.Payload)
556 enbToUpdate.SetupFromNetwork = true
557 newNbIdentity := &entities.NbIdentity{InventoryName: enbNodebRanName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, GlobalNbId: &entities.GlobalNbId{PlmnId: "plmnId1", NbId: "nbId1"}}
558 writerMock.On("UpdateNbIdentities", enbToUpdate.GetNodeType(), []*entities.NbIdentity{oldNbIdentity}, []*entities.NbIdentity{newNbIdentity}).Return(nil)
559 writerMock.On("UpdateNodebInfo", enbToUpdate).Return(nil)
560 e2tInstancesManagerMock.On("AddRansToInstance", e2tInstanceFullAddress, []string{enbNodebRanName}).Return(nil)
562 rmrMessengerMock.On("SendMsg", mock.Anything, true).Return(&rmrCgo.MBuf{}, errEmpty)
563 handler.Handle(notificationRequest)
564 readerMock.AssertExpectations(t)
565 writerMock.AssertExpectations(t)
566 e2tInstancesManagerMock.AssertExpectations(t)
567 rmrMessengerMock.AssertCalled(t, "SendMsg", mock.Anything, true)
570 func TestE2SetupRequestNotificationHandler_HandleExistingDisconnectedEnbSuccess(t *testing.T) {
571 xmlEnb := utils.ReadXmlFile(t, EnbSetupRequestXmlPath)
572 handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock, ranListManager := initMocks(t)
574 oldNbIdentity := &entities.NbIdentity{InventoryName: enbNodebRanName, ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, GlobalNbId: &entities.GlobalNbId{PlmnId: "plmnId1", NbId: "nbId1"}}
575 readerMock.On("GetListNodebIds").Return([]*entities.NbIdentity{oldNbIdentity}, nil)
576 err := ranListManager.InitNbIdentityMap()
578 t.Errorf("Error cannot init identity")
581 readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil)
582 e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(&entities.E2TInstance{}, nil)
583 var nodebInfo = &entities.NodebInfo{
584 RanName: enbNodebRanName,
585 AssociatedE2TInstanceAddress: e2tInstanceFullAddress,
586 ConnectionStatus: entities.ConnectionStatus_DISCONNECTED,
587 NodeType: entities.Node_ENB,
588 Configuration: &entities.NodebInfo_Enb{Enb: &entities.Enb{}},
591 readerMock.On("GetNodeb", enbNodebRanName).Return(nodebInfo, nil)
592 routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(nil)
594 notificationRequest := &models.NotificationRequest{RanName: enbNodebRanName, Payload: append([]byte(e2SetupMsgPrefix), xmlEnb...)}
595 enbToUpdate := getExpectedNodebForExistingRan(nodebInfo, notificationRequest.Payload)
597 enbToUpdate2 := *enbToUpdate
598 enbToUpdate2.ConnectionStatus = entities.ConnectionStatus_CONNECTED
599 enbToUpdate2.SetupFromNetwork = true
600 writerMock.On("UpdateNodebInfoOnConnectionStatusInversion", &enbToUpdate2, enbNodebRanName+"_CONNECTED").Return(nil)
602 newNbIdentity := &entities.NbIdentity{InventoryName: enbNodebRanName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, GlobalNbId: &entities.GlobalNbId{PlmnId: "plmnId1", NbId: "nbId1"}}
603 writerMock.On("UpdateNbIdentities", enbToUpdate.GetNodeType(), []*entities.NbIdentity{oldNbIdentity}, []*entities.NbIdentity{newNbIdentity}).Return(nil)
605 enbToUpdate3 := *enbToUpdate
606 enbToUpdate3.ConnectionStatus = entities.ConnectionStatus_CONNECTED
607 enbToUpdate3.SetupFromNetwork = true
608 enbToUpdate3.AssociatedE2TInstanceAddress = e2tInstanceFullAddress
609 writerMock.On("UpdateNodebInfo", &enbToUpdate3).Return(nil)
610 e2tInstancesManagerMock.On("AddRansToInstance", e2tInstanceFullAddress, []string{enbNodebRanName}).Return(nil)
612 rmrMessengerMock.On("SendMsg", mock.Anything, true).Return(&rmrCgo.MBuf{}, errEmpty)
613 handler.Handle(notificationRequest)
614 readerMock.AssertExpectations(t)
615 writerMock.AssertExpectations(t)
616 e2tInstancesManagerMock.AssertExpectations(t)
617 rmrMessengerMock.AssertCalled(t, "SendMsg", mock.Anything, true)
620 func testE2SetupRequestNotificationHandler_HandleExistingConnectedGnbSuccess(t *testing.T, withFunctions bool, xmlToRead string) {
621 xmlGnb := utils.ReadXmlFile(t, xmlToRead)
622 handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock, ranListManager := initMocks(t)
624 oldNbIdentity := &entities.NbIdentity{InventoryName: gnbNodebRanName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, GlobalNbId: &entities.GlobalNbId{PlmnId: "plmnId1", NbId: "nbId1"}}
625 readerMock.On("GetListNodebIds").Return([]*entities.NbIdentity{oldNbIdentity}, nil)
626 err := ranListManager.InitNbIdentityMap()
628 t.Errorf("Error cannot init identity")
631 readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil)
632 e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(&entities.E2TInstance{}, nil)
633 var nodebInfo = &entities.NodebInfo{
634 RanName: gnbNodebRanName,
635 AssociatedE2TInstanceAddress: e2tInstanceFullAddress,
636 ConnectionStatus: entities.ConnectionStatus_CONNECTED,
637 NodeType: entities.Node_GNB,
638 Configuration: &entities.NodebInfo_Gnb{Gnb: &entities.Gnb{}},
642 gnb := nodebInfo.GetGnb()
643 gnb.RanFunctions = []*entities.RanFunction{{RanFunctionId: 2, RanFunctionRevision: 2}}
646 readerMock.On("GetNodeb", gnbNodebRanName).Return(nodebInfo, nil)
647 routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(nil)
649 notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append([]byte(e2SetupMsgPrefix), xmlGnb...)}
650 gnbToUpdate := getExpectedNodebForExistingRan(nodebInfo, notificationRequest.Payload)
651 gnbToUpdate.SetupFromNetwork = true
652 writerMock.On("UpdateNodebInfo", gnbToUpdate).Return(nil)
654 writerMock.On("UpdateNodebInfoAndPublish", gnbToUpdate).Return(nil)
656 newNbIdentity := &entities.NbIdentity{InventoryName: gnbNodebRanName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, GlobalNbId: &entities.GlobalNbId{PlmnId: "plmnId1", NbId: "nbId1"}}
657 writerMock.On("UpdateNbIdentities", gnbToUpdate.GetNodeType(), []*entities.NbIdentity{oldNbIdentity}, []*entities.NbIdentity{newNbIdentity}).Return(nil)
659 e2tInstancesManagerMock.On("AddRansToInstance", e2tInstanceFullAddress, []string{gnbNodebRanName}).Return(nil)
661 rmrMessengerMock.On("SendMsg", mock.Anything, true).Return(&rmrCgo.MBuf{}, errEmpty)
662 handler.Handle(notificationRequest)
663 readerMock.AssertExpectations(t)
664 writerMock.AssertExpectations(t)
665 e2tInstancesManagerMock.AssertExpectations(t)
666 rmrMessengerMock.AssertCalled(t, "SendMsg", mock.Anything, true)
669 func TestE2SetupRequestNotificationHandler_HandleExistingConnectedGnbRoutingManagerError(t *testing.T) {
670 xmlGnb := utils.ReadXmlFile(t, GnbSetupRequestXmlPath)
671 handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock, ranListManager := initMocks(t)
672 readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil)
673 e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(&entities.E2TInstance{}, nil)
674 var nodebInfo = &entities.NodebInfo{
675 RanName: gnbNodebRanName,
676 AssociatedE2TInstanceAddress: e2tInstanceFullAddress,
677 ConnectionStatus: entities.ConnectionStatus_CONNECTED,
678 NodeType: entities.Node_GNB,
679 Configuration: &entities.NodebInfo_Gnb{Gnb: &entities.Gnb{}},
681 oldNbIdentity := &entities.NbIdentity{InventoryName: gnbNodebRanName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, GlobalNbId: &entities.GlobalNbId{PlmnId: "plmnId1", NbId: "nbId1"}}
682 readerMock.On("GetListNodebIds").Return([]*entities.NbIdentity{oldNbIdentity}, nil)
683 err := ranListManager.InitNbIdentityMap()
685 t.Errorf("Error cannot init identity")
688 gnb := nodebInfo.GetGnb()
689 gnb.RanFunctions = []*entities.RanFunction{{RanFunctionId: 2, RanFunctionRevision: 2}}
691 readerMock.On("GetNodeb", gnbNodebRanName).Return(nodebInfo, nil)
692 routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(errors.New("association error"))
694 notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append([]byte(e2SetupMsgPrefix), xmlGnb...)}
695 gnbToUpdate := getExpectedNodebForExistingRan(nodebInfo, notificationRequest.Payload)
697 gnbToUpdate2 := *gnbToUpdate
698 gnbToUpdate2.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED
699 gnbToUpdate2.SetupFromNetwork = true
700 writerMock.On("UpdateNodebInfoOnConnectionStatusInversion", &gnbToUpdate2, gnbNodebRanName+"_DISCONNECTED").Return(nil)
702 newNbIdentity := &entities.NbIdentity{InventoryName: gnbNodebRanName, ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, GlobalNbId: &entities.GlobalNbId{PlmnId: "plmnId1", NbId: "nbId1"}}
703 writerMock.On("UpdateNbIdentities", gnbToUpdate2.GetNodeType(), []*entities.NbIdentity{oldNbIdentity}, []*entities.NbIdentity{newNbIdentity}).Return(nil)
705 rmrMessengerMock.On("WhSendMsg", mock.Anything, true).Return(&rmrCgo.MBuf{}, errEmpty)
706 handler.Handle(notificationRequest)
707 readerMock.AssertExpectations(t)
708 writerMock.AssertExpectations(t)
709 e2tInstancesManagerMock.AssertExpectations(t)
710 rmrMessengerMock.AssertCalled(t, "WhSendMsg", mock.Anything, true)
713 func TestE2SetupRequestNotificationHandler_HandleExistingGnbInvalidConnectionStatusError(t *testing.T) {
714 xmlGnb := utils.ReadXmlFile(t, GnbSetupRequestXmlPath)
715 handler, readerMock, writerMock, _, e2tInstancesManagerMock, rmrMessengerMock, _ := initMocks(t)
716 var gnb = &entities.NodebInfo{RanName: gnbNodebRanName, ConnectionStatus: entities.ConnectionStatus_SHUTTING_DOWN}
717 readerMock.On("GetNodeb", gnbNodebRanName).Return(gnb, nil)
718 readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil)
719 e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(&entities.E2TInstance{}, nil)
720 prefBytes := []byte(e2SetupMsgPrefix)
721 notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append(prefBytes, xmlGnb...)}
722 handler.Handle(notificationRequest)
723 readerMock.AssertExpectations(t)
724 writerMock.AssertExpectations(t)
725 e2tInstancesManagerMock.AssertExpectations(t)
726 rmrMessengerMock.AssertNotCalled(t, "SendMsg", mock.Anything, mock.Anything)
729 func TestE2SetupRequestNotificationHandler_HandleExistingConnectedGnbWithoutFunctionsSuccess(t *testing.T) {
730 testE2SetupRequestNotificationHandler_HandleExistingConnectedGnbSuccess(t, false, GnbWithoutFunctionsSetupRequestXmlPath)
733 func TestE2SetupRequestNotificationHandler_HandleExistingConnectedGnbWithFunctionsSuccess(t *testing.T) {
734 testE2SetupRequestNotificationHandler_HandleExistingConnectedGnbSuccess(t, true, GnbSetupRequestXmlPath)
737 func TestE2SetupRequestNotificationHandler_HandleExistingConnectedGnbWithZeroFunctionsSuccess(t *testing.T) {
738 testE2SetupRequestNotificationHandler_HandleExistingConnectedGnbSuccess(t, true, GnbWithZeroFunctionsSetupRequestXmlPath)
741 func TestE2SetupRequestNotificationHandler_HandleExistingDisconnectedGnbSuccess(t *testing.T) {
742 xmlGnb := utils.ReadXmlFile(t, GnbSetupRequestXmlPath)
743 handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock, ranListManager := initMocks(t)
744 oldNbIdentity := &entities.NbIdentity{InventoryName: gnbNodebRanName, ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, GlobalNbId: &entities.GlobalNbId{PlmnId: "plmnId1", NbId: "nbId1"}}
745 readerMock.On("GetListNodebIds").Return([]*entities.NbIdentity{oldNbIdentity}, nil)
746 err := ranListManager.InitNbIdentityMap()
748 t.Errorf("Error cannot init identity")
751 readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil)
752 e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(&entities.E2TInstance{}, nil)
753 var nodebInfo = &entities.NodebInfo{
754 RanName: gnbNodebRanName,
755 AssociatedE2TInstanceAddress: e2tInstanceFullAddress,
756 ConnectionStatus: entities.ConnectionStatus_DISCONNECTED,
757 NodeType: entities.Node_GNB,
758 Configuration: &entities.NodebInfo_Gnb{Gnb: &entities.Gnb{}},
761 readerMock.On("GetNodeb", gnbNodebRanName).Return(nodebInfo, nil)
762 routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(nil)
764 notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append([]byte(e2SetupMsgPrefix), xmlGnb...)}
765 gnbToUpdate := getExpectedNodebForExistingRan(nodebInfo, notificationRequest.Payload)
766 gnbToUpdate2 := *gnbToUpdate
767 gnbToUpdate2.ConnectionStatus = entities.ConnectionStatus_CONNECTED
768 gnbToUpdate2.SetupFromNetwork = true
769 writerMock.On("UpdateNodebInfoOnConnectionStatusInversion", &gnbToUpdate2, gnbNodebRanName+"_CONNECTED").Return(nil)
770 gnbToUpdate3 := *gnbToUpdate
771 gnbToUpdate3.ConnectionStatus = entities.ConnectionStatus_CONNECTED
772 gnbToUpdate3.SetupFromNetwork = true
773 gnbToUpdate3.AssociatedE2TInstanceAddress = e2tInstanceFullAddress
774 writerMock.On("UpdateNodebInfo", &gnbToUpdate3).Return(nil)
776 newNbIdentity := &entities.NbIdentity{InventoryName: gnbNodebRanName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, GlobalNbId: &entities.GlobalNbId{PlmnId: "plmnId1", NbId: "nbId1"}}
777 writerMock.On("UpdateNbIdentities", gnbToUpdate3.GetNodeType(), []*entities.NbIdentity{oldNbIdentity}, []*entities.NbIdentity{newNbIdentity}).Return(nil)
779 e2tInstancesManagerMock.On("AddRansToInstance", e2tInstanceFullAddress, []string{gnbNodebRanName}).Return(nil)
781 rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(&rmrCgo.MBuf{}, errEmpty)
782 handler.Handle(notificationRequest)
783 readerMock.AssertExpectations(t)
784 writerMock.AssertExpectations(t)
785 e2tInstancesManagerMock.AssertExpectations(t)
788 /* Existing Ran UTs - END */