RIC-193 - Setup from RAN: E2T instance port and status fix 99/2999/1
authorns019t <ns019t@intl.att.com>
Thu, 26 Mar 2020 16:37:30 +0000 (18:37 +0200)
committerns019t <ns019t@intl.att.com>
Thu, 26 Mar 2020 16:40:11 +0000 (18:40 +0200)
Change-Id: I4fdf9f613fa5fd90365904bb848673181f3d8653
Signed-off-by: ns019t <ns019t@intl.att.com>
E2Manager/handlers/rmrmsghandlers/e2_setup_request_notification_handler.go
E2Manager/handlers/rmrmsghandlers/e2_setup_request_notification_handler_test.go
E2Manager/handlers/rmrmsghandlers/e2_term_init_notification_handler_test.go

index f40636b..90a417c 100644 (file)
@@ -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 {
index 74cc347..1d87809 100644 (file)
@@ -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
index 95b818b..159008c 100644 (file)
@@ -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) {