[RICPLT-1852] Supports E2T Initialize - Enable handler + UT 40/840/1
authorrh362j <ronen.hasid@intl.att.com>
Thu, 29 Aug 2019 16:27:13 +0000 (19:27 +0300)
committerrh362j <ronen.hasid@intl.att.com>
Thu, 29 Aug 2019 16:27:22 +0000 (19:27 +0300)
Change-Id: Ica6a8f4647462a39c8b39e59cffe221816da190a
Signed-off-by: rh362j <ronen.hasid@intl.att.com>
E2Manager/handlers/e2_term_init_notification_handler.go
E2Manager/handlers/e2_term_init_notification_handler_test.go [new file with mode: 0644]
E2Manager/managers/ran_setup_manager_test.go

index 6e28d14..7299910 100644 (file)
@@ -22,45 +22,46 @@ import (
        "e2mgr/managers"
        "e2mgr/models"
        "e2mgr/sessions"
+       "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
        "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
 )
 
 type E2TermInitNotificationHandler struct {
-       rnibReaderProvider func() reader.RNibReader
+       rnibReaderProvider     func() reader.RNibReader
        ranReconnectionManager *managers.RanReconnectionManager
 }
 
-func NewE2TermInitNotificationHandler(ranReconnectionManager  *managers.RanReconnectionManager, rnibReaderProvider func() reader.RNibReader) E2TermInitNotificationHandler {
+func NewE2TermInitNotificationHandler(ranReconnectionManager *managers.RanReconnectionManager, rnibReaderProvider func() reader.RNibReader) E2TermInitNotificationHandler {
        return E2TermInitNotificationHandler{
-               rnibReaderProvider: rnibReaderProvider,
+               rnibReaderProvider:     rnibReaderProvider,
                ranReconnectionManager: ranReconnectionManager,
        }
 }
 
-
 func (handler E2TermInitNotificationHandler) Handle(logger *logger.Logger, e2Sessions sessions.E2Sessions,
        request *models.NotificationRequest, messageChannel chan<- *models.NotificationResponse) {
-       logger.Infof("#e2_term_init_notification_handler.Handle - Received E2_TERM_INIT")
-       return  //TODO: enable
 
        nbIdentityList, err := handler.rnibReaderProvider().GetListNodebIds()
 
        if err != nil {
-               logger.Errorf("#e2_term_init_notification_handler.Handle - Failed to get nodes list from RNIB. Error: %s", err.Error())
+               logger.Errorf("#E2TermInitNotificationHandler.Handle - Failed to get nodes list from RNIB. Error: %s", err.Error())
                return
        }
 
        if len(nbIdentityList) == 0 {
-               logger.Warnf("#e2_term_init_notification_handler.Handle - The Nodes list in RNIB is empty")
+               logger.Warnf("#E2TermInitNotificationHandler.Handle - The Nodes list in RNIB is empty")
                return
        }
 
-       for _,nbIdentity := range nbIdentityList{
+       for _, nbIdentity := range nbIdentityList {
 
                if err := handler.ranReconnectionManager.ReconnectRan(nbIdentity.InventoryName); err != nil {
-                       logger.Errorf("#e2_term_init_notification_handler.Handle - connection attempt failure, ran name: %s. Error: %s",
-                               (*nbIdentity).GetInventoryName(), err.Error())
-                       break
+                       logger.Errorf("#E2TermInitNotificationHandler.Handle - Ran name: %s - connection attempt failure, error: %s", (*nbIdentity).GetInventoryName(), err.Error())
+                       rNibError, ok := err.(common.IRNibError)
+                       if !ok || rNibError.GetCode() != common.RESOURCE_NOT_FOUND {
+                               break
+                       }
                }
        }
+       logger.Infof("#E2TermInitNotificationHandler.Handle - Completed handling of E2_TERM_INIT")
 }
diff --git a/E2Manager/handlers/e2_term_init_notification_handler_test.go b/E2Manager/handlers/e2_term_init_notification_handler_test.go
new file mode 100644 (file)
index 0000000..88ac026
--- /dev/null
@@ -0,0 +1,278 @@
+package handlers
+
+import (
+       "e2mgr/configuration"
+       "e2mgr/e2pdus"
+       "e2mgr/logger"
+       "e2mgr/managers"
+       "e2mgr/mocks"
+       "e2mgr/models"
+       "e2mgr/rNibWriter"
+       "e2mgr/rmrCgo"
+       "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"
+       "github.com/stretchr/testify/mock"
+       "testing"
+)
+
+func initRanLostConnectionTest(t *testing.T) (*logger.Logger, *mocks.RnibReaderMock, *mocks.RnibWriterMock, *mocks.RmrMessengerMock, *managers.RanReconnectionManager) {
+       logger := initLog(t)
+
+       rmrMessengerMock := &mocks.RmrMessengerMock{}
+       rmrService := getRmrService(rmrMessengerMock, logger)
+
+       readerMock := &mocks.RnibReaderMock{}
+       rnibReaderProvider := func() reader.RNibReader {
+               return readerMock
+       }
+       writerMock := &mocks.RnibWriterMock{}
+       rnibWriterProvider := func() rNibWriter.RNibWriter {
+               return writerMock
+       }
+
+       ranReconnectionManager := managers.NewRanReconnectionManager(logger, configuration.ParseConfiguration(), rnibReaderProvider, rnibWriterProvider, rmrService)
+       return logger, readerMock, writerMock, rmrMessengerMock, ranReconnectionManager
+}
+
+func TestE2TerminInitHandlerSuccessOneRan(t *testing.T) {
+       log, readerMock, writerMock, rmrMessengerMock, ranReconnectMgr := initRanLostConnectionTest(t)
+       var rnibErr common.IRNibError
+
+       readerProvider := func() reader.RNibReader {
+               return readerMock
+       }
+
+       ids := []*entities.NbIdentity {{InventoryName:"test1"}}
+       readerMock.On("GetListNodebIds").Return(ids, rnibErr)
+
+       var initialNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
+       readerMock.On("GetNodeb", ids[0].InventoryName).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(ids[0].InventoryName)
+       msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ids[0].InventoryName, &payload, &xaction)
+
+       rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(msg, nil)
+
+       handler := NewE2TermInitNotificationHandler(ranReconnectMgr, readerProvider)
+       handler.Handle(log, nil, nil, nil)
+
+       writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 1)
+       rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 1)
+}
+
+func TestE2TerminInitHandlerSuccessTwoRans(t *testing.T) {
+       log, readerMock, writerMock, rmrMessengerMock, ranReconnectMgr := initRanLostConnectionTest(t)
+       var rnibErr common.IRNibError
+
+       readerProvider := func() reader.RNibReader {
+               return readerMock
+       }
+
+       ids := []*entities.NbIdentity {{InventoryName:"test1"}, {InventoryName:"test2"} }
+       readerMock.On("GetListNodebIds").Return(ids, rnibErr)
+
+       var initialNodeb0 = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
+       var initialNodeb1 = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
+       readerMock.On("GetNodeb", ids[0].InventoryName).Return(initialNodeb0, rnibErr)
+       readerMock.On("GetNodeb", ids[1].InventoryName).Return(initialNodeb1, rnibErr)
+
+       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(ids[0].InventoryName)
+       msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ids[0].InventoryName, &payload, &xaction)
+
+       rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(msg, nil)
+
+       handler := NewE2TermInitNotificationHandler(ranReconnectMgr, readerProvider)
+       handler.Handle(log, nil, nil, nil)
+
+       writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 2)
+       rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 2)
+}
+
+func TestE2TerminInitHandlerSuccessThreeRansFirstRmrFailure(t *testing.T) {
+       log, readerMock, writerMock, rmrMessengerMock, ranReconnectMgr := initRanLostConnectionTest(t)
+       var rnibErr common.IRNibError
+
+       readerProvider := func() reader.RNibReader {
+               return readerMock
+       }
+
+       ids := []*entities.NbIdentity {{InventoryName:"test1"}, {InventoryName:"test2"},{InventoryName:"test3"} }
+       readerMock.On("GetListNodebIds").Return(ids, rnibErr)
+
+       var initialNodeb0 = &entities.NodebInfo{RanName: ids[0].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
+       var initialNodeb1 = &entities.NodebInfo{RanName: ids[1].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
+       var initialNodeb2 = &entities.NodebInfo{RanName: ids[2].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
+       readerMock.On("GetNodeb", ids[0].InventoryName).Return(initialNodeb0, rnibErr)
+       readerMock.On("GetNodeb", ids[1].InventoryName).Return(initialNodeb1, rnibErr)
+       readerMock.On("GetNodeb", ids[2].InventoryName).Return(initialNodeb2, rnibErr)
+
+       var argNodeb0 = &entities.NodebInfo{RanName: ids[0].InventoryName,ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
+       var argNodeb0Fail = &entities.NodebInfo{RanName: ids[0].InventoryName,ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 0}
+       writerMock.On("UpdateNodebInfo", argNodeb0).Return(rnibErr)
+       writerMock.On("UpdateNodebInfo", argNodeb0Fail).Return(rnibErr)
+
+
+       payload :=models.NewE2RequestMessage(ids[0].InventoryName /*tid*/, "", 0,ids[0].InventoryName, e2pdus.PackedX2setupRequest).GetMessageAsBytes(log)
+       xaction := []byte(ids[0].InventoryName)
+       msg0 := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ids[0].InventoryName, &payload, &xaction)
+
+       // Cannot use Mock because request MBuf contains pointers
+       //payload =models.NewE2RequestMessage(ids[1].InventoryName /*tid*/, "", 0,ids[1].InventoryName, e2pdus.PackedX2setupRequest).GetMessageAsBytes(log)
+       //xaction = []byte(ids[1].InventoryName)
+       //msg1 := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ids[1].InventoryName, &payload, &xaction)
+
+       rmrMessengerMock.On("SendMsg",  mock.Anything, mock.Anything).Return(msg0, fmt.Errorf("RMR Error"))
+
+       handler := NewE2TermInitNotificationHandler(ranReconnectMgr, readerProvider)
+       handler.Handle(log, nil, nil, nil)
+
+       //test1 (before send +1, after failure +1), test2 (0) test3 (0)
+       writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 2)
+       //test1 failure (+1), test2  (0). test3 (0)
+       rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 1)
+}
+
+func TestE2TerminInitHandlerSuccessThreeRansSecondNotFoundFailure(t *testing.T) {
+       log, readerMock, writerMock, rmrMessengerMock, ranReconnectMgr := initRanLostConnectionTest(t)
+       var rnibErr common.IRNibError
+
+       readerProvider := func() reader.RNibReader {
+               return readerMock
+       }
+
+       ids := []*entities.NbIdentity {{InventoryName:"test1"}, {InventoryName:"test2"},{InventoryName:"test3"} }
+       readerMock.On("GetListNodebIds").Return(ids, rnibErr)
+
+       var initialNodeb0 = &entities.NodebInfo{RanName: ids[0].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
+       var initialNodeb1 = &entities.NodebInfo{RanName: ids[1].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
+       var initialNodeb2 = &entities.NodebInfo{RanName: ids[2].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
+       readerMock.On("GetNodeb", ids[0].InventoryName).Return(initialNodeb0, rnibErr)
+       readerMock.On("GetNodeb", ids[1].InventoryName).Return(initialNodeb1, common.NewResourceNotFoundError(fmt.Errorf("not found")))
+       readerMock.On("GetNodeb", ids[2].InventoryName).Return(initialNodeb2, rnibErr)
+
+       var argNodeb0 = &entities.NodebInfo{RanName: ids[0].InventoryName,ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
+       var argNodeb0Success = &entities.NodebInfo{RanName: ids[0].InventoryName,ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
+       writerMock.On("UpdateNodebInfo", argNodeb0).Return(rnibErr)
+       writerMock.On("UpdateNodebInfo", argNodeb0Success).Return(rnibErr)
+
+       var argNodeb2 = &entities.NodebInfo{RanName: ids[2].InventoryName,ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
+       var argNodeb2Success = &entities.NodebInfo{RanName: ids[2].InventoryName,ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
+       writerMock.On("UpdateNodebInfo", argNodeb2).Return(rnibErr)
+       writerMock.On("UpdateNodebInfo", argNodeb2Success).Return(rnibErr)
+
+
+       payload :=models.NewE2RequestMessage(ids[0].InventoryName /*tid*/, "", 0,ids[0].InventoryName, e2pdus.PackedX2setupRequest).GetMessageAsBytes(log)
+       xaction := []byte(ids[0].InventoryName)
+       msg0 := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ids[0].InventoryName, &payload, &xaction)
+
+       // Cannot use Mock because request MBuf contains pointers
+       //payload =models.NewE2RequestMessage(ids[1].InventoryName /*tid*/, "", 0,ids[1].InventoryName, e2pdus.PackedX2setupRequest).GetMessageAsBytes(log)
+       //xaction = []byte(ids[1].InventoryName)
+       //msg1 := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ids[1].InventoryName, &payload, &xaction)
+
+       rmrMessengerMock.On("SendMsg",  mock.Anything, mock.Anything).Return(msg0, nil)
+
+       handler := NewE2TermInitNotificationHandler(ranReconnectMgr, readerProvider)
+       handler.Handle(log, nil, nil, nil)
+
+       readerMock.AssertNumberOfCalls(t, "GetNodeb", 3)
+       //test1 (+1), test2 failure (0) test3 (+1)
+       writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 2)
+       //test1 success (+1), test2  (0). test3 (+1)
+       rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 2)
+}
+
+
+func TestE2TerminInitHandlerSuccessThreeRansSecondRnibInternalErrorFailure(t *testing.T) {
+       log, readerMock, writerMock, rmrMessengerMock, ranReconnectMgr := initRanLostConnectionTest(t)
+       var rnibErr common.IRNibError
+
+       readerProvider := func() reader.RNibReader {
+               return readerMock
+       }
+
+       ids := []*entities.NbIdentity {{InventoryName:"test1"}, {InventoryName:"test2"},{InventoryName:"test3"} }
+       readerMock.On("GetListNodebIds").Return(ids, rnibErr)
+
+       var initialNodeb0 = &entities.NodebInfo{RanName: ids[0].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
+       var initialNodeb1 = &entities.NodebInfo{RanName: ids[1].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
+       var initialNodeb2 = &entities.NodebInfo{RanName: ids[2].InventoryName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
+       readerMock.On("GetNodeb", ids[0].InventoryName).Return(initialNodeb0, rnibErr)
+       readerMock.On("GetNodeb", ids[1].InventoryName).Return(initialNodeb1, common.NewInternalError(fmt.Errorf("internal error")))
+       readerMock.On("GetNodeb", ids[2].InventoryName).Return(initialNodeb2, rnibErr)
+
+       var argNodeb0 = &entities.NodebInfo{RanName: ids[0].InventoryName,ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
+       var argNodeb0Success = &entities.NodebInfo{RanName: ids[0].InventoryName,ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
+       writerMock.On("UpdateNodebInfo", argNodeb0).Return(rnibErr)
+       writerMock.On("UpdateNodebInfo", argNodeb0Success).Return(rnibErr)
+
+       var argNodeb2 = &entities.NodebInfo{RanName: ids[2].InventoryName,ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
+       var argNodeb2Success = &entities.NodebInfo{RanName: ids[2].InventoryName,ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
+       writerMock.On("UpdateNodebInfo", argNodeb2).Return(rnibErr)
+       writerMock.On("UpdateNodebInfo", argNodeb2Success).Return(rnibErr)
+
+
+       payload :=models.NewE2RequestMessage(ids[0].InventoryName /*tid*/, "", 0,ids[0].InventoryName, e2pdus.PackedX2setupRequest).GetMessageAsBytes(log)
+       xaction := []byte(ids[0].InventoryName)
+       msg0 := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ids[0].InventoryName, &payload, &xaction)
+
+       // Cannot use Mock because request MBuf contains pointers
+       //payload =models.NewE2RequestMessage(ids[1].InventoryName /*tid*/, "", 0,ids[1].InventoryName, e2pdus.PackedX2setupRequest).GetMessageAsBytes(log)
+       //xaction = []byte(ids[1].InventoryName)
+       //msg1 := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ids[1].InventoryName, &payload, &xaction)
+
+       rmrMessengerMock.On("SendMsg",  mock.Anything, mock.Anything).Return(msg0, nil)
+
+       handler := NewE2TermInitNotificationHandler(ranReconnectMgr, readerProvider)
+       handler.Handle(log, nil, nil, nil)
+
+       readerMock.AssertNumberOfCalls(t, "GetNodeb", 2)
+       //test1 (+1), test2 failure (0) test3 (0)
+       writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 1)
+       //test1 success (+1), test2  (0). test3 (+1)
+       rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 1)
+}
+
+func TestE2TerminInitHandlerSuccessZeroRans(t *testing.T) {
+       log, readerMock, writerMock, rmrMessengerMock, ranReconnectMgr := initRanLostConnectionTest(t)
+       var rnibErr common.IRNibError
+
+       readerProvider := func() reader.RNibReader {
+               return readerMock
+       }
+
+       readerMock.On("GetListNodebIds").Return( []*entities.NbIdentity{} , rnibErr)
+
+       handler := NewE2TermInitNotificationHandler(ranReconnectMgr, readerProvider)
+       handler.Handle(log, nil, nil, nil)
+
+       writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 0)
+       rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 0)
+}
+
+func TestE2TerminInitHandlerFailureGetListNodebIds(t *testing.T) {
+       log, readerMock, writerMock, rmrMessengerMock, ranReconnectMgr := initRanLostConnectionTest(t)
+
+       readerProvider := func() reader.RNibReader {
+               return readerMock
+       }
+
+       readerMock.On("GetListNodebIds").Return( []*entities.NbIdentity{} , common.NewInternalError(fmt.Errorf("internal error")))
+
+       handler := NewE2TermInitNotificationHandler(ranReconnectMgr, readerProvider)
+       handler.Handle(log, nil, nil, nil)
+
+       writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 0)
+       rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 0)
+}
index 2b1906b..7c866c8 100644 (file)
@@ -37,26 +37,25 @@ func TestExecuteSetupConnectingX2Setup(t *testing.T) {
 
        ranName := "test1"
 
-
        writerMock := &mocks.RnibWriterMock{}
        writerProvider := func() rNibWriter.RNibWriter {
                return writerMock
        }
 
-       var initialNodeb = &entities.NodebInfo{ConnectionStatus:  entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
-       var argNodeb = &entities.NodebInfo{ConnectionStatus:  entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1 }
+       var initialNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
+       var argNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
        var rnibErr common.IRNibError
-       writerMock.On("UpdateNodebInfo",argNodeb).Return(rnibErr)
+       writerMock.On("UpdateNodebInfo", argNodeb).Return(rnibErr)
 
-       payload:= e2pdus.PackedX2setupRequest
+       payload := e2pdus.PackedX2setupRequest
        xaction := []byte(ranName)
-       msg:= rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction)
+       msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction)
        rmrMessengerMock := &mocks.RmrMessengerMock{}
-       rmrMessengerMock.On("SendMsg",mock.Anything,mock.Anything).Return(msg,nil)
-       rmrService:= getRmrService(rmrMessengerMock, log)
+       rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(msg, nil)
+       rmrService := getRmrService(rmrMessengerMock, log)
 
        mgr := NewRanSetupManager(log, rmrService, writerProvider)
-       if err:= mgr.ExecuteSetup(initialNodeb); err != nil {
+       if err := mgr.ExecuteSetup(initialNodeb); err != nil {
                t.Errorf("want: success, got: error: %s", err)
        }
 
@@ -64,32 +63,30 @@ func TestExecuteSetupConnectingX2Setup(t *testing.T) {
        rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 1)
 }
 
-
 func TestExecuteSetupConnectingEndcX2Setup(t *testing.T) {
        log := initLog(t)
 
        ranName := "test1"
 
-
        writerMock := &mocks.RnibWriterMock{}
        writerProvider := func() rNibWriter.RNibWriter {
                return writerMock
        }
 
-       var initialNodeb = &entities.NodebInfo{ConnectionStatus:  entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST}
-       var argNodeb = &entities.NodebInfo{ConnectionStatus:  entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST, ConnectionAttempts: 1 }
+       var initialNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST}
+       var argNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST, ConnectionAttempts: 1}
        var rnibErr common.IRNibError
-       writerMock.On("UpdateNodebInfo",argNodeb).Return(rnibErr)
+       writerMock.On("UpdateNodebInfo", argNodeb).Return(rnibErr)
 
-       payload:= e2pdus.PackedEndcX2setupRequest
+       payload := e2pdus.PackedEndcX2setupRequest
        xaction := []byte(ranName)
-       msg:= rmrCgo.NewMBuf(rmrCgo.RIC_ENDC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction)
+       msg := rmrCgo.NewMBuf(rmrCgo.RIC_ENDC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction)
        rmrMessengerMock := &mocks.RmrMessengerMock{}
-       rmrMessengerMock.On("SendMsg",mock.Anything,mock.Anything).Return(msg,nil)
-       rmrService:= getRmrService(rmrMessengerMock, log)
+       rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(msg, nil)
+       rmrService := getRmrService(rmrMessengerMock, log)
 
        mgr := NewRanSetupManager(log, rmrService, writerProvider)
-       if err:= mgr.ExecuteSetup(initialNodeb); err != nil {
+       if err := mgr.ExecuteSetup(initialNodeb); err != nil {
                t.Errorf("want: success, got: error: %s", err)
        }
 
@@ -107,22 +104,22 @@ func TestExecuteSetupDisconnected(t *testing.T) {
                return writerMock
        }
 
-       var initialNodeb = &entities.NodebInfo{ConnectionStatus:  entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
-       var argNodeb = &entities.NodebInfo{ConnectionStatus:  entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1 }
-       var argNodebDisconnected = &entities.NodebInfo{ConnectionStatus:  entities.ConnectionStatus_DISCONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 0 }
+       var initialNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
+       var argNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
+       var argNodebDisconnected = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 0}
        var rnibErr common.IRNibError
-       writerMock.On("UpdateNodebInfo",argNodeb).Return(rnibErr)
-       writerMock.On("UpdateNodebInfo",argNodebDisconnected).Return(rnibErr)
+       writerMock.On("UpdateNodebInfo", argNodeb).Return(rnibErr)
+       writerMock.On("UpdateNodebInfo", argNodebDisconnected).Return(rnibErr)
 
-       payload:= []byte {0}
+       payload := []byte{0}
        xaction := []byte(ranName)
-       msg:= rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction)
+       msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction)
        rmrMessengerMock := &mocks.RmrMessengerMock{}
-       rmrMessengerMock.On("SendMsg",mock.Anything,mock.Anything).Return(msg,fmt.Errorf("send failure"))
-       rmrService:= getRmrService(rmrMessengerMock, log)
+       rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(msg, fmt.Errorf("send failure"))
+       rmrService := getRmrService(rmrMessengerMock, log)
 
-       mgr := NewRanSetupManager(log, rmrService,  writerProvider)
-       if err:= mgr.ExecuteSetup(initialNodeb); err == nil {
+       mgr := NewRanSetupManager(log, rmrService, writerProvider)
+       if err := mgr.ExecuteSetup(initialNodeb); err == nil {
                t.Errorf("want: failure, got: success")
        }
 
@@ -140,28 +137,27 @@ func TestExecuteSetupConnectingRnibError(t *testing.T) {
                return writerMock
        }
 
-       var initialNodeb = &entities.NodebInfo{ConnectionStatus:  entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
-       var argNodeb = &entities.NodebInfo{ConnectionStatus:  entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1 }
-       var argNodebDisconnected = &entities.NodebInfo{ConnectionStatus:  entities.ConnectionStatus_DISCONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 0 }
+       var initialNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
+       var argNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
+       var argNodebDisconnected = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 0}
        var rnibErr = common.NewInternalError(fmt.Errorf("DB error"))
-       writerMock.On("UpdateNodebInfo",argNodeb).Return(rnibErr)
-       writerMock.On("UpdateNodebInfo",argNodebDisconnected).Return(rnibErr)
+       writerMock.On("UpdateNodebInfo", argNodeb).Return(rnibErr)
+       writerMock.On("UpdateNodebInfo", argNodebDisconnected).Return(rnibErr)
 
-       payload:= []byte {0}
+       payload := []byte{0}
        xaction := []byte(ranName)
-       msg:= rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction)
+       msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction)
        rmrMessengerMock := &mocks.RmrMessengerMock{}
-       rmrMessengerMock.On("SendMsg",mock.Anything,mock.Anything).Return(msg,fmt.Errorf("send failure"))
-       rmrService:= getRmrService(rmrMessengerMock, log)
+       rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(msg, fmt.Errorf("send failure"))
+       rmrService := getRmrService(rmrMessengerMock, log)
 
        mgr := NewRanSetupManager(log, rmrService, writerProvider)
-       if err:= mgr.ExecuteSetup(initialNodeb); err == nil {
+       if err := mgr.ExecuteSetup(initialNodeb); err == nil {
                t.Errorf("want: failure, got: success")
        } else {
                assert.IsType(t, e2managererrors.NewRnibDbError(), err)
        }
 
-
        writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 1)
        rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 0)
 }
