[RIC-198]- No reassociations during e2t shutdown + fix tests 09/2609/1
authorAmichai <amichai.sichel@intl.att.com>
Thu, 27 Feb 2020 14:50:22 +0000 (16:50 +0200)
committerAmichai <amichai.sichel@intl.att.com>
Thu, 27 Feb 2020 14:50:31 +0000 (16:50 +0200)
Change-Id: I1431ca40318e3ad62c35fc9695b18b8d82b0809c
Signed-off-by: Amichai <amichai.sichel@intl.att.com>
14 files changed:
E2Manager/app/main.go
E2Manager/clients/routing_manager_client.go
E2Manager/clients/routing_manager_client_test.go
E2Manager/go.mod
E2Manager/go.sum
E2Manager/handlers/rmrmsghandlers/e2_term_init_notification_handler.go
E2Manager/handlers/rmrmsghandlers/e2_term_init_notification_handler_test.go
E2Manager/managers/e2t_association_manager.go
E2Manager/managers/e2t_association_manager_test.go
E2Manager/managers/e2t_instances_manager.go
E2Manager/managers/e2t_instances_manager_test.go
E2Manager/managers/e2t_shutdown_manager.go
E2Manager/managers/e2t_shutdown_manager_test.go
E2Manager/mocks/routing_manager_client_mock.go

