X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=E2Manager%2Fhandlers%2Frmrmsghandlers%2Fe2_setup_request_notification_handler_test.go;h=0d58a3ba2fcc40f793a18d02bedaaacdc0963bc1;hb=refs%2Fchanges%2F12%2F4512%2F1;hp=03f2a70b28a53b66a65b7ee6d21363b08f08e2fd;hpb=7d36f23c741b0246bf3cdea1af797bcb43064e5a;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 03f2a70..0d58a3b 100644 --- a/E2Manager/handlers/rmrmsghandlers/e2_setup_request_notification_handler_test.go +++ b/E2Manager/handlers/rmrmsghandlers/e2_setup_request_notification_handler_test.go @@ -45,6 +45,7 @@ const ( gnbNodebRanName = "gnb:310-410-b5c67788" enbNodebRanName = "enB_macro:P310-410-b5c67788" GnbSetupRequestXmlPath = "../../tests/resources/setupRequest_gnb.xml" + GnbWithZeroFunctionsSetupRequestXmlPath = "../../tests/resources/setupRequest_gnb_with_zero_functions.xml" EnGnbSetupRequestXmlPath = "../../tests/resources/setupRequest_en-gNB.xml" NgEnbSetupRequestXmlPath = "../../tests/resources/setupRequest_ng-eNB.xml" EnbSetupRequestXmlPath = "../../tests/resources/setupRequest_enb.xml" @@ -55,7 +56,7 @@ const ( StateChangeMessageChannel = "RAN_CONNECTION_STATUS_CHANGE" ) -func initMocks(t *testing.T) (*E2SetupRequestNotificationHandler, *mocks.RnibReaderMock, *mocks.RnibWriterMock, *mocks.RmrMessengerMock, *mocks.E2TInstancesManagerMock, *mocks.RoutingManagerClientMock) { +func initMocks(t *testing.T) (*E2SetupRequestNotificationHandler, *mocks.RnibReaderMock, *mocks.RnibWriterMock, *mocks.RmrMessengerMock, *mocks.E2TInstancesManagerMock, *mocks.RoutingManagerClientMock, managers.RanListManager) { logger := tests.InitLog(t) config := &configuration.Configuration{ RnibRetryIntervalMs: 10, @@ -80,7 +81,7 @@ func initMocks(t *testing.T) (*E2SetupRequestNotificationHandler, *mocks.RnibRea ranConnectStatusChangeManager := managers.NewRanConnectStatusChangeManager(logger, rnibDataService, ranListManager, ranAlarmService) e2tAssociationManager := managers.NewE2TAssociationManager(logger, rnibDataService, e2tInstancesManagerMock, routingManagerClientMock, ranConnectStatusChangeManager) handler := NewE2SetupRequestNotificationHandler(logger, config, e2tInstancesManagerMock, rmrSender, rnibDataService, e2tAssociationManager, ranConnectStatusChangeManager, ranListManager) - return handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock + return handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock, ranListManager } func getMbuf(ranName string, msgType int, payloadStr string, request *models.NotificationRequest) *rmrCgo.MBuf { @@ -104,7 +105,7 @@ func readXmlFile(t *testing.T, xmlPath string) []byte { func TestParseGnbSetupRequest_Success(t *testing.T) { xmlGnb := readXmlFile(t, GnbSetupRequestXmlPath) - handler, _, _, _, _, _ := initMocks(t) + handler, _, _, _, _, _, _ := initMocks(t) prefBytes := []byte(e2SetupMsgPrefix) request, _, err := handler.parseSetupRequest(append(prefBytes, xmlGnb...)) assert.Equal(t, "02F829", request.GetPlmnId()) @@ -114,7 +115,7 @@ func TestParseGnbSetupRequest_Success(t *testing.T) { func TestParseEnGnbSetupRequest_Success(t *testing.T) { enGnbXml := readXmlFile(t, EnGnbSetupRequestXmlPath) - handler, _, _, _, _, _ := initMocks(t) + handler, _, _, _, _, _, _ := initMocks(t) prefBytes := []byte(e2SetupMsgPrefix) request, _, err := handler.parseSetupRequest(append(prefBytes, enGnbXml...)) assert.Equal(t, "131014", request.GetPlmnId()) @@ -124,7 +125,7 @@ func TestParseEnGnbSetupRequest_Success(t *testing.T) { func TestParseNgEnbSetupRequest_Success(t *testing.T) { ngEnbXml := readXmlFile(t, NgEnbSetupRequestXmlPath) - handler, _, _, _, _, _ := initMocks(t) + handler, _, _, _, _, _, _ := initMocks(t) prefBytes := []byte(e2SetupMsgPrefix) request, _, err := handler.parseSetupRequest(append(prefBytes, ngEnbXml...)) assert.Equal(t, "131014", request.GetPlmnId()) @@ -134,7 +135,7 @@ func TestParseNgEnbSetupRequest_Success(t *testing.T) { func TestParseEnbSetupRequest_Success(t *testing.T) { enbXml := readXmlFile(t, EnbSetupRequestXmlPath) - handler, _, _, _, _, _ := initMocks(t) + handler, _, _, _, _, _, _ := initMocks(t) prefBytes := []byte(e2SetupMsgPrefix) request, _, err := handler.parseSetupRequest(append(prefBytes, enbXml...)) assert.Equal(t, "6359AB", request.GetPlmnId()) @@ -144,7 +145,7 @@ func TestParseEnbSetupRequest_Success(t *testing.T) { func TestParseSetupRequest_PipFailure(t *testing.T) { xmlGnb := readXmlFile(t, GnbSetupRequestXmlPath) - handler, _, _, _, _, _ := initMocks(t) + handler, _, _, _, _, _, _ := initMocks(t) prefBytes := []byte("10.0.2.15:9999") request, _, err := handler.parseSetupRequest(append(prefBytes, xmlGnb...)) assert.Nil(t, request) @@ -153,7 +154,7 @@ func TestParseSetupRequest_PipFailure(t *testing.T) { } func TestParseSetupRequest_UnmarshalFailure(t *testing.T) { - handler, _, _, _, _, _ := initMocks(t) + handler, _, _, _, _, _, _ := initMocks(t) prefBytes := []byte(e2SetupMsgPrefix) request, _, err := handler.parseSetupRequest(append(prefBytes, 1, 2, 3)) assert.Nil(t, request) @@ -163,7 +164,7 @@ func TestParseSetupRequest_UnmarshalFailure(t *testing.T) { func TestE2SetupRequestNotificationHandler_HandleParseError(t *testing.T) { xmlGnb := readXmlFile(t, GnbSetupRequestXmlPath) - handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t) + handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock, _ := initMocks(t) readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil) notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append([]byte("invalid_prefix"), xmlGnb...)} handler.Handle(notificationRequest) @@ -176,7 +177,7 @@ func TestE2SetupRequestNotificationHandler_HandleParseError(t *testing.T) { } func TestE2SetupRequestNotificationHandler_HandleUnmarshalError(t *testing.T) { - handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t) + handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock, _ := initMocks(t) readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil) notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append([]byte(e2SetupMsgPrefix), "xmlGnb"...)} handler.Handle(notificationRequest) @@ -224,6 +225,7 @@ func TestE2SetupRequestNotificationHandler_ConvertTo20BitStringError(t *testing. writerMock.On("UpdateNodebInfoOnConnectionStatusInversion", mock.Anything, mock.Anything).Return(nil) routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(nil) writerMock.On("UpdateNodebInfo", mock.Anything).Return(nil) + writerMock.On("UpdateNbIdentities", mock.Anything, mock.Anything, mock.Anything).Return(nil) e2tInstancesManagerMock.On("AddRansToInstance", mock.Anything, mock.Anything).Return(nil) var errEmpty error rmrMessage := &rmrCgo.MBuf{} @@ -241,7 +243,7 @@ func TestE2SetupRequestNotificationHandler_ConvertTo20BitStringError(t *testing. } func TestExtractionOfNodeTypeFromRanName(t *testing.T) { - handler, _, _, _, _, _ := initMocks(t) + handler, _, _, _, _, _, _ := initMocks(t) validRanNames := []string{"gnb_P310_410_b5c67788", "en_gnb_P310_410_b5c67788", "ng_enB_macro_P310_410_b5c67788", "ng_enB_shortmacro_P310_410_b5c67788", "ng_enB_longmacro_P310_410_b5c67788", "enB_macro_P310_410_b5c67788", "enB_home_P310_410_b5c67788", "enB_shortmacro_P310_410_b5c67788", "enB_longmacro_P310_410_b5c67788"} for _, v := range validRanNames { nodeb := &entities.NodebInfo{RanName: v} @@ -258,7 +260,7 @@ func TestExtractionOfNodeTypeFromRanName(t *testing.T) { func TestE2SetupRequestNotificationHandler_GetGeneralConfigurationFailure(t *testing.T) { xmlGnb := readXmlFile(t, GnbSetupRequestXmlPath) - handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t) + handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock, _ := initMocks(t) readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{}, common.NewInternalError(errors.New("some error"))) notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append([]byte(e2SetupMsgPrefix), xmlGnb...)} handler.Handle(notificationRequest) @@ -271,7 +273,7 @@ func TestE2SetupRequestNotificationHandler_GetGeneralConfigurationFailure(t *tes func TestE2SetupRequestNotificationHandler_EnableRicFalse(t *testing.T) { xmlGnb := readXmlFile(t, GnbSetupRequestXmlPath) - handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t) + handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock, _ := initMocks(t) readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: false}, nil) notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append([]byte(e2SetupMsgPrefix), xmlGnb...)} mbuf := getMbuf(gnbNodebRanName, rmrCgo.RIC_E2_SETUP_FAILURE, E2SetupFailureResponseWithMiscCause, notificationRequest) @@ -286,7 +288,7 @@ func TestE2SetupRequestNotificationHandler_EnableRicFalse(t *testing.T) { func TestE2SetupRequestNotificationHandler_HandleGetE2TInstanceError(t *testing.T) { xmlGnb := readXmlFile(t, GnbSetupRequestXmlPath) - handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t) + handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock, _ := initMocks(t) readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil) e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(&entities.E2TInstance{}, common.NewResourceNotFoundError("Not found")) prefBytes := []byte(e2SetupMsgPrefix) @@ -303,7 +305,7 @@ func TestE2SetupRequestNotificationHandler_HandleGetE2TInstanceError(t *testing. func TestE2SetupRequestNotificationHandler_HandleGetNodebError(t *testing.T) { xmlGnb := readXmlFile(t, GnbSetupRequestXmlPath) - handler, readerMock, writerMock, routingManagerClientMock, e2tInstancesManagerMock, rmrMessengerMock := initMocks(t) + handler, readerMock, writerMock, routingManagerClientMock, e2tInstancesManagerMock, rmrMessengerMock, _ := initMocks(t) readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil) e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(&entities.E2TInstance{}, nil) var gnb *entities.NodebInfo @@ -323,7 +325,7 @@ func TestE2SetupRequestNotificationHandler_HandleGetNodebError(t *testing.T) { func TestE2SetupRequestNotificationHandler_HandleNewRanSaveNodebFailure(t *testing.T) { xml := readXmlFile(t, GnbSetupRequestXmlPath) - handler, readerMock, writerMock, _, e2tInstancesManagerMock, _ := initMocks(t) + handler, readerMock, writerMock, _, e2tInstancesManagerMock, _, _ := initMocks(t) readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil) e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(&entities.E2TInstance{}, nil) var gnb *entities.NodebInfo @@ -340,7 +342,7 @@ func TestE2SetupRequestNotificationHandler_HandleNewRanSaveNodebFailure(t *testi func TestE2SetupRequestNotificationHandler_HandleNewRan_invalidRanName(t *testing.T) { xml := readXmlFile(t, EnbSetupRequestXmlPath) - handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, _ := initMocks(t) + handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, _, _ := initMocks(t) readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil) e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(&entities.E2TInstance{}, nil) var enb *entities.NodebInfo @@ -359,7 +361,7 @@ func TestE2SetupRequestNotificationHandler_HandleNewRan_invalidRanName(t *testin func TestE2SetupRequestNotificationHandler_HandleNewRanAddNbIdentityFailure(t *testing.T) { xml := readXmlFile(t, GnbSetupRequestXmlPath) - handler, readerMock, writerMock, _, e2tInstancesManagerMock, _ := initMocks(t) + handler, readerMock, writerMock, _, e2tInstancesManagerMock, _, _ := initMocks(t) readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil) e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(&entities.E2TInstance{}, nil) var gnb *entities.NodebInfo @@ -378,7 +380,7 @@ func TestE2SetupRequestNotificationHandler_HandleNewRanAddNbIdentityFailure(t *t func TestE2SetupRequestNotificationHandler_HandleNewRanRoutingManagerError(t *testing.T) { xmlGnb := readXmlFile(t, GnbSetupRequestXmlPath) - handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t) + handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock, _ := initMocks(t) readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil) e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(&entities.E2TInstance{}, nil) readerMock.On("GetNodeb", gnbNodebRanName).Return(&entities.NodebInfo{}, common.NewResourceNotFoundError("Not found")) @@ -391,6 +393,7 @@ func TestE2SetupRequestNotificationHandler_HandleNewRanRoutingManagerError(t *te routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(errors.New("association error")) updatedNodebInfo.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED writerMock.On("UpdateNodebInfo", &updatedNodebInfo).Return(nil) + writerMock.On("UpdateNbIdentities", mock.Anything, mock.Anything, mock.Anything).Return(nil) var errEmpty error mbuf := getMbuf(gnbNodebRanName, rmrCgo.RIC_E2_SETUP_FAILURE, E2SetupFailureResponseWithTransportCause, notificationRequest) rmrMessengerMock.On("WhSendMsg", mbuf, true).Return(&rmrCgo.MBuf{}, errEmpty) @@ -411,7 +414,7 @@ func testE2SetupRequestNotificationHandler_HandleNewRanSuccess(t *testing.T, xml } else { ranName = enbNodebRanName } - handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t) + handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock, _ := initMocks(t) readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil) e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(&entities.E2TInstance{}, nil) var gnb *entities.NodebInfo @@ -434,6 +437,10 @@ func testE2SetupRequestNotificationHandler_HandleNewRanSuccess(t *testing.T, xml updatedNodebInfo2.ConnectionStatus = entities.ConnectionStatus_CONNECTED updatedNodebInfo2.AssociatedE2TInstanceAddress = e2tInstanceFullAddress writerMock.On("UpdateNodebInfo", &updatedNodebInfo2).Return(nil) + + newNbIdentity := &entities.NbIdentity{InventoryName: ranName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, GlobalNbId: expectedNodebInfo.GlobalNbId} + writerMock.On("UpdateNbIdentities", updatedNodebInfo2.GetNodeType(), []*entities.NbIdentity{nbIdentity}, []*entities.NbIdentity{newNbIdentity}).Return(nil) + e2tInstancesManagerMock.On("AddRansToInstance", e2tInstanceFullAddress, []string{ranName}).Return(nil) rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(&rmrCgo.MBuf{}, nil) @@ -513,24 +520,37 @@ func getExpectedEnbNodebForNewRan(payload []byte) *entities.NodebInfo { /* Existing Ran UTs - BEGIN */ -func getExpectedNodebForExistingRan(nodeb entities.NodebInfo, payload []byte) *entities.NodebInfo { +func getExpectedNodebForExistingRan(nodeb *entities.NodebInfo, payload []byte) *entities.NodebInfo { pipInd := bytes.IndexByte(payload, '|') setupRequest := &models.E2SetupRequestMessage{} _ = xml.Unmarshal(normalizeXml(payload[pipInd+1:]), &setupRequest.E2APPDU) + nb := *nodeb + if nodeb.NodeType == entities.Node_ENB { - return &nodeb + return &nb } if ranFuncs := setupRequest.ExtractRanFunctionsList(); ranFuncs != nil { - nodeb.GetGnb().RanFunctions = ranFuncs + updatedGnb := *nodeb.GetGnb() + updatedGnb.RanFunctions = ranFuncs + nb.Configuration =&entities.NodebInfo_Gnb{Gnb: &updatedGnb} } - return &nodeb + + return &nb } func TestE2SetupRequestNotificationHandler_HandleExistingConnectedEnbSuccess(t *testing.T) { xmlEnb := readXmlFile(t, EnbSetupRequestXmlPath) - handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t) + handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock, ranListManager := initMocks(t) + + oldNbIdentity := &entities.NbIdentity{InventoryName: enbNodebRanName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, GlobalNbId: &entities.GlobalNbId{PlmnId: "plmnId1", NbId: "nbId1"}} + readerMock.On("GetListNodebIds").Return([]*entities.NbIdentity{oldNbIdentity}, nil) + + err := ranListManager.InitNbIdentityMap() + if err != nil { + t.Errorf("Error cannot init identity") + } readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil) e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(&entities.E2TInstance{}, nil) var nodebInfo = &entities.NodebInfo{ @@ -545,8 +565,10 @@ func TestE2SetupRequestNotificationHandler_HandleExistingConnectedEnbSuccess(t * routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(nil) notificationRequest := &models.NotificationRequest{RanName: enbNodebRanName, Payload: append([]byte(e2SetupMsgPrefix), xmlEnb...)} - enbToUpdate := getExpectedNodebForExistingRan(*nodebInfo, notificationRequest.Payload) - + enbToUpdate := getExpectedNodebForExistingRan(nodebInfo, notificationRequest.Payload) + enbToUpdate.SetupFromNetwork = true + newNbIdentity := &entities.NbIdentity{InventoryName: enbNodebRanName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, GlobalNbId: &entities.GlobalNbId{PlmnId: "plmnId1", NbId: "nbId1"}} + writerMock.On("UpdateNbIdentities", enbToUpdate.GetNodeType(), []*entities.NbIdentity{oldNbIdentity}, []*entities.NbIdentity{newNbIdentity}).Return(nil) writerMock.On("UpdateNodebInfo", enbToUpdate).Return(nil) e2tInstancesManagerMock.On("AddRansToInstance", e2tInstanceFullAddress, []string{enbNodebRanName}).Return(nil) var errEmpty error @@ -560,7 +582,15 @@ func TestE2SetupRequestNotificationHandler_HandleExistingConnectedEnbSuccess(t * func TestE2SetupRequestNotificationHandler_HandleExistingDisconnectedEnbSuccess(t *testing.T) { xmlEnb := readXmlFile(t, EnbSetupRequestXmlPath) - handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t) + handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock, ranListManager := initMocks(t) + + oldNbIdentity := &entities.NbIdentity{InventoryName: enbNodebRanName, ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, GlobalNbId: &entities.GlobalNbId{PlmnId: "plmnId1", NbId: "nbId1"}} + readerMock.On("GetListNodebIds").Return([]*entities.NbIdentity{oldNbIdentity}, nil) + err := ranListManager.InitNbIdentityMap() + if err != nil { + t.Errorf("Error cannot init identity") + } + readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil) e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(&entities.E2TInstance{}, nil) var nodebInfo = &entities.NodebInfo{ @@ -575,13 +605,19 @@ func TestE2SetupRequestNotificationHandler_HandleExistingDisconnectedEnbSuccess( routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(nil) notificationRequest := &models.NotificationRequest{RanName: enbNodebRanName, Payload: append([]byte(e2SetupMsgPrefix), xmlEnb...)} - enbToUpdate := getExpectedNodebForExistingRan(*nodebInfo, notificationRequest.Payload) + enbToUpdate := getExpectedNodebForExistingRan(nodebInfo, notificationRequest.Payload) enbToUpdate2 := *enbToUpdate enbToUpdate2.ConnectionStatus = entities.ConnectionStatus_CONNECTED + enbToUpdate2.SetupFromNetwork = true writerMock.On("UpdateNodebInfoOnConnectionStatusInversion", &enbToUpdate2, enbNodebRanName+"_CONNECTED").Return(nil) + + newNbIdentity := &entities.NbIdentity{InventoryName: enbNodebRanName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, GlobalNbId: &entities.GlobalNbId{PlmnId: "plmnId1", NbId: "nbId1"}} + writerMock.On("UpdateNbIdentities", enbToUpdate.GetNodeType(), []*entities.NbIdentity{oldNbIdentity}, []*entities.NbIdentity{newNbIdentity}).Return(nil) + enbToUpdate3 := *enbToUpdate enbToUpdate3.ConnectionStatus = entities.ConnectionStatus_CONNECTED + enbToUpdate3.SetupFromNetwork = true enbToUpdate3.AssociatedE2TInstanceAddress = e2tInstanceFullAddress writerMock.On("UpdateNodebInfo", &enbToUpdate3).Return(nil) e2tInstancesManagerMock.On("AddRansToInstance", e2tInstanceFullAddress, []string{enbNodebRanName}).Return(nil) @@ -594,16 +630,17 @@ func TestE2SetupRequestNotificationHandler_HandleExistingDisconnectedEnbSuccess( rmrMessengerMock.AssertCalled(t, "SendMsg", mock.Anything, true) } -func testE2SetupRequestNotificationHandler_HandleExistingConnectedGnbSuccess(t *testing.T, withFunctions bool) { - var xmlGnb []byte +func testE2SetupRequestNotificationHandler_HandleExistingConnectedGnbSuccess(t *testing.T, withFunctions bool, xmlToRead string) { + xmlGnb := readXmlFile(t, xmlToRead) + handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock, ranListManager := initMocks(t) - if withFunctions { - xmlGnb = readXmlFile(t, GnbSetupRequestXmlPath) - - } else { - xmlGnb = readXmlFile(t, GnbWithoutFunctionsSetupRequestXmlPath) + oldNbIdentity := &entities.NbIdentity{InventoryName: gnbNodebRanName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, GlobalNbId: &entities.GlobalNbId{PlmnId: "plmnId1", NbId: "nbId1"}} + readerMock.On("GetListNodebIds").Return([]*entities.NbIdentity{oldNbIdentity}, nil) + err := ranListManager.InitNbIdentityMap() + if err != nil { + t.Errorf("Error cannot init identity") } - handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t) + readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil) e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(&entities.E2TInstance{}, nil) var nodebInfo = &entities.NodebInfo{ @@ -623,12 +660,15 @@ func testE2SetupRequestNotificationHandler_HandleExistingConnectedGnbSuccess(t * routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(nil) notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append([]byte(e2SetupMsgPrefix), xmlGnb...)} - gnbToUpdate := getExpectedNodebForExistingRan(*nodebInfo, notificationRequest.Payload) - + gnbToUpdate := getExpectedNodebForExistingRan(nodebInfo, notificationRequest.Payload) + gnbToUpdate.SetupFromNetwork = true writerMock.On("UpdateNodebInfo", gnbToUpdate).Return(nil) if withFunctions { writerMock.On("UpdateNodebInfoAndPublish", gnbToUpdate).Return(nil) } + newNbIdentity := &entities.NbIdentity{InventoryName: gnbNodebRanName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, GlobalNbId: &entities.GlobalNbId{PlmnId: "plmnId1", NbId: "nbId1"}} + writerMock.On("UpdateNbIdentities", gnbToUpdate.GetNodeType(), []*entities.NbIdentity{oldNbIdentity}, []*entities.NbIdentity{newNbIdentity}).Return(nil) + e2tInstancesManagerMock.On("AddRansToInstance", e2tInstanceFullAddress, []string{gnbNodebRanName}).Return(nil) var errEmpty error rmrMessengerMock.On("SendMsg", mock.Anything, true).Return(&rmrCgo.MBuf{}, errEmpty) @@ -641,7 +681,7 @@ func testE2SetupRequestNotificationHandler_HandleExistingConnectedGnbSuccess(t * func TestE2SetupRequestNotificationHandler_HandleExistingConnectedGnbRoutingManagerError(t *testing.T) { xmlGnb := readXmlFile(t, GnbSetupRequestXmlPath) - handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t) + handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock, ranListManager := initMocks(t) readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil) e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(&entities.E2TInstance{}, nil) var nodebInfo = &entities.NodebInfo{ @@ -651,6 +691,12 @@ func TestE2SetupRequestNotificationHandler_HandleExistingConnectedGnbRoutingMana NodeType: entities.Node_GNB, Configuration: &entities.NodebInfo_Gnb{Gnb: &entities.Gnb{}}, } + oldNbIdentity := &entities.NbIdentity{InventoryName: gnbNodebRanName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, GlobalNbId: &entities.GlobalNbId{PlmnId: "plmnId1", NbId: "nbId1"}} + readerMock.On("GetListNodebIds").Return([]*entities.NbIdentity{oldNbIdentity}, nil) + err := ranListManager.InitNbIdentityMap() + if err != nil { + t.Errorf("Error cannot init identity") + } gnb := nodebInfo.GetGnb() gnb.RanFunctions = []*entities.RanFunction{{RanFunctionId: 2, RanFunctionRevision: 2}} @@ -659,12 +705,15 @@ func TestE2SetupRequestNotificationHandler_HandleExistingConnectedGnbRoutingMana routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(errors.New("association error")) notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append([]byte(e2SetupMsgPrefix), xmlGnb...)} - gnbToUpdate := getExpectedNodebForExistingRan(*nodebInfo, notificationRequest.Payload) + gnbToUpdate := getExpectedNodebForExistingRan(nodebInfo, notificationRequest.Payload) gnbToUpdate2 := *gnbToUpdate gnbToUpdate2.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED + gnbToUpdate2.SetupFromNetwork = true writerMock.On("UpdateNodebInfoOnConnectionStatusInversion", &gnbToUpdate2, gnbNodebRanName+"_DISCONNECTED").Return(nil) + newNbIdentity := &entities.NbIdentity{InventoryName: gnbNodebRanName, ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, GlobalNbId: &entities.GlobalNbId{PlmnId: "plmnId1", NbId: "nbId1"}} + writerMock.On("UpdateNbIdentities", gnbToUpdate2.GetNodeType(), []*entities.NbIdentity{oldNbIdentity}, []*entities.NbIdentity{newNbIdentity}).Return(nil) var errEmpty error rmrMessengerMock.On("WhSendMsg", mock.Anything, true).Return(&rmrCgo.MBuf{}, errEmpty) handler.Handle(notificationRequest) @@ -676,7 +725,7 @@ func TestE2SetupRequestNotificationHandler_HandleExistingConnectedGnbRoutingMana func TestE2SetupRequestNotificationHandler_HandleExistingGnbInvalidConnectionStatusError(t *testing.T) { xmlGnb := readXmlFile(t, GnbSetupRequestXmlPath) - handler, readerMock, writerMock, _, e2tInstancesManagerMock, rmrMessengerMock := initMocks(t) + handler, readerMock, writerMock, _, e2tInstancesManagerMock, rmrMessengerMock, _ := initMocks(t) var gnb = &entities.NodebInfo{RanName: gnbNodebRanName, ConnectionStatus: entities.ConnectionStatus_SHUTTING_DOWN} readerMock.On("GetNodeb", gnbNodebRanName).Return(gnb, nil) readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil) @@ -691,16 +740,27 @@ func TestE2SetupRequestNotificationHandler_HandleExistingGnbInvalidConnectionSta } func TestE2SetupRequestNotificationHandler_HandleExistingConnectedGnbWithoutFunctionsSuccess(t *testing.T) { - testE2SetupRequestNotificationHandler_HandleExistingConnectedGnbSuccess(t, false) + testE2SetupRequestNotificationHandler_HandleExistingConnectedGnbSuccess(t, false, GnbWithoutFunctionsSetupRequestXmlPath) } func TestE2SetupRequestNotificationHandler_HandleExistingConnectedGnbWithFunctionsSuccess(t *testing.T) { - testE2SetupRequestNotificationHandler_HandleExistingConnectedGnbSuccess(t, true) + testE2SetupRequestNotificationHandler_HandleExistingConnectedGnbSuccess(t, true, GnbSetupRequestXmlPath) +} + +func TestE2SetupRequestNotificationHandler_HandleExistingConnectedGnbWithZeroFunctionsSuccess(t *testing.T) { + testE2SetupRequestNotificationHandler_HandleExistingConnectedGnbSuccess(t, true, GnbWithZeroFunctionsSetupRequestXmlPath) } func TestE2SetupRequestNotificationHandler_HandleExistingDisconnectedGnbSuccess(t *testing.T) { xmlGnb := readXmlFile(t, GnbSetupRequestXmlPath) - handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock := initMocks(t) + handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock, ranListManager := initMocks(t) + oldNbIdentity := &entities.NbIdentity{InventoryName: gnbNodebRanName, ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, GlobalNbId: &entities.GlobalNbId{PlmnId: "plmnId1", NbId: "nbId1"}} + readerMock.On("GetListNodebIds").Return([]*entities.NbIdentity{oldNbIdentity}, nil) + err := ranListManager.InitNbIdentityMap() + if err != nil { + t.Errorf("Error cannot init identity") + } + readerMock.On("GetGeneralConfiguration").Return(&entities.GeneralConfiguration{EnableRic: true}, nil) e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceFullAddress).Return(&entities.E2TInstance{}, nil) var nodebInfo = &entities.NodebInfo{ @@ -715,14 +775,20 @@ func TestE2SetupRequestNotificationHandler_HandleExistingDisconnectedGnbSuccess( routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(nil) notificationRequest := &models.NotificationRequest{RanName: gnbNodebRanName, Payload: append([]byte(e2SetupMsgPrefix), xmlGnb...)} - gnbToUpdate := getExpectedNodebForExistingRan(*nodebInfo, notificationRequest.Payload) + gnbToUpdate := getExpectedNodebForExistingRan(nodebInfo, notificationRequest.Payload) gnbToUpdate2 := *gnbToUpdate gnbToUpdate2.ConnectionStatus = entities.ConnectionStatus_CONNECTED + gnbToUpdate2.SetupFromNetwork = true writerMock.On("UpdateNodebInfoOnConnectionStatusInversion", &gnbToUpdate2, gnbNodebRanName+"_CONNECTED").Return(nil) gnbToUpdate3 := *gnbToUpdate gnbToUpdate3.ConnectionStatus = entities.ConnectionStatus_CONNECTED + gnbToUpdate3.SetupFromNetwork = true gnbToUpdate3.AssociatedE2TInstanceAddress = e2tInstanceFullAddress writerMock.On("UpdateNodebInfo", &gnbToUpdate3).Return(nil) + + newNbIdentity := &entities.NbIdentity{InventoryName: gnbNodebRanName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, GlobalNbId: &entities.GlobalNbId{PlmnId: "plmnId1", NbId: "nbId1"}} + writerMock.On("UpdateNbIdentities", gnbToUpdate3.GetNodeType(), []*entities.NbIdentity{oldNbIdentity}, []*entities.NbIdentity{newNbIdentity}).Return(nil) + e2tInstancesManagerMock.On("AddRansToInstance", e2tInstanceFullAddress, []string{gnbNodebRanName}).Return(nil) var errEmpty error rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(&rmrCgo.MBuf{}, errEmpty)