@@ -176,22 +172,22 @@ func TestExecuteSetupDisconnectedRnibError(t *testing.T) {
                return writerMock
        }
 
-       var initialNodeb = &entities.NodebInfo{ConnectionStatus:  entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
-       var argNodeb = &entities.NodebInfo{ConnectionStatus:  entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1 }
-       var argNodebDisconnected = &entities.NodebInfo{ConnectionStatus:  entities.ConnectionStatus_DISCONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 0 }
+       var initialNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
+       var argNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
+       var argNodebDisconnected = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 0}
        var rnibErr common.IRNibError
-       writerMock.On("UpdateNodebInfo",argNodeb).Return(rnibErr)
-       writerMock.On("UpdateNodebInfo",argNodebDisconnected).Return(common.NewInternalError(fmt.Errorf("DB error")))
+       writerMock.On("UpdateNodebInfo", argNodeb).Return(rnibErr)
+       writerMock.On("UpdateNodebInfo", argNodebDisconnected).Return(common.NewInternalError(fmt.Errorf("DB error")))
 
-       payload:= []byte {0}
+       payload := []byte{0}
        xaction := []byte(ranName)
-       msg:= rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction)
+       msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction)
        rmrMessengerMock := &mocks.RmrMessengerMock{}
-       rmrMessengerMock.On("SendMsg",mock.Anything,mock.Anything).Return(msg,fmt.Errorf("send failure"))
-       rmrService:= getRmrService(rmrMessengerMock, log)
+       rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(msg, fmt.Errorf("send failure"))
+       rmrService := getRmrService(rmrMessengerMock, log)
 
