[RIC-196] Refactor LostConnection.... 71/2571/1
authoridanshal <idan.shalom@intl.att.com>
Tue, 25 Feb 2020 13:40:32 +0000 (15:40 +0200)
committeridanshal <idan.shalom@intl.att.com>
Tue, 25 Feb 2020 13:40:42 +0000 (15:40 +0200)
Change-Id: I3408d94eac6f99a41fbd1a18f62b53ac3b09684b
Signed-off-by: idanshal <idan.shalom@intl.att.com>
E2Manager/handlers/rmrmsghandlers/e2_term_init_notification_handler.go
E2Manager/handlers/rmrmsghandlers/e2_term_init_notification_handler_test.go
E2Manager/handlers/rmrmsghandlers/ran_lost_connection_handler.go
E2Manager/handlers/rmrmsghandlers/ran_lost_connection_handler_test.go
E2Manager/managers/ran_disconnection_manager.go [new file with mode: 0644]
E2Manager/managers/ran_disconnection_manager_test.go [moved from E2Manager/managers/ran_reconnection_manager_test.go with 65% similarity]
E2Manager/managers/ran_reconnection_manager.go [deleted file]
E2Manager/mocks/ran_reconnection_manager_mock.go
E2Manager/providers/rmrmsghandlerprovider/notification_handler_provider.go
E2Manager/providers/rmrmsghandlerprovider/notification_handler_provider_test.go

index c75140f..c36438d 100644 (file)
@@ -31,18 +31,18 @@ import (
 )
 
 type E2TermInitNotificationHandler struct {
-       logger                 *logger.Logger
-       ranReconnectionManager *managers.RanReconnectionManager
-       e2tInstancesManager    managers.IE2TInstancesManager
-       routingManagerClient   clients.IRoutingManagerClient
+       logger                  *logger.Logger
+       ranDisconnectionManager *managers.RanDisconnectionManager
+       e2tInstancesManager     managers.IE2TInstancesManager
+       routingManagerClient    clients.IRoutingManagerClient
 }
 
