[RICPLT-2165] Add rnibDataService to support retries 43/943/1
authorAmichai <amichai.sichel@intl.att.com>
Wed, 11 Sep 2019 13:59:16 +0000 (16:59 +0300)
committerAmichai <amichai.sichel@intl.att.com>
Wed, 11 Sep 2019 14:13:35 +0000 (17:13 +0300)
Change-Id: Ia9dc8bbeead1d1f4fd0f970789bcd4b9af2f0540
Signed-off-by: Amichai <amichai.sichel@intl.att.com>
39 files changed:
E2Manager/configuration/configuration.go
E2Manager/controllers/controller.go
E2Manager/controllers/controller_test.go
E2Manager/controllers/nodeb_controller.go
E2Manager/controllers/nodeb_controller_test.go
E2Manager/converters/endc_x2setupFailureResponseToProtobuf_test.go
E2Manager/converters/endc_x2setupResponseToProtobuf_test.go
E2Manager/converters/x2setupFailureResponseToProtobuf_test.go
E2Manager/converters/x2setupResponseToProtobuf_test.go
E2Manager/handlers/httpmsghandlers/delete_all_request_handler.go
E2Manager/handlers/httpmsghandlers/delete_all_request_handler_test.go
E2Manager/handlers/httpmsghandlers/setup_request_handler.go
E2Manager/handlers/httpmsghandlers/setup_request_handler_test.go
E2Manager/handlers/httpmsghandlers/x2_reset_request_handler.go
E2Manager/handlers/httpmsghandlers/x2_reset_request_handler_test.go
E2Manager/handlers/rmrmsghandlers/e2_term_init_notification_handler.go
E2Manager/handlers/rmrmsghandlers/e2_term_init_notification_handler_test.go
E2Manager/handlers/rmrmsghandlers/enb_load_information_notification_handler.go
E2Manager/handlers/rmrmsghandlers/setup_response_notification_handler.go
E2Manager/handlers/rmrmsghandlers/setup_response_notification_handler_test.go
E2Manager/handlers/rmrmsghandlers/x2_reset_request_notification_handler.go
E2Manager/handlers/rmrmsghandlers/x2_reset_request_notification_handler_test.go
E2Manager/handlers/rmrmsghandlers/x2_reset_response_handler.go
E2Manager/handlers/rmrmsghandlers/x2_reset_response_handler_test.go
E2Manager/main/http_server.go
E2Manager/managers/notificationmanager/notification_manager.go
E2Manager/managers/ran_reconnection_manager.go
E2Manager/managers/ran_reconnection_manager_test.go
E2Manager/managers/ran_setup_manager.go
E2Manager/managers/ran_setup_manager_test.go
E2Manager/providers/httpmsghandlerprovider/incoming_request_handler_provider.go
E2Manager/providers/httpmsghandlerprovider/incoming_request_handler_provider_test.go
E2Manager/providers/rmrmsghandlerprovider/notification_handler_provider.go
E2Manager/providers/rmrmsghandlerprovider/notification_handler_provider_test.go
E2Manager/resources/configuration.yaml
E2Manager/services/receivers/rmr_service_receiver_test.go
E2Manager/services/rnib_data_service.go [new file with mode: 0644]
E2Manager/services/rnib_data_service_test.go [new file with mode: 0644]
E2Manager/services/rnib_reader_service.go [deleted file]

