From: idanshal Date: Mon, 1 Jun 2020 13:47:00 +0000 (+0300) Subject: [RIC-436] Fix out of range defect for setupRequestIes X-Git-Tag: R5_RC~80 X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=commitdiff_plain;h=4449bba79c42804a0f9334047c08bd2619e777cd;p=ric-plt%2Fe2mgr.git [RIC-436] Fix out of range defect for setupRequestIes Change-Id: I81e2d719c1136c77442db5cbd1226a20b761cde7 Signed-off-by: idanshal --- diff --git a/E2Manager/Dockerfile b/E2Manager/Dockerfile index b56f011..89c23af 100755 --- a/E2Manager/Dockerfile +++ b/E2Manager/Dockerfile @@ -20,7 +20,7 @@ # platform project (RICP). # -FROM nexus3.o-ran-sc.org:10004/bldr-ubuntu18-c-go:7-u18.04 as ubuntu +FROM nexus3.o-ran-sc.org:10004/o-ran-sc/bldr-ubuntu18-c-go:8-u18.04 as ubuntu WORKDIR /opt/E2Manager COPY . . diff --git a/E2Manager/container-tag.yaml b/E2Manager/container-tag.yaml index 4491f06..ba5c780 100644 --- a/E2Manager/container-tag.yaml +++ b/E2Manager/container-tag.yaml @@ -1,4 +1,4 @@ # The Jenkins job requires a tag to build the Docker image. # Global-JJB script assumes this file is in the repo root. --- -tag: 4.4.10 +tag: 4.4.11 diff --git a/E2Manager/handlers/rmrmsghandlers/e2_setup_request_notification_handler.go b/E2Manager/handlers/rmrmsghandlers/e2_setup_request_notification_handler.go index 9ea0ef5..7cd5458 100644 --- a/E2Manager/handlers/rmrmsghandlers/e2_setup_request_notification_handler.go +++ b/E2Manager/handlers/rmrmsghandlers/e2_setup_request_notification_handler.go @@ -140,7 +140,10 @@ func (h E2SetupRequestNotificationHandler) setGnbFunctions(nodebInfo *entities.N return err } - nodebInfo.GetGnb().RanFunctions = ranFunctions + if ranFunctions != nil { + nodebInfo.GetGnb().RanFunctions = ranFunctions + } + return 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 22d8d45..28dfe76 100644 --- a/E2Manager/handlers/rmrmsghandlers/e2_setup_request_notification_handler_test.go +++ b/E2Manager/handlers/rmrmsghandlers/e2_setup_request_notification_handler_test.go @@ -42,6 +42,7 @@ const ( e2tInstanceFullAddress = "10.0.2.15:9999" nodebRanName = "gnb:310-410-b5c67788" GnbSetupRequestXmlPath = "../../tests/resources/setupRequest_gnb.xml" + GnbWithoutFunctionsSetupRequestXmlPath = "../../tests/resources/setupRequest_gnb_without_functions.xml" EnGnbSetupRequestXmlPath = "../../tests/resources/setupRequest_en-gNB.xml" NgEnbSetupRequestXmlPath = "../../tests/resources/setupRequest_ng-eNB.xml" EnbSetupRequestXmlPath = "../../tests/resources/setupRequest_enb.xml" @@ -139,6 +140,26 @@ func TestE2SetupRequestNotificationHandler_HandleNewGnbSuccess(t *testing.T) { assertNewNodebSuccessCalls(readerMock, t, e2tInstancesManagerMock, writerMock, routingManagerClientMock, rmrMessengerMock) } +func TestE2SetupRequestNotificationHandler_HandleNewGnbWithoutFunctionsSuccess(t *testing.T) { + xmlGnb := readXmlFile(t, GnbWithoutFunctionsSetupRequestXmlPath) + handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t) + var e2tInstance = &entities.E2TInstance{} + 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", e2tInstanceFullAddress, mock.Anything).Return(nil) + writerMock.On("UpdateNodebInfo", mock.Anything).Return(nil) + e2tInstancesManagerMock.On("AddRansToInstance", mock.Anything, mock.Anything).Return(nil) + var errEmpty error + rmrMessage := &rmrCgo.MBuf{} + rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(rmrMessage, errEmpty) + prefBytes := []byte(prefix) + notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append(prefBytes, xmlGnb...)} + handler.Handle(notificationRequest) + assertNewNodebSuccessCalls(readerMock, t, e2tInstancesManagerMock, writerMock, routingManagerClientMock, rmrMessengerMock) +} + func TestE2SetupRequestNotificationHandler_HandleNewEnGnbSuccess(t *testing.T) { xmlEnGnb := readXmlFile(t, EnGnbSetupRequestXmlPath) handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t) diff --git a/E2Manager/models/e2_setup_request_message.go b/E2Manager/models/e2_setup_request_message.go index 44fe5f8..32d05ca 100644 --- a/E2Manager/models/e2_setup_request_message.go +++ b/E2Manager/models/e2_setup_request_message.go @@ -157,7 +157,14 @@ type RANfunctionsList struct { } func (m *E2SetupRequestMessage) ExtractRanFunctionsList() ([]*entities.RanFunction, error) { - list := m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs[1].Value.RANfunctionsList.ProtocolIESingleContainer + + setupRequestIes := m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs + + if len(setupRequestIes) < 2 { + return nil, nil + } + + list := setupRequestIes[1].Value.RANfunctionsList.ProtocolIESingleContainer funcs := make([]*entities.RanFunction, len(list)) for i := 0; i < len(funcs); i++ { funcs[i] = &entities.RanFunction{} diff --git a/E2Manager/models/e2_setup_response_message.go b/E2Manager/models/e2_setup_response_message.go index 654e2af..fc20788 100644 --- a/E2Manager/models/e2_setup_response_message.go +++ b/E2Manager/models/e2_setup_response_message.go @@ -77,11 +77,17 @@ func NewE2SetupSuccessResponseMessage(plmnId string, ricId string, request *E2Se PLMNIdentity string `xml:"pLMN-Identity"` RicID string `xml:"ric-ID"` }{PLMNIdentity: plmnId, RicID: ricId}} - outcome.Value.E2setupResponse.ProtocolIEs.E2setupResponseIEs[1].ID = "9" - outcome.Value.E2setupResponse.ProtocolIEs.E2setupResponseIEs[1].Value = RANfunctionsIDList{RANfunctionsIDList: struct { - Text string `xml:",chardata"` - ProtocolIESingleContainer []ProtocolIESingleContainer `xml:"ProtocolIE-SingleContainer"` - }{ProtocolIESingleContainer: extractRanFunctionsIDList(request)}} + + functionsIdList := extractRanFunctionsIDList(request) + + if functionsIdList != nil { + outcome.Value.E2setupResponse.ProtocolIEs.E2setupResponseIEs[1].ID = "9" + outcome.Value.E2setupResponse.ProtocolIEs.E2setupResponseIEs[1].Value = RANfunctionsIDList{RANfunctionsIDList: struct { + Text string `xml:",chardata"` + ProtocolIESingleContainer []ProtocolIESingleContainer `xml:"ProtocolIE-SingleContainer"` + }{ProtocolIESingleContainer: functionsIdList}} + } + return E2SetupResponseMessage{E2APPDU: E2APPDU{Outcome: outcome}} } @@ -215,7 +221,14 @@ type Cause struct { } func extractRanFunctionsIDList(request *E2SetupRequestMessage) []ProtocolIESingleContainer { - list := &request.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs[1].Value.RANfunctionsList + + setupRequestIes := request.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs + + if len(setupRequestIes) < 2 { + return nil + } + + list := &setupRequestIes[1].Value.RANfunctionsList ids := make([]ProtocolIESingleContainer, len(list.ProtocolIESingleContainer)) for i := 0; i < len(ids); i++ { ids[i] = convertToRANfunctionID(list, i) diff --git a/E2Manager/tests/resources/setupRequest_gnb_without_functions.xml b/E2Manager/tests/resources/setupRequest_gnb_without_functions.xml new file mode 100644 index 0000000..db28387 --- /dev/null +++ b/E2Manager/tests/resources/setupRequest_gnb_without_functions.xml @@ -0,0 +1,34 @@ + + + 1 + + + + + + + + 3 + + + + + + + + 13 F1 84 + + + 00000000000000010000001000000001 + + + + + + + + + + + + \ No newline at end of file