X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=E2Manager%2Fcontrollers%2Fnodeb_controller_test.go;h=f819138078b14f2a1a55334eb4e471ee209320ab;hb=372a275602ae05da22130a4601709291c7fbbaa6;hp=f0c26e6a5cebf0caacdf8d726460045accc34bd1;hpb=de19068aaa1f3d2b415cd960106121ceb167aaa9;p=ric-plt%2Fe2mgr.git diff --git a/E2Manager/controllers/nodeb_controller_test.go b/E2Manager/controllers/nodeb_controller_test.go index f0c26e6..f819138 100644 --- a/E2Manager/controllers/nodeb_controller_test.go +++ b/E2Manager/controllers/nodeb_controller_test.go @@ -13,7 +13,10 @@ // 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 controllers @@ -27,7 +30,6 @@ import ( "e2mgr/mocks" "e2mgr/models" "e2mgr/providers/httpmsghandlerprovider" - "e2mgr/rNibWriter" "e2mgr/rmrCgo" "e2mgr/services" "e2mgr/services/rmrsender" @@ -36,7 +38,6 @@ import ( "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/gorilla/mux" "github.com/pkg/errors" "github.com/stretchr/testify/assert" @@ -64,30 +65,27 @@ type controllerGetNodebIdListTestContext struct { expectedJsonResponse string } -func setupControllerTest(t *testing.T) (*NodebController, *mocks.RnibReaderMock, *mocks.RnibWriterMock, *mocks.RmrMessengerMock) { +func setupControllerTest(t *testing.T) (*NodebController, *mocks.RnibReaderMock, *mocks.RnibWriterMock, *mocks.RmrMessengerMock, *mocks.E2TInstancesManagerMock) { log := initLog(t) config := configuration.ParseConfiguration() rmrMessengerMock := &mocks.RmrMessengerMock{} readerMock := &mocks.RnibReaderMock{} - readerProvider := func() reader.RNibReader { - return readerMock - } + writerMock := &mocks.RnibWriterMock{} - writerProvider := func() rNibWriter.RNibWriter { - return writerMock - } - rnibDataService := services.NewRnibDataService(log, config, readerProvider, writerProvider) + + rnibDataService := services.NewRnibDataService(log, config, readerMock, writerMock) rmrSender := getRmrSender(rmrMessengerMock, log) ranSetupManager := managers.NewRanSetupManager(log, rmrSender, rnibDataService) - handlerProvider := httpmsghandlerprovider.NewIncomingRequestHandlerProvider(log, rmrSender, config, rnibDataService, ranSetupManager) + e2tInstancesManager := &mocks.E2TInstancesManagerMock{} + handlerProvider := httpmsghandlerprovider.NewIncomingRequestHandlerProvider(log, rmrSender, config, rnibDataService, ranSetupManager, e2tInstancesManager) controller := NewNodebController(log, handlerProvider) - return controller, readerMock, writerMock, rmrMessengerMock + return controller, readerMock, writerMock, rmrMessengerMock, e2tInstancesManager } func TestX2SetupInvalidBody(t *testing.T) { - controller, _, _, _ := setupControllerTest(t) + controller, _, _, _, _ := setupControllerTest(t) header := http.Header{} header.Set("Content-Type", "application/json") @@ -105,20 +103,23 @@ func TestX2SetupInvalidBody(t *testing.T) { func TestX2SetupSuccess(t *testing.T) { - controller, readerMock, writerMock, rmrMessengerMock := setupControllerTest(t) + controller, readerMock, writerMock, rmrMessengerMock, _ := setupControllerTest(t) ranName := "test" - nb := &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST} + nb := &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, AssociatedE2TInstanceAddress:"10.0.2.15:8989"} readerMock.On("GetNodeb", ranName).Return(nb, nil) + var nbUpdated = *nb + nbUpdated.ConnectionAttempts = 0 + writerMock.On("UpdateNodebInfo", &nbUpdated).Return(nil) - var nbUpdated = &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1} - writerMock.On("UpdateNodebInfo", nbUpdated).Return(nil) + var nbUpdated2 = &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1, AssociatedE2TInstanceAddress:"10.0.2.15:8989"} + writerMock.On("UpdateNodebInfo", nbUpdated2).Return(nil) payload := e2pdus.PackedX2setupRequest - xaction := []byte(ranName) - msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction) + var xAction []byte + msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ranName, &payload, &xAction) - rmrMessengerMock.On("SendMsg", mock.Anything).Return(msg, nil) + rmrMessengerMock.On("SendMsg", mock.Anything, true).Return(msg, nil) header := http.Header{} header.Set("Content-Type", "application/json") @@ -131,22 +132,26 @@ func TestX2SetupSuccess(t *testing.T) { assert.Equal(t, http.StatusNoContent, writer.Result().StatusCode) } + func TestEndcSetupSuccess(t *testing.T) { - controller, readerMock, writerMock, rmrMessengerMock := setupControllerTest(t) + controller, readerMock, writerMock, rmrMessengerMock, _ := setupControllerTest(t) ranName := "test" - nb := &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST} + nb := &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST, AssociatedE2TInstanceAddress:"10.0.2.15:8989"} readerMock.On("GetNodeb", ranName).Return(nb, nil) + var nbUpdated = *nb + nbUpdated.ConnectionAttempts = 0 + writerMock.On("UpdateNodebInfo", &nbUpdated).Return(nil) - var nbUpdated = &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST, ConnectionAttempts: 1} - writerMock.On("UpdateNodebInfo", nbUpdated).Return(nil) + var nbUpdated2 = &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST, ConnectionAttempts: 1, AssociatedE2TInstanceAddress:"10.0.2.15:8989"} + writerMock.On("UpdateNodebInfo", nbUpdated2).Return(nil) payload := e2pdus.PackedEndcX2setupRequest - xaction := []byte(ranName) - msg := rmrCgo.NewMBuf(rmrCgo.RIC_ENDC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction) + var xAction[]byte + msg := rmrCgo.NewMBuf(rmrCgo.RIC_ENDC_X2_SETUP_REQ, len(payload), ranName, &payload, &xAction) - rmrMessengerMock.On("SendMsg", mock.Anything).Return(msg, nil) + rmrMessengerMock.On("SendMsg", mock.Anything, true).Return(msg, nil) header := http.Header{} header.Set("Content-Type", "application/json") @@ -160,7 +165,7 @@ func TestEndcSetupSuccess(t *testing.T) { } func TestShutdownHandlerRnibError(t *testing.T) { - controller, readerMock, _, _ := setupControllerTest(t) + controller, readerMock, _, _, _ := setupControllerTest(t) rnibErr := &common.ResourceNotFoundError{} var nbIdentityList []*entities.NbIdentity @@ -177,7 +182,7 @@ func TestShutdownHandlerRnibError(t *testing.T) { } func controllerGetNodebTestExecuter(t *testing.T, context *controllerGetNodebTestContext) { - controller, readerMock, _, _ := setupControllerTest(t) + controller, readerMock, _, _, _ := setupControllerTest(t) writer := httptest.NewRecorder() readerMock.On("GetNodeb", context.ranName).Return(context.nodebInfo, context.rnibError) req, _ := http.NewRequest("GET", "/nodeb", nil) @@ -189,7 +194,7 @@ func controllerGetNodebTestExecuter(t *testing.T, context *controllerGetNodebTes } func controllerGetNodebIdListTestExecuter(t *testing.T, context *controllerGetNodebIdListTestContext) { - controller, readerMock, _, _ := setupControllerTest(t) + controller, readerMock, _, _, _ := setupControllerTest(t) writer := httptest.NewRecorder() readerMock.On("GetListNodebIds").Return(context.nodebIdList, context.rnibError) req, _ := http.NewRequest("GET", "/nodeb/ids", nil) @@ -286,7 +291,7 @@ func TestControllerGetNodebIdListInternal(t *testing.T) { } func TestHeaderValidationFailed(t *testing.T) { - controller, _, _, _ := setupControllerTest(t) + controller, _, _, _, _ := setupControllerTest(t) writer := httptest.NewRecorder() @@ -303,7 +308,7 @@ func TestHeaderValidationFailed(t *testing.T) { } func TestShutdownStatusNoContent(t *testing.T) { - controller, readerMock, _, _ := setupControllerTest(t) + controller, readerMock, _, _, _ := setupControllerTest(t) var rnibError error nbIdentityList := []*entities.NbIdentity{} @@ -316,7 +321,7 @@ func TestShutdownStatusNoContent(t *testing.T) { } func TestHandleInternalError(t *testing.T) { - controller, _, _, _ := setupControllerTest(t) + controller, _, _, _, _ := setupControllerTest(t) writer := httptest.NewRecorder() err := e2managererrors.NewInternalError() @@ -330,7 +335,7 @@ func TestHandleInternalError(t *testing.T) { } func TestHandleCommandAlreadyInProgressError(t *testing.T) { - controller, _, _, _ := setupControllerTest(t) + controller, _, _, _, _ := setupControllerTest(t) writer := httptest.NewRecorder() err := e2managererrors.NewCommandAlreadyInProgressError() @@ -342,8 +347,22 @@ func TestHandleCommandAlreadyInProgressError(t *testing.T) { assert.Equal(t, errorResponse.Message, err.Message) } +func TestHandleE2TInstanceAbsenceError(t *testing.T) { + controller, _, _, _, _ := setupControllerTest(t) + + writer := httptest.NewRecorder() + err := e2managererrors.NewE2TInstanceAbsenceError() + + controller.handleErrorResponse(err, writer) + var errorResponse = parseJsonRequest(t, writer.Body) + + assert.Equal(t, http.StatusServiceUnavailable, writer.Result().StatusCode) + assert.Equal(t, errorResponse.Code, err.Code) + assert.Equal(t, errorResponse.Message, err.Message) +} + func TestValidateHeaders(t *testing.T) { - controller, _, _, _ := setupControllerTest(t) + controller, _, _, _, _ := setupControllerTest(t) header := http.Header{} header.Set("Content-Type", "application/json") @@ -373,12 +392,12 @@ func initLog(t *testing.T) *logger.Logger { } func TestX2ResetHandleSuccessfulRequestedCause(t *testing.T) { - controller, readerMock, _, rmrMessengerMock := setupControllerTest(t) + controller, readerMock, _, rmrMessengerMock, _ := setupControllerTest(t) ranName := "test1" payload := []byte{0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x05, 0x40, 0x01, 0x40} - xaction := []byte(ranName) - msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_RESET, len(payload), ranName, &payload, &xaction) + var xAction []byte + msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_RESET, len(payload), ranName, &payload, &xAction) rmrMessengerMock.On("SendMsg", msg, mock.Anything).Return(msg, nil) writer := httptest.NewRecorder() @@ -398,14 +417,14 @@ func TestX2ResetHandleSuccessfulRequestedCause(t *testing.T) { } func TestX2ResetHandleSuccessfulRequestedDefault(t *testing.T) { - controller, readerMock, _, rmrMessengerMock := setupControllerTest(t) + controller, readerMock, _, rmrMessengerMock, _ := setupControllerTest(t) ranName := "test1" // o&m intervention payload := []byte{0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x05, 0x40, 0x01, 0x64} - xaction := []byte(ranName) - msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_RESET, len(payload), ranName, &payload, &xaction) - rmrMessengerMock.On("SendMsg", msg).Return(msg, nil) + var xAction []byte + msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_RESET, len(payload), ranName, &payload, &xAction) + rmrMessengerMock.On("SendMsg", msg, true).Return(msg, nil) writer := httptest.NewRecorder() @@ -423,7 +442,7 @@ func TestX2ResetHandleSuccessfulRequestedDefault(t *testing.T) { } func TestX2ResetHandleFailureInvalidBody(t *testing.T) { - controller, _, _, _ := setupControllerTest(t) + controller, _, _, _ , _:= setupControllerTest(t) ranName := "test1" @@ -440,7 +459,7 @@ func TestX2ResetHandleFailureInvalidBody(t *testing.T) { } func TestHandleErrorResponse(t *testing.T) { - controller, _, _, _ := setupControllerTest(t) + controller, _, _, _ , _:= setupControllerTest(t) writer := httptest.NewRecorder() controller.handleErrorResponse(e2managererrors.NewRnibDbError(), writer) @@ -478,5 +497,5 @@ func TestHandleErrorResponse(t *testing.T) { func getRmrSender(rmrMessengerMock *mocks.RmrMessengerMock, log *logger.Logger) *rmrsender.RmrSender { rmrMessenger := rmrCgo.RmrMessenger(rmrMessengerMock) rmrMessengerMock.On("Init", tests.GetPort(), tests.MaxMsgSize, tests.Flags, log).Return(&rmrMessenger) - return rmrsender.NewRmrSender(log, &rmrMessenger) + return rmrsender.NewRmrSender(log, rmrMessenger) }