index b0611b8..7d8992a 100644 (file)
@@ -36,6 +36,8 @@ type Configuration struct {
        NotificationResponseBuffer int
        BigRedButtonTimeoutSec     int
        MaxConnectionAttempts      int
+       MaxRnibConnectionAttempts  int
+       RnibRetryIntervalMs                int
 }
 
 func ParseConfiguration() *Configuration{
@@ -58,6 +60,8 @@ func ParseConfiguration() *Configuration{
        config.NotificationResponseBuffer = viper.GetInt("notificationResponseBuffer")
        config.BigRedButtonTimeoutSec = viper.GetInt("bigRedButtonTimeoutSec")
        config.MaxConnectionAttempts = viper.GetInt("maxConnectionAttempts")
+       config.MaxConnectionAttempts = viper.GetInt("maxRnibConnectionAttempts")
+       config.MaxConnectionAttempts = viper.GetInt("rnibRetryIntervalMs")
        return &config
 }
 
index f9a7bb3..12ade63 100644 (file)
@@ -24,10 +24,8 @@ import (
        "e2mgr/managers"
        "e2mgr/models"
        "e2mgr/providers/httpmsghandlerprovider"
-       "e2mgr/rNibWriter"
        "e2mgr/services"
        "encoding/json"
-       "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
        "github.com/gorilla/mux"
        "io"
        "io/ioutil"
@@ -53,10 +51,10 @@ type Controller struct {
        handlerProvider *httpmsghandlerprovider.IncomingRequestHandlerProvider
 }
 
-func NewController(logger *logger.Logger, rmrService *services.RmrService, rNibReaderProvider func() reader.RNibReader, rNibWriterProvider func() rNibWriter.RNibWriter,
+func NewController(logger *logger.Logger, rmrService *services.RmrService, rnibDataService services.RNibDataService,
        config *configuration.Configuration, ranSetupManager *managers.RanSetupManager) *Controller {
 
-       provider := httpmsghandlerprovider.NewIncomingRequestHandlerProvider(logger, rmrService, config, rNibWriterProvider, rNibReaderProvider, ranSetupManager)
+       provider := httpmsghandlerprovider.NewIncomingRequestHandlerProvider(logger, rmrService, config, rnibDataService, ranSetupManager)
        return &Controller{
                logger:          logger,
                handlerProvider: provider,
index f14d830..cf5ae71 100644 (file)
@@ -29,6 +29,7 @@ import (
        "e2mgr/providers/httpmsghandlerprovider"
        "e2mgr/rNibWriter"
        "e2mgr/rmrCgo"
+       "e2mgr/services"
        "e2mgr/tests"
        "encoding/json"
        "fmt"
@@ -46,17 +47,29 @@ import (
        "testing"
 )
 
-func TestX2SetupInvalidBody(t *testing.T) {
-
-       readerMock, writerMock, rmrMessengerMock, ranSetupManager := initTest(t)
+func setupControllerTest(t *testing.T) (*Controller, *mocks.RnibReaderMock, *mocks.RnibWriterMock, *mocks.RmrMessengerMock){
        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)
+
+       ranSetupManager := managers.NewRanSetupManager(log, getRmrService(rmrMessengerMock, log), rnibDataService)
+       controller := NewController(log, getRmrService(rmrMessengerMock, log), rnibDataService, config, ranSetupManager)
+       return controller, readerMock, writerMock, rmrMessengerMock
+}
+
+func TestX2SetupInvalidBody(t *testing.T) {
+
+       controller, _, _, _ := setupControllerTest(t)
 
        header := http.Header{}
        header.Set("Content-Type", "application/json")
@@ -64,8 +77,6 @@ func TestX2SetupInvalidBody(t *testing.T) {
        httpRequest.Header = header
 
        writer := httptest.NewRecorder()
-       config := configuration.ParseConfiguration()
-       controller := NewController(log, getRmrService(rmrMessengerMock, log), readerProvider, writerProvider, config, ranSetupManager)
        controller.X2SetupHandler(writer, httpRequest)
 
        var errorResponse = parseJsonRequest(t, writer.Body)
@@ -76,15 +87,7 @@ func TestX2SetupInvalidBody(t *testing.T) {
 
 func TestX2SetupSuccess(t *testing.T) {
 
-       readerMock, writerMock, rmrMessengerMock, ranSetupManager := initTest(t)
-       log := initLog(t)
-
-       readerProvider := func() reader.RNibReader {
-               return readerMock
-       }
-       writerProvider := func() rNibWriter.RNibWriter {
-               return writerMock
-       }
+       controller, readerMock, writerMock, rmrMessengerMock := setupControllerTest(t)
 
        ranName := "test"
        nb := &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
@@ -105,8 +108,6 @@ func TestX2SetupSuccess(t *testing.T) {
        httpRequest.Header = header
 
        writer := httptest.NewRecorder()
-       config := configuration.ParseConfiguration()
-       controller := NewController(log, getRmrService(rmrMessengerMock, log), readerProvider, writerProvider, config, ranSetupManager)
        controller.X2SetupHandler(writer, httpRequest)
 
        assert.Equal(t, http.StatusNoContent, writer.Result().StatusCode)
@@ -114,15 +115,7 @@ func TestX2SetupSuccess(t *testing.T) {
 
 func TestEndcSetupSuccess(t *testing.T) {
 
-       readerMock, writerMock, rmrMessengerMock, ranSetupManager := initTest(t)
-       log := initLog(t)
-
-       readerProvider := func() reader.RNibReader {
-               return readerMock
-       }
-       writerProvider := func() rNibWriter.RNibWriter {
-               return writerMock
-       }
+       controller, readerMock, writerMock, rmrMessengerMock := setupControllerTest(t)
 
        ranName := "test"
        nb := &entities.NodebInfo{RanName: ranName, ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST}
@@ -143,34 +136,20 @@ func TestEndcSetupSuccess(t *testing.T) {
        httpRequest.Header = header
 
        writer := httptest.NewRecorder()
-       config := configuration.ParseConfiguration()
-       controller := NewController(log, getRmrService(rmrMessengerMock, log), readerProvider, writerProvider, config, ranSetupManager)
        controller.EndcSetupHandler(writer, httpRequest)
 
        assert.Equal(t, http.StatusNoContent, writer.Result().StatusCode)
 }
 
 func TestShutdownHandlerRnibError(t *testing.T) {
-       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
-       }
+       controller, readerMock, _, _:= setupControllerTest(t)
 
        rnibErr := &common.ResourceNotFoundError{}
        var nbIdentityList []*entities.NbIdentity
        readerMock.On("GetListNodebIds").Return(nbIdentityList, rnibErr)
 
        writer := httptest.NewRecorder()
-       ranSetupManager := managers.NewRanSetupManager(log, getRmrService(rmrMessengerMock, log), rNibWriter.GetRNibWriter)
-       controller := NewController(log, getRmrService(rmrMessengerMock, log), readerProvider, writerProvider, config, ranSetupManager)
+
        controller.ShutdownHandler(writer, tests.GetHttpRequest())
 
        var errorResponse = parseJsonRequest(t, writer.Body)
@@ -180,22 +159,9 @@ func TestShutdownHandlerRnibError(t *testing.T) {
 }
 
 func TestHeaderValidationFailed(t *testing.T) {
-       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
-       }
+       controller, _, _, _ := setupControllerTest(t)
 
        writer := httptest.NewRecorder()
-       ranSetupManager := managers.NewRanSetupManager(log, getRmrService(rmrMessengerMock, log), rNibWriter.GetRNibWriter)
-       controller := NewController(log, getRmrService(rmrMessengerMock, log), readerProvider, writerProvider, config, ranSetupManager)
 
        header := &http.Header{}
 
@@ -210,48 +176,22 @@ func TestHeaderValidationFailed(t *testing.T) {
 }
 
 func TestShutdownStatusNoContent(t *testing.T) {
-       log := initLog(t)
-
-       rmrMessengerMock := &mocks.RmrMessengerMock{}
-       readerMock := &mocks.RnibReaderMock{}
-       readerProvider := func() reader.RNibReader {
-               return readerMock
-       }
-       writerMock := &mocks.RnibWriterMock{}
-       writerProvider := func() rNibWriter.RNibWriter {
-               return writerMock
-       }
-       config := configuration.ParseConfiguration()
+       controller, readerMock, _, _ := setupControllerTest(t)
 
        var rnibError error
        nbIdentityList := []*entities.NbIdentity{}
        readerMock.On("GetListNodebIds").Return(nbIdentityList, rnibError)
 
        writer := httptest.NewRecorder()
-       ranSetupManager := managers.NewRanSetupManager(log, getRmrService(rmrMessengerMock, log), rNibWriter.GetRNibWriter)
-       controller := NewController(log, getRmrService(rmrMessengerMock, log), readerProvider, writerProvider, config, ranSetupManager)
        controller.ShutdownHandler(writer, tests.GetHttpRequest())
 
        assert.Equal(t, http.StatusNoContent, writer.Result().StatusCode)
 }
 
 func TestHandleInternalError(t *testing.T) {
-       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
-       }
+       controller, _, _, _ := setupControllerTest(t)
 
        writer := httptest.NewRecorder()
-       ranSetupManager := managers.NewRanSetupManager(log, getRmrService(rmrMessengerMock, log), rNibWriter.GetRNibWriter)
-       controller := NewController(log, getRmrService(rmrMessengerMock, log), readerProvider, writerProvider, config, ranSetupManager)
        err := e2managererrors.NewInternalError()
 
        controller.handleErrorResponse(err, writer)
@@ -263,21 +203,8 @@ func TestHandleInternalError(t *testing.T) {
 }
 
 func TestHandleCommandAlreadyInProgressError(t *testing.T) {
-       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
-       }
+       controller, _, _, _ := setupControllerTest(t)
        writer := httptest.NewRecorder()
-       ranSetupManager := managers.NewRanSetupManager(log, getRmrService(rmrMessengerMock, log), rNibWriter.GetRNibWriter)
-       controller := NewController(log, getRmrService(rmrMessengerMock, log), readerProvider, writerProvider, config, ranSetupManager)
        err := e2managererrors.NewCommandAlreadyInProgressError()
 
        controller.handleErrorResponse(err, writer)
@@ -289,20 +216,7 @@ func TestHandleCommandAlreadyInProgressError(t *testing.T) {
 }
 
 func TestValidateHeaders(t *testing.T) {
-       log := initLog(t)
-
-       rmrMessengerMock := &mocks.RmrMessengerMock{}
-       readerMock := &mocks.RnibReaderMock{}
-       readerProvider := func() reader.RNibReader {
-               return readerMock
-       }
-       writerMock := &mocks.RnibWriterMock{}
-       writerProvider := func() rNibWriter.RNibWriter {
-               return writerMock
-       }
-       config := configuration.ParseConfiguration()
-       ranSetupManager := managers.NewRanSetupManager(log, getRmrService(rmrMessengerMock, log), rNibWriter.GetRNibWriter)
-       controller := NewController(log, getRmrService(rmrMessengerMock, log), readerProvider, writerProvider, config, ranSetupManager)
+       controller, _, _, _ := setupControllerTest(t)
 
        header := http.Header{}
        header.Set("Content-Type", "application/json")
@@ -332,30 +246,15 @@ func initLog(t *testing.T) *logger.Logger {
 }
 
 func TestX2ResetHandleSuccessfulRequestedCause(t *testing.T) {
-       log := initLog(t)
+       controller, readerMock, _, rmrMessengerMock := setupControllerTest(t)
 
        ranName := "test1"
-
-       readerMock := &mocks.RnibReaderMock{}
-       readerProvider := func() reader.RNibReader {
-               return readerMock
-       }
-       writerMock := &mocks.RnibWriterMock{}
-       writerProvider := func() rNibWriter.RNibWriter {
-               return writerMock
-       }
        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)
-       rmrMessengerMock := &mocks.RmrMessengerMock{}
        rmrMessengerMock.On("SendMsg", msg, mock.Anything).Return(msg, nil)
 
-       config := configuration.ParseConfiguration()
-       rmrService := getRmrService(rmrMessengerMock, log)
-
        writer := httptest.NewRecorder()
-       ranSetupManager := managers.NewRanSetupManager(log, getRmrService(rmrMessengerMock, log), rNibWriter.GetRNibWriter)
-       controller := NewController(log, rmrService, readerProvider, writerProvider, config, ranSetupManager)
 
        var nodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED}
        readerMock.On("GetNodeb", ranName).Return(nodeb, nil)
@@ -372,31 +271,16 @@ func TestX2ResetHandleSuccessfulRequestedCause(t *testing.T) {
 }
 
 func TestX2ResetHandleSuccessfulRequestedDefault(t *testing.T) {
-       log := initLog(t)
+       controller, readerMock, _, rmrMessengerMock := setupControllerTest(t)
 
        ranName := "test1"
-
-       readerMock := &mocks.RnibReaderMock{}
-       readerProvider := func() reader.RNibReader {
-               return readerMock
-       }
-       writerMock := &mocks.RnibWriterMock{}
-       writerProvider := func() rNibWriter.RNibWriter {
-               return writerMock
-       }
        // 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 := &mocks.RmrMessengerMock{}
        rmrMessengerMock.On("SendMsg", msg, mock.Anything).Return(msg, nil)
 
-       config := configuration.ParseConfiguration()
-       rmrService := getRmrService(rmrMessengerMock, log)
-
        writer := httptest.NewRecorder()
-       ranSetupManager := managers.NewRanSetupManager(log, getRmrService(rmrMessengerMock, log), rNibWriter.GetRNibWriter)
-       controller := NewController(log, rmrService, readerProvider, writerProvider, config, ranSetupManager)
 
        var nodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED}
        readerMock.On("GetNodeb", ranName).Return(nodeb, nil)
@@ -412,26 +296,11 @@ func TestX2ResetHandleSuccessfulRequestedDefault(t *testing.T) {
 }
 
 func TestX2ResetHandleFailureInvalidBody(t *testing.T) {
-       log := initLog(t)
+       controller, _, _, _ := setupControllerTest(t)
 
        ranName := "test1"
 
-       readerMock := &mocks.RnibReaderMock{}
-       readerProvider := func() reader.RNibReader {
-               return readerMock
-       }
-       writerMock := &mocks.RnibWriterMock{}
-       writerProvider := func() rNibWriter.RNibWriter {
-               return writerMock
-       }
-       rmrMessengerMock := &mocks.RmrMessengerMock{}
-
-       config := configuration.ParseConfiguration()
-       rmrService := getRmrService(rmrMessengerMock, log)
-
        writer := httptest.NewRecorder()
-       ranSetupManager := managers.NewRanSetupManager(log, getRmrService(rmrMessengerMock, log), rNibWriter.GetRNibWriter)
-       controller := NewController(log, rmrService, readerProvider, writerProvider, config, ranSetupManager)
 
        // Invalid json: attribute name without quotes (should be "cause":).
        b := strings.NewReader("{cause:\"protocol:transfer-syntax-error\"")
@@ -444,22 +313,7 @@ func TestX2ResetHandleFailureInvalidBody(t *testing.T) {
 }
 
 func TestHandleErrorResponse(t *testing.T) {
-       log := initLog(t)
-
-       readerMock := &mocks.RnibReaderMock{}
-       readerProvider := func() reader.RNibReader {
-               return readerMock
-       }
-       writerMock := &mocks.RnibWriterMock{}
-       writerProvider := func() rNibWriter.RNibWriter {
-               return writerMock
-       }
-       rmrMessengerMock := &mocks.RmrMessengerMock{}
-
-       config := configuration.ParseConfiguration()
-       rmrService := getRmrService(rmrMessengerMock, log)
-       ranSetupManager := managers.NewRanSetupManager(log, getRmrService(rmrMessengerMock, log), rNibWriter.GetRNibWriter)
-       controller := NewController(log, rmrService, readerProvider, writerProvider, config, ranSetupManager)
+       controller, _, _, _ := setupControllerTest(t)
 
        writer := httptest.NewRecorder()
        controller.handleErrorResponse(e2managererrors.NewRnibDbError(), writer)
@@ -492,21 +346,4 @@ func TestHandleErrorResponse(t *testing.T) {
        writer = httptest.NewRecorder()
        controller.handleErrorResponse(fmt.Errorf("ErrorError"), writer)
        assert.Equal(t, http.StatusInternalServerError, writer.Result().StatusCode)
-}
-
-func initTest(t *testing.T)(*mocks.RnibReaderMock, *mocks.RnibWriterMock, *mocks.RmrMessengerMock, *managers.RanSetupManager) {
-       log := initLog(t)
-
-       readerMock := &mocks.RnibReaderMock{}
-       writerMock := &mocks.RnibWriterMock{}
-       writerProvider := func() rNibWriter.RNibWriter {
-               return writerMock
-       }
-
-       rmrMessengerMock := &mocks.RmrMessengerMock{}
-       rmrService := getRmrService(rmrMessengerMock, log)
-
-       ranSetupManager := managers.NewRanSetupManager(log, rmrService, writerProvider)
-
-       return readerMock, writerMock, rmrMessengerMock, ranSetupManager
 }
\ No newline at end of file
index cdb76a9..28b713e 100644 (file)
@@ -20,12 +20,10 @@ package controllers
 import (
        "e2mgr/logger"
        "e2mgr/models"
-       "e2mgr/rNibWriter"
        "e2mgr/services"
        "e2mgr/utils"
        "encoding/json"
        "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
-       "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
        "github.com/golang/protobuf/jsonpb"
        "github.com/gorilla/mux"
        "net/http"
@@ -53,25 +51,22 @@ type INodebController interface {
 type NodebController struct {
        rmrService         *services.RmrService
        Logger             *logger.Logger
-       rnibReaderProvider func() reader.RNibReader
-       rnibWriterProvider func() rNibWriter.RNibWriter
+       rnibDataService services.RNibDataService
 }
 
-func NewNodebController(logger *logger.Logger, rmrService *services.RmrService, rnibReaderProvider func() reader.RNibReader, rnibWriterProvider func() rNibWriter.RNibWriter) *NodebController {
+func NewNodebController(logger *logger.Logger, rmrService *services.RmrService, rnibDataService services.RNibDataService) *NodebController {
        messageChannel = make(chan *models.E2RequestMessage)
        errorChannel = make(chan error)
        return &NodebController{
                rmrService:         rmrService,
                Logger:             logger,
-               rnibReaderProvider: rnibReaderProvider,
-               rnibWriterProvider: rnibWriterProvider,
+               rnibDataService: rnibDataService,
        }
 }
 
 func (rc NodebController) GetNodebIdList (writer http.ResponseWriter, request *http.Request) {
        startTime := time.Now()
-       rnibReaderService := services.NewRnibReaderService(rc.rnibReaderProvider)
-       nodebIdList, rnibError := rnibReaderService.GetNodebIdList()
+       nodebIdList, rnibError := rc.rnibDataService.GetListNodebIds()
 
        if rnibError != nil {
                rc.Logger.Errorf("%v", rnibError);
@@ -98,9 +93,7 @@ func (rc NodebController) GetNodeb(writer http.ResponseWriter, request *http.Req
        startTime := time.Now()
        vars := mux.Vars(request)
        ranName := vars["ranName"]
-       // WAS: respondingNode, rnibError := reader.GetRNibReader().GetNodeb(ranName)
-       rnibReaderService := services.NewRnibReaderService(rc.rnibReaderProvider)
-       respondingNode, rnibError := rnibReaderService.GetNodeb(ranName)
+       respondingNode, rnibError := rc.rnibDataService.GetNodeb(ranName)
        if rnibError != nil {
                rc.Logger.Errorf("%v", rnibError)
                httpStatusCode, errorCode, errorMessage := rnibErrorToHttpError(rnibError)
index 812d7dc..f49cd8c 100644 (file)
@@ -18,6 +18,7 @@
 package controllers
 
 import (
+       "e2mgr/configuration"
        "e2mgr/logger"
        "e2mgr/mocks"
        "e2mgr/models"
@@ -37,19 +38,30 @@ import (
        "testing"
 )
 
-func TestNewRequestController(t *testing.T) {
+func setupNodebControllerTest(t *testing.T) (*logger.Logger, services.RNibDataService, *mocks.RnibReaderMock){
+       logger, err := logger.InitLogger(logger.DebugLevel)
+       if err != nil {
+               t.Errorf("#... - failed to initialize logger, error: %s", err)
+       }
+       config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
+       readerMock := &mocks.RnibReaderMock{}
        rnibReaderProvider := func() reader.RNibReader {
-               return &mocks.RnibReaderMock{}
+               return readerMock
        }
        rnibWriterProvider := func() rNibWriter.RNibWriter {
                return &mocks.RnibWriterMock{}
        }
+       rnibDataService := services.NewRnibDataService(logger, config, rnibReaderProvider, rnibWriterProvider)
+       return logger, rnibDataService, readerMock
+}
 
-       assert.NotNil(t, NewNodebController(&logger.Logger{}, &services.RmrService{}, rnibReaderProvider, rnibWriterProvider))
+func TestNewRequestController(t *testing.T) {
+       logger, rnibDataService, _ := setupNodebControllerTest(t)
+       assert.NotNil(t, NewNodebController(logger, &services.RmrService{}, rnibDataService))
 }
 
 func TestHandleHealthCheckRequest(t *testing.T) {
-       rc := NewNodebController(nil, nil, nil, nil)
+       rc := NewNodebController(nil, nil, nil)
        writer := httptest.NewRecorder()
        rc.HandleHealthCheckRequest(writer, nil)
        assert.Equal(t, writer.Result().StatusCode, http.StatusOK)
@@ -62,96 +74,62 @@ func getRmrService(rmrMessengerMock *mocks.RmrMessengerMock, log *logger.Logger)
        return services.NewRmrService(services.NewRmrConfig(tests.Port, tests.MaxMsgSize, tests.Flags, log), rmrMessenger, messageChannel)
 }
 
-func executeGetNodeb(logger *logger.Logger, writer *httptest.ResponseRecorder, rnibReaderProvider func() reader.RNibReader) {
+func executeGetNodeb(logger *logger.Logger, writer *httptest.ResponseRecorder, rnibDataService services.RNibDataService) {
        req, _ := http.NewRequest("GET", "/nodeb", nil)
        req = mux.SetURLVars(req, map[string]string{"ranName": "testNode"})
 
-       NewNodebController(logger, nil, rnibReaderProvider, nil).GetNodeb(writer, req)
+       NewNodebController(logger, nil, rnibDataService).GetNodeb(writer, req)
 }
 
 func TestNodebController_GetNodeb_Success(t *testing.T) {
-       log, err := logger.InitLogger(logger.InfoLevel)
-
-       if err != nil {
-               t.Errorf("#nodeb_controller_test.TestNodebController_GetNodeb_Success - failed to initialize logger, error: %s", err)
-       }
+       logger, rnibDataService, rnibReaderMock := setupNodebControllerTest(t)
 
        writer := httptest.NewRecorder()
 
-       rnibReaderMock := mocks.RnibReaderMock{}
 
        var rnibError error
        rnibReaderMock.On("GetNodeb", "testNode").Return(&entities.NodebInfo{}, rnibError)
 
-       rnibReaderProvider := func() reader.RNibReader {
-               return &rnibReaderMock
-       }
-
-       executeGetNodeb(log, writer, rnibReaderProvider)
+       executeGetNodeb(logger, writer, rnibDataService)
 
        assert.Equal(t, writer.Result().StatusCode, http.StatusOK)
 }
 
 func TestNodebController_GetNodeb_NotFound(t *testing.T) {
-       log, err := logger.InitLogger(logger.InfoLevel)
-
-       if err != nil {
-               t.Errorf("#nodeb_controller_test.TestNodebController_GetNodeb_NotFound - failed to initialize logger, error: %s", err)
-       }
+       logger, rnibDataService, rnibReaderMock := setupNodebControllerTest(t)
 
        writer := httptest.NewRecorder()
 
-       rnibReaderMock := mocks.RnibReaderMock{}
        rnibError := common.NewResourceNotFoundErrorf("#reader.GetNodeb - responding node %s not found", "testNode")
        var nodebInfo *entities.NodebInfo
        rnibReaderMock.On("GetNodeb", "testNode").Return(nodebInfo, rnibError)
 
-       rnibReaderProvider := func() reader.RNibReader {
-               return &rnibReaderMock
-       }
-
-       executeGetNodeb(log, writer, rnibReaderProvider)
+       executeGetNodeb(logger, writer, rnibDataService)
        assert.Equal(t, writer.Result().StatusCode, http.StatusNotFound)
 }
 
 func TestNodebController_GetNodeb_InternalError(t *testing.T) {
-       log, err := logger.InitLogger(logger.InfoLevel)
-
-       if err != nil {
-               t.Errorf("#nodeb_controller_test.TestNodebController_GetNodeb_InternalError - failed to initialize logger, error: %s", err)
-       }
+       logger, rnibDataService, rnibReaderMock := setupNodebControllerTest(t)
 
        writer := httptest.NewRecorder()
 
-       rnibReaderMock := mocks.RnibReaderMock{}
-
        rnibError := common.NewInternalError(errors.New("#reader.GetNodeb - Internal Error"))
        var nodebInfo *entities.NodebInfo
        rnibReaderMock.On("GetNodeb", "testNode").Return(nodebInfo, rnibError)
 
-       rnibReaderProvider := func() reader.RNibReader {
-               return &rnibReaderMock
-       }
-
-       executeGetNodeb(log, writer, rnibReaderProvider)
+       executeGetNodeb(logger, writer, rnibDataService)
        assert.Equal(t, writer.Result().StatusCode, http.StatusInternalServerError)
 }
 
-func executeGetNodebIdList(logger *logger.Logger, writer *httptest.ResponseRecorder, rnibReaderProvider func() reader.RNibReader) {
+func executeGetNodebIdList(logger *logger.Logger, writer *httptest.ResponseRecorder, rnibDataService services.RNibDataService) {
        req, _ := http.NewRequest("GET", "/nodeb-ids", nil)
-       NewNodebController(logger, nil, rnibReaderProvider, nil).GetNodebIdList(writer, req)
+       NewNodebController(logger, nil, rnibDataService).GetNodebIdList(writer,req)
 }
 
 func TestNodebController_GetNodebIdList_Success(t *testing.T) {
-       logger, err := logger.InitLogger(logger.InfoLevel)
-
-       if err != nil {
-               t.Errorf("#nodeb_controller_test.TestNodebController_GetNodebIdList_Success - failed to initialize logger, error: %s", err)
-       }
-
+       logger, rnibDataService, rnibReaderMock := setupNodebControllerTest(t)
        writer := httptest.NewRecorder()
 
-       rnibReaderMock := mocks.RnibReaderMock{}
        var rnibError error
 
        nbList := []*entities.NbIdentity{
@@ -161,61 +139,38 @@ func TestNodebController_GetNodebIdList_Success(t *testing.T) {
        }
        rnibReaderMock.On("GetListNodebIds").Return(nbList, rnibError)
 
-       rnibReaderProvider := func() reader.RNibReader {
-               return &rnibReaderMock
-       }
-
-       executeGetNodebIdList(logger, writer, rnibReaderProvider)
+       executeGetNodebIdList(logger, writer, rnibDataService)
        assert.Equal(t, writer.Result().StatusCode, http.StatusOK)
-       bodyBytes, err := ioutil.ReadAll(writer.Body)
+       bodyBytes, _ := ioutil.ReadAll(writer.Body)
        assert.Equal(t, "[{\"inventoryName\":\"test1\",\"globalNbId\":{\"plmnId\":\"plmnId1\",\"nbId\":\"nbId1\"}},{\"inventoryName\":\"test2\",\"globalNbId\":{\"plmnId\":\"plmnId2\",\"nbId\":\"nbId2\"}},{\"inventoryName\":\"test3\",\"globalNbId\":{}}]", string(bodyBytes))
 }
 
 func TestNodebController_GetNodebIdList_EmptyList(t *testing.T) {
-       log, err := logger.InitLogger(logger.InfoLevel)
-
-       if err != nil {
-               t.Errorf("#nodeb_controller_test.TestNodebController_GetNodebIdList_EmptyList - failed to initialize logger, error: %s", err)
-       }
+       logger, rnibDataService, rnibReaderMock := setupNodebControllerTest(t)
 
        writer := httptest.NewRecorder()
 
-       rnibReaderMock := mocks.RnibReaderMock{}
-
        var rnibError error
        nbList := []*entities.NbIdentity{}
        rnibReaderMock.On("GetListNodebIds").Return(nbList, rnibError)
 
-       rnibReaderProvider := func() reader.RNibReader {
-               return &rnibReaderMock
-       }
 
-       executeGetNodebIdList(log, writer, rnibReaderProvider)
+       executeGetNodebIdList(logger, writer, rnibDataService)
 
        assert.Equal(t, writer.Result().StatusCode, http.StatusOK)
-       bodyBytes, err := ioutil.ReadAll(writer.Body)
+       bodyBytes, _ := ioutil.ReadAll(writer.Body)
        assert.Equal(t, "[]", string(bodyBytes))
 }
 
 func TestNodebController_GetNodebIdList_InternalError(t *testing.T) {
-       logger, err := logger.InitLogger(logger.InfoLevel)
-
-       if err != nil {
-               t.Errorf("#nodeb_controller_test.TestNodebController_GetNodebIdList_InternalError - failed to initialize logger, error: %s", err)
-       }
+       logger, rnibDataService, rnibReaderMock := setupNodebControllerTest(t)
 
        writer := httptest.NewRecorder()
 
-       rnibReaderMock := mocks.RnibReaderMock{}
-
        rnibError := common.NewInternalError(errors.New("#reader.GetEnbIdList - Internal Error"))
        var nbList []*entities.NbIdentity
        rnibReaderMock.On("GetListNodebIds").Return(nbList, rnibError)
 
-       rnibReaderProvider := func() reader.RNibReader {
-               return &rnibReaderMock
-       }
-
-       executeGetNodebIdList(logger, writer, rnibReaderProvider)
+       executeGetNodebIdList(logger, writer, rnibDataService)
        assert.Equal(t, writer.Result().StatusCode, http.StatusInternalServerError)
 }
index f51b987..cdd2f25 100644 (file)
@@ -20,7 +20,6 @@ package converters
 import (
        "e2mgr/e2pdus"
        "e2mgr/logger"
-       "e2mgr/rNibWriter"
        "fmt"
        "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
        "strings"
@@ -35,14 +34,12 @@ func TestUnpackEndcX2SetupFailureResponseAndExtract(t *testing.T) {
        logger, _ := logger.InitLogger(logger.InfoLevel)
 
        var testCases = []struct {
-               saveToRNib bool
-               response   string
-               packedPdu  string
-               failure    error
+               response  string
+               packedPdu string
+               failure   error
        }{
                {
-                       saveToRNib: false, //TODO: use MOCK?
-                       response:   "CONNECTED_SETUP_FAILED network_layer_cause:HANDOVER_DESIRABLE_FOR_RADIO_REASONS time_to_wait:V1S criticality_diagnostics:<procedure_code:33 triggering_message:UNSUCCESSFUL_OUTCOME procedure_criticality:NOTIFY information_element_criticality_diagnostics:<ie_criticality:REJECT ie_id:128 type_of_error:MISSING > > ",
+                       response: "CONNECTED_SETUP_FAILED network_layer_cause:HANDOVER_DESIRABLE_FOR_RADIO_REASONS time_to_wait:V1S criticality_diagnostics:<procedure_code:33 triggering_message:UNSUCCESSFUL_OUTCOME procedure_criticality:NOTIFY information_element_criticality_diagnostics:<ie_criticality:REJECT ie_id:128 type_of_error:MISSING > > ",
                        /*
                                E2AP-PDU:
                                 unsuccessfulOutcome_t
@@ -77,7 +74,6 @@ func TestUnpackEndcX2SetupFailureResponseAndExtract(t *testing.T) {
                /**** shares the same code with x2setup failure response to protobuf ****/
        }
 
-       initDb_f := true
        for _, tc := range testCases {
                t.Run(tc.packedPdu, func(t *testing.T) {
 
@@ -113,23 +109,6 @@ func TestUnpackEndcX2SetupFailureResponseAndExtract(t *testing.T) {
                                        t.Errorf("want: response=[%s], got: [%s]", tc.response, respStr)
                                }
 
-                               // Save to rNib
-                               if tc.saveToRNib {
-                                       if initDb_f {
-                                               rNibWriter.Init("e2Manager", 1)
-                                               initDb_f = false
-                                       }
-                                       nbIdentity := &entities.NbIdentity{InventoryName: "RanName"}
-                                       if rNibErr := rNibWriter.GetRNibWriter().SaveNodeb(nbIdentity, nb); rNibErr != nil {
-                                               if tc.failure == nil {
-                                                       t.Errorf("rNibWriter failed to save ENB. Error: %s\n", rNibErr.Error())
-                                               } else {
-                                                       if strings.Compare(rNibErr.Error(), tc.failure.Error()) != 0 {
-                                                               t.Errorf("want: %s, got: %s", tc.failure, rNibErr.Error())
-                                                       }
-                                               }
-                                       }
-                               }
                        }
                })
        }
index 60b7e6d..e3de6b3 100644 (file)
@@ -20,7 +20,6 @@ package converters
 import (
        "e2mgr/e2pdus"
        "e2mgr/logger"
-       "e2mgr/rNibWriter"
        "fmt"
        "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
        "strings"
@@ -35,16 +34,14 @@ func TestUnpackEndcX2SetupResponseAndExtract(t *testing.T) {
        logger, _ := logger.InitLogger(logger.InfoLevel)
 
        var testCases = []struct {
-               saveToRNib       bool
-               key              *entities.GlobalNbId
-               gnb              string
-               packedPdu        string
-               failure          error
+               key       *entities.GlobalNbId
+               gnb       string
+               packedPdu string
+               failure   error
        }{
                {
-                       saveToRNib: false, //TODO: use MOCK?
-                       key:             &entities.GlobalNbId{PlmnId:"02f829", NbId:"4a952a0a"},
-                       gnb:                     "CONNECTED [served_nr_cell_information:<nr_pci:5 cell_id:\"1e3f27:1f2e3d4ff0\" stac5g:\"3d44d3\" configured_stac:\"4e4f\" served_plmns:\"3e4e5e\" nr_mode:TDD choice_nr_mode:<tdd:<nr_freq_info:<nr_ar_fcn:1 sulInformation:<sul_ar_fcn:2 sul_transmission_bandwidth:<nrscs:SCS60 ncnrb:NRB107 > > frequency_bands:<nr_frequency_band:22 supported_sul_bands:11 > > transmission_bandwidth:<nrscs:SCS30 ncnrb:NRB133 > > > >  served_nr_cell_information:<nr_pci:5 cell_id:\"1e3f27:1f2e3d4ff0\" stac5g:\"3d44d3\" configured_stac:\"4e4f\" served_plmns:\"3e4e5e\" nr_mode:TDD choice_nr_mode:<tdd:<nr_freq_info:<nr_ar_fcn:1 sulInformation:<sul_ar_fcn:2 sul_transmission_bandwidth:<nrscs:SCS120 ncnrb:NRB121 > > frequency_bands:<nr_frequency_band:22 supported_sul_bands:11 > > transmission_bandwidth:<nrscs:SCS15 ncnrb:NRB132 > > > > nr_neighbour_infos:<nr_pci:44 nr_cgi:\"1e3f27:1f2e3d4ff0\" nr_mode:TDD choice_nr_mode:<tdd:<ar_fcn_nr_freq_info:<nr_ar_fcn:1 sulInformation:<sul_ar_fcn:2 sul_transmission_bandwidth:<nrscs:SCS15 ncnrb:NRB11 > > frequency_bands:<nr_frequency_band:22 supported_sul_bands:11 > > > > > ]",
+                       key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "4a952a0a"},
+                       gnb: "CONNECTED [served_nr_cell_information:<nr_pci:5 cell_id:\"1e3f27:1f2e3d4ff0\" stac5g:\"3d44d3\" configured_stac:\"4e4f\" served_plmns:\"3e4e5e\" nr_mode:TDD choice_nr_mode:<tdd:<nr_freq_info:<nr_ar_fcn:1 sulInformation:<sul_ar_fcn:2 sul_transmission_bandwidth:<nrscs:SCS60 ncnrb:NRB107 > > frequency_bands:<nr_frequency_band:22 supported_sul_bands:11 > > transmission_bandwidth:<nrscs:SCS30 ncnrb:NRB133 > > > >  served_nr_cell_information:<nr_pci:5 cell_id:\"1e3f27:1f2e3d4ff0\" stac5g:\"3d44d3\" configured_stac:\"4e4f\" served_plmns:\"3e4e5e\" nr_mode:TDD choice_nr_mode:<tdd:<nr_freq_info:<nr_ar_fcn:1 sulInformation:<sul_ar_fcn:2 sul_transmission_bandwidth:<nrscs:SCS120 ncnrb:NRB121 > > frequency_bands:<nr_frequency_band:22 supported_sul_bands:11 > > transmission_bandwidth:<nrscs:SCS15 ncnrb:NRB132 > > > > nr_neighbour_infos:<nr_pci:44 nr_cgi:\"1e3f27:1f2e3d4ff0\" nr_mode:TDD choice_nr_mode:<tdd:<ar_fcn_nr_freq_info:<nr_ar_fcn:1 sulInformation:<sul_ar_fcn:2 sul_transmission_bandwidth:<nrscs:SCS15 ncnrb:NRB11 > > frequency_bands:<nr_frequency_band:22 supported_sul_bands:11 > > > > > ]",
                        /*
                E2AP-PDU:
                         successfulOutcome_t
@@ -152,9 +149,8 @@ func TestUnpackEndcX2SetupResponseAndExtract(t *testing.T) {
                        */
                        packedPdu: "202400808e00000100f600808640000200fc00090002f829504a952a0a00fd007200010c0005001e3f271f2e3d4ff03d44d34e4f003e4e5e4400010000150400000a000211e148033e4e5e4c0005001e3f271f2e3d4ff03d44d34e4f003e4e5e4400010000150400000a00021a0044033e4e5e000000002c001e3f271f2e3d4ff0031e3f274400010000150400000a00020000"},
                {
-                       saveToRNib: false,
-                       key:             &entities.GlobalNbId{PlmnId:"02f829", NbId:"4a952a0a"},
-                       gnb:                    "CONNECTED [served_nr_cell_information:<nr_pci:5 cell_id:\"1e3f27:1f2e3d4ff0\" stac5g:\"3d44d3\" configured_stac:\"4e4f\" served_plmns:\"3e4e5e\" nr_mode:TDD choice_nr_mode:<tdd:<nr_freq_info:<nr_ar_fcn:1 sulInformation:<sul_ar_fcn:2 sul_transmission_bandwidth:<nrscs:SCS30 ncnrb:NRB107 > > frequency_bands:<nr_frequency_band:22 supported_sul_bands:11 > > transmission_bandwidth:<nrscs:SCS15 ncnrb:NRB121 > > > > nr_neighbour_infos:<nr_pci:44 nr_cgi:\"1e3f27:1f2e3d4ff0\" nr_mode:TDD choice_nr_mode:<tdd:<ar_fcn_nr_freq_info:<nr_ar_fcn:5 sulInformation:<sul_ar_fcn:6 sul_transmission_bandwidth:<nrscs:SCS120 ncnrb:NRB18 > > frequency_bands:<nr_frequency_band:22 supported_sul_bands:11 > > > > > ]",
+                       key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "4a952a0a"},
+                       gnb: "CONNECTED [served_nr_cell_information:<nr_pci:5 cell_id:\"1e3f27:1f2e3d4ff0\" stac5g:\"3d44d3\" configured_stac:\"4e4f\" served_plmns:\"3e4e5e\" nr_mode:TDD choice_nr_mode:<tdd:<nr_freq_info:<nr_ar_fcn:1 sulInformation:<sul_ar_fcn:2 sul_transmission_bandwidth:<nrscs:SCS30 ncnrb:NRB107 > > frequency_bands:<nr_frequency_band:22 supported_sul_bands:11 > > transmission_bandwidth:<nrscs:SCS15 ncnrb:NRB121 > > > > nr_neighbour_infos:<nr_pci:44 nr_cgi:\"1e3f27:1f2e3d4ff0\" nr_mode:TDD choice_nr_mode:<tdd:<ar_fcn_nr_freq_info:<nr_ar_fcn:5 sulInformation:<sul_ar_fcn:6 sul_transmission_bandwidth:<nrscs:SCS120 ncnrb:NRB18 > > frequency_bands:<nr_frequency_band:22 supported_sul_bands:11 > > > > > ]",
                        /*
                        E2AP-PDU:
                         successfulOutcome_t
@@ -234,8 +230,7 @@ func TestUnpackEndcX2SetupResponseAndExtract(t *testing.T) {
                        packedPdu: "2024006500000100f6005e40000200fc00090002f829504a952a0a00fd004a00004c0005001e3f271f2e3d4ff03d44d34e4f003e4e5e4400010000150400000a000209e040033e4e5e000000002c001e3f271f2e3d4ff0031e3f274400050000150400000a00061820"},
 
                {
-                       saveToRNib: false,
-                       key:             &entities.GlobalNbId{PlmnId:"02f829", NbId:"4a952a0a"},
+                       key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "4a952a0a"},
                        gnb: "CONNECTED [served_nr_cell_information:<nr_pci:5 cell_id:\"1e3f27:1f2e3d4ff0\" stac5g:\"3d44d3\" configured_stac:\"4e4f\" served_plmns:\"3e4e5e\" nr_mode:TDD choice_nr_mode:<tdd:<nr_freq_info:<nr_ar_fcn:1 sulInformation:<sul_ar_fcn:2 sul_transmission_bandwidth:<nrscs:SCS60 ncnrb:NRB107 > > frequency_bands:<nr_frequency_band:22 supported_sul_bands:11 > > transmission_bandwidth:<nrscs:SCS30 ncnrb:NRB133 > > > >  served_nr_cell_information:<nr_pci:8 cell_id:\"2e3f45:1f2e3d4ff0\" stac5g:\"4faa3c\" configured_stac:\"1a2f\" served_plmns:\"50321e\" nr_mode:TDD choice_nr_mode:<tdd:<nr_freq_info:<nr_ar_fcn:4 sulInformation:<sul_ar_fcn:8 sul_transmission_bandwidth:<nrscs:SCS120 ncnrb:NRB121 > > frequency_bands:<nr_frequency_band:7 supported_sul_bands:3 > > transmission_bandwidth:<nrscs:SCS15 ncnrb:NRB132 > > > > nr_neighbour_infos:<nr_pci:44 nr_cgi:\"1e3f27:1f2e3d4ff0\" nr_mode:TDD choice_nr_mode:<tdd:<ar_fcn_nr_freq_info:<nr_ar_fcn:1 sulInformation:<sul_ar_fcn:2 sul_transmission_bandwidth:<nrscs:SCS15 ncnrb:NRB11 > > frequency_bands:<nr_frequency_band:22 supported_sul_bands:11 > > > > > ]",
                        /*
                        E2AP-PDU:
@@ -344,9 +339,8 @@ func TestUnpackEndcX2SetupResponseAndExtract(t *testing.T) {
                        packedPdu: "202400808e00000100f600808640000200fc00090002f829504a952a0a00fd007200010c0005001e3f271f2e3d4ff03d44d34e4f003e4e5e4400010000150400000a000211e148033e4e5e4c0008002e3f451f2e3d4ff04faa3c1a2f0050321e4400040000060400000200081a00440350321e000000002c001e3f271f2e3d4ff0031e3f274400010000150400000a00020000"},
 
                {
-                       saveToRNib: false,
-                       key:             &entities.GlobalNbId{PlmnId:"02f829", NbId:"4a952a0a"},
-                       gnb:                    "CONNECTED [served_nr_cell_information:<nr_pci:5 cell_id:\"1e3f27:1f2e3d4ff0\" served_plmns:\"3e4e5e\" nr_mode:FDD choice_nr_mode:<fdd:<ul_freq_info:<nr_ar_fcn:5 frequency_bands:<nr_frequency_band:44 supported_sul_bands:33 > > dl_freq_info:<nr_ar_fcn:1 frequency_bands:<nr_frequency_band:22 supported_sul_bands:11 > > ul_transmission_bandwidth:<nrscs:SCS120 ncnrb:NRB11 > dl_transmission_bandwidth:<nrscs:SCS15 ncnrb:NRB135 > > > > nr_neighbour_infos:<nr_pci:44 nr_cgi:\"1e3f27:1f2e3d4ff0\" nr_mode:FDD choice_nr_mode:<fdd:<ular_fcn_freq_info:<nr_ar_fcn:5 frequency_bands:<nr_frequency_band:22 supported_sul_bands:11 > > dlar_fcn_freq_info:<nr_ar_fcn:1 frequency_bands:<nr_frequency_band:22 supported_sul_bands:11 > > > > > ]",
+                       key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "4a952a0a"},
+                       gnb: "CONNECTED [served_nr_cell_information:<nr_pci:5 cell_id:\"1e3f27:1f2e3d4ff0\" served_plmns:\"3e4e5e\" nr_mode:FDD choice_nr_mode:<fdd:<ul_freq_info:<nr_ar_fcn:5 frequency_bands:<nr_frequency_band:44 supported_sul_bands:33 > > dl_freq_info:<nr_ar_fcn:1 frequency_bands:<nr_frequency_band:22 supported_sul_bands:11 > > ul_transmission_bandwidth:<nrscs:SCS120 ncnrb:NRB11 > dl_transmission_bandwidth:<nrscs:SCS15 ncnrb:NRB135 > > > > nr_neighbour_infos:<nr_pci:44 nr_cgi:\"1e3f27:1f2e3d4ff0\" nr_mode:FDD choice_nr_mode:<fdd:<ular_fcn_freq_info:<nr_ar_fcn:5 frequency_bands:<nr_frequency_band:22 supported_sul_bands:11 > > dlar_fcn_freq_info:<nr_ar_fcn:1 frequency_bands:<nr_frequency_band:22 supported_sul_bands:11 > > > > > ]",
                        /*
                        E2AP-PDU:
                         successfulOutcome_t
@@ -435,9 +429,8 @@ func TestUnpackEndcX2SetupResponseAndExtract(t *testing.T) {
 
 
                {
-                       saveToRNib: false,
-                       key:             &entities.GlobalNbId{PlmnId:"04a5c1", NbId:"4fc52bff"},
-                       gnb:                    "CONNECTED [served_nr_cell_information:<nr_pci:9 cell_id:\"aeafa7:2a3e3b4cd0\" stac5g:\"7d4773\" configured_stac:\"477f\" served_plmns:\"7e7e7e\" nr_mode:TDD choice_nr_mode:<tdd:<nr_freq_info:<nr_ar_fcn:8 sulInformation:<sul_ar_fcn:9 sul_transmission_bandwidth:<nrscs:SCS15 ncnrb:NRB121 > > frequency_bands:<nr_frequency_band:22 supported_sul_bands:11 > > transmission_bandwidth:<nrscs:SCS60 ncnrb:NRB18 > > > > nr_neighbour_infos:<nr_pci:44 nr_cgi:\"5a5ff1:2a3e3b4cd0\" nr_mode:TDD choice_nr_mode:<tdd:<ar_fcn_nr_freq_info:<nr_ar_fcn:5 sulInformation:<sul_ar_fcn:6 sul_transmission_bandwidth:<nrscs:SCS30 ncnrb:NRB18 > > frequency_bands:<nr_frequency_band:4 supported_sul_bands:3 > > > > > nr_neighbour_infos:<nr_pci:9 nr_cgi:\"5d5caa:af3e354ac0\" nr_mode:TDD choice_nr_mode:<tdd:<ar_fcn_nr_freq_info:<nr_ar_fcn:7 sulInformation:<sul_ar_fcn:8 sul_transmission_bandwidth:<nrscs:SCS120 ncnrb:NRB25 > > frequency_bands:<nr_frequency_band:3 supported_sul_bands:1 > > > > > ]",
+                       key: &entities.GlobalNbId{PlmnId: "04a5c1", NbId: "4fc52bff"},
+                       gnb: "CONNECTED [served_nr_cell_information:<nr_pci:9 cell_id:\"aeafa7:2a3e3b4cd0\" stac5g:\"7d4773\" configured_stac:\"477f\" served_plmns:\"7e7e7e\" nr_mode:TDD choice_nr_mode:<tdd:<nr_freq_info:<nr_ar_fcn:8 sulInformation:<sul_ar_fcn:9 sul_transmission_bandwidth:<nrscs:SCS15 ncnrb:NRB121 > > frequency_bands:<nr_frequency_band:22 supported_sul_bands:11 > > transmission_bandwidth:<nrscs:SCS60 ncnrb:NRB18 > > > > nr_neighbour_infos:<nr_pci:44 nr_cgi:\"5a5ff1:2a3e3b4cd0\" nr_mode:TDD choice_nr_mode:<tdd:<ar_fcn_nr_freq_info:<nr_ar_fcn:5 sulInformation:<sul_ar_fcn:6 sul_transmission_bandwidth:<nrscs:SCS30 ncnrb:NRB18 > > frequency_bands:<nr_frequency_band:4 supported_sul_bands:3 > > > > > nr_neighbour_infos:<nr_pci:9 nr_cgi:\"5d5caa:af3e354ac0\" nr_mode:TDD choice_nr_mode:<tdd:<ar_fcn_nr_freq_info:<nr_ar_fcn:7 sulInformation:<sul_ar_fcn:8 sul_transmission_bandwidth:<nrscs:SCS120 ncnrb:NRB25 > > frequency_bands:<nr_frequency_band:3 supported_sul_bands:1 > > > > > ]",
                        /*
                        E2AP-PDU:
                         successfulOutcome_t
@@ -536,7 +529,7 @@ func TestUnpackEndcX2SetupResponseAndExtract(t *testing.T) {
                        */
                        packedPdu: "202400808200000100f6007b40000200fc00090004a5c1504fc52bff00fd006700004c000900aeafa72a3e3b4cd07d4773477f007e7e7e4400080000150400000a0009020204037e7e7e000100002c005a5ff12a3e3b4cd0035a5ff144000500000304000002000608200009005d5caaaf3e354ac0035d5caa4400070000020400000000081860"},
 
-               { key: &entities.GlobalNbId{PlmnId:"02f829", NbId:"4a952aaa"},
+               {key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "4a952aaa"},
                        /*
                        E2AP-PDU:
                         successfulOutcome_t
@@ -562,7 +555,6 @@ func TestUnpackEndcX2SetupResponseAndExtract(t *testing.T) {
                        failure: fmt.Errorf("getList for path [successfulOutcome_t ENDCX2SetupResponse protocolIEs_t ProtocolIE_Container_elm RespondingNodeType-EndcX2Setup respond_en_gNB_t ProtocolIE_Container_elm ServedNRcellsENDCX2ManagementList ServedNRcellsENDCX2ManagementList_elm servedNRCellInfo_t nrpCI_t] failed, rc = 1" /*NO_ITEMS*/),},
        }
 
-    initDb_f := true
        for _, tc := range testCases {
                t.Run(tc.packedPdu, func(t *testing.T) {
 
@@ -580,9 +572,9 @@ func TestUnpackEndcX2SetupResponseAndExtract(t *testing.T) {
                                if tc.failure == nil {
                                        t.Errorf("want: success, got: error: %v\n", err)
                                } else {
-                                               if strings.Compare(err.Error(), tc.failure.Error()) != 0 {
-                                                       t.Errorf("want: %s, got: %s", tc.failure, err)
-                                               }
+                                       if strings.Compare(err.Error(), tc.failure.Error()) != 0 {
+                                               t.Errorf("want: %s, got: %s", tc.failure, err)
+                                       }
                                }
                        }
 
@@ -591,7 +583,7 @@ func TestUnpackEndcX2SetupResponseAndExtract(t *testing.T) {
                                        t.Errorf("want: key=%v, got: empty key", tc.key)
                                }
                        } else {
-                               if strings.Compare(key.PlmnId, tc.key.PlmnId) != 0 || strings.Compare(key.NbId, tc.key.NbId) != 0{
+                               if strings.Compare(key.PlmnId, tc.key.PlmnId) != 0 || strings.Compare(key.NbId, tc.key.NbId) != 0 {
                                        t.Errorf("want: key=%v, got: %v", tc.key, key)
                                }
                        }
@@ -603,31 +595,13 @@ func TestUnpackEndcX2SetupResponseAndExtract(t *testing.T) {
                        } else {
                                nb := &entities.NodebInfo{}
                                nb.ConnectionStatus = entities.ConnectionStatus_CONNECTED
-                               nb.Configuration = &entities.NodebInfo_Gnb{Gnb:gnb}
+                               nb.Configuration = &entities.NodebInfo_Gnb{Gnb: gnb}
                                gnbStr := fmt.Sprintf("%s %s", nb.ConnectionStatus, gnb.ServedNrCells)
                                if !strings.EqualFold(gnbStr, tc.gnb) {
                                        t.Errorf("want: enb=%s, got: %s", tc.gnb, gnbStr)
                                }
 
-                               // Save to rNib
-                               if tc.saveToRNib {
-                                       if initDb_f {
-                                               rNibWriter.Init("e2Manager", 1)
-                                               initDb_f = false
-                                       }
-                                       nbIdentity := &entities.NbIdentity{InventoryName:"RanName", GlobalNbId:key}
-                                       if rNibErr := rNibWriter.GetRNibWriter().SaveNodeb(nbIdentity, nb); rNibErr != nil {
-                                               if tc.failure == nil {
-                                                       t.Errorf("rNibWriter failed to save ENB. Error: %v\n", rNibErr.Error())
-                                               } else {
-                                                       if strings.Compare(rNibErr.Error(), tc.failure.Error()) != 0 {
-                                                               t.Errorf("want: %s, got: %s", tc.failure, rNibErr.Error())
-                                                       }
-                                               }
-                                       }
-                               }
                        }
                })
        }
 }
-
index 3bc099b..787dd19 100644 (file)
@@ -20,7 +20,6 @@ package converters
 import (
        "e2mgr/e2pdus"
        "e2mgr/logger"
-       "e2mgr/rNibWriter"
        "fmt"
        "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
        "strings"
@@ -35,14 +34,12 @@ func TestUnpackX2SetupFailureResponseAndExtract(t *testing.T) {
        logger, _ := logger.InitLogger(logger.InfoLevel)
 
        var testCases = []struct {
-               saveToRNib       bool
-               response              string
-               packedPdu        string
-               failure          error
+               response  string
+               packedPdu string
+               failure   error
        }{
                {
-                       saveToRNib: false, //TODO: use MOCK?
-                       response:       "CONNECTED_SETUP_FAILED network_layer_cause:HANDOVER_DESIRABLE_FOR_RADIO_REASONS time_to_wait:V1S criticality_diagnostics:<procedure_code:33 triggering_message:UNSUCCESSFUL_OUTCOME procedure_criticality:NOTIFY information_element_criticality_diagnostics:<ie_criticality:REJECT ie_id:128 type_of_error:MISSING > > ",
+                       response: "CONNECTED_SETUP_FAILED network_layer_cause:HANDOVER_DESIRABLE_FOR_RADIO_REASONS time_to_wait:V1S criticality_diagnostics:<procedure_code:33 triggering_message:UNSUCCESSFUL_OUTCOME procedure_criticality:NOTIFY information_element_criticality_diagnostics:<ie_criticality:REJECT ie_id:128 type_of_error:MISSING > > ",
                        /*
                        E2AP-PDU:
                         unsuccessfulOutcome_t
@@ -74,8 +71,7 @@ func TestUnpackX2SetupFailureResponseAndExtract(t *testing.T) {
                        */
                        packedPdu: "4006001a0000030005400200000016400100001140087821a00000008040"},
                {
-                       saveToRNib: false,
-                       response:       "CONNECTED_SETUP_FAILED transport_layer_cause:TRANSPORT_RESOURCE_UNAVAILABLE criticality_diagnostics:<procedure_code:33 triggering_message:UNSUCCESSFUL_OUTCOME procedure_criticality:NOTIFY information_element_criticality_diagnostics:<ie_criticality:REJECT ie_id:128 type_of_error:MISSING > > ",
+                       response: "CONNECTED_SETUP_FAILED transport_layer_cause:TRANSPORT_RESOURCE_UNAVAILABLE criticality_diagnostics:<procedure_code:33 triggering_message:UNSUCCESSFUL_OUTCOME procedure_criticality:NOTIFY information_element_criticality_diagnostics:<ie_criticality:REJECT ie_id:128 type_of_error:MISSING > > ",
                        /*
                        E2AP-PDU:
                         unsuccessfulOutcome_t
@@ -103,8 +99,7 @@ func TestUnpackX2SetupFailureResponseAndExtract(t *testing.T) {
                        */
                        packedPdu: "400600140000020005400120001140087821a00000008040"},
                {
-                       saveToRNib: false,
-                       response:       "CONNECTED_SETUP_FAILED protocol_cause:ABSTRACT_SYNTAX_ERROR_IGNORE_AND_NOTIFY criticality_diagnostics:<triggering_message:UNSUCCESSFUL_OUTCOME procedure_criticality:NOTIFY information_element_criticality_diagnostics:<ie_criticality:REJECT ie_id:128 type_of_error:MISSING > > ",
+                       response: "CONNECTED_SETUP_FAILED protocol_cause:ABSTRACT_SYNTAX_ERROR_IGNORE_AND_NOTIFY criticality_diagnostics:<triggering_message:UNSUCCESSFUL_OUTCOME procedure_criticality:NOTIFY information_element_criticality_diagnostics:<ie_criticality:REJECT ie_id:128 type_of_error:MISSING > > ",
                        /*
                        E2AP-PDU:
                         unsuccessfulOutcome_t
@@ -132,8 +127,7 @@ func TestUnpackX2SetupFailureResponseAndExtract(t *testing.T) {
                        packedPdu: "400600130000020005400144001140073a800000008040"},
 
                {
-                       saveToRNib: false,
-                       response:       "CONNECTED_SETUP_FAILED miscellaneous_cause:UNSPECIFIED criticality_diagnostics:<procedure_criticality:NOTIFY information_element_criticality_diagnostics:<ie_criticality:REJECT ie_id:128 type_of_error:MISSING > > ",
+                       response: "CONNECTED_SETUP_FAILED miscellaneous_cause:UNSPECIFIED criticality_diagnostics:<procedure_criticality:NOTIFY information_element_criticality_diagnostics:<ie_criticality:REJECT ie_id:128 type_of_error:MISSING > > ",
                        /*
                        E2AP-PDU:
                         unsuccessfulOutcome_t
@@ -160,8 +154,7 @@ func TestUnpackX2SetupFailureResponseAndExtract(t *testing.T) {
                        packedPdu: "400600120000020005400168001140061a0000008040"},
 
                {
-                       saveToRNib: false,
-                       response:       "CONNECTED_SETUP_FAILED miscellaneous_cause:UNSPECIFIED criticality_diagnostics:<information_element_criticality_diagnostics:<ie_criticality:REJECT ie_id:128 type_of_error:MISSING > information_element_criticality_diagnostics:<ie_criticality:NOTIFY ie_id:255 type_of_error:NOT_UNDERSTOOD > > ",
+                       response: "CONNECTED_SETUP_FAILED miscellaneous_cause:UNSPECIFIED criticality_diagnostics:<information_element_criticality_diagnostics:<ie_criticality:REJECT ie_id:128 type_of_error:MISSING > information_element_criticality_diagnostics:<ie_criticality:NOTIFY ie_id:255 type_of_error:NOT_UNDERSTOOD > > ",
                        /*
                        E2AP-PDU:
                         unsuccessfulOutcome_t
@@ -192,8 +185,7 @@ func TestUnpackX2SetupFailureResponseAndExtract(t *testing.T) {
 
 
                {
-                       saveToRNib: false,
-                       response:       "CONNECTED_SETUP_FAILED miscellaneous_cause:UNSPECIFIED criticality_diagnostics:<procedure_code:33 > ",
+                       response: "CONNECTED_SETUP_FAILED miscellaneous_cause:UNSPECIFIED criticality_diagnostics:<procedure_code:33 > ",
                        /*
                        E2AP-PDU:
                         unsuccessfulOutcome_t
@@ -215,8 +207,7 @@ func TestUnpackX2SetupFailureResponseAndExtract(t *testing.T) {
                        packedPdu: "4006000e0000020005400168001140024021"},
 
                {
-                       saveToRNib: false,
-                       response:       "CONNECTED_SETUP_FAILED miscellaneous_cause:UNSPECIFIED ",
+                       response: "CONNECTED_SETUP_FAILED miscellaneous_cause:UNSPECIFIED ",
                        /*
                        E2AP-PDU:
                         unsuccessfulOutcome_t
@@ -232,7 +223,6 @@ func TestUnpackX2SetupFailureResponseAndExtract(t *testing.T) {
                        */
                        packedPdu: "400600080000010005400168"},
                {
-                       saveToRNib: false,
                        response: "CONNECTED_SETUP_FAILED network_layer_cause:HANDOVER_DESIRABLE_FOR_RADIO_REASONS time_to_wait:V1S criticality_diagnostics:<procedure_code:33 triggering_message:UNSUCCESSFUL_OUTCOME procedure_criticality:NOTIFY information_element_criticality_diagnostics:<ie_criticality:REJECT ie_id:128 type_of_error:MISSING > > ",
                        /*
                                E2AP-PDU:
@@ -268,7 +258,6 @@ func TestUnpackX2SetupFailureResponseAndExtract(t *testing.T) {
                },
        }
 
-    initDb_f := true
        for _, tc := range testCases {
                t.Run(tc.packedPdu, func(t *testing.T) {
 
@@ -297,32 +286,14 @@ func TestUnpackX2SetupFailureResponseAndExtract(t *testing.T) {
                        } else {
                                nb := &entities.NodebInfo{}
                                nb.ConnectionStatus = entities.ConnectionStatus_CONNECTED_SETUP_FAILED
-                               nb.SetupFailure  = response
+                               nb.SetupFailure = response
                                nb.FailureType = entities.Failure_X2_SETUP_FAILURE
                                respStr := fmt.Sprintf("%s %s", nb.ConnectionStatus, response)
                                if !strings.EqualFold(respStr, tc.response) {
                                        t.Errorf("want: response=[%s], got: [%s]", tc.response, respStr)
                                }
 
-                               // Save to rNib
-                               if tc.saveToRNib {
-                                       if initDb_f {
-                                               rNibWriter.Init("e2Manager", 1)
-                                               initDb_f = false
-                                       }
-                                       nbIdentity := &entities.NbIdentity{InventoryName:"RanName"}
-                                       if rNibErr := rNibWriter.GetRNibWriter().SaveNodeb(nbIdentity, nb); rNibErr != nil {
-                                               if tc.failure == nil {
-                                                       t.Errorf("rNibWriter failed to save ENB. Error: %s\n", rNibErr.Error())
-                                               } else {
-                                                       if strings.Compare(rNibErr.Error(), tc.failure.Error()) != 0 {
-                                                               t.Errorf("want: %s, got: %s", tc.failure, rNibErr.Error())
-                                                       }
-                                               }
-                                       }
-                               }
                        }
                })
        }
 }
-
index 7ab91d1..1cd3f20 100644 (file)
@@ -20,7 +20,6 @@ package converters
 import (
        "e2mgr/e2pdus"
        "e2mgr/logger"
-       "e2mgr/rNibWriter"
        "fmt"
        "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
        "strings"
@@ -35,16 +34,14 @@ func TestUnpackX2SetupResponseAndExtract(t *testing.T) {
        logger, _ := logger.InitLogger(logger.InfoLevel)
 
        var testCases = []struct {
-               saveToRNib       bool
-               key              *entities.GlobalNbId
-               enb              string
-               packedPdu        string
-               failure          error
+               key       *entities.GlobalNbId
+               enb       string
+               packedPdu string
+               failure   error
        }{
                {
-                       saveToRNib: false, //TODO: use MOCK?
-                       key:             &entities.GlobalNbId{PlmnId:"02f829", NbId:"007a80"},
-                       enb:                     "CONNECTED MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<fdd:<ulear_fcn:1 dlear_fcn:1 ul_transmission_bandwidth:BW50 dl_transmission_bandwidth:BW50 > > eutra_mode:FDD ] []",
+                       key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "007a80"},
+                       enb: "CONNECTED MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<fdd:<ulear_fcn:1 dlear_fcn:1 ul_transmission_bandwidth:BW50 dl_transmission_bandwidth:BW50 > > eutra_mode:FDD ] []",
                        /*
                                X2AP-PDU:
                                 successfulOutcome_t
@@ -81,7 +78,7 @@ func TestUnpackX2SetupResponseAndExtract(t *testing.T) {
                        */
                        packedPdu: "2006002a000002001500080002f82900007a8000140017000000630002f8290007ab50102002f829000001000133"},
                {
-                       key:             &entities.GlobalNbId{PlmnId:"02f829", NbId:"007a80"},
+                       key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "007a80"},
                        enb: "CONNECTED MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<fdd:<ulear_fcn:1 dlear_fcn:1 ul_transmission_bandwidth:BW50 dl_transmission_bandwidth:BW50 > > eutra_mode:FDD  pci:100 cell_id:\"02f929:0007ac50\" tac:\"0203\" broadcast_plmns:\"02f829\" broadcast_plmns:\"02f929\" choice_eutra_mode:<fdd:<ulear_fcn:2 dlear_fcn:3 ul_transmission_bandwidth:BW75 dl_transmission_bandwidth:BW75 > > eutra_mode:FDD ] []",
                        /*
                                X2AP-PDU:
@@ -135,7 +132,7 @@ func TestUnpackX2SetupResponseAndExtract(t *testing.T) {
                        */
                        packedPdu: "20060043000002001500080002f82900007a8000140030010000630002f8290007ab50102002f8290000010001330000640002f9290007ac50203202f82902f929000002000344"},
 
-               { key: &entities.GlobalNbId{PlmnId:"02f829", NbId:"007a80"},
+               {key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "007a80"},
                        enb: "CONNECTED MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<fdd:<ulear_fcn:2 dlear_fcn:1 ul_transmission_bandwidth:BW50 dl_transmission_bandwidth:BW50 > > eutra_mode:FDD ] []",
                        /*
                                X2AP-PDU:
@@ -177,7 +174,7 @@ func TestUnpackX2SetupResponseAndExtract(t *testing.T) {
                                            EARFCNExtension = 0x2
                        */
                        packedPdu: "20060033000002001500080002f82900007a8000140020000000630002f8290007ab50102002f8291000010001330000005f0003800102"},
-               {key: &entities.GlobalNbId{PlmnId:"02f829", NbId:"007a80"},
+               {key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "007a80"},
                        enb: "CONNECTED MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<fdd:<ulear_fcn:1 dlear_fcn:1 ul_transmission_bandwidth:BW50 dl_transmission_bandwidth:BW50 > > eutra_mode:FDD ] [02f729:0203 02f929:0304]",
                        /*
                                X2AP-PDU:
@@ -225,7 +222,7 @@ func TestUnpackX2SetupResponseAndExtract(t *testing.T) {
                        */
                        packedPdu: "2006003a000003001500080002f82900007a8000140017000000630002f8290007ab50102002f8290000010001330018000c1002f72902030002f9290304"},
 
-               { key: &entities.GlobalNbId{PlmnId:"02f829", NbId:"007a80"},
+               {key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "007a80"},
                        enb: "CONNECTED MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<tdd:<ear_fcn:1 transmission_bandwidth:BW50 subframe_assignment:SA2 special_subframe_info:<special_subframe_patterns:SSP4 cyclic_prefix_dl:NORMAL cyclic_prefix_ul:EXTENDED > > > eutra_mode:TDD ] []",
                        /*
                                X2AP-PDU:
@@ -265,7 +262,7 @@ func TestUnpackX2SetupResponseAndExtract(t *testing.T) {
                                           cyclicPrefixUL_t = 0x1
                        */
                        packedPdu: "2006002a000002001500080002f82900007a8000140017000000630002f8290007ab50102002f829400001320820"},
-               { key: &entities.GlobalNbId{PlmnId:"02f829", NbId:"007a80"},
+               {key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "007a80"},
                        enb: "CONNECTED MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<tdd:<ear_fcn:1 transmission_bandwidth:BW50 subframe_assignment:SA2 special_subframe_info:<special_subframe_patterns:SSP4 cyclic_prefix_dl:EXTENDED cyclic_prefix_ul:NORMAL > additional_special_subframe_info:<additional_special_subframe_patterns:SSP9 cyclic_prefix_dl:NORMAL cyclic_prefix_ul:EXTENDED > > > eutra_mode:TDD ] []",
                        /*
                                X2AP-PDU:
@@ -314,7 +311,7 @@ func TestUnpackX2SetupResponseAndExtract(t *testing.T) {
                        */
                        packedPdu: "20060032000002001500080002f82900007a800014001f000000630002f8290007ab50102002f8295000013208800000006140021220"},
 
-               {key: &entities.GlobalNbId{PlmnId:"02f829", NbId:"007a80"},
+               {key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "007a80"},
                        enb: "CONNECTED MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<tdd:<ear_fcn:2 transmission_bandwidth:BW50 subframe_assignment:SA2 special_subframe_info:<special_subframe_patterns:SSP4 cyclic_prefix_dl:EXTENDED cyclic_prefix_ul:NORMAL > > > eutra_mode:TDD ] []",
                        /*
                                X2AP-PDU:
@@ -360,7 +357,7 @@ func TestUnpackX2SetupResponseAndExtract(t *testing.T) {
                        */
                        packedPdu: "20060033000002001500080002f82900007a8000140020000000630002f8290007ab50102002f8295000013208800000005e0003800102"},
 
-               {key: &entities.GlobalNbId{PlmnId:"02f829", NbId:"007a80"},
+               {key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "007a80"},
                        enb: "CONNECTED MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<tdd:<ear_fcn:1 transmission_bandwidth:BW50 subframe_assignment:SA2 special_subframe_info:<special_subframe_patterns:SSP4 cyclic_prefix_dl:EXTENDED cyclic_prefix_ul:NORMAL > additional_special_subframe_extension_info:<additional_special_subframe_patterns_extension:SSP10 cyclic_prefix_dl:NORMAL cyclic_prefix_ul:NORMAL > > > eutra_mode:TDD ] []",
                        /*
                                X2AP-PDU:
@@ -409,7 +406,7 @@ func TestUnpackX2SetupResponseAndExtract(t *testing.T) {
                        */
                        packedPdu: "20060031000002001500080002f82900007a800014001e000000630002f8290007ab50102002f829500001320880000000b3400100"},
 
-               {key: &entities.GlobalNbId{PlmnId:"02f829", NbId:"007a80"},
+               {key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "007a80"},
                        enb: "CONNECTED MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<tdd:<ear_fcn:2 transmission_bandwidth:BW50 subframe_assignment:SA2 special_subframe_info:<special_subframe_patterns:SSP4 cyclic_prefix_dl:EXTENDED cyclic_prefix_ul:NORMAL > additional_special_subframe_info:<additional_special_subframe_patterns:SSP9 cyclic_prefix_dl:NORMAL cyclic_prefix_ul:EXTENDED > additional_special_subframe_extension_info:<additional_special_subframe_patterns_extension:SSP10 cyclic_prefix_dl:NORMAL cyclic_prefix_ul:NORMAL > > > eutra_mode:TDD ] []",
                        /*
                                X2AP-PDU:
@@ -470,7 +467,7 @@ func TestUnpackX2SetupResponseAndExtract(t *testing.T) {
                        */
                        packedPdu: "2006003e000002001500080002f82900007a800014002b000000630002f8290007ab50102002f829500001320880000200b3400100006140021220005e0003800102"},
 
-               {key: &entities.GlobalNbId{PlmnId:"02f829", NbId:"007a80b0"},
+               {key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "007a80b0"},
                        enb: "CONNECTED HOME_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<fdd:<ulear_fcn:1 dlear_fcn:1 ul_transmission_bandwidth:BW50 dl_transmission_bandwidth:BW50 > > eutra_mode:FDD number_of_antenna_ports:AN1  pci:100 cell_id:\"02f929:0007ac50\" tac:\"0203\" broadcast_plmns:\"02f829\" broadcast_plmns:\"02f929\" choice_eutra_mode:<fdd:<ulear_fcn:2 dlear_fcn:3 ul_transmission_bandwidth:BW75 dl_transmission_bandwidth:BW75 > > eutra_mode:FDD ] []",
                        /*
                                X2AP-PDU:
@@ -530,144 +527,144 @@ func TestUnpackX2SetupResponseAndExtract(t *testing.T) {
                        */
                        packedPdu: "2006004b000002001500090002f82940007a80b000140037010800630002f8290007ab50102002f829000001000133000000294001000000640002f9290007ac50203202f82902f929000002000344"},
 
-               {key:  &entities.GlobalNbId{PlmnId:"02f829", NbId:"007a40"},
-               enb: "CONNECTED SHORT_MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<fdd:<ulear_fcn:1 dlear_fcn:1 ul_transmission_bandwidth:BW50 dl_transmission_bandwidth:BW50 > > eutra_mode:FDD number_of_antenna_ports:AN1  pci:100 cell_id:\"02f929:0007ac50\" tac:\"0203\" broadcast_plmns:\"02f829\" broadcast_plmns:\"02f929\" choice_eutra_mode:<fdd:<ulear_fcn:2 dlear_fcn:3 ul_transmission_bandwidth:BW75 dl_transmission_bandwidth:BW75 > > eutra_mode:FDD prach_configuration:<root_sequence_index:15 zero_correlation_zone_configuration:7 high_speed_flag:true prach_frequency_offset:30 > ] []",
-               /*
-                       X2AP-PDU:
-                        successfulOutcome_t
-                         procedureCode_t = 0x6
-                         criticality_t = 0
-                         X2SetupResponse
-                          protocolIEs_t:
-                           ProtocolIE_Container_elm
-                            id_t = 0x15
-                            criticality_t = 0
-                            GlobalENB-ID
-                             pLMN_Identity_t = 02 f8 29
-                             eNB_ID_t:
-                              short_Macro_eNB_ID_t = 00 7a 40 (18 bits)
-                           ProtocolIE_Container_elm
-                            id_t = 0x14
-                            criticality_t = 0
-                            ServedCells:
-                             ServedCells_elm
-                              servedCellInfo_t
-                               pCI_t = 0x63
-                               cellId_t
-                                pLMN_Identity_t = 02 f8 29
-                                eUTRANcellIdentifier_t = 00 07 ab 50 (28 bits)
-                               tAC_t = 01 02
-                               broadcastPLMNs_t:
-                                BroadcastPLMNs_Item_elm = 02 f8 29
-                               eUTRA_Mode_Info_t:
-                                fDD_t
-                                 uL_EARFCN_t = 0x1
-                                 dL_EARFCN_t = 0x1
-                                 uL_Transmission_Bandwidth_t = 0x3
-                                 dL_Transmission_Bandwidth_t = 0x3
-                               iE_Extensions_t:
-                                ProtocolExtensionContainer_elm
-                                 id_t = 0x29
-                                 criticality_t = 0x1
-                                 Number-of-Antennaports = 0
-                             ServedCells_elm
-                              servedCellInfo_t
-                               pCI_t = 0x64
-                               cellId_t
-                                pLMN_Identity_t = 02 f9 29
-                                eUTRANcellIdentifier_t = 00 07 ac 50 (28 bits)
-                               tAC_t = 02 03
-                               broadcastPLMNs_t:
-                                BroadcastPLMNs_Item_elm = 02 f8 29
-                                BroadcastPLMNs_Item_elm = 02 f9 29
-                               eUTRA_Mode_Info_t:
-                                fDD_t
-                                 uL_EARFCN_t = 0x2
-                                 dL_EARFCN_t = 0x3
-                                 uL_Transmission_Bandwidth_t = 0x4
-                                 dL_Transmission_Bandwidth_t = 0x4
-                               iE_Extensions_t:
-                                ProtocolExtensionContainer_elm
-                                 id_t = 0x37
-                                 criticality_t = 0x1
-                                 PRACH-Configuration
-                                  rootSequenceIndex_t = 0xf
-                                  zeroCorrelationIndex_t = 0x7
-                                  highSpeedFlag_t = true
-                                  prach_FreqOffset_t = 0x1e
+               {key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "007a40"},
+                       enb: "CONNECTED SHORT_MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<fdd:<ulear_fcn:1 dlear_fcn:1 ul_transmission_bandwidth:BW50 dl_transmission_bandwidth:BW50 > > eutra_mode:FDD number_of_antenna_ports:AN1  pci:100 cell_id:\"02f929:0007ac50\" tac:\"0203\" broadcast_plmns:\"02f829\" broadcast_plmns:\"02f929\" choice_eutra_mode:<fdd:<ulear_fcn:2 dlear_fcn:3 ul_transmission_bandwidth:BW75 dl_transmission_bandwidth:BW75 > > eutra_mode:FDD prach_configuration:<root_sequence_index:15 zero_correlation_zone_configuration:7 high_speed_flag:true prach_frequency_offset:30 > ] []",
+                       /*
+                               X2AP-PDU:
+                                successfulOutcome_t
+                                 procedureCode_t = 0x6
+                                 criticality_t = 0
+                                 X2SetupResponse
+                                  protocolIEs_t:
+                                       ProtocolIE_Container_elm
+                                        id_t = 0x15
+                                        criticality_t = 0
+                                        GlobalENB-ID
+                                         pLMN_Identity_t = 02 f8 29
+                                         eNB_ID_t:
+                                          short_Macro_eNB_ID_t = 00 7a 40 (18 bits)
+                                       ProtocolIE_Container_elm
+                                        id_t = 0x14
+                                        criticality_t = 0
+                                        ServedCells:
+                                         ServedCells_elm
+                                          servedCellInfo_t
+                                               pCI_t = 0x63
+                                               cellId_t
+                                                pLMN_Identity_t = 02 f8 29
+                                                eUTRANcellIdentifier_t = 00 07 ab 50 (28 bits)
+                                               tAC_t = 01 02
+                                               broadcastPLMNs_t:
+                                                BroadcastPLMNs_Item_elm = 02 f8 29
+                                               eUTRA_Mode_Info_t:
+                                                fDD_t
+                                                 uL_EARFCN_t = 0x1
+                                                 dL_EARFCN_t = 0x1
+                                                 uL_Transmission_Bandwidth_t = 0x3
+                                                 dL_Transmission_Bandwidth_t = 0x3
+                                               iE_Extensions_t:
+                                                ProtocolExtensionContainer_elm
+                                                 id_t = 0x29
+                                                 criticality_t = 0x1
+                                                 Number-of-Antennaports = 0
+                                         ServedCells_elm
+                                          servedCellInfo_t
+                                               pCI_t = 0x64
+                                               cellId_t
+                                                pLMN_Identity_t = 02 f9 29
+                                                eUTRANcellIdentifier_t = 00 07 ac 50 (28 bits)
+                                               tAC_t = 02 03
+                                               broadcastPLMNs_t:
+                                                BroadcastPLMNs_Item_elm = 02 f8 29
+                                                BroadcastPLMNs_Item_elm = 02 f9 29
+                                               eUTRA_Mode_Info_t:
+                                                fDD_t
+                                                 uL_EARFCN_t = 0x2
+                                                 dL_EARFCN_t = 0x3
+                                                 uL_Transmission_Bandwidth_t = 0x4
+                                                 dL_Transmission_Bandwidth_t = 0x4
+                                               iE_Extensions_t:
+                                                ProtocolExtensionContainer_elm
+                                                 id_t = 0x37
+                                                 criticality_t = 0x1
+                                                 PRACH-Configuration
+                                                  rootSequenceIndex_t = 0xf
+                                                  zeroCorrelationIndex_t = 0x7
+                                                  highSpeedFlag_t = true
+                                                  prach_FreqOffset_t = 0x1e
 
-               */
-               packedPdu: "20060056000002001500090002f8298003007a4000140042010800630002f8290007ab50102002f829000001000133000000294001000800640002f9290007ac50203202f82902f92900000200034400000037400500000f79e0"},
+                       */
+                       packedPdu: "20060056000002001500090002f8298003007a4000140042010800630002f8290007ab50102002f829000001000133000000294001000800640002f9290007ac50203202f82902f92900000200034400000037400500000f79e0"},
 
-               {key: &entities.GlobalNbId{PlmnId:"02f829", NbId:"007a40"},
-               enb: "CONNECTED SHORT_MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<fdd:<ulear_fcn:1 dlear_fcn:1 ul_transmission_bandwidth:BW50 dl_transmission_bandwidth:BW50 > > eutra_mode:FDD number_of_antenna_ports:AN1  pci:100 cell_id:\"02f929:0007ac50\" tac:\"0203\" broadcast_plmns:\"02f829\" broadcast_plmns:\"02f929\" choice_eutra_mode:<fdd:<ulear_fcn:2 dlear_fcn:3 ul_transmission_bandwidth:BW75 dl_transmission_bandwidth:BW75 > > eutra_mode:FDD mbsfn_subframe_infos:<radioframe_allocation_period:N8 radioframe_allocation_offset:3 subframe_allocation:\"28\" subframe_allocation_type:ONE_FRAME > ] []",
-               /*
-                       X2AP-PDU:
-                        successfulOutcome_t
-                         procedureCode_t = 0x6
-                         criticality_t = 0
-                         X2SetupResponse
-                          protocolIEs_t:
-                           ProtocolIE_Container_elm
-                            id_t = 0x15
-                            criticality_t = 0
-                            GlobalENB-ID
-                             pLMN_Identity_t = 02 f8 29
-                             eNB_ID_t:
-                              short_Macro_eNB_ID_t = 00 7a 40 (18 bits)
-                           ProtocolIE_Container_elm
-                            id_t = 0x14
-                            criticality_t = 0
-                            ServedCells:
-                             ServedCells_elm
-                              servedCellInfo_t
-                               pCI_t = 0x63
-                               cellId_t
-                                pLMN_Identity_t = 02 f8 29
-                                eUTRANcellIdentifier_t = 00 07 ab 50 (28 bits)
-                               tAC_t = 01 02
-                               broadcastPLMNs_t:
-                                BroadcastPLMNs_Item_elm = 02 f8 29
-                               eUTRA_Mode_Info_t:
-                                fDD_t
-                                 uL_EARFCN_t = 0x1
-                                 dL_EARFCN_t = 0x1
-                                 uL_Transmission_Bandwidth_t = 0x3
-                                 dL_Transmission_Bandwidth_t = 0x3
-                               iE_Extensions_t:
-                                ProtocolExtensionContainer_elm
-                                 id_t = 0x29
-                                 criticality_t = 0x1
-                                 Number-of-Antennaports = 0
-                             ServedCells_elm
-                              servedCellInfo_t
-                               pCI_t = 0x64
-                               cellId_t
-                                pLMN_Identity_t = 02 f9 29
-                                eUTRANcellIdentifier_t = 00 07 ac 50 (28 bits)
-                               tAC_t = 02 03
-                               broadcastPLMNs_t:
-                                BroadcastPLMNs_Item_elm = 02 f8 29
-                                BroadcastPLMNs_Item_elm = 02 f9 29
-                               eUTRA_Mode_Info_t:
-                                fDD_t
-                                 uL_EARFCN_t = 0x2
-                                 dL_EARFCN_t = 0x3
-                                 uL_Transmission_Bandwidth_t = 0x4
-                                 dL_Transmission_Bandwidth_t = 0x4
-                               iE_Extensions_t:
-                                ProtocolExtensionContainer_elm
-                                 id_t = 0x38
-                                 criticality_t = 0x1
-                                 MBSFN-Subframe-Infolist:
-                                  MBSFN_Subframe_Infolist_elm
-                                   radioframeAllocationPeriod_t = 0x3
-                                   radioframeAllocationOffset_t = 0x3
-                                   subframeAllocation_t:
-                                    oneframe_t = 28 (6 bits)
-               */
-               packedPdu: "20060054000002001500090002f8298003007a4000140040010800630002f8290007ab50102002f829000001000133000000294001000800640002f9290007ac50203202f82902f929000002000344000000384003019850"},
-               { key: &entities.GlobalNbId{PlmnId:"02f829", NbId:"007a40"},
+               {key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "007a40"},
+                       enb: "CONNECTED SHORT_MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<fdd:<ulear_fcn:1 dlear_fcn:1 ul_transmission_bandwidth:BW50 dl_transmission_bandwidth:BW50 > > eutra_mode:FDD number_of_antenna_ports:AN1  pci:100 cell_id:\"02f929:0007ac50\" tac:\"0203\" broadcast_plmns:\"02f829\" broadcast_plmns:\"02f929\" choice_eutra_mode:<fdd:<ulear_fcn:2 dlear_fcn:3 ul_transmission_bandwidth:BW75 dl_transmission_bandwidth:BW75 > > eutra_mode:FDD mbsfn_subframe_infos:<radioframe_allocation_period:N8 radioframe_allocation_offset:3 subframe_allocation:\"28\" subframe_allocation_type:ONE_FRAME > ] []",
+                       /*
+                               X2AP-PDU:
+                                successfulOutcome_t
+                                 procedureCode_t = 0x6
+                                 criticality_t = 0
+                                 X2SetupResponse
+                                  protocolIEs_t:
+                                       ProtocolIE_Container_elm
+                                        id_t = 0x15
+                                        criticality_t = 0
+                                        GlobalENB-ID
+                                         pLMN_Identity_t = 02 f8 29
+                                         eNB_ID_t:
+                                          short_Macro_eNB_ID_t = 00 7a 40 (18 bits)
+                                       ProtocolIE_Container_elm
+                                        id_t = 0x14
+                                        criticality_t = 0
+                                        ServedCells:
+                                         ServedCells_elm
+                                          servedCellInfo_t
+                                               pCI_t = 0x63
+                                               cellId_t
+                                                pLMN_Identity_t = 02 f8 29
+                                                eUTRANcellIdentifier_t = 00 07 ab 50 (28 bits)
+                                               tAC_t = 01 02
+                                               broadcastPLMNs_t:
+                                                BroadcastPLMNs_Item_elm = 02 f8 29
+                                               eUTRA_Mode_Info_t:
+                                                fDD_t
+                                                 uL_EARFCN_t = 0x1
+                                                 dL_EARFCN_t = 0x1
+                                                 uL_Transmission_Bandwidth_t = 0x3
+                                                 dL_Transmission_Bandwidth_t = 0x3
+                                               iE_Extensions_t:
+                                                ProtocolExtensionContainer_elm
+                                                 id_t = 0x29
+                                                 criticality_t = 0x1
+                                                 Number-of-Antennaports = 0
+                                         ServedCells_elm
+                                          servedCellInfo_t
+                                               pCI_t = 0x64
+                                               cellId_t
+                                                pLMN_Identity_t = 02 f9 29
+                                                eUTRANcellIdentifier_t = 00 07 ac 50 (28 bits)
+                                               tAC_t = 02 03
+                                               broadcastPLMNs_t:
+                                                BroadcastPLMNs_Item_elm = 02 f8 29
+                                                BroadcastPLMNs_Item_elm = 02 f9 29
+                                               eUTRA_Mode_Info_t:
+                                                fDD_t
+                                                 uL_EARFCN_t = 0x2
+                                                 dL_EARFCN_t = 0x3
+                                                 uL_Transmission_Bandwidth_t = 0x4
+                                                 dL_Transmission_Bandwidth_t = 0x4
+                                               iE_Extensions_t:
+                                                ProtocolExtensionContainer_elm
+                                                 id_t = 0x38
+                                                 criticality_t = 0x1
+                                                 MBSFN-Subframe-Infolist:
+                                                  MBSFN_Subframe_Infolist_elm
+                                                       radioframeAllocationPeriod_t = 0x3
+                                                       radioframeAllocationOffset_t = 0x3
+                                                       subframeAllocation_t:
+                                                        oneframe_t = 28 (6 bits)
+                       */
+                       packedPdu: "20060054000002001500090002f8298003007a4000140040010800630002f8290007ab50102002f829000001000133000000294001000800640002f9290007ac50203202f82902f929000002000344000000384003019850"},
+               {key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "007a40"},
                        enb: "CONNECTED SHORT_MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<fdd:<ulear_fcn:1 dlear_fcn:1 ul_transmission_bandwidth:BW50 dl_transmission_bandwidth:BW50 > > eutra_mode:FDD number_of_antenna_ports:AN1 mbsfn_subframe_infos:<radioframe_allocation_period:N8 radioframe_allocation_offset:3 subframe_allocation:\"28\" subframe_allocation_type:ONE_FRAME >  pci:100 cell_id:\"02f929:0007ac50\" tac:\"0203\" broadcast_plmns:\"02f829\" broadcast_plmns:\"02f929\" choice_eutra_mode:<fdd:<ulear_fcn:2 dlear_fcn:3 ul_transmission_bandwidth:BW75 dl_transmission_bandwidth:BW75 > > eutra_mode:FDD ] []",
                        /*
                                X2AP-PDU:
@@ -734,7 +731,7 @@ func TestUnpackX2SetupResponseAndExtract(t *testing.T) {
                                          dL_Transmission_Bandwidth_t = 0x4
                        */
                        packedPdu: "20060052000002001500090002f8298003007a400014003e010800630002f8290007ab50102002f82900000100013300010029400100003840030198500000640002f9290007ac50203202f82902f929000002000344"},
-               {key: &entities.GlobalNbId{PlmnId:"02f829", NbId:"007a40"},
+               {key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "007a40"},
                        enb: "CONNECTED SHORT_MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<fdd:<ulear_fcn:1 dlear_fcn:1 ul_transmission_bandwidth:BW50 dl_transmission_bandwidth:BW50 > > eutra_mode:FDD number_of_antenna_ports:AN1 prach_configuration:<root_sequence_index:15 zero_correlation_zone_configuration:7 high_speed_flag:true prach_frequency_offset:30 >  pci:100 cell_id:\"02f929:0007ac50\" tac:\"0203\" broadcast_plmns:\"02f829\" broadcast_plmns:\"02f929\" choice_eutra_mode:<fdd:<ulear_fcn:2 dlear_fcn:3 ul_transmission_bandwidth:BW75 dl_transmission_bandwidth:BW75 > > eutra_mode:FDD ] []",
                        /*
                                X2AP-PDU:
@@ -800,72 +797,72 @@ func TestUnpackX2SetupResponseAndExtract(t *testing.T) {
                                          dL_Transmission_Bandwidth_t = 0x4
                        */
                        packedPdu: "20060054000002001500090002f8298003007a4000140040010800630002f8290007ab50102002f829000001000133000100294001000037400500000f79e00000640002f9290007ac50203202f82902f929000002000344"},
-               {key: &entities.GlobalNbId{PlmnId:"02f829", NbId:"007a08"},
-               enb: "CONNECTED LONG_MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<fdd:<ulear_fcn:1 dlear_fcn:1 ul_transmission_bandwidth:BW50 dl_transmission_bandwidth:BW50 > > eutra_mode:FDD prach_configuration:<root_sequence_index:15 zero_correlation_zone_configuration:7 high_speed_flag:true prach_frequency_offset:30 prach_configuration_index:60 >  pci:100 cell_id:\"02f929:0007ac50\" tac:\"0203\" broadcast_plmns:\"02f829\" broadcast_plmns:\"02f929\" choice_eutra_mode:<fdd:<ulear_fcn:2 dlear_fcn:3 ul_transmission_bandwidth:BW75 dl_transmission_bandwidth:BW75 > > eutra_mode:FDD ] []",
-               /*
-                       X2AP-PDU:
-                        successfulOutcome_t
-                         procedureCode_t = 0x6
-                         criticality_t = 0
-                         X2SetupResponse
-                          protocolIEs_t:
-                           ProtocolIE_Container_elm
-                            id_t = 0x15
-                            criticality_t = 0
-                            GlobalENB-ID
-                             pLMN_Identity_t = 02 f8 29
-                             eNB_ID_t:
-                              long_Macro_eNB_ID_t = 00 7a 08 (21 bits)
-                           ProtocolIE_Container_elm
-                            id_t = 0x14
-                            criticality_t = 0
-                            ServedCells:
-                             ServedCells_elm
-                              servedCellInfo_t
-                               pCI_t = 0x63
-                               cellId_t
-                                pLMN_Identity_t = 02 f8 29
-                                eUTRANcellIdentifier_t = 00 07 ab 50 (28 bits)
-                               tAC_t = 01 02
-                               broadcastPLMNs_t:
-                                BroadcastPLMNs_Item_elm = 02 f8 29
-                               eUTRA_Mode_Info_t:
-                                fDD_t
-                                 uL_EARFCN_t = 0x1
-                                 dL_EARFCN_t = 0x1
-                                 uL_Transmission_Bandwidth_t = 0x3
-                                 dL_Transmission_Bandwidth_t = 0x3
-                               iE_Extensions_t:
-                                ProtocolExtensionContainer_elm
-                                 id_t = 0x37
-                                 criticality_t = 0x1
-                                 PRACH-Configuration
-                                  rootSequenceIndex_t = 0xf
-                                  zeroCorrelationIndex_t = 0x7
-                                  highSpeedFlag_t = true
-                                  prach_FreqOffset_t = 0x1e
-                                  prach_ConfigIndex_t = 0x3c
-                             ServedCells_elm
-                              servedCellInfo_t
-                               pCI_t = 0x64
-                               cellId_t
-                                pLMN_Identity_t = 02 f9 29
-                                eUTRANcellIdentifier_t = 00 07 ac 50 (28 bits)
-                               tAC_t = 02 03
-                               broadcastPLMNs_t:
-                                BroadcastPLMNs_Item_elm = 02 f8 29
-                                BroadcastPLMNs_Item_elm = 02 f9 29
-                               eUTRA_Mode_Info_t:
-                                fDD_t
-                                 uL_EARFCN_t = 0x2
-                                 dL_EARFCN_t = 0x3
-                                 uL_Transmission_Bandwidth_t = 0x4
-                                 dL_Transmission_Bandwidth_t = 0x4
-               */
-               //packedPdu: "20060050000002001500090002f8298103007a080014003c010800630002f8290007ab50102002f82900000100013300000037400640000f79ef000000640002f9290007ac50203202f82902f929000002000344"},
-               packedPdu: "20060050000002001500090002f829c003007a080014003c010800630002f8290007ab50102002f82900000100013300000037400640000f79ef000000640002f9290007ac50203202f82902f929000002000344"},
+               {key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "007a08"},
+                       enb: "CONNECTED LONG_MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<fdd:<ulear_fcn:1 dlear_fcn:1 ul_transmission_bandwidth:BW50 dl_transmission_bandwidth:BW50 > > eutra_mode:FDD prach_configuration:<root_sequence_index:15 zero_correlation_zone_configuration:7 high_speed_flag:true prach_frequency_offset:30 prach_configuration_index:60 >  pci:100 cell_id:\"02f929:0007ac50\" tac:\"0203\" broadcast_plmns:\"02f829\" broadcast_plmns:\"02f929\" choice_eutra_mode:<fdd:<ulear_fcn:2 dlear_fcn:3 ul_transmission_bandwidth:BW75 dl_transmission_bandwidth:BW75 > > eutra_mode:FDD ] []",
+                       /*
+                               X2AP-PDU:
+                                successfulOutcome_t
+                                 procedureCode_t = 0x6
+                                 criticality_t = 0
+                                 X2SetupResponse
+                                  protocolIEs_t:
+                                       ProtocolIE_Container_elm
+                                        id_t = 0x15
+                                        criticality_t = 0
+                                        GlobalENB-ID
+                                         pLMN_Identity_t = 02 f8 29
+                                         eNB_ID_t:
+                                          long_Macro_eNB_ID_t = 00 7a 08 (21 bits)
+                                       ProtocolIE_Container_elm
+                                        id_t = 0x14
+                                        criticality_t = 0
+                                        ServedCells:
+                                         ServedCells_elm
+                                          servedCellInfo_t
+                                               pCI_t = 0x63
+                                               cellId_t
+                                                pLMN_Identity_t = 02 f8 29
+                                                eUTRANcellIdentifier_t = 00 07 ab 50 (28 bits)
+                                               tAC_t = 01 02
+                                               broadcastPLMNs_t:
+                                                BroadcastPLMNs_Item_elm = 02 f8 29
+                                               eUTRA_Mode_Info_t:
+                                                fDD_t
+                                                 uL_EARFCN_t = 0x1
+                                                 dL_EARFCN_t = 0x1
+                                                 uL_Transmission_Bandwidth_t = 0x3
+                                                 dL_Transmission_Bandwidth_t = 0x3
+                                               iE_Extensions_t:
+                                                ProtocolExtensionContainer_elm
+                                                 id_t = 0x37
+                                                 criticality_t = 0x1
+                                                 PRACH-Configuration
+                                                  rootSequenceIndex_t = 0xf
+                                                  zeroCorrelationIndex_t = 0x7
+                                                  highSpeedFlag_t = true
+                                                  prach_FreqOffset_t = 0x1e
+                                                  prach_ConfigIndex_t = 0x3c
+                                         ServedCells_elm
+                                          servedCellInfo_t
+                                               pCI_t = 0x64
+                                               cellId_t
+                                                pLMN_Identity_t = 02 f9 29
+                                                eUTRANcellIdentifier_t = 00 07 ac 50 (28 bits)
+                                               tAC_t = 02 03
+                                               broadcastPLMNs_t:
+                                                BroadcastPLMNs_Item_elm = 02 f8 29
+                                                BroadcastPLMNs_Item_elm = 02 f9 29
+                                               eUTRA_Mode_Info_t:
+                                                fDD_t
+                                                 uL_EARFCN_t = 0x2
+                                                 dL_EARFCN_t = 0x3
+                                                 uL_Transmission_Bandwidth_t = 0x4
+                                                 dL_Transmission_Bandwidth_t = 0x4
+                       */
+                       //packedPdu: "20060050000002001500090002f8298103007a080014003c010800630002f8290007ab50102002f82900000100013300000037400640000f79ef000000640002f9290007ac50203202f82902f929000002000344"},
+                       packedPdu: "20060050000002001500090002f829c003007a080014003c010800630002f8290007ab50102002f82900000100013300000037400640000f79ef000000640002f9290007ac50203202f82902f929000002000344"},
 
-               { key: &entities.GlobalNbId{PlmnId:"02f829", NbId:"007a80"},
+               {key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "007a80"},
                        enb: "CONNECTED MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<fdd:<ulear_fcn:1 dlear_fcn:1 ul_transmission_bandwidth:BW50 dl_transmission_bandwidth:BW50 > > eutra_mode:FDD csg_id:\"0007aba0\" freq_band_indicator_priority:BROADCASTED bandwidth_reduced_si:SCHEDULED ] []",
                        /*
                                X2AP-PDU:
@@ -916,7 +913,7 @@ func TestUnpackX2SetupResponseAndExtract(t *testing.T) {
                        */
                        packedPdu: "2006003e000002001500080002f82900007a800014002b000800630002f8290007ab50102002f8290000010001330002004640040007aba000a040014000b4400100"},
 
-               { key: &entities.GlobalNbId{PlmnId:"02f829", NbId:"007a80"},
+               {key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "007a80"},
                        enb: "CONNECTED MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<fdd:<ulear_fcn:1 dlear_fcn:1 ul_transmission_bandwidth:BW50 dl_transmission_bandwidth:BW50 > > eutra_mode:FDD mbms_service_area_identities:\"02f8\" mbms_service_area_identities:\"03f9\" multiband_infos:1 multiband_infos:2 multiband_infos:3 freq_band_indicator_priority:NOT_BROADCASTED ] []",
                        /*
                                X2AP-PDU:
@@ -974,7 +971,7 @@ func TestUnpackX2SetupResponseAndExtract(t *testing.T) {
                                            freqBandIndicator_t = 0x3
                        */
                        packedPdu: "20060044000002001500080002f82900007a8000140031000800630002f8290007ab50102002f8290000010001330002004f40050102f803f900a040010000544006200000010002"},
-               { key: &entities.GlobalNbId{PlmnId:"02f829", NbId:"007a80"},
+               {key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "007a80"},
                        enb: "CONNECTED MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<fdd:<ulear_fcn:1 dlear_fcn:1 ul_transmission_bandwidth:BW50 dl_transmission_bandwidth:BW50 > > eutra_mode:FDD neighbour_infos:<ecgi:\"02f829:0007ab50\" pci:99 ear_fcn:1 > neighbour_infos:<ecgi:\"03f930:0008bc50\" pci:100 ear_fcn:2 > ] []",
                        /*
                                X2AP-PDU:
@@ -1025,7 +1022,7 @@ func TestUnpackX2SetupResponseAndExtract(t *testing.T) {
                        */
                        packedPdu: "20060044000002001500080002f82900007a8000140031004000630002f8290007ab50102002f82900000100013300020002f8290007ab50006300010003f9300008bc5000640002"},
 
-               {key: &entities.GlobalNbId{PlmnId:"02f829", NbId:"007a80"},
+               {key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "007a80"},
                        enb: "CONNECTED MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<fdd:<ulear_fcn:1 dlear_fcn:1 ul_transmission_bandwidth:BW50 dl_transmission_bandwidth:BW50 > > eutra_mode:FDD neighbour_infos:<ecgi:\"02f829:0007ab50\" pci:99 ear_fcn:1 tac:\"0102\" > neighbour_infos:<ecgi:\"03f930:0008bc50\" pci:100 ear_fcn:3 > ] []",
                        /*
                                X2AP-PDU:
@@ -1086,7 +1083,7 @@ func TestUnpackX2SetupResponseAndExtract(t *testing.T) {
                        */
                        packedPdu: "20060055000002001500080002f82900007a8000140042004000630002f8290007ab50102002f82900000100013300024002f8290007ab50006300010000004c400201024003f9300008bc50006400020000005e0003800103"},
 
-               {key: &entities.GlobalNbId{PlmnId:"02f829", NbId:"007a80"},
+               {key: &entities.GlobalNbId{PlmnId: "02f829", NbId: "007a80"},
                        enb: "CONNECTED MACRO_ENB [pci:99 cell_id:\"02f829:0007ab50\" tac:\"0102\" broadcast_plmns:\"02f829\" choice_eutra_mode:<fdd:<ulear_fcn:1 dlear_fcn:1 ul_transmission_bandwidth:BW50 dl_transmission_bandwidth:BW50 > > eutra_mode:FDD neighbour_infos:<ecgi:\"02f829:0007ab50\" pci:99 ear_fcn:1 tac:\"0102\" > neighbour_infos:<ecgi:\"03f930:0008bc50\" pci:100 ear_fcn:3 > ] []",
                        /*
                                X2AP-PDU:
@@ -1146,10 +1143,9 @@ func TestUnpackX2SetupResponseAndExtract(t *testing.T) {
                                           EARFCNExtension = 0x3
                        */
                        packedPdu: "20060055000002001500080002f82900007a8000140042004000630002f8290007ab50102002f82900000100013300024002f8290007ab50006300010000004c400201024003f9300008bc50006400020000005e0003800103",
-                       /*failure: fmt.Errorf("getAtom for path [successfulOutcome_t X2SetupResponse protocolIEs_t ProtocolIE_Container_elm GlobalENB-ID pLMN_Identity_t] failed, rc = 2" /NO_SPACE_LEFT),*/},
+                       /*failure: fmt.Errorf("getAtom for path [successfulOutcome_t X2SetupResponse protocolIEs_t ProtocolIE_Container_elm GlobalENB-ID pLMN_Identity_t] failed, rc = 2" /NO_SPACE_LEFT),*/ },
        }
 
-    initDb_f := true
        for _, tc := range testCases {
                t.Run(tc.packedPdu, func(t *testing.T) {
 
@@ -1188,31 +1184,12 @@ func TestUnpackX2SetupResponseAndExtract(t *testing.T) {
                        } else {
                                nb := &entities.NodebInfo{}
                                nb.ConnectionStatus = entities.ConnectionStatus_CONNECTED
-                               nb.Configuration = &entities.NodebInfo_Enb{Enb:enb}
+                               nb.Configuration = &entities.NodebInfo_Enb{Enb: enb}
                                embStr := fmt.Sprintf("%s %s %s %s", nb.ConnectionStatus, enb.EnbType, enb.ServedCells, enb.GuGroupIds)
                                if !strings.EqualFold(embStr, tc.enb) {
                                        t.Errorf("want: enb=%s, got: %s", tc.enb, embStr)
                                }
-
-                               // Save to rNib
-                               if tc.saveToRNib {
-                                       if initDb_f {
-                                               rNibWriter.Init("e2Manager", 1)
-                                               initDb_f = false
-                                       }
-                                       nbIdentity := &entities.NbIdentity{InventoryName:"RanName", GlobalNbId:key}
-                                       if rNibErr := rNibWriter.GetRNibWriter().SaveNodeb(nbIdentity, nb); rNibErr != nil {
-                                               if tc.failure == nil {
-                                                       t.Errorf("rNibWriter failed to save ENB. Error: %s\n", rNibErr.Error())
-                                               } else {
-                                                       if strings.Compare(rNibErr.Error(), tc.failure.Error()) != 0 {
-                                                               t.Errorf("want: %s, got: %s", tc.failure, rNibErr.Error())
-                                                       }
-                                               }
-                                       }
-                               }
                        }
                })
        }
 }
-
index c25235c..ba77075 100644 (file)
@@ -23,29 +23,24 @@ import (
        "e2mgr/e2managererrors"
        "e2mgr/logger"
        "e2mgr/models"
-       "e2mgr/rNibWriter"
        "e2mgr/rmrCgo"
        "e2mgr/services"
        "e2mgr/stateMachine"
        "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
-       "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
        "time"
 )
 
 type DeleteAllRequestHandler struct {
-       readerProvider func() reader.RNibReader
-       writerProvider func() rNibWriter.RNibWriter
-       rmrService     *services.RmrService
-       config         *configuration.Configuration
+       rnibDataService services.RNibDataService
+       rmrService *services.RmrService
+       config *configuration.Configuration
        logger         *logger.Logger
 }
 
-func NewDeleteAllRequestHandler(logger *logger.Logger, rmrService *services.RmrService, config *configuration.Configuration, writerProvider func() rNibWriter.RNibWriter,
-       readerProvider func() reader.RNibReader) *DeleteAllRequestHandler {
+func NewDeleteAllRequestHandler(logger *logger.Logger, rmrService *services.RmrService, config *configuration.Configuration, rnibDataService services.RNibDataService) *DeleteAllRequestHandler {
        return &DeleteAllRequestHandler{
                logger:         logger,
-               readerProvider: readerProvider,
-               writerProvider: writerProvider,
+               rnibDataService: rnibDataService,
                rmrService:     rmrService,
                config:         config,
        }
@@ -81,7 +76,7 @@ func (handler *DeleteAllRequestHandler) Handle(request models.Request) error {
 }
 
 func (handler *DeleteAllRequestHandler) updateNodebStates(timeoutExpired bool) (error, bool) {
-       nbIdentityList, err := handler.readerProvider().GetListNodebIds()
+       nbIdentityList, err := handler.rnibDataService.GetListNodebIds()
 
        if err != nil {
                handler.logger.Errorf("#DeleteAllRequestHandler.updateNodebStates - failed to get nodes list from RNIB. Error: %s", err.Error())
@@ -95,7 +90,7 @@ func (handler *DeleteAllRequestHandler) updateNodebStates(timeoutExpired bool) (
        numOfRanToShutDown := 0
        for _, nbIdentity := range nbIdentityList {
 
-               node, err := handler.readerProvider().GetNodeb((*nbIdentity).GetInventoryName())
+               node, err := handler.rnibDataService.GetNodeb((*nbIdentity).GetInventoryName())
 
                if err != nil {
                        handler.logger.Errorf("#DeleteAllRequestHandler.updateNodebStates - failed to get nodeB entity for ran name: %v from RNIB. Error: %s",
@@ -138,7 +133,7 @@ func (handler *DeleteAllRequestHandler) saveNodebNextState(nbIdentity *entities.
 
        node.ConnectionStatus = nextStatus
 
-       err := handler.writerProvider().SaveNodeb(nbIdentity, node)
+       err := handler.rnibDataService.SaveNodeb(nbIdentity, node)
 
        if err != nil {
                handler.logger.Errorf("#DeleteAllRequestHandler.saveNodebNextState - failed to save nodeB entity for inventory name: %v to RNIB. Error: %s",
@@ -166,7 +161,7 @@ func (handler *DeleteAllRequestHandler) saveNodebShutDownState(nbIdentity *entit
 
        node.ConnectionStatus = entities.ConnectionStatus_SHUT_DOWN
 
-       err := handler.writerProvider().SaveNodeb(nbIdentity, node)
+       err := handler.rnibDataService.SaveNodeb(nbIdentity, node)
 
        if err != nil {
                handler.logger.Errorf("#DeleteAllRequestHandler.saveNodebShutDownState - failed to save nodeB entity for inventory name: %v to RNIB. Error: %s",
index be1cd25..6e16766 100644 (file)
@@ -37,8 +37,9 @@ import (
        "testing"
 )
 
-func TestHandleBeforeTimerGetListNodebIdsFailedFlow(t *testing.T) {
+func setupTest(t *testing.T) (*logger.Logger, *configuration.Configuration, *mocks.RnibReaderMock, *mocks.RnibWriterMock, services.RNibDataService, *mocks.RmrMessengerMock) {
        log := initLog(t)
+       config := configuration.ParseConfiguration()
 
        readerMock := &mocks.RnibReaderMock{}
        readerProvider := func() reader.RNibReader {
@@ -48,11 +49,15 @@ func TestHandleBeforeTimerGetListNodebIdsFailedFlow(t *testing.T) {
        writerProvider := func() rNibWriter.RNibWriter {
                return writerMock
        }
+       rnibDataService := services.NewRnibDataService(log, config, readerProvider, writerProvider)
        rmrMessengerMock := &mocks.RmrMessengerMock{}
+       return log, config, readerMock, writerMock, rnibDataService, rmrMessengerMock
+}
 
-       config := configuration.ParseConfiguration()
+func TestHandleBeforeTimerGetListNodebIdsFailedFlow(t *testing.T){
+       log, config, readerMock, _, rnibDataService, rmrMessengerMock := setupTest(t)
 
-       handler := NewDeleteAllRequestHandler(log, getRmrService(rmrMessengerMock, log), config, writerProvider, readerProvider)
+       handler := NewDeleteAllRequestHandler(log, getRmrService(rmrMessengerMock, log), config, rnibDataService)
 
        rnibErr := &common.ResourceNotFoundError{}
        var nbIdentityList []*entities.NbIdentity
@@ -65,22 +70,12 @@ func TestHandleBeforeTimerGetListNodebIdsFailedFlow(t *testing.T) {
        }
 }
 
-func TestHandleAfterTimerGetListNodebIdsFailedFlow(t *testing.T) {
-       log := initLog(t)
+func TestHandleAfterTimerGetListNodebIdsFailedFlow(t *testing.T){
+       log, config, readerMock, writerMock, rnibDataService, rmrMessengerMock := setupTest(t)
 
-       readerMock := &mocks.RnibReaderMock{}
-       readerProvider := func() reader.RNibReader {
-               return readerMock
-       }
-       writerMock := &mocks.RnibWriterMock{}
-       writerProvider := func() rNibWriter.RNibWriter {
-               return writerMock
-       }
-       rmrMessengerMock := &mocks.RmrMessengerMock{}
-       config := configuration.ParseConfiguration()
        config.BigRedButtonTimeoutSec = 1
 
-       handler := NewDeleteAllRequestHandler(log, getRmrService(rmrMessengerMock, log), config, writerProvider, readerProvider)
+       handler := NewDeleteAllRequestHandler(log, getRmrService(rmrMessengerMock, log), config, rnibDataService)
 
        rnibErr := &common.ResourceNotFoundError{}
        //Before timer: Disconnected->ShutDown, ShuttingDown->Ignore, Connected->ShuttingDown
@@ -108,21 +103,11 @@ func TestHandleAfterTimerGetListNodebIdsFailedFlow(t *testing.T) {
        }
 }
 
-func TestHandleSuccessFlow(t *testing.T) {
-       log := initLog(t)
+func TestHandleSuccessFlow(t *testing.T){
+       log, config, readerMock, writerMock, rnibDataService, rmrMessengerMock := setupTest(t)
 
-       readerMock := &mocks.RnibReaderMock{}
-       readerProvider := func() reader.RNibReader {
-               return readerMock
-       }
-       writerMock := &mocks.RnibWriterMock{}
-       writerProvider := func() rNibWriter.RNibWriter {
-               return writerMock
-       }
-       rmrMessengerMock := &mocks.RmrMessengerMock{}
-       config := configuration.ParseConfiguration()
        config.BigRedButtonTimeoutSec = 1
-       handler := NewDeleteAllRequestHandler(log, getRmrService(rmrMessengerMock, log), config, writerProvider, readerProvider)
+       handler := NewDeleteAllRequestHandler(log, getRmrService(rmrMessengerMock, log), config, rnibDataService)
 
        //Before timer: Disconnected->ShutDown, ShuttingDown->Ignore, Connected->ShuttingDown
        nbIdentityList := createIdentityList()
@@ -163,21 +148,11 @@ func TestHandleSuccessFlow(t *testing.T) {
        assert.Nil(t, actual)
 }
 
-func TestHandleSuccessGetNextStatusFlow(t *testing.T) {
-       log := initLog(t)
+func TestHandleSuccessGetNextStatusFlow(t *testing.T){
+       log, config, readerMock, writerMock, rnibDataService, rmrMessengerMock := setupTest(t)
 
-       readerMock := &mocks.RnibReaderMock{}
-       readerProvider := func() reader.RNibReader {
-               return readerMock
-       }
-       writerMock := &mocks.RnibWriterMock{}
-       writerProvider := func() rNibWriter.RNibWriter {
-               return writerMock
-       }
-       rmrMessengerMock := &mocks.RmrMessengerMock{}
-       config := configuration.ParseConfiguration()
        config.BigRedButtonTimeoutSec = 1
-       handler := NewDeleteAllRequestHandler(log, getRmrService(rmrMessengerMock, log), config, writerProvider, readerProvider)
+       handler := NewDeleteAllRequestHandler(log, getRmrService(rmrMessengerMock, log), config, rnibDataService)
 
        nbIdentityList := []*entities.NbIdentity{{InventoryName: "RanName_1"}}
        readerMock.On("GetListNodebIds").Return(nbIdentityList, nil)
@@ -205,21 +180,11 @@ func TestHandleSuccessGetNextStatusFlow(t *testing.T) {
        assert.Nil(t, actual)
 }
 
-func TestHandleShuttingDownStatusFlow(t *testing.T) {
-       log := initLog(t)
+func TestHandleShuttingDownStatusFlow(t *testing.T){
+       log, config, readerMock, writerMock, rnibDataService, rmrMessengerMock := setupTest(t)
 
-       readerMock := &mocks.RnibReaderMock{}
-       readerProvider := func() reader.RNibReader {
-               return readerMock
-       }
-       writerMock := &mocks.RnibWriterMock{}
-       writerProvider := func() rNibWriter.RNibWriter {
-               return writerMock
-       }
-       rmrMessengerMock := &mocks.RmrMessengerMock{}
-       config := configuration.ParseConfiguration()
        config.BigRedButtonTimeoutSec = 1
-       handler := NewDeleteAllRequestHandler(log, getRmrService(rmrMessengerMock, log), config, writerProvider, readerProvider)
+       handler := NewDeleteAllRequestHandler(log, getRmrService(rmrMessengerMock, log), config, rnibDataService)
 
        nbIdentityList := []*entities.NbIdentity{{InventoryName: "RanName_1"}}
        readerMock.On("GetListNodebIds").Return(nbIdentityList, nil)
@@ -244,21 +209,11 @@ func TestHandleShuttingDownStatusFlow(t *testing.T) {
        assert.Nil(t, actual)
 }
 
-func TestHandleGetNodebFailedFlow(t *testing.T) {
-       log := initLog(t)
+func TestHandleGetNodebFailedFlow(t *testing.T){
+       log, config, readerMock, writerMock, rnibDataService, rmrMessengerMock := setupTest(t)
 
-       readerMock := &mocks.RnibReaderMock{}
-       readerProvider := func() reader.RNibReader {
-               return readerMock
-       }
-       writerMock := &mocks.RnibWriterMock{}
-       writerProvider := func() rNibWriter.RNibWriter {
-               return writerMock
-       }
-       rmrMessengerMock := &mocks.RmrMessengerMock{}
-       config := configuration.ParseConfiguration()
        config.BigRedButtonTimeoutSec = 1
-       handler := NewDeleteAllRequestHandler(log, getRmrService(rmrMessengerMock, log), config, writerProvider, readerProvider)
+       handler := NewDeleteAllRequestHandler(log, getRmrService(rmrMessengerMock, log), config, rnibDataService)
 
        //Before timer: Disconnected->ShutDown(will fail), ShuttingDown->Ignore, Connected->ShuttingDown
        nbIdentityList := createIdentityList()
@@ -300,21 +255,11 @@ func TestHandleGetNodebFailedFlow(t *testing.T) {
        assert.Nil(t, actual)
 }
 
-func TestHandleSaveFailedFlow(t *testing.T) {
-       log := initLog(t)
+func TestHandleSaveFailedFlow(t *testing.T){
+       log, config, readerMock, writerMock, rnibDataService, rmrMessengerMock := setupTest(t)
 
-       readerMock := &mocks.RnibReaderMock{}
-       readerProvider := func() reader.RNibReader {
-               return readerMock
-       }
-       writerMock := &mocks.RnibWriterMock{}
-       writerProvider := func() rNibWriter.RNibWriter {
-               return writerMock
-       }
-       rmrMessengerMock := &mocks.RmrMessengerMock{}
-       config := configuration.ParseConfiguration()
        config.BigRedButtonTimeoutSec = 1
-       handler := NewDeleteAllRequestHandler(log, getRmrService(rmrMessengerMock, log), config, writerProvider, readerProvider)
+       handler := NewDeleteAllRequestHandler(log, getRmrService(rmrMessengerMock, log), config, rnibDataService)
 
        //Before timer: Disconnected->ShutDown, ShuttingDown->Ignore, Connected->ShuttingDown(will fail)
        nbIdentityList := createIdentityList()
@@ -356,21 +301,11 @@ func TestHandleSaveFailedFlow(t *testing.T) {
        assert.Nil(t, actual)
 }
 
-func TestHandleSendRmrFailedFlow(t *testing.T) {
-       log := initLog(t)
+func TestHandleSendRmrFailedFlow(t *testing.T){
+       log, config, readerMock, writerMock, rnibDataService, rmrMessengerMock := setupTest(t)
 
-       readerMock := &mocks.RnibReaderMock{}
-       readerProvider := func() reader.RNibReader {
-               return readerMock
-       }
-       writerMock := &mocks.RnibWriterMock{}
-       writerProvider := func() rNibWriter.RNibWriter {
-               return writerMock
-       }
-       rmrMessengerMock := &mocks.RmrMessengerMock{}
-       config := configuration.ParseConfiguration()
        config.BigRedButtonTimeoutSec = 1
-       handler := NewDeleteAllRequestHandler(log, getRmrService(rmrMessengerMock, log), config, writerProvider, readerProvider)
+       handler := NewDeleteAllRequestHandler(log, getRmrService(rmrMessengerMock, log), config, rnibDataService)
 
        //Before timer: Disconnected->ShutDown, ShuttingDown->Ignore, Connected->ShuttingDown(will fail)
        nbIdentityList := createIdentityList()
@@ -414,21 +349,10 @@ func TestHandleSendRmrFailedFlow(t *testing.T) {
        }
 }
 
-func TestHandleGetListEnbIdsEmptyFlow(t *testing.T) {
-       log := initLog(t)
-
-       readerMock := &mocks.RnibReaderMock{}
-       readerProvider := func() reader.RNibReader {
-               return readerMock
-       }
-       writerMock := &mocks.RnibWriterMock{}
-       writerProvider := func() rNibWriter.RNibWriter {
-               return writerMock
-       }
-       rmrMessengerMock := &mocks.RmrMessengerMock{}
-       config := configuration.ParseConfiguration()
+func TestHandleGetListEnbIdsEmptyFlow(t *testing.T){
+       log, config, readerMock, _, rnibDataService, rmrMessengerMock := setupTest(t)
 
-       handler := NewDeleteAllRequestHandler(log, getRmrService(rmrMessengerMock, log), config, writerProvider, readerProvider)
+       handler := NewDeleteAllRequestHandler(log, getRmrService(rmrMessengerMock, log), config, rnibDataService)
 
        var rnibError error
        nbIdentityList := []*entities.NbIdentity{}
index a792a45..36df7bf 100644 (file)
@@ -21,11 +21,10 @@ import (
        "e2mgr/logger"
        "e2mgr/managers"
        "e2mgr/models"
-       "e2mgr/rNibWriter"
        "e2mgr/rnibBuilders"
+       "e2mgr/services"
        "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/go-ozzo/ozzo-validation"
        "github.com/go-ozzo/ozzo-validation/is"
 )
@@ -36,19 +35,17 @@ const (
 )
 
 type SetupRequestHandler struct {
-       readerProvider  func() reader.RNibReader
-       writerProvider  func() rNibWriter.RNibWriter
+       rNibDataService services.RNibDataService
        logger          *logger.Logger
        ranSetupManager *managers.RanSetupManager
        protocol        entities.E2ApplicationProtocol
 }
 
-func NewSetupRequestHandler(logger *logger.Logger, writerProvider func() rNibWriter.RNibWriter, readerProvider func() reader.RNibReader,
+func NewSetupRequestHandler(logger *logger.Logger, rNibDataService services.RNibDataService,
        ranSetupManager *managers.RanSetupManager, protocol entities.E2ApplicationProtocol) *SetupRequestHandler {
        return &SetupRequestHandler{
                logger:          logger,
-               readerProvider:  readerProvider,
-               writerProvider:  writerProvider,
+               rNibDataService:  rNibDataService,
                ranSetupManager: ranSetupManager,
                protocol:        protocol,
        }
@@ -63,7 +60,7 @@ func (handler *SetupRequestHandler) Handle(request models.Request) error {
                return err
        }
 
-       nodebInfo, err := handler.readerProvider().GetNodeb(setupRequest.RanName)
+       nodebInfo, err := handler.rNibDataService.GetNodeb(setupRequest.RanName)
        if err != nil {
                _, ok := err.(*common.ResourceNotFoundError)
                if !ok {
@@ -101,7 +98,7 @@ func (handler *SetupRequestHandler) connectNewRan(request *models.SetupRequest,
 
        nodebInfo, nodebIdentity := rnibBuilders.CreateInitialNodeInfo(request, protocol)
 
-       rNibErr := handler.writerProvider().SaveNodeb(nodebIdentity, nodebInfo)
+       rNibErr := handler.rNibDataService.SaveNodeb(nodebIdentity, nodebInfo)
        if rNibErr != nil {
                handler.logger.Errorf("#SetupRequestHandler.connectNewRan - failed to initial nodeb entity for ran name: %v in RNIB. Error: %s", request.RanName, rNibErr.Error())
                return e2managererrors.NewRnibDbError()
index 8783389..a545cff 100644 (file)
@@ -17,6 +17,7 @@
 package httpmsghandlers
 
 import (
+       "e2mgr/configuration"
        "e2mgr/e2managererrors"
        "e2mgr/e2pdus"
        "e2mgr/managers"
@@ -25,6 +26,7 @@ import (
        "e2mgr/rNibWriter"
        "e2mgr/rmrCgo"
        "e2mgr/rnibBuilders"
+       "e2mgr/services"
        "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"
@@ -283,6 +285,7 @@ func TestX2SetupHandleInvalidIp_Error(t *testing.T) {
 
 func initSetupRequestTest(t *testing.T, protocol entities.E2ApplicationProtocol)(*mocks.RnibReaderMock, *mocks.RnibWriterMock, *SetupRequestHandler, *mocks.RmrMessengerMock) {
        log := initLog(t)
+       config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
 
        readerMock := &mocks.RnibReaderMock{}
        readerProvider := func() reader.RNibReader {
@@ -296,8 +299,10 @@ func initSetupRequestTest(t *testing.T, protocol entities.E2ApplicationProtocol)
        rmrMessengerMock := &mocks.RmrMessengerMock{}
        rmrService := getRmrService(rmrMessengerMock, log)
 
-       ranSetupManager := managers.NewRanSetupManager(log, rmrService, writerProvider)
-       handler := NewSetupRequestHandler(log, writerProvider, readerProvider, ranSetupManager, protocol)
+       rnibDataService := services.NewRnibDataService(log, config, readerProvider, writerProvider)
+
+       ranSetupManager := managers.NewRanSetupManager(log, rmrService, rnibDataService)
+       handler := NewSetupRequestHandler(log, rnibDataService, ranSetupManager, protocol)
 
        return readerMock, writerMock, handler, rmrMessengerMock
 }
\ No newline at end of file
index 72f7ccb..3d02272 100644 (file)
@@ -22,12 +22,10 @@ import (
        "e2mgr/e2pdus"
        "e2mgr/logger"
        "e2mgr/models"
-       "e2mgr/rNibWriter"
        "e2mgr/rmrCgo"
        "e2mgr/services"
        "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"
 )
 
 const (
@@ -35,17 +33,14 @@ const (
 )
 
 type X2ResetRequestHandler struct {
-       readerProvider func() reader.RNibReader
-       writerProvider func() rNibWriter.RNibWriter
+       rNibDataService services.RNibDataService
        rmrService     *services.RmrService
        logger         *logger.Logger
 }
 
-func NewX2ResetRequestHandler(logger *logger.Logger, rmrService *services.RmrService, writerProvider func() rNibWriter.RNibWriter,
-       readerProvider func() reader.RNibReader) *X2ResetRequestHandler {
+func NewX2ResetRequestHandler(logger *logger.Logger, rmrService *services.RmrService, rNibDataService services.RNibDataService) *X2ResetRequestHandler {
        return &X2ResetRequestHandler{
-               readerProvider: readerProvider,
-               writerProvider: writerProvider,
+               rNibDataService: rNibDataService,
                rmrService:     rmrService,
                logger:         logger,
        }
@@ -63,7 +58,7 @@ func (handler *X2ResetRequestHandler) Handle(request models.Request) error {
                return e2managererrors.NewRequestValidationError()
        }
 
-       nodeb, err := handler.readerProvider().GetNodeb(resetRequest.RanName)
+       nodeb, err := handler.rNibDataService.GetNodeb(resetRequest.RanName)
        if err != nil {
                handler.logger.Errorf("#reset_request_handler.Handle - failed to get status of RAN: %s from RNIB. Error: %s", resetRequest.RanName, err.Error())
                _, ok := err.(*common.ResourceNotFoundError)
index 864e824..64e0c10 100644 (file)
@@ -1,11 +1,13 @@
 package httpmsghandlers
 
 import (
+       "e2mgr/configuration"
        "e2mgr/e2managererrors"
        "e2mgr/mocks"
        "e2mgr/models"
        "e2mgr/rNibWriter"
        "e2mgr/rmrCgo"
+       "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"
@@ -15,11 +17,9 @@ import (
        "testing"
 )
 
-func TestHandleSuccessfulDefaultCause(t *testing.T) {
+func setupX2ResetRequestHandlerTest(t *testing.T) (*X2ResetRequestHandler, *mocks.RmrMessengerMock, *mocks.RnibReaderMock){
        log := initLog(t)
-
-       ranName := "test1"
-
+       config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
        readerMock := &mocks.RnibReaderMock{}
        readerProvider := func() reader.RNibReader {
                return readerMock
@@ -28,15 +28,23 @@ func TestHandleSuccessfulDefaultCause(t *testing.T) {
        writerProvider := func() rNibWriter.RNibWriter {
                return writerMock
        }
+       rnibDataService := services.NewRnibDataService(log, config, readerProvider, writerProvider)
+       rmrMessengerMock := &mocks.RmrMessengerMock{}
+       rmrService := getRmrService(rmrMessengerMock, log)
+       handler := NewX2ResetRequestHandler(log, rmrService, rnibDataService)
+
+       return handler, rmrMessengerMock, readerMock
+}
+func TestHandleSuccessfulDefaultCause(t *testing.T) {
+       handler, rmrMessengerMock, readerMock := setupX2ResetRequestHandlerTest(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 := &mocks.RmrMessengerMock{}
-       rmrMessengerMock.On("SendMsg", msg, mock.Anything).Return(msg, nil)
 
-       rmrService := getRmrService(rmrMessengerMock, log)
-       handler := NewX2ResetRequestHandler(log, rmrService, writerProvider, readerProvider)
+       rmrMessengerMock.On("SendMsg", msg, mock.Anything).Return(msg, nil)
 
        var nodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED}
        readerMock.On("GetNodeb", ranName).Return(nodeb, nil)
@@ -47,28 +55,14 @@ func TestHandleSuccessfulDefaultCause(t *testing.T) {
 }
 
 func TestHandleSuccessfulRequestedCause(t *testing.T) {
-       log := initLog(t)
+       handler, rmrMessengerMock, readerMock := setupX2ResetRequestHandlerTest(t)
 
        ranName := "test1"
-
-       readerMock := &mocks.RnibReaderMock{}
-       readerProvider := func() reader.RNibReader {
-               return readerMock
-       }
-       writerMock := &mocks.RnibWriterMock{}
-       writerProvider := func() rNibWriter.RNibWriter {
-               return writerMock
-       }
-
        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)
-       rmrMessengerMock := &mocks.RmrMessengerMock{}
        rmrMessengerMock.On("SendMsg", msg, mock.Anything).Return(msg, nil)
 
-       rmrService := getRmrService(rmrMessengerMock, log)
-       handler := NewX2ResetRequestHandler(log, rmrService, writerProvider, readerProvider)
-
        var nodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED}
        readerMock.On("GetNodeb", ranName).Return(nodeb, nil)
 
@@ -78,24 +72,9 @@ func TestHandleSuccessfulRequestedCause(t *testing.T) {
 }
 
 func TestHandleFailureUnknownCause(t *testing.T) {
-       log := initLog(t)
+       handler, _, readerMock := setupX2ResetRequestHandlerTest(t)
 
        ranName := "test1"
-
-       readerMock := &mocks.RnibReaderMock{}
-       readerProvider := func() reader.RNibReader {
-               return readerMock
-       }
-       writerMock := &mocks.RnibWriterMock{}
-       writerProvider := func() rNibWriter.RNibWriter {
-               return writerMock
-       }
-
-       rmrMessengerMock := &mocks.RmrMessengerMock{}
-
-       rmrService := getRmrService(rmrMessengerMock, log)
-       handler := NewX2ResetRequestHandler(log, rmrService, writerProvider, readerProvider)
-       
        var nodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED}
        readerMock.On("GetNodeb", ranName).Return(nodeb, nil)
 
@@ -106,24 +85,9 @@ func TestHandleFailureUnknownCause(t *testing.T) {
 }
 
 func TestHandleFailureWrongState(t *testing.T) {
-       log := initLog(t)
+       handler, _, readerMock := setupX2ResetRequestHandlerTest(t)
 
        ranName := "test1"
-
-       readerMock := &mocks.RnibReaderMock{}
-       readerProvider := func() reader.RNibReader {
-               return readerMock
-       }
-       writerMock := &mocks.RnibWriterMock{}
-       writerProvider := func() rNibWriter.RNibWriter {
-               return writerMock
-       }
-
-       rmrMessengerMock := &mocks.RmrMessengerMock{}
-
-       rmrService := getRmrService(rmrMessengerMock, log)
-       handler := NewX2ResetRequestHandler(log, rmrService, writerProvider, readerProvider)
-
        var nodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_DISCONNECTED}
        readerMock.On("GetNodeb", ranName).Return(nodeb, nil)
 
@@ -133,24 +97,10 @@ func TestHandleFailureWrongState(t *testing.T) {
 }
 
 func TestHandleFailureRanNotFound(t *testing.T) {
-       log := initLog(t)
+       handler, _, readerMock := setupX2ResetRequestHandlerTest(t)
 
        ranName := "test1"
 
-       readerMock := &mocks.RnibReaderMock{}
-       readerProvider := func() reader.RNibReader {
-               return readerMock
-       }
-       writerMock := &mocks.RnibWriterMock{}
-       writerProvider := func() rNibWriter.RNibWriter {
-               return writerMock
-       }
-
-       rmrMessengerMock := &mocks.RmrMessengerMock{}
-
-       rmrService := getRmrService(rmrMessengerMock, log)
-       handler := NewX2ResetRequestHandler(log, rmrService, writerProvider, readerProvider)
-
        readerMock.On("GetNodeb", ranName).Return(&entities.NodebInfo{}, common.NewResourceNotFoundError("nodeb not found"))
 
        actual := handler.Handle(models.ResetRequest{RanName: ranName})
@@ -159,24 +109,10 @@ func TestHandleFailureRanNotFound(t *testing.T) {
 }
 
 func TestHandleFailureRnibError(t *testing.T) {
-       log := initLog(t)
+       handler, _, readerMock := setupX2ResetRequestHandlerTest(t)
 
        ranName := "test1"
 
-       readerMock := &mocks.RnibReaderMock{}
-       readerProvider := func() reader.RNibReader {
-               return readerMock
-       }
-       writerMock := &mocks.RnibWriterMock{}
-       writerProvider := func() rNibWriter.RNibWriter {
-               return writerMock
-       }
-
-       rmrMessengerMock := &mocks.RmrMessengerMock{}
-
-       rmrService := getRmrService(rmrMessengerMock, log)
-       handler := NewX2ResetRequestHandler(log, rmrService, writerProvider, readerProvider)
-
        readerMock.On("GetNodeb", ranName).Return(&entities.NodebInfo{}, common.NewInternalError(fmt.Errorf("internal error")))
 
        actual := handler.Handle(models.ResetRequest{RanName: ranName})
@@ -185,28 +121,15 @@ func TestHandleFailureRnibError(t *testing.T) {
 }
 
 func TestHandleFailureRmrError(t *testing.T) {
-       log := initLog(t)
+       handler, rmrMessengerMock, readerMock := setupX2ResetRequestHandlerTest(t)
 
        ranName := "test1"
-
-       readerMock := &mocks.RnibReaderMock{}
-       readerProvider := func() reader.RNibReader {
-               return readerMock
-       }
-       writerMock := &mocks.RnibWriterMock{}
-       writerProvider := func() rNibWriter.RNibWriter {
-               return writerMock
-       }
        // 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 := &mocks.RmrMessengerMock{}
        rmrMessengerMock.On("SendMsg", msg, mock.Anything).Return(&rmrCgo.MBuf{}, fmt.Errorf("rmr error"))
 
-       rmrService := getRmrService(rmrMessengerMock, log)
-       handler := NewX2ResetRequestHandler(log, rmrService, writerProvider, readerProvider)
-
        var nodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED}
        readerMock.On("GetNodeb", ranName).Return(nodeb, nil)
 
index 73e86bd..783f714 100644 (file)
@@ -21,27 +21,27 @@ import (
        "e2mgr/logger"
        "e2mgr/managers"
        "e2mgr/models"
+       "e2mgr/services"
        "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
-       "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
 )
 
 type E2TermInitNotificationHandler struct {
-       rnibReaderProvider     func() reader.RNibReader
+       rnibDataService        services.RNibDataService
        ranReconnectionManager *managers.RanReconnectionManager
 }
 
-func NewE2TermInitNotificationHandler(ranReconnectionManager *managers.RanReconnectionManager, rnibReaderProvider func() reader.RNibReader) E2TermInitNotificationHandler {
+func NewE2TermInitNotificationHandler(ranReconnectionManager *managers.RanReconnectionManager, rnibDataService services.RNibDataService) E2TermInitNotificationHandler {
        return E2TermInitNotificationHandler{
-               rnibReaderProvider:     rnibReaderProvider,
+               rnibDataService:        rnibDataService,
                ranReconnectionManager: ranReconnectionManager,
        }
 }
 
 func (handler E2TermInitNotificationHandler) Handle(logger *logger.Logger, request *models.NotificationRequest, messageChannel chan<- *models.NotificationResponse) {
 
-logger.Infof("#E2TermInitNotificationHandler.Handle - Handling E2_TERM_INIT")
+       logger.Infof("#E2TermInitNotificationHandler.Handle - Handling E2_TERM_INIT")
 
-       nbIdentityList, err := handler.rnibReaderProvider().GetListNodebIds()
+       nbIdentityList, err := handler.rnibDataService.GetListNodebIds()
        if err != nil {
                logger.Errorf("#E2TermInitNotificationHandler.Handle - Failed to get nodes list from RNIB. Error: %s", err.Error())
                return
index 8bb8a05..308d970 100644 (file)
@@ -19,9 +19,10 @@ import (
        "testing"
 )
 
-func initRanLostConnectionTest(t *testing.T) (*logger.Logger, *mocks.RnibReaderMock, *mocks.RnibWriterMock, *mocks.RmrMessengerMock, *managers.RanReconnectionManager) {
+func initRanLostConnectionTest(t *testing.T) (*logger.Logger, E2TermInitNotificationHandler, *mocks.RnibReaderMock, *mocks.RnibWriterMock, *mocks.RmrMessengerMock) {
 
        logger := initLog(t)
+       config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
 
        rmrMessengerMock := &mocks.RmrMessengerMock{}
        rmrService := getRmrService(rmrMessengerMock, logger)
@@ -34,19 +35,17 @@ func initRanLostConnectionTest(t *testing.T) (*logger.Logger, *mocks.RnibReaderM
        rnibWriterProvider := func() rNibWriter.RNibWriter {
                return writerMock
        }
-       ranSetupManager := managers.NewRanSetupManager(logger, rmrService, rnibWriterProvider)
-       ranReconnectionManager := managers.NewRanReconnectionManager(logger, configuration.ParseConfiguration(), rnibReaderProvider, rnibWriterProvider, ranSetupManager)
-       return logger, readerMock, writerMock, rmrMessengerMock, ranReconnectionManager
+       rnibDataService := services.NewRnibDataService(logger, config, rnibReaderProvider, rnibWriterProvider)
+       ranSetupManager := managers.NewRanSetupManager(logger, rmrService, rnibDataService)
+       ranReconnectionManager := managers.NewRanReconnectionManager(logger, configuration.ParseConfiguration(), rnibDataService, ranSetupManager)
+       handler := NewE2TermInitNotificationHandler(ranReconnectionManager, rnibDataService)
+       return logger, handler, readerMock, writerMock, rmrMessengerMock
 }
 
 func TestE2TerminInitHandlerSuccessOneRan(t *testing.T) {
-       log, readerMock, writerMock, rmrMessengerMock, ranReconnectMgr := initRanLostConnectionTest(t)
+       log, handler, readerMock, writerMock, rmrMessengerMock := initRanLostConnectionTest(t)
        var rnibErr error
 
-       readerProvider := func() reader.RNibReader {
-               return readerMock
-       }
-
        ids := []*entities.NbIdentity{{InventoryName: "test1"}}
        readerMock.On("GetListNodebIds").Return(ids, rnibErr)
 
@@ -62,7 +61,6 @@ func TestE2TerminInitHandlerSuccessOneRan(t *testing.T) {
 
        rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(msg, nil)
 
-       handler := NewE2TermInitNotificationHandler(ranReconnectMgr, readerProvider)
        handler.Handle(log, nil, nil)
 
        writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 1)
@@ -70,13 +68,9 @@ func TestE2TerminInitHandlerSuccessOneRan(t *testing.T) {
 }
 
 func TestE2TerminInitHandlerSuccessTwoRans(t *testing.T) {
-       log, readerMock, writerMock, rmrMessengerMock, ranReconnectMgr := initRanLostConnectionTest(t)
+       log, handler, readerMock, writerMock, rmrMessengerMock := initRanLostConnectionTest(t)
        var rnibErr error
 
-       readerProvider := func() reader.RNibReader {
-               return readerMock
-       }
-
        ids := []*entities.NbIdentity{{InventoryName: "test1"}, {InventoryName: "test2"}}
        readerMock.On("GetListNodebIds").Return(ids, rnibErr)
 
@@ -94,7 +88,6 @@ func TestE2TerminInitHandlerSuccessTwoRans(t *testing.T) {
 
        rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(msg, nil)
 
-       handler := NewE2TermInitNotificationHandler(ranReconnectMgr, readerProvider)
        handler.Handle(log, nil, nil)
 
        writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 2)
@@ -102,13 +95,9 @@ func TestE2TerminInitHandlerSuccessTwoRans(t *testing.T) {
 }
 
 func TestE2TerminInitHandlerSuccessThreeRansFirstRmrFailure(t *testing.T) {
-       log, readerMock, writerMock, rmrMessengerMock, ranReconnectMgr := initRanLostConnectionTest(t)
+       log, handler, readerMock, writerMock, rmrMessengerMock := initRanLostConnectionTest(t)
        var rnibErr error
 
-       readerProvider := func() reader.RNibReader {
-               return readerMock
-       }
-
        ids := []*entities.NbIdentity{{InventoryName: "test1"}, {InventoryName: "test2"}, {InventoryName: "test3"}}
        readerMock.On("GetListNodebIds").Return(ids, rnibErr)
 
@@ -135,7 +124,6 @@ func TestE2TerminInitHandlerSuccessThreeRansFirstRmrFailure(t *testing.T) {
 
        rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(msg0, fmt.Errorf("RMR Error"))
 
-       handler := NewE2TermInitNotificationHandler(ranReconnectMgr, readerProvider)
        handler.Handle(log, nil, nil)
 
        //test1 (before send +1, after failure +1), test2 (0) test3 (0)
@@ -145,13 +133,9 @@ func TestE2TerminInitHandlerSuccessThreeRansFirstRmrFailure(t *testing.T) {
 }
 
 func TestE2TerminInitHandlerSuccessThreeRansSecondNotFoundFailure(t *testing.T) {
-       log, readerMock, writerMock, rmrMessengerMock, ranReconnectMgr := initRanLostConnectionTest(t)
+       log, handler, readerMock, writerMock, rmrMessengerMock := initRanLostConnectionTest(t)
        var rnibErr error
 
-       readerProvider := func() reader.RNibReader {
-               return readerMock
-       }
-
        ids := []*entities.NbIdentity{{InventoryName: "test1"}, {InventoryName: "test2"}, {InventoryName: "test3"}}
        readerMock.On("GetListNodebIds").Return(ids, rnibErr)
 
@@ -183,7 +167,6 @@ func TestE2TerminInitHandlerSuccessThreeRansSecondNotFoundFailure(t *testing.T)
 
        rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(msg0, nil)
 
-       handler := NewE2TermInitNotificationHandler(ranReconnectMgr, readerProvider)
        handler.Handle(log, nil, nil)
 
        readerMock.AssertNumberOfCalls(t, "GetNodeb", 3)
@@ -194,13 +177,9 @@ func TestE2TerminInitHandlerSuccessThreeRansSecondNotFoundFailure(t *testing.T)
 }
 
 func TestE2TerminInitHandlerSuccessThreeRansSecondRnibInternalErrorFailure(t *testing.T) {
-       log, readerMock, writerMock, rmrMessengerMock, ranReconnectMgr := initRanLostConnectionTest(t)
+       log, handler, readerMock, writerMock, rmrMessengerMock := initRanLostConnectionTest(t)
        var rnibErr error
 
-       readerProvider := func() reader.RNibReader {
-               return readerMock
-       }
-
        ids := []*entities.NbIdentity{{InventoryName: "test1"}, {InventoryName: "test2"}, {InventoryName: "test3"}}
        readerMock.On("GetListNodebIds").Return(ids, rnibErr)
 
@@ -232,7 +211,6 @@ func TestE2TerminInitHandlerSuccessThreeRansSecondRnibInternalErrorFailure(t *te
 
        rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(msg0, nil)
 
-       handler := NewE2TermInitNotificationHandler(ranReconnectMgr, readerProvider)
        handler.Handle(log, nil, nil)
 
        readerMock.AssertNumberOfCalls(t, "GetNodeb", 2)
@@ -243,16 +221,11 @@ func TestE2TerminInitHandlerSuccessThreeRansSecondRnibInternalErrorFailure(t *te
 }
 
 func TestE2TerminInitHandlerSuccessZeroRans(t *testing.T) {
-       log, readerMock, writerMock, rmrMessengerMock, ranReconnectMgr := initRanLostConnectionTest(t)
+       log, handler, readerMock, writerMock, rmrMessengerMock := initRanLostConnectionTest(t)
        var rnibErr error
 
-       readerProvider := func() reader.RNibReader {
-               return readerMock
-       }
-
        readerMock.On("GetListNodebIds").Return([]*entities.NbIdentity{}, rnibErr)
 
-       handler := NewE2TermInitNotificationHandler(ranReconnectMgr, readerProvider)
        handler.Handle(log, nil, nil)
 
        writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 0)
@@ -260,15 +233,10 @@ func TestE2TerminInitHandlerSuccessZeroRans(t *testing.T) {
 }
 
 func TestE2TerminInitHandlerFailureGetListNodebIds(t *testing.T) {
-       log, readerMock, writerMock, rmrMessengerMock, ranReconnectMgr := initRanLostConnectionTest(t)
-
-       readerProvider := func() reader.RNibReader {
-               return readerMock
-       }
+       log, handler, readerMock, writerMock, rmrMessengerMock := initRanLostConnectionTest(t)
 
        readerMock.On("GetListNodebIds").Return([]*entities.NbIdentity{}, common.NewInternalError(fmt.Errorf("internal error")))
 
-       handler := NewE2TermInitNotificationHandler(ranReconnectMgr, readerProvider)
        handler.Handle(log, nil, nil)
 
        writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 0)
index 2185e2b..88763a3 100644 (file)
@@ -6,18 +6,18 @@ import (
        "e2mgr/e2pdus"
        "e2mgr/logger"
        "e2mgr/models"
-       "e2mgr/rNibWriter"
+       "e2mgr/services"
        "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
        "time"
 )
 
 type EnbLoadInformationNotificationHandler struct {
-       rnibWriterProvider func() rNibWriter.RNibWriter
+       rnibDataService services.RNibDataService
 }
 
-func NewEnbLoadInformationNotificationHandler(rnibWriterProvider func() rNibWriter.RNibWriter) EnbLoadInformationNotificationHandler {
+func NewEnbLoadInformationNotificationHandler(rnibDataService services.RNibDataService) EnbLoadInformationNotificationHandler {
        return EnbLoadInformationNotificationHandler{
-               rnibWriterProvider: rnibWriterProvider,
+               rnibDataService: rnibDataService,
        }
 }
 
@@ -47,7 +47,7 @@ func (src EnbLoadInformationNotificationHandler) Handle(logger *logger.Logger, r
 
        logger.Debugf("#EnbLoadInformationNotificationHandler.Handle - RAN name: %s - Successfully done with extracting and building RAN load information. elapsed: %f ms", request.RanName, elapsed(request.StartTime))
 
-       rnibErr := src.rnibWriterProvider().SaveRanLoadInformation(request.RanName, ranLoadInformation)
+       rnibErr := src.rnibDataService.SaveRanLoadInformation(request.RanName, ranLoadInformation)
 
        if rnibErr != nil {
                logger.Errorf("#EnbLoadInformationNotificationHandler.Handle - RAN name: %s - Failed saving RAN load information. Error: %v", request.RanName, rnibErr)
index 3595741..f6b63f3 100644 (file)
@@ -20,22 +20,19 @@ import (
        "e2mgr/logger"
        "e2mgr/managers"
        "e2mgr/models"
-       "e2mgr/rNibWriter"
+       "e2mgr/services"
        "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
-       "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
 )
 
 type SetupResponseNotificationHandler struct {
-       rnibReaderProvider   func() reader.RNibReader
-       rnibWriterProvider   func() rNibWriter.RNibWriter
+       rnibDataService      services.RNibDataService
        setupResponseManager managers.ISetupResponseManager
        notificationType     string
 }
 
-func NewSetupResponseNotificationHandler(rnibReaderProvider func() reader.RNibReader, rnibWriterProvider func() rNibWriter.RNibWriter, setupResponseManager managers.ISetupResponseManager, notificationType string) SetupResponseNotificationHandler {
+func NewSetupResponseNotificationHandler(rnibDataService services.RNibDataService, setupResponseManager managers.ISetupResponseManager, notificationType string) SetupResponseNotificationHandler {
        return SetupResponseNotificationHandler{
-               rnibReaderProvider:   rnibReaderProvider,
-               rnibWriterProvider:   rnibWriterProvider,
+               rnibDataService:      rnibDataService,
                setupResponseManager: setupResponseManager,
                notificationType:     notificationType,
        }
@@ -46,7 +43,7 @@ func (h SetupResponseNotificationHandler) Handle(logger *logger.Logger, request
 
        inventoryName := request.RanName
 
-       nodebInfo, rnibErr := h.rnibReaderProvider().GetNodeb(inventoryName)
+       nodebInfo, rnibErr := h.rnibDataService.GetNodeb(inventoryName)
 
        if rnibErr != nil {
                logger.Errorf("#SetupResponseNotificationHandler - RAN name: %s - Error fetching RAN from rNib: %v", request.RanName, rnibErr)
@@ -66,7 +63,7 @@ func (h SetupResponseNotificationHandler) Handle(logger *logger.Logger, request
                return
        }
 
-       rnibErr = h.rnibWriterProvider().SaveNodeb(nbIdentity, nodebInfo)
+       rnibErr = h.rnibDataService.SaveNodeb(nbIdentity, nodebInfo)
 
        if rnibErr != nil {
                logger.Errorf("#SetupResponseNotificationHandler - RAN name: %s - Error saving RAN to rNib: %v", request.RanName, rnibErr)
index 04358a6..d4503b8 100644 (file)
 package rmrmsghandlers
 
 import (
+       "e2mgr/configuration"
        "e2mgr/logger"
        "e2mgr/managers"
        "e2mgr/mocks"
        "e2mgr/models"
        "e2mgr/rNibWriter"
+       "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"
@@ -45,26 +47,28 @@ type setupResponseTestContext struct {
        logger               *logger.Logger
        readerMock           *mocks.RnibReaderMock
        writerMock           *mocks.RnibWriterMock
-       rnibReaderProvider   func() reader.RNibReader
-       rnibWriterProvider   func() rNibWriter.RNibWriter
+       rnibDataService      services.RNibDataService
        setupResponseManager managers.ISetupResponseManager
 }
 
 func NewSetupResponseTestContext(manager managers.ISetupResponseManager) *setupResponseTestContext {
        logger, _ := logger.InitLogger(logger.InfoLevel)
+       config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
        readerMock := &mocks.RnibReaderMock{}
        writerMock := &mocks.RnibWriterMock{}
+       rnibReaderProvider := func() reader.RNibReader {
+               return readerMock
+       }
+       rnibWriterProvider := func() rNibWriter.RNibWriter {
+               return writerMock
+       }
+       rnibDataService := services.NewRnibDataService(logger, config, rnibReaderProvider, rnibWriterProvider)
 
        return &setupResponseTestContext{
-               logger:     logger,
-               readerMock: readerMock,
-               writerMock: writerMock,
-               rnibReaderProvider: func() reader.RNibReader {
-                       return readerMock
-               },
-               rnibWriterProvider: func() rNibWriter.RNibWriter {
-                       return writerMock
-               },
+               logger:               logger,
+               readerMock:           readerMock,
+               writerMock:           writerMock,
+               rnibDataService:      rnibDataService,
                setupResponseManager: manager,
        }
 }
@@ -72,7 +76,7 @@ func NewSetupResponseTestContext(manager managers.ISetupResponseManager) *setupR
 func TestSetupResponseGetNodebFailure(t *testing.T) {
        notificationRequest := models.NotificationRequest{RanName: RanName}
        testContext := NewSetupResponseTestContext(nil)
-       handler := NewSetupResponseNotificationHandler(testContext.rnibReaderProvider, testContext.rnibWriterProvider, &managers.X2SetupResponseManager{}, "X2 Setup Response")
+       handler := NewSetupResponseNotificationHandler(testContext.rnibDataService, &managers.X2SetupResponseManager{}, "X2 Setup Response")
        testContext.readerMock.On("GetNodeb", RanName).Return(&entities.NodebInfo{}, common.NewInternalError(errors.New("Error")))
        handler.Handle(testContext.logger, &notificationRequest, nil)
        testContext.readerMock.AssertCalled(t, "GetNodeb", RanName)
@@ -83,7 +87,7 @@ func TestSetupResponseInvalidConnectionStatus(t *testing.T) {
        ranName := "test"
        notificationRequest := models.NotificationRequest{RanName: ranName}
        testContext := NewSetupResponseTestContext(nil)
-       handler := NewSetupResponseNotificationHandler(testContext.rnibReaderProvider, testContext.rnibWriterProvider, &managers.X2SetupResponseManager{}, "X2 Setup Response")
+       handler := NewSetupResponseNotificationHandler(testContext.rnibDataService, &managers.X2SetupResponseManager{}, "X2 Setup Response")
        var rnibErr error
        testContext.readerMock.On("GetNodeb", ranName).Return(&entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_SHUT_DOWN}, rnibErr)
        handler.Handle(testContext.logger, &notificationRequest, nil)
@@ -101,7 +105,7 @@ func executeHandleSuccessSetupResponse(t *testing.T, packedPdu string, setupResp
        notificationRequest := models.NotificationRequest{RanName: RanName, Payload: payload}
        testContext := NewSetupResponseTestContext(setupResponseManager)
 
-       handler := NewSetupResponseNotificationHandler(testContext.rnibReaderProvider, testContext.rnibWriterProvider, testContext.setupResponseManager, notificationType)
+       handler := NewSetupResponseNotificationHandler(testContext.rnibDataService, testContext.setupResponseManager, notificationType)
 
        var rnibErr error
 
@@ -173,7 +177,7 @@ func TestSetupResponseInvalidPayload(t *testing.T) {
        ranName := "test"
        notificationRequest := models.NotificationRequest{RanName: ranName, Payload: []byte("123")}
        testContext := NewSetupResponseTestContext(nil)
-       handler := NewSetupResponseNotificationHandler(testContext.rnibReaderProvider, testContext.rnibWriterProvider, &managers.X2SetupResponseManager{}, "X2 Setup Response")
+       handler := NewSetupResponseNotificationHandler(testContext.rnibDataService, &managers.X2SetupResponseManager{}, "X2 Setup Response")
        var rnibErr error
        testContext.readerMock.On("GetNodeb", ranName).Return(&entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTING, ConnectionAttempts: 1}, rnibErr)
        handler.Handle(testContext.logger, &notificationRequest, nil)
index e1f6841..622a338 100644 (file)
@@ -27,18 +27,18 @@ import (
        "e2mgr/logger"
        "e2mgr/models"
        "e2mgr/rmrCgo"
+       "e2mgr/services"
        "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
-       "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
        "unsafe"
 )
 
 type X2ResetRequestNotificationHandler struct {
-       rnibReaderProvider func() reader.RNibReader
+       rnibDataService services.RNibDataService
 }
 
-func NewX2ResetRequestNotificationHandler(rnibReaderProvider func() reader.RNibReader) X2ResetRequestNotificationHandler {
+func NewX2ResetRequestNotificationHandler(rnibDataService services.RNibDataService) X2ResetRequestNotificationHandler {
        return X2ResetRequestNotificationHandler{
-               rnibReaderProvider: rnibReaderProvider,
+               rnibDataService: rnibDataService,
        }
 }
 
@@ -46,7 +46,7 @@ func (src X2ResetRequestNotificationHandler) Handle(logger *logger.Logger, reque
 
        logger.Debugf("#X2ResetRequestNotificationHandler.Handle - Ran name: %s", request.RanName)
 
-       nb, rNibErr := src.rnibReaderProvider().GetNodeb(request.RanName)
+       nb, rNibErr := src.rnibDataService.GetNodeb(request.RanName)
        if rNibErr != nil {
                logger.Errorf("#X2ResetRequestNotificationHandler.Handle - failed to retrieve nodeB entity. RanName: %s. Error: %s", request.RanName, rNibErr.Error())
                printHandlingSetupResponseElapsedTimeInMs(logger, "#X2ResetRequestNotificationHandler.Handle - Summary: Elapsed time for receiving and handling reset request message from E2 terminator", request.StartTime)
index 3e32c36..309a57e 100644 (file)
 package rmrmsghandlers
 
 import (
+       "e2mgr/configuration"
+       "e2mgr/logger"
        "e2mgr/mocks"
        "e2mgr/models"
        "e2mgr/rmrCgo"
+       "e2mgr/services"
        "e2mgr/tests"
        "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
        "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
@@ -30,15 +33,23 @@ import (
        "time"
 )
 
-func TestX2ResetRequestNotifSuccess(t *testing.T) {
+func initX2ResetRequestNotifHandlerTest(t *testing.T) (*logger.Logger, X2ResetRequestNotificationHandler, *mocks.RnibReaderMock) {
        log := initLog(t)
-       payload := []byte("payload")
+       config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
        readerMock := &mocks.RnibReaderMock{}
        readerProvider := func() reader.RNibReader {
                return readerMock
        }
+       rnibDataService := services.NewRnibDataService(log, config, readerProvider, nil)
+
+       h := NewX2ResetRequestNotificationHandler(rnibDataService)
+       return log, h, readerMock
+}
 
-       h := NewX2ResetRequestNotificationHandler(readerProvider)
+func TestX2ResetRequestNotifSuccess(t *testing.T) {
+       log, h, readerMock := initX2ResetRequestNotifHandlerTest(t)
+
+       payload := []byte("payload")
 
        xaction := []byte("RanName")
        mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload), "RanName", &payload, &xaction)
@@ -59,14 +70,8 @@ func TestX2ResetRequestNotifSuccess(t *testing.T) {
 }
 
 func TestHandleX2ResetRequestNotifShuttingDownStatus(t *testing.T) {
-       log := initLog(t)
+       log, h, readerMock := initX2ResetRequestNotifHandlerTest(t)
        var payload []byte
-       readerMock := &mocks.RnibReaderMock{}
-       readerProvider := func() reader.RNibReader {
-               return readerMock
-       }
-
-       h := NewX2ResetRequestNotificationHandler(readerProvider)
 
        xaction := []byte("RanName")
        mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload), "RanName", &payload, &xaction)
@@ -82,14 +87,8 @@ func TestHandleX2ResetRequestNotifShuttingDownStatus(t *testing.T) {
 }
 
 func TestHandleX2ResetRequestNotifDisconnectStatus(t *testing.T) {
-       log := initLog(t)
+       log, h, readerMock := initX2ResetRequestNotifHandlerTest(t)
        var payload []byte
-       readerMock := &mocks.RnibReaderMock{}
-       readerProvider := func() reader.RNibReader {
-               return readerMock
-       }
-
-       h := NewX2ResetRequestNotificationHandler(readerProvider)
 
        xaction := []byte("RanName")
        mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload), "RanName", &payload, &xaction)
@@ -106,14 +105,8 @@ func TestHandleX2ResetRequestNotifDisconnectStatus(t *testing.T) {
 
 func TestHandleX2ResetRequestNotifGetNodebFailed(t *testing.T) {
 
-       log := initLog(t)
+       log, h, readerMock := initX2ResetRequestNotifHandlerTest(t)
        var payload []byte
-       readerMock := &mocks.RnibReaderMock{}
-       readerProvider := func() reader.RNibReader {
-               return readerMock
-       }
-
-       h := NewX2ResetRequestNotificationHandler(readerProvider)
        xaction := []byte("RanName")
        mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload), "RanName", &payload, &xaction)
        notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload,
index cd1556d..1ad7d98 100644 (file)
@@ -26,16 +26,16 @@ import (
        "e2mgr/e2pdus"
        "e2mgr/logger"
        "e2mgr/models"
-       "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
+       "e2mgr/services"
 )
 
 type X2ResetResponseHandler struct {
-       rnibReaderProvider func() reader.RNibReader
+       rnibDataService services.RNibDataService
 }
 
-func NewX2ResetResponseHandler(rnibReaderProvider func() reader.RNibReader) X2ResetResponseHandler {
+func NewX2ResetResponseHandler(rnibDataService services.RNibDataService) X2ResetResponseHandler {
        return X2ResetResponseHandler{
-               rnibReaderProvider: rnibReaderProvider,
+               rnibDataService: rnibDataService,
        }
 }
 
@@ -43,11 +43,11 @@ func (src X2ResetResponseHandler) Handle(logger *logger.Logger, request *models.
 
        logger.Infof("#x2ResetResponseHandler.Handle - received reset response. Payload: %x", request.Payload)
 
-       if nb, rNibErr := src.rnibReaderProvider().GetNodeb(request.RanName); rNibErr != nil {
+       if nb, rNibErr := src.rnibDataService.GetNodeb(request.RanName); rNibErr != nil {
                logger.Errorf("#x2ResetResponseHandler.Handle - failed to retrieve nb entity. RanName: %s. Error: %s", request.RanName, rNibErr.Error())
        } else {
                logger.Debugf("#x2ResetResponseHandler.Handle - nb entity retrieved. RanName %s, ConnectionStatus %s", nb.RanName, nb.ConnectionStatus)
-               refinedMessage, err := converters.UnpackX2apPduAndRefine(logger, e2pdus.MaxAsn1CodecAllocationBufferSize , request.Len, request.Payload, e2pdus.MaxAsn1CodecMessageBufferSize /*message buffer*/)
+               refinedMessage, err := converters.UnpackX2apPduAndRefine(logger, e2pdus.MaxAsn1CodecAllocationBufferSize, request.Len, request.Payload, e2pdus.MaxAsn1CodecMessageBufferSize /*message buffer*/)
                if err != nil {
                        logger.Errorf("#x2ResetResponseHandler.Handle - failed to unpack reset response message. RanName %s, Payload: %s", request.RanName, request.Payload)
                } else {
index 0134399..26f0ade 100644 (file)
 package rmrmsghandlers
 
 import (
+       "e2mgr/configuration"
        "e2mgr/logger"
        "e2mgr/mocks"
        "e2mgr/models"
        "e2mgr/rmrCgo"
+       "e2mgr/services"
        "e2mgr/tests"
        "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
        "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
@@ -30,12 +32,9 @@ import (
        "time"
 )
 
-func TestX2ResetResponseSuccess(t *testing.T) {
-       payload, err := tests.BuildPackedX2ResetResponse()
-       if err != nil {
-               t.Errorf("#x2_reset_response_handler_test.TestX2resetResponse - failed to build and pack X2ResetResponse. Error %x", err)
-       }
+func initX2ResetResponseHandlerTest(t *testing.T) (*logger.Logger, X2ResetResponseHandler, *mocks.RnibReaderMock) {
        log, err := logger.InitLogger(logger.DebugLevel)
+       config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
        if err!=nil{
                t.Errorf("#sctp_errors_notification_handler_test.TestHandleInSession - failed to initialize logger, error: %s", err)
        }
@@ -43,8 +42,20 @@ func TestX2ResetResponseSuccess(t *testing.T) {
        rnibReaderProvider := func() reader.RNibReader {
                return readerMock
        }
+       rnibDataService := services.NewRnibDataService(log, config, rnibReaderProvider, nil)
+
+       h := NewX2ResetResponseHandler(rnibDataService)
+       return log, h, readerMock
+}
+
+func TestX2ResetResponseSuccess(t *testing.T) {
+       log, h, readerMock := initX2ResetResponseHandlerTest(t)
+
+       payload, err := tests.BuildPackedX2ResetResponse()
+       if err != nil {
+               t.Errorf("#x2_reset_response_handler_test.TestX2resetResponse - failed to build and pack X2ResetResponse. Error %x", err)
+       }
 
-       h := NewX2ResetResponseHandler(rnibReaderProvider)
        xaction := []byte("RanName")
        mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload),"RanName", &payload, &xaction)
        notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload,
@@ -61,17 +72,9 @@ func TestX2ResetResponseSuccess(t *testing.T) {
 }
 
 func TestX2ResetResponseReaderFailure(t *testing.T) {
-       var payload []byte
-       log, err := logger.InitLogger(logger.DebugLevel)
-       if err!=nil{
-               t.Errorf("#sctp_errors_notification_handler_test.TestX2ResetResponseReaderFailure - failed to initialize logger, error: %s", err)
-       }
-       readerMock :=&mocks.RnibReaderMock{}
-       rnibReaderProvider := func() reader.RNibReader {
-               return readerMock
-       }
+       log, h, readerMock := initX2ResetResponseHandlerTest(t)
 
-       h := NewX2ResetResponseHandler(rnibReaderProvider)
+       var payload []byte
        xaction := []byte("RanName")
        mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload),"RanName", &payload, &xaction)
        notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload,
@@ -88,17 +91,9 @@ func TestX2ResetResponseReaderFailure(t *testing.T) {
 }
 
 func TestX2ResetResponseUnpackFailure(t *testing.T) {
-       payload := []byte("not valid payload")
-       log, err := logger.InitLogger(logger.DebugLevel)
-       if err!=nil{
-               t.Errorf("#sctp_errors_notification_handler_test.TestX2ResetResponseUnpackFailure - failed to initialize logger, error: %s", err)
-       }
-       readerMock :=&mocks.RnibReaderMock{}
-       rnibReaderProvider := func() reader.RNibReader {
-               return readerMock
-       }
+       log, h, readerMock := initX2ResetResponseHandlerTest(t)
 
-       h := NewX2ResetResponseHandler(rnibReaderProvider)
+       payload := []byte("not valid payload")
        xaction := []byte("RanName")
        mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload),"RanName", &payload, &xaction)
        notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload,
index cbad8ce..7cd6e39 100644 (file)
@@ -53,19 +53,20 @@ func main() {
        reader.Init("e2Manager", MAX_RNIB_POOL_INSTANCES)
        defer reader.Close()
 
+       rnibDataService := services.NewRnibDataService(logger, config, reader.GetRNibReader, rNibWriter.GetRNibWriter)
        rmrResponseChannel := make(chan *models.NotificationResponse, config.NotificationResponseBuffer)
        rmrService := services.NewRmrService(rmrConfig, msgImpl, rmrResponseChannel)
-       var ranSetupManager = managers.NewRanSetupManager(logger, rmrService, rNibWriter.GetRNibWriter)
-       var ranReconnectionManager = managers.NewRanReconnectionManager(logger, config, reader.GetRNibReader, rNibWriter.GetRNibWriter, ranSetupManager)
-       var nManager = notificationmanager.NewNotificationManager(reader.GetRNibReader, rNibWriter.GetRNibWriter, ranReconnectionManager)
+       var ranSetupManager = managers.NewRanSetupManager(logger, rmrService, rnibDataService)
+       var ranReconnectionManager = managers.NewRanReconnectionManager(logger, config, rnibDataService, ranSetupManager)
+       var nManager = notificationmanager.NewNotificationManager(rnibDataService, ranReconnectionManager)
 
        rmrServiceReceiver := receivers.NewRmrServiceReceiver(*rmrService, nManager)
        defer rmrService.CloseContext()
        go rmrServiceReceiver.ListenAndHandle()
        go rmrService.SendResponse()
 
-       controller := controllers.NewNodebController(logger, rmrService, reader.GetRNibReader, rNibWriter.GetRNibWriter)
-       newController := controllers.NewController(logger, rmrService, reader.GetRNibReader, rNibWriter.GetRNibWriter, config, ranSetupManager)
+       controller := controllers.NewNodebController(logger, rmrService, rnibDataService)
+       newController := controllers.NewController(logger, rmrService, rnibDataService, config, ranSetupManager)
        runServer(config.Http.Port, controller, newController)
 }
 
index 319dde7..70b81ed 100644 (file)
@@ -22,10 +22,9 @@ import (
        "e2mgr/managers"
        "e2mgr/models"
        "e2mgr/providers/rmrmsghandlerprovider"
-       "e2mgr/rNibWriter"
        "e2mgr/rmrCgo"
+       "e2mgr/services"
        "fmt"
-       "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
        "time"
 )
 
@@ -33,8 +32,8 @@ type NotificationManager struct {
        notificationHandlerProvider *rmrmsghandlerprovider.NotificationHandlerProvider
 }
 
-func NewNotificationManager(rnibReaderProvider func() reader.RNibReader, rnibWriterProvider func() rNibWriter.RNibWriter, ranReconnectionManager *managers.RanReconnectionManager) *NotificationManager {
-       notificationHandlerProvider := rmrmsghandlerprovider.NewNotificationHandlerProvider(rnibReaderProvider, rnibWriterProvider, ranReconnectionManager)
+func NewNotificationManager(rnibDataService services.RNibDataService, ranReconnectionManager *managers.RanReconnectionManager) *NotificationManager {
+       notificationHandlerProvider := rmrmsghandlerprovider.NewNotificationHandlerProvider(rnibDataService, ranReconnectionManager)
 
        return &NotificationManager{
                notificationHandlerProvider: notificationHandlerProvider,
index f42986c..f27f810 100644 (file)
@@ -20,9 +20,8 @@ package managers
 import (
        "e2mgr/configuration"
        "e2mgr/logger"
-       "e2mgr/rNibWriter"
+       "e2mgr/services"
        "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
-       "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
 )
 
 type IRanReconnectionManager interface {
@@ -30,26 +29,23 @@ type IRanReconnectionManager interface {
 }
 
 type RanReconnectionManager struct {
-       logger             *logger.Logger
-       config             *configuration.Configuration
-       rnibReaderProvider func() reader.RNibReader
-       rnibWriterProvider func() rNibWriter.RNibWriter
-       ranSetupManager    *RanSetupManager
+       logger          *logger.Logger
+       config          *configuration.Configuration
+       rnibDataService services.RNibDataService
+       ranSetupManager *RanSetupManager
 }
 
-func NewRanReconnectionManager(logger *logger.Logger, config *configuration.Configuration, rnibReaderProvider func() reader.RNibReader,
-       rnibWriterProvider func() rNibWriter.RNibWriter, ranSetupManager *RanSetupManager) *RanReconnectionManager {
+func NewRanReconnectionManager(logger *logger.Logger, config *configuration.Configuration, rnibDataService services.RNibDataService, ranSetupManager *RanSetupManager) *RanReconnectionManager {
        return &RanReconnectionManager{
-               logger:             logger,
-               config:             config,
-               rnibReaderProvider: rnibReaderProvider,
-               rnibWriterProvider: rnibWriterProvider,
-               ranSetupManager:    ranSetupManager,
+               logger:          logger,
+               config:          config,
+               rnibDataService: rnibDataService,
+               ranSetupManager: ranSetupManager,
        }
 }
 
 func (m *RanReconnectionManager) ReconnectRan(inventoryName string) error {
-       nodebInfo, rnibErr := m.rnibReaderProvider().GetNodeb(inventoryName)
+       nodebInfo, rnibErr := m.rnibDataService.GetNodeb(inventoryName)
 
        if rnibErr != nil {
                m.logger.Errorf("#RanReconnectionManager.ReconnectRan - RAN name: %s - Failed fetching RAN from rNib. Error: %v", inventoryName, rnibErr)
@@ -84,7 +80,7 @@ func (m *RanReconnectionManager) updateNodebInfoStatus(nodebInfo *entities.Nodeb
        }
 
        nodebInfo.ConnectionStatus = connectionStatus;
-       err := m.rnibWriterProvider().UpdateNodebInfo(nodebInfo)
+       err := m.rnibDataService.UpdateNodebInfo(nodebInfo)
 
        if err != nil {
                m.logger.Errorf("#RanReconnectionManager.updateNodebInfoStatus - RAN name: %s - Failed updating RAN's connection status to %s in rNib. Error: %v", nodebInfo.RanName, connectionStatus, err)
index 7679473..d8e169d 100644 (file)
@@ -40,6 +40,7 @@ func initRanLostConnectionTest(t *testing.T) (*logger.Logger, *mocks.RmrMessenge
        if err != nil {
                t.Errorf("#... - failed to initialize logger, error: %s", err)
        }
+       config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
 
        rmrMessengerMock := &mocks.RmrMessengerMock{}
        rmrService := getRmrService(rmrMessengerMock, logger)
@@ -52,8 +53,9 @@ func initRanLostConnectionTest(t *testing.T) (*logger.Logger, *mocks.RmrMessenge
        rnibWriterProvider := func() rNibWriter.RNibWriter {
                return writerMock
        }
-       ranSetupManager := NewRanSetupManager(logger, rmrService, rnibWriterProvider)
-       ranReconnectionManager := NewRanReconnectionManager(logger, configuration.ParseConfiguration(), rnibReaderProvider, rnibWriterProvider, ranSetupManager)
+       rnibDataService := services.NewRnibDataService(logger, config, rnibReaderProvider, rnibWriterProvider)
+       ranSetupManager := NewRanSetupManager(logger, rmrService, rnibDataService)
+       ranReconnectionManager := NewRanReconnectionManager(logger, configuration.ParseConfiguration(), rnibDataService, ranSetupManager)
        return logger, rmrMessengerMock, readerMock, writerMock, ranReconnectionManager
 }
 
index ef4a642..7500069 100644 (file)
@@ -22,7 +22,6 @@ import (
        "e2mgr/e2pdus"
        "e2mgr/logger"
        "e2mgr/models"
-       "e2mgr/rNibWriter"
        "e2mgr/rmrCgo"
        "e2mgr/services"
        "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
@@ -30,14 +29,14 @@ import (
 
 type RanSetupManager struct {
        logger             *logger.Logger
-       rnibWriterProvider func() rNibWriter.RNibWriter
+       rnibDataService services.RNibDataService
        rmrService         *services.RmrService
 }
 
-func NewRanSetupManager(logger *logger.Logger, rmrService *services.RmrService, rnibWriterProvider func() rNibWriter.RNibWriter) *RanSetupManager {
+func NewRanSetupManager(logger *logger.Logger, rmrService *services.RmrService, rnibDataService services.RNibDataService) *RanSetupManager {
        return &RanSetupManager{
                logger:             logger,
-               rnibWriterProvider: rnibWriterProvider,
+               rnibDataService: rnibDataService,
                rmrService:         rmrService,
        }
 }
@@ -47,7 +46,7 @@ func (m *RanSetupManager) updateConnectionStatus(nodebInfo *entities.NodebInfo,
        // Update retries and connection status
        nodebInfo.ConnectionStatus = status
        nodebInfo.ConnectionAttempts++
-       err := m.rnibWriterProvider().UpdateNodebInfo(nodebInfo)
+       err := m.rnibDataService.UpdateNodebInfo(nodebInfo)
        if err != nil {
                m.logger.Errorf("#RanSetupManager.updateConnectionStatus - Ran name: %s - Failed updating RAN's connection status to %v : %s", nodebInfo.RanName, status, err)
        } else {
@@ -61,7 +60,7 @@ func (m *RanSetupManager) updateConnectionStatusDisconnected(nodebInfo *entities
        // Update retries and connection status
        nodebInfo.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED
        nodebInfo.ConnectionAttempts--
-       err := m.rnibWriterProvider().UpdateNodebInfo(nodebInfo)
+       err := m.rnibDataService.UpdateNodebInfo(nodebInfo)
        if err != nil {
                m.logger.Errorf("#RanSetupManager.updateConnectionStatusDisconnected - Ran name: %s - Failed updating RAN's connection status to DISCONNECTED : %s", nodebInfo.RanName, err)
        } else {
index 58ca166..20f3d59 100644 (file)
 package managers
 
 import (
+       "e2mgr/configuration"
        "e2mgr/e2managererrors"
        "e2mgr/e2pdus"
        "e2mgr/logger"
        "e2mgr/mocks"
        "e2mgr/rNibWriter"
        "e2mgr/rmrCgo"
+       "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"
+       "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
        "github.com/stretchr/testify/assert"
        "github.com/stretchr/testify/mock"
        "testing"
 )
 
-func TestExecuteSetupConnectingX2Setup(t *testing.T) {
-       log := initLog(t)
+func initRanSetupManagerTest(t *testing.T) (*mocks.RmrMessengerMock, *mocks.RnibWriterMock, *RanSetupManager) {
+       logger, err := logger.InitLogger(logger.DebugLevel)
+       if err != nil {
+               t.Errorf("#... - failed to initialize logger, error: %s", err)
+       }
+       config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
 
-       ranName := "test1"
+       rmrMessengerMock := &mocks.RmrMessengerMock{}
+       rmrService := getRmrService(rmrMessengerMock, logger)
 
+       readerMock := &mocks.RnibReaderMock{}
+       rnibReaderProvider := func() reader.RNibReader {
+               return readerMock
+       }
        writerMock := &mocks.RnibWriterMock{}
-       writerProvider := func() rNibWriter.RNibWriter {
+       rnibWriterProvider := func() rNibWriter.RNibWriter {
                return writerMock
        }
+       rnibDataService := services.NewRnibDataService(logger, config, rnibReaderProvider, rnibWriterProvider)
+       ranSetupManager := NewRanSetupManager(logger, rmrService, rnibDataService)
+       return rmrMessengerMock, writerMock, ranSetupManager
+}
+
+func TestExecuteSetupConnectingX2Setup(t *testing.T) {
+       rmrMessengerMock, writerMock, mgr := initRanSetupManagerTest(t)
+
+       ranName := "test1"
 
        var initialNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
        var argNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
@@ -50,11 +71,8 @@ func TestExecuteSetupConnectingX2Setup(t *testing.T) {
        payload := e2pdus.PackedX2setupRequest
        xaction := []byte(ranName)
        msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction)
-       rmrMessengerMock := &mocks.RmrMessengerMock{}
        rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(msg, nil)
-       rmrService := getRmrService(rmrMessengerMock, log)
 
-       mgr := NewRanSetupManager(log, rmrService, writerProvider)
        if err := mgr.ExecuteSetup(initialNodeb, entities.ConnectionStatus_CONNECTING); err != nil {
                t.Errorf("want: success, got: error: %s", err)
        }
@@ -64,16 +82,11 @@ func TestExecuteSetupConnectingX2Setup(t *testing.T) {
 }
 
 func TestExecuteSetupConnectingEndcX2Setup(t *testing.T) {
-       log := initLog(t)
+       rmrMessengerMock, writerMock, mgr := initRanSetupManagerTest(t)
 
        ranName := "test1"
 
-       writerMock := &mocks.RnibWriterMock{}
-       writerProvider := func() rNibWriter.RNibWriter {
-               return writerMock
-       }
-
-       var initialNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST}
+               var initialNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST}
        var argNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST, ConnectionAttempts: 1}
        var rnibErr error
        writerMock.On("UpdateNodebInfo", argNodeb).Return(rnibErr)
@@ -81,11 +94,8 @@ func TestExecuteSetupConnectingEndcX2Setup(t *testing.T) {
        payload := e2pdus.PackedEndcX2setupRequest
        xaction := []byte(ranName)
        msg := rmrCgo.NewMBuf(rmrCgo.RIC_ENDC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction)
-       rmrMessengerMock := &mocks.RmrMessengerMock{}
        rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(msg, nil)
-       rmrService := getRmrService(rmrMessengerMock, log)
 
-       mgr := NewRanSetupManager(log, rmrService, writerProvider)
        if err := mgr.ExecuteSetup(initialNodeb, entities.ConnectionStatus_CONNECTING); err != nil {
                t.Errorf("want: success, got: error: %s", err)
        }
@@ -95,15 +105,10 @@ func TestExecuteSetupConnectingEndcX2Setup(t *testing.T) {
 }
 
 func TestExecuteSetupDisconnected(t *testing.T) {
-       log := initLog(t)
+       rmrMessengerMock, writerMock, mgr := initRanSetupManagerTest(t)
 
        ranName := "test1"
 
-       writerMock := &mocks.RnibWriterMock{}
-       writerProvider := func() rNibWriter.RNibWriter {
-               return writerMock
-       }
-
        var initialNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
        var argNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
        var argNodebDisconnected = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 0}
@@ -114,11 +119,8 @@ func TestExecuteSetupDisconnected(t *testing.T) {
        payload := []byte{0}
        xaction := []byte(ranName)
        msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction)
-       rmrMessengerMock := &mocks.RmrMessengerMock{}
        rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(msg, fmt.Errorf("send failure"))
-       rmrService := getRmrService(rmrMessengerMock, log)
 
-       mgr := NewRanSetupManager(log, rmrService, writerProvider)
        if err := mgr.ExecuteSetup(initialNodeb, entities.ConnectionStatus_CONNECTING); err == nil {
                t.Errorf("want: failure, got: success")
        }
@@ -128,15 +130,10 @@ func TestExecuteSetupDisconnected(t *testing.T) {
 }
 
 func TestExecuteSetupConnectingRnibError(t *testing.T) {
-       log := initLog(t)
+       rmrMessengerMock, writerMock, mgr := initRanSetupManagerTest(t)
 
        ranName := "test1"
 
-       writerMock := &mocks.RnibWriterMock{}
-       writerProvider := func() rNibWriter.RNibWriter {
-               return writerMock
-       }
-
        var initialNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
        var argNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
        var argNodebDisconnected = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 0}
@@ -147,11 +144,8 @@ func TestExecuteSetupConnectingRnibError(t *testing.T) {
        payload := []byte{0}
        xaction := []byte(ranName)
        msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction)
-       rmrMessengerMock := &mocks.RmrMessengerMock{}
        rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(msg, fmt.Errorf("send failure"))
-       rmrService := getRmrService(rmrMessengerMock, log)
 
-       mgr := NewRanSetupManager(log, rmrService, writerProvider)
        if err := mgr.ExecuteSetup(initialNodeb, entities.ConnectionStatus_CONNECTING); err == nil {
                t.Errorf("want: failure, got: success")
        } else {
@@ -163,15 +157,10 @@ func TestExecuteSetupConnectingRnibError(t *testing.T) {
 }
 
 func TestExecuteSetupDisconnectedRnibError(t *testing.T) {
-       log := initLog(t)
+       rmrMessengerMock, writerMock, mgr := initRanSetupManagerTest(t)
 
        ranName := "test1"
 
-       writerMock := &mocks.RnibWriterMock{}
-       writerProvider := func() rNibWriter.RNibWriter {
-               return writerMock
-       }
-
        var initialNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST}
        var argNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 1}
        var argNodebDisconnected = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_DISCONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_X2_SETUP_REQUEST, ConnectionAttempts: 0}
@@ -182,11 +171,8 @@ func TestExecuteSetupDisconnectedRnibError(t *testing.T) {
        payload := []byte{0}
        xaction := []byte(ranName)
        msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction)
-       rmrMessengerMock := &mocks.RmrMessengerMock{}
        rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(msg, fmt.Errorf("send failure"))
-       rmrService := getRmrService(rmrMessengerMock, log)
 
-       mgr := NewRanSetupManager(log, rmrService, writerProvider)
        if err := mgr.ExecuteSetup(initialNodeb, entities.ConnectionStatus_CONNECTING); err == nil {
                t.Errorf("want: failure, got: success")
        } else {
@@ -198,15 +184,10 @@ func TestExecuteSetupDisconnectedRnibError(t *testing.T) {
 }
 
 func TestExecuteSetupUnsupportedProtocol(t *testing.T) {
-       log := initLog(t)
+       rmrMessengerMock, writerMock, mgr := initRanSetupManagerTest(t)
 
        ranName := "test1"
 
-       writerMock := &mocks.RnibWriterMock{}
-       writerProvider := func() rNibWriter.RNibWriter {
-               return writerMock
-       }
-
        var initialNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED, E2ApplicationProtocol: entities.E2ApplicationProtocol_UNKNOWN_E2_APPLICATION_PROTOCOL}
        var argNodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTING, E2ApplicationProtocol: entities.E2ApplicationProtocol_UNKNOWN_E2_APPLICATION_PROTOCOL, ConnectionAttempts: 1}
        var rnibErr error
@@ -215,11 +196,8 @@ func TestExecuteSetupUnsupportedProtocol(t *testing.T) {
        payload := e2pdus.PackedX2setupRequest
        xaction := []byte(ranName)
        msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_SETUP_REQ, len(payload), ranName, &payload, &xaction)
-       rmrMessengerMock := &mocks.RmrMessengerMock{}
        rmrMessengerMock.On("SendMsg", mock.Anything, mock.Anything).Return(msg, nil)
-       rmrService := getRmrService(rmrMessengerMock, log)
 
-       mgr := NewRanSetupManager(log, rmrService, writerProvider)
        if err := mgr.ExecuteSetup(initialNodeb, entities.ConnectionStatus_CONNECTING); err == nil {
                t.Errorf("want: error, got: success")
        }
index 7891d8c..23493cd 100644 (file)
@@ -23,10 +23,8 @@ import (
        "e2mgr/handlers/httpmsghandlers"
        "e2mgr/logger"
        "e2mgr/managers"
-       "e2mgr/rNibWriter"
        "e2mgr/services"
        "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
-       "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
 )
 
 type IncomingRequest string
@@ -43,23 +41,21 @@ type IncomingRequestHandlerProvider struct {
        logger     *logger.Logger
 }
 
-func NewIncomingRequestHandlerProvider(logger *logger.Logger, rmrService *services.RmrService, config *configuration.Configuration, rNibWriterProvider func() rNibWriter.RNibWriter,
-       rNibReaderProvider func() reader.RNibReader, ranSetupManager *managers.RanSetupManager) *IncomingRequestHandlerProvider {
+func NewIncomingRequestHandlerProvider(logger *logger.Logger, rmrService *services.RmrService, config *configuration.Configuration, rNibDataService services.RNibDataService, ranSetupManager *managers.RanSetupManager) *IncomingRequestHandlerProvider {
 
        return &IncomingRequestHandlerProvider{
-               requestMap: initRequestHandlerMap(logger, rmrService, config, rNibWriterProvider, rNibReaderProvider, ranSetupManager),
+               requestMap: initRequestHandlerMap(logger, rmrService, config, rNibDataService, ranSetupManager),
                logger:     logger,
        }
 }
 
-func initRequestHandlerMap(logger *logger.Logger, rmrService *services.RmrService, config *configuration.Configuration, rNibWriterProvider func() rNibWriter.RNibWriter,
-       rNibReaderProvider func() reader.RNibReader, ranSetupManager *managers.RanSetupManager) map[IncomingRequest]httpmsghandlers.RequestHandler {
+func initRequestHandlerMap(logger *logger.Logger, rmrService *services.RmrService, config *configuration.Configuration, rNibDataService services.RNibDataService, ranSetupManager *managers.RanSetupManager) map[IncomingRequest]httpmsghandlers.RequestHandler {
 
        return map[IncomingRequest]httpmsghandlers.RequestHandler{
-               ShutdownRequest: httpmsghandlers.NewDeleteAllRequestHandler(logger, rmrService, config, rNibWriterProvider, rNibReaderProvider), //TODO change to pointer
-               ResetRequest:    httpmsghandlers.NewX2ResetRequestHandler(logger, rmrService, rNibWriterProvider, rNibReaderProvider),
-               X2SetupRequest:    httpmsghandlers.NewSetupRequestHandler(logger, rNibWriterProvider, rNibReaderProvider, ranSetupManager, entities.E2ApplicationProtocol_X2_SETUP_REQUEST),
-               EndcSetupRequest:    httpmsghandlers.NewSetupRequestHandler(logger, rNibWriterProvider, rNibReaderProvider, ranSetupManager, entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST), //TODO change to pointer
+               ShutdownRequest: httpmsghandlers.NewDeleteAllRequestHandler(logger, rmrService, config, rNibDataService), //TODO change to pointer
+               ResetRequest:    httpmsghandlers.NewX2ResetRequestHandler(logger, rmrService, rNibDataService),
+               X2SetupRequest:    httpmsghandlers.NewSetupRequestHandler(logger, rNibDataService, ranSetupManager, entities.E2ApplicationProtocol_X2_SETUP_REQUEST),
+               EndcSetupRequest:    httpmsghandlers.NewSetupRequestHandler(logger, rNibDataService, ranSetupManager, entities.E2ApplicationProtocol_ENDC_X2_SETUP_REQUEST), //TODO change to pointer
        }
 }
 
index d0e13f3..393b800 100644 (file)
@@ -42,36 +42,29 @@ func getRmrService(rmrMessengerMock *mocks.RmrMessengerMock, log *logger.Logger)
        return services.NewRmrService(services.NewRmrConfig(tests.Port, tests.MaxMsgSize, tests.Flags, log), rmrMessenger, messageChannel)
 }
 
-func TestNewIncomingRequestHandlerProvider(t *testing.T) {
+func setupTest(t *testing.T) *IncomingRequestHandlerProvider {
        rmrMessengerMock := &mocks.RmrMessengerMock{}
-
        log := initLog(t)
+       config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
        readerProvider := func() reader.RNibReader {
                return &mocks.RnibReaderMock{}
        }
        writerProvider := func() rNibWriter.RNibWriter {
                return &mocks.RnibWriterMock{}
        }
-       ranSetupManager := managers.NewRanSetupManager(log, getRmrService(rmrMessengerMock, log), rNibWriter.GetRNibWriter)
-       provider := NewIncomingRequestHandlerProvider(log, getRmrService(rmrMessengerMock, log), configuration.ParseConfiguration(), writerProvider, readerProvider, ranSetupManager)
+       rnibDataService := services.NewRnibDataService(log, config, readerProvider, writerProvider)
+       ranSetupManager := managers.NewRanSetupManager(log, getRmrService(rmrMessengerMock, log), rnibDataService)
+       return NewIncomingRequestHandlerProvider(log, getRmrService(rmrMessengerMock, log), configuration.ParseConfiguration(), rnibDataService, ranSetupManager)
+}
+
+func TestNewIncomingRequestHandlerProvider(t *testing.T) {
+       provider := setupTest(t)
 
        assert.NotNil(t, provider)
 }
 
 func TestShutdownRequestHandler(t *testing.T) {
-       rmrMessengerMock := &mocks.RmrMessengerMock{}
-
-       log := initLog(t)
-       readerProvider := func() reader.RNibReader {
-               return &mocks.RnibReaderMock{}
-       }
-       writerProvider := func() rNibWriter.RNibWriter {
-               return &mocks.RnibWriterMock{}
-       }
-
-       ranSetupManager := managers.NewRanSetupManager(log, getRmrService(rmrMessengerMock, log), rNibWriter.GetRNibWriter)
-       provider := NewIncomingRequestHandlerProvider(log, getRmrService(rmrMessengerMock, log), configuration.ParseConfiguration(), writerProvider, readerProvider, ranSetupManager)
-
+       provider := setupTest(t)
        handler, err := provider.GetHandler(ShutdownRequest)
 
        assert.NotNil(t, provider)
@@ -83,19 +76,7 @@ func TestShutdownRequestHandler(t *testing.T) {
 }
 
 func TestX2SetupRequestHandler(t *testing.T) {
-       rmrMessengerMock := &mocks.RmrMessengerMock{}
-
-       log := initLog(t)
-       readerProvider := func() reader.RNibReader {
-               return &mocks.RnibReaderMock{}
-       }
-       writerProvider := func() rNibWriter.RNibWriter {
-               return &mocks.RnibWriterMock{}
-       }
-
-       ranSetupManager := managers.NewRanSetupManager(log, getRmrService(rmrMessengerMock, log), rNibWriter.GetRNibWriter)
-       provider := NewIncomingRequestHandlerProvider(log, getRmrService(rmrMessengerMock, log), configuration.ParseConfiguration(), writerProvider, readerProvider, ranSetupManager)
-
+       provider := setupTest(t)
        handler, err := provider.GetHandler(X2SetupRequest)
 
        assert.NotNil(t, provider)
@@ -107,19 +88,7 @@ func TestX2SetupRequestHandler(t *testing.T) {
 }
 
 func TestEndcSetupRequestHandler(t *testing.T) {
-       rmrMessengerMock := &mocks.RmrMessengerMock{}
-
-       log := initLog(t)
-       readerProvider := func() reader.RNibReader {
-               return &mocks.RnibReaderMock{}
-       }
-       writerProvider := func() rNibWriter.RNibWriter {
-               return &mocks.RnibWriterMock{}
-       }
-
-       ranSetupManager := managers.NewRanSetupManager(log, getRmrService(rmrMessengerMock, log), rNibWriter.GetRNibWriter)
-       provider := NewIncomingRequestHandlerProvider(log, getRmrService(rmrMessengerMock, log), configuration.ParseConfiguration(), writerProvider, readerProvider, ranSetupManager)
-
+       provider := setupTest(t)
        handler, err := provider.GetHandler(EndcSetupRequest)
 
        assert.NotNil(t, provider)
@@ -131,18 +100,7 @@ func TestEndcSetupRequestHandler(t *testing.T) {
 }
 
 func TestGetShutdownHandlerFailure(t *testing.T) {
-       rmrMessengerMock := &mocks.RmrMessengerMock{}
-       log := initLog(t)
-       readerProvider := func() reader.RNibReader {
-               return &mocks.RnibReaderMock{}
-       }
-       writerProvider := func() rNibWriter.RNibWriter {
-               return &mocks.RnibWriterMock{}
-       }
-
-       ranSetupManager := managers.NewRanSetupManager(log, getRmrService(rmrMessengerMock, log), rNibWriter.GetRNibWriter)
-       provider := NewIncomingRequestHandlerProvider(log, getRmrService(rmrMessengerMock, log), configuration.ParseConfiguration(), writerProvider, readerProvider, ranSetupManager)
-
+       provider := setupTest(t)
        _, actual := provider.GetHandler("test")
        expected := &e2managererrors.InternalError{}
 
index 0a01b76..d85bf95 100644 (file)
@@ -20,36 +20,35 @@ package rmrmsghandlerprovider
 import (
        "e2mgr/handlers/rmrmsghandlers"
        "e2mgr/managers"
-       "e2mgr/rNibWriter"
        "e2mgr/rmrCgo"
+       "e2mgr/services"
        "fmt"
-       "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
 )
 
 type NotificationHandlerProvider struct {
        notificationHandlers map[int]rmrmsghandlers.NotificationHandler
 }
 
-func NewNotificationHandlerProvider(rnibReaderProvider func() reader.RNibReader, rnibWriterProvider func() rNibWriter.RNibWriter, ranReconnectionManager *managers.RanReconnectionManager) *NotificationHandlerProvider {
+func NewNotificationHandlerProvider(rnibDataService services.RNibDataService, ranReconnectionManager *managers.RanReconnectionManager) *NotificationHandlerProvider {
        return &NotificationHandlerProvider{
-               notificationHandlers: initNotificationHandlersMap(rnibReaderProvider, rnibWriterProvider, ranReconnectionManager),
+               notificationHandlers: initNotificationHandlersMap(rnibDataService, ranReconnectionManager),
        }
 }
 
 //TODO change handlers.NotificationHandler to *handlers.NotificationHandler
-func initNotificationHandlersMap(rnibReaderProvider func() reader.RNibReader, rnibWriterProvider func() rNibWriter.RNibWriter, ranReconnectionManager *managers.RanReconnectionManager) map[int]rmrmsghandlers.NotificationHandler {
+func initNotificationHandlersMap(rnibDataService services.RNibDataService, ranReconnectionManager *managers.RanReconnectionManager) map[int]rmrmsghandlers.NotificationHandler {
        return map[int]rmrmsghandlers.NotificationHandler{
-               rmrCgo.RIC_X2_SETUP_RESP:           rmrmsghandlers.NewSetupResponseNotificationHandler(rnibReaderProvider, rnibWriterProvider, managers.NewX2SetupResponseManager(), "X2 Setup Response"),
-               rmrCgo.RIC_X2_SETUP_FAILURE:        rmrmsghandlers.NewSetupResponseNotificationHandler(rnibReaderProvider, rnibWriterProvider, managers.NewX2SetupFailureResponseManager(), "X2 Setup Failure Response"),
-               rmrCgo.RIC_ENDC_X2_SETUP_RESP:      rmrmsghandlers.NewSetupResponseNotificationHandler(rnibReaderProvider, rnibWriterProvider, managers.NewEndcSetupResponseManager(), "ENDC Setup Response"),
-               rmrCgo.RIC_ENDC_X2_SETUP_FAILURE:   rmrmsghandlers.NewSetupResponseNotificationHandler(rnibReaderProvider, rnibWriterProvider, managers.NewEndcSetupFailureResponseManager(), "ENDC Setup Failure Response"),
+               rmrCgo.RIC_X2_SETUP_RESP:           rmrmsghandlers.NewSetupResponseNotificationHandler(rnibDataService, managers.NewX2SetupResponseManager(), "X2 Setup Response"),
+               rmrCgo.RIC_X2_SETUP_FAILURE:        rmrmsghandlers.NewSetupResponseNotificationHandler(rnibDataService, managers.NewX2SetupFailureResponseManager(), "X2 Setup Failure Response"),
+               rmrCgo.RIC_ENDC_X2_SETUP_RESP:      rmrmsghandlers.NewSetupResponseNotificationHandler(rnibDataService, managers.NewEndcSetupResponseManager(), "ENDC Setup Response"),
+               rmrCgo.RIC_ENDC_X2_SETUP_FAILURE:   rmrmsghandlers.NewSetupResponseNotificationHandler(rnibDataService, managers.NewEndcSetupFailureResponseManager(), "ENDC Setup Failure Response"),
                rmrCgo.RIC_SCTP_CONNECTION_FAILURE: rmrmsghandlers.NewRanLostConnectionHandler(ranReconnectionManager),
-               rmrCgo.RIC_ENB_LOAD_INFORMATION:    rmrmsghandlers.NewEnbLoadInformationNotificationHandler(rnibWriterProvider),
+               rmrCgo.RIC_ENB_LOAD_INFORMATION:    rmrmsghandlers.NewEnbLoadInformationNotificationHandler(rnibDataService),
                rmrCgo.RIC_ENB_CONF_UPDATE:         rmrmsghandlers.NewX2EnbConfigurationUpdateHandler(),
                rmrCgo.RIC_ENDC_CONF_UPDATE:        rmrmsghandlers.NewEndcConfigurationUpdateHandler(),
-               rmrCgo.RIC_X2_RESET_RESP:           rmrmsghandlers.NewX2ResetResponseHandler(rnibReaderProvider),
-               rmrCgo.RIC_X2_RESET:                rmrmsghandlers.NewX2ResetRequestNotificationHandler(rnibReaderProvider),
-               rmrCgo.RIC_E2_TERM_INIT:            rmrmsghandlers.NewE2TermInitNotificationHandler(ranReconnectionManager, rnibReaderProvider),
+               rmrCgo.RIC_X2_RESET_RESP:           rmrmsghandlers.NewX2ResetResponseHandler(rnibDataService),
+               rmrCgo.RIC_X2_RESET:                rmrmsghandlers.NewX2ResetRequestNotificationHandler(rnibDataService),
+               rmrCgo.RIC_E2_TERM_INIT:            rmrmsghandlers.NewE2TermInitNotificationHandler(ranReconnectionManager, rnibDataService),
        }
 }
 
index b3e7c24..463259a 100644 (file)
@@ -39,9 +39,9 @@ import (
  * Verify support for known providers.
  */
 
-func TestGetNotificationHandlerSuccess(t *testing.T) {
-
+func initTestCase(t *testing.T) (services.RNibDataService, *managers.RanReconnectionManager) {
        logger := initLog(t)
+       config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
 
        readerMock := &mocks.RnibReaderMock{}
        rnibReaderProvider := func() reader.RNibReader {
@@ -51,27 +51,34 @@ func TestGetNotificationHandlerSuccess(t *testing.T) {
        rnibWriterProvider := func() rNibWriter.RNibWriter {
                return writerMock
        }
-       ranSetupManager := managers.NewRanSetupManager(logger, getRmrService(&mocks.RmrMessengerMock{}, logger), rNibWriter.GetRNibWriter)
-       ranReconnectionManager := managers.NewRanReconnectionManager(logger, configuration.ParseConfiguration(), rnibReaderProvider, rnibWriterProvider, ranSetupManager)
+       rnibDataService := services.NewRnibDataService(logger, config, rnibReaderProvider, rnibWriterProvider)
+       ranSetupManager := managers.NewRanSetupManager(logger, getRmrService(&mocks.RmrMessengerMock{}, logger), rnibDataService)
+       ranReconnectionManager := managers.NewRanReconnectionManager(logger, configuration.ParseConfiguration(), rnibDataService, ranSetupManager)
+       return rnibDataService, ranReconnectionManager
+}
+
+func TestGetNotificationHandlerSuccess(t *testing.T) {
+
+       rnibDataService, ranReconnectionManager := initTestCase(t)
 
        var testCases = []struct {
                msgType int
                handler rmrmsghandlers.NotificationHandler
        }{
-               {rmrCgo.RIC_X2_SETUP_RESP, rmrmsghandlers.NewSetupResponseNotificationHandler(rnibReaderProvider, rnibWriterProvider, managers.NewX2SetupResponseManager(), "X2 Setup Response")},
-               {rmrCgo.RIC_X2_SETUP_FAILURE, rmrmsghandlers.NewSetupResponseNotificationHandler(rnibReaderProvider, rnibWriterProvider, managers.NewX2SetupFailureResponseManager(), "X2 Setup Failure Response")},
-               {rmrCgo.RIC_ENDC_X2_SETUP_RESP, rmrmsghandlers.NewSetupResponseNotificationHandler(rnibReaderProvider, rnibWriterProvider, managers.NewEndcSetupResponseManager(), "ENDC Setup Response")},
-               {rmrCgo.RIC_ENDC_X2_SETUP_FAILURE, rmrmsghandlers.NewSetupResponseNotificationHandler(rnibReaderProvider, rnibWriterProvider, managers.NewEndcSetupFailureResponseManager(), "ENDC Setup Failure Response"),},
+               {rmrCgo.RIC_X2_SETUP_RESP, rmrmsghandlers.NewSetupResponseNotificationHandler(rnibDataService, managers.NewX2SetupResponseManager(), "X2 Setup Response")},
+               {rmrCgo.RIC_X2_SETUP_FAILURE, rmrmsghandlers.NewSetupResponseNotificationHandler(rnibDataService, managers.NewX2SetupFailureResponseManager(), "X2 Setup Failure Response")},
+               {rmrCgo.RIC_ENDC_X2_SETUP_RESP, rmrmsghandlers.NewSetupResponseNotificationHandler(rnibDataService, managers.NewEndcSetupResponseManager(), "ENDC Setup Response")},
+               {rmrCgo.RIC_ENDC_X2_SETUP_FAILURE, rmrmsghandlers.NewSetupResponseNotificationHandler(rnibDataService, managers.NewEndcSetupFailureResponseManager(), "ENDC Setup Failure Response"),},
                {rmrCgo.RIC_SCTP_CONNECTION_FAILURE, rmrmsghandlers.NewRanLostConnectionHandler(ranReconnectionManager)},
-               {rmrCgo.RIC_ENB_LOAD_INFORMATION, rmrmsghandlers.NewEnbLoadInformationNotificationHandler(rnibWriterProvider)},
+               {rmrCgo.RIC_ENB_LOAD_INFORMATION, rmrmsghandlers.NewEnbLoadInformationNotificationHandler(rnibDataService)},
                {rmrCgo.RIC_ENB_CONF_UPDATE, rmrmsghandlers.X2EnbConfigurationUpdateHandler{}},
                {rmrCgo.RIC_ENDC_CONF_UPDATE, rmrmsghandlers.EndcConfigurationUpdateHandler{}},
-               {rmrCgo.RIC_E2_TERM_INIT, rmrmsghandlers.NewE2TermInitNotificationHandler(ranReconnectionManager, rnibReaderProvider)},
+               {rmrCgo.RIC_E2_TERM_INIT, rmrmsghandlers.NewE2TermInitNotificationHandler(ranReconnectionManager, rnibDataService)},
        }
 
        for _, tc := range testCases {
 
-               provider := NewNotificationHandlerProvider(rnibReaderProvider, rnibWriterProvider, ranReconnectionManager)
+               provider := NewNotificationHandlerProvider(rnibDataService, ranReconnectionManager)
                t.Run(fmt.Sprintf("%d", tc.msgType), func(t *testing.T) {
                        handler, err := provider.GetNotificationHandler(tc.msgType)
                        if err != nil {
@@ -92,8 +99,6 @@ func TestGetNotificationHandlerSuccess(t *testing.T) {
 
 func TestGetNotificationHandlerFailure(t *testing.T) {
 
-       logger := initLog(t)
-
        var testCases = []struct {
                msgType   int
                errorText string
@@ -101,19 +106,9 @@ func TestGetNotificationHandlerFailure(t *testing.T) {
                {9999 /*unknown*/, "notification handler not found"},
        }
        for _, tc := range testCases {
-               readerMock := &mocks.RnibReaderMock{}
-               rnibReaderProvider := func() reader.RNibReader {
-                       return readerMock
-               }
-               writerMock := &mocks.RnibWriterMock{}
-               rnibWriterProvider := func() rNibWriter.RNibWriter {
-                       return writerMock
-               }
-
-               ranSetupManager := managers.NewRanSetupManager(logger, getRmrService(&mocks.RmrMessengerMock{}, logger), rNibWriter.GetRNibWriter)
-               ranReconnectionManager := managers.NewRanReconnectionManager(logger, configuration.ParseConfiguration(), rnibReaderProvider, rnibWriterProvider, ranSetupManager)
-
-               provider := NewNotificationHandlerProvider(rnibReaderProvider, rnibWriterProvider, ranReconnectionManager)
+
+               rnibDataService, ranReconnectionManager := initTestCase(t)
+               provider := NewNotificationHandlerProvider(rnibDataService, ranReconnectionManager)
                t.Run(fmt.Sprintf("%d", tc.msgType), func(t *testing.T) {
                        _, err := provider.GetNotificationHandler(tc.msgType)
                        if err == nil {
index 0e16ecd..4dabf92 100644 (file)
@@ -8,3 +8,5 @@ rmr:
 notificationResponseBuffer: 100
 bigRedButtonTimeoutSec: 5
 maxConnectionAttempts: 3
+maxRnibConnectionAttempts: 3
+rnibRetryIntervalMs: 10
index 15e9857..1482085 100644 (file)
@@ -58,6 +58,8 @@ func getRmrService(rmrMessengerMock *mocks.RmrMessengerMock, log *logger.Logger)
 }
 
 func getRmrServiceReceiver(rmrMessengerMock *mocks.RmrMessengerMock, logger *logger.Logger) *RmrServiceReceiver {
+       config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
+
        readerMock := &mocks.RnibReaderMock{}
        rnibReaderProvider := func() reader.RNibReader {
                return readerMock
@@ -67,10 +69,11 @@ func getRmrServiceReceiver(rmrMessengerMock *mocks.RmrMessengerMock, logger *log
                return writerMock
        }
 
+       rnibDataService := services.NewRnibDataService(logger, config, rnibReaderProvider, rnibWriterProvider)
        rmrService := getRmrService(rmrMessengerMock, logger)
-       ranSetupManager := managers.NewRanSetupManager(logger, rmrService, rNibWriter.GetRNibWriter)
-       ranReconnectionManager := managers.NewRanReconnectionManager(logger, configuration.ParseConfiguration(), rnibReaderProvider, rnibWriterProvider, ranSetupManager)
-       nManager := notificationmanager.NewNotificationManager(rnibReaderProvider, rnibWriterProvider, ranReconnectionManager)
+       ranSetupManager := managers.NewRanSetupManager(logger, rmrService, rnibDataService)
+       ranReconnectionManager := managers.NewRanReconnectionManager(logger, configuration.ParseConfiguration(), rnibDataService, ranSetupManager)
+       nManager := notificationmanager.NewNotificationManager(rnibDataService, ranReconnectionManager)
 
        return NewRmrServiceReceiver(*rmrService, nManager)
 }
diff --git a/E2Manager/services/rnib_data_service.go b/E2Manager/services/rnib_data_service.go
new file mode 100644 (file)
index 0000000..8a91894
--- /dev/null
@@ -0,0 +1,128 @@
+package services
+
+import (
+       "e2mgr/configuration"
+       "e2mgr/logger"
+       "e2mgr/rNibWriter"
+       "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"
+       "net"
+       "time"
+)
+
+type RNibDataService interface {
+       SaveNodeb(nbIdentity *entities.NbIdentity, nb *entities.NodebInfo) error
+       UpdateNodebInfo(nodebInfo *entities.NodebInfo) error
+       SaveRanLoadInformation(inventoryName string, ranLoadInformation *entities.RanLoadInformation) error
+       GetNodeb(ranName string) (*entities.NodebInfo, error)
+       GetListNodebIds() ([]*entities.NbIdentity, error)
+}
+
+type rNibDataService struct {
+       logger             *logger.Logger
+       rnibReaderProvider func() reader.RNibReader
+       rnibWriterProvider func() rNibWriter.RNibWriter
+       maxAttempts        int
+       retryInterval      time.Duration
+}
+
+func NewRnibDataService(logger *logger.Logger, config *configuration.Configuration, rnibReaderProvider func() reader.RNibReader, rnibWriterProvider func() rNibWriter.RNibWriter) *rNibDataService {
+       return &rNibDataService{
+               logger:             logger,
+               rnibReaderProvider: rnibReaderProvider,
+               rnibWriterProvider: rnibWriterProvider,
+               maxAttempts:        config.MaxRnibConnectionAttempts,
+               retryInterval:      time.Duration(config.RnibRetryIntervalMs) * time.Millisecond,
+       }
+}
+
+func (w *rNibDataService) UpdateNodebInfo(nodebInfo *entities.NodebInfo) error {
+       w.logger.Infof("#RnibDataService.UpdateNodebInfo - nodebInfo: %s", nodebInfo)
+
+       err := w.retry("UpdateNodebInfo", func() (err error) {
+               err = w.rnibWriterProvider().UpdateNodebInfo(nodebInfo)
+               return
+       })
+
+       return err
+}
+
+func (w *rNibDataService) SaveNodeb(nbIdentity *entities.NbIdentity, nb *entities.NodebInfo) error {
+       w.logger.Infof("#RnibDataService.SaveNodeb - nbIdentity: %s, nodebInfo: %s", nbIdentity, nb)
+
+       err := w.retry("SaveNodeb", func() (err error) {
+               err = w.rnibWriterProvider().SaveNodeb(nbIdentity, nb)
+               return
+       })
+
+       return err
+}
+
+func (w *rNibDataService) SaveRanLoadInformation(inventoryName string, ranLoadInformation *entities.RanLoadInformation) error {
+       w.logger.Infof("#RnibDataService.SaveRanLoadInformation - inventoryName: %s, ranLoadInformation: %s", inventoryName, ranLoadInformation)
+
+       err := w.retry("SaveRanLoadInformation", func() (err error) {
+               err = w.rnibWriterProvider().SaveRanLoadInformation(inventoryName, ranLoadInformation)
+               return
+       })
+
+       return err
+}
+
+func (w *rNibDataService) GetNodeb(ranName string) (*entities.NodebInfo, error) {
+       w.logger.Infof("#RnibDataService.GetNodeb - ranName: %s", ranName)
+
+       var nodeb *entities.NodebInfo = nil
+
+       err := w.retry("GetNodeb", func() (err error) {
+               nodeb, err = w.rnibReaderProvider().GetNodeb(ranName)
+               return
+       })
+
+       return nodeb, err
+}
+
+func (w *rNibDataService) GetListNodebIds() ([]*entities.NbIdentity, error) {
+       w.logger.Infof("#RnibDataService.GetListNodebIds")
+
+       var nodeIds []*entities.NbIdentity = nil
+
+       err := w.retry("GetListNodebIds", func() (err error) {
+               nodeIds, err = w.rnibReaderProvider().GetListNodebIds()
+               return
+       })
+
+       return nodeIds, err
+}
+
+func (w *rNibDataService) retry(rnibFunc string, f func() error) (err error) {
+       attempts := w.maxAttempts
+
+       for i := 1; ; i++ {
+               err = f()
+               if err == nil {
+                       return
+               }
+               if !w.isConnError(err) {
+                       return err
+               }
+               if i >= attempts {
+                       w.logger.Errorf("#RnibDataService.retry - after %d attempts of %s, last error: %s", attempts, rnibFunc, err)
+                       return err
+               }
+               time.Sleep(w.retryInterval)
+
+               w.logger.Infof("#RnibDataService.retry - retrying %d %s after error: %s", i, rnibFunc, err)
+       }
+}
+
+func (w *rNibDataService) isConnError(err error) bool {
+       internalErr, ok := err.(common.InternalError)
+       if !ok {
+               return false
+       }
+       _, ok = internalErr.Err.(*net.OpError)
+
+       return ok
+}
diff --git a/E2Manager/services/rnib_data_service_test.go b/E2Manager/services/rnib_data_service_test.go
new file mode 100644 (file)
index 0000000..7a96310
--- /dev/null
@@ -0,0 +1,186 @@
+package services
+
+import (
+       "e2mgr/configuration"
+       "e2mgr/logger"
+       "e2mgr/mocks"
+       "e2mgr/rNibWriter"
+       "fmt"
+       "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
+       "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
+       "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
+       "github.com/stretchr/testify/assert"
+       "net"
+       "strings"
+       "testing"
+)
+
+func setupTest(t *testing.T) (*rNibDataService, *mocks.RnibReaderMock, *mocks.RnibWriterMock) {
+       logger, err := logger.InitLogger(logger.DebugLevel)
+       if err != nil {
+               t.Errorf("#... - failed to initialize logger, error: %s", err)
+       }
+
+       config := &configuration.Configuration{RnibRetryIntervalMs: 10, MaxRnibConnectionAttempts: 3}
+
+       readerMock := &mocks.RnibReaderMock{}
+       rnibReaderProvider := func() reader.RNibReader {
+               return readerMock
+       }
+
+       writerMock := &mocks.RnibWriterMock{}
+       rnibWriterProvider := func() rNibWriter.RNibWriter {
+               return writerMock
+       }
+
+       rnibDataService := NewRnibDataService(logger, config, rnibReaderProvider, rnibWriterProvider)
+       assert.NotNil(t, rnibDataService)
+
+       return rnibDataService, readerMock, writerMock
+}
+
+func TestSuccessfulSaveNodeb(t *testing.T) {
+       rnibDataService, _, writerMock := setupTest(t)
+
+       nodebInfo := &entities.NodebInfo{}
+       nbIdentity := &entities.NbIdentity{}
+       writerMock.On("SaveNodeb", nbIdentity, nodebInfo).Return(nil)
+
+       rnibDataService.SaveNodeb(nbIdentity, nodebInfo)
+       writerMock.AssertNumberOfCalls(t, "SaveNodeb", 1)
+}
+
+func TestConnFailureSaveNodeb(t *testing.T) {
+       rnibDataService, _, writerMock := setupTest(t)
+
+       nodebInfo := &entities.NodebInfo{}
+       nbIdentity := &entities.NbIdentity{}
+       mockErr := common.InternalError{Err: &net.OpError{Err: fmt.Errorf("connection error")}}
+       writerMock.On("SaveNodeb", nbIdentity, nodebInfo).Return(mockErr)
+
+       rnibDataService.SaveNodeb(nbIdentity, nodebInfo)
+       writerMock.AssertNumberOfCalls(t, "SaveNodeb", 3)
+}
+
+func TestNonConnFailureSaveNodeb(t *testing.T) {
+       rnibDataService, _, writerMock := setupTest(t)
+
+       nodebInfo := &entities.NodebInfo{}
+       nbIdentity := &entities.NbIdentity{}
+       mockErr := common.InternalError{Err: fmt.Errorf("non connection failure")}
+       writerMock.On("SaveNodeb", nbIdentity, nodebInfo).Return(mockErr)
+
+       rnibDataService.SaveNodeb(nbIdentity, nodebInfo)
+       writerMock.AssertNumberOfCalls(t, "SaveNodeb", 1)
+}
+
+func TestSuccessfulUpdateNodebInfo(t *testing.T) {
+       rnibDataService, _, writerMock := setupTest(t)
+
+       nodebInfo := &entities.NodebInfo{}
+       writerMock.On("UpdateNodebInfo", nodebInfo).Return(nil)
+
+       rnibDataService.UpdateNodebInfo(nodebInfo)
+       writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 1)
+}
+
+func TestConnFailureUpdateNodebInfo(t *testing.T) {
+       rnibDataService, _, writerMock := setupTest(t)
+
+       nodebInfo := &entities.NodebInfo{}
+       mockErr := common.InternalError{Err: &net.OpError{Err: fmt.Errorf("connection error")}}
+       writerMock.On("UpdateNodebInfo", nodebInfo).Return(mockErr)
+
+       rnibDataService.UpdateNodebInfo(nodebInfo)
+       writerMock.AssertNumberOfCalls(t, "UpdateNodebInfo", 3)
+}
+
+func TestSuccessfulSaveRanLoadInformation(t *testing.T) {
+       rnibDataService, _, writerMock := setupTest(t)
+
+       var ranName string = "abcd"
+       ranLoadInformation := &entities.RanLoadInformation{}
+       writerMock.On("SaveRanLoadInformation", ranName, ranLoadInformation).Return(nil)
+
+       rnibDataService.SaveRanLoadInformation(ranName, ranLoadInformation)
+       writerMock.AssertNumberOfCalls(t, "SaveRanLoadInformation", 1)
+}
+
+func TestConnFailureSaveRanLoadInformation(t *testing.T) {
+       rnibDataService, _, writerMock := setupTest(t)
+
+       var ranName string = "abcd"
+       ranLoadInformation := &entities.RanLoadInformation{}
+       mockErr := common.InternalError{Err: &net.OpError{Err: fmt.Errorf("connection error")}}
+       writerMock.On("SaveRanLoadInformation", ranName, ranLoadInformation).Return(mockErr)
+
+       rnibDataService.SaveRanLoadInformation(ranName, ranLoadInformation)
+       writerMock.AssertNumberOfCalls(t, "SaveRanLoadInformation", 3)
+}
+
+func TestSuccessfulGetNodeb(t *testing.T) {
+       rnibDataService, readerMock, _ := setupTest(t)
+
+       invName := "abcd"
+       nodebInfo := &entities.NodebInfo{}
+       readerMock.On("GetNodeb", invName).Return(nodebInfo, nil)
+
+       res, err := rnibDataService.GetNodeb(invName)
+       readerMock.AssertNumberOfCalls(t, "GetNodeb", 1)
+       assert.Equal(t, nodebInfo, res)
+       assert.Nil(t, err)
+}
+
+func TestConnFailureGetNodeb(t *testing.T) {
+       rnibDataService, readerMock, _ := setupTest(t)
+
+       invName := "abcd"
+       var nodeb *entities.NodebInfo = nil
+       mockErr := common.InternalError{Err: &net.OpError{Err: fmt.Errorf("connection error")}}
+       readerMock.On("GetNodeb", invName).Return(nodeb, mockErr)
+
+       res, err := rnibDataService.GetNodeb(invName)
+       readerMock.AssertNumberOfCalls(t, "GetNodeb", 3)
+       assert.True(t, strings.Contains(err.Error(), "connection error", ))
+       assert.Equal(t, nodeb, res)
+}
+
+func TestSuccessfulGetNodebIdList(t *testing.T) {
+       rnibDataService, readerMock, _ := setupTest(t)
+
+       nodeIds := []*entities.NbIdentity{}
+       readerMock.On("GetListNodebIds").Return(nodeIds, nil)
+
+       res, err := rnibDataService.GetListNodebIds()
+       readerMock.AssertNumberOfCalls(t, "GetListNodebIds", 1)
+       assert.Equal(t, nodeIds, res)
+       assert.Nil(t, err)
+}
+
+func TestConnFailureGetNodebIdList(t *testing.T) {
+       rnibDataService, readerMock, _ := setupTest(t)
+
+       var nodeIds []*entities.NbIdentity = nil
+       mockErr := common.InternalError{Err: &net.OpError{Err: fmt.Errorf("connection error")}}
+       readerMock.On("GetListNodebIds").Return(nodeIds, mockErr)
+
+       res, err := rnibDataService.GetListNodebIds()
+       readerMock.AssertNumberOfCalls(t, "GetListNodebIds", 3)
+       assert.True(t, strings.Contains(err.Error(), "connection error", ))
+       assert.Equal(t, nodeIds, res)
+}
+
+//func TestConnFailureThenSuccessGetNodebIdList(t *testing.T) {
+//     rnibDataService, readerMock, _ := setupTest(t)
+//
+//     var nilNodeIds []*entities.NbIdentity = nil
+//     nodeIds := []*entities.NbIdentity{}
+//     mockErr := common.InternalError{Err: &net.OpError{Err:fmt.Errorf("connection error")}}
+//     //readerMock.On("GetListNodebIds").Return(nilNodeIds, mockErr)
+//     //readerMock.On("GetListNodebIds").Return(nodeIds, nil)
+//
+//     res, err := rnibDataService.GetListNodebIds()
+//     readerMock.AssertNumberOfCalls(t, "GetListNodebIds", 2)
+//     assert.True(t, strings.Contains(err.Error(),"connection failure", ))
+//     assert.Equal(t, nodeIds, res)
+//}
diff --git a/E2Manager/services/rnib_reader_service.go b/E2Manager/services/rnib_reader_service.go
deleted file mode 100644 (file)
index 4b014d7..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-//
-// 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 services
-
-import (
-       "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
-       "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
-)
-
-type RnibReaderService struct {
-       rnibReaderProvider func() reader.RNibReader
-}
-
-func NewRnibReaderService(rnibReaderProvider func() reader.RNibReader) *RnibReaderService{
-       return &RnibReaderService{rnibReaderProvider}
-}
-
-func (s RnibReaderService) GetNodeb(ranName string) (*entities.NodebInfo, error) {
-       return s.rnibReaderProvider().GetNodeb(ranName)
-}
-
-func (s  RnibReaderService) GetNodebIdList()([]*entities.NbIdentity, error) {
-       return s.rnibReaderProvider().GetListNodebIds()
-}
-
-