X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=E2Manager%2Fhandlers%2Frmrmsghandlers%2Fx2_reset_response_handler_test.go;h=7a9990303a9e5f4b5f15cb9fa6840ec3cbd43a14;hb=04ff63f1708020673dd9be975476e0f76f179a81;hp=26f0ade1a78fb0de1c6432588ae1c23046187936;hpb=e3623cf1310f8c8d2fd9b5842102516b9be3b441;p=ric-plt%2Fe2mgr.git diff --git a/E2Manager/handlers/rmrmsghandlers/x2_reset_response_handler_test.go b/E2Manager/handlers/rmrmsghandlers/x2_reset_response_handler_test.go index 26f0ade..7a99903 100644 --- a/E2Manager/handlers/rmrmsghandlers/x2_reset_response_handler_test.go +++ b/E2Manager/handlers/rmrmsghandlers/x2_reset_response_handler_test.go @@ -13,98 +13,173 @@ // 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/converters" + "e2mgr/enums" "e2mgr/logger" + "e2mgr/managers" "e2mgr/mocks" "e2mgr/models" "e2mgr/rmrCgo" "e2mgr/services" - "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" "testing" "time" ) -func initX2ResetResponseHandlerTest(t *testing.T) (*logger.Logger, X2ResetResponseHandler, *mocks.RnibReaderMock) { - log, err := logger.InitLogger(logger.DebugLevel) +const ( + SuccessfulX2ResetResponsePackedPdu = "200700080000010011400100" + SuccessfulX2ResetResponsePackedPduEmptyIEs = "20070003000000" + UnsuccessfulX2ResetResponsePackedPdu = "2007000d00000100114006080000000d00" +) + +func initX2ResetResponseHandlerTest(t *testing.T) (X2ResetResponseHandler, *mocks.RnibReaderMock, *mocks.RmrMessengerMock) { + log, err := logger.InitLogger(logger.InfoLevel) config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3} - if err!=nil{ - t.Errorf("#sctp_errors_notification_handler_test.TestHandleInSession - failed to initialize logger, error: %s", err) - } - readerMock :=&mocks.RnibReaderMock{} - rnibReaderProvider := func() reader.RNibReader { - return readerMock + if err != nil { + t.Errorf("#initX2ResetResponseHandlerTest - failed to initialize logger, error: %s", err) } - rnibDataService := services.NewRnibDataService(log, config, rnibReaderProvider, nil) + readerMock := &mocks.RnibReaderMock{} + + rnibDataService := services.NewRnibDataService(log, config, readerMock, nil) - h := NewX2ResetResponseHandler(rnibDataService) - return log, h, readerMock + rmrMessengerMock := &mocks.RmrMessengerMock{} + rmrSender := initRmrSender(rmrMessengerMock, log) + ranStatusChangeManager := managers.NewRanStatusChangeManager(log, rmrSender) + + h := NewX2ResetResponseHandler(log, rnibDataService, ranStatusChangeManager, converters.NewX2ResetResponseExtractor(log)) + return h, readerMock, rmrMessengerMock } func TestX2ResetResponseSuccess(t *testing.T) { - log, h, readerMock := initX2ResetResponseHandlerTest(t) + h, readerMock, rmrMessengerMock := initX2ResetResponseHandlerTest(t) + var payload []byte + _, err := fmt.Sscanf(SuccessfulX2ResetResponsePackedPdu, "%x", &payload) + if err != nil { + t.Fatalf("Failed converting packed pdu. Error: %v\n", err) + } + + var xAction []byte + notificationRequest := models.NotificationRequest{RanName: RanName, Len: len(payload), Payload: payload, StartTime: time.Now(), TransactionId: xAction} + nb := &entities.NodebInfo{RanName: RanName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, NodeType: entities.Node_ENB} + var rnibErr error + readerMock.On("GetNodeb", RanName).Return(nb, rnibErr) + ranRestartedMbuf := getRanRestartedMbuf(nb.NodeType, enums.RIC_TO_RAN) + rmrMessengerMock.On("SendMsg", ranRestartedMbuf, true).Return(&rmrCgo.MBuf{}, err) + h.Handle(¬ificationRequest) + rmrMessengerMock.AssertCalled(t, "SendMsg", ranRestartedMbuf, true) +} + +func TestX2ResetResponseSuccessEmptyIEs(t *testing.T) { + h, readerMock, rmrMessengerMock := initX2ResetResponseHandlerTest(t) + var payload []byte + _, err := fmt.Sscanf(SuccessfulX2ResetResponsePackedPduEmptyIEs, "%x", &payload) + if err != nil { + t.Fatalf("Failed converting packed pdu. Error: %v\n", err) + } + + var xAction []byte + notificationRequest := models.NotificationRequest{RanName: RanName, Len: len(payload), Payload: payload, StartTime: time.Now(), TransactionId: xAction} + nb := &entities.NodebInfo{RanName: RanName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, NodeType: entities.Node_ENB} + var rnibErr error + readerMock.On("GetNodeb", RanName).Return(nb, rnibErr) + ranRestartedMbuf := getRanRestartedMbuf(nb.NodeType, enums.RIC_TO_RAN) + rmrMessengerMock.On("SendMsg", ranRestartedMbuf, true).Return(&rmrCgo.MBuf{}, err) + h.Handle(¬ificationRequest) + rmrMessengerMock.AssertCalled(t, "SendMsg", ranRestartedMbuf, true) +} - payload, err := tests.BuildPackedX2ResetResponse() +func TestX2ResetResponseShuttingDown(t *testing.T) { + h, readerMock, rmrMessengerMock := initX2ResetResponseHandlerTest(t) + var payload []byte + _, err := fmt.Sscanf(SuccessfulX2ResetResponsePackedPdu, "%x", &payload) if err != nil { - t.Errorf("#x2_reset_response_handler_test.TestX2resetResponse - failed to build and pack X2ResetResponse. Error %x", err) + t.Fatalf("Failed converting packed pdu. Error: %v\n", err) } - 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)} - var messageChannel chan<- *models.NotificationResponse + var xAction []byte + notificationRequest := models.NotificationRequest{RanName: RanName, Len: len(payload), Payload: payload, StartTime: time.Now(), TransactionId: xAction} + nb := &entities.NodebInfo{RanName: RanName, ConnectionStatus: entities.ConnectionStatus_SHUTTING_DOWN, NodeType: entities.Node_ENB} + var rnibErr error + readerMock.On("GetNodeb", RanName).Return(nb, rnibErr) + h.Handle(¬ificationRequest) + rmrMessengerMock.AssertNotCalled(t, "SendMsg") +} + +func TestX2ResetResponseInvalidConnectionStatus(t *testing.T) { + h, readerMock, rmrMessengerMock := initX2ResetResponseHandlerTest(t) + var payload []byte + _, err := fmt.Sscanf(SuccessfulX2ResetResponsePackedPdu, "%x", &payload) + if err != nil { + t.Fatalf("Failed converting packed pdu. Error: %v\n", err) + } - nb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_CONNECTED_SETUP_FAILED,} + var xAction []byte + notificationRequest := models.NotificationRequest{RanName: RanName, Len: len(payload), Payload: payload, StartTime: time.Now(), TransactionId: xAction} + nb := &entities.NodebInfo{RanName: RanName, ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, NodeType: entities.Node_ENB} var rnibErr error - readerMock.On("GetNodeb", mBuf.Meid).Return(nb, rnibErr) + readerMock.On("GetNodeb", RanName).Return(nb, rnibErr) + h.Handle(¬ificationRequest) + rmrMessengerMock.AssertNotCalled(t, "SendMsg") +} - h.Handle(log, ¬ificationRequest, messageChannel) +func TestX2ResetResponseError(t *testing.T) { + h, readerMock, rmrMessengerMock := initX2ResetResponseHandlerTest(t) + var payload []byte + _, err := fmt.Sscanf(UnsuccessfulX2ResetResponsePackedPdu, "%x", &payload) + if err != nil { + t.Fatalf("Failed converting packed pdu. Error: %v\n", err) + } - //TODO:Nothing to verify + var xAction []byte + notificationRequest := models.NotificationRequest{RanName: RanName, Len: len(payload), Payload: payload, StartTime: time.Now(), TransactionId: xAction} + nb := &entities.NodebInfo{RanName: RanName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, NodeType: entities.Node_ENB} + var rnibErr error + readerMock.On("GetNodeb", RanName).Return(nb, rnibErr) + h.Handle(¬ificationRequest) + rmrMessengerMock.AssertNotCalled(t, "SendMsg") } -func TestX2ResetResponseReaderFailure(t *testing.T) { - log, h, readerMock := initX2ResetResponseHandlerTest(t) +func TestX2ResetResponseGetNodebFailure(t *testing.T) { + h, readerMock, rmrMessengerMock := initX2ResetResponseHandlerTest(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)} - var messageChannel chan<- *models.NotificationResponse + _, err := fmt.Sscanf(SuccessfulX2ResetResponsePackedPdu, "%x", &payload) + if err != nil { + t.Fatalf("Failed converting packed pdu. Error: %v\n", err) + } - var nb *entities.NodebInfo - rnibErr := common.NewResourceNotFoundError("nodeb not found") - readerMock.On("GetNodeb", mBuf.Meid).Return(nb, rnibErr) + var xAction []byte + notificationRequest := models.NotificationRequest{RanName: RanName, Len: len(payload), Payload: payload, StartTime: time.Now(), TransactionId: xAction} - h.Handle(log, ¬ificationRequest, messageChannel) + var nb *entities.NodebInfo + rnibErr := common.NewResourceNotFoundError("nodeb not found") + readerMock.On("GetNodeb", RanName).Return(nb, rnibErr) - //TODO:Nothing to verify + h.Handle(¬ificationRequest) + rmrMessengerMock.AssertNotCalled(t, "SendMsg") } func TestX2ResetResponseUnpackFailure(t *testing.T) { - log, h, readerMock := initX2ResetResponseHandlerTest(t) + h, readerMock, rmrMessengerMock := initX2ResetResponseHandlerTest(t) - payload := []byte("not valid 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)} - var messageChannel chan<- *models.NotificationResponse - - nb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_CONNECTED_SETUP_FAILED,} + payload := []byte("Invalid payload") + var xAction []byte + notificationRequest := models.NotificationRequest{RanName: RanName, Len: len(payload), Payload: payload, StartTime: time.Now(), TransactionId: xAction} + nb := &entities.NodebInfo{RanName: RanName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, NodeType: entities.Node_ENB} var rnibErr error - readerMock.On("GetNodeb", mBuf.Meid).Return(nb, rnibErr) - - h.Handle(log, ¬ificationRequest, messageChannel) + readerMock.On("GetNodeb", RanName).Return(nb, rnibErr) - //TODO:Nothing to verify + h.Handle(¬ificationRequest) + rmrMessengerMock.AssertNotCalled(t, "SendMsg") }