RIC-194 Setup from RAN: On Routing Manager Failure, return Setup Failure
[ric-plt/e2mgr.git] / E2Manager / handlers / rmrmsghandlers / x2_reset_request_notification_handler_test.go
index 309a57e..73d3a56 100644 (file)
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
-//
+
+//  This source code is part of the near-RT RIC (RAN Intelligent Controller)
+//  platform project (RICP).
+
 
 package rmrmsghandlers
 
 import (
        "e2mgr/configuration"
-       "e2mgr/logger"
+       "e2mgr/e2pdus"
+       "e2mgr/enums"
+       "e2mgr/managers"
        "e2mgr/mocks"
        "e2mgr/models"
        "e2mgr/rmrCgo"
        "e2mgr/services"
        "e2mgr/tests"
+       "encoding/json"
        "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"
-       "github.com/stretchr/testify/assert"
        "testing"
        "time"
+       "unsafe"
 )
 
-func initX2ResetRequestNotifHandlerTest(t *testing.T) (*logger.Logger, X2ResetRequestNotificationHandler, *mocks.RnibReaderMock) {
+func initX2ResetRequestNotificationHandlerTest(t *testing.T) (X2ResetRequestNotificationHandler, *mocks.RnibReaderMock, *mocks.RmrMessengerMock) {
        log := initLog(t)
        config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
        readerMock := &mocks.RnibReaderMock{}
-       readerProvider := func() reader.RNibReader {
-               return readerMock
-       }
-       rnibDataService := services.NewRnibDataService(log, config, readerProvider, nil)
-
-       h := NewX2ResetRequestNotificationHandler(rnibDataService)
-       return log, h, readerMock
-}
 
-func TestX2ResetRequestNotifSuccess(t *testing.T) {
-       log, h, readerMock := initX2ResetRequestNotifHandlerTest(t)
+       rnibDataService := services.NewRnibDataService(log, config, readerMock, nil)
 
-       payload := []byte("payload")
-
-       xaction := []byte("RanName")
-       mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload), "RanName", &payload, &xaction)
-       notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload,
-               StartTime: time.Now(), TransactionId: string(xaction)}
-
-       nb := &entities.NodebInfo{RanName: mBuf.Meid, ConnectionStatus: entities.ConnectionStatus_CONNECTED,}
-       var rnibErr error
-       readerMock.On("GetNodeb", mBuf.Meid).Return(nb, rnibErr)
-
-       messageChannel := make(chan *models.NotificationResponse)
+       rmrMessengerMock := &mocks.RmrMessengerMock{}
+       rmrSender := initRmrSender(rmrMessengerMock, log)
+       ranStatusChangeManager := managers.NewRanStatusChangeManager(log, rmrSender)
+       h := NewX2ResetRequestNotificationHandler(log, rnibDataService, ranStatusChangeManager, rmrSender)
+       return h, readerMock, rmrMessengerMock
+}
 
-       go h.Handle(log, &notificationRequest, messageChannel)
+func getRanRestartedMbuf(nodeType entities.Node_Type, messageDirection enums.MessageDirection) *rmrCgo.MBuf {
+       var xAction []byte
+       resourceStatusPayload := models.NewResourceStatusPayload(nodeType, messageDirection)
+       resourceStatusJson, _ := json.Marshal(resourceStatusPayload)
+       var msgSrc unsafe.Pointer
+       return rmrCgo.NewMBuf(rmrCgo.RAN_RESTARTED, len(resourceStatusJson), RanName, &resourceStatusJson, &xAction, msgSrc)
+}
 
-       result := <-messageChannel
-       assert.Equal(t, result.RanName, mBuf.Meid)
-       assert.Equal(t, result.MgsType, rmrCgo.RIC_X2_RESET_RESP)
+func TestHandleX2ResetRequestNotificationSuccess(t *testing.T) {
+       h, readerMock, rmrMessengerMock := initX2ResetRequestNotificationHandlerTest(t)
+       ranName := "test"
+       xAction := []byte("123456aa")
+       notificationRequest := models.NewNotificationRequest(ranName, []byte{}, time.Now(), xAction, nil)
+
+       nb := &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, NodeType: entities.Node_ENB}
+       var err error
+       readerMock.On("GetNodeb", ranName).Return(nb, err)
+       var msgSrc unsafe.Pointer
+       resetResponseMbuf := rmrCgo.NewMBuf(rmrCgo.RIC_X2_RESET_RESP, len(e2pdus.PackedX2ResetResponse), ranName, &e2pdus.PackedX2ResetResponse, &xAction, msgSrc)
+       rmrMessengerMock.On("SendMsg", resetResponseMbuf, true).Return(&rmrCgo.MBuf{}, err)
+       ranRestartedMbuf := getRanRestartedMbuf(nb.NodeType, enums.RAN_TO_RIC)
+       rmrMessengerMock.On("SendMsg", ranRestartedMbuf, true).Return(&rmrCgo.MBuf{}, err)
+       h.Handle(notificationRequest)
+       rmrMessengerMock.AssertCalled(t, "SendMsg", resetResponseMbuf, true)
+       rmrMessengerMock.AssertCalled(t, "SendMsg", ranRestartedMbuf, true)
 }
 