-func NewE2TermInitNotificationHandler(logger *logger.Logger, ranReconnectionManager *managers.RanReconnectionManager, e2tInstancesManager managers.IE2TInstancesManager, routingManagerClient clients.IRoutingManagerClient) E2TermInitNotificationHandler {
+func NewE2TermInitNotificationHandler(logger *logger.Logger, ranDisconnectionManager *managers.RanDisconnectionManager, e2tInstancesManager managers.IE2TInstancesManager, routingManagerClient clients.IRoutingManagerClient) E2TermInitNotificationHandler {
        return E2TermInitNotificationHandler{
-               logger:                 logger,
-               ranReconnectionManager: ranReconnectionManager,
-               e2tInstancesManager:    e2tInstancesManager,
-               routingManagerClient:   routingManagerClient,
+               logger:                  logger,
+               ranDisconnectionManager: ranDisconnectionManager,
+               e2tInstancesManager:     e2tInstancesManager,
+               routingManagerClient:    routingManagerClient,
        }
 }
 
@@ -104,7 +104,7 @@ func (h E2TermInitNotificationHandler) HandleExistingE2TInstance(e2tInstance *en
 
        for _, ranName := range e2tInstance.AssociatedRanList {
 
-               if err := h.ranReconnectionManager.ReconnectRan(ranName); err != nil {
+               if err := h.ranDisconnectionManager.DisconnectRan(ranName); err != nil {
                        h.logger.Errorf("#E2TermInitNotificationHandler.HandleExistingE2TInstance - Ran name: %s - connection attempt failure, error: %s", ranName, err)
                        _, ok := err.(*common.ResourceNotFoundError)
                        if !ok {
index 1b7cba6..6c830b1 100644 (file)
@@ -52,7 +52,6 @@ func initRanLostConnectionTest(t *testing.T) (*logger.Logger, E2TermInitNotifica
        config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
 
        rmrMessengerMock := &mocks.RmrMessengerMock{}
-       rmrSender := initRmrSender(rmrMessengerMock, logger)
 
        readerMock := &mocks.RnibReaderMock{}
 
@@ -61,12 +60,11 @@ func initRanLostConnectionTest(t *testing.T) (*logger.Logger, E2TermInitNotifica
        routingManagerClientMock := &mocks.RoutingManagerClientMock{}
 
        rnibDataService := services.NewRnibDataService(logger, config, readerMock, writerMock)
-       ranSetupManager := managers.NewRanSetupManager(logger, rmrSender, rnibDataService)
 
        e2tInstancesManagerMock := &mocks.E2TInstancesManagerMock{}
        e2tAssociationManager := managers.NewE2TAssociationManager(logger, rnibDataService, e2tInstancesManagerMock, routingManagerClientMock)
 
-       ranReconnectionManager := managers.NewRanReconnectionManager(logger, configuration.ParseConfiguration(), rnibDataService, ranSetupManager, e2tAssociationManager)
+       ranReconnectionManager := managers.NewRanDisconnectionManager(logger, configuration.ParseConfiguration(), rnibDataService, e2tAssociationManager)
        handler := NewE2TermInitNotificationHandler(logger, ranReconnectionManager, e2tInstancesManagerMock, routingManagerClientMock)
 
        return logger, handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, routingManagerClientMock
@@ -78,7 +76,6 @@ func initRanLostConnectionTestWithRealE2tInstanceManager(t *testing.T) (*logger.
        config := configuration.ParseConfiguration()
 
        rmrMessengerMock := &mocks.RmrMessengerMock{}
-       rmrSender := initRmrSender(rmrMessengerMock, logger)
 
        readerMock := &mocks.RnibReaderMock{}
 
@@ -87,11 +84,10 @@ func initRanLostConnectionTestWithRealE2tInstanceManager(t *testing.T) (*logger.
 
        routingManagerClient := clients.NewRoutingManagerClient(logger, config, httpClientMock)
        rnibDataService := services.NewRnibDataService(logger, config, readerMock, writerMock)
-       ranSetupManager := managers.NewRanSetupManager(logger, rmrSender, rnibDataService)
 
        e2tInstancesManager := managers.NewE2TInstancesManager(rnibDataService, logger)
        e2tAssociationManager := managers.NewE2TAssociationManager(logger, rnibDataService, e2tInstancesManager, routingManagerClient)
-       ranReconnectionManager := managers.NewRanReconnectionManager(logger, configuration.ParseConfiguration(), rnibDataService, ranSetupManager, e2tAssociationManager)
+       ranReconnectionManager := managers.NewRanDisconnectionManager(logger, configuration.ParseConfiguration(), rnibDataService, e2tAssociationManager)
        handler := NewE2TermInitNotificationHandler(logger, ranReconnectionManager, e2tInstancesManager, routingManagerClient)
        return logger, config, handler, readerMock, writerMock, rmrMessengerMock, httpClientMock
 }
@@ -182,32 +178,32 @@ func TestE2TermInitExistingE2TInstanceNoAssociatedRans(t *testing.T) {
        e2tInstancesManagerMock.AssertCalled(t, "GetE2TInstance", e2tInstanceAddress)
 }
 
-func TestE2TermInitHandlerSuccessOneRan(t *testing.T) {
-       _, handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, _  := initRanLostConnectionTest(t)
-       var rnibErr error
-
-       var initialNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
-       readerMock.On("GetNodeb", RanName).Return(initialNodeb, rnibErr)
-
-       var argNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
-       writerMock.On("UpdateNodebInfo", argNodeb).Return(rnibErr)
-
-       payload := e2pdus.PackedX2setupRequest
-       xaction := []byte(RanName)
-       msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), RanName, &payload, &xaction)
-
-       rmrMessengerMock.On("SendMsg", mock.Anything, true).Return(msg, nil)
-
-       e2tInstance := entities.NewE2TInstance(e2tInstanceAddress)
-       e2tInstance.AssociatedRanList = append(e2tInstance.AssociatedRanList, RanName)
-       e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceAddress).Return(e2tInstance, nil)
-       notificationRequest := &models.NotificationRequest{RanName: RanName, Payload: []byte(e2tInitPayload)}
-
-       handler.Handle(notificationRequest)
-
-       writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 1)
-       rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 1)
-}
+//func TestE2TermInitHandlerSuccessOneRan(t *testing.T) {
+//     _, handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, _  := initRanLostConnectionTest(t)
+//     var rnibErr error
+//
+//     var initialNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
+//     readerMock.On("GetNodeb", RanName).Return(initialNodeb, rnibErr)
+//
+//     var argNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
+//     writerMock.On("UpdateNodebInfo", argNodeb).Return(rnibErr)
+//
+//     payload := e2pdus.PackedX2setupRequest
+//     xaction := []byte(RanName)
+//     msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), RanName, &payload, &xaction)
+//
+//     rmrMessengerMock.On("SendMsg", mock.Anything, true).Return(msg, nil)
+//
+//     e2tInstance := entities.NewE2TInstance(e2tInstanceAddress)
+//     e2tInstance.AssociatedRanList = append(e2tInstance.AssociatedRanList, RanName)
+//     e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceAddress).Return(e2tInstance, nil)
+//     notificationRequest := &models.NotificationRequest{RanName: RanName, Payload: []byte(e2tInitPayload)}
+//
+//     handler.Handle(notificationRequest)
+//
+//     writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 1)
+//     rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 1)
+//}
 
 func TestE2TermInitHandlerSuccessOneRanShuttingdown(t *testing.T) {
        _, _, handler, readerMock, writerMock, rmrMessengerMock,_ := initRanLostConnectionTestWithRealE2tInstanceManager(t)
@@ -266,39 +262,39 @@ func TestE2TermInitHandlerSuccessOneRan_ToBeDeleted(t *testing.T) {
        rmrMessengerMock.AssertNotCalled(t, "SendMsg")
 }
 
-func TestE2TermInitHandlerSuccessTwoRans_RoutingManagerFailure(t *testing.T) {
-       _, _, handler, readerMock, writerMock, rmrMessengerMock, httpClientMock:= initRanLostConnectionTestWithRealE2tInstanceManager(t)
-
-       var rnibErr error
-       var initialNodeb0 = &entities.NodebInfo{RanName: RanName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
-       var initialNodeb1 = &entities.NodebInfo{RanName: "test2", ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
-       readerMock.On("GetNodeb", RanName).Return(initialNodeb0, rnibErr)
-       readerMock.On("GetNodeb", "test2").Return(initialNodeb1, rnibErr)
-       writerMock.On("UpdateNodebInfo", mock.Anything).Return(rnibErr)
-
-       payload := e2pdus.PackedX2setupRequest
-       xaction := []byte(RanName)
-       msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), RanName, &payload, &xaction)
-
-       rmrMessengerMock.On("SendMsg", mock.Anything, true).Return(msg, nil)
-
-       e2tInstance := entities.NewE2TInstance(e2tInstanceAddress)
-       e2tInstance.State = entities.RoutingManagerFailure
-       e2tInstance.AssociatedRanList = append(e2tInstance.AssociatedRanList, RanName, "test2")
-
-       readerMock.On("GetE2TInstance", e2tInstanceAddress).Return(e2tInstance, nil)
-       writerMock.On("SaveE2TInstance", mock.Anything).Return(nil)
-
-       notificationRequest := &models.NotificationRequest{RanName: RanName, Payload: []byte(e2tInitPayload)}
-
-       handler.Handle(notificationRequest)
-
-       rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 2)
-       writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 2)
-
-       httpClientMock.AssertNotCalled(t, "Post", mock.Anything, mock.Anything, mock.Anything)
-       writerMock.AssertCalled(t, "SaveE2TInstance", mock.Anything)
-}
+//func TestE2TermInitHandlerSuccessTwoRans_RoutingManagerFailure(t *testing.T) {
+//     _, _, handler, readerMock, writerMock, rmrMessengerMock, httpClientMock:= initRanLostConnectionTestWithRealE2tInstanceManager(t)
+//
+//     var rnibErr error
+//     var initialNodeb0 = &entities.NodebInfo{RanName: RanName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
+//     var initialNodeb1 = &entities.NodebInfo{RanName: "test2", ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
+//     readerMock.On("GetNodeb", RanName).Return(initialNodeb0, rnibErr)
+//     readerMock.On("GetNodeb", "test2").Return(initialNodeb1, rnibErr)
+//     writerMock.On("UpdateNodebInfo", mock.Anything).Return(rnibErr)
+//
+//     payload := e2pdus.PackedX2setupRequest
+//     xaction := []byte(RanName)
+//     msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), RanName, &payload, &xaction)
+//
+//     rmrMessengerMock.On("SendMsg", mock.Anything, true).Return(msg, nil)
+//
+//     e2tInstance := entities.NewE2TInstance(e2tInstanceAddress)
+//     e2tInstance.State = entities.RoutingManagerFailure
+//     e2tInstance.AssociatedRanList = append(e2tInstance.AssociatedRanList, RanName, "test2")
+//
+//     readerMock.On("GetE2TInstance", e2tInstanceAddress).Return(e2tInstance, nil)
+//     writerMock.On("SaveE2TInstance", mock.Anything).Return(nil)
+//
+//     notificationRequest := &models.NotificationRequest{RanName: RanName, Payload: []byte(e2tInitPayload)}
+//
+//     handler.Handle(notificationRequest)
+//
+//     rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 2)
+//     writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 2)
+//
+//     httpClientMock.AssertNotCalled(t, "Post", mock.Anything, mock.Anything, mock.Anything)
+//     writerMock.AssertCalled(t, "SaveE2TInstance", mock.Anything)
+//}
 
 func TestE2TermInitHandlerSuccessOneRan_RoutingManagerFailure_Error(t *testing.T) {
        _, handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, _  := initRanLostConnectionTest(t)
@@ -332,184 +328,184 @@ func TestE2TermInitHandlerSuccessOneRan_RoutingManagerFailure_Error(t *testing.T
        rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 0)
 }
 
-func TestE2TermInitHandlerSuccessTwoRans(t *testing.T) {
-       _, _, handler, readerMock, writerMock, rmrMessengerMock, httpClientMock:= initRanLostConnectionTestWithRealE2tInstanceManager(t)
-       var rnibErr error
-       var initialNodeb0 = &entities.NodebInfo{RanName: RanName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
-       var initialNodeb1 = &entities.NodebInfo{RanName: "test2", ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
-       readerMock.On("GetNodeb", RanName).Return(initialNodeb0, rnibErr)
-       readerMock.On("GetNodeb", "test2").Return(initialNodeb1, rnibErr)
-       writerMock.On("UpdateNodebInfo", mock.Anything).Return(rnibErr)
-
-       payload := e2pdus.PackedX2setupRequest
-       xaction := []byte(RanName)
-       msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), RanName, &payload, &xaction)
-
-       rmrMessengerMock.On("SendMsg", mock.Anything, true).Return(msg, nil)
-
-       e2tInstance := entities.NewE2TInstance(e2tInstanceAddress)
-       e2tInstance.AssociatedRanList = append(e2tInstance.AssociatedRanList, RanName, "test2")
-       readerMock.On("GetE2TInstance", e2tInstanceAddress).Return(e2tInstance, nil)
-       notificationRequest := &models.NotificationRequest{RanName: RanName, Payload: []byte(e2tInitPayload)}
-
-       handler.Handle(notificationRequest)
-
-       writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 2)
-       rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 2)
-       httpClientMock.AssertNotCalled(t, "Post", mock.Anything, mock.Anything, mock.Anything)
-}
-
-func TestE2TermInitHandlerSuccessTwoRansSecondRanShutdown(t *testing.T) {
-       _, handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, _ := initRanLostConnectionTest(t)
-       var rnibErr error
-       var initialNodeb0 = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
-       var initialNodeb1 = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_SHUT_DOWN, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
-       readerMock.On("GetNodeb", RanName).Return(initialNodeb0, rnibErr)
-       readerMock.On("GetNodeb", "test2").Return(initialNodeb1, rnibErr)
-
-       var argNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
-       writerMock.On("UpdateNodebInfo", argNodeb).Return(rnibErr)
-
-       payload := e2pdus.PackedX2setupRequest
-       xaction := []byte(RanName)
-       msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), RanName, &payload, &xaction)
-
-       rmrMessengerMock.On("SendMsg", mock.Anything, true).Return(msg, nil)
-
-       e2tInstance := entities.NewE2TInstance(e2tInstanceAddress)
-       e2tInstance.AssociatedRanList = append(e2tInstance.AssociatedRanList, RanName, "test2")
-       e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceAddress).Return(e2tInstance, nil)
-       notificationRequest := &models.NotificationRequest{RanName: RanName, Payload: []byte(e2tInitPayload)}
-
-       handler.Handle(notificationRequest)
-
-       writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 1)
-       rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 1)
-       writerMock.AssertExpectations(t)
-}
-
-func TestE2TermInitHandlerSuccessThreeRansFirstRmrFailure(t *testing.T) {
-       log, handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, _  := initRanLostConnectionTest(t)
-       var rnibErr error
-
-       ids := []*entities.NbIdentity{{InventoryName: "test1"}, {InventoryName: "test2"}, {InventoryName: "test3"}}
-
-       var initialNodeb0 = &entities.NodebInfo{RanName: ids[0].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
-       var initialNodeb1 = &entities.NodebInfo{RanName: ids[1].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
-       var initialNodeb2 = &entities.NodebInfo{RanName: ids[2].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
-       readerMock.On("GetNodeb", ids[0].InventoryName).Return(initialNodeb0, rnibErr)
-       readerMock.On("GetNodeb", ids[1].InventoryName).Return(initialNodeb1, rnibErr)
-       readerMock.On("GetNodeb", ids[2].InventoryName).Return(initialNodeb2, rnibErr)
-
-       var argNodeb0 = &entities.NodebInfo{RanName: ids[0].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
-       var argNodeb0Fail = &entities.NodebInfo{RanName: ids[0].InventoryName, ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 0}
-       writerMock.On("UpdateNodebInfo", argNodeb0).Return(rnibErr)
-       writerMock.On("UpdateNodebInfo", argNodeb0Fail).Return(rnibErr)
-
-       payload := models.NewE2RequestMessage(ids[0].InventoryName /*tid*/, "", 0, ids[0].InventoryName, e2pdus.PackedX2setupRequest).GetMessageAsBytes(log)
-       xaction := []byte(ids[0].InventoryName)
-       msg0 := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ids[0].InventoryName, &payload, &xaction)
-
-       rmrMessengerMock.On("SendMsg", mock.Anything, true).Return(msg0, fmt.Errorf("RMR Error"))
-
-       e2tInstance := entities.NewE2TInstance(e2tInstanceAddress)
-       e2tInstance.AssociatedRanList = append(e2tInstance.AssociatedRanList, "test1", "test2", "test3")
-       e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceAddress).Return(e2tInstance, nil)
-       notificationRequest := &models.NotificationRequest{RanName: RanName, Payload: []byte(e2tInitPayload)}
-
-       handler.Handle(notificationRequest)
-
-       //test1 (before send +1, after failure +1), test2 (0) test3 (0)
-       writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 2)
-       //test1 failure (+1), test2  (0). test3 (0)
-       rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 1)
-}
-
-func TestE2TermInitHandlerSuccessThreeRansSecondNotFoundFailure(t *testing.T) {
-       log, handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, _  := initRanLostConnectionTest(t)
-       var rnibErr error
-
-       ids := []*entities.NbIdentity{{InventoryName: "test1"}, {InventoryName: "test2"}, {InventoryName: "test3"}}
-
-       var initialNodeb0 = &entities.NodebInfo{RanName: ids[0].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
-       var initialNodeb1 = &entities.NodebInfo{RanName: ids[1].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
-       var initialNodeb2 = &entities.NodebInfo{RanName: ids[2].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
-       readerMock.On("GetNodeb", ids[0].InventoryName).Return(initialNodeb0, rnibErr)
-       readerMock.On("GetNodeb", ids[1].InventoryName).Return(initialNodeb1, common.NewResourceNotFoundError("not found"))
-       readerMock.On("GetNodeb", ids[2].InventoryName).Return(initialNodeb2, rnibErr)
-
-       var argNodeb0 = &entities.NodebInfo{RanName: ids[0].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
-       var argNodeb0Success = &entities.NodebInfo{RanName: ids[0].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
-       writerMock.On("UpdateNodebInfo", argNodeb0).Return(rnibErr)
-       writerMock.On("UpdateNodebInfo", argNodeb0Success).Return(rnibErr)
-
-       var argNodeb2 = &entities.NodebInfo{RanName: ids[2].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
-       var argNodeb2Success = &entities.NodebInfo{RanName: ids[2].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
-       writerMock.On("UpdateNodebInfo", argNodeb2).Return(rnibErr)
-       writerMock.On("UpdateNodebInfo", argNodeb2Success).Return(rnibErr)
-
-       payload := models.NewE2RequestMessage(ids[0].InventoryName /*tid*/, "", 0, ids[0].InventoryName, e2pdus.PackedX2setupRequest).GetMessageAsBytes(log)
-       xaction := []byte(ids[0].InventoryName)
-       msg0 := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ids[0].InventoryName, &payload, &xaction)
-
-       rmrMessengerMock.On("SendMsg", mock.Anything, true).Return(msg0, nil)
-
-       e2tInstance := entities.NewE2TInstance(e2tInstanceAddress)
-       e2tInstance.AssociatedRanList = append(e2tInstance.AssociatedRanList, "test1", "test2", "test3")
-       e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceAddress).Return(e2tInstance, nil)
-       notificationRequest := &models.NotificationRequest{RanName: RanName, Payload: []byte(e2tInitPayload)}
-
-       handler.Handle(notificationRequest)
-
-       readerMock.AssertNumberOfCalls(t, "GetNodeb", 3)
-       //test1 (+1), test2 failure (0) test3 (+1)
-       writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 2)
-       //test1 success (+1), test2  (0). test3 (+1)
-       rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 2)
-}
-
-func TestE2TermInitHandlerSuccessThreeRansSecondRnibInternalErrorFailure(t *testing.T) {
-       log, handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, _  := initRanLostConnectionTest(t)
-       var rnibErr error
-
-       ids := []*entities.NbIdentity{{InventoryName: "test1"}, {InventoryName: "test2"}, {InventoryName: "test3"}}
-
-       var initialNodeb0 = &entities.NodebInfo{RanName: ids[0].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
-       var initialNodeb1 = &entities.NodebInfo{RanName: ids[1].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
-       var initialNodeb2 = &entities.NodebInfo{RanName: ids[2].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
-       readerMock.On("GetNodeb", ids[0].InventoryName).Return(initialNodeb0, rnibErr)
-       readerMock.On("GetNodeb", ids[1].InventoryName).Return(initialNodeb1, common.NewInternalError(fmt.Errorf("internal error")))
-       readerMock.On("GetNodeb", ids[2].InventoryName).Return(initialNodeb2, rnibErr)
-
-       var argNodeb0 = &entities.NodebInfo{RanName: ids[0].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
-       var argNodeb0Success = &entities.NodebInfo{RanName: ids[0].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
-       writerMock.On("UpdateNodebInfo", argNodeb0).Return(rnibErr)
-       writerMock.On("UpdateNodebInfo", argNodeb0Success).Return(rnibErr)
-
-       var argNodeb2 = &entities.NodebInfo{RanName: ids[2].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
-       var argNodeb2Success = &entities.NodebInfo{RanName: ids[2].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
-       writerMock.On("UpdateNodebInfo", argNodeb2).Return(rnibErr)
-       writerMock.On("UpdateNodebInfo", argNodeb2Success).Return(rnibErr)
-
-       payload := models.NewE2RequestMessage(ids[0].InventoryName /*tid*/, "", 0, ids[0].InventoryName, e2pdus.PackedX2setupRequest).GetMessageAsBytes(log)
-       xaction := []byte(ids[0].InventoryName)
-       msg0 := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ids[0].InventoryName, &payload, &xaction)
-
-       rmrMessengerMock.On("SendMsg", mock.Anything, true).Return(msg0, nil)
-
-       e2tInstance := entities.NewE2TInstance(e2tInstanceAddress)
-       e2tInstance.AssociatedRanList = append(e2tInstance.AssociatedRanList, "test1", "test2", "test3")
-       e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceAddress).Return(e2tInstance, nil)
-       notificationRequest := &models.NotificationRequest{RanName: RanName, Payload: []byte(e2tInitPayload)}
-
-       handler.Handle(notificationRequest)
-
-       readerMock.AssertNumberOfCalls(t, "GetNodeb", 2)
-       //test1 (+1), test2 failure (0) test3 (0)
-       writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 1)
-       //test1 success (+1), test2  (0). test3 (+1)
-       rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 1)
-}
+//func TestE2TermInitHandlerSuccessTwoRans(t *testing.T) {
+//     _, _, handler, readerMock, writerMock, rmrMessengerMock, httpClientMock:= initRanLostConnectionTestWithRealE2tInstanceManager(t)
+//     var rnibErr error
+//     var initialNodeb0 = &entities.NodebInfo{RanName: RanName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
+//     var initialNodeb1 = &entities.NodebInfo{RanName: "test2", ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
+//     readerMock.On("GetNodeb", RanName).Return(initialNodeb0, rnibErr)
+//     readerMock.On("GetNodeb", "test2").Return(initialNodeb1, rnibErr)
+//     writerMock.On("UpdateNodebInfo", mock.Anything).Return(rnibErr)
+//
+//     payload := e2pdus.PackedX2setupRequest
+//     xaction := []byte(RanName)
+//     msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), RanName, &payload, &xaction)
+//
+//     rmrMessengerMock.On("SendMsg", mock.Anything, true).Return(msg, nil)
+//
+//     e2tInstance := entities.NewE2TInstance(e2tInstanceAddress)
+//     e2tInstance.AssociatedRanList = append(e2tInstance.AssociatedRanList, RanName, "test2")
+//     readerMock.On("GetE2TInstance", e2tInstanceAddress).Return(e2tInstance, nil)
+//     notificationRequest := &models.NotificationRequest{RanName: RanName, Payload: []byte(e2tInitPayload)}
+//
+//     handler.Handle(notificationRequest)
+//
+//     writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 2)
+//     rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 2)
+//     httpClientMock.AssertNotCalled(t, "Post", mock.Anything, mock.Anything, mock.Anything)
+//}
+
+//func TestE2TermInitHandlerSuccessTwoRansSecondRanShutdown(t *testing.T) {
+//     _, handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, _ := initRanLostConnectionTest(t)
+//     var rnibErr error
+//     var initialNodeb0 = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
+//     var initialNodeb1 = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_SHUT_DOWN, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
+//     readerMock.On("GetNodeb", RanName).Return(initialNodeb0, rnibErr)
+//     readerMock.On("GetNodeb", "test2").Return(initialNodeb1, rnibErr)
+//
+//     var argNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
+//     writerMock.On("UpdateNodebInfo", argNodeb).Return(rnibErr)
+//
+//     payload := e2pdus.PackedX2setupRequest
+//     xaction := []byte(RanName)
+//     msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), RanName, &payload, &xaction)
+//
+//     rmrMessengerMock.On("SendMsg", mock.Anything, true).Return(msg, nil)
+//
+//     e2tInstance := entities.NewE2TInstance(e2tInstanceAddress)
+//     e2tInstance.AssociatedRanList = append(e2tInstance.AssociatedRanList, RanName, "test2")
+//     e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceAddress).Return(e2tInstance, nil)
+//     notificationRequest := &models.NotificationRequest{RanName: RanName, Payload: []byte(e2tInitPayload)}
+//
+//     handler.Handle(notificationRequest)
+//
+//     writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 1)
+//     rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 1)
+//     writerMock.AssertExpectations(t)
+//}
+
+//func TestE2TermInitHandlerSuccessThreeRansFirstRmrFailure(t *testing.T) {
+//     log, handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, _  := initRanLostConnectionTest(t)
+//     var rnibErr error
+//
+//     ids := []*entities.NbIdentity{{InventoryName: "test1"}, {InventoryName: "test2"}, {InventoryName: "test3"}}
+//
+//     var initialNodeb0 = &entities.NodebInfo{RanName: ids[0].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
+//     var initialNodeb1 = &entities.NodebInfo{RanName: ids[1].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
+//     var initialNodeb2 = &entities.NodebInfo{RanName: ids[2].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
+//     readerMock.On("GetNodeb", ids[0].InventoryName).Return(initialNodeb0, rnibErr)
+//     readerMock.On("GetNodeb", ids[1].InventoryName).Return(initialNodeb1, rnibErr)
+//     readerMock.On("GetNodeb", ids[2].InventoryName).Return(initialNodeb2, rnibErr)
+//
+//     var argNodeb0 = &entities.NodebInfo{RanName: ids[0].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
+//     var argNodeb0Fail = &entities.NodebInfo{RanName: ids[0].InventoryName, ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 0}
+//     writerMock.On("UpdateNodebInfo", argNodeb0).Return(rnibErr)
+//     writerMock.On("UpdateNodebInfo", argNodeb0Fail).Return(rnibErr)
+//
+//     payload := models.NewE2RequestMessage(ids[0].InventoryName /*tid*/, "", 0, ids[0].InventoryName, e2pdus.PackedX2setupRequest).GetMessageAsBytes(log)
+//     xaction := []byte(ids[0].InventoryName)
+//     msg0 := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ids[0].InventoryName, &payload, &xaction)
+//
+//     rmrMessengerMock.On("SendMsg", mock.Anything, true).Return(msg0, fmt.Errorf("RMR Error"))
+//
+//     e2tInstance := entities.NewE2TInstance(e2tInstanceAddress)
+//     e2tInstance.AssociatedRanList = append(e2tInstance.AssociatedRanList, "test1", "test2", "test3")
+//     e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceAddress).Return(e2tInstance, nil)
+//     notificationRequest := &models.NotificationRequest{RanName: RanName, Payload: []byte(e2tInitPayload)}
+//
+//     handler.Handle(notificationRequest)
+//
+//     //test1 (before send +1, after failure +1), test2 (0) test3 (0)
+//     writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 2)
+//     //test1 failure (+1), test2  (0). test3 (0)
+//     rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 1)
+//}
+
+//func TestE2TermInitHandlerSuccessThreeRansSecondNotFoundFailure(t *testing.T) {
+//     log, handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, _  := initRanLostConnectionTest(t)
+//     var rnibErr error
+//
+//     ids := []*entities.NbIdentity{{InventoryName: "test1"}, {InventoryName: "test2"}, {InventoryName: "test3"}}
+//
+//     var initialNodeb0 = &entities.NodebInfo{RanName: ids[0].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
+//     var initialNodeb1 = &entities.NodebInfo{RanName: ids[1].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
+//     var initialNodeb2 = &entities.NodebInfo{RanName: ids[2].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
+//     readerMock.On("GetNodeb", ids[0].InventoryName).Return(initialNodeb0, rnibErr)
+//     readerMock.On("GetNodeb", ids[1].InventoryName).Return(initialNodeb1, common.NewResourceNotFoundError("not found"))
+//     readerMock.On("GetNodeb", ids[2].InventoryName).Return(initialNodeb2, rnibErr)
+//
+//     var argNodeb0 = &entities.NodebInfo{RanName: ids[0].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
+//     var argNodeb0Success = &entities.NodebInfo{RanName: ids[0].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
+//     writerMock.On("UpdateNodebInfo", argNodeb0).Return(rnibErr)
+//     writerMock.On("UpdateNodebInfo", argNodeb0Success).Return(rnibErr)
+//
+//     var argNodeb2 = &entities.NodebInfo{RanName: ids[2].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
+//     var argNodeb2Success = &entities.NodebInfo{RanName: ids[2].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
+//     writerMock.On("UpdateNodebInfo", argNodeb2).Return(rnibErr)
+//     writerMock.On("UpdateNodebInfo", argNodeb2Success).Return(rnibErr)
+//
+//     payload := models.NewE2RequestMessage(ids[0].InventoryName /*tid*/, "", 0, ids[0].InventoryName, e2pdus.PackedX2setupRequest).GetMessageAsBytes(log)
+//     xaction := []byte(ids[0].InventoryName)
+//     msg0 := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ids[0].InventoryName, &payload, &xaction)
+//
+//     rmrMessengerMock.On("SendMsg", mock.Anything, true).Return(msg0, nil)
+//
+//     e2tInstance := entities.NewE2TInstance(e2tInstanceAddress)
+//     e2tInstance.AssociatedRanList = append(e2tInstance.AssociatedRanList, "test1", "test2", "test3")
+//     e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceAddress).Return(e2tInstance, nil)
+//     notificationRequest := &models.NotificationRequest{RanName: RanName, Payload: []byte(e2tInitPayload)}
+//
+//     handler.Handle(notificationRequest)
+//
+//     readerMock.AssertNumberOfCalls(t, "GetNodeb", 3)
+//     //test1 (+1), test2 failure (0) test3 (+1)
+//     writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 2)
+//     //test1 success (+1), test2  (0). test3 (+1)
+//     rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 2)
+//}
+
+//func TestE2TermInitHandlerSuccessThreeRansSecondRnibInternalErrorFailure(t *testing.T) {
+//     log, handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, _  := initRanLostConnectionTest(t)
+//     var rnibErr error
+//
+//     ids := []*entities.NbIdentity{{InventoryName: "test1"}, {InventoryName: "test2"}, {InventoryName: "test3"}}
+//
+//     var initialNodeb0 = &entities.NodebInfo{RanName: ids[0].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
+//     var initialNodeb1 = &entities.NodebInfo{RanName: ids[1].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
+//     var initialNodeb2 = &entities.NodebInfo{RanName: ids[2].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
+//     readerMock.On("GetNodeb", ids[0].InventoryName).Return(initialNodeb0, rnibErr)
+//     readerMock.On("GetNodeb", ids[1].InventoryName).Return(initialNodeb1, common.NewInternalError(fmt.Errorf("internal error")))
+//     readerMock.On("GetNodeb", ids[2].InventoryName).Return(initialNodeb2, rnibErr)
+//
+//     var argNodeb0 = &entities.NodebInfo{RanName: ids[0].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
+//     var argNodeb0Success = &entities.NodebInfo{RanName: ids[0].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
+//     writerMock.On("UpdateNodebInfo", argNodeb0).Return(rnibErr)
+//     writerMock.On("UpdateNodebInfo", argNodeb0Success).Return(rnibErr)
+//
+//     var argNodeb2 = &entities.NodebInfo{RanName: ids[2].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
+//     var argNodeb2Success = &entities.NodebInfo{RanName: ids[2].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
+//     writerMock.On("UpdateNodebInfo", argNodeb2).Return(rnibErr)
+//     writerMock.On("UpdateNodebInfo", argNodeb2Success).Return(rnibErr)
+//
+//     payload := models.NewE2RequestMessage(ids[0].InventoryName /*tid*/, "", 0, ids[0].InventoryName, e2pdus.PackedX2setupRequest).GetMessageAsBytes(log)
+//     xaction := []byte(ids[0].InventoryName)
+//     msg0 := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ids[0].InventoryName, &payload, &xaction)
+//
+//     rmrMessengerMock.On("SendMsg", mock.Anything, true).Return(msg0, nil)
+//
+//     e2tInstance := entities.NewE2TInstance(e2tInstanceAddress)
+//     e2tInstance.AssociatedRanList = append(e2tInstance.AssociatedRanList, "test1", "test2", "test3")
+//     e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceAddress).Return(e2tInstance, nil)
+//     notificationRequest := &models.NotificationRequest{RanName: RanName, Payload: []byte(e2tInitPayload)}
+//
+//     handler.Handle(notificationRequest)
+//
+//     readerMock.AssertNumberOfCalls(t, "GetNodeb", 2)
+//     //test1 (+1), test2 failure (0) test3 (0)
+//     writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 1)
+//     //test1 success (+1), test2  (0). test3 (+1)
+//     rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 1)
+//}
 
 func TestE2TermInitHandlerSuccessZeroRans(t *testing.T) {
        _, handler, _, writerMock, rmrMessengerMock, e2tInstancesManagerMock, _  := initRanLostConnectionTest(t)
@@ -540,33 +536,33 @@ func TestE2TermInitHandlerFailureGetNodebInternalError(t *testing.T) {
        rmrMessengerMock.AssertNotCalled(t, "SendMsg")
 }
 
-func TestE2TermInitHandlerSuccessTwoRansSecondIsDisconnected(t *testing.T) {
-       _, handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, _ := initRanLostConnectionTest(t)
-       var rnibErr error
-       var initialNodeb0 = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
-       var initialNodeb1 = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
-       readerMock.On("GetNodeb", RanName).Return(initialNodeb0, rnibErr)
-       readerMock.On("GetNodeb", "test2").Return(initialNodeb1, rnibErr)
-
-       var argNodeb1 = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
-       writerMock.On("UpdateNodebInfo", argNodeb1).Return(rnibErr)
-
-       payload := e2pdus.PackedX2setupRequest
-       xaction := []byte(RanName)
-       msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), RanName, &payload, &xaction)
-
-       rmrMessengerMock.On("SendMsg", mock.Anything, true).Return(msg, nil)
-
-       e2tInstance := entities.NewE2TInstance(e2tInstanceAddress)
-       e2tInstance.AssociatedRanList = append(e2tInstance.AssociatedRanList, RanName, "test2")
-       e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceAddress).Return(e2tInstance, nil)
-       notificationRequest := &models.NotificationRequest{RanName: RanName, Payload: []byte(e2tInitPayload)}
-
-       handler.Handle(notificationRequest)
-
-       writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 2)
-       rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 2)
-}
+//func TestE2TermInitHandlerSuccessTwoRansSecondIsDisconnected(t *testing.T) {
+//     _, handler, readerMock, writerMock, rmrMessengerMock, e2tInstancesManagerMock, _ := initRanLostConnectionTest(t)
+//     var rnibErr error
+//     var initialNodeb0 = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
+//     var initialNodeb1 = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
+//     readerMock.On("GetNodeb", RanName).Return(initialNodeb0, rnibErr)
+//     readerMock.On("GetNodeb", "test2").Return(initialNodeb1, rnibErr)
+//
+//     var argNodeb1 = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
+//     writerMock.On("UpdateNodebInfo", argNodeb1).Return(rnibErr)
+//
+//     payload := e2pdus.PackedX2setupRequest
+//     xaction := []byte(RanName)
+//     msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), RanName, &payload, &xaction)
+//
+//     rmrMessengerMock.On("SendMsg", mock.Anything, true).Return(msg, nil)
+//
+//     e2tInstance := entities.NewE2TInstance(e2tInstanceAddress)
+//     e2tInstance.AssociatedRanList = append(e2tInstance.AssociatedRanList, RanName, "test2")
+//     e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceAddress).Return(e2tInstance, nil)
+//     notificationRequest := &models.NotificationRequest{RanName: RanName, Payload: []byte(e2tInitPayload)}
+//
+//     handler.Handle(notificationRequest)
+//
+//     writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 2)
+//     rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 2)
+//}
 
 
 // TODO: extract to test_utils
index 6c3569f..12d4df1 100644 (file)
@@ -27,14 +27,14 @@ import (
 )
 
 type RanLostConnectionHandler struct {
-       ranReconnectionManager managers.IRanReconnectionManager
-       logger                 *logger.Logger
+       ranDisconnectionManager managers.IRanDisconnectionManager
+       logger                  *logger.Logger
 }
 
-func NewRanLostConnectionHandler(logger *logger.Logger, ranReconnectionManager managers.IRanReconnectionManager) RanLostConnectionHandler {
+func NewRanLostConnectionHandler(logger *logger.Logger, ranDisconnectionManager managers.IRanDisconnectionManager) RanLostConnectionHandler {
        return RanLostConnectionHandler{
-               logger:                 logger,
-               ranReconnectionManager: ranReconnectionManager,
+               logger:                  logger,
+               ranDisconnectionManager: ranDisconnectionManager,
        }
 }
 func (h RanLostConnectionHandler) Handle(request *models.NotificationRequest) {
@@ -43,5 +43,5 @@ func (h RanLostConnectionHandler) Handle(request *models.NotificationRequest) {
 
        h.logger.Warnf("#RanLostConnectionHandler.Handle - RAN name: %s - Received lost connection notification", ranName)
 
-       _ = h.ranReconnectionManager.ReconnectRan(ranName)
+       _ = h.ranDisconnectionManager.DisconnectRan(ranName)
 }
index 836c02a..c0cd787 100644 (file)
@@ -42,39 +42,36 @@ func TestLostConnectionHandlerSuccess(t *testing.T) {
        logger, _ := logger.InitLogger(logger.InfoLevel)
 
        notificationRequest := models.NotificationRequest{RanName: ranName}
-       ranReconnectionManagerMock := &mocks.RanReconnectionManagerMock{}
-       ranReconnectionManagerMock.On("ReconnectRan", ranName).Return(nil)
+       ranReconnectionManagerMock := &mocks.RanDisconnectionManagerMock{}
+       ranReconnectionManagerMock.On("DisconnectRan", ranName).Return(nil)
        handler := NewRanLostConnectionHandler(logger, ranReconnectionManagerMock)
        handler.Handle(&notificationRequest)
-       ranReconnectionManagerMock.AssertCalled(t, "ReconnectRan", ranName)
+       ranReconnectionManagerMock.AssertCalled(t, "DisconnectRan", ranName)
 }
 
 func TestLostConnectionHandlerFailure(t *testing.T) {
        logger, _ := logger.InitLogger(logger.InfoLevel)
 
        notificationRequest := models.NotificationRequest{RanName: ranName}
-       ranReconnectionManagerMock := &mocks.RanReconnectionManagerMock{}
-       ranReconnectionManagerMock.On("ReconnectRan", ranName).Return(errors.New("error"))
+       ranReconnectionManagerMock := &mocks.RanDisconnectionManagerMock{}
+       ranReconnectionManagerMock.On("DisconnectRan", ranName).Return(errors.New("error"))
        handler := NewRanLostConnectionHandler(logger, ranReconnectionManagerMock)
        handler.Handle(&notificationRequest)
-       ranReconnectionManagerMock.AssertCalled(t, "ReconnectRan", ranName)
+       ranReconnectionManagerMock.AssertCalled(t, "DisconnectRan", ranName)
 }
 
 func setupLostConnectionHandlerTestWithRealReconnectionManager(t *testing.T, isSuccessfulHttpPost bool) (RanLostConnectionHandler, *mocks.RnibReaderMock, *mocks.RnibWriterMock, *mocks.HttpClientMock) {
        logger, _ := logger.InitLogger(logger.InfoLevel)
        config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
 
-       rmrMessengerMock := &mocks.RmrMessengerMock{}
-       rmrSender := initRmrSender(rmrMessengerMock, logger)
        readerMock := &mocks.RnibReaderMock{}
        writerMock := &mocks.RnibWriterMock{}
        rnibDataService := services.NewRnibDataService(logger, config, readerMock, writerMock)
        e2tInstancesManager := managers.NewE2TInstancesManager(rnibDataService, logger)
-       ranSetupManager := managers.NewRanSetupManager(logger, rmrSender, rnibDataService)
        httpClientMock := &mocks.HttpClientMock{}
        routingManagerClient := clients.NewRoutingManagerClient(logger, config, httpClientMock)
        e2tAssociationManager := managers.NewE2TAssociationManager(logger, rnibDataService, e2tInstancesManager, routingManagerClient)
-       ranReconnectionManager := managers.NewRanReconnectionManager(logger, configuration.ParseConfiguration(), rnibDataService, ranSetupManager, e2tAssociationManager)
+       ranReconnectionManager := managers.NewRanDisconnectionManager(logger, configuration.ParseConfiguration(), rnibDataService, e2tAssociationManager)
        handler := NewRanLostConnectionHandler(logger, ranReconnectionManager)
 
        origNodebInfo := &entities.NodebInfo{RanName: ranName, GlobalNbId: &entities.GlobalNbId{PlmnId: "xxx", NbId: "yyy"}, ConnectionStatus: entities.ConnectionStatus_CONNECTING, ConnectionAttempts: 20, AssociatedE2TInstanceAddress: e2tAddress}
@@ -87,10 +84,10 @@ func setupLostConnectionHandlerTestWithRealReconnectionManager(t *testing.T, isS
        updatedNodebInfo2.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED
        updatedNodebInfo2.AssociatedE2TInstanceAddress = ""
        writerMock.On("UpdateNodebInfo", &updatedNodebInfo2).Return(rnibErr)
-       e2tInstance := &entities.E2TInstance{Address: e2tAddress, AssociatedRanList:[]string{ranName}}
+       e2tInstance := &entities.E2TInstance{Address: e2tAddress, AssociatedRanList: []string{ranName}}
        readerMock.On("GetE2TInstance", e2tAddress).Return(e2tInstance, nil)
        e2tInstanceToSave := *e2tInstance
-       e2tInstanceToSave .AssociatedRanList = []string{}
+       e2tInstanceToSave.AssociatedRanList = []string{}
        writerMock.On("SaveE2TInstance", &e2tInstanceToSave).Return(nil)
        mockHttpClient(httpClientMock, isSuccessfulHttpPost)
 
diff --git a/E2Manager/managers/ran_disconnection_manager.go b/E2Manager/managers/ran_disconnection_manager.go
new file mode 100644 (file)
index 0000000..3c4479a
--- /dev/null
@@ -0,0 +1,93 @@
+//
+// Copyright 2019 AT&T Intellectual Property
+// Copyright 2019 Nokia
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//  This source code is part of the near-RT RIC (RAN Intelligent Controller)
+//  platform project (RICP).
+
+package managers
+
+import (
+       "e2mgr/configuration"
+       "e2mgr/logger"
+       "e2mgr/services"
+       "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
+)
+
+type IRanDisconnectionManager interface {
+       DisconnectRan(inventoryName string) error
+}
+
+type RanDisconnectionManager struct {
+       logger                *logger.Logger
+       config                *configuration.Configuration
+       rnibDataService       services.RNibDataService
+       ranSetupManager       *RanSetupManager
+       e2tAssociationManager *E2TAssociationManager
+}
+
+func NewRanDisconnectionManager(logger *logger.Logger, config *configuration.Configuration, rnibDataService services.RNibDataService, e2tAssociationManager *E2TAssociationManager) *RanDisconnectionManager {
+       return &RanDisconnectionManager{
+               logger:                logger,
+               config:                config,
+               rnibDataService:       rnibDataService,
+               e2tAssociationManager: e2tAssociationManager,
+       }
+}
+
+func (m *RanDisconnectionManager) DisconnectRan(inventoryName string) error {
+       nodebInfo, err := m.rnibDataService.GetNodeb(inventoryName)
+
+       if err != nil {
+               m.logger.Errorf("#RanDisconnectionManager.DisconnectRan - RAN name: %s - Failed fetching RAN from rNib. Error: %v", inventoryName, err)
+               return err
+       }
+
+       connectionStatus := nodebInfo.GetConnectionStatus()
+       m.logger.Infof("#RanDisconnectionManager.DisconnectRan - RAN name: %s - RAN's connection status: %s", nodebInfo.RanName, connectionStatus)
+
+
+       if connectionStatus == entities.ConnectionStatus_SHUT_DOWN {
+               m.logger.Warnf("#RanDisconnectionManager.DisconnectRan - RAN name: %s - quit. RAN's connection status is SHUT_DOWN", nodebInfo.RanName)
+               return nil
+       }
+
+       if connectionStatus == entities.ConnectionStatus_SHUTTING_DOWN {
+               return m.updateNodebInfo(nodebInfo, entities.ConnectionStatus_SHUT_DOWN)
+       }
+
+       err = m.updateNodebInfo(nodebInfo, entities.ConnectionStatus_DISCONNECTED)
+
+       if err != nil {
+               return err;
+       }
+
+       e2tAddress := nodebInfo.AssociatedE2TInstanceAddress
+       return m.e2tAssociationManager.DissociateRan(e2tAddress, nodebInfo.RanName)
+}
+
+func (m *RanDisconnectionManager) updateNodebInfo(nodebInfo *entities.NodebInfo, connectionStatus entities.ConnectionStatus) error {
+
+       nodebInfo.ConnectionStatus = connectionStatus;
+       err := m.rnibDataService.UpdateNodebInfo(nodebInfo)
+
+       if err != nil {
+               m.logger.Errorf("#RanDisconnectionManager.updateNodebInfo - RAN name: %s - Failed updating RAN's connection status to %s in rNib. Error: %v", nodebInfo.RanName, connectionStatus, err)
+               return err
+       }
+
+       m.logger.Infof("#RanDisconnectionManager.updateNodebInfo - RAN name: %s - Successfully updated rNib. RAN's current connection status: %s", nodebInfo.RanName, nodebInfo.ConnectionStatus)
+       return nil
+}
@@ -17,7 +17,6 @@
 //  This source code is part of the near-RT RIC (RAN Intelligent Controller)
 //  platform project (RICP).
 
-
 package managers
 
 import (
@@ -33,14 +32,13 @@ import (
        "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
        "github.com/pkg/errors"
        "github.com/stretchr/testify/assert"
-       "github.com/stretchr/testify/mock"
        "testing"
 )
 
 const ranName = "test"
 const e2tAddress = "10.10.2.15:9800"
 
-func initRanLostConnectionTest(t *testing.T) (*logger.Logger, *mocks.RmrMessengerMock, *mocks.RnibReaderMock, *mocks.RnibWriterMock, *RanReconnectionManager, *mocks.HttpClientMock) {
+func initRanLostConnectionTest(t *testing.T) (*logger.Logger, *mocks.RmrMessengerMock, *mocks.RnibReaderMock, *mocks.RnibWriterMock, *RanDisconnectionManager, *mocks.HttpClientMock) {
        logger, err := logger.InitLogger(logger.DebugLevel)
        if err != nil {
                t.Errorf("#... - failed to initialize logger, error: %s", err)
@@ -48,19 +46,14 @@ func initRanLostConnectionTest(t *testing.T) (*logger.Logger, *mocks.RmrMessenge
        config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
 
        rmrMessengerMock := &mocks.RmrMessengerMock{}
-       rmrSender := initRmrSender(rmrMessengerMock, logger)
-
        readerMock := &mocks.RnibReaderMock{}
-
        writerMock := &mocks.RnibWriterMock{}
-
        rnibDataService := services.NewRnibDataService(logger, config, readerMock, writerMock)
        e2tInstancesManager := NewE2TInstancesManager(rnibDataService, logger)
-       ranSetupManager := NewRanSetupManager(logger, rmrSender, rnibDataService)
        httpClient := &mocks.HttpClientMock{}
        routingManagerClient := clients.NewRoutingManagerClient(logger, config, httpClient)
        e2tAssociationManager := NewE2TAssociationManager(logger, rnibDataService, e2tInstancesManager, routingManagerClient)
-       ranReconnectionManager := NewRanReconnectionManager(logger, configuration.ParseConfiguration(), rnibDataService, ranSetupManager, e2tAssociationManager)
+       ranReconnectionManager := NewRanDisconnectionManager(logger, configuration.ParseConfiguration(), rnibDataService, e2tAssociationManager)
        return logger, rmrMessengerMock, readerMock, writerMock, ranReconnectionManager, httpClient
 }
 
@@ -69,7 +62,7 @@ func TestRanReconnectionGetNodebFailure(t *testing.T) {
 
        var nodebInfo *entities.NodebInfo
        readerMock.On("GetNodeb", ranName).Return(nodebInfo, common.NewInternalError(errors.New("Error")))
-       err := ranReconnectionManager.ReconnectRan(ranName)
+       err := ranReconnectionManager.DisconnectRan(ranName)
        assert.NotNil(t, err)
        readerMock.AssertCalled(t, "GetNodeb", ranName)
        writerMock.AssertNotCalled(t, "UpdateNodebInfo")
@@ -81,7 +74,7 @@ func TestShutdownRanReconnection(t *testing.T) {
        origNodebInfo := &entities.NodebInfo{RanName: ranName, GlobalNbId: &entities.GlobalNbId{PlmnId: "xxx", NbId: "yyy"}, ConnectionStatus: entities.ConnectionStatus_SHUT_DOWN}
        var rnibErr error
        readerMock.On("GetNodeb", ranName).Return(origNodebInfo, rnibErr)
-       err := ranReconnectionManager.ReconnectRan(ranName)
+       err := ranReconnectionManager.DisconnectRan(ranName)
        assert.Nil(t, err)
        readerMock.AssertCalled(t, "GetNodeb", ranName)
        writerMock.AssertNotCalled(t, "UpdateNodebInfo")
@@ -96,16 +89,16 @@ func TestShuttingdownRanReconnection(t *testing.T) {
        updatedNodebInfo := *origNodebInfo
        updatedNodebInfo.ConnectionStatus = entities.ConnectionStatus_SHUT_DOWN
        writerMock.On("UpdateNodebInfo", &updatedNodebInfo).Return(rnibErr)
-       err := ranReconnectionManager.ReconnectRan(ranName)
+       err := ranReconnectionManager.DisconnectRan(ranName)
        assert.Nil(t, err)
        readerMock.AssertCalled(t, "GetNodeb", ranName)
        writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 1)
 }
 
-func TestConnectingRanWithMaxAttemptsReconnectionDissociateSucceeds(t *testing.T) {
-       _, _, readerMock, writerMock, ranReconnectionManager, httpClient:= initRanLostConnectionTest(t)
+func TestConnectingRanDissociateSucceeds(t *testing.T) {
+       _, _, readerMock, writerMock, ranReconnectionManager, httpClient := initRanLostConnectionTest(t)
 
-       origNodebInfo := &entities.NodebInfo{RanName: ranName, GlobalNbId: &entities.GlobalNbId{PlmnId: "xxx", NbId: "yyy"}, ConnectionStatus: entities.ConnectionStatus_CONNECTING, ConnectionAttempts: 20, AssociatedE2TInstanceAddress: E2TAddress}
+       origNodebInfo := &entities.NodebInfo{RanName: ranName, GlobalNbId: &entities.GlobalNbId{PlmnId: "xxx", NbId: "yyy"}, ConnectionStatus: entities.ConnectionStatus_CONNECTING, AssociatedE2TInstanceAddress: E2TAddress}
        var rnibErr error
        readerMock.On("GetNodeb", ranName).Return(origNodebInfo, rnibErr)
        updatedNodebInfo1 := *origNodebInfo
@@ -115,22 +108,22 @@ func TestConnectingRanWithMaxAttemptsReconnectionDissociateSucceeds(t *testing.T
        updatedNodebInfo2.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED
        updatedNodebInfo2.AssociatedE2TInstanceAddress = ""
        writerMock.On("UpdateNodebInfo", &updatedNodebInfo2).Return(rnibErr)
-       e2tInstance := &entities.E2TInstance{Address: E2TAddress, AssociatedRanList:[]string{ranName}}
+       e2tInstance := &entities.E2TInstance{Address: E2TAddress, AssociatedRanList: []string{ranName}}
        readerMock.On("GetE2TInstance", E2TAddress).Return(e2tInstance, nil)
        e2tInstanceToSave := * e2tInstance
-       e2tInstanceToSave .AssociatedRanList = []string{}
+       e2tInstanceToSave.AssociatedRanList = []string{}
        writerMock.On("SaveE2TInstance", &e2tInstanceToSave).Return(nil)
        mockHttpClient(httpClient, clients.DissociateRanE2TInstanceApiSuffix, true)
-       err := ranReconnectionManager.ReconnectRan(ranName)
+       err := ranReconnectionManager.DisconnectRan(ranName)
        assert.Nil(t, err)
        readerMock.AssertCalled(t, "GetNodeb", ranName)
        writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 2)
 }
 
-func TestConnectingRanWithMaxAttemptsReconnectionDissociateFails(t *testing.T) {
+func TestConnectingRanDissociateFails(t *testing.T) {
        _, _, readerMock, writerMock, ranReconnectionManager, _ := initRanLostConnectionTest(t)
 
-       origNodebInfo := &entities.NodebInfo{RanName: ranName, GlobalNbId: &entities.GlobalNbId{PlmnId: "xxx", NbId: "yyy"}, ConnectionStatus: entities.ConnectionStatus_CONNECTING, ConnectionAttempts: 20, AssociatedE2TInstanceAddress: e2tAddress}
+       origNodebInfo := &entities.NodebInfo{RanName: ranName, GlobalNbId: &entities.GlobalNbId{PlmnId: "xxx", NbId: "yyy"}, ConnectionStatus: entities.ConnectionStatus_CONNECTING, AssociatedE2TInstanceAddress: e2tAddress}
        var rnibErr error
        readerMock.On("GetNodeb", ranName).Return(origNodebInfo, rnibErr)
        updatedNodebInfo1 := *origNodebInfo
@@ -140,15 +133,16 @@ func TestConnectingRanWithMaxAttemptsReconnectionDissociateFails(t *testing.T) {
        updatedNodebInfo2.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED
        updatedNodebInfo2.AssociatedE2TInstanceAddress = ""
        writerMock.On("UpdateNodebInfo", &updatedNodebInfo2).Return(rnibErr)
-       e2tInstance := &entities.E2TInstance{Address:e2tAddress, AssociatedRanList:[]string{ranName}}
-       readerMock.On("GetE2TInstance",e2tAddress).Return(e2tInstance, common.NewInternalError(errors.New("Error")))
-       err := ranReconnectionManager.ReconnectRan(ranName)
+       e2tInstance := &entities.E2TInstance{Address: e2tAddress, AssociatedRanList: []string{ranName}}
+       readerMock.On("GetE2TInstance", e2tAddress).Return(e2tInstance, common.NewInternalError(errors.New("Error")))
+       err := ranReconnectionManager.DisconnectRan(ranName)
        assert.NotNil(t, err)
        readerMock.AssertCalled(t, "GetNodeb", ranName)
        writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 2)
        writerMock.AssertNotCalled(t, "SaveE2TInstance", )
 }
 
+// TODO: change test function name
 func TestUnconnectableRanUpdateNodebInfoFailure(t *testing.T) {
        _, _, readerMock, writerMock, ranReconnectionManager, _ := initRanLostConnectionTest(t)
 
@@ -158,53 +152,12 @@ func TestUnconnectableRanUpdateNodebInfoFailure(t *testing.T) {
        updatedNodebInfo := *origNodebInfo
        updatedNodebInfo.ConnectionStatus = entities.ConnectionStatus_SHUT_DOWN
        writerMock.On("UpdateNodebInfo", &updatedNodebInfo).Return(common.NewInternalError(errors.New("Error")))
-       err := ranReconnectionManager.ReconnectRan(ranName)
+       err := ranReconnectionManager.DisconnectRan(ranName)
        assert.NotNil(t, err)
        readerMock.AssertCalled(t, "GetNodeb", ranName)
        writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 1)
 }
 
-func TestConnectedRanExecuteSetupSuccess(t *testing.T) {
-       _, rmrMessengerMock, readerMock, writerMock, ranReconnectionManager, _ := initRanLostConnectionTest(t)
-
-       origNodebInfo := &entities.NodebInfo{RanName: ranName, GlobalNbId: &entities.GlobalNbId{PlmnId: "xxx", NbId: "yyy"}, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST}
-       var rnibErr error
-       readerMock.On("GetNodeb", ranName).Return(origNodebInfo, rnibErr)
-       updatedNodebInfo := *origNodebInfo
-       updatedNodebInfo.ConnectionStatus = entities.ConnectionStatus_CONNECTING
-       updatedNodebInfo.ConnectionAttempts++
-       writerMock.On("UpdateNodebInfo", &updatedNodebInfo).Return(nil)
-       rmrMessengerMock.On("SendMsg", mock.Anything, true).Return(&rmrCgo.MBuf{}, nil)
-       err := ranReconnectionManager.ReconnectRan(ranName)
-       assert.Nil(t, err)
-       readerMock.AssertCalled(t, "GetNodeb", ranName)
-       writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 1)
-       rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 1)
-}
-
-func TestConnectedRanExecuteSetupFailure(t *testing.T) {
-       _, _, readerMock, writerMock, ranReconnectionManager, _ := initRanLostConnectionTest(t)
-
-       origNodebInfo := &entities.NodebInfo{RanName: ranName, GlobalNbId: &entities.GlobalNbId{PlmnId: "xxx", NbId: "yyy"}, ConnectionStatus: entities.ConnectionStatus_CONNECTED}
-       var rnibErr error
-       readerMock.On("GetNodeb", ranName).Return(origNodebInfo, rnibErr)
-       updatedNodebInfo := *origNodebInfo
-       updatedNodebInfo.ConnectionStatus = entities.ConnectionStatus_CONNECTING
-       updatedNodebInfo.ConnectionAttempts++
-       writerMock.On("UpdateNodebInfo", &updatedNodebInfo).Return(common.NewInternalError(errors.New("Error")))
-       err := ranReconnectionManager.ReconnectRan(ranName)
-       assert.NotNil(t, err)
-       readerMock.AssertCalled(t, "GetNodeb", ranName)
-       writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 1)
-}
-
-func TestNoSetConnectionStatus(t *testing.T) {
-       _, _, _, _, ranReconnectionManager, _ := initRanLostConnectionTest(t)
-       nodebInfo := &entities.NodebInfo{RanName: "ranName", GlobalNbId: &entities.GlobalNbId{PlmnId: "xxx", NbId: "yyy"}, ConnectionStatus: entities.ConnectionStatus_CONNECTED}
-       err := ranReconnectionManager.updateUnconnectableRan(nodebInfo)
-       assert.Nil(t, err)
-}
-
 func initRmrSender(rmrMessengerMock *mocks.RmrMessengerMock, log *logger.Logger) *rmrsender.RmrSender {
        rmrMessenger := rmrCgo.RmrMessenger(rmrMessengerMock)
        rmrMessengerMock.On("Init", tests.GetPort(), tests.MaxMsgSize, tests.Flags, log).Return(&rmrMessenger)
diff --git a/E2Manager/managers/ran_reconnection_manager.go b/E2Manager/managers/ran_reconnection_manager.go
deleted file mode 100644 (file)
index b733142..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-//
-// Copyright 2019 AT&T Intellectual Property
-// Copyright 2019 Nokia
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//  This source code is part of the near-RT RIC (RAN Intelligent Controller)
-//  platform project (RICP).
-
-
-package managers
-
-import (
-       "e2mgr/configuration"
-       "e2mgr/logger"
-       "e2mgr/services"
-       "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
-)
-
-type IRanReconnectionManager interface {
-       ReconnectRan(inventoryName string) error
-}
-
-type RanReconnectionManager struct {
-       logger                *logger.Logger
-       config                *configuration.Configuration
-       rnibDataService       services.RNibDataService
-       ranSetupManager       *RanSetupManager
-       e2tAssociationManager *E2TAssociationManager
-}
-
-func NewRanReconnectionManager(logger *logger.Logger, config *configuration.Configuration, rnibDataService services.RNibDataService, ranSetupManager *RanSetupManager, e2tAssociationManager *E2TAssociationManager) *RanReconnectionManager {
-       return &RanReconnectionManager{
-               logger:                logger,
-               config:                config,
-               rnibDataService:       rnibDataService,
-               ranSetupManager:       ranSetupManager,
-               e2tAssociationManager: e2tAssociationManager,
-       }
-}
-
-func (m *RanReconnectionManager) isRanExceededConnectionAttempts(nodebInfo *entities.NodebInfo) bool {
-       return int(nodebInfo.GetConnectionAttempts()) >= m.config.MaxConnectionAttempts
-}
-
-func (m *RanReconnectionManager) ReconnectRan(inventoryName string) error {
-       nodebInfo, rnibErr := m.rnibDataService.GetNodeb(inventoryName)
-
-       if rnibErr != nil {
-               m.logger.Errorf("#RanReconnectionManager.ReconnectRan - RAN name: %s - Failed fetching RAN from rNib. Error: %v", inventoryName, rnibErr)
-               return rnibErr
-       }
-
-       m.logger.Infof("#RanReconnectionManager.ReconnectRan - RAN name: %s - RAN's connection status: %s, RAN's connection attempts: %d", nodebInfo.RanName, nodebInfo.ConnectionStatus, nodebInfo.ConnectionAttempts)
-
-       if !m.canReconnectRan(nodebInfo) {
-               e2tAddress := nodebInfo.AssociatedE2TInstanceAddress
-               err := m.updateUnconnectableRan(nodebInfo)
-
-               if err != nil {
-                       return err
-               }
-
-               if m.isRanExceededConnectionAttempts(nodebInfo) {
-                       return m.e2tAssociationManager.DissociateRan(e2tAddress, nodebInfo.RanName)
-               }
-
-               return nil
-       }
-
-       err := m.ranSetupManager.ExecuteSetup(nodebInfo, entities.ConnectionStatus_CONNECTING)
-
-       if err != nil {
-               m.logger.Errorf("#RanReconnectionManager.ReconnectRan - RAN name: %s - Failed executing setup. Error: %v", inventoryName, err)
-               return err
-       }
-
-       return nil
-}
-
-func (m *RanReconnectionManager) canReconnectRan(nodebInfo *entities.NodebInfo) bool {
-       connectionStatus := nodebInfo.GetConnectionStatus()
-       return connectionStatus != entities.ConnectionStatus_SHUT_DOWN && connectionStatus != entities.ConnectionStatus_SHUTTING_DOWN &&
-               int(nodebInfo.GetConnectionAttempts()) < m.config.MaxConnectionAttempts
-}
-
-func (m *RanReconnectionManager) updateNodebInfo(nodebInfo *entities.NodebInfo, connectionStatus entities.ConnectionStatus) error {
-
-       nodebInfo.ConnectionStatus = connectionStatus;
-
-       err := m.rnibDataService.UpdateNodebInfo(nodebInfo)
-
-       if err != nil {
-               m.logger.Errorf("#RanReconnectionManager.updateNodebInfo - RAN name: %s - Failed updating RAN's connection status to %s in rNib. Error: %v", nodebInfo.RanName, connectionStatus, err)
-               return err
-       }
-
-       m.logger.Infof("#RanReconnectionManager.updateNodebInfo - RAN name: %s - Successfully updated rNib. RAN's current connection status: %s", nodebInfo.RanName, nodebInfo.ConnectionStatus)
-       return nil
-}
-
-func (m *RanReconnectionManager) updateUnconnectableRan(nodebInfo *entities.NodebInfo) error {
-       connectionStatus := nodebInfo.GetConnectionStatus()
-
-       if connectionStatus == entities.ConnectionStatus_SHUT_DOWN {
-               m.logger.Warnf("#RanReconnectionManager.updateUnconnectableRan - RAN name: %s - Cannot reconnect RAN. Reason: connection status is SHUT_DOWN", nodebInfo.RanName)
-               return nil
-       }
-
-       if connectionStatus == entities.ConnectionStatus_SHUTTING_DOWN {
-               m.logger.Warnf("#RanReconnectionManager.updateUnconnectableRan - RAN name: %s - Cannot reconnect RAN. Reason: connection status is SHUTTING_DOWN", nodebInfo.RanName)
-               return m.updateNodebInfo(nodebInfo, entities.ConnectionStatus_SHUT_DOWN)
-       }
-
-       if m.isRanExceededConnectionAttempts(nodebInfo) {
-               m.logger.Warnf("#RanReconnectionManager.updateUnconnectableRan - RAN name: %s - Cannot reconnect RAN. Reason: RAN's connection attempts exceeded the limit (%d)", nodebInfo.RanName, m.config.MaxConnectionAttempts)
-               return m.updateNodebInfo(nodebInfo, entities.ConnectionStatus_DISCONNECTED)
-       }
-
-       return nil
-}
index 8a3b249..18edaaf 100644 (file)
@@ -22,11 +22,11 @@ import (
        "github.com/stretchr/testify/mock"
 )
 
-type RanReconnectionManagerMock struct {
+type RanDisconnectionManagerMock struct {
        mock.Mock
 }
 
-func (m *RanReconnectionManagerMock) ReconnectRan(inventoryName string) error {
+func (m *RanDisconnectionManagerMock) DisconnectRan(inventoryName string) error {
        args := m.Called(inventoryName)
 
        return args.Error(0)
index 3d79c28..1eaa6b5 100644 (file)
@@ -17,7 +17,6 @@
 //  This source code is part of the near-RT RIC (RAN Intelligent Controller)
 //  platform project (RICP).
 
-
 package rmrmsghandlerprovider
 
 import (
@@ -69,7 +68,7 @@ func (provider *NotificationHandlerProvider) Init(logger *logger.Logger, config
        x2ResetResponseExtractor := converters.NewX2ResetResponseExtractor(logger)
 
        // Init managers
-       ranReconnectionManager := managers.NewRanReconnectionManager(logger, config, rnibDataService, ranSetupManager, e2tAssociationManager)
+       ranReconnectionManager := managers.NewRanDisconnectionManager(logger, config, rnibDataService, e2tAssociationManager)
        ranStatusChangeManager := managers.NewRanStatusChangeManager(logger, rmrSender)
        x2SetupResponseManager := managers.NewX2SetupResponseManager(x2SetupResponseConverter)
        x2SetupFailureResponseManager := managers.NewX2SetupFailureResponseManager(x2SetupFailureResponseConverter)
index 5d20a5f..f50001f 100644 (file)
@@ -64,7 +64,7 @@ func TestGetNotificationHandlerSuccess(t *testing.T) {
 
        logger, config, rnibDataService, rmrSender, ranSetupManager, e2tInstancesManager, routingManagerClient, e2tAssociationManager := initTestCase(t)
 
-       ranReconnectionManager := managers.NewRanReconnectionManager(logger, configuration.ParseConfiguration(), rnibDataService, ranSetupManager, e2tAssociationManager)
+       ranReconnectionManager := managers.NewRanDisconnectionManager(logger, configuration.ParseConfiguration(), rnibDataService, e2tAssociationManager)
        ranStatusChangeManager := managers.NewRanStatusChangeManager(logger, rmrSender)
 
        x2SetupResponseConverter := converters.NewX2SetupResponseConverter(logger)