RIC-193 - E2t association manager: AssociateRan method update + tests fix 87/3187/1
authorns019t <ns019t@intl.att.com>
Tue, 7 Apr 2020 09:53:40 +0000 (12:53 +0300)
committerns019t <ns019t@intl.att.com>
Tue, 7 Apr 2020 09:54:08 +0000 (12:54 +0300)
Change-Id: Ie4b454142cad625b6686feafdd535a3fda96e1fe
Signed-off-by: ns019t <ns019t@intl.att.com>
E2Manager/handlers/httpmsghandlers/setup_request_handler_test.go
E2Manager/handlers/rmrmsghandlers/e2_setup_request_notification_handler.go
E2Manager/handlers/rmrmsghandlers/e2_setup_request_notification_handler_test.go
E2Manager/managers/e2t_association_manager.go
E2Manager/managers/e2t_association_manager_test.go

index 7bc67ac..9fc75fe 100644 (file)
@@ -66,10 +66,10 @@ func initSetupRequestTest(t *testing.T, protocol entities.E2ApplicationProtocol)
        return readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock, httpClientMock
 }
 
-func initSetupRequestTestBasicMocks(t *testing.T, protocol entities.E2ApplicationProtocol) (*mocks.RnibReaderMock, *mocks.RnibWriterMock, *SetupRequestHandler, *mocks.RmrMessengerMock, *mocks.HttpClientMock) {
+func initSetupRequestTestBasicMocks(t *testing.T, protocol entities.E2ApplicationProtocol) (*mocks.RnibReaderMock, *mocks.RnibWriterMock, *SetupRequestHandler, *mocks.RmrMessengerMock, *mocks.HttpClientMock, *mocks.E2TInstancesManagerMock) {
        log := initLog(t)
        config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
-
+       config.RoutingManager.BaseUrl = BaseRMUrl
        readerMock := &mocks.RnibReaderMock{}
        writerMock := &mocks.RnibWriterMock{}
 
@@ -78,13 +78,13 @@ func initSetupRequestTestBasicMocks(t *testing.T, protocol entities.E2Applicatio
        rmrMessengerMock := &mocks.RmrMessengerMock{}
        rmrSender := getRmrSender(rmrMessengerMock, log)
        ranSetupManager := managers.NewRanSetupManager(log, rmrSender, rnibDataService)
-       e2tInstancesManager := managers.NewE2TInstancesManager(rnibDataService, log)
+       e2tInstancesManagerMock := &mocks.E2TInstancesManagerMock{}
        httpClientMock := &mocks.HttpClientMock{}
        rmClient := clients.NewRoutingManagerClient(log, config, httpClientMock)
-       e2tAssociationManager := managers.NewE2TAssociationManager(log, rnibDataService, e2tInstancesManager, rmClient)
-       handler := NewSetupRequestHandler(log, rnibDataService, ranSetupManager, protocol, e2tInstancesManager, e2tAssociationManager)
+       e2tAssociationManager := managers.NewE2TAssociationManager(log, rnibDataService, e2tInstancesManagerMock, rmClient)
+       handler := NewSetupRequestHandler(log, rnibDataService, ranSetupManager, protocol, e2tInstancesManagerMock, e2tAssociationManager)
 
-       return readerMock, writerMock, handler, rmrMessengerMock, httpClientMock
+       return readerMock, writerMock, handler, rmrMessengerMock, httpClientMock, e2tInstancesManagerMock
 }
 
 func mockHttpClientAssociateRan(httpClientMock *mocks.HttpClientMock) {
@@ -156,33 +156,36 @@ func TestSetupNewRanSelectE2TInstancesDbError(t *testing.T) {
 }
 
 func TestSetupNewRanSelectE2TInstancesNoInstances(t *testing.T) {
-       readerMock, writerMock, handler, rmrMessengerMock, _ := initSetupRequestTestBasicMocks(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
+       readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
        readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{}, common.NewResourceNotFoundError(""))
-       readerMock.On("GetE2TAddresses").Return([]string{}, nil)
+       e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil)
+       e2tInstancesManagerMock.On("AddRansToInstance", E2TAddress, []string{RanName}).Return(nil)
+       setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,}
+       nodebInfo, _ := createInitialNodeInfo(&setupRequest, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
+       writerMock.On("SaveNodeb", mock.Anything, mock.Anything).Return(nil)
+       updatedNb := *nodebInfo
+       updatedNb.ConnectionAttempts = 0
+       updatedNb.AssociatedE2TInstanceAddress = E2TAddress
+       writerMock.On("UpdateNodebInfo", &updatedNb).Return(nil)
+       ranSetupManagerMock.On("ExecuteSetup", &updatedNb, entities.ConnectionStatus_CONNECTING).Return(nil)
        _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,})
-       assert.IsType(t, &e2managererrors.E2TInstanceAbsenceError{}, err)
-       writerMock.AssertNotCalled(t, "SaveNodeb")
-       rmrMessengerMock.AssertNotCalled(t, "SendMsg")
+       assert.Nil(t, err)
 }
 
 func TestSetupNewRanAssociateRanFailure(t *testing.T) {
-       readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock, httpClientMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
+       readerMock, writerMock, handler, e2tInstancesManagerMock, _, httpClientMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
        readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{}, common.NewResourceNotFoundError(""))
        e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil)
        e2tInstancesManagerMock.On("AddRansToInstance", E2TAddress, []string{RanName}).Return(e2managererrors.NewRnibDbError())
        setupRequest := &models.SetupRequest{"127.0.0.1", 8080, RanName,}
        nb, nbIdentity := createInitialNodeInfo(setupRequest, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
        writerMock.On("SaveNodeb", nbIdentity, mock.Anything).Return(nil)
+       writerMock.On("UpdateNodebInfo", nb).Return(nil)
        nb.AssociatedE2TInstanceAddress = E2TAddress
        nb.ConnectionAttempts = 0
-       writerMock.On("UpdateNodebInfo", nb).Return(nil)
+       mockHttpClientAssociateRan(httpClientMock)
        _, err := handler.Handle(*setupRequest)
        assert.IsType(t, &e2managererrors.RnibDbError{}, err)
-       writerMock.AssertExpectations(t)
-       readerMock.AssertExpectations(t)
-       e2tInstancesManagerMock.AssertExpectations(t)
-       httpClientMock.AssertExpectations(t)
-       ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup")
 }
 
 func TestSetupNewRanSaveNodebFailure(t *testing.T) {
@@ -286,16 +289,17 @@ func TestSetupExistingRanWithoutAssocE2TInstanceSelectDbError(t *testing.T) {
 }
 
 func TestSetupExistingRanWithoutAssocE2TInstanceSelectNoInstanceError(t *testing.T) {
-       readerMock, writerMock, handler, rmrMessengerMock, := initSetupRequestTestBasicMocks(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
+       readerMock, writerMock, handler, rmrMessengerMock, httpClientMock,e2tInstancesManagerMock:= initSetupRequestTestBasicMocks(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
        nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress: ""}
        readerMock.On("GetNodeb", RanName).Return(nb, nil)
        readerMock.On("GetE2TAddresses").Return([]string{}, nil)
-       updatedNb := *nb
-       updatedNb.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED
-       writerMock.On("UpdateNodebInfo", &updatedNb).Return(nil)
+       writerMock.On("UpdateNodebInfo", mock.Anything).Return(nil)
        setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,}
+       e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil)
+       e2tInstancesManagerMock.On("AddRansToInstance", "10.0.2.15:8989", []string{"test"}).Return(nil)
+       mockHttpClientAssociateRan(httpClientMock)
        _, err := handler.Handle(setupRequest)
-       assert.IsType(t, &e2managererrors.E2TInstanceAbsenceError{}, err)
+       assert.IsType(t, &e2managererrors.InternalError{}, err)
        rmrMessengerMock.AssertNotCalled(t, "SendMsg")
        writerMock.AssertExpectations(t)
 }