-func TestHandleX2ResetRequestNotifShuttingDownStatus(t *testing.T) {
-       log, h, readerMock := initX2ResetRequestNotifHandlerTest(t)
+func TestHandleX2ResetRequestNotificationShuttingDownStatus(t *testing.T) {
+       h, readerMock, rmrMessengerMock := initX2ResetRequestNotificationHandlerTest(t)
        var payload []byte
 
-       xaction := []byte("RanName")
-       mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload), "RanName", &payload, &xaction)
+       xAction := []byte("123456aa")
+       var msgSrc unsafe.Pointer
+       mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload), "RanName", &payload, &xAction, msgSrc)
        notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload,
-               StartTime: time.Now(), TransactionId: string(xaction)}
+               StartTime: time.Now(), TransactionId: xAction}
 
        nb := &entities.NodebInfo{RanName: mBuf.Meid, ConnectionStatus: entities.ConnectionStatus_SHUTTING_DOWN,}
        var rnibErr error
 
        readerMock.On("GetNodeb", mBuf.Meid).Return(nb, rnibErr)
 
-       h.Handle(log, &notificationRequest, nil)
+       h.Handle(&notificationRequest)
+       rmrMessengerMock.AssertNotCalled(t, "SendMsg")
 }
 
-func TestHandleX2ResetRequestNotifDisconnectStatus(t *testing.T) {
-       log, h, readerMock := initX2ResetRequestNotifHandlerTest(t)
+func TestHandleX2ResetRequestNotificationDisconnectStatus(t *testing.T) {
+       h, readerMock, rmrMessengerMock := initX2ResetRequestNotificationHandlerTest(t)
        var payload []byte
-
-       xaction := []byte("RanName")
-       mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload), "RanName", &payload, &xaction)
-       notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload,
-               StartTime: time.Now(), TransactionId: string(xaction)}
-
+       xAction := []byte("123456aa")
+       var msgSrc unsafe.Pointer
+       mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload), "RanName", &payload, &xAction, msgSrc)
+       notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload, StartTime: time.Now(), TransactionId: xAction}
        nb := &entities.NodebInfo{RanName: mBuf.Meid, ConnectionStatus: entities.ConnectionStatus_DISCONNECTED,}
        var rnibErr error
-
        readerMock.On("GetNodeb", mBuf.Meid).Return(nb, rnibErr)
 
-       h.Handle(log, &notificationRequest, nil)
+       h.Handle(&notificationRequest)
+       rmrMessengerMock.AssertNotCalled(t, "SendMsg")
 }
 
-func TestHandleX2ResetRequestNotifGetNodebFailed(t *testing.T) {
+func TestHandleX2ResetRequestNotificationGetNodebFailed(t *testing.T) {
 
-       log, h, readerMock := initX2ResetRequestNotifHandlerTest(t)
+        h, readerMock, rmrMessengerMock := initX2ResetRequestNotificationHandlerTest(t)
        var payload []byte
-       xaction := []byte("RanName")
-       mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload), "RanName", &payload, &xaction)
+       var xAction []byte
+       var msgSrc unsafe.Pointer
+       mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload), "RanName", &payload, &xAction, msgSrc)
        notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload,
-               StartTime: time.Now(), TransactionId: string(xaction)}
+               StartTime: time.Now(), TransactionId: xAction}
 
        var nb *entities.NodebInfo
        rnibErr := &common.ResourceNotFoundError{}
        readerMock.On("GetNodeb", mBuf.Meid).Return(nb, rnibErr)
 
-       h.Handle(log, &notificationRequest, nil)
+       h.Handle(&notificationRequest)
+       rmrMessengerMock.AssertNotCalled(t, "SendMsg")
 }