}
h.logger.Infof("#E2SetupRequestNotificationHandler.Handle - E2T Address: %s - handling E2_SETUP_REQUEST", e2tIpAddress)
+ h.logger.Debugf("#E2SetupRequestNotificationHandler.Handle - E2_SETUP_REQUEST has been parsed successfully %+v", setupRequest)
_, err = h.e2tInstancesManager.GetE2TInstance(e2tIpAddress)
return
}
}
+ nodebInfo.ConnectionStatus = entities.ConnectionStatus_CONNECTED
err = h.e2tAssociationManager.AssociateRan(e2tIpAddress, nodebInfo)
if err != nil{
h.logger.Errorf("#E2SetupRequestNotificationHandler.Handle - RAN name: %s - failed to associate E2T to nodeB entity. Error: %s", ranName, err)
successResponse.SetRicId(h.config.GlobalRicId.RicNearRtId)
successResponse.SetExtractRanFunctionsIDList(setupRequest)
responsePayload, err := xml.Marshal(&successResponse.E2APPDU)
+ h.logger.Debugf("#E2SetupRequestNotificationHandler.Handle - E2_SETUP_RESPONSE has been built successfully %+v", successResponse)
if err != nil{
h.logger.Warnf("#E2SetupRequestNotificationHandler.Handle - RAN name: %s - Error marshalling E2 Setup Response. Response: %x", ranName, responsePayload)
func (h E2SetupRequestNotificationHandler) parseSetupRequest(payload []byte)(*models.E2SetupRequestMessage, string, error){
- colonInd := bytes.IndexByte(payload, ':')
- if colonInd < 0 {
- return nil, "", errors.New("#E2SetupRequestNotificationHandler.parseSetupRequest - Error parsing E2 Setup Request, failed extract E2T IP Address: no ':' separator found")
- }
-
- e2tIpAddress := string(payload[:colonInd])
- if len(e2tIpAddress) == 0 {
- return nil, "", errors.New("#E2SetupRequestNotificationHandler.parseSetupRequest - Empty E2T Address received")
- }
-
pipInd := bytes.IndexByte(payload, '|')
if pipInd < 0 {
return nil, "", errors.New( "#E2SetupRequestNotificationHandler.parseSetupRequest - Error parsing E2 Setup Request failed extract Payload: no | separator found")
}
+ e2tIpAddress := string(payload[:pipInd])
+ if len(e2tIpAddress) == 0 {
+ return nil, "", errors.New("#E2SetupRequestNotificationHandler.parseSetupRequest - Empty E2T Address received")
+ }
setupRequest := &models.E2SetupRequestMessage{}
err := xml.Unmarshal(payload[pipInd + 1:], &setupRequest.E2APPDU)
if err != nil {
const (
prefix = "10.0.2.15:9999|"
logFilePath = "./loggerTest.txt"
- e2tInstanceAddress = "10.0.2.15"
+ e2tInstanceFullAddress = "10.0.2.15:9999"
nodebRanName = "gnb:310-410-b5c67788"
)
assert.Equal(t, request.GetNbId(), "10110101110001100111011110001000")
}
-func TestParseSetupRequest_ColonFailure(t *testing.T){
- path, err :=filepath.Abs("../../tests/resources/setupRequest_gnb.xml")
- if err != nil {
- t.Fatal(err)
- }
- xmlGnb, err := ioutil.ReadFile(path)
- if err != nil {
- t.Fatal(err)
- }
- handler := stubMockSuccessFlowNewNodeb(t)
- prefBytes := []byte("10.0.2.15;9999|")
- request, _, err := handler.parseSetupRequest(append(prefBytes, xmlGnb...))
- assert.Nil(t, request)
- assert.NotNil(t, err)
- assert.EqualError(t, err, "#E2SetupRequestNotificationHandler.parseSetupRequest - Error parsing E2 Setup Request, failed extract E2T IP Address: no ':' separator found")
-}
-
func TestParseSetupRequest_PipFailure(t *testing.T){
path, err :=filepath.Abs("../../tests/resources/setupRequest_gnb.xml")
if err != nil {
_, handler, _, _, _, e2tInstancesManagerMock, _ := initMocks(t)
var e2tInstance * entities.E2TInstance
- e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceAddress).Return(e2tInstance, common.NewResourceNotFoundError("Not found"))
+ e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(e2tInstance, common.NewResourceNotFoundError("Not found"))
prefBytes := []byte(prefix)
notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append(prefBytes, xmlGnb...)}
handler.Handle(notificationRequest)
os.Stdout = logFile
_, handler, readerMock, _, _, e2tInstancesManagerMock, _ := initMocks(t)
var e2tInstance = &entities.E2TInstance{}
- e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceAddress).Return(e2tInstance, nil)
+ e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(e2tInstance, nil)
var gnb *entities.NodebInfo
readerMock.On("GetNodeb", mock.Anything).Return(gnb, common.NewInternalError(errors.New("Some error")))
prefBytes := []byte(prefix)
_, handler, readerMock, writerMock, _, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t)
var e2tInstance = &entities.E2TInstance{}
- e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceAddress).Return(e2tInstance, nil)
+ e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(e2tInstance, nil)
var gnb *entities.NodebInfo
readerMock.On("GetNodeb", mock.Anything).Return(gnb, common.NewResourceNotFoundError("Not found"))
writerMock.On("SaveNodeb", mock.Anything, mock.Anything).Return(nil)
- routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceAddress, mock.Anything).Return(errors.New("association error"))
+ routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(errors.New("association error"))
prefBytes := []byte(prefix)
notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append(prefBytes, xmlGnb...)}
func stubMockSuccessFlowNewNodeb(t *testing.T) E2SetupRequestNotificationHandler{
_, handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t)
var e2tInstance = &entities.E2TInstance{}
- e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceAddress).Return(e2tInstance, nil)
+ e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(e2tInstance, nil)
var gnb *entities.NodebInfo
readerMock.On("GetNodeb", mock.Anything).Return(gnb, common.NewResourceNotFoundError("Not found"))
writerMock.On("SaveNodeb", mock.Anything, mock.Anything).Return(nil)
- routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceAddress, mock.Anything).Return(nil)
+ routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(nil)
writerMock.On("UpdateNodebInfo", mock.Anything).Return(nil)
e2tInstancesManagerMock.On("AddRansToInstance", mock.Anything, mock.Anything).Return(nil)
var err error
func stubMockSuccessFlowExistingNodeb(t *testing.T) E2SetupRequestNotificationHandler{
_, handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t)
var e2tInstance = &entities.E2TInstance{}
- e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceAddress).Return(e2tInstance, nil)
+ e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(e2tInstance, nil)
var gnb = &entities.NodebInfo{
RanName: nodebRanName,
AssociatedE2TInstanceAddress: e2tAddress,
Configuration: &entities.NodebInfo_Gnb{Gnb: &entities.Gnb{}},
}
readerMock.On("GetNodeb", mock.Anything).Return(gnb, nil)
- routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceAddress, mock.Anything).Return(nil)
+ routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(nil)
writerMock.On("UpdateNodebInfo", mock.Anything).Return(nil)
e2tInstancesManagerMock.On("AddRansToInstance", mock.Anything, mock.Anything).Return(nil)
var err error
func stubMockInvalidStatusFlowExistingNodeb(t *testing.T) E2SetupRequestNotificationHandler{
_, handler, readerMock, _, _, e2tInstancesManagerMock, _ := initMocks(t)
var e2tInstance = &entities.E2TInstance{}
- e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceAddress).Return(e2tInstance, nil)
+ e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(e2tInstance, nil)
var gnb = &entities.NodebInfo{RanName: nodebRanName, ConnectionStatus:entities.ConnectionStatus_SHUTTING_DOWN}
readerMock.On("GetNodeb", mock.Anything).Return(gnb, nil)
return handler