index 6f180e3..719e8d7 100644 (file)
@@ -60,7 +60,7 @@ func main() {
        e2tInstancesManager := managers.NewE2TInstancesManager(rnibDataService, logger)
        routingManagerClient := clients.NewRoutingManagerClient(logger, config, clients.NewHttpClient())
        e2tAssociationManager := managers.NewE2TAssociationManager(logger, rnibDataService, e2tInstancesManager, routingManagerClient)
-       e2tShutdownManager := managers.NewE2TShutdownManager(logger, config, rnibDataService, e2tInstancesManager, e2tAssociationManager, ranSetupManager)
+       e2tShutdownManager := managers.NewE2TShutdownManager(logger, config, rnibDataService, e2tInstancesManager, e2tAssociationManager)
        e2tKeepAliveWorker := managers.NewE2TKeepAliveWorker(logger, rmrSender, e2tInstancesManager, e2tShutdownManager, config)
        rmrNotificationHandlerProvider := rmrmsghandlerprovider.NewNotificationHandlerProvider()
        rmrNotificationHandlerProvider.Init(logger, config, rnibDataService, rmrSender, ranSetupManager, e2tInstancesManager, routingManagerClient, e2tAssociationManager)
index 318b7cf..2625612 100644 (file)
@@ -47,7 +47,7 @@ type IRoutingManagerClient interface {
        AssociateRanToE2TInstance(e2tAddress string, ranName string) error
        DissociateRanE2TInstance(e2tAddress string, ranName string) error
        DissociateAllRans(e2tAddresses []string) error
-       DeleteE2TInstance(e2tAddress string, ransToBeDissociated []string, e2tToRansAssociations map[string][]string) error
+       DeleteE2TInstance(e2tAddress string, ransToBeDissociated []string) error
 }
 
 func NewRoutingManagerClient(logger *logger.Logger, config *configuration.Configuration, httpClient IHttpClient) *RoutingManagerClient {
@@ -90,9 +90,8 @@ func (c *RoutingManagerClient) DissociateAllRans(e2tAddresses []string) error {
        return c.PostMessage(url, data)
 }
 
-func (c *RoutingManagerClient) DeleteE2TInstance(e2tAddress string, ransTobeDissociated []string, e2tToRansAssociations map[string][]string) error {
-       e2tDataList := convertE2TToRansAssociationsMapToE2TDataList(e2tToRansAssociations)
-       data := models.NewRoutingManagerDeleteRequestModel(e2tAddress, ransTobeDissociated, e2tDataList)
+func (c *RoutingManagerClient) DeleteE2TInstance(e2tAddress string, ransTobeDissociated []string) error {
+       data := models.NewRoutingManagerDeleteRequestModel(e2tAddress, ransTobeDissociated, nil)
        url := c.config.RoutingManager.BaseUrl + DeleteE2TInstanceApiSuffix
        return c.DeleteMessage(url, data)
 }
index 2af458c..bf5f82c 100644 (file)
@@ -50,50 +50,38 @@ func initRoutingManagerClientTest(t *testing.T) (*RoutingManagerClient, *mocks.H
 func TestDeleteE2TInstanceSuccess(t *testing.T) {
        rmClient, httpClientMock, config := initRoutingManagerClientTest(t)
 
-       e2tToRansAssociations := map[string][]string{
-               E2TAddress2: {"test1"},
-       }
-       e2tDataList := convertE2TToRansAssociationsMapToE2TDataList(e2tToRansAssociations)
-       data := models.NewRoutingManagerDeleteRequestModel(E2TAddress, []string{"test1"},e2tDataList)
+       data := models.NewRoutingManagerDeleteRequestModel(E2TAddress, []string{"test1"}, nil)
        marshaled, _ := json.Marshal(data)
        body := bytes.NewBuffer(marshaled)
        url := config.RoutingManager.BaseUrl + "e2t"
        respBody := ioutil.NopCloser(bytes.NewBufferString(""))
        httpClientMock.On("Delete", url, "application/json", body).Return(&http.Response{StatusCode: http.StatusOK, Body: respBody}, nil)
-       err := rmClient.DeleteE2TInstance(E2TAddress, []string{"test1"}, e2tToRansAssociations)
+       err := rmClient.DeleteE2TInstance(E2TAddress, []string{"test1"})
        assert.Nil(t, err)
 }
 
 func TestDeleteE2TInstanceFailure(t *testing.T) {
        rmClient, httpClientMock, config := initRoutingManagerClientTest(t)
 
-       e2tToRansAssociations := map[string][]string{
-               E2TAddress2: {"test1"},
-       }
-       e2tDataList := convertE2TToRansAssociationsMapToE2TDataList(e2tToRansAssociations)
-       data := models.NewRoutingManagerDeleteRequestModel(E2TAddress, []string{"test1"},e2tDataList)
+       data := models.NewRoutingManagerDeleteRequestModel(E2TAddress, []string{"test1"},nil)
        marshaled, _ := json.Marshal(data)
        body := bytes.NewBuffer(marshaled)
        url := config.RoutingManager.BaseUrl + "e2t"
        respBody := ioutil.NopCloser(bytes.NewBufferString(""))
        httpClientMock.On("Delete", url, "application/json", body).Return(&http.Response{StatusCode: http.StatusBadRequest, Body: respBody}, nil)
-       err := rmClient.DeleteE2TInstance(E2TAddress, []string{"test1"}, e2tToRansAssociations)
+       err := rmClient.DeleteE2TInstance(E2TAddress, []string{"test1"})
        assert.IsType(t, &e2managererrors.RoutingManagerError{}, err)
 }
 
 func TestDeleteE2TInstanceDeleteFailure(t *testing.T) {
        rmClient, httpClientMock, config := initRoutingManagerClientTest(t)
 
-       e2tToRansAssociations := map[string][]string{
-               E2TAddress2: {"test1"},
-       }
-       e2tDataList := convertE2TToRansAssociationsMapToE2TDataList(e2tToRansAssociations)
-       data := models.NewRoutingManagerDeleteRequestModel(E2TAddress, []string{"test1"},e2tDataList)
+       data := models.NewRoutingManagerDeleteRequestModel(E2TAddress, []string{"test1"},nil)
        marshaled, _ := json.Marshal(data)
        body := bytes.NewBuffer(marshaled)
        url := config.RoutingManager.BaseUrl + "e2t"
        httpClientMock.On("Delete", url, "application/json", body).Return(&http.Response{}, errors.New("error"))
-       err := rmClient.DeleteE2TInstance(E2TAddress, []string{"test1"}, e2tToRansAssociations)
+       err := rmClient.DeleteE2TInstance(E2TAddress, []string{"test1"})
        assert.IsType(t, &e2managererrors.RoutingManagerError{}, err)
 }
 
index 59a3fc9..8cd3f48 100644 (file)
@@ -1,9 +1,9 @@
 module e2mgr
 
 require (
-       gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common v1.0.29
-       gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.29
-       gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.29
+       gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common v1.0.30
+       gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.30
+       gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.30
        gerrit.o-ran-sc.org/r/ric-plt/sdlgo v0.5.2
        github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a // indirect
        github.com/go-ozzo/ozzo-validation v3.5.0+incompatible
index ad692e7..1f1691a 100644 (file)
@@ -1,10 +1,10 @@
 cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common v1.0.29 h1:T0ydbEy2pmP2n8A/eyx5iF5PNm0XYa3A5G5HmXsN0Wo=
-gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common v1.0.29/go.mod h1:QJ1uPPZosGbhxUWpUpeM5fLqFHdnWTrVnvW2DgyOCes=
-gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.29 h1:H/6CeGFUwS4S1DJ2OVwjt/qKmm/VTdgcgHcxBJfrQt4=
-gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.29/go.mod h1:Fh23KkroYw5CRBh39WzZzxpKSkpQWL3scdzGnMngLo8=
-gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.29 h1:eke+zU8y2gQmEBxAQryBXwBWwvXSHeu+pC11t8luQBQ=
-gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.29/go.mod h1:EPOJ7YGXDS5F+IK1pa9cv2JYlj73PYOXVvgolhhCSfM=
+gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common v1.0.30 h1:GuA/5jPx+Srjcs38Bja0392Ht+7ubUOyBbCAp4QRCJY=
+gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common v1.0.30/go.mod h1:QJ1uPPZosGbhxUWpUpeM5fLqFHdnWTrVnvW2DgyOCes=
+gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.30 h1:MBOyQeDNA+8rs8OSsEIuh7oHhO/5v7ISimd/BMRhLYA=
+gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.30/go.mod h1:Fh23KkroYw5CRBh39WzZzxpKSkpQWL3scdzGnMngLo8=
+gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.30 h1:fL5qY6KS5RRxvduCnXeK8fWj7YUF1p9b9ObduFSSlRs=
+gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.30/go.mod h1:HeUXZTDqAaGYiVVcWrHwgY0qDNQ6Rt6nZSvWdMueDNc=
 gerrit.o-ran-sc.org/r/ric-plt/sdlgo.git v0.5.2 h1:UK7awyRKIkVdokWvvkYvazlg3EWIfMnIqCcJxTnLlDA=
 gerrit.o-ran-sc.org/r/ric-plt/sdlgo.git v0.5.2/go.mod h1:y2WhrCvdLkAKdH+ySdHSOSehACJkTMyZghCGVcqoZzc=
 github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
index c36438d..4987ef1 100644 (file)
@@ -88,13 +88,6 @@ func (h E2TermInitNotificationHandler) Handle(request *models.NotificationReques
                return
        }
 
-       if e2tInstance.State == entities.RoutingManagerFailure {
-               err := h.e2tInstancesManager.SetE2tInstanceState(e2tAddress, e2tInstance.State, entities.Active)
-               if err != nil {
-                       return
-               }
-       }
-
        h.HandleExistingE2TInstance(e2tInstance)
 
        h.logger.Infof("#E2TermInitNotificationHandler.Handle - Completed handling of E2_TERM_INIT")
index 6c830b1..e06b37f 100644 (file)
@@ -36,7 +36,6 @@ import (
        "fmt"
        "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
        "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
-       "github.com/pkg/errors"
        "github.com/stretchr/testify/mock"
        "io/ioutil"
        "net/http"
@@ -152,23 +151,6 @@ func TestE2TermInitNewE2TInstance(t *testing.T) {
        writerMock.AssertCalled(t, "SaveE2TAddresses", e2tAddresses)
 }
 
-func TestE2TermInitNewE2TInstance_RoutingManagerError(t *testing.T) {
-       _, config, handler, readerMock, writerMock, _, httpClientMock := initRanLostConnectionTestWithRealE2tInstanceManager(t)
-       var e2tInstance *entities.E2TInstance
-
-       readerMock.On("GetE2TInstance", e2tInstanceAddress).Return(e2tInstance, common.NewResourceNotFoundError("not found"))
-
-       url := config.RoutingManager.BaseUrl + clients.AddE2TInstanceApiSuffix
-       httpClientMock.On("Post", url, mock.Anything, mock.Anything).Return(&http.Response{}, errors.New("error"))
-
-       notificationRequest := &models.NotificationRequest{RanName: RanName, Payload: []byte(e2tInitPayload)}
-       handler.Handle(notificationRequest)
-
-       httpClientMock.AssertCalled(t, "Post", url, mock.Anything, mock.Anything)
-       writerMock.AssertNotCalled(t, "SaveE2TInstance", mock.Anything)
-       writerMock.AssertNotCalled(t, "SaveE2TAddresses", mock.Anything)
-}
-
 func TestE2TermInitExistingE2TInstanceNoAssociatedRans(t *testing.T) {
        _, handler, _, _, _, e2tInstancesManagerMock, _  := initRanLostConnectionTest(t)
        e2tInstance := entities.NewE2TInstance(e2tInstanceAddress)
@@ -262,72 +244,6 @@ 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 TestE2TermInitHandlerSuccessOneRan_RoutingManagerFailure_Error(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.State = entities.RoutingManagerFailure
-       e2tInstance.AssociatedRanList = append(e2tInstance.AssociatedRanList, RanName)
-
-       e2tInstancesManagerMock.On("GetE2TInstance", e2tInstanceAddress).Return(e2tInstance, nil)
-       e2tInstancesManagerMock.On("SetE2tInstanceState", e2tInstanceAddress, e2tInstance.State, entities.Active).Return(fmt.Errorf(" Error "))
-       writerMock.On("UpdateNodebInfo", argNodeb).Return(rnibErr)
-
-       notificationRequest := &models.NotificationRequest{RanName: RanName, Payload: []byte(e2tInitPayload)}
-
-       handler.Handle(notificationRequest)
-
-       writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 0)
-       rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 0)
-}
-
 //func TestE2TermInitHandlerSuccessTwoRans(t *testing.T) {
 //     _, _, handler, readerMock, writerMock, rmrMessengerMock, httpClientMock:= initRanLostConnectionTestWithRealE2tInstanceManager(t)
 //     var rnibErr error
index 1b105b0..822c01a 100644 (file)
@@ -101,14 +101,13 @@ func (m *E2TAssociationManager) DissociateRan(e2tAddress string, ranName string)
        return nil
 }
 
-func (m *E2TAssociationManager) RemoveE2tInstance(e2tInstance *entities.E2TInstance, ransToBeDissociated []string, ranAssociationList map[string][]string) error {
-       m.logger.Infof("#E2TAssociationManager.RemoveE2tInstance -  Removing E2T %s and re-associating its associated RANs.", e2tInstance.Address)
+func (m *E2TAssociationManager) RemoveE2tInstance(e2tInstance *entities.E2TInstance) error {
+       m.logger.Infof("#E2TAssociationManager.RemoveE2tInstance -  Removing E2T %s and dessociating its associated RANs.", e2tInstance.Address)
 
-       err := m.rmClient.DeleteE2TInstance(e2tInstance.Address, ransToBeDissociated, ranAssociationList)
+       err := m.rmClient.DeleteE2TInstance(e2tInstance.Address, e2tInstance.AssociatedRanList)
        if err != nil {
-               _ = m.setStateToRoutingManagerFailure(e2tInstance)
-               m.logger.Errorf("#E2TAssociationManager.RemoveE2tInstance - RoutingManager failure: Failed to delete E2T %s. Error: %s", e2tInstance.Address, err)
-               return err
+               m.logger.Warnf("#E2TAssociationManager.RemoveE2tInstance - RoutingManager failure: Failed to delete E2T %s. Error: %s", e2tInstance.Address, err)
+               // log and continue
        }
 
        err = m.e2tInstanceManager.RemoveE2TInstance(e2tInstance.Address)
@@ -117,23 +116,6 @@ func (m *E2TAssociationManager) RemoveE2tInstance(e2tInstance *entities.E2TInsta
                return err
        }
 
-       for e2tAddress, associatedRans := range ranAssociationList {
-               err = m.e2tInstanceManager.AddRansToInstance(e2tAddress, associatedRans)
-               if err != nil {
-                       m.logger.Errorf("#E2TAssociationManager.RemoveE2tInstance - Failed to add RANs %s to E2T %s. Error: %s", associatedRans, e2tAddress, err)
-                       return err
-               }
-       }
-
        m.logger.Infof("#E2TAssociationManager.RemoveE2tInstance -  E2T %s successfully removed.", e2tInstance.Address)
        return nil
 }
-
-func (m *E2TAssociationManager) setStateToRoutingManagerFailure(e2tInstance *entities.E2TInstance) error {
-
-       err := m.e2tInstanceManager.SetE2tInstanceState(e2tInstance.Address, e2tInstance.State, entities.RoutingManagerFailure)
-       if err != nil {
-               return err
-       }
-       return nil
-}
index 3f31f6b..73be905 100644 (file)
@@ -31,7 +31,6 @@ 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"
        "io/ioutil"
        "net/http"
        "testing"
@@ -285,43 +284,6 @@ func TestDissociateRanRoutingManagerError(t *testing.T) {
        httpClientMock.AssertExpectations(t)
 }
 
-func TestRemoveE2tInstanceSuccess(t *testing.T) {
-       manager, readerMock, writerMock, httpClientMock := initE2TAssociationManagerTest(t)
-
-       e2tDataList := models.RoutingManagerE2TDataList{models.NewRoutingManagerE2TData(E2TAddress2, RanName), models.NewRoutingManagerE2TData(E2TAddress3, "test1")}
-       data := models.NewRoutingManagerDeleteRequestModel(E2TAddress, nil, e2tDataList)
-       mockHttpClientDelete(httpClientMock, data, true)
-
-       writerMock.On("RemoveE2TInstance", E2TAddress).Return(nil)
-       e2tAddresses := []string{E2TAddress, E2TAddress2, E2TAddress3}
-       readerMock.On("GetE2TAddresses").Return(e2tAddresses, nil)
-       e2tAddressesNew := []string{E2TAddress2, E2TAddress3}
-       writerMock.On("SaveE2TAddresses", e2tAddressesNew).Return(nil)
-
-       e2tInstance1 := &entities.E2TInstance{Address: E2TAddress}
-       e2tInstance2 := &entities.E2TInstance{Address: E2TAddress2}
-       readerMock.On("GetE2TInstance", E2TAddress2).Return(e2tInstance2, nil)
-       e2tInstance3 := &entities.E2TInstance{Address: E2TAddress3}
-       readerMock.On("GetE2TInstance", E2TAddress3).Return(e2tInstance3, nil)
-
-       e2tInstance2updated := *e2tInstance2
-       e2tInstance2updated.AssociatedRanList = []string{RanName}
-       writerMock.On("SaveE2TInstance", &e2tInstance2updated).Return(nil)
-       e2tInstance3updated := *e2tInstance3
-       e2tInstance3updated.AssociatedRanList = []string{"test1"}
-       writerMock.On("SaveE2TInstance", &e2tInstance3updated).Return(nil)
-
-       ranNamesToBeAssociated := make(map[string][]string)
-       ranNamesToBeAssociated[E2TAddress2] = []string{RanName}
-       ranNamesToBeAssociated[E2TAddress3] = []string{"test1"}
-       err := manager.RemoveE2tInstance(e2tInstance1, nil, ranNamesToBeAssociated)
-
-       assert.Nil(t, err)
-       readerMock.AssertExpectations(t)
-       writerMock.AssertExpectations(t)
-       httpClientMock.AssertExpectations(t)
-}
-
 func TestRemoveE2tInstanceSuccessWithOrphans(t *testing.T) {
        manager, readerMock, writerMock, httpClientMock := initE2TAssociationManagerTest(t)
 
@@ -335,8 +297,8 @@ func TestRemoveE2tInstanceSuccessWithOrphans(t *testing.T) {
        e2tAddressesNew := []string{}
        writerMock.On("SaveE2TAddresses", e2tAddressesNew).Return(nil)
 
-       e2tInstance1 := &entities.E2TInstance{Address: E2TAddress}
-       err := manager.RemoveE2tInstance(e2tInstance1, ranNamesToBeDissociated, nil)
+       e2tInstance1 := &entities.E2TInstance{Address: E2TAddress, AssociatedRanList:ranNamesToBeDissociated}
+       err := manager.RemoveE2tInstance(e2tInstance1)
 
        assert.Nil(t, err)
        readerMock.AssertExpectations(t)
@@ -347,63 +309,20 @@ func TestRemoveE2tInstanceSuccessWithOrphans(t *testing.T) {
 func TestRemoveE2tInstanceFailureRoutingManager(t *testing.T) {
        manager, readerMock, writerMock, httpClientMock := initE2TAssociationManagerTest(t)
 
-       e2tDataList := models.RoutingManagerE2TDataList{models.NewRoutingManagerE2TData(E2TAddress, RanName)}
-       data := models.NewRoutingManagerDeleteRequestModel(E2TAddress, []string{"test1"}, e2tDataList)
+       data := models.NewRoutingManagerDeleteRequestModel(E2TAddress, []string{"test1"}, nil)
        mockHttpClientDelete(httpClientMock, data, false)
 
-       e2tInstance1 := entities.NewE2TInstance(E2TAddress)
-       e2tInstance1.State = entities.Active
-       readerMock.On("GetE2TInstance", E2TAddress).Return(e2tInstance1, nil)
-       e2tInstance2 := *e2tInstance1
-       e2tInstance2.State = entities.RoutingManagerFailure
-       writerMock.On("SaveE2TInstance", &e2tInstance2).Return(nil)
-       ranNamesToBeAssociated := make(map[string][]string)
-       ranNamesToBeAssociated[E2TAddress] = []string{"test"}
-       err := manager.RemoveE2tInstance(e2tInstance1, []string{"test1"}, ranNamesToBeAssociated)
-
-       assert.NotNil(t, err)
-       readerMock.AssertExpectations(t)
-       writerMock.AssertExpectations(t)
-       httpClientMock.AssertExpectations(t)
-}
-
-func TestRemoveE2tInstanceFailureRoutingManagerAndGetInstance(t *testing.T) {
-       manager, readerMock, writerMock, httpClientMock := initE2TAssociationManagerTest(t)
-
-       e2tDataList := models.RoutingManagerE2TDataList{models.NewRoutingManagerE2TData(E2TAddress, RanName)}
-       data := models.NewRoutingManagerDeleteRequestModel(E2TAddress, []string{"test1"}, e2tDataList)
-       mockHttpClientDelete(httpClientMock, data, false)
-
-       e2tInstance1 := &entities.E2TInstance{Address: E2TAddress}
-       readerMock.On("GetE2TInstance", E2TAddress).Return(e2tInstance1, e2managererrors.NewRnibDbError())
-       ranNamesToBeAssociated := make(map[string][]string)
-       ranNamesToBeAssociated[E2TAddress] = []string{"test"}
-       err := manager.RemoveE2tInstance(e2tInstance1, []string{"test1"}, ranNamesToBeAssociated)
-
-       assert.NotNil(t, err)
-       readerMock.AssertExpectations(t)
-       writerMock.AssertExpectations(t)
-       httpClientMock.AssertExpectations(t)
-}
-
-func TestRemoveE2tInstanceFailureRoutingManagerAndSetInstanceState(t *testing.T) {
-       manager, readerMock, writerMock, httpClientMock := initE2TAssociationManagerTest(t)
-
-       e2tDataList := models.RoutingManagerE2TDataList{models.NewRoutingManagerE2TData(E2TAddress, RanName)}
-       data := models.NewRoutingManagerDeleteRequestModel(E2TAddress, []string{"test1"}, e2tDataList)
-       mockHttpClientDelete(httpClientMock, data, false)
+       writerMock.On("RemoveE2TInstance", E2TAddress).Return(nil)
+       e2tAddresses := []string{E2TAddress}
+       readerMock.On("GetE2TAddresses").Return(e2tAddresses, nil)
+       e2tAddressesNew := []string{}
+       writerMock.On("SaveE2TAddresses", e2tAddressesNew).Return(nil)
 
-       e2tInstance1 := entities.NewE2TInstance(E2TAddress)
-       e2tInstance1.State = entities.Active
-       readerMock.On("GetE2TInstance", E2TAddress).Return(e2tInstance1, nil)
-       e2tInstance2 := *e2tInstance1
-       e2tInstance2.State = entities.RoutingManagerFailure
-       writerMock.On("SaveE2TInstance", &e2tInstance2).Return(e2managererrors.NewRnibDbError())
-       ranNamesToBeAssociated := make(map[string][]string)
-       ranNamesToBeAssociated[E2TAddress] = []string{"test"}
-       err := manager.RemoveE2tInstance(e2tInstance1, []string{"test1"}, ranNamesToBeAssociated)
+       e2tInstance1 := &entities.E2TInstance{Address: E2TAddress, AssociatedRanList:[]string{"test1"}}
+       //readerMock.On("GetE2TInstance", E2TAddress).Return(e2tInstance1, e2managererrors.NewRnibDbError())
+       err := manager.RemoveE2tInstance(e2tInstance1)
 
-       assert.NotNil(t, err)
+       assert.Nil(t, err)
        readerMock.AssertExpectations(t)
        writerMock.AssertExpectations(t)
        httpClientMock.AssertExpectations(t)
@@ -411,8 +330,7 @@ func TestRemoveE2tInstanceFailureRoutingManagerAndSetInstanceState(t *testing.T)
 
 func TestRemoveE2tInstanceFailureInE2TInstanceManager(t *testing.T) {
 
-       e2tDataList := models.RoutingManagerE2TDataList{models.NewRoutingManagerE2TData(E2TAddress, RanName)}
-       data := models.NewRoutingManagerDeleteRequestModel(E2TAddress, []string{"test1"}, e2tDataList)
+       data := models.NewRoutingManagerDeleteRequestModel(E2TAddress, []string{"test1"}, nil)
        manager, readerMock, writerMock, httpClientMock := initE2TAssociationManagerTest(t)
        mockHttpClientDelete(httpClientMock, data, true)
 
@@ -420,10 +338,8 @@ func TestRemoveE2tInstanceFailureInE2TInstanceManager(t *testing.T) {
        var e2tAddresses []string
        readerMock.On("GetE2TAddresses").Return(e2tAddresses, e2managererrors.NewRnibDbError())
 
-       ranNamesToBeAssociated := make(map[string][]string)
-       ranNamesToBeAssociated[E2TAddress] = []string{"test"}
-       e2tInstance1 := &entities.E2TInstance{Address: E2TAddress}
-       err := manager.RemoveE2tInstance(e2tInstance1, []string{"test1"}, ranNamesToBeAssociated)
+       e2tInstance1 := &entities.E2TInstance{Address: E2TAddress, AssociatedRanList:[]string{"test1"}}
+       err := manager.RemoveE2tInstance(e2tInstance1)
 
        assert.NotNil(t, err)
        readerMock.AssertExpectations(t)
@@ -434,8 +350,7 @@ func TestRemoveE2tInstanceFailureInE2TInstanceManager(t *testing.T) {
 func TestRemoveE2tInstanceFailureInE2tInstanceAddRansToInstance(t *testing.T) {
        manager, readerMock, writerMock, httpClientMock := initE2TAssociationManagerTest(t)
 
-       e2tDataList := models.RoutingManagerE2TDataList{models.NewRoutingManagerE2TData(E2TAddress2, RanName), models.NewRoutingManagerE2TData(E2TAddress3, "test1")}
-       data := models.NewRoutingManagerDeleteRequestModel(E2TAddress, nil, e2tDataList)
+       data := models.NewRoutingManagerDeleteRequestModel(E2TAddress, nil, nil)
        mockHttpClientDelete(httpClientMock, data, true)
 
        writerMock.On("RemoveE2TInstance", E2TAddress).Return(nil)
@@ -444,17 +359,10 @@ func TestRemoveE2tInstanceFailureInE2tInstanceAddRansToInstance(t *testing.T) {
        e2tAddressesNew := []string{E2TAddress2, E2TAddress3}
        writerMock.On("SaveE2TAddresses", e2tAddressesNew).Return(nil)
 
-       var e2tInstance2 *entities.E2TInstance
-       readerMock.On("GetE2TInstance", mock.Anything).Return(e2tInstance2, e2managererrors.NewRnibDbError())
-
-       ranNamesToBeAssociated := make(map[string][]string)
-       ranNamesToBeAssociated[E2TAddress2] = []string{RanName}
-       ranNamesToBeAssociated[E2TAddress3] = []string{"test1"}
-
        e2tInstance1 := &entities.E2TInstance{Address: E2TAddress}
-       err := manager.RemoveE2tInstance(e2tInstance1, nil, ranNamesToBeAssociated)
+       err := manager.RemoveE2tInstance(e2tInstance1)
 
-       assert.NotNil(t, err)
+       assert.Nil(t, err)
        readerMock.AssertExpectations(t)
        writerMock.AssertExpectations(t)
        httpClientMock.AssertExpectations(t)
index d4cc3d8..f8def48 100644 (file)
@@ -371,7 +371,7 @@ func (m *E2TInstancesManager) ResetKeepAliveTimestamp(e2tAddress string) error {
                return err
        }
 
-       if e2tInstance.State == entities.ToBeDeleted || e2tInstance.State == entities.RoutingManagerFailure {
+       if e2tInstance.State == entities.ToBeDeleted {
                m.logger.Warnf("#E2TInstancesManager.ResetKeepAliveTimestamp - Ignore. This Instance is about to be deleted")
                return nil
 
index 41fea42..2674349 100644 (file)
@@ -300,12 +300,12 @@ func TestActivateE2TInstanceSuccess(t *testing.T) {
        rnibReaderMock, rnibWriterMock, e2tInstancesManager := initE2TInstancesManagerTest(t)
 
        e2tInstance1 := entities.NewE2TInstance(E2TAddress)
-       e2tInstance1.State = entities.RoutingManagerFailure
+       e2tInstance1.State = entities.ToBeDeleted
        e2tInstance1.AssociatedRanList = []string{"test1","test2","test3"}
        rnibReaderMock.On("GetE2TInstance", E2TAddress).Return(e2tInstance1, nil)
        rnibWriterMock.On("SaveE2TInstance", mock.MatchedBy(func(e2tInstance *entities.E2TInstance) bool { return e2tInstance.State == entities.Active })).Return(nil)
 
-       err := e2tInstancesManager.SetE2tInstanceState(E2TAddress, entities.RoutingManagerFailure, entities.Active)
+       err := e2tInstancesManager.SetE2tInstanceState(E2TAddress, entities.ToBeDeleted, entities.Active)
        assert.Nil(t, err)
        assert.Equal(t, entities.Active, e2tInstance1.State)
        rnibWriterMock.AssertExpectations(t)
@@ -317,7 +317,7 @@ func TestActivateE2TInstance_RnibError(t *testing.T) {
        var e2tInstance1 *entities.E2TInstance
        rnibReaderMock.On("GetE2TInstance", E2TAddress).Return(e2tInstance1, common.NewInternalError(errors.New("for test")))
 
-       err := e2tInstancesManager.SetE2tInstanceState(E2TAddress, entities.RoutingManagerFailure, entities.Active)
+       err := e2tInstancesManager.SetE2tInstanceState(E2TAddress, entities.ToBeDeleted, entities.Active)
        assert.NotNil(t, err)
        rnibWriterMock.AssertExpectations(t)
 }
@@ -328,7 +328,7 @@ func TestActivateE2TInstance_NoInstance(t *testing.T) {
        var e2tInstance1 *entities.E2TInstance
        rnibReaderMock.On("GetE2TInstance", E2TAddress).Return(e2tInstance1, e2managererrors.NewResourceNotFoundError())
 
-       err := e2tInstancesManager.SetE2tInstanceState(E2TAddress, entities.RoutingManagerFailure, entities.Active)
+       err := e2tInstancesManager.SetE2tInstanceState(E2TAddress, entities.ToBeDeleted, entities.Active)
 
        assert.NotNil(t, err)
        rnibWriterMock.AssertNotCalled(t, "SaveE2TInstance")
@@ -387,20 +387,6 @@ func TestResetKeepAliveTimestampToBeDeleted(t *testing.T) {
        rnibWriterMock.AssertNotCalled(t, "SaveE2TInstance")
 }
 
-func TestResetKeepAliveTimestampRoutingManagerFailure(t *testing.T) {
-       rnibReaderMock, rnibWriterMock, e2tInstancesManager := initE2TInstancesManagerTest(t)
-
-       address := "10.10.2.15:9800"
-       e2tInstance := entities.NewE2TInstance(address)
-       e2tInstance.State = entities.RoutingManagerFailure
-       rnibReaderMock.On("GetE2TInstance", address).Return(e2tInstance, nil)
-
-       err := e2tInstancesManager.ResetKeepAliveTimestamp(address)
-       assert.Nil(t, err)
-       rnibReaderMock.AssertCalled(t, "GetE2TInstance", address)
-       rnibWriterMock.AssertNotCalled(t, "SaveE2TInstance")
-}
-
 func TestResetKeepAliveTimestampsForAllE2TInstancesGetE2TInstancesFailure(t *testing.T) {
        rnibReaderMock, rnibWriterMock, e2tInstancesManager := initE2TInstancesManagerTest(t)
        rnibReaderMock.On("GetE2TAddresses").Return([]string{}, common.NewInternalError(errors.New("Error")))
@@ -422,7 +408,7 @@ func TestResetKeepAliveTimestampsForAllE2TInstancesNoActiveInstances(t *testing.
        e2tInstance1 := entities.NewE2TInstance(E2TAddress)
        e2tInstance1.State = entities.ToBeDeleted
        e2tInstance2 := entities.NewE2TInstance(E2TAddress2)
-       e2tInstance2.State = entities.RoutingManagerFailure
+       e2tInstance2.State = entities.ToBeDeleted
        rnibReaderMock.On("GetE2TInstances", e2tAddresses).Return([]*entities.E2TInstance{e2tInstance1, e2tInstance2}, nil)
        e2tInstancesManager.ResetKeepAliveTimestampsForAllE2TInstances()
        rnibWriterMock.AssertNotCalled(t, "SaveE2TInstance")
@@ -508,3 +494,59 @@ func TestRemoveE2TInstanceRnibErrorInSaveAddresses(t *testing.T) {
        rnibReaderMock.AssertExpectations(t)
        rnibWriterMock.AssertExpectations(t)
 }
+
+func TestSetE2tInstanceStateCurrentStateHasChanged(t *testing.T) {
+       rnibReaderMock, _, e2tInstancesManager := initE2TInstancesManagerTest(t)
+
+       e2tInstance := entities.NewE2TInstance(E2TAddress)
+       e2tInstance.State = entities.Active
+
+       rnibReaderMock.On("GetE2TInstance", E2TAddress).Return(e2tInstance, nil)
+
+       err := e2tInstancesManager.SetE2tInstanceState(E2TAddress, entities.ToBeDeleted, entities.Active)
+       assert.NotNil(t, err)
+       assert.IsType(t, e2managererrors.NewInternalError(), err)
+       rnibReaderMock.AssertExpectations(t)
+}
+
+func TestSetE2tInstanceStateErrorInSaveE2TInstance(t *testing.T) {
+       rnibReaderMock, rnibWriterMock, e2tInstancesManager := initE2TInstancesManagerTest(t)
+
+       e2tInstance := entities.NewE2TInstance(E2TAddress)
+       e2tInstance.State = entities.ToBeDeleted
+       rnibReaderMock.On("GetE2TInstance", E2TAddress).Return(e2tInstance, nil)
+       rnibWriterMock.On("SaveE2TInstance", mock.Anything).Return(common.NewInternalError(fmt.Errorf("for testing")))
+
+       err := e2tInstancesManager.SetE2tInstanceState(E2TAddress, entities.ToBeDeleted, entities.Active)
+       assert.NotNil(t, err)
+       assert.IsType(t, &common.InternalError{}, err)
+       rnibReaderMock.AssertExpectations(t)
+}
+
+func TestClearRansOfAllE2TInstancesEmptyList(t *testing.T) {
+       rnibReaderMock, rnibWriterMock, e2tInstancesManager := initE2TInstancesManagerTest(t)
+       E2TAddresses := []string{}
+       rnibReaderMock.On("GetE2TAddresses").Return(E2TAddresses, nil)
+       err := e2tInstancesManager.ClearRansOfAllE2TInstances()
+       assert.Nil(t, err)
+       rnibReaderMock.AssertExpectations(t)
+       rnibWriterMock.AssertExpectations(t)
+}
+
+func TestClearRansOfAllE2TInstancesErrorInSaveE2TInstance(t *testing.T) {
+       rnibReaderMock, rnibWriterMock, e2tInstancesManager := initE2TInstancesManagerTest(t)
+       addresses := []string{E2TAddress, E2TAddress2}
+       e2tInstance1 := entities.NewE2TInstance(E2TAddress)
+       e2tInstance1.AssociatedRanList = []string{"test1", "test2", "test3"}
+       e2tInstance2 := entities.NewE2TInstance(E2TAddress2)
+       e2tInstance2.AssociatedRanList = []string{"test4", "test5", "test6", "test7"}
+
+       rnibReaderMock.On("GetE2TAddresses").Return(addresses, nil)
+       rnibReaderMock.On("GetE2TInstances", addresses).Return([]*entities.E2TInstance{e2tInstance1, e2tInstance2}, nil)
+       rnibWriterMock.On("SaveE2TInstance", mock.MatchedBy(func(e2tInstance *entities.E2TInstance) bool { return e2tInstance.Address == E2TAddress})).Return(common.NewInternalError(fmt.Errorf("for testing")))
+       rnibWriterMock.On("SaveE2TInstance", mock.MatchedBy(func(e2tInstance *entities.E2TInstance) bool { return e2tInstance.Address == E2TAddress2})).Return(nil)
+       err := e2tInstancesManager.ClearRansOfAllE2TInstances()
+       assert.Nil(t, err)
+       rnibReaderMock.AssertExpectations(t)
+       rnibWriterMock.AssertExpectations(t)
+}
index dd71ad4..9ecf416 100644 (file)
@@ -39,17 +39,15 @@ type E2TShutdownManager struct {
        rnibDataService       services.RNibDataService
        e2TInstancesManager   IE2TInstancesManager
        e2tAssociationManager *E2TAssociationManager
-       ranSetupManager       IRanSetupManager
 }
 
-func NewE2TShutdownManager(logger *logger.Logger, config *configuration.Configuration, rnibDataService services.RNibDataService, e2TInstancesManager IE2TInstancesManager, e2tAssociationManager *E2TAssociationManager, ranSetupManager IRanSetupManager) *E2TShutdownManager {
+func NewE2TShutdownManager(logger *logger.Logger, config *configuration.Configuration, rnibDataService services.RNibDataService, e2TInstancesManager IE2TInstancesManager, e2tAssociationManager *E2TAssociationManager) *E2TShutdownManager {
        return &E2TShutdownManager{
                logger:                logger,
                config:                config,
                rnibDataService:       rnibDataService,
                e2TInstancesManager:   e2TInstancesManager,
                e2tAssociationManager: e2tAssociationManager,
-               ranSetupManager:       ranSetupManager,
        }
 }
 
@@ -68,58 +66,25 @@ func (m E2TShutdownManager) Shutdown(e2tInstance *entities.E2TInstance) error {
                return err
        }
 
-       ranNamesToBeDissociated := []string{}
-       ranNamesToBeAssociated := make(map[string][]string) // e2tAddress -> associatedRanList
-
-       for _, ranName := range e2tInstance.AssociatedRanList {
-               ranNamesToBeDissociated, err = m.reAssociateRanInMemory(ranName, ranNamesToBeAssociated, ranNamesToBeDissociated)
-               if err != nil {
-                       m.logger.Errorf("#E2TShutdownManager.Shutdown - Failed to re-associate nodeb %s.", ranName)
-                       return err
-               }
-       }
-
-       err = m.e2tAssociationManager.RemoveE2tInstance(e2tInstance, ranNamesToBeDissociated, ranNamesToBeAssociated)
-       if err != nil {
-               m.logger.Errorf("#E2TShutdownManager.Shutdown - Failed to remove E2T %s.", e2tInstance.Address)
-               return err
-       }
-
-       err = m.clearNodebsAssociation(ranNamesToBeDissociated)
+       err = m.clearNodebsAssociation(e2tInstance.AssociatedRanList)
        if err != nil {
                m.logger.Errorf("#E2TShutdownManager.Shutdown - Failed to clear nodebs association to E2T %s.", e2tInstance.Address)
                return err
        }
 
-       err = m.reassociateNodebs(ranNamesToBeAssociated)
+       err = m.e2tAssociationManager.RemoveE2tInstance(e2tInstance)
        if err != nil {
-               m.logger.Errorf("#E2TShutdownManager.Shutdown - Failed to re-associate nodebs after killing E2T %s.", e2tInstance.Address)
+               m.logger.Errorf("#E2TShutdownManager.Shutdown - Failed to remove E2T %s.", e2tInstance.Address)
                return err
        }
 
-       m.logger.Infof("#E2TShutdownManager.Shutdown - E2T %s was sutdown successfully.", e2tInstance.Address)
-       return nil
-}
-
-func (m E2TShutdownManager) reassociateNodebs(ranNamesToBeAssociated map[string][]string) error {
-       for e2tAddress, ranNames := range ranNamesToBeAssociated {
 
-               err := m.associateAndSetupNodebs(ranNames, e2tAddress)
-               if err != nil {
-                       return err
-               }
-
-       }
+       m.logger.Infof("#E2TShutdownManager.Shutdown - E2T %s was sutdown successfully.", e2tInstance.Address)
        return nil
 }
 
 func (m E2TShutdownManager) clearNodebsAssociation(ranNamesToBeDissociated []string) error {
-       return m.associateAndSetupNodebs(ranNamesToBeDissociated, "")
-}
-
-func (m E2TShutdownManager) associateAndSetupNodebs(ranNamesToBeUpdated []string, e2tAddress string) error {
-       isDissociatedRans := len(e2tAddress) == 0
-       for _, ranName := range ranNamesToBeUpdated {
+       for _, ranName := range ranNamesToBeDissociated {
                nodeb, err := m.rnibDataService.GetNodeb(ranName)
                if err != nil {
                        m.logger.Warnf("#E2TShutdownManager.associateAndSetupNodebs - Failed to get nodeb %s from db.", ranName)
@@ -129,59 +94,18 @@ func (m E2TShutdownManager) associateAndSetupNodebs(ranNamesToBeUpdated []string
                        }
                        return err
                }
-               nodeb.AssociatedE2TInstanceAddress = e2tAddress
-               if isDissociatedRans{
-                       nodeb.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED
-               }
+               nodeb.AssociatedE2TInstanceAddress = ""
+               nodeb.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED
 
                err = m.rnibDataService.UpdateNodebInfo(nodeb)
                if err != nil {
                        m.logger.Errorf("#E2TShutdownManager.associateAndSetupNodebs - Failed to save nodeb %s from db.", ranName)
                        return err
                }
-
-               if !isDissociatedRans {
-                       err = m.ranSetupManager.ExecuteSetup(nodeb, entities.ConnectionStatus_CONNECTING)
-                       if err != nil {
-                               m.logger.Errorf("#E2TShutdownManager.associateAndSetupNodebs - Failed to execute Setup for nodeb %s.", ranName)
-                               continue
-                       }
-               }
        }
        return nil
 }
 
-func (m E2TShutdownManager) reAssociateRanInMemory(ranName string, ranNamesToBeAssociated map[string][]string, ranNamesToBeDissociated []string) ([]string, error) {
-       nodeb, err := m.rnibDataService.GetNodeb(ranName)
-       if err != nil {
-
-               _, ok := err.(*common.ResourceNotFoundError)
-
-               if !ok {
-                       m.logger.Errorf("#E2TShutdownManager.reAssociateRanInMemory - Failed to get nodeb %s from db.", ranName)
-                       return ranNamesToBeDissociated, err
-               }
-
-               m.logger.Errorf("#E2TShutdownManager.reAssociateRanInMemory - nodeb %s not found in db. Skipping it...", ranName)
-               return ranNamesToBeDissociated, nil
-       }
-
-       if nodeb.ConnectionStatus == entities.ConnectionStatus_SHUTTING_DOWN || nodeb.ConnectionStatus == entities.ConnectionStatus_SHUT_DOWN {
-               m.logger.Errorf("#E2TShutdownManager.reAssociateRanInMemory - nodeb %s status is %s. Skipping it...", ranName, nodeb.ConnectionStatus)
-               return ranNamesToBeDissociated, nil
-       }
-
-       selectedE2tAddress, err := m.e2TInstancesManager.SelectE2TInstance()
-       if err != nil {
-               m.logger.Infof("#E2TShutdownManager.reAssociateRanInMemory - No selected E2T instance for nodeb %s found.", ranName)
-               ranNamesToBeDissociated = append(ranNamesToBeDissociated, ranName)
-               return ranNamesToBeDissociated, nil
-       }
-
-       ranNamesToBeAssociated[selectedE2tAddress] = append(ranNamesToBeAssociated[selectedE2tAddress], ranName)
-       return ranNamesToBeDissociated, nil
-}
-
 func (m E2TShutdownManager) markE2tInstanceToBeDeleted(e2tInstance *entities.E2TInstance) error {
        e2tInstance.State = entities.ToBeDeleted
        e2tInstance.DeletionTimestamp = time.Now().UnixNano()
index cd69fcf..570cf62 100644 (file)
@@ -25,10 +25,8 @@ import (
        "e2mgr/clients"
        "e2mgr/configuration"
        "e2mgr/e2managererrors"
-       "e2mgr/e2pdus"
        "e2mgr/mocks"
        "e2mgr/models"
-       "e2mgr/rmrCgo"
        "e2mgr/services"
        "encoding/json"
        "fmt"
@@ -44,7 +42,7 @@ import (
 
 const E2TAddress3 = "10.10.2.17:9800"
 
-func initE2TShutdownManagerTest(t *testing.T) (*E2TShutdownManager, *mocks.RnibReaderMock, *mocks.RnibWriterMock, *mocks.HttpClientMock, *mocks.RmrMessengerMock) {
+func initE2TShutdownManagerTest(t *testing.T) (*E2TShutdownManager, *mocks.RnibReaderMock, *mocks.RnibWriterMock, *mocks.HttpClientMock) {
        log := initLog(t)
        config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3, E2TInstanceDeletionTimeoutMs: 15000}
 
@@ -56,16 +54,14 @@ func initE2TShutdownManagerTest(t *testing.T) (*E2TShutdownManager, *mocks.RnibR
        httpClientMock := &mocks.HttpClientMock{}
        rmClient := clients.NewRoutingManagerClient(log, config, httpClientMock)
        associationManager := NewE2TAssociationManager(log, rnibDataService, e2tInstancesManager, rmClient)
-       rmrMessengerMock := &mocks.RmrMessengerMock{}
-       rmrSender := initRmrSender(rmrMessengerMock, log)
-       ranSetupManager := NewRanSetupManager(log, rmrSender, rnibDataService)
-       shutdownManager := NewE2TShutdownManager(log, config, rnibDataService, e2tInstancesManager, associationManager, ranSetupManager)
 
-       return shutdownManager, readerMock, writerMock, httpClientMock, rmrMessengerMock
+       shutdownManager := NewE2TShutdownManager(log, config, rnibDataService, e2tInstancesManager, associationManager)
+
+       return shutdownManager, readerMock, writerMock, httpClientMock
 }
 
 func TestShutdownSuccess1OutOf3Instances(t *testing.T) {
-       shutdownManager, readerMock, writerMock, httpClientMock, rmrMessengerMock := initE2TShutdownManagerTest(t)
+       shutdownManager, readerMock, writerMock, httpClientMock := initE2TShutdownManagerTest(t)
 
        e2tInstance1 := entities.NewE2TInstance(E2TAddress)
        e2tInstance1.State = entities.Active
@@ -87,10 +83,8 @@ func TestShutdownSuccess1OutOf3Instances(t *testing.T) {
 
        e2tAddresses := []string{E2TAddress, E2TAddress2,E2TAddress3}
        readerMock.On("GetE2TAddresses").Return(e2tAddresses, nil)
-       readerMock.On("GetE2TInstances", e2tAddresses).Return([]*entities.E2TInstance{e2tInstance2,e2tInstance3}, nil)
 
-       e2tDataList := models.RoutingManagerE2TDataList{models.NewRoutingManagerE2TData(E2TAddress2, "test1", "test5")}
-       data := models.NewRoutingManagerDeleteRequestModel(E2TAddress, nil, e2tDataList)
+       data := models.NewRoutingManagerDeleteRequestModel(E2TAddress, e2tInstance1.AssociatedRanList, nil)
        marshaled, _ := json.Marshal(data)
        body := bytes.NewBuffer(marshaled)
        respBody := ioutil.NopCloser(bytes.NewBufferString(""))
@@ -99,50 +93,29 @@ func TestShutdownSuccess1OutOf3Instances(t *testing.T) {
        writerMock.On("RemoveE2TInstance", E2TAddress).Return(nil)
        writerMock.On("SaveE2TAddresses", []string{E2TAddress2,E2TAddress3}).Return(nil)
 
-       readerMock.On("GetE2TInstance", E2TAddress2).Return(e2tInstance2, nil)
-       e2tInstance2updated := *e2tInstance2
-       e2tInstance2updated.AssociatedRanList = append(e2tInstance2updated.AssociatedRanList, "test1", "test5")
-       writerMock.On("SaveE2TInstance", &e2tInstance2updated).Return(nil)
-
-       nodeb1new := *nodeb1
-       nodeb1new.AssociatedE2TInstanceAddress = E2TAddress2
-       nodeb1new.ConnectionStatus = entities.ConnectionStatus_CONNECTING
-       nodeb1new.ConnectionAttempts = 1
-       writerMock.On("UpdateNodebInfo", &nodeb1new).Return(nil)
-       nodeb5new := *nodeb5
-       nodeb5new.AssociatedE2TInstanceAddress = E2TAddress2
-       nodeb5new.ConnectionStatus = entities.ConnectionStatus_CONNECTING
-       nodeb5new.ConnectionAttempts = 1
-       writerMock.On("UpdateNodebInfo", &nodeb5new).Return(nil)
-
        nodeb1connected := *nodeb1
-       nodeb1connected.AssociatedE2TInstanceAddress = E2TAddress2
-       nodeb1connected.ConnectionStatus = entities.ConnectionStatus_CONNECTED
+       nodeb1connected.AssociatedE2TInstanceAddress = ""
+       nodeb1connected.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED
        writerMock.On("UpdateNodebInfo", &nodeb1connected).Return(nil)
+       nodeb2connected := *nodeb2
+       nodeb2connected.AssociatedE2TInstanceAddress = ""
+       nodeb2connected.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED
+       writerMock.On("UpdateNodebInfo", &nodeb2connected).Return(nil)
        nodeb5connected := *nodeb5
-       nodeb5connected.AssociatedE2TInstanceAddress = E2TAddress2
-       nodeb5connected.ConnectionStatus = entities.ConnectionStatus_CONNECTED
+       nodeb5connected.AssociatedE2TInstanceAddress = ""
+       nodeb5connected.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED
        writerMock.On("UpdateNodebInfo", &nodeb5connected).Return(nil)
 
-       payload := e2pdus.PackedX2setupRequest
-       xaction1 := []byte("test1")
-       msg1 := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), "test1", &payload, &xaction1)
-       rmrMessengerMock.On("SendMsg",mock.Anything, true).Return(msg1, nil)
-       xaction5 := []byte("test5")
-       msg5 := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), "test5", &payload, &xaction5)
-       rmrMessengerMock.On("SendMsg",mock.Anything, true).Return(msg5, nil)
-
        err := shutdownManager.Shutdown(e2tInstance1)
 
        assert.Nil(t, err)
        readerMock.AssertExpectations(t)
        writerMock.AssertExpectations(t)
        httpClientMock.AssertExpectations(t)
-       rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 2)
 }
 
 func TestShutdownSuccess1InstanceWithoutRans(t *testing.T) {
-       shutdownManager, readerMock, writerMock, httpClientMock, rmrMessengerMock := initE2TShutdownManagerTest(t)
+       shutdownManager, readerMock, writerMock, httpClientMock := initE2TShutdownManagerTest(t)
 
        e2tInstance1 := entities.NewE2TInstance(E2TAddress)
        e2tInstance1.State = entities.Active
@@ -165,11 +138,10 @@ func TestShutdownSuccess1InstanceWithoutRans(t *testing.T) {
        readerMock.AssertExpectations(t)
        writerMock.AssertExpectations(t)
        httpClientMock.AssertExpectations(t)
-       rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 0)
 }
 
 func TestShutdownSuccess1Instance2Rans(t *testing.T) {
-       shutdownManager, readerMock, writerMock, httpClientMock, rmrMessengerMock := initE2TShutdownManagerTest(t)
+       shutdownManager, readerMock, writerMock, httpClientMock := initE2TShutdownManagerTest(t)
 
        e2tInstance1 := entities.NewE2TInstance(E2TAddress)
        e2tInstance1.State = entities.Active
@@ -187,10 +159,6 @@ func TestShutdownSuccess1Instance2Rans(t *testing.T) {
        respBody := ioutil.NopCloser(bytes.NewBufferString(""))
        httpClientMock.On("Delete", "e2t", "application/json", body).Return(&http.Response{StatusCode: http.StatusCreated, Body: respBody}, nil)
 
-       e2tInstance1updated := *e2tInstance1
-       e2tInstance1updated.State = entities.ToBeDeleted
-       readerMock.On("GetE2TInstances", []string{E2TAddress}).Return([]*entities.E2TInstance{&e2tInstance1updated}, nil)
-
        writerMock.On("RemoveE2TInstance", E2TAddress).Return(nil)
        readerMock.On("GetE2TAddresses").Return([]string{E2TAddress}, nil)
        writerMock.On("SaveE2TAddresses", []string{}).Return(nil)
@@ -210,13 +178,11 @@ func TestShutdownSuccess1Instance2Rans(t *testing.T) {
        readerMock.AssertExpectations(t)
        writerMock.AssertExpectations(t)
        httpClientMock.AssertExpectations(t)
-       rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 0)
+       
 }
 
-
-
 func TestShutdownE2tInstanceAlreadyBeingDeleted(t *testing.T) {
-       shutdownManager, readerMock, writerMock, httpClientMock, rmrMessengerMock := initE2TShutdownManagerTest(t)
+       shutdownManager, readerMock, writerMock, httpClientMock := initE2TShutdownManagerTest(t)
 
        e2tInstance1 := entities.NewE2TInstance(E2TAddress)
        e2tInstance1.State = entities.ToBeDeleted
@@ -229,11 +195,11 @@ func TestShutdownE2tInstanceAlreadyBeingDeleted(t *testing.T) {
        readerMock.AssertExpectations(t)
        writerMock.AssertExpectations(t)
        httpClientMock.AssertExpectations(t)
-       rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 0)
+       
 }
 
 func TestShutdownFailureMarkInstanceAsToBeDeleted(t *testing.T) {
-       shutdownManager, readerMock, writerMock, httpClientMock, rmrMessengerMock := initE2TShutdownManagerTest(t)
+       shutdownManager, readerMock, writerMock, httpClientMock := initE2TShutdownManagerTest(t)
 
        e2tInstance1 := entities.NewE2TInstance(E2TAddress)
        e2tInstance1.State = entities.Active
@@ -246,94 +212,11 @@ func TestShutdownFailureMarkInstanceAsToBeDeleted(t *testing.T) {
        readerMock.AssertExpectations(t)
        writerMock.AssertExpectations(t)
        httpClientMock.AssertExpectations(t)
-       rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 0)
-}
-
-func TestShutdownFailureReassociatingInMemoryNodebNotFound(t *testing.T) {
-       shutdownManager, readerMock, writerMock, httpClientMock, rmrMessengerMock := initE2TShutdownManagerTest(t)
-
-       e2tInstance1 := entities.NewE2TInstance(E2TAddress)
-       e2tInstance1.State = entities.Active
-       e2tInstance1.AssociatedRanList = []string{"test1", "test2"}
-       e2tInstance2 := entities.NewE2TInstance(E2TAddress2)
-       e2tInstance2.State = entities.Active
-       e2tInstance2.AssociatedRanList = []string{"test3"}
-       writerMock.On("SaveE2TInstance", mock.MatchedBy(func(e2tInstance *entities.E2TInstance) bool { return e2tInstance.Address == E2TAddress && e2tInstance.State == entities.ToBeDeleted })).Return(nil)
-
-       var nodeb1 *entities.NodebInfo
-       readerMock.On("GetNodeb", "test1").Return(nodeb1, common.NewResourceNotFoundError("for tests"))
-       nodeb2 := &entities.NodebInfo{RanName:"test2", AssociatedE2TInstanceAddress:E2TAddress, ConnectionStatus:entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol:entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
-       readerMock.On("GetNodeb", "test2").Return(nodeb2, nil)
-
-       e2tAddresses := []string{E2TAddress, E2TAddress2}
-       readerMock.On("GetE2TAddresses").Return(e2tAddresses, nil)
-       readerMock.On("GetE2TInstances", e2tAddresses).Return([]*entities.E2TInstance{e2tInstance2}, nil)
-
-       e2tDataList := models.RoutingManagerE2TDataList{models.NewRoutingManagerE2TData(E2TAddress2, "test2")}
-       data := models.NewRoutingManagerDeleteRequestModel(E2TAddress, nil, e2tDataList)
-       marshaled, _ := json.Marshal(data)
-       body := bytes.NewBuffer(marshaled)
-       respBody := ioutil.NopCloser(bytes.NewBufferString(""))
-       httpClientMock.On("Delete", "e2t", "application/json", body).Return(&http.Response{StatusCode: http.StatusCreated, Body: respBody}, nil)
-
-       writerMock.On("RemoveE2TInstance", E2TAddress).Return(nil)
-       writerMock.On("SaveE2TAddresses", []string{E2TAddress2}).Return(nil)
-
-       readerMock.On("GetE2TInstance", E2TAddress2).Return(e2tInstance2, nil)
-       e2tInstance2updated := *e2tInstance2
-       e2tInstance2updated.AssociatedRanList = append(e2tInstance2updated.AssociatedRanList, "test2")
-       writerMock.On("SaveE2TInstance", &e2tInstance2updated).Return(nil)
-
-       nodeb2new := *nodeb2
-       nodeb2new.AssociatedE2TInstanceAddress = E2TAddress2
-       nodeb2new.ConnectionStatus = entities.ConnectionStatus_CONNECTING
-       nodeb2new.ConnectionAttempts = 1
-       writerMock.On("UpdateNodebInfo", &nodeb2new).Return(nil)
-
-       nodeb2connected := *nodeb2
-       nodeb2connected.AssociatedE2TInstanceAddress = E2TAddress2
-       nodeb2connected.ConnectionStatus = entities.ConnectionStatus_CONNECTED
-       writerMock.On("UpdateNodebInfo", &nodeb2connected).Return(nil)
-
-       payload := e2pdus.PackedX2setupRequest
-       xaction2 := []byte("test2")
-       msg2 := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), "test2", &payload, &xaction2)
-       rmrMessengerMock.On("SendMsg",mock.Anything, true).Return(msg2, nil)
-
-       err := shutdownManager.Shutdown(e2tInstance1)
-
-       assert.Nil(t, err)
-       readerMock.AssertExpectations(t)
-       writerMock.AssertExpectations(t)
-       httpClientMock.AssertExpectations(t)
-       rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 1)
-}
-
-func TestShutdownFailureReassociatingInMemoryGetNodebError(t *testing.T) {
-       shutdownManager, readerMock, writerMock, httpClientMock, rmrMessengerMock := initE2TShutdownManagerTest(t)
-
-       e2tInstance1 := entities.NewE2TInstance(E2TAddress)
-       e2tInstance1.State = entities.Active
-       e2tInstance1.AssociatedRanList = []string{"test1", "test2"}
-       e2tInstance2 := entities.NewE2TInstance(E2TAddress2)
-       e2tInstance2.State = entities.Active
-       e2tInstance2.AssociatedRanList = []string{"test3"}
-       writerMock.On("SaveE2TInstance", mock.MatchedBy(func(e2tInstance *entities.E2TInstance) bool { return e2tInstance.Address == E2TAddress && e2tInstance.State == entities.ToBeDeleted })).Return(nil)
-
-       var nodeb1 *entities.NodebInfo
-       readerMock.On("GetNodeb", "test1").Return(nodeb1, common.NewInternalError(fmt.Errorf("for tests")))
-
-       err := shutdownManager.Shutdown(e2tInstance1)
-
-       assert.NotNil(t, err)
-       readerMock.AssertExpectations(t)
-       writerMock.AssertExpectations(t)
-       httpClientMock.AssertExpectations(t)
-       rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 0)
+       
 }
 
 func TestShutdownFailureRoutingManagerError(t *testing.T) {
-       shutdownManager, readerMock, writerMock, httpClientMock, rmrMessengerMock := initE2TShutdownManagerTest(t)
+       shutdownManager, readerMock, writerMock, httpClientMock := initE2TShutdownManagerTest(t)
 
        e2tInstance1 := entities.NewE2TInstance(E2TAddress)
        e2tInstance1.State = entities.Active
@@ -355,29 +238,40 @@ func TestShutdownFailureRoutingManagerError(t *testing.T) {
 
        e2tAddresses := []string{E2TAddress, E2TAddress2,E2TAddress3}
        readerMock.On("GetE2TAddresses").Return(e2tAddresses, nil)
-       readerMock.On("GetE2TInstances", e2tAddresses).Return([]*entities.E2TInstance{e2tInstance2,e2tInstance3}, nil)
 
-       e2tDataList := models.RoutingManagerE2TDataList{models.NewRoutingManagerE2TData(E2TAddress2, "test1", "test5")}
-       data := models.NewRoutingManagerDeleteRequestModel(E2TAddress, nil, e2tDataList)
+       data := models.NewRoutingManagerDeleteRequestModel(E2TAddress, e2tInstance1.AssociatedRanList, nil)
        marshaled, _ := json.Marshal(data)
        body := bytes.NewBuffer(marshaled)
        respBody := ioutil.NopCloser(bytes.NewBufferString(""))
        httpClientMock.On("Delete", "e2t", "application/json", body).Return(&http.Response{StatusCode: http.StatusBadRequest, Body: respBody}, nil)
 
-       readerMock.On("GetE2TInstance", E2TAddress).Return(e2tInstance1, nil)
-       writerMock.On("SaveE2TInstance", mock.MatchedBy(func(e2tInstance *entities.E2TInstance) bool { return e2tInstance.Address == E2TAddress && e2tInstance.State == entities.RoutingManagerFailure })).Return(nil)
+       writerMock.On("RemoveE2TInstance", E2TAddress).Return(nil)
+       writerMock.On("SaveE2TAddresses", []string{E2TAddress2,E2TAddress3}).Return(nil)
+
+       nodeb1connected := *nodeb1
+       nodeb1connected.AssociatedE2TInstanceAddress = ""
+       nodeb1connected.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED
+       writerMock.On("UpdateNodebInfo", &nodeb1connected).Return(nil)
+       nodeb2connected := *nodeb2
+       nodeb2connected.AssociatedE2TInstanceAddress = ""
+       nodeb2connected.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED
+       writerMock.On("UpdateNodebInfo", &nodeb2connected).Return(nil)
+       nodeb5connected := *nodeb5
+       nodeb5connected.AssociatedE2TInstanceAddress = ""
+       nodeb5connected.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED
+       writerMock.On("UpdateNodebInfo", &nodeb5connected).Return(nil)
 
        err := shutdownManager.Shutdown(e2tInstance1)
 
-       assert.NotNil(t, err)
+       assert.Nil(t, err)
        readerMock.AssertExpectations(t)
        writerMock.AssertExpectations(t)
        httpClientMock.AssertExpectations(t)
-       rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 0)
+       
 }
 
 func TestShutdownFailureInClearNodebsAssociation(t *testing.T) {
-       shutdownManager, readerMock, writerMock, httpClientMock, rmrMessengerMock := initE2TShutdownManagerTest(t)
+       shutdownManager, readerMock, writerMock, httpClientMock := initE2TShutdownManagerTest(t)
 
        e2tInstance1 := entities.NewE2TInstance(E2TAddress)
        e2tInstance1.State = entities.Active
@@ -386,22 +280,6 @@ func TestShutdownFailureInClearNodebsAssociation(t *testing.T) {
 
        nodeb1 := &entities.NodebInfo{RanName:"test1", AssociatedE2TInstanceAddress:E2TAddress, ConnectionStatus:entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol:entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
        readerMock.On("GetNodeb", "test1").Return(nodeb1, nil)
-       nodeb2 := &entities.NodebInfo{RanName:"test2", AssociatedE2TInstanceAddress:E2TAddress, ConnectionStatus:entities.ConnectionStatus_DISCONNECTED, E2ApplicationProtocol:entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
-       readerMock.On("GetNodeb", "test2").Return(nodeb2, nil)
-
-       data := models.NewRoutingManagerDeleteRequestModel(E2TAddress, []string{"test1", "test2"}, nil)
-       marshaled, _ := json.Marshal(data)
-       body := bytes.NewBuffer(marshaled)
-       respBody := ioutil.NopCloser(bytes.NewBufferString(""))
-       httpClientMock.On("Delete", "e2t", "application/json", body).Return(&http.Response{StatusCode: http.StatusCreated, Body: respBody}, nil)
-
-       e2tInstance1updated := *e2tInstance1
-       e2tInstance1updated.State = entities.ToBeDeleted
-       readerMock.On("GetE2TInstances", []string{E2TAddress}).Return([]*entities.E2TInstance{&e2tInstance1updated}, nil)
-
-       writerMock.On("RemoveE2TInstance", E2TAddress).Return(nil)
-       readerMock.On("GetE2TAddresses").Return([]string{E2TAddress}, nil)
-       writerMock.On("SaveE2TAddresses", []string{}).Return(nil)
 
        nodeb1new := *nodeb1
        nodeb1new.AssociatedE2TInstanceAddress = ""
@@ -414,155 +292,76 @@ func TestShutdownFailureInClearNodebsAssociation(t *testing.T) {
        readerMock.AssertExpectations(t)
        writerMock.AssertExpectations(t)
        httpClientMock.AssertExpectations(t)
-       rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 0)
 }
 
-func TestShutdownFailureInRmr(t *testing.T) {
-       shutdownManager, readerMock, writerMock, httpClientMock, rmrMessengerMock := initE2TShutdownManagerTest(t)
+func TestShutdownResourceNotFoundErrorInGetNodeb(t *testing.T) {
+       shutdownManager, readerMock, writerMock, httpClientMock := initE2TShutdownManagerTest(t)
 
        e2tInstance1 := entities.NewE2TInstance(E2TAddress)
        e2tInstance1.State = entities.Active
-       e2tInstance1.AssociatedRanList = []string{"test1", "test2", "test5"}
-       e2tInstance2 := entities.NewE2TInstance(E2TAddress2)
-       e2tInstance2.State = entities.Active
-       e2tInstance2.AssociatedRanList = []string{"test3"}
-       e2tInstance3 := entities.NewE2TInstance(E2TAddress3)
-       e2tInstance3.State = entities.Active
-       e2tInstance3.AssociatedRanList = []string{"test4"}
+       e2tInstance1.AssociatedRanList = []string{"test1", "test2"}
        writerMock.On("SaveE2TInstance", mock.MatchedBy(func(e2tInstance *entities.E2TInstance) bool { return e2tInstance.Address == E2TAddress && e2tInstance.State == entities.ToBeDeleted })).Return(nil)
 
        nodeb1 := &entities.NodebInfo{RanName:"test1", AssociatedE2TInstanceAddress:E2TAddress, ConnectionStatus:entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol:entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
        readerMock.On("GetNodeb", "test1").Return(nodeb1, nil)
-       nodeb2 := &entities.NodebInfo{RanName:"test2", AssociatedE2TInstanceAddress:E2TAddress, ConnectionStatus:entities.ConnectionStatus_SHUTTING_DOWN, E2ApplicationProtocol:entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
-       readerMock.On("GetNodeb", "test2").Return(nodeb2, nil)
-       nodeb5 := &entities.NodebInfo{RanName:"test5", AssociatedE2TInstanceAddress:E2TAddress, ConnectionStatus:entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol:entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
-       readerMock.On("GetNodeb", "test5").Return(nodeb5, nil)
-
-       e2tAddresses := []string{E2TAddress, E2TAddress2,E2TAddress3}
-       readerMock.On("GetE2TAddresses").Return(e2tAddresses, nil)
-       readerMock.On("GetE2TInstances", e2tAddresses).Return([]*entities.E2TInstance{e2tInstance2,e2tInstance3}, nil)
-
-       e2tDataList := models.RoutingManagerE2TDataList{models.NewRoutingManagerE2TData(E2TAddress2, "test1", "test5")}
-       data := models.NewRoutingManagerDeleteRequestModel(E2TAddress, nil, e2tDataList)
-       marshaled, _ := json.Marshal(data)
-       body := bytes.NewBuffer(marshaled)
-       respBody := ioutil.NopCloser(bytes.NewBufferString(""))
-       httpClientMock.On("Delete", "e2t", "application/json", body).Return(&http.Response{StatusCode: http.StatusCreated, Body: respBody}, nil)
-
-       writerMock.On("RemoveE2TInstance", E2TAddress).Return(nil)
-       writerMock.On("SaveE2TAddresses", []string{E2TAddress2,E2TAddress3}).Return(nil)
-
-       readerMock.On("GetE2TInstance", E2TAddress2).Return(e2tInstance2, nil)
-       e2tInstance2updated := *e2tInstance2
-       e2tInstance2updated.AssociatedRanList = []string{"test3", "test1", "test5"}
-       writerMock.On("SaveE2TInstance", &e2tInstance2updated).Return(nil)
-
-       nodeb1reassigned := *nodeb1
-       nodeb1reassigned.AssociatedE2TInstanceAddress = E2TAddress2
-       writerMock.On("UpdateNodebInfo", &nodeb1reassigned).Return(nil)
-       nodeb5reassigned := *nodeb5
-       nodeb5reassigned.AssociatedE2TInstanceAddress = E2TAddress2
-       writerMock.On("UpdateNodebInfo", &nodeb5reassigned).Return(nil)
+       var nodeb2 *entities.NodebInfo
+       readerMock.On("GetNodeb", "test2").Return(nodeb2, common.NewResourceNotFoundError("for testing"))
 
        nodeb1new := *nodeb1
-       nodeb1new.AssociatedE2TInstanceAddress = E2TAddress2
-       nodeb1new.ConnectionStatus = entities.ConnectionStatus_CONNECTING
-       nodeb1new.ConnectionAttempts = 1
+       nodeb1new.AssociatedE2TInstanceAddress = ""
+       nodeb1new.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED
        writerMock.On("UpdateNodebInfo", &nodeb1new).Return(nil)
-       nodeb5new := *nodeb5
-       nodeb5new.AssociatedE2TInstanceAddress = E2TAddress2
-       nodeb5new.ConnectionStatus = entities.ConnectionStatus_CONNECTING
-       nodeb5new.ConnectionAttempts = 1
-       writerMock.On("UpdateNodebInfo", &nodeb5new).Return(nil)
-
-       nodeb1connected := *nodeb1
-       nodeb1connected.AssociatedE2TInstanceAddress = E2TAddress2
-       nodeb1connected.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED
-       nodeb1connected.ConnectionAttempts = 0
-       //nodeb1connected.E2ApplicationProtocol = entities.E2ApplicationProtocol_X2_SETUP_REQUEST
-       writerMock.On("UpdateNodebInfo", &nodeb1connected).Return(nil)
-       nodeb5connected := *nodeb5
-       nodeb5connected.AssociatedE2TInstanceAddress = E2TAddress2
-       nodeb5connected.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED
-       nodeb5connected.ConnectionAttempts = 0
-       //nodeb5connected.E2ApplicationProtocol = entities.E2ApplicationProtocol_X2_SETUP_REQUEST
-       writerMock.On("UpdateNodebInfo", &nodeb5connected).Return(nil)
-
-       payload := e2pdus.PackedX2setupRequest
-       xaction1 := []byte("test1")
-       msg1 := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), "test1", &payload, &xaction1)
-       rmrMessengerMock.On("SendMsg",mock.Anything, true).Return(msg1, common.NewInternalError(fmt.Errorf("for test")))
-       xaction2 := []byte("test5")
-       msg2 := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), "test5", &payload, &xaction2)
-       rmrMessengerMock.On("SendMsg",mock.Anything, true).Return(msg2, common.NewInternalError(fmt.Errorf("for test")))
 
        err := shutdownManager.Shutdown(e2tInstance1)
 
-       assert.Nil(t, err)
+       assert.NotNil(t, err)
        readerMock.AssertExpectations(t)
        writerMock.AssertExpectations(t)
        httpClientMock.AssertExpectations(t)
-       rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 2)
 }
 
-func TestShutdownFailureDbErrorInAsociateAndSetupNodebs(t *testing.T) {
-       shutdownManager, readerMock, writerMock, httpClientMock, rmrMessengerMock := initE2TShutdownManagerTest(t)
+func TestShutdownResourceGeneralErrorInGetNodeb(t *testing.T) {
+       shutdownManager, readerMock, writerMock, httpClientMock := initE2TShutdownManagerTest(t)
 
        e2tInstance1 := entities.NewE2TInstance(E2TAddress)
        e2tInstance1.State = entities.Active
-       e2tInstance1.AssociatedRanList = []string{"test1", "test2", "test5"}
-       e2tInstance2 := entities.NewE2TInstance(E2TAddress2)
-       e2tInstance2.State = entities.Active
-       e2tInstance2.AssociatedRanList = []string{"test3"}
-       e2tInstance3 := entities.NewE2TInstance(E2TAddress3)
-       e2tInstance3.State = entities.Active
-       e2tInstance3.AssociatedRanList = []string{"test4"}
+       e2tInstance1.AssociatedRanList = []string{"test1", "test2"}
        writerMock.On("SaveE2TInstance", mock.MatchedBy(func(e2tInstance *entities.E2TInstance) bool { return e2tInstance.Address == E2TAddress && e2tInstance.State == entities.ToBeDeleted })).Return(nil)
 
-       nodeb1 := &entities.NodebInfo{RanName:"test1", AssociatedE2TInstanceAddress:E2TAddress, ConnectionStatus:entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol:entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
-       readerMock.On("GetNodeb", "test1").Return(nodeb1, nil)
-       nodeb2 := &entities.NodebInfo{RanName:"test2", AssociatedE2TInstanceAddress:E2TAddress, ConnectionStatus:entities.ConnectionStatus_SHUTTING_DOWN, E2ApplicationProtocol:entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
+       var nodeb1 *entities.NodebInfo
+       readerMock.On("GetNodeb", "test1").Return(nodeb1, common.NewInternalError(fmt.Errorf("for testing")))
+       nodeb2 := &entities.NodebInfo{RanName:"test2", AssociatedE2TInstanceAddress:E2TAddress, ConnectionStatus:entities.ConnectionStatus_DISCONNECTED, E2ApplicationProtocol:entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
        readerMock.On("GetNodeb", "test2").Return(nodeb2, nil)
-       nodeb5 := &entities.NodebInfo{RanName:"test5", AssociatedE2TInstanceAddress:E2TAddress, ConnectionStatus:entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol:entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
-       readerMock.On("GetNodeb", "test5").Return(nodeb5, nil)
-
-       e2tAddresses := []string{E2TAddress, E2TAddress2,E2TAddress3}
-       readerMock.On("GetE2TAddresses").Return(e2tAddresses, nil)
-       readerMock.On("GetE2TInstances", e2tAddresses).Return([]*entities.E2TInstance{e2tInstance2,e2tInstance3}, nil)
 
-       e2tDataList := models.RoutingManagerE2TDataList{models.NewRoutingManagerE2TData(E2TAddress2, "test1", "test5")}
-       data := models.NewRoutingManagerDeleteRequestModel(E2TAddress, nil, e2tDataList)
+       data := models.NewRoutingManagerDeleteRequestModel(E2TAddress, []string{"test1", "test2"}, nil)
        marshaled, _ := json.Marshal(data)
        body := bytes.NewBuffer(marshaled)
        respBody := ioutil.NopCloser(bytes.NewBufferString(""))
        httpClientMock.On("Delete", "e2t", "application/json", body).Return(&http.Response{StatusCode: http.StatusCreated, Body: respBody}, nil)
 
        writerMock.On("RemoveE2TInstance", E2TAddress).Return(nil)
-       writerMock.On("SaveE2TAddresses", []string{E2TAddress2,E2TAddress3}).Return(nil)
-
-       readerMock.On("GetE2TInstance", E2TAddress2).Return(e2tInstance2, nil)
-       e2tInstance2updated := *e2tInstance2
-       e2tInstance2updated.AssociatedRanList = []string{"test3", "test1", "test5"}
-       writerMock.On("SaveE2TInstance", &e2tInstance2updated).Return(nil)
+       readerMock.On("GetE2TAddresses").Return([]string{E2TAddress}, nil)
+       writerMock.On("SaveE2TAddresses", []string{}).Return(nil)
 
-       nodeb1reassigned := *nodeb1
-       nodeb1reassigned.AssociatedE2TInstanceAddress = E2TAddress2
-       writerMock.On("UpdateNodebInfo", &nodeb1reassigned).Return(common.NewInternalError(fmt.Errorf("for tests")))
+       nodeb2new := *nodeb2
+       nodeb2new.AssociatedE2TInstanceAddress = ""
+       nodeb2new.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED
+       writerMock.On("UpdateNodebInfo", &nodeb2new).Return(nil)
 
        err := shutdownManager.Shutdown(e2tInstance1)
 
-       assert.NotNil(t, err)
+       assert.Nil(t, err)
        readerMock.AssertExpectations(t)
        writerMock.AssertExpectations(t)
        httpClientMock.AssertExpectations(t)
-       rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 0)
+
 }
 
-func TestShutdownSuccess1OutOf3InstancesStateIsRoutingManagerFailure(t *testing.T) {
-       shutdownManager, readerMock, writerMock, httpClientMock, rmrMessengerMock := initE2TShutdownManagerTest(t)
+func TestShutdownFailureInRemoveE2TInstance(t *testing.T) {
+       shutdownManager, readerMock, writerMock, httpClientMock := initE2TShutdownManagerTest(t)
 
        e2tInstance1 := entities.NewE2TInstance(E2TAddress)
-       e2tInstance1.State = entities.RoutingManagerFailure
+       e2tInstance1.State = entities.Active
        e2tInstance1.AssociatedRanList = []string{"test1", "test2", "test5"}
        e2tInstance2 := entities.NewE2TInstance(E2TAddress2)
        e2tInstance2.State = entities.Active
@@ -579,60 +378,31 @@ func TestShutdownSuccess1OutOf3InstancesStateIsRoutingManagerFailure(t *testing.
        nodeb5 := &entities.NodebInfo{RanName:"test5", AssociatedE2TInstanceAddress:E2TAddress, ConnectionStatus:entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol:entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
        readerMock.On("GetNodeb", "test5").Return(nodeb5, nil)
 
-       e2tAddresses := []string{E2TAddress, E2TAddress2,E2TAddress3}
-       readerMock.On("GetE2TAddresses").Return(e2tAddresses, nil)
-       readerMock.On("GetE2TInstances", e2tAddresses).Return([]*entities.E2TInstance{e2tInstance2,e2tInstance3}, nil)
-
-       e2tDataList := models.RoutingManagerE2TDataList{models.NewRoutingManagerE2TData(E2TAddress2, "test1", "test5")}
-       data := models.NewRoutingManagerDeleteRequestModel(E2TAddress, nil, e2tDataList)
+       data := models.NewRoutingManagerDeleteRequestModel(E2TAddress, e2tInstance1.AssociatedRanList, nil)
        marshaled, _ := json.Marshal(data)
        body := bytes.NewBuffer(marshaled)
        respBody := ioutil.NopCloser(bytes.NewBufferString(""))
        httpClientMock.On("Delete", "e2t", "application/json", body).Return(&http.Response{StatusCode: http.StatusCreated, Body: respBody}, nil)
 
-       writerMock.On("RemoveE2TInstance", E2TAddress).Return(nil)
-       writerMock.On("SaveE2TAddresses", []string{E2TAddress2,E2TAddress3}).Return(nil)
-
-       readerMock.On("GetE2TInstance", E2TAddress2).Return(e2tInstance2, nil)
-       e2tInstance2updated := *e2tInstance2
-       e2tInstance2updated.AssociatedRanList = []string{"test3", "test1", "test5"}
-       writerMock.On("SaveE2TInstance", &e2tInstance2updated).Return(nil)
-
-       nodeb1new := *nodeb1
-       nodeb1new.AssociatedE2TInstanceAddress = E2TAddress2
-       nodeb1new.ConnectionStatus = entities.ConnectionStatus_CONNECTING
-       nodeb1new.ConnectionAttempts = 1
-       writerMock.On("UpdateNodebInfo", &nodeb1new).Return(nil)
-       nodeb5new := *nodeb5
-       nodeb5new.AssociatedE2TInstanceAddress = E2TAddress2
-       nodeb5new.ConnectionStatus = entities.ConnectionStatus_CONNECTING
-       nodeb5new.ConnectionAttempts = 1
-       writerMock.On("UpdateNodebInfo", &nodeb5new).Return(nil)
+       writerMock.On("RemoveE2TInstance", E2TAddress).Return(common.NewInternalError(fmt.Errorf("for tests")))
 
        nodeb1connected := *nodeb1
-       nodeb1connected.AssociatedE2TInstanceAddress = E2TAddress2
-       nodeb1connected.ConnectionStatus = entities.ConnectionStatus_CONNECTED
-       //nodeb1connected.E2ApplicationProtocol = entities.E2ApplicationProtocol_X2_SETUP_REQUEST
+       nodeb1connected.AssociatedE2TInstanceAddress = ""
+       nodeb1connected.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED
        writerMock.On("UpdateNodebInfo", &nodeb1connected).Return(nil)
+       nodeb2connected := *nodeb2
+       nodeb2connected.AssociatedE2TInstanceAddress = ""
+       nodeb2connected.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED
+       writerMock.On("UpdateNodebInfo", &nodeb2connected).Return(nil)
        nodeb5connected := *nodeb5
-       nodeb5connected.AssociatedE2TInstanceAddress = E2TAddress2
-       nodeb5connected.ConnectionStatus = entities.ConnectionStatus_CONNECTED
-       //nodeb5connected.E2ApplicationProtocol = entities.E2ApplicationProtocol_X2_SETUP_REQUEST
+       nodeb5connected.AssociatedE2TInstanceAddress = ""
+       nodeb5connected.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED
        writerMock.On("UpdateNodebInfo", &nodeb5connected).Return(nil)
 
-       payload := e2pdus.PackedX2setupRequest
-       xaction1 := []byte("test1")
-       msg1 := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), "test1", &payload, &xaction1)
-       rmrMessengerMock.On("SendMsg",mock.Anything, true).Return(msg1, nil)
-       xaction5 := []byte("test5")
-       msg5 := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), "test5", &payload, &xaction5)
-       rmrMessengerMock.On("SendMsg",mock.Anything, true).Return(msg5, nil)
-
        err := shutdownManager.Shutdown(e2tInstance1)
 
-       assert.Nil(t, err)
+       assert.IsType(t, &e2managererrors.RnibDbError{}, err)
        readerMock.AssertExpectations(t)
        writerMock.AssertExpectations(t)
        httpClientMock.AssertExpectations(t)
-       rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 2)
 }
\ No newline at end of file
index 0652276..717703d 100644 (file)
@@ -51,8 +51,8 @@ args := m.Called(e2tAddresses)
 return args.Error(0)
 }
 
-func (m *RoutingManagerClientMock) DeleteE2TInstance(e2tAddress string, ransToBeDissociated []string, e2tToRansAssociations map[string][]string) error {
+func (m *RoutingManagerClientMock) DeleteE2TInstance(e2tAddress string, ransToBeDissociated []string) error {
 
-       args := m.Called(e2tAddress, ransToBeDissociated, e2tToRansAssociations)
+       args := m.Called(e2tAddress, ransToBeDissociated)
        return args.Error(0)
 }
\ No newline at end of file