[RICPLT-1705] Reset Request received from E2T (Remote RAN)
[ric-plt/e2mgr.git] / E2Manager / handlers / delete_all_request_handler_test.go
index 3204b71..8dfa188 100644 (file)
@@ -25,6 +25,10 @@ import (
        "e2mgr/models"
        "e2mgr/rNibWriter"
        "e2mgr/rmrCgo"
+       "e2mgr/services"
+       "e2mgr/sessions"
+       "e2mgr/tests"
+       "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"
        "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
@@ -45,18 +49,18 @@ func TestHandleBeforeTimerGetListNodebIdsFailedFlow(t *testing.T){
        writerProvider := func() rNibWriter.RNibWriter {
                return writerMock
        }
-       config := configuration.ParseConfiguration()
+       rmrMessengerMock := &mocks.RmrMessengerMock{}
 
-       handler := NewDeleteAllRequestHandler(config, writerProvider, readerProvider)
+       config := configuration.ParseConfiguration()
 
-       var messageChannel chan<- *models.NotificationResponse
+       handler := NewDeleteAllRequestHandler(getRmrService(rmrMessengerMock, log), config, writerProvider, readerProvider)
 
        rnibErr := &common.RNibError{}
        var nbIdentityList []*entities.NbIdentity
        readerMock.On("GetListNodebIds").Return(nbIdentityList, rnibErr)
 
        expected := &e2managererrors.RnibDbError{}
-       actual := handler.Handle(log, nil, messageChannel)
+       actual := handler.Handle(log, nil)
        if reflect.TypeOf(actual) != reflect.TypeOf(expected){
                t.Errorf("Error actual = %v, and Expected = %v.", actual, expected)
        }
@@ -73,12 +77,11 @@ func TestHandleAfterTimerGetListNodebIdsFailedFlow(t *testing.T){
        writerProvider := func() rNibWriter.RNibWriter {
                return writerMock
        }
+       rmrMessengerMock := &mocks.RmrMessengerMock{}
        config := configuration.ParseConfiguration()
        config.BigRedButtonTimeoutSec = 1
 
-       handler := NewDeleteAllRequestHandler(config, writerProvider, readerProvider)
-
-       messageChannel := make(chan*models.NotificationResponse)
+       handler := NewDeleteAllRequestHandler(getRmrService(rmrMessengerMock, log), config, writerProvider, readerProvider)
 
        rnibErr := &common.RNibError{}
        //Before timer: Disconnected->ShutDown, ShuttingDown->Ignore, Connected->ShuttingDown
@@ -98,13 +101,9 @@ func TestHandleAfterTimerGetListNodebIdsFailedFlow(t *testing.T){
        writerMock.On("SaveNodeb", mock.Anything, updatedNb1).Return(nil)
        writerMock.On("SaveNodeb", mock.Anything, updatedNb3).Return(nil)
 
-       go func(){
-               response := <-messageChannel
-               assert.Equal(t, response.MgsType, rmrCgo.RIC_SCTP_CLEAR_ALL)
-       }()
-
        expected := &e2managererrors.RnibDbError{}
-       actual := handler.Handle(log, nil, messageChannel)
+       actual := handler.Handle(log, nil)
+
        if reflect.TypeOf(actual) != reflect.TypeOf(expected){
                t.Errorf("Error actual = %v, and Expected = %v.", actual, expected)
        }
@@ -121,11 +120,10 @@ func TestHandleSuccessFlow(t *testing.T){
        writerProvider := func() rNibWriter.RNibWriter {
                return writerMock
        }
+       rmrMessengerMock := &mocks.RmrMessengerMock{}
        config := configuration.ParseConfiguration()
        config.BigRedButtonTimeoutSec = 1
-       handler := NewDeleteAllRequestHandler(config, writerProvider, readerProvider)
-
-       messageChannel := make(chan*models.NotificationResponse)
+       handler := NewDeleteAllRequestHandler(getRmrService(rmrMessengerMock, log), config, writerProvider, readerProvider)
 
        //Before timer: Disconnected->ShutDown, ShuttingDown->Ignore, Connected->ShuttingDown
        nbIdentityList := createIdentityList()
@@ -158,12 +156,10 @@ func TestHandleSuccessFlow(t *testing.T){
        writerMock.On("SaveNodeb", mock.Anything, updatedNb2AfterTimer).Return(nil)
        writerMock.On("SaveNodeb", mock.Anything, updatedNb3AfterTimer).Return(nil)
 
-       go func(){
-               response := <-messageChannel
-               assert.Equal(t, response.MgsType, rmrCgo.RIC_SCTP_CLEAR_ALL)
-       }()
+       mbuf := rmrCgo.NewMBuf(tests.MessageType, tests.MaxMsgSize,"RanName" , &tests.DummyPayload, &tests.DummyXAction)
+       rmrMessengerMock.On("SendMsg", mock.AnythingOfType(fmt.Sprintf("%T", mbuf)), tests.MaxMsgSize).Return(mbuf, nil)
 
-       actual := handler.Handle(log, nil, messageChannel)
+       actual := handler.Handle(log, nil)
 
        assert.Nil(t, actual)
 }
@@ -179,11 +175,10 @@ func TestHandleSuccessGetNextStatusFlow(t *testing.T){
        writerProvider := func() rNibWriter.RNibWriter {
                return writerMock
        }
+       rmrMessengerMock := &mocks.RmrMessengerMock{}
        config := configuration.ParseConfiguration()
        config.BigRedButtonTimeoutSec = 1
-       handler := NewDeleteAllRequestHandler(config, writerProvider, readerProvider)
-
-       messageChannel := make(chan*models.NotificationResponse)
+       handler := NewDeleteAllRequestHandler(getRmrService(rmrMessengerMock, log), config, writerProvider, readerProvider)
 
        nbIdentityList := []*entities.NbIdentity{{InventoryName: "RanName_1"}}
        readerMock.On("GetListNodebIds").Return(nbIdentityList, nil)
@@ -203,13 +198,49 @@ func TestHandleSuccessGetNextStatusFlow(t *testing.T){
        updatedNb1AfterTimer := &entities.NodebInfo{RanName:"RanName_1", ConnectionStatus:entities.ConnectionStatus_SHUT_DOWN,}
        writerMock.On("SaveNodeb", mock.Anything, updatedNb1AfterTimer).Return(nil)
 
+       mbuf := rmrCgo.NewMBuf(tests.MessageType, tests.MaxMsgSize,"RanName" , &tests.DummyPayload, &tests.DummyXAction)
+       rmrMessengerMock.On("SendMsg", mock.AnythingOfType(fmt.Sprintf("%T", mbuf)), tests.MaxMsgSize).Return(mbuf, nil)
+
+       actual := handler.Handle(log, nil)
+
+       assert.Nil(t, actual)
+}
+
+func TestHandleShuttingDownStatusFlow(t *testing.T){
+       log := initLog(t)
+
+       readerMock := &mocks.RnibReaderMock{}
+       readerProvider := func() reader.RNibReader {
+               return readerMock
+       }
+       writerMock := &mocks.RnibWriterMock{}
+       writerProvider := func() rNibWriter.RNibWriter {
+               return writerMock
+       }
+       rmrMessengerMock := &mocks.RmrMessengerMock{}
+       config := configuration.ParseConfiguration()
+       config.BigRedButtonTimeoutSec = 1
+       handler := NewDeleteAllRequestHandler(getRmrService(rmrMessengerMock, log), config, writerProvider, readerProvider)
+
+       nbIdentityList := []*entities.NbIdentity{{InventoryName: "RanName_1"}}
+       readerMock.On("GetListNodebIds").Return(nbIdentityList, nil)
+
+       nb1 := &entities.NodebInfo{RanName: "RanName_1", ConnectionStatus: entities.ConnectionStatus_SHUTTING_DOWN,}
+       readerMock.On("GetNodeb", "RanName_1").Return(nb1, nil)
+
+       //after timer: ShutDown->Ignore, ShuttingDown->ShutDown
+       readerMock.On("GetListNodebIds").Return(nbIdentityList, nil)
+
+       nb1AfterTimer := &entities.NodebInfo{RanName: "RanName_1", ConnectionStatus: entities.ConnectionStatus_SHUTTING_DOWN,}
+       readerMock.On("GetNodeb", "RanName_1").Return(nb1AfterTimer, nil)
+
+       updatedNb1AfterTimer := &entities.NodebInfo{RanName:"RanName_1", ConnectionStatus:entities.ConnectionStatus_SHUT_DOWN,}
+       writerMock.On("SaveNodeb", mock.Anything, updatedNb1AfterTimer).Return(nil)
 
-       go func(){
-               response := <-messageChannel
-               assert.Equal(t, response.MgsType, rmrCgo.RIC_SCTP_CLEAR_ALL)
-       }()
+       mbuf := rmrCgo.NewMBuf(tests.MessageType, tests.MaxMsgSize,"RanName" , &tests.DummyPayload, &tests.DummyXAction)
+       rmrMessengerMock.On("SendMsg", mock.AnythingOfType(fmt.Sprintf("%T", mbuf)), tests.MaxMsgSize).Return(mbuf, nil)
 
-       actual := handler.Handle(log, nil, messageChannel)
+       actual := handler.Handle(log, nil)
 
        assert.Nil(t, actual)
 }
@@ -225,11 +256,10 @@ func TestHandleGetNodebFailedFlow(t *testing.T){
        writerProvider := func() rNibWriter.RNibWriter {
                return writerMock
        }
+       rmrMessengerMock := &mocks.RmrMessengerMock{}
        config := configuration.ParseConfiguration()
        config.BigRedButtonTimeoutSec = 1
-       handler := NewDeleteAllRequestHandler(config, writerProvider, readerProvider)
-
-       messageChannel := make(chan*models.NotificationResponse)
+       handler := NewDeleteAllRequestHandler(getRmrService(rmrMessengerMock, log), config, writerProvider, readerProvider)
 
        //Before timer: Disconnected->ShutDown(will fail), ShuttingDown->Ignore, Connected->ShuttingDown
        nbIdentityList := createIdentityList()
@@ -263,12 +293,10 @@ func TestHandleGetNodebFailedFlow(t *testing.T){
        writerMock.On("SaveNodeb", mock.Anything, updatedNb2AfterTimer).Return(nil)
        writerMock.On("SaveNodeb", mock.Anything, updatedNb3AfterTimer).Return(nil)
 
-       go func(){
-               response := <-messageChannel
-               assert.Equal(t, response.MgsType, rmrCgo.RIC_SCTP_CLEAR_ALL)
-       }()
+       mbuf := rmrCgo.NewMBuf(tests.MessageType, tests.MaxMsgSize,"RanName" , &tests.DummyPayload, &tests.DummyXAction)
+       rmrMessengerMock.On("SendMsg", mock.AnythingOfType(fmt.Sprintf("%T", mbuf)), tests.MaxMsgSize).Return(mbuf, nil)
 
-       actual := handler.Handle(log, nil, messageChannel)
+       actual := handler.Handle(log, nil)
 
        assert.Nil(t, actual)
 }
@@ -284,11 +312,10 @@ func TestHandleSaveFailedFlow(t *testing.T){
        writerProvider := func() rNibWriter.RNibWriter {
                return writerMock
        }
+       rmrMessengerMock := &mocks.RmrMessengerMock{}
        config := configuration.ParseConfiguration()
        config.BigRedButtonTimeoutSec = 1
-       handler := NewDeleteAllRequestHandler(config, writerProvider, readerProvider)
-
-       messageChannel := make(chan*models.NotificationResponse)
+       handler := NewDeleteAllRequestHandler(getRmrService(rmrMessengerMock, log), config, writerProvider, readerProvider)
 
        //Before timer: Disconnected->ShutDown, ShuttingDown->Ignore, Connected->ShuttingDown(will fail)
        nbIdentityList := createIdentityList()
@@ -322,17 +349,15 @@ func TestHandleSaveFailedFlow(t *testing.T){
        writerMock.On("SaveNodeb", mock.Anything, updatedNb2AfterTimer).Return(nil)
        writerMock.On("SaveNodeb", mock.Anything, updatedNb3AfterTimer).Return(errRnib)
 
-       go func(){
-               response := <-messageChannel
-               assert.Equal(t, response.MgsType, rmrCgo.RIC_SCTP_CLEAR_ALL)
-       }()
+       mbuf := rmrCgo.NewMBuf(tests.MessageType, tests.MaxMsgSize,"RanName" , &tests.DummyPayload, &tests.DummyXAction)
+       rmrMessengerMock.On("SendMsg", mock.AnythingOfType(fmt.Sprintf("%T", mbuf)), tests.MaxMsgSize).Return(mbuf, nil)
 
-       actual := handler.Handle(log, nil, messageChannel)
+       actual := handler.Handle(log, nil)
 
        assert.Nil(t, actual)
 }
 
-func TestHandleGetListEnbIdsEmptyFlow(t *testing.T){
+func TestHandleSendRmrFailedFlow(t *testing.T){
        log := initLog(t)
 
        readerMock := &mocks.RnibReaderMock{}
@@ -343,18 +368,75 @@ func TestHandleGetListEnbIdsEmptyFlow(t *testing.T){
        writerProvider := func() rNibWriter.RNibWriter {
                return writerMock
        }
+       rmrMessengerMock := &mocks.RmrMessengerMock{}
        config := configuration.ParseConfiguration()
+       config.BigRedButtonTimeoutSec = 1
+       handler := NewDeleteAllRequestHandler(getRmrService(rmrMessengerMock, log), config, writerProvider, readerProvider)
 
-       handler := NewDeleteAllRequestHandler(config, writerProvider, readerProvider)
+       //Before timer: Disconnected->ShutDown, ShuttingDown->Ignore, Connected->ShuttingDown(will fail)
+       nbIdentityList := createIdentityList()
+       readerMock.On("GetListNodebIds").Return(nbIdentityList, nil)
 
-       var messageChannel chan<- *models.NotificationResponse
+       nb1 := &entities.NodebInfo{RanName: "RanName_1", ConnectionStatus: entities.ConnectionStatus_DISCONNECTED,}
+       nb2 := &entities.NodebInfo{RanName: "RanName_2", ConnectionStatus:entities.ConnectionStatus_SHUTTING_DOWN,}
+       nb3 := &entities.NodebInfo{RanName: "RanName_3", ConnectionStatus:entities.ConnectionStatus_CONNECTED,}
+       readerMock.On("GetNodeb", "RanName_1").Return(nb1, nil)
+       readerMock.On("GetNodeb", "RanName_2").Return(nb2, nil)
+       readerMock.On("GetNodeb", "RanName_3").Return(nb3, nil)
+
+       updatedNb1 := &entities.NodebInfo{RanName:"RanName_1", ConnectionStatus:entities.ConnectionStatus_SHUT_DOWN,}
+       updatedNb3 := &entities.NodebInfo{RanName:"RanName_3", ConnectionStatus:entities.ConnectionStatus_SHUTTING_DOWN,}
+       writerMock.On("SaveNodeb", mock.Anything, updatedNb1).Return(nil)
+       writerMock.On("SaveNodeb", mock.Anything, updatedNb3).Return(nil)
+
+       //after timer: ShutDown->Ignore, ShuttingDown->ShutDown(will fail)
+       readerMock.On("GetListNodebIds").Return(nbIdentityList, nil)
+
+       nb1AfterTimer := &entities.NodebInfo{RanName: "RanName_1", ConnectionStatus: entities.ConnectionStatus_SHUT_DOWN,}
+       nb2AfterTimer := &entities.NodebInfo{RanName: "RanName_2", ConnectionStatus:entities.ConnectionStatus_SHUTTING_DOWN,}
+       nb3AfterTimer := &entities.NodebInfo{RanName: "RanName_3", ConnectionStatus:entities.ConnectionStatus_SHUTTING_DOWN,}
+       readerMock.On("GetNodeb", "RanName_1").Return(nb1AfterTimer, nil)
+       readerMock.On("GetNodeb", "RanName_2").Return(nb2AfterTimer, nil)
+       readerMock.On("GetNodeb", "RanName_3").Return(nb3AfterTimer, nil)
+
+       updatedNb2AfterTimer := &entities.NodebInfo{RanName:"RanName_2", ConnectionStatus:entities.ConnectionStatus_SHUT_DOWN,}
+       updatedNb3AfterTimer := &entities.NodebInfo{RanName:"RanName_3", ConnectionStatus:entities.ConnectionStatus_SHUT_DOWN,}
+       writerMock.On("SaveNodeb", mock.Anything, updatedNb2AfterTimer).Return(nil)
+       writerMock.On("SaveNodeb", mock.Anything, updatedNb3AfterTimer).Return(nil)
+
+       expected := e2managererrors.NewRmrError()
+       mbuf := rmrCgo.NewMBuf(tests.MessageType, tests.MaxMsgSize,"RanName" , &tests.DummyPayload, &tests.DummyXAction)
+       rmrMessengerMock.On("SendMsg", mock.AnythingOfType(fmt.Sprintf("%T", mbuf)), tests.MaxMsgSize).Return(mbuf, expected)
+
+       actual := handler.Handle(log, nil)
+
+       if reflect.TypeOf(actual) != reflect.TypeOf(expected){
+               t.Errorf("Error actual = %v, and Expected = %v.", actual, expected)
+       }
+}
+
+func TestHandleGetListEnbIdsEmptyFlow(t *testing.T){
+       log := initLog(t)
+
+       readerMock := &mocks.RnibReaderMock{}
+       readerProvider := func() reader.RNibReader {
+               return readerMock
+       }
+       writerMock := &mocks.RnibWriterMock{}
+       writerProvider := func() rNibWriter.RNibWriter {
+               return writerMock
+       }
+       rmrMessengerMock := &mocks.RmrMessengerMock{}
+       config := configuration.ParseConfiguration()
+
+       handler := NewDeleteAllRequestHandler(getRmrService(rmrMessengerMock, log), config, writerProvider, readerProvider)
 
        var rnibError common.IRNibError
        nbIdentityList := []*entities.NbIdentity{}
 
        readerMock.On("GetListNodebIds").Return(nbIdentityList, rnibError)
 
-       actual := handler.Handle(log, nil, messageChannel)
+       actual := handler.Handle(log, nil)
        readerMock.AssertNumberOfCalls(t, "GetNodeb", 0)
        assert.Nil(t, actual)
 }
@@ -375,7 +457,15 @@ func createIdentityList() []*entities.NbIdentity {
 func initLog(t *testing.T) *logger.Logger {
        log, err := logger.InitLogger(logger.InfoLevel)
        if err != nil {
-               t.Errorf("#delete_all_request_handler_test.TestHandleSuccessFlow - failed to initialize logger, error: %s", err)
+               t.Errorf("#initLog test - failed to initialize logger, error: %s", err)
        }
        return log
+}
+
+
+func getRmrService(rmrMessengerMock *mocks.RmrMessengerMock, log *logger.Logger) *services.RmrService {
+       rmrMessenger := rmrCgo.RmrMessenger(rmrMessengerMock)
+       messageChannel := make(chan *models.NotificationResponse)
+       rmrMessengerMock.On("Init", tests.GetPort(), tests.MaxMsgSize, tests.Flags, log).Return(&rmrMessenger)
+       return services.NewRmrService(services.NewRmrConfig(tests.Port, tests.MaxMsgSize, tests.Flags, log), rmrMessenger,  make(sessions.E2Sessions), messageChannel)
 }
\ No newline at end of file