From: rh362j Date: Thu, 29 Aug 2019 16:27:13 +0000 (+0300) Subject: [RICPLT-1852] Supports E2T Initialize - Enable handler + UT X-Git-Tag: 2.0.10~27 X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=commitdiff_plain;h=88b31d518e6f4c0513962d6fa373f76c5e8c1306;p=ric-plt%2Fe2mgr.git [RICPLT-1852] Supports E2T Initialize - Enable handler + UT Change-Id: Ica6a8f4647462a39c8b39e59cffe221816da190a Signed-off-by: rh362j --- diff --git a/E2Manager/handlers/e2_term_init_notification_handler.go b/E2Manager/handlers/e2_term_init_notification_handler.go index 6e28d14..7299910 100644 --- a/E2Manager/handlers/e2_term_init_notification_handler.go +++ b/E2Manager/handlers/e2_term_init_notification_handler.go @@ -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 index 0000000..88ac026 --- /dev/null +++ b/E2Manager/handlers/e2_term_init_notification_handler_test.go @@ -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) +} diff --git a/E2Manager/managers/ran_setup_manager_test.go b/E2Manager/managers/ran_setup_manager_test.go index 2b1906b..7c866c8 100644 --- a/E2Manager/managers/ran_setup_manager_test.go +++ b/E2Manager/managers/ran_setup_manager_test.go @@ -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 } - -