From: is005q Date: Sun, 8 Dec 2019 13:03:00 +0000 (+0200) Subject: [RICPLT-2523] Update setup flow | Add UTs.......... X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=commitdiff_plain;h=99e39b485bd66dad8afadbc1f3c3c3b0ca3569b5;p=ric-plt%2Fe2mgr.git [RICPLT-2523] Update setup flow | Add UTs.......... Change-Id: I456277f461e64175e46549b2f9a0d2089cd268e9 Signed-off-by: is005q --- diff --git a/E2Manager/controllers/nodeb_controller.go b/E2Manager/controllers/nodeb_controller.go index b1fd087..a8afc33 100644 --- a/E2Manager/controllers/nodeb_controller.go +++ b/E2Manager/controllers/nodeb_controller.go @@ -225,7 +225,10 @@ func (c *NodebController) handleErrorResponse(err error, writer http.ResponseWri e2Error, _ := err.(*e2managererrors.ResourceNotFoundError) errorResponseDetails = models.ErrorResponse{Code: e2Error.Code, Message: e2Error.Message} httpError = http.StatusNotFound - + case *e2managererrors.E2TInstanceAbsenceError: + e2Error, _ := err.(*e2managererrors.E2TInstanceAbsenceError) + errorResponseDetails = models.ErrorResponse{Code: e2Error.Code, Message: e2Error.Message} + httpError = http.StatusServiceUnavailable default: e2Error := e2managererrors.NewInternalError() errorResponseDetails = models.ErrorResponse{Code: e2Error.Code, Message: e2Error.Message} diff --git a/E2Manager/controllers/nodeb_controller_test.go b/E2Manager/controllers/nodeb_controller_test.go index a2acacd..6847536 100644 --- a/E2Manager/controllers/nodeb_controller_test.go +++ b/E2Manager/controllers/nodeb_controller_test.go @@ -21,7 +21,7 @@ import ( "bytes" "e2mgr/configuration" "e2mgr/e2managererrors" - //"e2mgr/e2pdus" + "e2mgr/e2pdus" "e2mgr/logger" "e2mgr/managers" "e2mgr/mocks" @@ -62,7 +62,7 @@ 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() @@ -74,15 +74,15 @@ func setupControllerTest(t *testing.T) (*NodebController, *mocks.RnibReaderMock, rnibDataService := services.NewRnibDataService(log, config, readerMock, writerMock) rmrSender := getRmrSender(rmrMessengerMock, log) ranSetupManager := managers.NewRanSetupManager(log, rmrSender, rnibDataService) - e2tInstancesManager := managers.NewE2TInstancesManager(rnibDataService, log) + 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") @@ -98,64 +98,71 @@ func TestX2SetupInvalidBody(t *testing.T) { assert.Equal(t, e2managererrors.NewInvalidJsonError().Code, errorResponse.Code) } -//func TestX2SetupSuccess(t *testing.T) { -// -// controller, readerMock, writerMock, rmrMessengerMock := setupControllerTest(t) -// -// ranName := "test" -// nb := &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST} -// readerMock.On("GetNodeb", ranName).Return(nb, 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) -// -// payload := e2pdus.PackedX2setupRequest -// var xAction[]byte -// msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ranName, &payload, &xAction) -// -// rmrMessengerMock.On("SendMsg", mock.Anything).Return(msg, nil) -// -// header := http.Header{} -// header.Set("Content-Type", "application/json") -// httpRequest := tests.GetHttpRequest() -// httpRequest.Header = header -// -// writer := httptest.NewRecorder() -// controller.X2Setup(writer, httpRequest) -// -// assert.Equal(t, http.StatusNoContent, writer.Result().StatusCode) -//} -// -//func TestEndcSetupSuccess(t *testing.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} -// readerMock.On("GetNodeb", ranName).Return(nb, 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) -// -// payload := e2pdus.PackedEndcX2setupRequest -// 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) -// -// header := http.Header{} -// header.Set("Content-Type", "application/json") -// httpRequest := tests.GetHttpRequest() -// httpRequest.Header = header -// -// writer := httptest.NewRecorder() -// controller.EndcSetup(writer, httpRequest) -// -// assert.Equal(t, http.StatusNoContent, writer.Result().StatusCode) -//} +func TestX2SetupSuccess(t *testing.T) { + + controller, readerMock, writerMock, rmrMessengerMock, _ := setupControllerTest(t) + + ranName := "test" + 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 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 + var xAction []byte + msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ranName, &payload, &xAction) + + rmrMessengerMock.On("SendMsg", mock.Anything).Return(msg, nil) + + header := http.Header{} + header.Set("Content-Type", "application/json") + httpRequest := tests.GetHttpRequest() + httpRequest.Header = header + + writer := httptest.NewRecorder() + controller.X2Setup(writer, httpRequest) + + assert.Equal(t, http.StatusNoContent, writer.Result().StatusCode) +} + + +func TestEndcSetupSuccess(t *testing.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, 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 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 + 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) + + header := http.Header{} + header.Set("Content-Type", "application/json") + httpRequest := tests.GetHttpRequest() + httpRequest.Header = header + + writer := httptest.NewRecorder() + controller.EndcSetup(writer, httpRequest) + + assert.Equal(t, http.StatusNoContent, writer.Result().StatusCode) +} func TestShutdownHandlerRnibError(t *testing.T) { - controller, readerMock, _, _ := setupControllerTest(t) + controller, readerMock, _, _, _ := setupControllerTest(t) rnibErr := &common.ResourceNotFoundError{} var nbIdentityList []*entities.NbIdentity @@ -172,7 +179,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) @@ -184,7 +191,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) @@ -281,7 +288,7 @@ func TestControllerGetNodebIdListInternal(t *testing.T) { } func TestHeaderValidationFailed(t *testing.T) { - controller, _, _, _ := setupControllerTest(t) + controller, _, _, _, _ := setupControllerTest(t) writer := httptest.NewRecorder() @@ -298,7 +305,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{} @@ -311,7 +318,7 @@ func TestShutdownStatusNoContent(t *testing.T) { } func TestHandleInternalError(t *testing.T) { - controller, _, _, _ := setupControllerTest(t) + controller, _, _, _, _ := setupControllerTest(t) writer := httptest.NewRecorder() err := e2managererrors.NewInternalError() @@ -325,7 +332,7 @@ func TestHandleInternalError(t *testing.T) { } func TestHandleCommandAlreadyInProgressError(t *testing.T) { - controller, _, _, _ := setupControllerTest(t) + controller, _, _, _, _ := setupControllerTest(t) writer := httptest.NewRecorder() err := e2managererrors.NewCommandAlreadyInProgressError() @@ -337,8 +344,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") @@ -368,11 +389,11 @@ 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} - var xAction[]byte + var xAction []byte msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_RESET, len(payload), ranName, &payload, &xAction) rmrMessengerMock.On("SendMsg", msg, mock.Anything).Return(msg, nil) @@ -393,12 +414,12 @@ 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} - var xAction[]byte + var xAction []byte msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_RESET, len(payload), ranName, &payload, &xAction) rmrMessengerMock.On("SendMsg", msg).Return(msg, nil) @@ -418,7 +439,7 @@ func TestX2ResetHandleSuccessfulRequestedDefault(t *testing.T) { } func TestX2ResetHandleFailureInvalidBody(t *testing.T) { - controller, _, _, _ := setupControllerTest(t) + controller, _, _, _ , _:= setupControllerTest(t) ranName := "test1" @@ -435,7 +456,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) diff --git a/E2Manager/e2managererrors/e2t_instance_absence_error.go b/E2Manager/e2managererrors/e2t_instance_absence_error.go new file mode 100644 index 0000000..772d62a --- /dev/null +++ b/E2Manager/e2managererrors/e2t_instance_absence_error.go @@ -0,0 +1,35 @@ +// +// Copyright 2019 AT&T Intellectual Property +// Copyright 2019 Nokia +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// 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. +// + +package e2managererrors + +type E2TInstanceAbsenceError struct { + *BaseError +} + +func NewE2TInstanceAbsenceError() *E2TInstanceAbsenceError { + return &E2TInstanceAbsenceError{ + &BaseError{ + Code: 510, + Message: "The New RAN can't be added, please try later.", + }, + } +} + +func (e *E2TInstanceAbsenceError) Error() string { + return e.Message +} diff --git a/E2Manager/handlers/httpmsghandlers/setup_request_handler.go b/E2Manager/handlers/httpmsghandlers/setup_request_handler.go index a62b185..981e9c6 100644 --- a/E2Manager/handlers/httpmsghandlers/setup_request_handler.go +++ b/E2Manager/handlers/httpmsghandlers/setup_request_handler.go @@ -36,13 +36,13 @@ const ( type SetupRequestHandler struct { rNibDataService services.RNibDataService logger *logger.Logger - ranSetupManager *managers.RanSetupManager + ranSetupManager managers.IRanSetupManager protocol entities.E2ApplicationProtocol e2tInstancesManager managers.IE2TInstancesManager } func NewSetupRequestHandler(logger *logger.Logger, rNibDataService services.RNibDataService, - ranSetupManager *managers.RanSetupManager, protocol entities.E2ApplicationProtocol, e2tInstancesManager managers.IE2TInstancesManager) *SetupRequestHandler { + ranSetupManager managers.IRanSetupManager, protocol entities.E2ApplicationProtocol, e2tInstancesManager managers.IE2TInstancesManager) *SetupRequestHandler { return &SetupRequestHandler{ logger: logger, rNibDataService: rNibDataService, @@ -52,35 +52,40 @@ func NewSetupRequestHandler(logger *logger.Logger, rNibDataService services.RNib } } -func (handler *SetupRequestHandler) Handle(request models.Request) (models.IResponse, error) { +func (h *SetupRequestHandler) Handle(request models.Request) (models.IResponse, error) { setupRequest := request.(models.SetupRequest) - err := handler.validateRequestDetails(setupRequest) + err := h.validateRequestDetails(setupRequest) if err != nil { return nil, err } - nodebInfo, err := handler.rNibDataService.GetNodeb(setupRequest.RanName) + nodebInfo, err := h.rNibDataService.GetNodeb(setupRequest.RanName) if err != nil { _, ok := err.(*common.ResourceNotFoundError) if !ok { - handler.logger.Errorf("#SetupRequestHandler.Handle - failed to get nodeB entity for ran name: %v from RNIB. Error: %s", - setupRequest.RanName, err.Error()) + h.logger.Errorf("#SetupRequestHandler.Handle - failed to get nodeB entity for ran name: %v from RNIB. Error: %s", setupRequest.RanName, err) return nil, e2managererrors.NewRnibDbError() } - result := handler.connectNewRan(&setupRequest, handler.protocol) + result := h.connectNewRan(&setupRequest, h.protocol) + return nil, result + } + + if nodebInfo.ConnectionStatus == entities.ConnectionStatus_SHUTTING_DOWN { + h.logger.Errorf("#SetupRequestHandler.connectExistingRanWithAssociatedE2TAddress - RAN: %s in wrong state (%s)", nodebInfo.RanName, entities.ConnectionStatus_name[int32(nodebInfo.ConnectionStatus)]) + result := e2managererrors.NewWrongStateError(h.getActivityName(h.protocol), entities.ConnectionStatus_name[int32(nodebInfo.ConnectionStatus)]) return nil, result } if len(nodebInfo.AssociatedE2TInstanceAddress) != 0 { - result := handler.connectExistingRanWithAssociatedE2TAddress(nodebInfo) + result := h.connectExistingRanWithAssociatedE2TAddress(nodebInfo) return nil, result } - result := handler.connectExistingRanWithoutAssociatedE2TAddress(nodebInfo) + result := h.connectExistingRanWithoutAssociatedE2TAddress(nodebInfo) return nil, result } @@ -107,7 +112,21 @@ func (h *SetupRequestHandler) connectExistingRanWithoutAssociatedE2TAddress(node e2tAddress, err := h.e2tInstancesManager.SelectE2TInstance() if err != nil { - //TODO: handle + h.logger.Errorf("#SetupRequestHandler.connectExistingRanWithoutAssociatedE2TAddress - RAN name: %s - failed selecting E2T instance", nodebInfo.RanName) + + // TODO: reset connection attempts? + + if nodebInfo.ConnectionStatus == entities.ConnectionStatus_DISCONNECTED { + return err + } + + nodebInfo.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED + updateError := h.rNibDataService.UpdateNodebInfo(nodebInfo) + + if updateError != nil { + h.logger.Errorf("#SetupRequestHandler.connectExistingRanWithoutAssociatedE2TAddress - RAN name: %s - failed updating nodeb. error: %s", nodebInfo.RanName, updateError) + } + return err } @@ -115,7 +134,7 @@ func (h *SetupRequestHandler) connectExistingRanWithoutAssociatedE2TAddress(node if err != nil { h.logger.Errorf("#SetupRequestHandler.connectExistingRanWithoutAssociatedE2TAddress - RAN name: %s - failed associating ran to e2t address %s. error: %s", nodebInfo.RanName, e2tAddress, err) - return e2managererrors.NewRnibDbError() + return err } nodebInfo.AssociatedE2TInstanceAddress = e2tAddress @@ -135,19 +154,11 @@ func (h *SetupRequestHandler) connectExistingRanWithoutAssociatedE2TAddress(node } func (h *SetupRequestHandler) connectExistingRanWithAssociatedE2TAddress(nodebInfo *entities.NodebInfo) error { - - if nodebInfo.ConnectionStatus == entities.ConnectionStatus_SHUTTING_DOWN { - h.logger.Errorf("#SetupRequestHandler.connectExistingRanWithAssociatedE2TAddress - RAN: %s in wrong state (%s)", nodebInfo.RanName, entities.ConnectionStatus_name[int32(nodebInfo.ConnectionStatus)]) - return e2managererrors.NewWrongStateError(h.getActivityName(h.protocol), entities.ConnectionStatus_name[int32(nodebInfo.ConnectionStatus)]) - } - status := entities.ConnectionStatus_CONNECTING if nodebInfo.ConnectionStatus == entities.ConnectionStatus_CONNECTED { status = nodebInfo.ConnectionStatus } - nodebInfo.ConnectionAttempts = 0 - err := h.rNibDataService.UpdateNodebInfo(nodebInfo) if err != nil { @@ -157,6 +168,7 @@ func (h *SetupRequestHandler) connectExistingRanWithAssociatedE2TAddress(nodebIn h.logger.Infof("#SetupRequestHandler.connectExistingRanWithAssociatedE2TAddress - RAN name: %s - successfully updated nodeb in rNib", nodebInfo.RanName) + result := h.ranSetupManager.ExecuteSetup(nodebInfo, status) return result } @@ -166,7 +178,7 @@ func (h *SetupRequestHandler) connectNewRan(request *models.SetupRequest, protoc e2tAddress, err := h.e2tInstancesManager.SelectE2TInstance() if err != nil { - //TODO: handle + h.logger.Errorf("#SetupRequestHandler.connectNewRan - RAN name: %s - failed selecting E2T instance", request.RanName) return err } @@ -174,7 +186,7 @@ func (h *SetupRequestHandler) connectNewRan(request *models.SetupRequest, protoc if err != nil { h.logger.Errorf("#SetupRequestHandler.connectNewRan - RAN name: %s - failed associating ran to e2t address %s. error: %s", request.RanName, e2tAddress, err) - return e2managererrors.NewRnibDbError() + return err } nodebInfo, nodebIdentity := createInitialNodeInfo(request, protocol, e2tAddress) diff --git a/E2Manager/handlers/httpmsghandlers/setup_request_handler_test.go b/E2Manager/handlers/httpmsghandlers/setup_request_handler_test.go index 5057c01..5556eb1 100644 --- a/E2Manager/handlers/httpmsghandlers/setup_request_handler_test.go +++ b/E2Manager/handlers/httpmsghandlers/setup_request_handler_test.go @@ -19,295 +19,323 @@ package httpmsghandlers import ( "e2mgr/configuration" "e2mgr/e2managererrors" - "e2mgr/managers" "e2mgr/mocks" "e2mgr/models" "e2mgr/services" + "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" - "reflect" + "github.com/stretchr/testify/assert" "testing" ) -//func TestSetupHandleNewRanSave_Error(t *testing.T) { -// readerMock, writerMock, handler, rmrMessengerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST) -// -// ranName := "RanName" -// rnibErr := &common.ResourceNotFoundError{} -// sr := models.SetupRequest{"127.0.0.1", 8080, ranName,} -// -// nb := &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST} -// readerMock.On("GetNodeb", ranName).Return(nb, rnibErr) -// -// vErr := &common.ValidationError{} -// updatedNb, _ := createInitialNodeInfo(&sr, entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST) -// writerMock.On("SaveNodeb", mock.Anything, updatedNb).Return(vErr) -// -// var nbUpdated = &entities.NodebInfo{RanName: ranName, Ip: sr.RanIp, Port: uint32(sr.RanPort), ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST, ConnectionAttempts: 1} -// writerMock.On("UpdateNodebInfo", nbUpdated).Return(nil) -// -// payload := e2pdus.PackedEndcX2setupRequest -// xaction := []byte(ranName) -// msg := rmrCgo.NewMBuf(rmrCgo.RIC_ENDC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction) -// -// rmrMessengerMock.On("SendMsg", mock.Anything).Return(msg, nil) -// -// _, actual := handler.Handle(sr) -// expected := &e2managererrors.RnibDbError{} -// -// if reflect.TypeOf(actual) != reflect.TypeOf(expected) { -// t.Errorf("Error actual = %v, and Expected = %v.", actual, expected) -// } -// -// writerMock.AssertNumberOfCalls(t, "SaveNodeb", 1) -// writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 0) -// rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 0) -//} -// -//func TestSetupHandleNewRan_Success(t *testing.T) { -// readerMock, writerMock, handler, rmrMessengerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST) -// -// ranName := "RanName" -// rnibErr := &common.ResourceNotFoundError{} -// sr := models.SetupRequest{"127.0.0.1", 8080, ranName,} -// -// nb := &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST} -// readerMock.On("GetNodeb", ranName).Return(nb, rnibErr) -// -// updatedNb, _ := createInitialNodeInfo(&sr, entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST) -// writerMock.On("SaveNodeb", mock.Anything, updatedNb).Return(nil) -// -// var nbUpdated = &entities.NodebInfo{RanName: ranName, Ip: sr.RanIp, Port: uint32(sr.RanPort), ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST, ConnectionAttempts: 1} -// writerMock.On("UpdateNodebInfo", nbUpdated).Return(nil) -// -// payload := e2pdus.PackedEndcX2setupRequest -// xaction := []byte(ranName) -// msg := rmrCgo.NewMBuf(rmrCgo.RIC_ENDC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction) -// -// rmrMessengerMock.On("SendMsg", mock.Anything).Return(msg, nil) -// -// _, actual := handler.Handle(sr) -// -// assert.Nil(t, actual) -// -// writerMock.AssertNumberOfCalls(t, "SaveNodeb", 1) -// writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 1) -// rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 1) -//} +const E2TAddress = "10.0.2.15:8989" +const RanName = "test" -//func TestEndcSetupHandleRmr_Error(t *testing.T) { -// readerMock, writerMock, handler, rmrMessengerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST) -// -// ranName := "RanName" -// nb := &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST} -// readerMock.On("GetNodeb", ranName).Return(nb, 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 nbDisconnected = &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST, ConnectionAttempts: 0} -// writerMock.On("UpdateNodebInfo", nbDisconnected).Return(nil) -// -// payload := e2pdus.PackedEndcX2setupRequest -// xaction := []byte(ranName) -// msg := rmrCgo.NewMBuf(rmrCgo.RIC_ENDC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction) -// -// rmrErr := &e2managererrors.RmrError{} -// rmrMessengerMock.On("SendMsg", mock.Anything).Return(msg, rmrErr) -// -// sr := models.SetupRequest{"127.0.0.1", 8080, ranName,} -// _, actual := handler.Handle(sr) -// -// if reflect.TypeOf(actual) != reflect.TypeOf(rmrErr) { -// t.Errorf("Error actual = %v, and Expected = %v.", actual, rmrErr) -// } -// -// writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 2) -// rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 1) -//} +func initSetupRequestTest(t *testing.T, protocol entities.E2ApplicationProtocol) (*mocks.RnibReaderMock, *mocks.RnibWriterMock, *SetupRequestHandler, *mocks.E2TInstancesManagerMock, *mocks.RanSetupManagerMock) { + log := initLog(t) + config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3} -//func TestEndcSetupHandleExistingDisconnectedRan_Success(t *testing.T) { -// readerMock, writerMock, handler, rmrMessengerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST) -// -// ranName := "RanName" -// nb := &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST} -// readerMock.On("GetNodeb", ranName).Return(nb, 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) -// -// payload := e2pdus.PackedEndcX2setupRequest -// xaction := []byte(ranName) -// msg := rmrCgo.NewMBuf(rmrCgo.RIC_ENDC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction) -// -// rmrMessengerMock.On("SendMsg", mock.Anything).Return(msg, nil) -// -// sr := models.SetupRequest{"127.0.0.1", 8080, ranName,} -// _, actual := handler.Handle(sr) -// -// assert.Nil(t, actual) -// -// writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 1) -// rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 1) -//} + readerMock := &mocks.RnibReaderMock{} + writerMock := &mocks.RnibWriterMock{} -//func TestX2SetupHandleExistingConnectedRan_Success(t *testing.T) { -// readerMock, writerMock, handler, rmrMessengerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) -// -// ranName := "RanName" -// nb := &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST} -// readerMock.On("GetNodeb", ranName).Return(nb, nil) -// -// var nbUpdated = &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1} -// writerMock.On("UpdateNodebInfo", nbUpdated).Return(nil) -// -// payload := e2pdus.PackedX2setupRequest -// xaction := []byte(ranName) -// msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction) -// -// rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(msg, nil) -// -// sr := models.SetupRequest{"127.0.0.1", 8080, ranName,} -// _, actual := handler.Handle(sr) -// -// assert.Nil(t, actual) -// -// writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 1) -// rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 1) -//} + rnibDataService := services.NewRnibDataService(log, config, readerMock, writerMock) -func TestX2SetupHandleRnibGet_Error(t *testing.T) { - readerMock, _, handler, rmrMessengerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) + ranSetupManagerMock := &mocks.RanSetupManagerMock{} + e2tInstancesManagerMock := &mocks.E2TInstancesManagerMock{} + handler := NewSetupRequestHandler(log, rnibDataService, ranSetupManagerMock, protocol, e2tInstancesManagerMock) - rnibErr := &common.ValidationError{} - nb := &entities.NodebInfo{RanName: "RanName", ConnectionStatus: entities.ConnectionStatus_SHUTTING_DOWN,} - readerMock.On("GetNodeb", "RanName").Return(nb, rnibErr) + return readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock +} - sr := models.SetupRequest{"127.0.0.1", 8080, "RanName",} - _, actual := handler.Handle(sr) +func TestX2SetupHandleNoPortError(t *testing.T) { + readerMock, _, handler, _, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) - expected := &e2managererrors.RnibDbError{} - if reflect.TypeOf(actual) != reflect.TypeOf(expected) { - t.Errorf("Error actual = %v, and Expected = %v.", actual, expected) - } - rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 0) + sr := models.SetupRequest{"127.0.0.1", 0, RanName,} + _, err := handler.Handle(sr) + assert.IsType(t, &e2managererrors.RequestValidationError{}, err) + readerMock.AssertNotCalled(t, "GetNodeb") } -//func TestEndcSetupHandleShuttingDownRan_Error(t *testing.T) { -// readerMock, writerMock, handler, rmrMessengerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST) -// -// nb := &entities.NodebInfo{RanName: "RanName", ConnectionStatus: entities.ConnectionStatus_SHUTTING_DOWN,} -// readerMock.On("GetNodeb", "RanName").Return(nb, nil) -// -// sr := models.SetupRequest{"127.0.0.1", 8080, "RanName",} -// _, actual := handler.Handle(sr) -// -// expected := &e2managererrors.WrongStateError{} -// if reflect.TypeOf(actual) != reflect.TypeOf(expected) { -// t.Errorf("Error actual = %v, and Expected = %v.", actual, expected) -// } -// writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 0) -// rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 0) -//} - -//func TestX2SetupHandleShuttingDownRan_Error(t *testing.T) { -// readerMock, writerMock, handler, rmrMessengerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) -// -// nb := &entities.NodebInfo{RanName: "RanName", ConnectionStatus: entities.ConnectionStatus_SHUTTING_DOWN,} -// readerMock.On("GetNodeb", "RanName").Return(nb, nil) -// -// sr := models.SetupRequest{"127.0.0.1", 8080, "RanName",} -// _, actual := handler.Handle(sr) -// -// expected := &e2managererrors.WrongStateError{} -// if reflect.TypeOf(actual) != reflect.TypeOf(expected) { -// t.Errorf("Error actual = %v, and Expected = %v.", actual, expected) -// } -// writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 0) -// rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 0) -//} - -func TestX2SetupHandleNoPort_Error(t *testing.T) { - _, writerMock, handler, rmrMessengerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) - - sr := models.SetupRequest{"127.0.0.1", 0, "RanName",} - _, actual := handler.Handle(sr) - - expected := &e2managererrors.RequestValidationError{} - if reflect.TypeOf(actual) != reflect.TypeOf(expected) { - t.Errorf("Error actual = %v, and Expected = %v.", actual, expected) - } - writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 0) - rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 0) +func TestX2SetupHandleNoRanNameError(t *testing.T) { + readerMock, _, handler, _, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) + + sr := models.SetupRequest{RanPort: 8080, RanIp: "127.0.0.1"} + _, err := handler.Handle(sr) + assert.IsType(t, &e2managererrors.RequestValidationError{}, err) + readerMock.AssertNotCalled(t, "GetNodeb") } -func TestX2SetupHandleNoRanName_Error(t *testing.T) { - _, writerMock, handler, rmrMessengerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) +func TestX2SetupHandleNoIpError(t *testing.T) { + readerMock, _, handler, _, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) - sr := models.SetupRequest{} - sr.RanPort = 8080 - sr.RanIp = "127.0.0.1" + sr := models.SetupRequest{RanPort: 8080, RanName: RanName} + _, err := handler.Handle(sr) + assert.IsType(t, &e2managererrors.RequestValidationError{}, err) + readerMock.AssertNotCalled(t, "GetNodeb") +} - _, actual := handler.Handle(sr) +func TestX2SetupHandleInvalidIpError(t *testing.T) { + readerMock, _, handler, _, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) - expected := &e2managererrors.RequestValidationError{} - if reflect.TypeOf(actual) != reflect.TypeOf(expected) { - t.Errorf("Error actual = %v, and Expected = %v.", actual, expected) - } - writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 0) - rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 0) + sr := models.SetupRequest{RanPort: 8080, RanName: RanName, RanIp: "invalid ip"} + _, err := handler.Handle(sr) + assert.IsType(t, &e2managererrors.RequestValidationError{}, err) + readerMock.AssertNotCalled(t, "GetNodeb") } -func TestX2SetupHandleNoIP_Error(t *testing.T) { - _, writerMock, handler, rmrMessengerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) +func TestX2SetupHandleGetNodebFailure(t *testing.T) { + readerMock, _, handler, _, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) - sr := models.SetupRequest{} - sr.RanPort = 8080 - sr.RanName = "RanName" + rnibErr := &common.ValidationError{} + nb := &entities.NodebInfo{RanName: RanName, ConnectionStatus: entities.ConnectionStatus_SHUTTING_DOWN,} + readerMock.On("GetNodeb", RanName).Return(nb, rnibErr) - _, actual := handler.Handle(sr) + sr := models.SetupRequest{"127.0.0.1", 8080, RanName,} + _, err := handler.Handle(sr) + assert.IsType(t, &e2managererrors.RnibDbError{}, err) +} - expected := &e2managererrors.RequestValidationError{} - if reflect.TypeOf(actual) != reflect.TypeOf(expected) { - t.Errorf("Error actual = %v, and Expected = %v.", actual, expected) - } - writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 0) - rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 0) +func TestSetupNewRanSelectE2TInstancesDbError(t *testing.T) { + readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) + readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{}, common.NewResourceNotFoundError("")) + e2tInstancesManagerMock.On("SelectE2TInstance").Return("", e2managererrors.NewRnibDbError()) + _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,}) + assert.IsType(t, &e2managererrors.RnibDbError{}, err) + e2tInstancesManagerMock.AssertNotCalled(t, "AssociateRan") + writerMock.AssertNotCalled(t, "SaveNodeb") + ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup") } -func TestX2SetupHandleInvalidIp_Error(t *testing.T) { - _, writerMock, handler, rmrMessengerMock, _ := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) +func TestSetupNewRanSelectE2TInstancesNoInstances(t *testing.T) { + readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) + readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{}, common.NewResourceNotFoundError("")) + e2tInstancesManagerMock.On("SelectE2TInstance").Return("", e2managererrors.NewE2TInstanceAbsenceError()) + _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,}) + assert.IsType(t, &e2managererrors.E2TInstanceAbsenceError{}, err) + e2tInstancesManagerMock.AssertNotCalled(t, "AssociateRan") + writerMock.AssertNotCalled(t, "SaveNodeb") + ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup") +} - sr := models.SetupRequest{} - sr.RanPort = 8080 - sr.RanName = "RanName" - sr.RanIp = "invalid ip" +func TestSetupNewRanAssociateRanFailure(t *testing.T) { + readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) + readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{}, common.NewResourceNotFoundError("")) + e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil) + e2tInstancesManagerMock.On("AssociateRan", RanName, E2TAddress).Return(e2managererrors.NewRnibDbError()) + _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,}) + assert.IsType(t, &e2managererrors.RnibDbError{}, err) + writerMock.AssertNotCalled(t, "SaveNodeb") + ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup") +} - _, actual := handler.Handle(sr) +func TestSetupNewRanSaveNodebFailure(t *testing.T) { + readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) + readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{}, common.NewResourceNotFoundError("")) + e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil) + e2tInstancesManagerMock.On("AssociateRan", RanName, E2TAddress).Return(nil) + setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,} + nodebInfo, nbIdentity := createInitialNodeInfo(&setupRequest, entities.E2ApplicationProtocol_X2_SETUP_REQUEST, E2TAddress) + writerMock.On("SaveNodeb", nbIdentity, nodebInfo).Return(common.NewInternalError(fmt.Errorf(""))) + _, err := handler.Handle(setupRequest) + assert.IsType(t, &e2managererrors.RnibDbError{}, err) + ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup") +} - expected := &e2managererrors.RequestValidationError{} - if reflect.TypeOf(actual) != reflect.TypeOf(expected) { - t.Errorf("Error actual = %v, and Expected = %v.", actual, expected) - } - writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 0) - rmrMessengerMock.AssertNumberOfCalls(t, "SendMsg", 0) +func TestSetupNewRanSetupDbError(t *testing.T) { + readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) + readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{}, common.NewResourceNotFoundError("")) + e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil) + e2tInstancesManagerMock.On("AssociateRan", RanName, E2TAddress).Return(nil) + setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,} + nodebInfo, nbIdentity := createInitialNodeInfo(&setupRequest, entities.E2ApplicationProtocol_X2_SETUP_REQUEST, E2TAddress) + writerMock.On("SaveNodeb", nbIdentity, nodebInfo).Return(nil) + ranSetupManagerMock.On("ExecuteSetup", nodebInfo, entities.ConnectionStatus_CONNECTING).Return(e2managererrors.NewRnibDbError()) + _, err := handler.Handle(setupRequest) + assert.IsType(t, &e2managererrors.RnibDbError{}, err) } -func initSetupRequestTest(t *testing.T, protocol entities.E2ApplicationProtocol) (*mocks.RnibReaderMock, *mocks.RnibWriterMock, *SetupRequestHandler, *mocks.RmrMessengerMock, *mocks.E2TInstancesManagerMock) { - log := initLog(t) - config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3} +func TestSetupNewRanSetupRmrError(t *testing.T) { + readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) + readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{}, common.NewResourceNotFoundError("")) + e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil) + e2tInstancesManagerMock.On("AssociateRan", RanName, E2TAddress).Return(nil) + setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,} + nodebInfo, nbIdentity := createInitialNodeInfo(&setupRequest, entities.E2ApplicationProtocol_X2_SETUP_REQUEST, E2TAddress) + writerMock.On("SaveNodeb", nbIdentity, nodebInfo).Return(nil) + ranSetupManagerMock.On("ExecuteSetup", nodebInfo, entities.ConnectionStatus_CONNECTING).Return(e2managererrors.NewRmrError()) + _, err := handler.Handle(setupRequest) + assert.IsType(t, &e2managererrors.RmrError{}, err) +} - readerMock := &mocks.RnibReaderMock{} - writerMock := &mocks.RnibWriterMock{} +func TestSetupNewRanSetupSuccess(t *testing.T) { + readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) + readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{}, common.NewResourceNotFoundError("")) + e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil) + e2tInstancesManagerMock.On("AssociateRan", RanName, E2TAddress).Return(nil) + setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,} + nodebInfo, nbIdentity := createInitialNodeInfo(&setupRequest, entities.E2ApplicationProtocol_X2_SETUP_REQUEST, E2TAddress) + writerMock.On("SaveNodeb", nbIdentity, nodebInfo).Return(nil) + ranSetupManagerMock.On("ExecuteSetup", nodebInfo, entities.ConnectionStatus_CONNECTING).Return(nil) + _, err := handler.Handle(setupRequest) + assert.Nil(t, err) +} - rmrMessengerMock := &mocks.RmrMessengerMock{} - rmrSender := getRmrSender(rmrMessengerMock, log) +func TestX2SetupExistingRanShuttingDown(t *testing.T) { + readerMock, _, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) + readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{RanName: RanName, ConnectionStatus: entities.ConnectionStatus_SHUTTING_DOWN}, nil) + setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,} + _, err := handler.Handle(setupRequest) + assert.IsType(t, &e2managererrors.WrongStateError{}, err) + e2tInstancesManagerMock.AssertNotCalled(t, "SelectE2TInstance") + ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup") +} - rnibDataService := services.NewRnibDataService(log, config, readerMock, writerMock) +func TestEndcSetupExistingRanShuttingDown(t *testing.T) { + readerMock, _, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST) + readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{RanName: RanName, ConnectionStatus: entities.ConnectionStatus_SHUTTING_DOWN}, nil) + setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,} + _, err := handler.Handle(setupRequest) + assert.IsType(t, &e2managererrors.WrongStateError{}, err) + e2tInstancesManagerMock.AssertNotCalled(t, "SelectE2TInstance") + ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup") +} - ranSetupManager := managers.NewRanSetupManager(log, rmrSender, rnibDataService) - e2tInstancesManager := &mocks.E2TInstancesManagerMock{} - handler := NewSetupRequestHandler(log, rnibDataService, ranSetupManager, protocol, e2tInstancesManager) +func TestSetupExistingRanWithoutAssocE2TInstanceSelectDbError(t *testing.T) { + readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) + nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress:""} + readerMock.On("GetNodeb", RanName).Return(nb , nil) + e2tInstancesManagerMock.On("SelectE2TInstance").Return("", e2managererrors.NewRnibDbError()) + updatedNb := *nb + updatedNb.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED + writerMock.On("UpdateNodebInfo", &updatedNb).Return(nil) + setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,} + _, err := handler.Handle(setupRequest) + assert.IsType(t, &e2managererrors.RnibDbError{}, err) + ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup") +} - return readerMock, writerMock, handler, rmrMessengerMock, e2tInstancesManager +func TestSetupExistingRanWithoutAssocE2TInstanceSelectNoInstanceError(t *testing.T) { + readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) + nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress:""} + readerMock.On("GetNodeb", RanName).Return(nb , nil) + e2tInstancesManagerMock.On("SelectE2TInstance").Return("", e2managererrors.NewE2TInstanceAbsenceError()) + updatedNb := *nb + updatedNb.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED + writerMock.On("UpdateNodebInfo", &updatedNb).Return(nil) + setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,} + _, err := handler.Handle(setupRequest) + assert.IsType(t, &e2managererrors.E2TInstanceAbsenceError{}, err) + ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup") } + +func TestSetupExistingRanWithoutAssocE2TInstanceSelectNoInstanceErrorUpdateFailure(t *testing.T) { + readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) + nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress:""} + readerMock.On("GetNodeb", RanName).Return(nb , nil) + e2tInstancesManagerMock.On("SelectE2TInstance").Return("", e2managererrors.NewE2TInstanceAbsenceError()) + updatedNb := *nb + updatedNb.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED + writerMock.On("UpdateNodebInfo", &updatedNb).Return(common.NewInternalError(fmt.Errorf(""))) + setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,} + _, err := handler.Handle(setupRequest) + assert.IsType(t, &e2managererrors.E2TInstanceAbsenceError{}, err) + ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup") +} + +func TestSetupExistingRanWithoutAssocE2TInstanceSelectErrorDisconnected(t *testing.T) { + readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) + nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress:"", ConnectionStatus:entities.ConnectionStatus_DISCONNECTED} + readerMock.On("GetNodeb", RanName).Return(nb , nil) + e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, e2managererrors.NewE2TInstanceAbsenceError()) + setupRequest := models.SetupRequest{"127.0.0.1", 8080, RanName,} + _, err := handler.Handle(setupRequest) + assert.IsType(t, &e2managererrors.E2TInstanceAbsenceError{}, err) + writerMock.AssertNotCalled(t, "UpdateNodebInfo") + ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup") +} + +func TestSetupExistingRanWithoutAssocE2TInstanceAssociateRanFailure(t *testing.T) { + readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) + nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress:""} + readerMock.On("GetNodeb", RanName).Return(nb , nil) + e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil) + e2tInstancesManagerMock.On("AssociateRan", RanName, E2TAddress).Return(e2managererrors.NewRnibDbError()) + _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,}) + assert.IsType(t, &e2managererrors.RnibDbError{}, err) + writerMock.AssertNotCalled(t, "UpdateNodebInfo") + ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup") +} + +func TestSetupExistingRanWithoutAssocE2TInstanceAssociateRanSucceedsUpdateNodebFails(t *testing.T) { + readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) + nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress:""} + readerMock.On("GetNodeb", RanName).Return(nb , nil) + e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil) + e2tInstancesManagerMock.On("AssociateRan", RanName, E2TAddress).Return(nil) + updatedNb := *nb + updatedNb.AssociatedE2TInstanceAddress = E2TAddress + updatedNb.ConnectionAttempts = 0 + writerMock.On("UpdateNodebInfo", &updatedNb).Return(common.NewInternalError(fmt.Errorf(""))) + _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,}) + assert.IsType(t, &e2managererrors.RnibDbError{}, err) + ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup") +} + +func TestSetupExistingRanWithoutAssocE2TInstanceExecuteSetupFailure(t *testing.T) { + readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) + nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress:""} + readerMock.On("GetNodeb", RanName).Return(nb , nil) + e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil) + e2tInstancesManagerMock.On("AssociateRan", RanName, E2TAddress).Return(nil) + updatedNb := *nb + updatedNb.AssociatedE2TInstanceAddress = E2TAddress + updatedNb.ConnectionAttempts = 0 + writerMock.On("UpdateNodebInfo", &updatedNb).Return(nil) + ranSetupManagerMock.On("ExecuteSetup", &updatedNb, entities.ConnectionStatus_CONNECTING).Return(e2managererrors.NewRnibDbError()) + _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,}) + assert.IsType(t, &e2managererrors.RnibDbError{}, err) +} + +func TestSetupExistingRanWithoutAssocE2TInstanceSuccess(t *testing.T) { + readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) + nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress:""} + readerMock.On("GetNodeb", RanName).Return(nb , nil) + e2tInstancesManagerMock.On("SelectE2TInstance").Return(E2TAddress, nil) + e2tInstancesManagerMock.On("AssociateRan", RanName, E2TAddress).Return(nil) + updatedNb := *nb + updatedNb.AssociatedE2TInstanceAddress = E2TAddress + updatedNb.ConnectionAttempts = 0 + writerMock.On("UpdateNodebInfo", &updatedNb).Return(nil) + ranSetupManagerMock.On("ExecuteSetup", &updatedNb, entities.ConnectionStatus_CONNECTING).Return(nil) + _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,}) + assert.Nil(t, err) +} + +func TestSetupExistingRanWithAssocE2TInstanceUpdateNodebFailure(t *testing.T) { + readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) + nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress:E2TAddress} + readerMock.On("GetNodeb", RanName).Return(nb , nil) + updatedNb := *nb + updatedNb.ConnectionAttempts = 0 + writerMock.On("UpdateNodebInfo", &updatedNb).Return(common.NewInternalError(fmt.Errorf(""))) + _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,}) + assert.IsType(t, &e2managererrors.RnibDbError{}, err) + e2tInstancesManagerMock.AssertNotCalled(t, "SelectE2TInstance") + e2tInstancesManagerMock.AssertNotCalled(t, "AssociateRan") + ranSetupManagerMock.AssertNotCalled(t, "ExecuteSetup") +} + +func TestSetupExistingConnectedRanWithAssocE2TInstanceSuccess(t *testing.T) { + readerMock, writerMock, handler, e2tInstancesManagerMock, ranSetupManagerMock := initSetupRequestTest(t, entities.E2ApplicationProtocol_X2_SETUP_REQUEST) + nb := &entities.NodebInfo{RanName: RanName, AssociatedE2TInstanceAddress:E2TAddress, ConnectionStatus: entities.ConnectionStatus_CONNECTED} + readerMock.On("GetNodeb", RanName).Return(nb , nil) + updatedNb := *nb + updatedNb.ConnectionAttempts = 0 + writerMock.On("UpdateNodebInfo", &updatedNb).Return(nil) + ranSetupManagerMock.On("ExecuteSetup", &updatedNb, entities.ConnectionStatus_CONNECTED).Return(nil) + _, err := handler.Handle(models.SetupRequest{"127.0.0.1", 8080, RanName,}) + assert.Nil(t, err) + e2tInstancesManagerMock.AssertNotCalled(t, "SelectE2TInstance") + e2tInstancesManagerMock.AssertNotCalled(t, "AssociateRan") +} \ No newline at end of file diff --git a/E2Manager/handlers/rmrmsghandlers/e2_term_init_notification_handler.go b/E2Manager/handlers/rmrmsghandlers/e2_term_init_notification_handler.go index ccb726c..904e34b 100644 --- a/E2Manager/handlers/rmrmsghandlers/e2_term_init_notification_handler.go +++ b/E2Manager/handlers/rmrmsghandlers/e2_term_init_notification_handler.go @@ -56,6 +56,11 @@ func (h E2TermInitNotificationHandler) Handle(request *models.NotificationReques e2tAddress := unmarshalledPayload.Address + if len(e2tAddress) == 0 { + h.logger.Errorf("#E2TermInitNotificationHandler - Empty E2T address received") + return + } + e2tInstance, err := h.e2tInstancesManager.GetE2TInstance(e2tAddress) if err != nil { diff --git a/E2Manager/handlers/rmrmsghandlers/e2_term_init_notification_handler_test.go b/E2Manager/handlers/rmrmsghandlers/e2_term_init_notification_handler_test.go index 5101eae..2cfc6f5 100644 --- a/E2Manager/handlers/rmrmsghandlers/e2_term_init_notification_handler_test.go +++ b/E2Manager/handlers/rmrmsghandlers/e2_term_init_notification_handler_test.go @@ -66,6 +66,13 @@ func TestE2TermInitUnmarshalPayloadFailure(t *testing.T) { e2tInstancesManagerMock.AssertNotCalled(t, "AddE2TInstance") } +func TestE2TermInitEmptyE2TAddress(t *testing.T) { + _, handler, _, _, _, e2tInstancesManagerMock := initRanLostConnectionTest(t) + notificationRequest := &models.NotificationRequest{RanName: RanName, Payload: []byte("{\"address\":\"\"}")} + handler.Handle(notificationRequest) + e2tInstancesManagerMock.AssertNotCalled(t, "GetE2TInstance") + e2tInstancesManagerMock.AssertNotCalled(t, "AddE2TInstance") +} func TestE2TermInitGetE2TInstanceFailure(t *testing.T) { _, handler, _, _, _, e2tInstancesManagerMock := initRanLostConnectionTest(t) diff --git a/E2Manager/managers/e2t_instances_manager.go b/E2Manager/managers/e2t_instances_manager.go index 267c778..c9bca3c 100644 --- a/E2Manager/managers/e2t_instances_manager.go +++ b/E2Manager/managers/e2t_instances_manager.go @@ -1,9 +1,26 @@ +// +// Copyright 2019 AT&T Intellectual Property +// Copyright 2019 Nokia +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// 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. +// + package managers import ( + "e2mgr/e2managererrors" "e2mgr/logger" "e2mgr/services" - "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" "math" @@ -69,7 +86,6 @@ func (m *E2TInstancesManager) GetE2TInstances() ([]*entities.E2TInstance, error) } return e2tInstances, nil - } func findActiveE2TInstanceWithMinimumAssociatedRans(e2tInstances []*entities.E2TInstance) *entities.E2TInstance { @@ -88,11 +104,6 @@ func findActiveE2TInstanceWithMinimumAssociatedRans(e2tInstances []*entities.E2T func (m *E2TInstancesManager) AddE2TInstance(e2tAddress string) error { - if len(e2tAddress) == 0 { - m.logger.Errorf("#AddE2TInstance - Empty E2T address received") - return fmt.Errorf("empty E2T address") - } - e2tInstance := entities.NewE2TInstance(e2tAddress) err := m.rnibDataService.SaveE2TInstance(e2tInstance) @@ -170,21 +181,20 @@ func (m *E2TInstancesManager) SelectE2TInstance() (string, error) { e2tInstances, err := m.GetE2TInstances() if err != nil { - //TODO: handle - return "", err + m.logger.Errorf("#E2TInstancesManager.SelectE2TInstance - failed retrieving E2T instances. error: %s", err) + return "", e2managererrors.NewRnibDbError() } if len(e2tInstances) == 0 { - //TODO: handle - return "", err + m.logger.Errorf("#E2TInstancesManager.SelectE2TInstance - No E2T instance found") + return "", e2managererrors.NewE2TInstanceAbsenceError() } min := findActiveE2TInstanceWithMinimumAssociatedRans(e2tInstances) if min == nil { m.logger.Errorf("#SelectE2TInstance - No active E2T instance found") - //TODO: handle - return "", fmt.Errorf("No active E2T instance found") + return "", e2managererrors.NewE2TInstanceAbsenceError() } return min.Address, nil @@ -199,7 +209,7 @@ func (m *E2TInstancesManager) AssociateRan(ranName string, e2tAddress string) er if err != nil { m.logger.Errorf("#AssociateRan - E2T Instance address: %s - Failed retrieving E2TInstance. error: %s", e2tAddress, err) - return err + return e2managererrors.NewRnibDbError() } e2tInstance.AssociatedRanList = append(e2tInstance.AssociatedRanList, ranName) @@ -208,7 +218,7 @@ func (m *E2TInstancesManager) AssociateRan(ranName string, e2tAddress string) er if err != nil { m.logger.Errorf("#AssociateRan - E2T Instance address: %s - Failed saving E2TInstance. error: %s", e2tAddress, err) - return err + return e2managererrors.NewRnibDbError() } return nil diff --git a/E2Manager/managers/e2t_instances_manager_test.go b/E2Manager/managers/e2t_instances_manager_test.go index ca86651..88f940b 100644 --- a/E2Manager/managers/e2t_instances_manager_test.go +++ b/E2Manager/managers/e2t_instances_manager_test.go @@ -14,7 +14,8 @@ import ( "testing" ) -const E2TAddress = "10.0.2.15" +const E2TAddress = "10.10.2.15:9800" +const E2TAddress2 = "10.10.2.16:9800" func initE2TInstancesManagerTest(t *testing.T) (*mocks.RnibReaderMock, *mocks.RnibWriterMock, *E2TInstancesManager) { logger, err := logger.InitLogger(logger.DebugLevel) @@ -30,13 +31,6 @@ func initE2TInstancesManagerTest(t *testing.T) (*mocks.RnibReaderMock, *mocks.Rn return readerMock, writerMock, e2tInstancesManager } -func TestAddNewE2TInstanceEmptyAddress(t *testing.T) { - _, rnibWriterMock, e2tInstancesManager := initE2TInstancesManagerTest(t) - err := e2tInstancesManager.AddE2TInstance("") - assert.NotNil(t, err) - rnibWriterMock.AssertNotCalled(t, "SaveE2TInstance") -} - func TestAddNewE2TInstanceSaveE2TInstanceFailure(t *testing.T) { rnibReaderMock, rnibWriterMock, e2tInstancesManager := initE2TInstancesManagerTest(t) rnibWriterMock.On("SaveE2TInstance", mock.Anything).Return(common.NewInternalError(errors.New("Error"))) @@ -102,253 +96,178 @@ func TestGetE2TInstanceSuccess(t *testing.T) { func TestGetE2TInstanceFailure(t *testing.T) { rnibReaderMock, _, e2tInstancesManager := initE2TInstancesManagerTest(t) - address := "10.10.2.15:9800" var e2tInstance *entities.E2TInstance - rnibReaderMock.On("GetE2TInstance", address).Return(e2tInstance, common.NewInternalError(fmt.Errorf("for test"))) - res, err := e2tInstancesManager.GetE2TInstance(address) + rnibReaderMock.On("GetE2TInstance", E2TAddress).Return(e2tInstance, common.NewInternalError(fmt.Errorf("for test"))) + res, err := e2tInstancesManager.GetE2TInstance(E2TAddress) assert.NotNil(t, err) assert.Nil(t, res) } -//func TestAssociateRanSuccess(t *testing.T) { -// rnibReaderMock, rnibWriterMock, e2tInstancesManager := initE2TInstancesManagerTest(t) -// -// address1 := "10.10.2.15:9800" -// e2tInfo1 := entities.NewE2TInstanceInfo(address1) -// e2tInfo1.AssociatedRanCount = 0; -// address2 := "10.10.2.15:9801" -// e2tInfo2 := entities.NewE2TInstanceInfo(address2) -// e2tInfo2.AssociatedRanCount = 1; -// e2tInfoList := []*entities.E2TInstanceInfo{e2tInfo1, e2tInfo2} -// rnibReaderMock.On("GetE2TInfoList").Return(e2tInfoList, nil) -// -// e2tInfo3 := entities.NewE2TInstanceInfo(address1) -// e2tInfo3.AssociatedRanCount = 1; -// e2tInfoList2 := []*entities.E2TInstanceInfo{e2tInfo3, e2tInfo2} -// rnibWriterMock.On("SaveE2TAddresses", e2tInfoList2).Return(nil) -// -// e2tInstance1 := entities.NewE2TInstance(address1) -// rnibReaderMock.On("GetE2TInstance", address1).Return(e2tInstance1, nil) -// rnibWriterMock.On("SaveE2TInstance", mock.Anything).Return(nil) -// -// err := e2tInstancesManager.AssociateRan("test1", address1) -// assert.Nil(t, err) -// rnibReaderMock.AssertExpectations(t) -// rnibWriterMock.AssertExpectations(t) -//} -// -//func TestAssociateRanGetListFailure(t *testing.T) { -// rnibReaderMock, rnibWriterMock, e2tInstancesManager := initE2TInstancesManagerTest(t) -// -// address1 := "10.10.2.15:9800" -// -// var e2tInfoList []*entities.E2TInstanceInfo -// rnibReaderMock.On("GetE2TInfoList").Return(e2tInfoList, common.NewInternalError(fmt.Errorf("for test"))) -// -// err := e2tInstancesManager.AssociateRan("test1", address1) -// assert.NotNil(t, err) -// rnibWriterMock.AssertNotCalled(t, "SaveE2TAddresses") -// rnibWriterMock.AssertNotCalled(t, "SaveE2TInstance") -// rnibReaderMock.AssertNotCalled(t, "GetE2TInstance") -//} -// -//func TestAssociateRanSaveListFailure(t *testing.T) { -// rnibReaderMock, rnibWriterMock, e2tInstancesManager := initE2TInstancesManagerTest(t) -// -// address1 := "10.10.2.15:9800" -// e2tInfo1 := entities.NewE2TInstanceInfo(address1) -// e2tInfo1.AssociatedRanCount = 0; -// address2 := "10.10.2.15:9801" -// e2tInfo2 := entities.NewE2TInstanceInfo(address2) -// e2tInfo2.AssociatedRanCount = 1; -// e2tInfoList := []*entities.E2TInstanceInfo{e2tInfo1, e2tInfo2} -// rnibReaderMock.On("GetE2TInfoList").Return(e2tInfoList, nil) -// -// rnibWriterMock.On("SaveE2TAddresses", e2tInfoList).Return(common.NewInternalError(fmt.Errorf("for test"))) -// -// err := e2tInstancesManager.AssociateRan("test1", address1) -// assert.NotNil(t, err) -// rnibWriterMock.AssertNotCalled(t, "SaveE2TInstance") -// rnibReaderMock.AssertNotCalled(t, "GetE2TInstance") -//} -// -//func TestAssociateRanGetInstanceFailure(t *testing.T) { -// rnibReaderMock, rnibWriterMock, e2tInstancesManager := initE2TInstancesManagerTest(t) -// -// address1 := "10.10.2.15:9800" -// e2tInfo1 := entities.NewE2TInstanceInfo(address1) -// e2tInfo1.AssociatedRanCount = 0; -// address2 := "10.10.2.15:9801" -// e2tInfo2 := entities.NewE2TInstanceInfo(address2) -// e2tInfo2.AssociatedRanCount = 1; -// e2tInfoList := []*entities.E2TInstanceInfo{e2tInfo1, e2tInfo2} -// rnibReaderMock.On("GetE2TInfoList").Return(e2tInfoList, nil) -// rnibWriterMock.On("SaveE2TAddresses", e2tInfoList).Return(nil) -// -// var e2tInstance1 *entities.E2TInstance -// rnibReaderMock.On("GetE2TInstance", address1).Return(e2tInstance1, common.NewInternalError(fmt.Errorf("for test"))) -// -// err := e2tInstancesManager.AssociateRan("test1", address1) -// assert.NotNil(t, err) -// rnibWriterMock.AssertNotCalled(t, "SaveE2TInstance") -//} -// -//func TestAssociateRanSaveInstanceFailure(t *testing.T) { -// rnibReaderMock, rnibWriterMock, e2tInstancesManager := initE2TInstancesManagerTest(t) -// -// address1 := "10.10.2.15:9800" -// e2tInfo1 := entities.NewE2TInstanceInfo(address1) -// e2tInfo1.AssociatedRanCount = 0; -// address2 := "10.10.2.15:9801" -// e2tInfo2 := entities.NewE2TInstanceInfo(address2) -// e2tInfo2.AssociatedRanCount = 1; -// e2tInfoList := []*entities.E2TInstanceInfo{e2tInfo1, e2tInfo2} -// rnibReaderMock.On("GetE2TInfoList").Return(e2tInfoList, nil) -// -// e2tInfo3 := entities.NewE2TInstanceInfo(address1) -// e2tInfo3.AssociatedRanCount = 1; -// e2tInfoList2 := []*entities.E2TInstanceInfo{e2tInfo3, e2tInfo2} -// rnibWriterMock.On("SaveE2TAddresses", e2tInfoList2).Return(nil) -// -// e2tInstance1 := entities.NewE2TInstance(address1) -// rnibReaderMock.On("GetE2TInstance", address1).Return(e2tInstance1, nil) -// rnibWriterMock.On("SaveE2TInstance", mock.Anything).Return(common.NewInternalError(fmt.Errorf("for test"))) -// -// err := e2tInstancesManager.AssociateRan("test1", address1) -// assert.NotNil(t, err) -// rnibReaderMock.AssertExpectations(t) -// rnibWriterMock.AssertExpectations(t) -//} -// -//func TestDeassociateRanSuccess(t *testing.T) { -// rnibReaderMock, rnibWriterMock, e2tInstancesManager := initE2TInstancesManagerTest(t) -// -// address1 := "10.10.2.15:9800" -// e2tInfo1 := entities.NewE2TInstanceInfo(address1) -// e2tInfo1.AssociatedRanCount = 1; -// address2 := "10.10.2.15:9801" -// e2tInfo2 := entities.NewE2TInstanceInfo(address2) -// e2tInfo2.AssociatedRanCount = 0; -// e2tInfoList := []*entities.E2TInstanceInfo{e2tInfo1, e2tInfo2} -// rnibReaderMock.On("GetE2TInfoList").Return(e2tInfoList, nil) -// -// e2tInfo3 := entities.NewE2TInstanceInfo(address1) -// e2tInfo3.AssociatedRanCount = 0; -// e2tInfoList2 := []*entities.E2TInstanceInfo{e2tInfo3, e2tInfo2} -// rnibWriterMock.On("SaveE2TAddresses", e2tInfoList2).Return(nil) -// -// e2tInstance1 := entities.NewE2TInstance(address1) -// e2tInstance1.AssociatedRanList = append(e2tInstance1.AssociatedRanList, "test0", "test1") -// rnibReaderMock.On("GetE2TInstance", address1).Return(e2tInstance1, nil) -// rnibWriterMock.On("SaveE2TInstance", mock.Anything).Return(nil) -// -// err := e2tInstancesManager.DissociateRan("test1", address1) -// assert.Nil(t, err) -// rnibReaderMock.AssertExpectations(t) -// rnibWriterMock.AssertExpectations(t) -//} -// -//func TestDeassociateRanNoInstanceFound(t *testing.T) { -// rnibReaderMock, rnibWriterMock, e2tInstancesManager := initE2TInstancesManagerTest(t) -// -// address1 := "10.10.2.15:9800" -// e2tInfoList := []*entities.E2TInstanceInfo{} -// rnibReaderMock.On("GetE2TInfoList").Return(e2tInfoList, nil) -// -// err := e2tInstancesManager.DissociateRan("test1", address1) -// assert.Nil(t, err) -// rnibWriterMock.AssertNotCalled(t, "SaveE2TAddresses") -// rnibWriterMock.AssertNotCalled(t, "SaveE2TInstance") -// rnibReaderMock.AssertNotCalled(t, "GetE2TInstance") -//} -// -//func TestDeassociateRanGetListFailure(t *testing.T) { -// rnibReaderMock, rnibWriterMock, e2tInstancesManager := initE2TInstancesManagerTest(t) -// -// address1 := "10.10.2.15:9800" -// -// var e2tInfoList []*entities.E2TInstanceInfo -// rnibReaderMock.On("GetE2TInfoList").Return(e2tInfoList, common.NewInternalError(fmt.Errorf("for test"))) -// -// err := e2tInstancesManager.DissociateRan("test1", address1) -// assert.NotNil(t, err) -// rnibWriterMock.AssertNotCalled(t, "SaveE2TAddresses") -// rnibWriterMock.AssertNotCalled(t, "SaveE2TInstance") -// rnibReaderMock.AssertNotCalled(t, "GetE2TInstance") -//} -// -//func TestDeassociateRanSaveListFailure(t *testing.T) { -// rnibReaderMock, rnibWriterMock, e2tInstancesManager := initE2TInstancesManagerTest(t) -// -// address1 := "10.10.2.15:9800" -// e2tInfo1 := entities.NewE2TInstanceInfo(address1) -// e2tInfo1.AssociatedRanCount = 0; -// address2 := "10.10.2.15:9801" -// e2tInfo2 := entities.NewE2TInstanceInfo(address2) -// e2tInfo2.AssociatedRanCount = 1; -// e2tInfoList := []*entities.E2TInstanceInfo{e2tInfo1, e2tInfo2} -// rnibReaderMock.On("GetE2TInfoList").Return(e2tInfoList, nil) -// -// rnibWriterMock.On("SaveE2TAddresses", e2tInfoList).Return(common.NewInternalError(fmt.Errorf("for test"))) -// -// err := e2tInstancesManager.DissociateRan("test1", address1) -// assert.NotNil(t, err) -// rnibWriterMock.AssertNotCalled(t, "SaveE2TInstance") -// rnibReaderMock.AssertNotCalled(t, "GetE2TInstance") -//} -// -//func TestDeassociateRanGetInstanceFailure(t *testing.T) { -// rnibReaderMock, rnibWriterMock, e2tInstancesManager := initE2TInstancesManagerTest(t) -// -// address1 := "10.10.2.15:9800" -// e2tInfo1 := entities.NewE2TInstanceInfo(address1) -// e2tInfo1.AssociatedRanCount = 0; -// address2 := "10.10.2.15:9801" -// e2tInfo2 := entities.NewE2TInstanceInfo(address2) -// e2tInfo2.AssociatedRanCount = 1; -// e2tInfoList := []*entities.E2TInstanceInfo{e2tInfo1, e2tInfo2} -// rnibReaderMock.On("GetE2TInfoList").Return(e2tInfoList, nil) -// rnibWriterMock.On("SaveE2TAddresses", e2tInfoList).Return(nil) -// -// var e2tInstance1 *entities.E2TInstance -// rnibReaderMock.On("GetE2TInstance", address1).Return(e2tInstance1, common.NewInternalError(fmt.Errorf("for test"))) -// -// err := e2tInstancesManager.DissociateRan("test1", address1) -// assert.NotNil(t, err) -// rnibWriterMock.AssertNotCalled(t, "SaveE2TInstance") -//} -// -//func TestDeassociateRanSaveInstanceFailure(t *testing.T) { -// rnibReaderMock, rnibWriterMock, e2tInstancesManager := initE2TInstancesManagerTest(t) -// -// address1 := "10.10.2.15:9800" -// e2tInfo1 := entities.NewE2TInstanceInfo(address1) -// e2tInfo1.AssociatedRanCount = 1; -// address2 := "10.10.2.15:9801" -// e2tInfo2 := entities.NewE2TInstanceInfo(address2) -// e2tInfo2.AssociatedRanCount = 0; -// e2tInfoList := []*entities.E2TInstanceInfo{e2tInfo1, e2tInfo2} -// rnibReaderMock.On("GetE2TInfoList").Return(e2tInfoList, nil) -// -// e2tInfo3 := entities.NewE2TInstanceInfo(address1) -// e2tInfo3.AssociatedRanCount = 0; -// e2tInfoList2 := []*entities.E2TInstanceInfo{e2tInfo3, e2tInfo2} -// rnibWriterMock.On("SaveE2TAddresses", e2tInfoList2).Return(nil) -// -// e2tInstance1 := entities.NewE2TInstance(address1) -// rnibReaderMock.On("GetE2TInstance", address1).Return(e2tInstance1, nil) -// rnibWriterMock.On("SaveE2TInstance", mock.Anything).Return(common.NewInternalError(fmt.Errorf("for test"))) -// -// err := e2tInstancesManager.DissociateRan("test1", address1) -// assert.NotNil(t, err) -// rnibReaderMock.AssertExpectations(t) -// rnibWriterMock.AssertExpectations(t) -//} +func TestAssociateRanSuccess(t *testing.T) { + rnibReaderMock, rnibWriterMock, e2tInstancesManager := initE2TInstancesManagerTest(t) + e2tInstance := entities.NewE2TInstance(E2TAddress) + rnibReaderMock.On("GetE2TInstance", E2TAddress).Return(e2tInstance, nil) + + updateE2TInstance := *e2tInstance + updateE2TInstance.AssociatedRanList = append(updateE2TInstance.AssociatedRanList, "test1") + + rnibWriterMock.On("SaveE2TInstance", &updateE2TInstance).Return(nil) + + err := e2tInstancesManager.AssociateRan("test1", E2TAddress) + assert.Nil(t, err) + rnibReaderMock.AssertExpectations(t) + rnibWriterMock.AssertExpectations(t) +} + +func TestAssociateRanGetInstanceFailure(t *testing.T) { + rnibReaderMock, rnibWriterMock, e2tInstancesManager := initE2TInstancesManagerTest(t) + + var e2tInstance1 *entities.E2TInstance + rnibReaderMock.On("GetE2TInstance", E2TAddress).Return(e2tInstance1, common.NewInternalError(fmt.Errorf("for test"))) + + err := e2tInstancesManager.AssociateRan("test1", E2TAddress) + assert.NotNil(t, err) + rnibWriterMock.AssertNotCalled(t, "SaveE2TInstance") +} + +func TestAssociateRanSaveInstanceFailure(t *testing.T) { + rnibReaderMock, rnibWriterMock, e2tInstancesManager := initE2TInstancesManagerTest(t) + e2tInstance1 := entities.NewE2TInstance(E2TAddress) + rnibReaderMock.On("GetE2TInstance", E2TAddress).Return(e2tInstance1, nil) + rnibWriterMock.On("SaveE2TInstance", mock.Anything).Return(common.NewInternalError(fmt.Errorf("for test"))) + + err := e2tInstancesManager.AssociateRan("test1", E2TAddress) + assert.NotNil(t, err) + rnibReaderMock.AssertExpectations(t) + rnibWriterMock.AssertExpectations(t) +} + +func TestDissociateRanSuccess(t *testing.T) { + rnibReaderMock, rnibWriterMock, e2tInstancesManager := initE2TInstancesManagerTest(t) + + e2tInstance := entities.NewE2TInstance(E2TAddress) + e2tInstance.AssociatedRanList = []string{"test0","test1"} + updatedE2TInstance := *e2tInstance + updatedE2TInstance.AssociatedRanList = []string{"test0"} + rnibReaderMock.On("GetE2TInstance", E2TAddress).Return(e2tInstance, nil) + rnibWriterMock.On("SaveE2TInstance", &updatedE2TInstance).Return(nil) + + err := e2tInstancesManager.DissociateRan("test1", E2TAddress) + assert.Nil(t, err) + rnibReaderMock.AssertExpectations(t) + rnibWriterMock.AssertExpectations(t) +} + +func TestDissociateRanGetInstanceFailure(t *testing.T) { + rnibReaderMock, rnibWriterMock, e2tInstancesManager := initE2TInstancesManagerTest(t) + + var e2tInstance1 *entities.E2TInstance + rnibReaderMock.On("GetE2TInstance", E2TAddress).Return(e2tInstance1, common.NewInternalError(fmt.Errorf("for test"))) + err := e2tInstancesManager.DissociateRan("test1", E2TAddress) + assert.NotNil(t, err) + rnibWriterMock.AssertNotCalled(t, "SaveE2TInstance") +} + +func TestDissociateRanSaveInstanceFailure(t *testing.T) { + rnibReaderMock, rnibWriterMock, e2tInstancesManager := initE2TInstancesManagerTest(t) + + e2tInstance1 := entities.NewE2TInstance(E2TAddress) + rnibReaderMock.On("GetE2TInstance", E2TAddress).Return(e2tInstance1, nil) + rnibWriterMock.On("SaveE2TInstance", mock.Anything).Return(common.NewInternalError(fmt.Errorf("for test"))) + + err := e2tInstancesManager.DissociateRan("test1", E2TAddress) + assert.NotNil(t, err) + rnibReaderMock.AssertExpectations(t) + rnibWriterMock.AssertExpectations(t) +} + +func TestSelectE2TInstancesGetE2TAddressesFailure(t *testing.T) { + rnibReaderMock, rnibWriterMock, e2tInstancesManager := initE2TInstancesManagerTest(t) + + rnibReaderMock.On("GetE2TAddresses").Return([]string{}, common.NewInternalError(fmt.Errorf("for test"))) + address, err := e2tInstancesManager.SelectE2TInstance() + assert.NotNil(t, err) + assert.Empty(t, address) + rnibReaderMock.AssertExpectations(t) + rnibWriterMock.AssertNotCalled(t, "GetE2TInstances") +} + +func TestSelectE2TInstancesEmptyE2TAddressList(t *testing.T) { + rnibReaderMock, rnibWriterMock, e2tInstancesManager := initE2TInstancesManagerTest(t) + + rnibReaderMock.On("GetE2TAddresses").Return([]string{}, nil) + address, err := e2tInstancesManager.SelectE2TInstance() + assert.NotNil(t, err) + assert.Empty(t, address) + rnibReaderMock.AssertExpectations(t) + rnibWriterMock.AssertNotCalled(t, "GetE2TInstances") +} + +func TestSelectE2TInstancesGetE2TInstancesFailure(t *testing.T) { + rnibReaderMock, rnibWriterMock, e2tInstancesManager := initE2TInstancesManagerTest(t) + + addresses := []string{E2TAddress} + rnibReaderMock.On("GetE2TAddresses").Return(addresses, nil) + rnibReaderMock.On("GetE2TInstances",addresses ).Return([]*entities.E2TInstance{}, common.NewInternalError(fmt.Errorf("for test"))) + address, err := e2tInstancesManager.SelectE2TInstance() + assert.NotNil(t, err) + assert.Empty(t, address) + rnibReaderMock.AssertExpectations(t) + rnibWriterMock.AssertExpectations(t) +} + +func TestSelectE2TInstancesEmptyE2TInstancesList(t *testing.T) { + rnibReaderMock, rnibWriterMock, e2tInstancesManager := initE2TInstancesManagerTest(t) + + addresses := []string{E2TAddress} + rnibReaderMock.On("GetE2TAddresses").Return(addresses, nil) + rnibReaderMock.On("GetE2TInstances",addresses ).Return([]*entities.E2TInstance{}, nil) + address, err := e2tInstancesManager.SelectE2TInstance() + assert.NotNil(t, err) + assert.Empty(t, address) + rnibReaderMock.AssertExpectations(t) + rnibWriterMock.AssertExpectations(t) +} + +func TestSelectE2TInstancesNoActiveE2TInstance(t *testing.T) { + rnibReaderMock, rnibWriterMock, e2tInstancesManager := initE2TInstancesManagerTest(t) + addresses := []string{E2TAddress,E2TAddress2} + e2tInstance1 := entities.NewE2TInstance(E2TAddress) + e2tInstance1.State = entities.ToBeDeleted + e2tInstance1.AssociatedRanList = []string{"test1","test2","test3"} + e2tInstance2 := entities.NewE2TInstance(E2TAddress2) + e2tInstance2.State = entities.ToBeDeleted + e2tInstance2.AssociatedRanList = []string{"test4","test5","test6", "test7"} + + rnibReaderMock.On("GetE2TAddresses").Return(addresses, nil) + rnibReaderMock.On("GetE2TInstances",addresses).Return([]*entities.E2TInstance{e2tInstance1, e2tInstance2}, nil) + address, err := e2tInstancesManager.SelectE2TInstance() + assert.NotNil(t, err) + assert.Equal(t, "", address) + rnibReaderMock.AssertExpectations(t) + rnibWriterMock.AssertExpectations(t) +} + +func TestSelectE2TInstancesSuccess(t *testing.T) { + rnibReaderMock, rnibWriterMock, e2tInstancesManager := initE2TInstancesManagerTest(t) + addresses := []string{E2TAddress,E2TAddress2} + e2tInstance1 := entities.NewE2TInstance(E2TAddress) + e2tInstance1.AssociatedRanList = []string{"test1","test2","test3"} + e2tInstance2 := entities.NewE2TInstance(E2TAddress2) + e2tInstance2.AssociatedRanList = []string{"test4","test5","test6", "test7"} + + rnibReaderMock.On("GetE2TAddresses").Return(addresses, nil) + rnibReaderMock.On("GetE2TInstances",addresses).Return([]*entities.E2TInstance{e2tInstance1, e2tInstance2}, nil) + address, err := e2tInstancesManager.SelectE2TInstance() + assert.Nil(t, err) + assert.Equal(t, E2TAddress, address) + rnibReaderMock.AssertExpectations(t) + rnibWriterMock.AssertExpectations(t) +} func TestRemoveE2TInstance(t *testing.T) { _, _, e2tInstancesManager := initE2TInstancesManagerTest(t) - address1 := "10.10.2.15:9800" - e2tInstance1 := entities.NewE2TInstance(address1) + e2tInstance1 := entities.NewE2TInstance(E2TAddress) err := e2tInstancesManager.RemoveE2TInstance(e2tInstance1) assert.Nil(t, err) } \ No newline at end of file diff --git a/E2Manager/managers/ran_setup_manager.go b/E2Manager/managers/ran_setup_manager.go index 0eb6027..7aaf151 100644 --- a/E2Manager/managers/ran_setup_manager.go +++ b/E2Manager/managers/ran_setup_manager.go @@ -34,6 +34,10 @@ type RanSetupManager struct { rmrSender *rmrsender.RmrSender } +type IRanSetupManager interface { + ExecuteSetup(nodebInfo *entities.NodebInfo, status entities.ConnectionStatus) error +} + func NewRanSetupManager(logger *logger.Logger, rmrSender *rmrsender.RmrSender, rnibDataService services.RNibDataService) *RanSetupManager { return &RanSetupManager{ logger: logger, diff --git a/E2Manager/mocks/ran_setup_manager_mock.go b/E2Manager/mocks/ran_setup_manager_mock.go new file mode 100644 index 0000000..656657c --- /dev/null +++ b/E2Manager/mocks/ran_setup_manager_mock.go @@ -0,0 +1,31 @@ +// Copyright 2019 AT&T Intellectual Property +// Copyright 2019 Nokia +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// 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. +// +package mocks + +import ( + "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities" + "github.com/stretchr/testify/mock" +) + +type RanSetupManagerMock struct { + mock.Mock +} + +func (m *RanSetupManagerMock) ExecuteSetup(nodebInfo *entities.NodebInfo, status entities.ConnectionStatus) error { + args := m.Called(nodebInfo, status) + + return args.Error(0) +} diff --git a/E2Manager/rNibWriter/rNibWriter_test.go b/E2Manager/rNibWriter/rNibWriter_test.go index d4ca1a0..c09ba79 100644 --- a/E2Manager/rNibWriter/rNibWriter_test.go +++ b/E2Manager/rNibWriter/rNibWriter_test.go @@ -463,76 +463,6 @@ func TestGetRNibWriter(t *testing.T) { assert.NotEmpty(t, received) } -//Integration tests -// -//func TestSaveEnbGnbInteg(t *testing.T){ -// for i := 0; i<10; i++{ -// Init("e2Manager", 1) -// w := GetRNibWriter() -// nb := entities.NodebInfo{} -// nb.NodeType = entities.Node_ENB -// nb.ConnectionStatus = entities.ConnectionStatus_CONNECTED -// nb.Ip = "localhost" -// nb.Port = uint32(5656 + i) -// enb := entities.Enb{} -// cell1 := &entities.ServedCellInfo{CellId:fmt.Sprintf("%02x",111 + i), Pci:uint32(11 + i)} -// cell2 := &entities.ServedCellInfo{CellId:fmt.Sprintf("%02x",222 + i), Pci:uint32(22 + i)} -// cell3 := &entities.ServedCellInfo{CellId:fmt.Sprintf("%02x",333 + i), Pci:uint32(33 + i)} -// enb.ServedCells = []*entities.ServedCellInfo{cell1, cell2, cell3} -// nb.Configuration = &entities.NodebInfo_Enb{Enb:&enb} -// plmnId := 0x02f828 -// nbId := 0x4a952a0a -// nbIdentity := &entities.NbIdentity{InventoryName: fmt.Sprintf("nameEnb%d" ,i), GlobalNbId:&entities.GlobalNbId{PlmnId:fmt.Sprintf("%02x", plmnId + i), NbId:fmt.Sprintf("%02x", nbId + i)}} -// err := w.SaveNodeb(nbIdentity, &nb) -// if err != nil{ -// t.Errorf("#rNibWriter_test.TestSaveEnbInteg - Failed to save NodeB entity. Error: %v", err) -// } -// -// nb1 := entities.NodebInfo{} -// nb1.NodeType = entities.Node_GNB -// nb1.ConnectionStatus = entities.ConnectionStatus_CONNECTED -// nb1.Ip = "localhost" -// nb1.Port = uint32(6565 + i) -// gnb := entities.Gnb{} -// gCell1 := &entities.ServedNRCell{ServedNrCellInformation:&entities.ServedNRCellInformation{CellId:fmt.Sprintf("%02x",1111 + i), NrPci:uint32(1 + i)}} -// gCell2 := &entities.ServedNRCell{ServedNrCellInformation:&entities.ServedNRCellInformation{CellId:fmt.Sprintf("%02x",2222 + i), NrPci:uint32(2 + i)}} -// gCell3 := &entities.ServedNRCell{ServedNrCellInformation:&entities.ServedNRCellInformation{CellId:fmt.Sprintf("%02x",3333 + i), NrPci:uint32(3 + i)}} -// gnb.ServedNrCells = []*entities.ServedNRCell{gCell1, gCell2, gCell3,} -// nb1.Configuration = &entities.NodebInfo_Gnb{Gnb:&gnb} -// nbIdentity = &entities.NbIdentity{InventoryName: fmt.Sprintf("nameGnb%d" ,i), GlobalNbId:&entities.GlobalNbId{PlmnId:fmt.Sprintf("%02x", plmnId - i), NbId:fmt.Sprintf("%02x", nbId - i)}} -// err = w.SaveNodeb(nbIdentity, &nb1) -// if err != nil{ -// t.Errorf("#rNibWriter_test.TestSaveEnbInteg - Failed to save NodeB entity. Error: %v", err) -// } -// } -//} -// -//func TestSaveNbRanNamesInteg(t *testing.T){ -// for i := 0; i<10; i++{ -// Init("e2Manager", 1) -// w := GetRNibWriter() -// nb := entities.NodebInfo{} -// nb.ConnectionStatus = entities.ConnectionStatus_CONNECTING -// nb.Ip = "localhost" -// nb.Port = uint32(5656 + i) -// nbIdentity := &entities.NbIdentity{InventoryName: fmt.Sprintf("nameOnly%d" ,i)} -// err := w.SaveNodeb(nbIdentity, &nb) -// if err != nil{ -// t.Errorf("#rNibWriter_test.TestSaveEnbInteg - Failed to save NodeB entity. Error: %v", err) -// } -// } -//} -// -//func TestSaveRanLoadInformationInteg(t *testing.T){ -// Init("e2Manager", 1) -// w := GetRNibWriter() -// ranLoadInformation := generateRanLoadInformation() -// err := w.SaveRanLoadInformation("ran_integ", ranLoadInformation) -// if err != nil{ -// t.Errorf("#rNibWriter_test.TestSaveRanLoadInformationInteg - Failed to save RanLoadInformation entity. Error: %v", err) -// } -//} - func TestSaveE2TInstanceSuccess(t *testing.T) { address := "10.10.2.15:9800" loadKey, validationErr := common.ValidateAndBuildE2TInstanceKey(address) @@ -642,4 +572,74 @@ func TestSaveE2TInfoListSdlFailure(t *testing.T) { rNibErr := w.SaveE2TAddresses(e2tAddresses) assert.NotNil(t, rNibErr) assert.IsType(t, &common.InternalError{}, rNibErr) -} \ No newline at end of file +} + +//Integration tests +// +//func TestSaveEnbGnbInteg(t *testing.T){ +// for i := 0; i<10; i++{ +// Init("e2Manager", 1) +// w := GetRNibWriter() +// nb := entities.NodebInfo{} +// nb.NodeType = entities.Node_ENB +// nb.ConnectionStatus = entities.ConnectionStatus_CONNECTED +// nb.Ip = "localhost" +// nb.Port = uint32(5656 + i) +// enb := entities.Enb{} +// cell1 := &entities.ServedCellInfo{CellId:fmt.Sprintf("%02x",111 + i), Pci:uint32(11 + i)} +// cell2 := &entities.ServedCellInfo{CellId:fmt.Sprintf("%02x",222 + i), Pci:uint32(22 + i)} +// cell3 := &entities.ServedCellInfo{CellId:fmt.Sprintf("%02x",333 + i), Pci:uint32(33 + i)} +// enb.ServedCells = []*entities.ServedCellInfo{cell1, cell2, cell3} +// nb.Configuration = &entities.NodebInfo_Enb{Enb:&enb} +// plmnId := 0x02f828 +// nbId := 0x4a952a0a +// nbIdentity := &entities.NbIdentity{InventoryName: fmt.Sprintf("nameEnb%d" ,i), GlobalNbId:&entities.GlobalNbId{PlmnId:fmt.Sprintf("%02x", plmnId + i), NbId:fmt.Sprintf("%02x", nbId + i)}} +// err := w.SaveNodeb(nbIdentity, &nb) +// if err != nil{ +// t.Errorf("#rNibWriter_test.TestSaveEnbInteg - Failed to save NodeB entity. Error: %v", err) +// } +// +// nb1 := entities.NodebInfo{} +// nb1.NodeType = entities.Node_GNB +// nb1.ConnectionStatus = entities.ConnectionStatus_CONNECTED +// nb1.Ip = "localhost" +// nb1.Port = uint32(6565 + i) +// gnb := entities.Gnb{} +// gCell1 := &entities.ServedNRCell{ServedNrCellInformation:&entities.ServedNRCellInformation{CellId:fmt.Sprintf("%02x",1111 + i), NrPci:uint32(1 + i)}} +// gCell2 := &entities.ServedNRCell{ServedNrCellInformation:&entities.ServedNRCellInformation{CellId:fmt.Sprintf("%02x",2222 + i), NrPci:uint32(2 + i)}} +// gCell3 := &entities.ServedNRCell{ServedNrCellInformation:&entities.ServedNRCellInformation{CellId:fmt.Sprintf("%02x",3333 + i), NrPci:uint32(3 + i)}} +// gnb.ServedNrCells = []*entities.ServedNRCell{gCell1, gCell2, gCell3,} +// nb1.Configuration = &entities.NodebInfo_Gnb{Gnb:&gnb} +// nbIdentity = &entities.NbIdentity{InventoryName: fmt.Sprintf("nameGnb%d" ,i), GlobalNbId:&entities.GlobalNbId{PlmnId:fmt.Sprintf("%02x", plmnId - i), NbId:fmt.Sprintf("%02x", nbId - i)}} +// err = w.SaveNodeb(nbIdentity, &nb1) +// if err != nil{ +// t.Errorf("#rNibWriter_test.TestSaveEnbInteg - Failed to save NodeB entity. Error: %v", err) +// } +// } +//} +// +//func TestSaveNbRanNamesInteg(t *testing.T){ +// for i := 0; i<10; i++{ +// Init("e2Manager", 1) +// w := GetRNibWriter() +// nb := entities.NodebInfo{} +// nb.ConnectionStatus = entities.ConnectionStatus_CONNECTING +// nb.Ip = "localhost" +// nb.Port = uint32(5656 + i) +// nbIdentity := &entities.NbIdentity{InventoryName: fmt.Sprintf("nameOnly%d" ,i)} +// err := w.SaveNodeb(nbIdentity, &nb) +// if err != nil{ +// t.Errorf("#rNibWriter_test.TestSaveEnbInteg - Failed to save NodeB entity. Error: %v", err) +// } +// } +//} +// +//func TestSaveRanLoadInformationInteg(t *testing.T){ +// Init("e2Manager", 1) +// w := GetRNibWriter() +// ranLoadInformation := generateRanLoadInformation() +// err := w.SaveRanLoadInformation("ran_integ", ranLoadInformation) +// if err != nil{ +// t.Errorf("#rNibWriter_test.TestSaveRanLoadInformationInteg - Failed to save RanLoadInformation entity. Error: %v", err) +// } +//}