@@ -399,7 +403,7 @@ func TestSetupExistingRanWithAssocE2TInstanceUpdateNodebFailure(t *testing.T) {
 }
 
 func TestSetupExistingRanWithAssocE2TInstanceExecuteSetupRmrError(t *testing.T) {
-       readerMock, writerMock, handler, rmrMessengerMock, _ := initSetupRequestTestBasicMocks(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
+       readerMock, writerMock, handler, rmrMessengerMock, _, _ := initSetupRequestTestBasicMocks(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
        nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress: E2TAddress, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol:entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
        readerMock.On("GetNodeb", RanName).Return(nb, nil)
        updatedNb := *nb
@@ -436,22 +440,18 @@ func TestSetupExistingRanWithAssocE2TInstanceConnectedSuccess(t *testing.T) {
 }
 
 func TestSetupExistingRanWithoutAssocE2TInstanceExecuteRoutingManagerError(t *testing.T) {
-       readerMock, writerMock, handler, _, httpClientMock := initSetupRequestTestBasicMocks(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
+       readerMock, writerMock, handler, rmrMessengerMock, httpClientMock, e2tInstancesManagerMock := initSetupRequestTestBasicMocks(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST)
        nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress: "", ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol:entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
        readerMock.On("GetNodeb", RanName).Return(nb, nil)
-       addresses := []string{E2TAddress}
-       readerMock.On("GetE2TAddresses").Return(addresses, nil)
-       e2tInstance := &entities.E2TInstance{Address: E2TAddress, State: entities.Active}
-       readerMock.On("GetE2TInstances", addresses).Return([]*entities.E2TInstance{e2tInstance}, nil)
-
-       data := models.RoutingManagerE2TDataList{models.NewRoutingManagerE2TData(E2TAddress, RanName)}
-       marshaled, _ := json.Marshal(data)
-       body := bytes.NewBuffer(marshaled)
-       respBody := ioutil.NopCloser(bytes.NewBufferString(""))
-       httpClientMock.On("Post", clients.AssociateRanToE2TInstanceApiSuffix, "application/json", body).Return(&http.Response{StatusCode: http.StatusBadRequest, Body: respBody}, nil)
-
+       writerMock.On("UpdateNodebInfo", nb).Return(nil)
+       e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil)
+       mockHttpClientAssociateRan(httpClientMock)
+       e2tInstancesManagerMock.On("AddRansToInstance", mock.Anything, mock.Anything).Return(nil)
+       msg := &rmrCgo.MBuf{}
+       var errNIl error
+       rmrMessengerMock.On("SendMsg",mock.Anything, true).Return(msg, errNIl)
        _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,})
-       assert.IsType(t, &e2managererrors.RoutingManagerError{}, err)
+       assert.Nil(t, err)
        writerMock.AssertExpectations(t)
        readerMock.AssertExpectations(t)
        httpClientMock.AssertExpectations(t)
index 8271e64..405d30d 100644 (file)
@@ -113,10 +113,6 @@ func (h E2SetupRequestNotificationHandler) Handle(request *models.NotificationRe
        err = h.e2tAssociationManager.AssociateRan(e2tIpAddress, nodebInfo)
        if err != nil{
                h.logger.Errorf("#E2SetupRequestNotificationHandler.Handle - RAN name: %s - failed to associate E2T to nodeB entity. Error: %s", ranName, err)
-               err = h.rNibDataService.UpdateNodebInfo(nodebInfo)
-               if err != nil {
-                       h.logger.Errorf("#E2SetupRequestNotificationHandler.Handle - RAN name: %s - Failed to update nodebInfo entity. Error: %s", ranName, err)
-               }
                return
        }
 
index 6421bf9..c689025 100644 (file)
@@ -305,7 +305,11 @@ func TestE2SetupRequestNotificationHandler_HandleAssociationError(t *testing.T)
        readerMock.On("GetNodeb", mock.Anything).Return(gnb, common.NewResourceNotFoundError("Not found"))
        writerMock.On("SaveNodeb", mock.Anything, mock.Anything).Return(nil)
        writerMock.On("UpdateNodebInfo", mock.Anything).Return(nil)
+       e2tInstancesManagerMock.On("AddRansToInstance", mock.Anything, mock.Anything).Return(nil)
        routingManagerClientMock.On("AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything).Return(errors.New("association error"))
+       var errEmpty error
+       rmrMessage := &rmrCgo.MBuf{}
+       rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(rmrMessage, errEmpty)
 
        prefBytes := []byte(prefix)
        notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append(prefBytes, xmlGnb...)}
@@ -315,8 +319,8 @@ func TestE2SetupRequestNotificationHandler_HandleAssociationError(t *testing.T)
        writerMock.AssertCalled(t, "SaveNodeb", mock.Anything, mock.Anything)
        routingManagerClientMock.AssertCalled(t, "AssociateRanToE2TInstance", e2tInstanceFullAddress, mock.Anything)
        writerMock.AssertCalled(t, "UpdateNodebInfo", mock.Anything)
-       e2tInstancesManagerMock.AssertNotCalled(t, "AddRansToInstance", mock.Anything, mock.Anything)
-       rmrMessengerMock.AssertNotCalled(t, "SendMsg", mock.Anything, mock.Anything)
+       e2tInstancesManagerMock.AssertCalled(t, "AddRansToInstance", mock.Anything, mock.Anything)
+       rmrMessengerMock.AssertCalled(t, "SendMsg", mock.Anything, mock.Anything)
 }
 
 
index 822c01a..855ac05 100644 (file)
@@ -46,12 +46,6 @@ func (m *E2TAssociationManager) AssociateRan(e2tAddress string, nodebInfo *entit
        ranName := nodebInfo.RanName
        m.logger.Infof("#E2TAssociationManager.AssociateRan - Associating RAN %s to E2T Instance address: %s", ranName, e2tAddress)
 
-       err := m.rmClient.AssociateRanToE2TInstance(e2tAddress, ranName)
-       if err != nil {
-               m.logger.Errorf("#E2TAssociationManager.AssociateRan - RoutingManager failure: Failed to associate RAN %s to E2T %s. Error: %s", ranName, e2tAddress, err)
-               return err
-       }
-
        nodebInfo.AssociatedE2TInstanceAddress = e2tAddress
        nodebInfo.ConnectionAttempts = 0
 
@@ -61,11 +55,15 @@ func (m *E2TAssociationManager) AssociateRan(e2tAddress string, nodebInfo *entit
                return rnibErr
        }
 
-       err = m.e2tInstanceManager.AddRansToInstance(e2tAddress, []string{ranName})
+       err := m.e2tInstanceManager.AddRansToInstance(e2tAddress, []string{ranName})
        if err != nil {
                m.logger.Errorf("#E2TAssociationManager.AssociateRan - RAN name: %s - Failed to add RAN to E2T instance %s. Error: %s", ranName, e2tAddress, err)
                return err
        }
+       err = m.rmClient.AssociateRanToE2TInstance(e2tAddress, ranName)
+       if err != nil {
+               m.logger.Errorf("#E2TAssociationManager.AssociateRan - RoutingManager failure: Failed to associate RAN %s to E2T %s. Error: %s", ranName, e2tAddress, err)
+       }
        m.logger.Infof("#E2TAssociationManager.AssociateRan - successfully associated RAN %s with E2T %s", ranName, e2tAddress)
        return nil
 }
index 73be905..994dd40 100644 (file)
@@ -31,6 +31,7 @@ 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"
@@ -93,12 +94,14 @@ func TestAssociateRanSuccess(t *testing.T) {
 func TestAssociateRanRoutingManagerError(t *testing.T) {
        manager, readerMock, writerMock, httpClientMock := initE2TAssociationManagerTest(t)
        mockHttpClient(httpClientMock, clients.AssociateRanToE2TInstanceApiSuffix, false)
-
        nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress: "", ConnectionAttempts: 1}
+       writerMock.On("UpdateNodebInfo", nb).Return(nil)
+       e2tInstance := &entities.E2TInstance{Address: E2TAddress}
+       readerMock.On("GetE2TInstance", E2TAddress).Return(e2tInstance, nil)
+       writerMock.On("SaveE2TInstance", mock.Anything).Return(nil)
        err := manager.AssociateRan(E2TAddress, nb)
 
-       assert.NotNil(t, err)
-       assert.IsType(t, &e2managererrors.RoutingManagerError{}, err)
+       assert.Nil(t, err)
        readerMock.AssertExpectations(t)
        writerMock.AssertExpectations(t)
        httpClientMock.AssertExpectations(t)
@@ -106,7 +109,7 @@ func TestAssociateRanRoutingManagerError(t *testing.T) {
 
 func TestAssociateRanUpdateNodebError(t *testing.T) {
        manager, readerMock, writerMock, httpClientMock := initE2TAssociationManagerTest(t)
-       mockHttpClient(httpClientMock, clients.AssociateRanToE2TInstanceApiSuffix, true)
+       //mockHttpClient(httpClientMock, clients.AssociateRanToE2TInstanceApiSuffix, true)
        nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress: "", ConnectionAttempts: 1}
        updatedNb := *nb
        updatedNb.ConnectionAttempts = 0
@@ -124,7 +127,7 @@ func TestAssociateRanUpdateNodebError(t *testing.T) {
 
 func TestAssociateRanGetE2tInstanceError(t *testing.T) {
        manager, readerMock, writerMock, httpClientMock := initE2TAssociationManagerTest(t)
-       mockHttpClient(httpClientMock, clients.AssociateRanToE2TInstanceApiSuffix, true)
+       //mockHttpClient(httpClientMock, clients.AssociateRanToE2TInstanceApiSuffix, true)
        nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress: "", ConnectionAttempts: 1}
        updatedNb := *nb
        updatedNb.ConnectionAttempts = 0
@@ -144,7 +147,7 @@ func TestAssociateRanGetE2tInstanceError(t *testing.T) {
 
 func TestAssociateRanSaveE2tInstanceError(t *testing.T) {
        manager, readerMock, writerMock, httpClientMock := initE2TAssociationManagerTest(t)
-       mockHttpClient(httpClientMock, clients.AssociateRanToE2TInstanceApiSuffix, true)
+       //mockHttpClient(httpClientMock, clients.AssociateRanToE2TInstanceApiSuffix, true)
        nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress: "", ConnectionAttempts: 1}
        updatedNb := *nb
        updatedNb.ConnectionAttempts = 0