From ca265f6ea96500b9a01e2b13e76b162a4c557297 Mon Sep 17 00:00:00 2001 From: ns019t Date: Thu, 26 Mar 2020 18:37:30 +0200 Subject: [PATCH] RIC-193 - Setup from RAN: E2T instance port and status fix Change-Id: I4fdf9f613fa5fd90365904bb848673181f3d8653 Signed-off-by: ns019t --- .../e2_setup_request_notification_handler.go | 17 ++++------ .../e2_setup_request_notification_handler_test.go | 37 ++++++---------------- .../e2_term_init_notification_handler_test.go | 5 ++- 3 files changed, 21 insertions(+), 38 deletions(-) diff --git a/E2Manager/handlers/rmrmsghandlers/e2_setup_request_notification_handler.go b/E2Manager/handlers/rmrmsghandlers/e2_setup_request_notification_handler.go index f40636b..90a417c 100644 --- a/E2Manager/handlers/rmrmsghandlers/e2_setup_request_notification_handler.go +++ b/E2Manager/handlers/rmrmsghandlers/e2_setup_request_notification_handler.go @@ -67,6 +67,7 @@ func (h E2SetupRequestNotificationHandler) Handle(request *models.NotificationRe } 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) @@ -106,6 +107,7 @@ func (h E2SetupRequestNotificationHandler) Handle(request *models.NotificationRe 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) @@ -116,6 +118,7 @@ func (h E2SetupRequestNotificationHandler) Handle(request *models.NotificationRe 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) @@ -127,21 +130,15 @@ func (h E2SetupRequestNotificationHandler) Handle(request *models.NotificationRe 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 { diff --git a/E2Manager/handlers/rmrmsghandlers/e2_setup_request_notification_handler_test.go b/E2Manager/handlers/rmrmsghandlers/e2_setup_request_notification_handler_test.go index 74cc347..1d87809 100644 --- a/E2Manager/handlers/rmrmsghandlers/e2_setup_request_notification_handler_test.go +++ b/E2Manager/handlers/rmrmsghandlers/e2_setup_request_notification_handler_test.go @@ -44,7 +44,7 @@ import ( 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" ) @@ -64,23 +64,6 @@ func TestParseSetupRequest_Success(t *testing.T){ 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 { @@ -273,7 +256,7 @@ func TestE2SetupRequestNotificationHandler_HandleGetE2TInstanceError(t *testing. _, 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) @@ -300,7 +283,7 @@ func TestE2SetupRequestNotificationHandler_HandleGetNodebError(t *testing.T) { 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) @@ -330,11 +313,11 @@ func TestE2SetupRequestNotificationHandler_HandleAssociationError(t *testing.T) _, 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...)} @@ -525,11 +508,11 @@ func assertNoMoreRecordsLog(buf *bytes.Buffer, t *testing.T) { 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 @@ -541,7 +524,7 @@ func stubMockSuccessFlowNewNodeb(t *testing.T) E2SetupRequestNotificationHandler 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, @@ -550,7 +533,7 @@ func stubMockSuccessFlowExistingNodeb(t *testing.T) E2SetupRequestNotificationHa 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 @@ -562,7 +545,7 @@ func stubMockSuccessFlowExistingNodeb(t *testing.T) E2SetupRequestNotificationHa 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 diff --git a/E2Manager/handlers/rmrmsghandlers/e2_term_init_notification_handler_test.go b/E2Manager/handlers/rmrmsghandlers/e2_term_init_notification_handler_test.go index 95b818b..159008c 100644 --- a/E2Manager/handlers/rmrmsghandlers/e2_term_init_notification_handler_test.go +++ b/E2Manager/handlers/rmrmsghandlers/e2_term_init_notification_handler_test.go @@ -42,7 +42,10 @@ import ( "testing" ) -const e2tInitPayload = "{\"address\":\"10.0.2.15\", \"fqdn\":\"\"}" +const ( + e2tInitPayload = "{\"address\":\"10.0.2.15\", \"fqdn\":\"\"}" + e2tInstanceAddress = "10.0.2.15" +) func initRanLostConnectionTest(t *testing.T) (*logger.Logger, E2TermInitNotificationHandler, *mocks.RnibReaderMock, *mocks.RnibWriterMock, *mocks.E2TInstancesManagerMock, *mocks.RoutingManagerClientMock) { -- 2.16.6