-       mgr := NewRanSetupManager(log, rmrService,  writerProvider)
-       if err:= mgr.ExecuteSetup(initialNodeb); err == nil {
+       mgr := NewRanSetupManager(log, rmrService, writerProvider)
+       if err := mgr.ExecuteSetup(initialNodeb); err == nil {
                t.Errorf("want: failure, got: success")
        } else {
                assert.IsType(t, e2managererrors.NewRnibDbError(), err)
@@ -201,6 +197,36 @@ func TestExecuteSetupDisconnectedRnibError(t *testing.T) {
        rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 1)
 }
 
+func TestExecuteSetupUnsupportedProtocol(t *testing.T) {
+       log := initLog(t)
+
+       ranName := "test1"
+
+       writerMock := &mocks.RnibWriterMock{}
+       writerProvider := func() rNibWriter.RNibWriter {
+               return writerMock
+       }
+
+       var initialNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_UNKNOWN_E2_APPLICATION_PROTOCOL}
+       var argNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_UNKNOWN_E2_APPLICATION_PROTOCOL, ConnectionAttempts: 1}
+       var rnibErr common.IRNibError
+       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 := &mocks.RmrMessengerMock{}
+       rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(msg, nil)
+       rmrService := getRmrService(rmrMessengerMock, log)
+
+       mgr := NewRanSetupManager(log, rmrService, writerProvider)
+       if err := mgr.ExecuteSetup(initialNodeb); err == nil {
+               t.Errorf("want: error, got: success")
+       }
+
+       writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 1)
+       rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 0)
+}
 
 func initLog(t *testing.T) *logger.Logger {
        log, err := logger.InitLogger(logger.InfoLevel)
@@ -209,5 +235,3 @@ func initLog(t *testing.T) *logger.Logger {
        }
        return log
 }
-
-