X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=E2Manager%2Fhandlers%2Frmrmsghandlers%2Fe2_setup_request_notification_handler_test.go;h=3f3a27be937e766e538a080bb94afc8885aae607;hb=62ee3b274d4dd072693d9edc032d0b337e46fb3f;hp=22d8d45674969f2c91a3e0a63d36108d26081d29;hpb=0823945d1b5a326844833187a36bea669752be93;p=ric-plt%2Fe2mgr.git 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..3f3a27b 100644 --- a/E2Manager/handlers/rmrmsghandlers/e2_setup_request_notification_handler_test.go +++ b/E2Manager/handlers/rmrmsghandlers/e2_setup_request_notification_handler_test.go @@ -20,6 +20,7 @@ package rmrmsghandlers import ( + "bytes" "e2mgr/configuration" "e2mgr/managers" "e2mgr/mocks" @@ -27,9 +28,11 @@ import ( "e2mgr/rmrCgo" "e2mgr/services" "e2mgr/tests" + "encoding/xml" "errors" "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common" "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities" + "github.com/golang/protobuf/ptypes/wrappers" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" "io/ioutil" @@ -45,6 +48,7 @@ const ( EnGnbSetupRequestXmlPath = "../../tests/resources/setupRequest_en-gNB.xml" NgEnbSetupRequestXmlPath = "../../tests/resources/setupRequest_ng-eNB.xml" EnbSetupRequestXmlPath = "../../tests/resources/setupRequest_enb.xml" + GnbWithoutFunctionsSetupRequestXmlPath = "../../tests/resources/setupRequest_gnb_without_functions.xml" ) func readXmlFile(t *testing.T, xmlPath string) []byte { @@ -65,8 +69,8 @@ func TestParseGnbSetupRequest_Success(t *testing.T) { handler, _, _, _, _, _ := initMocks(t) prefBytes := []byte(prefix) request, _, err := handler.parseSetupRequest(append(prefBytes, xmlGnb...)) - assert.Equal(t, "131014", request.GetPlmnId()) - assert.Equal(t, "10011001101010101011", request.GetNbId()) + assert.Equal(t, "02F829", request.GetPlmnId()) + assert.Equal(t, "001100000011000000110000", request.GetNbId()) assert.Nil(t, err) } @@ -126,16 +130,38 @@ func TestE2SetupRequestNotificationHandler_HandleNewGnbSuccess(t *testing.T) { 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) + notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append([]byte(prefix), xmlGnb...)} + nodebInfo := getExpectedNodebWithFunctionsForNewRan(notificationRequest.Payload) + writerMock.On("SaveNodeb", mock.Anything, nodebInfo).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) + writerMock.AssertCalled(t, "SaveNodeb", mock.Anything, nodebInfo) + 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")) + notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append([]byte(prefix), xmlGnb...)} + nodebInfo := getExpectedNodebWithFunctionsForNewRan(notificationRequest.Payload) + writerMock.On("SaveNodeb", mock.Anything, nodebInfo).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) + handler.Handle(notificationRequest) + writerMock.AssertCalled(t, "SaveNodeb", mock.Anything, nodebInfo) assertNewNodebSuccessCalls(readerMock, t, e2tInstancesManagerMock, writerMock, routingManagerClientMock, rmrMessengerMock) } @@ -194,17 +220,83 @@ func TestE2SetupRequestNotificationHandler_HandleExistingGnbSuccess(t *testing.T } readerMock.On("GetNodeb", mock.Anything).Return(gnb, nil) routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(nil) - writerMock.On("UpdateNodebInfo", mock.Anything).Return(nil) + + notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append([]byte(prefix), xmlGnb...)} + gnbToUpdate := getExpectedNodebWithFunctionsForExistingRan(*gnb, notificationRequest.Payload) + writerMock.On("UpdateNodebInfo", gnbToUpdate).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...)} + rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(&rmrCgo.MBuf{}, errEmpty) handler.Handle(notificationRequest) + writerMock.AssertCalled(t, "UpdateNodebInfo", gnbToUpdate) assertExistingNodebSuccessCalls(readerMock, t, e2tInstancesManagerMock, writerMock, routingManagerClientMock, rmrMessengerMock) } +func TestE2SetupRequestNotificationHandler_HandleExistingGnbWithFunctionsSuccess(t *testing.T) { + xmlGnb := readXmlFile(t, GnbSetupRequestXmlPath) + + handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t) + var e2tInstance = &entities.E2TInstance{} + e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(e2tInstance, nil) + var gnb = &entities.NodebInfo{ + RanName: nodebRanName, + AssociatedE2TInstanceAddress: e2tInstanceFullAddress, + ConnectionStatus: entities.ConnectionStatus_CONNECTED, + NodeType: entities.Node_GNB, + Configuration: &entities.NodebInfo_Gnb{Gnb: &entities.Gnb{RanFunctions: []*entities.RanFunction{ + { + RanFunctionId: &wrappers.UInt32Value{Value:2}, + RanFunctionRevision: &wrappers.UInt32Value{Value:2}, + }, + }}}, + } + readerMock.On("GetNodeb", mock.Anything).Return(gnb, nil) + routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(nil) + + notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append([]byte(prefix), xmlGnb...)} + gnbToUpdate := getExpectedNodebWithFunctionsForExistingRan(*gnb, notificationRequest.Payload) + + writerMock.On("UpdateNodebInfo", gnbToUpdate).Return(nil) + e2tInstancesManagerMock.On("AddRansToInstance", mock.Anything, mock.Anything).Return(nil) + var errEmpty error + rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(&rmrCgo.MBuf{}, errEmpty) + handler.Handle(notificationRequest) + writerMock.AssertCalled(t, "UpdateNodebInfo", gnbToUpdate) + assertExistingNodebSuccessCalls(readerMock, t, e2tInstancesManagerMock, writerMock, routingManagerClientMock, rmrMessengerMock) +} + +func getExpectedNodebWithFunctionsForExistingRan(nodeb entities.NodebInfo , payload []byte) *entities.NodebInfo { + pipInd := bytes.IndexByte(payload, '|') + setupRequest := &models.E2SetupRequestMessage{} + _ = xml.Unmarshal(normalizeXml(payload[pipInd+1:]), &setupRequest.E2APPDU) + nodeb.GetGnb().RanFunctions = setupRequest.ExtractRanFunctionsList() + return &nodeb +} + +func getExpectedNodebWithFunctionsForNewRan(payload []byte) *entities.NodebInfo { + pipInd := bytes.IndexByte(payload, '|') + setupRequest := &models.E2SetupRequestMessage{} + _ = xml.Unmarshal(normalizeXml(payload[pipInd+1:]), &setupRequest.E2APPDU) + + nodeb := &entities.NodebInfo{ + AssociatedE2TInstanceAddress: e2tInstanceFullAddress, + ConnectionStatus: entities.ConnectionStatus_CONNECTED, + RanName: nodebRanName, + NodeType: entities.Node_GNB, + Configuration: &entities.NodebInfo_Gnb{ + Gnb: &entities.Gnb{ + RanFunctions: setupRequest.ExtractRanFunctionsList(), + }, + }, + GlobalNbId: &entities.GlobalNbId{ + PlmnId: setupRequest.GetPlmnId(), + NbId: setupRequest.GetNbId(), + }, + } + + return nodeb +} + func TestE2SetupRequestNotificationHandler_HandleParseError(t *testing.T) { xmlGnb := readXmlFile(t, GnbSetupRequestXmlPath) @@ -302,9 +394,10 @@ func TestE2SetupRequestNotificationHandler_ConvertTo20BitStringError(t *testing. xmlEnGnb := readXmlFile(t, EnGnbSetupRequestXmlPath) logger := tests.InitLog(t) config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3, GlobalRicId: struct { - PlmnId string - RicNearRtId string - }{PlmnId: "131014", RicNearRtId: "10011001101010101011"}} + RicId string + Mcc string + Mnc string + }{Mcc: "327", Mnc: "94" ,RicId: "10011001101010101011"}} rmrMessengerMock := &mocks.RmrMessengerMock{} rmrSender := tests.InitRmrSender(rmrMessengerMock, logger) readerMock := &mocks.RnibReaderMock{} @@ -360,9 +453,10 @@ func TestE2SetupRequestNotificationHandler_HandleExistingGnbInvalidStatusError(t func initMocks(t *testing.T) (E2SetupRequestNotificationHandler, *mocks.RnibReaderMock, *mocks.RnibWriterMock, *mocks.RmrMessengerMock, *mocks.E2TInstancesManagerMock, *mocks.RoutingManagerClientMock) { logger := tests.InitLog(t) config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3, GlobalRicId: struct { - PlmnId string - RicNearRtId string - }{PlmnId: "131014", RicNearRtId: "556670"}} + RicId string + Mcc string + Mnc string + }{Mcc: "327", Mnc: "94" ,RicId: "AACCE"}} rmrMessengerMock := &mocks.RmrMessengerMock{} rmrSender := tests.InitRmrSender(rmrMessengerMock, logger) readerMock := &mocks.RnibReaderMock{}