import (
"e2mgr/logger"
"e2mgr/models"
+ "e2mgr/rmrCgo"
"e2mgr/services"
"e2mgr/services/rmrsender"
"e2mgr/utils"
return
}
e.updateE2nodeConfig(e2NodeConfig, nodebInfo)
+ e.handleSuccessfulResponse(e2NodeConfig, request, nodebInfo)
}
func (e *E2nodeConfigUpdateNotificationHandler) updateE2nodeConfig(e2nodeConfig *models.E2nodeConfigurationUpdateMessage, nodebInfo *entities.NodebInfo) {
e.logger.Debugf("#E2nodeConfigUpdateNotificationHandler.Handle - Unmarshalling is successful %v", e2nodeConfig.E2APPDU.InitiatingMessage.ProcedureCode)
return &e2nodeConfig, nil
}
+
+func (e *E2nodeConfigUpdateNotificationHandler) handleSuccessfulResponse(e2NodeConfigUpdate *models.E2nodeConfigurationUpdateMessage, request *models.NotificationRequest, nodebInfo *entities.NodebInfo) error {
+ e2nodeConfigUpdateResp := models.NewE2nodeConfigurationUpdateSuccessResponseMessage(e2NodeConfigUpdate)
+ payLoad, err := xml.Marshal(e2nodeConfigUpdateResp)
+ if err != nil {
+ e.logger.Errorf("#E2nodeConfigUpdateNotificationHandler.sendUpdateAck - Error marshalling RIC_SERVICE_UPDATE_ACK. Payload: %s", payLoad)
+ }
+
+ payLoad = utils.ReplaceEmptyTagsWithSelfClosing(payLoad, toReplaceTags)
+ e.logger.Infof("#E2nodeConfigUpdateNotificationHandler.sendUpdateAck - Sending RIC_SERVICE_UPDATE_ACK to RAN name: %s with payload %s", nodebInfo.RanName, payLoad)
+ msg := models.NewRmrMessage(rmrCgo.RIC_SERVICE_UPDATE_ACK, nodebInfo.RanName, payLoad, request.TransactionId, request.GetMsgSrc())
+ err = e.rmrSender.Send(msg)
+ return err
+}
"e2mgr/configuration"
"e2mgr/mocks"
"e2mgr/models"
+ "e2mgr/rmrCgo"
"e2mgr/services"
"e2mgr/tests"
"e2mgr/utils"
func TestE2nodeConfigUpdatetNotificationHandler(t *testing.T) {
e2NodeConfigUpdateXml := utils.ReadXmlFile(t, E2nodeConfigUpdateOnlyAdditionXmlPath)
- handler, readerMock, writerMock, _ := initE2nodeConfigMocks(t)
+ handler, readerMock, writerMock, rmrMessengerMock := initE2nodeConfigMocks(t)
var nodebInfo = &entities.NodebInfo{
RanName: gnbNodebRanName,
AssociatedE2TInstanceAddress: e2tInstanceFullAddress,
}
readerMock.On("GetNodeb", gnbNodebRanName).Return(nodebInfo, nil)
writerMock.On("UpdateNodebInfoAndPublish", mock.Anything).Return(nil)
+ var errEmpty error
+ rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(&rmrCgo.MBuf{}, errEmpty)
notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append([]byte(""), e2NodeConfigUpdateXml...)}
handler.Handle(notificationRequest)
readerMock.AssertExpectations(t)
func TestHandleAddAndUpdateConfig(t *testing.T) {
e2NodeConfigUpdateXml := utils.ReadXmlFile(t, E2nodeConfigUpdateOnlyAdditionAndUpdateXmlPath)
- handler, readerMock, writerMock, _ := initE2nodeConfigMocks(t)
+ handler, readerMock, writerMock, rmrMessengerMock := initE2nodeConfigMocks(t)
var nodebInfo = &entities.NodebInfo{
RanName: gnbNodebRanName,
AssociatedE2TInstanceAddress: e2tInstanceFullAddress,
}
readerMock.On("GetNodeb", gnbNodebRanName).Return(nodebInfo, nil)
writerMock.On("UpdateNodebInfoAndPublish", mock.Anything).Return(nil)
+ var errEmpty error
+ rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(&rmrCgo.MBuf{}, errEmpty)
notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append([]byte(""), e2NodeConfigUpdateXml...)}
func TestHandleAddandDeleteConfig(t *testing.T) {
e2NodeConfigUpdateXml := utils.ReadXmlFile(t, E2nodeConfigUpdateXmlPath)
- handler, readerMock, writerMock, _ := initE2nodeConfigMocks(t)
+ handler, readerMock, writerMock, rmrMessengerMock := initE2nodeConfigMocks(t)
var nodebInfo = &entities.NodebInfo{
RanName: gnbNodebRanName,
AssociatedE2TInstanceAddress: e2tInstanceFullAddress,
}
readerMock.On("GetNodeb", gnbNodebRanName).Return(nodebInfo, nil)
writerMock.On("UpdateNodebInfoAndPublish", mock.Anything).Return(nil)
+ var errEmpty error
+ rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(&rmrCgo.MBuf{}, errEmpty)
notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append([]byte(""), e2NodeConfigUpdateXml...)}