[RICPLT-1853] Add RanReconnectionManager & RanSetupManager | Refactor providers/manag... 06/806/1
authoris005q <idan.shalom@intl.att.com>
Mon, 26 Aug 2019 14:56:18 +0000 (17:56 +0300)
committeris005q <idan.shalom@intl.att.com>
Mon, 26 Aug 2019 14:56:31 +0000 (17:56 +0300)
Change-Id: Id7d6b32421caec0daad26c7d72cc88a5642f5547
Signed-off-by: is005q <idan.shalom@intl.att.com>
26 files changed:
E2Manager/configuration/configuration.go
E2Manager/controllers/controller.go
E2Manager/controllers/controller_test.go
E2Manager/controllers/nodeb_controller.go
E2Manager/cp.out [deleted file]
E2Manager/go.mod
E2Manager/go.sum
E2Manager/handlers/ranLostConnectionHandler.go
E2Manager/handlers/ranLostConnectionHandler_test.go
E2Manager/handlers/setup_request_handler.go
E2Manager/main/http_server.go
E2Manager/managers/notificationmanager/notification_manager.go [moved from E2Manager/managers/notification_manager.go with 77% similarity]
E2Manager/managers/ran_reconnection_manager.go [new file with mode: 0644]
E2Manager/managers/ran_setup_manager.go [new file with mode: 0644]
E2Manager/mocks/rnibWriterMock.go
E2Manager/providers/httpmsghandlerprovider/incoming_request_handler_provider.go [moved from E2Manager/providers/incoming_request_handler_provider.go with 78% similarity]
E2Manager/providers/httpmsghandlerprovider/incoming_request_handler_provider_test.go [moved from E2Manager/providers/incoming_request_handler_provider_test.go with 95% similarity]
E2Manager/providers/httpmsghandlerprovider/request_handler_provider.go [moved from E2Manager/providers/request_handler_provider.go with 98% similarity]
E2Manager/providers/httpmsghandlerprovider/request_handler_provider_test.go [moved from E2Manager/providers/request_handler_provider_test.go with 98% similarity]
E2Manager/providers/rmrmsghandlerprovider/notification_handler_provider.go [moved from E2Manager/providers/notification_handler_provider.go with 70% similarity]
E2Manager/providers/rmrmsghandlerprovider/notification_handler_provider_test.go [moved from E2Manager/providers/notification_handler_provider_test.go with 67% similarity]
E2Manager/rNibWriter/rNibWriter.go
E2Manager/rNibWriter/rNibWriter_test.go
E2Manager/resources/configuration.yaml
E2Manager/services/receivers/rmr_service_receiver.go
E2Manager/services/receivers/rmr_service_receiver_test.go

index 5bca875..b0611b8 100644 (file)
@@ -34,7 +34,8 @@ type Configuration struct {
                MaxMsgSize int
        }
        NotificationResponseBuffer int
-       BigRedButtonTimeoutSec  int
+       BigRedButtonTimeoutSec     int
+       MaxConnectionAttempts      int
 }
 
 func ParseConfiguration() *Configuration{
@@ -43,6 +44,7 @@ func ParseConfiguration() *Configuration{
        viper.AddConfigPath("E2Manager/resources/")
        viper.AddConfigPath("./resources/")  //For production
        viper.AddConfigPath("../resources/") //For test under Docker
+       viper.AddConfigPath("../../resources/") //For test under Docker
        err := viper.ReadInConfig()
        if err != nil {
                panic(fmt.Sprintf("#http_server.parseConfiguration - failed to read configuration file: %s\n", err))
@@ -55,7 +57,7 @@ func ParseConfiguration() *Configuration{
 
        config.NotificationResponseBuffer = viper.GetInt("notificationResponseBuffer")
        config.BigRedButtonTimeoutSec = viper.GetInt("bigRedButtonTimeoutSec")
-
+       config.MaxConnectionAttempts = viper.GetInt("maxConnectionAttempts")
        return &config
 }
 
index 6d638c4..4f785da 100644 (file)
@@ -22,7 +22,7 @@ import (
        "e2mgr/e2managererrors"
        "e2mgr/logger"
        "e2mgr/models"
-       "e2mgr/providers"
+       "e2mgr/providers/httpmsghandlerprovider"
        "e2mgr/rNibWriter"
        "e2mgr/services"
        "encoding/json"
@@ -34,39 +34,40 @@ import (
 const (
        ParamRanName = "ranName"
 )
+
 type Controller struct {
-       logger         *logger.Logger
-       handlerProvider *providers.IncomingRequestHandlerProvider
+       logger          *logger.Logger
+       handlerProvider *httpmsghandlerprovider.IncomingRequestHandlerProvider
 }
 
 func NewController(logger *logger.Logger, rmrService *services.RmrService, rNibReaderProvider func() reader.RNibReader, rNibWriterProvider func() rNibWriter.RNibWriter,
        config *configuration.Configuration) *Controller {
 
-       provider := providers.NewIncomingRequestHandlerProvider(logger, rmrService, config, rNibWriterProvider, rNibReaderProvider)
+       provider := httpmsghandlerprovider.NewIncomingRequestHandlerProvider(logger, rmrService, config, rNibWriterProvider, rNibReaderProvider)
        return &Controller{
-               logger: logger,
+               logger:          logger,
                handlerProvider: provider,
        }
 }
 
-func (c *Controller)ShutdownHandler(writer http.ResponseWriter, r *http.Request, params httprouter.Params){
+func (c *Controller) ShutdownHandler(writer http.ResponseWriter, r *http.Request, params httprouter.Params) {
        c.logger.Infof("[Client -> E2 Manager] #controller.ShutdownHandler - request: %v", prettifyRequest(r))
-       c.handleRequest(writer, &r.Header, providers.ShutdownRequest,nil, false, http.StatusNoContent)
+       c.handleRequest(writer, &r.Header, httpmsghandlerprovider.ShutdownRequest, nil, false, http.StatusNoContent)
 }
 
-func (c *Controller) X2ResetHandler(writer http.ResponseWriter, r *http.Request, params httprouter.Params){
+func (c *Controller) X2ResetHandler(writer http.ResponseWriter, r *http.Request, params httprouter.Params) {
        c.logger.Infof("[Client -> E2 Manager] #controller.X2ResetHandler - request: %v", prettifyRequest(r))
-       request:= models.ResetRequest{}
-       ranName:= params.ByName(ParamRanName)
+       request := models.ResetRequest{}
+       ranName := params.ByName(ParamRanName)
 
-       if !c.extractJsonBody(r, &request, writer){
+       if !c.extractJsonBody(r, &request, writer) {
                return
        }
        request.RanName = ranName
-       c.handleRequest(writer, &r.Header, providers.ResetRequest, request, false, http.StatusNoContent)
+       c.handleRequest(writer, &r.Header, httpmsghandlerprovider.ResetRequest, request, false, http.StatusNoContent)
 }
 
-func (c *Controller) extractJsonBody(r *http.Request, request models.Request, writer http.ResponseWriter) bool{
+func (c *Controller) extractJsonBody(r *http.Request, request models.Request, writer http.ResponseWriter) bool {
        if r.ContentLength <= 0 {
                return true
        }
@@ -83,7 +84,7 @@ func (c *Controller) extractJsonBody(r *http.Request, request models.Request, wr
        return true
 }
 
-func (c *Controller) handleRequest(writer http.ResponseWriter, header *http.Header, requestName providers.IncomingRequest,
+func (c *Controller) handleRequest(writer http.ResponseWriter, header *http.Header, requestName httpmsghandlerprovider.IncomingRequest,
        request models.Request, validateHeader bool, httpStatusResponse int) {
 
        if validateHeader {
@@ -95,7 +96,7 @@ func (c *Controller) handleRequest(writer http.ResponseWriter, header *http.Head
                }
        }
 
-       handler,err := c.handlerProvider.GetHandler(requestName)
+       handler, err := c.handlerProvider.GetHandler(requestName)
        if err != nil {
                c.handleErrorResponse(err, writer)
                return
@@ -112,17 +113,17 @@ func (c *Controller) handleRequest(writer http.ResponseWriter, header *http.Head
        c.logger.Infof("[E2 Manager -> Client] #controller.handleRequest - status response: %v", httpStatusResponse)
 }
 
-func (c *Controller) validateRequestHeader( header *http.Header) error {
+func (c *Controller) validateRequestHeader(header *http.Header) error {
 
-       if header.Get("Content-Type") != "application/json"{
+       if header.Get("Content-Type") != "application/json" {
                c.logger.Errorf("#controller.validateRequestHeader - validation failure, incorrect content type")
 
-               return  e2managererrors.NewHeaderValidationError()
+               return e2managererrors.NewHeaderValidationError()
        }
        return nil
 }
 
-func (c *Controller) handleErrorResponse(err error, writer http.ResponseWriter){
+func (c *Controller) handleErrorResponse(err error, writer http.ResponseWriter) {
 
        var errorResponseDetails models.ErrorResponse
        var httpError int
@@ -179,4 +180,4 @@ func (c *Controller) handleErrorResponse(err error, writer http.ResponseWriter){
        if err != nil {
                c.logger.Errorf("#controller.handleErrorResponse - Cannot send response. writer:%v", writer)
        }
-}
\ No newline at end of file
+}
index 420badd..b869252 100644 (file)
@@ -24,7 +24,7 @@ import (
        "e2mgr/logger"
        "e2mgr/mocks"
        "e2mgr/models"
-       "e2mgr/providers"
+       "e2mgr/providers/httpmsghandlerprovider"
        "e2mgr/rNibWriter"
        "e2mgr/rmrCgo"
        "e2mgr/tests"
@@ -92,7 +92,7 @@ func TestHeaderValidationFailed(t *testing.T) {
 
        header := &http.Header{}
 
-       controller.handleRequest(writer, header, providers.ShutdownRequest, nil, true, http.StatusNoContent)
+       controller.handleRequest(writer, header, httpmsghandlerprovider.ShutdownRequest, nil, true, http.StatusNoContent)
 
        var errorResponse = parseJsonRequest(t, writer.Body)
        err := e2managererrors.NewHeaderValidationError()
@@ -102,7 +102,7 @@ func TestHeaderValidationFailed(t *testing.T) {
        assert.Equal(t, errorResponse.Message, err.Err.Message)
 }
 
-func TestShutdownStatusNoContent(t *testing.T){
+func TestShutdownStatusNoContent(t *testing.T) {
        log := initLog(t)
 
        rmrMessengerMock := &mocks.RmrMessengerMock{}
@@ -178,7 +178,7 @@ func TestHandleCommandAlreadyInProgressError(t *testing.T) {
        assert.Equal(t, errorResponse.Message, err.Err.Message)
 }
 
-func TestValidateHeaders(t *testing.T){
+func TestValidateHeaders(t *testing.T) {
        log := initLog(t)
 
        rmrMessengerMock := &mocks.RmrMessengerMock{}
@@ -221,8 +221,7 @@ func initLog(t *testing.T) *logger.Logger {
        return log
 }
 
-
-func TestX2ResetHandleSuccessfulRequestedCause(t *testing.T){
+func TestX2ResetHandleSuccessfulRequestedCause(t *testing.T) {
        log := initLog(t)
 
        ranName := "test1"
@@ -235,33 +234,33 @@ func TestX2ResetHandleSuccessfulRequestedCause(t *testing.T){
        writerProvider := func() rNibWriter.RNibWriter {
                return writerMock
        }
-       payload:= []byte {0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x05, 0x40, 0x01, 0x40}
+       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)
+       msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_RESET, len(payload), ranName, &payload, &xaction)
        rmrMessengerMock := &mocks.RmrMessengerMock{}
-       rmrMessengerMock.On("SendMsg",msg,mock.Anything).Return(msg,nil)
+       rmrMessengerMock.On("SendMsg", msg, mock.Anything).Return(msg, nil)
 
        config := configuration.ParseConfiguration()
-       rmrService:=getRmrService(rmrMessengerMock, log)
+       rmrService := getRmrService(rmrMessengerMock, log)
 
        writer := httptest.NewRecorder()
        controller := NewController(log, rmrService, readerProvider, writerProvider, config)
 
-       var nodeb = &entities.NodebInfo{ConnectionStatus:  entities.ConnectionStatus_CONNECTED }
-       readerMock.On("GetNodeb",ranName).Return(nodeb, nil)
+       var nodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED}
+       readerMock.On("GetNodeb", ranName).Return(nodeb, nil)
 
        data4Req := map[string]interface{}{"cause": "protocol:transfer-syntax-error"}
        b := new(bytes.Buffer)
        _ = json.NewEncoder(b).Encode(data4Req)
        req, _ := http.NewRequest("PUT", "https://localhost:3800/nodeb-reset", b)
 
-       param:= httprouter.Param{Key:"ranName", Value: ranName}
-       controller.X2ResetHandler(writer, req, []httprouter.Param {param})
+       param := httprouter.Param{Key: "ranName", Value: ranName}
+       controller.X2ResetHandler(writer, req, []httprouter.Param{param})
        assert.Equal(t, http.StatusNoContent, writer.Result().StatusCode)
 
 }
 
-func TestX2ResetHandleSuccessfulRequestedDefault(t *testing.T){
+func TestX2ResetHandleSuccessfulRequestedDefault(t *testing.T) {
        log := initLog(t)
 
        ranName := "test1"
@@ -275,32 +274,32 @@ func TestX2ResetHandleSuccessfulRequestedDefault(t *testing.T){
                return writerMock
        }
        // o&m intervention
-       payload:= []byte {0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x05, 0x40, 0x01, 0x64}
+       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)
+       msg := rmrCgo.NewMBuf(rmrCgo.RIC_X2_RESET, len(payload), ranName, &payload, &xaction)
        rmrMessengerMock := &mocks.RmrMessengerMock{}
-       rmrMessengerMock.On("SendMsg",msg,mock.Anything).Return(msg,nil)
+       rmrMessengerMock.On("SendMsg", msg, mock.Anything).Return(msg, nil)
 
        config := configuration.ParseConfiguration()
-       rmrService:=getRmrService(rmrMessengerMock, log)
+       rmrService := getRmrService(rmrMessengerMock, log)
 
        writer := httptest.NewRecorder()
        controller := NewController(log, rmrService, readerProvider, writerProvider, config)
 
-       var nodeb = &entities.NodebInfo{ConnectionStatus:  entities.ConnectionStatus_CONNECTED }
-       readerMock.On("GetNodeb",ranName).Return(nodeb, nil)
+       var nodeb = &entities.NodebInfo{ConnectionStatus: entities.ConnectionStatus_CONNECTED}
+       readerMock.On("GetNodeb", ranName).Return(nodeb, nil)
 
        // no body
        b := new(bytes.Buffer)
        req, _ := http.NewRequest("PUT", "https://localhost:3800/nodeb-reset", b)
 
-       param:= httprouter.Param{Key:"ranName", Value: ranName}
-       controller.X2ResetHandler(writer, req, []httprouter.Param {param})
+       param := httprouter.Param{Key: "ranName", Value: ranName}
+       controller.X2ResetHandler(writer, req, []httprouter.Param{param})
        assert.Equal(t, http.StatusNoContent, writer.Result().StatusCode)
 
 }
 
-func TestX2ResetHandleFailureInvalidBody(t *testing.T){
+func TestX2ResetHandleFailureInvalidBody(t *testing.T) {
        log := initLog(t)
 
        ranName := "test1"
@@ -316,7 +315,7 @@ func TestX2ResetHandleFailureInvalidBody(t *testing.T){
        rmrMessengerMock := &mocks.RmrMessengerMock{}
 
        config := configuration.ParseConfiguration()
-       rmrService:=getRmrService(rmrMessengerMock, log)
+       rmrService := getRmrService(rmrMessengerMock, log)
 
        writer := httptest.NewRecorder()
        controller := NewController(log, rmrService, readerProvider, writerProvider, config)
@@ -325,8 +324,8 @@ func TestX2ResetHandleFailureInvalidBody(t *testing.T){
        b := strings.NewReader("{cause:\"protocol:transfer-syntax-error\"")
        req, _ := http.NewRequest("PUT", "https://localhost:3800/nodeb-reset", b)
 
-       param:= httprouter.Param{Key:"ranName", Value: ranName}
-       controller.X2ResetHandler(writer, req, []httprouter.Param {param})
+       param := httprouter.Param{Key: "ranName", Value: ranName}
+       controller.X2ResetHandler(writer, req, []httprouter.Param{param})
        assert.Equal(t, http.StatusBadRequest, writer.Result().StatusCode)
 
        _, ok := rmrService.E2sessions[ranName]
@@ -334,7 +333,7 @@ func TestX2ResetHandleFailureInvalidBody(t *testing.T){
 
 }
 
-func TestHandleErrorResponse(t *testing.T){
+func TestHandleErrorResponse(t *testing.T) {
        log := initLog(t)
 
        readerMock := &mocks.RnibReaderMock{}
@@ -348,40 +347,39 @@ func TestHandleErrorResponse(t *testing.T){
        rmrMessengerMock := &mocks.RmrMessengerMock{}
 
        config := configuration.ParseConfiguration()
-       rmrService:=getRmrService(rmrMessengerMock, log)
-
+       rmrService := getRmrService(rmrMessengerMock, log)
 
        controller := NewController(log, rmrService, readerProvider, writerProvider, config)
 
        writer := httptest.NewRecorder()
-       controller.handleErrorResponse(e2managererrors.NewRnibDbError(),writer)
+       controller.handleErrorResponse(e2managererrors.NewRnibDbError(), writer)
        assert.Equal(t, http.StatusInternalServerError, writer.Result().StatusCode)
 
        writer = httptest.NewRecorder()
-       controller.handleErrorResponse(e2managererrors.NewCommandAlreadyInProgressError(),writer)
+       controller.handleErrorResponse(e2managererrors.NewCommandAlreadyInProgressError(), writer)
        assert.Equal(t, http.StatusMethodNotAllowed, writer.Result().StatusCode)
 
        writer = httptest.NewRecorder()
-       controller.handleErrorResponse(e2managererrors.NewHeaderValidationError(),writer)
+       controller.handleErrorResponse(e2managererrors.NewHeaderValidationError(), writer)
        assert.Equal(t, http.StatusUnsupportedMediaType, writer.Result().StatusCode)
 
        writer = httptest.NewRecorder()
-       controller.handleErrorResponse(e2managererrors.NewWrongStateError("",""),writer)
+       controller.handleErrorResponse(e2managererrors.NewWrongStateError("", ""), writer)
        assert.Equal(t, http.StatusBadRequest, writer.Result().StatusCode)
 
        writer = httptest.NewRecorder()
-       controller.handleErrorResponse(e2managererrors.NewRequestValidationError(),writer)
+       controller.handleErrorResponse(e2managererrors.NewRequestValidationError(), writer)
        assert.Equal(t, http.StatusBadRequest, writer.Result().StatusCode)
 
        writer = httptest.NewRecorder()
-       controller.handleErrorResponse(e2managererrors.NewRmrError(),writer)
+       controller.handleErrorResponse(e2managererrors.NewRmrError(), writer)
        assert.Equal(t, http.StatusInternalServerError, writer.Result().StatusCode)
 
        writer = httptest.NewRecorder()
-       controller.handleErrorResponse(e2managererrors.NewResourceNotFoundError(),writer)
+       controller.handleErrorResponse(e2managererrors.NewResourceNotFoundError(), writer)
        assert.Equal(t, http.StatusNotFound, writer.Result().StatusCode)
 
        writer = httptest.NewRecorder()
-       controller.handleErrorResponse(fmt.Errorf("ErrorError"),writer)
+       controller.handleErrorResponse(fmt.Errorf("ErrorError"), writer)
        assert.Equal(t, http.StatusInternalServerError, writer.Result().StatusCode)
 }
index a3286f8..50cb49b 100644 (file)
@@ -20,7 +20,7 @@ package controllers
 import (
        "e2mgr/logger"
        "e2mgr/models"
-       "e2mgr/providers"
+       "e2mgr/providers/httpmsghandlerprovider"
        "e2mgr/rNibWriter"
        "e2mgr/services"
        "e2mgr/sessions"
@@ -77,7 +77,6 @@ func NewNodebController(logger *logger.Logger, rmrService *services.RmrService,
        }
 }
 
-
 func prettifyRequest(request *http.Request) string {
        dump, _ := httputil.DumpRequest(request, true)
        requestPrettyPrint := strings.Replace(string(dump), "\r\n", " ", -1)
@@ -89,7 +88,7 @@ func (rc NodebController) HandleRequest(writer http.ResponseWriter, request *htt
        rc.Logger.Infof("[Client -> E2 Manager] #nodeb_controller.HandleRequest - request: %v", prettifyRequest(request))
 
        messageTypeParam := params.ByName("messageType")
-       requestHandlerProvider := providers.NewRequestHandlerProvider(rc.rnibWriterProvider)
+       requestHandlerProvider := httpmsghandlerprovider.NewRequestHandlerProvider(rc.rnibWriterProvider)
        handler, err := requestHandlerProvider.GetHandler(rc.Logger, messageTypeParam)
 
        if err != nil {
@@ -139,7 +138,7 @@ func (rc NodebController) HandleRequest(writer http.ResponseWriter, request *htt
        printHandlingRequestElapsedTimeInMs(rc.Logger, startTime)
 }
 
-func (rc NodebController) GetNodebIdList (writer http.ResponseWriter, request *http.Request, params httprouter.Params) {
+func (rc NodebController) GetNodebIdList(writer http.ResponseWriter, request *http.Request, params httprouter.Params) {
        startTime := time.Now()
        rnibReaderService := services.NewRnibReaderService(rc.rnibReaderProvider)
        nodebIdList, rnibError := rnibReaderService.GetNodebIdList()
@@ -147,16 +146,16 @@ func (rc NodebController) GetNodebIdList (writer http.ResponseWriter, request *h
        if rnibError != nil {
                rc.Logger.Errorf("%v", rnibError);
                httpStatusCode, errorCode, errorMessage := rnibErrorToHttpError(rnibError)
-               handleErrorResponse(rc.Logger,httpStatusCode,errorCode,errorMessage,writer,startTime )
+               handleErrorResponse(rc.Logger, httpStatusCode, errorCode, errorMessage, writer, startTime)
                return;
        }
 
-       pmList:= utils.ConvertNodebIdListToProtoMessageList(*nodebIdList)
+       pmList := utils.ConvertNodebIdListToProtoMessageList(*nodebIdList)
        result, err := utils.MarshalProtoMessageListToJsonArray(pmList)
 
        if err != nil {
                rc.Logger.Errorf("%v", err);
-               handleErrorResponse(rc.Logger,http.StatusInternalServerError,internalErrorCode,internalErrorMessage,writer,startTime )
+               handleErrorResponse(rc.Logger, http.StatusInternalServerError, internalErrorCode, internalErrorMessage, writer, startTime)
                return;
        }
 
diff --git a/E2Manager/cp.out b/E2Manager/cp.out
deleted file mode 100644 (file)
index 5194ca7..0000000
+++ /dev/null
@@ -1,841 +0,0 @@
-mode: set
-e2mgr/controllers/nodeb_controller.go:69.68,78.2 3 1
-e2mgr/controllers/nodeb_controller.go:81.52,85.2 3 1
-e2mgr/controllers/nodeb_controller.go:87.118,95.16 6 1
-e2mgr/controllers/nodeb_controller.go:100.2,102.16 2 1
-e2mgr/controllers/nodeb_controller.go:107.2,109.74 2 1
-e2mgr/controllers/nodeb_controller.go:114.2,116.16 2 1
-e2mgr/controllers/nodeb_controller.go:121.2,134.16 8 1
-e2mgr/controllers/nodeb_controller.go:139.2,139.59 1 1
-e2mgr/controllers/nodeb_controller.go:95.16,98.3 2 1
-e2mgr/controllers/nodeb_controller.go:102.16,105.3 2 0
-e2mgr/controllers/nodeb_controller.go:109.74,112.3 2 1
-e2mgr/controllers/nodeb_controller.go:116.16,119.3 2 0
-e2mgr/controllers/nodeb_controller.go:134.16,137.3 2 0
-e2mgr/controllers/nodeb_controller.go:142.120,147.22 4 1
-e2mgr/controllers/nodeb_controller.go:154.2,157.16 3 1
-e2mgr/controllers/nodeb_controller.go:163.2,165.30 3 1
-e2mgr/controllers/nodeb_controller.go:147.22,152.3 4 1
-e2mgr/controllers/nodeb_controller.go:157.16,161.3 3 0
-e2mgr/controllers/nodeb_controller.go:168.113,174.22 5 1
-e2mgr/controllers/nodeb_controller.go:181.2,184.16 3 1
-e2mgr/controllers/nodeb_controller.go:190.2,192.30 3 1
-e2mgr/controllers/nodeb_controller.go:174.22,179.3 4 1
-e2mgr/controllers/nodeb_controller.go:184.16,188.3 3 0
-e2mgr/controllers/nodeb_controller.go:195.129,198.2 1 1
-e2mgr/controllers/nodeb_controller.go:200.93,202.78 2 1
-e2mgr/controllers/nodeb_controller.go:206.2,206.28 1 1
-e2mgr/controllers/nodeb_controller.go:202.78,205.3 2 0
-e2mgr/controllers/nodeb_controller.go:209.96,211.33 1 1
-e2mgr/controllers/nodeb_controller.go:215.2,219.16 2 1
-e2mgr/controllers/nodeb_controller.go:223.2,223.12 1 1
-e2mgr/controllers/nodeb_controller.go:211.33,214.3 2 0
-e2mgr/controllers/nodeb_controller.go:219.16,221.3 1 1
-e2mgr/controllers/nodeb_controller.go:226.150,235.16 8 1
-e2mgr/controllers/nodeb_controller.go:235.16,237.3 1 0
-e2mgr/controllers/nodeb_controller.go:240.86,243.2 1 1
-e2mgr/controllers/nodeb_controller.go:245.75,246.29 1 1
-e2mgr/controllers/nodeb_controller.go:247.33,248.70 1 1
-e2mgr/controllers/nodeb_controller.go:249.29,250.81 1 1
-e2mgr/controllers/nodeb_controller.go:251.31,252.77 1 0
-e2mgr/controllers/nodeb_controller.go:253.10,254.81 1 0
-e2mgr/controllers/controller.go:40.107,48.2 2 1
-e2mgr/controllers/controller.go:50.107,53.2 1 1
-e2mgr/controllers/controller.go:57.72,61.20 2 1
-e2mgr/controllers/controller.go:70.2,71.16 2 1
-e2mgr/controllers/controller.go:76.2,78.16 2 1
-e2mgr/controllers/controller.go:83.2,84.110 2 1
-e2mgr/controllers/controller.go:61.20,64.17 2 1
-e2mgr/controllers/controller.go:64.17,67.4 2 1
-e2mgr/controllers/controller.go:71.16,74.3 2 0
-e2mgr/controllers/controller.go:78.16,81.3 2 1
-e2mgr/controllers/controller.go:87.72,89.53 1 1
-e2mgr/controllers/controller.go:94.2,94.12 1 1
-e2mgr/controllers/controller.go:89.53,93.3 2 1
-e2mgr/controllers/controller.go:97.80,102.16 3 1
-e2mgr/controllers/controller.go:122.2,130.16 6 1
-e2mgr/controllers/controller.go:102.16,103.21 1 1
-e2mgr/controllers/controller.go:104.37,107.46 3 1
-e2mgr/controllers/controller.go:108.55,111.43 3 1
-e2mgr/controllers/controller.go:112.47,115.47 3 1
-e2mgr/controllers/controller.go:116.11,119.46 3 1
-e2mgr/controllers/controller.go:130.16,132.3 1 0
-e2mgr/logger/logger.go:71.58,72.85 1 1
-e2mgr/logger/logger.go:75.2,75.27 1 1
-e2mgr/logger/logger.go:72.85,74.3 1 1
-e2mgr/logger/logger.go:78.54,81.19 3 1
-e2mgr/logger/logger.go:99.2,99.16 1 1
-e2mgr/logger/logger.go:102.2,102.36 1 1
-e2mgr/logger/logger.go:82.18,83.54 1 1
-e2mgr/logger/logger.go:84.17,85.53 1 1
-e2mgr/logger/logger.go:86.17,87.53 1 0
-e2mgr/logger/logger.go:88.18,89.54 1 0
-e2mgr/logger/logger.go:90.19,91.55 1 0
-e2mgr/logger/logger.go:92.18,93.54 1 0
-e2mgr/logger/logger.go:94.18,95.54 1 1
-e2mgr/logger/logger.go:96.10,97.58 1 1
-e2mgr/logger/logger.go:99.16,101.3 1 1
-e2mgr/logger/logger.go:105.29,108.2 2 1
-e2mgr/logger/logger.go:110.60,111.21 1 1
-e2mgr/logger/logger.go:111.21,114.3 2 1
-e2mgr/logger/logger.go:117.61,118.21 1 1
-e2mgr/logger/logger.go:118.21,121.3 2 1
-e2mgr/logger/logger.go:124.61,127.2 2 1
-e2mgr/logger/logger.go:129.60,132.2 2 0
-e2mgr/logger/logger.go:134.54,138.2 3 1
-e2mgr/logger/logger.go:140.34,142.2 1 1
-e2mgr/logger/logger.go:144.35,146.2 1 1
-e2mgr/logger/logger.go:148.62,151.2 2 1
-e2mgr/logger/logger.go:153.62,173.2 2 1
-e2mgr/logger/logger.go:175.92,177.2 1 1
-e2mgr/logger/logger.go:179.84,183.2 3 1
-e2mgr/main/http_server.go:39.13,43.16 4 0
-e2mgr/main/http_server.go:47.2,60.59 13 0
-e2mgr/main/http_server.go:43.16,46.3 2 0
-e2mgr/main/http_server.go:63.163,76.58 10 0
-e2mgr/main/http_server.go:76.58,78.3 1 0
-e2mgr/models/e2_request_message.go:33.59,35.2 1 1
-e2mgr/models/e2_request_message.go:37.65,39.2 1 1
-e2mgr/models/e2_request_message.go:41.128,43.2 1 1
-e2mgr/models/e2_request_message.go:45.90,52.2 4 1
-e2mgr/models/notification_request.go:30.125,38.2 1 0
-e2mgr/models/notification_response.go:31.86,33.2 1 0
-e2mgr/providers/incoming_request_handler_provider.go:41.79,47.2 1 0
-e2mgr/providers/incoming_request_handler_provider.go:50.91,55.2 1 0
-e2mgr/providers/incoming_request_handler_provider.go:57.121,60.9 2 0
-e2mgr/providers/incoming_request_handler_provider.go:65.2,65.21 1 0
-e2mgr/providers/incoming_request_handler_provider.go:60.9,63.3 2 0
-e2mgr/providers/notification_handler_provider.go:34.160,40.2 1 1
-e2mgr/providers/notification_handler_provider.go:42.164,54.2 1 1
-e2mgr/providers/notification_handler_provider.go:56.123,59.9 2 1
-e2mgr/providers/notification_handler_provider.go:63.2,63.21 1 1
-e2mgr/providers/notification_handler_provider.go:59.9,61.3 1 1
-e2mgr/providers/request_handler_provider.go:32.105,35.2 2 1
-e2mgr/providers/request_handler_provider.go:37.98,42.2 1 1
-e2mgr/providers/request_handler_provider.go:44.120,47.9 2 1
-e2mgr/providers/request_handler_provider.go:53.2,53.21 1 1
-e2mgr/providers/request_handler_provider.go:47.9,51.3 3 1
-e2mgr/rNibWriter/rNibWriter.go:47.43,49.22 1 1
-e2mgr/rNibWriter/rNibWriter.go:49.22,52.4 2 0
-e2mgr/rNibWriter/rNibWriter.go:53.25,55.4 1 0
-e2mgr/rNibWriter/rNibWriter.go:60.86,62.2 1 1
-e2mgr/rNibWriter/rNibWriter.go:66.33,68.2 1 1
-e2mgr/rNibWriter/rNibWriter.go:72.119,76.72 2 1
-e2mgr/rNibWriter/rNibWriter.go:79.2,81.16 3 1
-e2mgr/rNibWriter/rNibWriter.go:84.2,86.19 3 1
-e2mgr/rNibWriter/rNibWriter.go:89.2,91.24 2 1
-e2mgr/rNibWriter/rNibWriter.go:99.2,99.28 1 1
-e2mgr/rNibWriter/rNibWriter.go:105.2,105.28 1 1
-e2mgr/rNibWriter/rNibWriter.go:111.2,112.16 2 1
-e2mgr/rNibWriter/rNibWriter.go:115.2,115.24 1 1
-e2mgr/rNibWriter/rNibWriter.go:125.2,125.12 1 1
-e2mgr/rNibWriter/rNibWriter.go:76.72,78.3 1 1
-e2mgr/rNibWriter/rNibWriter.go:81.16,83.3 1 1
-e2mgr/rNibWriter/rNibWriter.go:86.19,88.3 1 1
-e2mgr/rNibWriter/rNibWriter.go:91.24,93.20 2 1
-e2mgr/rNibWriter/rNibWriter.go:96.3,96.35 1 1
-e2mgr/rNibWriter/rNibWriter.go:93.20,95.4 1 0
-e2mgr/rNibWriter/rNibWriter.go:99.28,101.20 2 1
-e2mgr/rNibWriter/rNibWriter.go:101.20,103.4 1 1
-e2mgr/rNibWriter/rNibWriter.go:105.28,107.20 2 1
-e2mgr/rNibWriter/rNibWriter.go:107.20,109.4 1 1
-e2mgr/rNibWriter/rNibWriter.go:112.16,114.3 1 1
-e2mgr/rNibWriter/rNibWriter.go:115.24,117.17 2 1
-e2mgr/rNibWriter/rNibWriter.go:120.3,121.17 2 1
-e2mgr/rNibWriter/rNibWriter.go:117.17,119.4 1 0
-e2mgr/rNibWriter/rNibWriter.go:121.17,123.4 1 0
-e2mgr/rNibWriter/rNibWriter.go:131.142,137.20 3 1
-e2mgr/rNibWriter/rNibWriter.go:141.2,143.16 2 1
-e2mgr/rNibWriter/rNibWriter.go:147.2,152.16 4 1
-e2mgr/rNibWriter/rNibWriter.go:156.2,156.12 1 1
-e2mgr/rNibWriter/rNibWriter.go:137.20,139.3 1 1
-e2mgr/rNibWriter/rNibWriter.go:143.16,145.3 1 1
-e2mgr/rNibWriter/rNibWriter.go:152.16,154.3 1 1
-e2mgr/rNibWriter/rNibWriter.go:162.13,164.2 1 1
-e2mgr/rNibWriter/rNibWriter.go:166.144,167.29 1 1
-e2mgr/rNibWriter/rNibWriter.go:184.2,184.19 1 1
-e2mgr/rNibWriter/rNibWriter.go:167.29,170.17 3 1
-e2mgr/rNibWriter/rNibWriter.go:173.3,174.20 2 1
-e2mgr/rNibWriter/rNibWriter.go:177.3,179.20 3 1
-e2mgr/rNibWriter/rNibWriter.go:182.3,182.39 1 1
-e2mgr/rNibWriter/rNibWriter.go:170.17,172.4 1 0
-e2mgr/rNibWriter/rNibWriter.go:174.20,176.4 1 1
-e2mgr/rNibWriter/rNibWriter.go:179.20,181.4 1 0
-e2mgr/rNibWriter/rNibWriter.go:187.143,188.29 1 1
-e2mgr/rNibWriter/rNibWriter.go:205.2,205.19 1 1
-e2mgr/rNibWriter/rNibWriter.go:188.29,191.17 3 1
-e2mgr/rNibWriter/rNibWriter.go:194.3,195.20 2 1
-e2mgr/rNibWriter/rNibWriter.go:198.3,200.20 3 1
-e2mgr/rNibWriter/rNibWriter.go:203.3,203.39 1 1
-e2mgr/rNibWriter/rNibWriter.go:191.17,193.4 1 0
-e2mgr/rNibWriter/rNibWriter.go:195.20,197.4 1 1
-e2mgr/rNibWriter/rNibWriter.go:200.20,202.4 1 0
-e2mgr/rNibWriter/rNibWriter.go:208.55,210.2 1 1
-e2mgr/rmrCgo/rmrCgoTypes.go:31.87,39.2 1 1
-e2mgr/rmrCgo/rmrCgoTypes.go:41.96,48.2 1 1
-e2mgr/rmrCgo/rmrCgoTypes.go:119.32,121.2 1 0
-e2mgr/rmrCgo/rmrCgoUtils.go:32.66,48.93 7 0
-e2mgr/rmrCgo/rmrCgoUtils.go:52.2,52.13 1 0
-e2mgr/rmrCgo/rmrCgoUtils.go:48.93,50.3 1 0
-e2mgr/rmrCgo/rmrCgoUtils.go:55.115,68.50 9 0
-e2mgr/rmrCgo/rmrCgoUtils.go:73.2,74.51 2 0
-e2mgr/rmrCgo/rmrCgoUtils.go:78.2,82.16 4 0
-e2mgr/rmrCgo/rmrCgoUtils.go:86.2,87.16 2 0
-e2mgr/rmrCgo/rmrCgoUtils.go:91.2,92.34 2 0
-e2mgr/rmrCgo/rmrCgoUtils.go:96.2,96.14 1 0
-e2mgr/rmrCgo/rmrCgoUtils.go:68.50,70.3 1 0
-e2mgr/rmrCgo/rmrCgoUtils.go:74.51,76.3 1 0
-e2mgr/rmrCgo/rmrCgoUtils.go:82.16,85.3 1 0
-e2mgr/rmrCgo/rmrCgoUtils.go:87.16,90.3 1 0
-e2mgr/rmrCgo/rmrCgoUtils.go:92.34,95.3 1 0
-e2mgr/rmrCgo/rmrCgoUtils.go:100.47,101.23 1 0
-e2mgr/rmrCgo/rmrCgoUtils.go:101.23,102.24 1 0
-e2mgr/rmrCgo/rmrCgoUtils.go:105.3,105.138 1 0
-e2mgr/rmrCgo/rmrCgoUtils.go:102.24,104.4 1 0
-e2mgr/rmrCgo/rmrCgoApi.go:34.99,41.21 6 1
-e2mgr/rmrCgo/rmrCgoApi.go:48.2,50.11 3 1
-e2mgr/rmrCgo/rmrCgoApi.go:41.21,43.39 2 1
-e2mgr/rmrCgo/rmrCgoApi.go:43.39,46.4 2 0
-e2mgr/rmrCgo/rmrCgoApi.go:53.71,59.21 6 0
-e2mgr/rmrCgo/rmrCgoApi.go:66.2,74.21 7 0
-e2mgr/rmrCgo/rmrCgoApi.go:80.2,81.50 2 0
-e2mgr/rmrCgo/rmrCgoApi.go:59.21,63.3 3 0
-e2mgr/rmrCgo/rmrCgoApi.go:74.21,78.3 3 0
-e2mgr/rmrCgo/rmrCgoApi.go:84.46,93.21 7 0
-e2mgr/rmrCgo/rmrCgoApi.go:99.2,103.18 5 0
-e2mgr/rmrCgo/rmrCgoApi.go:93.21,97.3 3 0
-e2mgr/rmrCgo/rmrCgoApi.go:106.39,112.2 5 0
-e2mgr/rmrCgo/rmrCgoApi.go:114.36,117.2 2 1
-e2mgr/rmrCgo/rmrCgoApi.go:119.29,123.2 3 0
-e2mgr/rnibBuilders/node_info_builder.go:25.111,35.2 8 1
-e2mgr/services/rmr_service.go:38.90,40.2 1 1
-e2mgr/services/rmr_service.go:53.61,62.2 1 1
-e2mgr/services/rmr_service.go:65.21,80.2 9 1
-e2mgr/services/rmr_service.go:82.76,93.16 6 0
-e2mgr/services/rmr_service.go:93.16,96.3 2 0
-e2mgr/services/rmr_service.go:100.40,102.6 1 1
-e2mgr/services/rmr_service.go:102.6,107.17 3 1
-e2mgr/services/rmr_service.go:111.3,111.79 1 0
-e2mgr/services/rmr_service.go:107.17,108.12 1 1
-e2mgr/services/rmr_service.go:115.36,116.5 1 0
-e2mgr/services/rmr_service.go:116.5,119.10 2 0
-e2mgr/services/rmr_service.go:125.3,126.29 2 0
-e2mgr/services/rmr_service.go:119.10,122.9 2 0
-e2mgr/services/rmr_service.go:130.37,131.35 1 1
-e2mgr/services/rmr_service.go:131.35,135.3 3 1
-e2mgr/services/rnib_reader_service.go:30.83,32.2 1 0
-e2mgr/services/rnib_reader_service.go:36.94,38.2 1 0
-e2mgr/services/rnib_reader_service.go:40.90,43.18 2 0
-e2mgr/services/rnib_reader_service.go:47.2,49.18 2 0
-e2mgr/services/rnib_reader_service.go:53.2,55.26 2 0
-e2mgr/services/rnib_reader_service.go:43.18,45.3 1 0
-e2mgr/services/rnib_reader_service.go:49.18,51.3 1 0
-e2mgr/handlers/endc_setup_request_handler.go:36.107,40.2 1 1
-e2mgr/handlers/endc_setup_request_handler.go:42.111,46.20 3 0
-e2mgr/handlers/endc_setup_request_handler.go:52.2,52.16 1 0
-e2mgr/handlers/endc_setup_request_handler.go:46.20,48.3 1 0
-e2mgr/handlers/endc_setup_request_handler.go:48.8,50.3 1 0
-e2mgr/handlers/endc_setup_request_handler.go:55.226,60.16 3 1
-e2mgr/handlers/endc_setup_request_handler.go:71.2,71.11 1 1
-e2mgr/handlers/endc_setup_request_handler.go:60.16,62.3 1 0
-e2mgr/handlers/endc_setup_request_handler.go:62.8,69.3 5 1
-e2mgr/handlers/endc_setup_request_handler.go:74.53,76.2 1 0
-e2mgr/handlers/endc_x2Setup_failure_response_notification_handler.go:33.91,38.16 3 0
-e2mgr/handlers/endc_x2Setup_failure_response_notification_handler.go:42.2,43.8 2 0
-e2mgr/handlers/endc_x2Setup_failure_response_notification_handler.go:38.16,40.3 1 0
-e2mgr/handlers/endc_x2Setup_failure_response_notification_handler.go:43.8,44.29 1 0
-e2mgr/handlers/endc_x2Setup_failure_response_notification_handler.go:65.3,66.44 2 0
-e2mgr/handlers/endc_x2Setup_failure_response_notification_handler.go:44.29,56.87 9 0
-e2mgr/handlers/endc_x2Setup_failure_response_notification_handler.go:56.87,58.5 1 0
-e2mgr/handlers/endc_x2Setup_failure_response_notification_handler.go:58.10,60.30 2 0
-e2mgr/handlers/endc_x2Setup_failure_response_notification_handler.go:60.30,62.6 1 0
-e2mgr/handlers/endc_x2apSetupRequest_asn1_packer.go:32.221,39.96 4 1
-e2mgr/handlers/endc_x2apSetupRequest_asn1_packer.go:43.2,43.27 1 1
-e2mgr/handlers/endc_x2apSetupRequest_asn1_packer.go:52.2,52.39 1 1
-e2mgr/handlers/endc_x2apSetupRequest_asn1_packer.go:39.96,41.3 1 1
-e2mgr/handlers/endc_x2apSetupRequest_asn1_packer.go:43.27,46.119 3 0
-e2mgr/handlers/endc_x2apSetupRequest_asn1_packer.go:46.119,49.4 2 0
-e2mgr/handlers/setup_request_handler.go:58.99,62.2 1 1
-e2mgr/handlers/setup_request_handler.go:64.107,68.20 3 0
-e2mgr/handlers/setup_request_handler.go:74.2,74.16 1 0
-e2mgr/handlers/setup_request_handler.go:68.20,70.3 1 0
-e2mgr/handlers/setup_request_handler.go:70.8,72.3 1 0
-e2mgr/handlers/setup_request_handler.go:77.222,82.16 3 1
-e2mgr/handlers/setup_request_handler.go:93.2,93.11 1 1
-e2mgr/handlers/setup_request_handler.go:82.16,84.3 1 0
-e2mgr/handlers/setup_request_handler.go:84.8,91.3 5 1
-e2mgr/handlers/setup_request_handler.go:96.59,103.12 3 0
-e2mgr/handlers/setup_request_handler.go:108.2,108.19 1 0
-e2mgr/handlers/setup_request_handler.go:111.2,111.53 1 0
-e2mgr/handlers/setup_request_handler.go:103.12,106.3 1 0
-e2mgr/handlers/setup_request_handler.go:108.19,110.3 1 0
-e2mgr/handlers/setup_request_handler.go:118.37,119.91 1 1
-e2mgr/handlers/setup_request_handler.go:123.2,123.21 1 1
-e2mgr/handlers/setup_request_handler.go:127.2,127.20 1 1
-e2mgr/handlers/setup_request_handler.go:131.2,131.134 1 1
-e2mgr/handlers/setup_request_handler.go:135.2,135.12 1 1
-e2mgr/handlers/setup_request_handler.go:119.91,121.3 1 1
-e2mgr/handlers/setup_request_handler.go:123.21,125.3 1 1
-e2mgr/handlers/setup_request_handler.go:127.20,129.3 1 1
-e2mgr/handlers/setup_request_handler.go:131.134,133.3 1 1
-e2mgr/handlers/setup_request_handler.go:139.49,141.2 1 0
-e2mgr/handlers/setup_request_handler.go:143.13,147.42 2 1
-e2mgr/handlers/setup_request_handler.go:147.42,148.13 1 0
-e2mgr/handlers/x2Setup_failure_response_notification_handler.go:32.91,37.16 3 0
-e2mgr/handlers/x2Setup_failure_response_notification_handler.go:41.2,42.8 2 0
-e2mgr/handlers/x2Setup_failure_response_notification_handler.go:37.16,39.3 1 0
-e2mgr/handlers/x2Setup_failure_response_notification_handler.go:42.8,43.29 1 0
-e2mgr/handlers/x2Setup_failure_response_notification_handler.go:64.3,65.44 2 0
-e2mgr/handlers/x2Setup_failure_response_notification_handler.go:43.29,55.87 9 0
-e2mgr/handlers/x2Setup_failure_response_notification_handler.go:55.87,57.5 1 0
-e2mgr/handlers/x2Setup_failure_response_notification_handler.go:57.10,59.30 2 0
-e2mgr/handlers/x2Setup_failure_response_notification_handler.go:59.30,61.6 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:31.98,33.52 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:37.2,39.116 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:43.2,45.35 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:49.2,51.31 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:55.2,59.93 3 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:63.2,67.87 3 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:71.2,71.176 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:33.52,35.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:39.116,41.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:45.35,47.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:51.31,53.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:59.93,61.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:67.87,69.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:74.144,78.16 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:82.2,85.16 3 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:89.2,91.12 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:78.16,80.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:85.16,87.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:94.106,96.84 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:100.2,100.80 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:96.84,98.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:103.135,110.16 4 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:114.2,114.55 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:118.2,120.16 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:124.2,124.53 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:128.2,130.41 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:140.2,142.49 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:146.2,148.16 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:152.2,152.12 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:110.16,112.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:114.55,116.3 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:120.16,122.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:124.53,126.3 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:130.41,133.17 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:137.3,137.128 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:133.17,135.4 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:142.49,144.3 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:148.16,150.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:156.42,160.2 3 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:162.180,164.62 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:168.2,168.20 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:164.62,166.3 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:171.171,173.66 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:177.2,179.103 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:183.2,185.54 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:173.66,175.3 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:179.103,181.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:188.84,193.2 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:195.82,204.37 3 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:208.2,208.22 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:204.37,206.3 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:211.66,213.2 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:215.54,217.2 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:219.169,229.28 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:233.2,233.35 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:229.28,231.3 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:236.120,238.58 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:242.2,242.104 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:238.58,240.3 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:245.174,248.57 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:256.2,256.14 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:248.57,254.3 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:259.171,262.50 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:266.2,268.119 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:272.2,274.54 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:262.50,264.3 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:268.119,270.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:277.130,280.19 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:284.2,286.22 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:290.2,290.114 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:280.19,282.3 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:286.22,288.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:293.132,297.19 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:301.2,303.22 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:307.2,311.116 3 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:315.2,315.94 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:297.19,299.3 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:303.22,305.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:311.116,313.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:318.117,321.33 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:325.2,332.29 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:321.33,323.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:335.117,338.33 2 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:342.2,349.29 2 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:338.33,340.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:352.144,355.35 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:364.2,364.133 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:356.31,357.59 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:358.31,359.59 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:360.40,361.87 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:367.180,371.56 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:375.2,377.59 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:381.2,381.53 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:371.56,373.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:377.59,379.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:384.170,392.2 3 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:394.135,398.22 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:402.2,402.29 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:406.2,408.59 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:412.2,412.58 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:398.22,400.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:402.29,404.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:408.59,410.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:415.50,417.28 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:421.2,421.12 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:417.28,419.3 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:424.202,427.36 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:431.2,433.54 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:438.2,438.51 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:442.2,444.16 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:448.2,448.21 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:452.2,452.47 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:427.36,429.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:433.54,436.3 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:438.51,440.3 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:444.16,446.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:448.21,450.3 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:455.161,458.105 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:462.2,462.103 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:466.2,466.107 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:458.105,460.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:462.103,464.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:469.136,472.44 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:476.2,478.44 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:482.2,482.45 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:472.44,474.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:478.44,480.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:485.110,490.2 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:492.145,498.102 3 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:502.2,504.69 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:509.2,509.32 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:498.102,500.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:504.69,507.3 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:512.146,516.16 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:520.2,525.30 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:516.16,518.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:528.127,535.16 4 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:539.2,539.40 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:543.2,545.106 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:549.2,551.65 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:561.2,561.30 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:535.16,537.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:539.40,541.3 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:545.106,547.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:551.65,554.17 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:558.3,558.107 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:554.17,556.4 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:564.141,567.16 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:571.2,572.12 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:567.16,569.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:575.143,579.2 3 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:581.152,585.2 3 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:587.161,591.2 3 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:593.142,596.16 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:600.2,601.12 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:596.16,598.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:604.159,607.16 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:611.2,612.12 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:607.16,609.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:615.161,616.31 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:632.2,632.12 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:616.31,620.12 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:624.3,626.17 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:620.12,621.12 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:626.17,628.4 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:635.114,641.16 3 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:645.2,645.69 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:653.2,653.12 1 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:641.16,643.3 1 0
-e2mgr/handlers/enb_load_information_to_protobuf.go:645.69,648.17 2 1
-e2mgr/handlers/enb_load_information_to_protobuf.go:648.17,650.4 1 0
-e2mgr/handlers/endc_configuration_update_handler.go:36.54,43.16 6 1
-e2mgr/handlers/endc_configuration_update_handler.go:67.2,67.230 1 1
-e2mgr/handlers/endc_configuration_update_handler.go:43.16,45.13 2 1
-e2mgr/handlers/endc_configuration_update_handler.go:53.3,53.93 1 1
-e2mgr/handlers/endc_configuration_update_handler.go:45.13,50.4 4 1
-e2mgr/handlers/endc_configuration_update_handler.go:50.9,52.4 1 0
-e2mgr/handlers/endc_configuration_update_handler.go:54.8,58.13 4 0
-e2mgr/handlers/endc_configuration_update_handler.go:58.13,63.4 4 0
-e2mgr/handlers/endc_configuration_update_handler.go:63.9,65.4 1 0
-e2mgr/handlers/endc_setup_response_notification_handler.go:34.91,40.16 3 0
-e2mgr/handlers/endc_setup_response_notification_handler.go:44.2,45.8 2 0
-e2mgr/handlers/endc_setup_response_notification_handler.go:40.16,42.3 1 0
-e2mgr/handlers/endc_setup_response_notification_handler.go:45.8,47.17 1 0
-e2mgr/handlers/endc_setup_response_notification_handler.go:72.3,73.44 2 0
-e2mgr/handlers/endc_setup_response_notification_handler.go:47.17,62.87 12 0
-e2mgr/handlers/endc_setup_response_notification_handler.go:62.87,64.5 1 0
-e2mgr/handlers/endc_setup_response_notification_handler.go:64.10,66.30 2 0
-e2mgr/handlers/endc_setup_response_notification_handler.go:66.30,68.6 1 0
-e2mgr/handlers/endc_x2setupFailureResponseToProtobuf.go:32.94,35.54 2 1
-e2mgr/handlers/endc_x2setupFailureResponseToProtobuf.go:68.2,68.27 1 1
-e2mgr/handlers/endc_x2setupFailureResponseToProtobuf.go:35.54,38.124 2 1
-e2mgr/handlers/endc_x2setupFailureResponseToProtobuf.go:38.124,40.82 2 1
-e2mgr/handlers/endc_x2setupFailureResponseToProtobuf.go:40.82,43.72 3 1
-e2mgr/handlers/endc_x2setupFailureResponseToProtobuf.go:43.72,44.38 1 1
-e2mgr/handlers/endc_x2setupFailureResponseToProtobuf.go:44.38,45.50 1 1
-e2mgr/handlers/endc_x2setupFailureResponseToProtobuf.go:46.53,49.22 3 1
-e2mgr/handlers/endc_x2setupFailureResponseToProtobuf.go:52.58,53.135 1 1
-e2mgr/handlers/endc_x2setupFailureResponseToProtobuf.go:54.70,56.66 2 1
-e2mgr/handlers/endc_x2setupFailureResponseToProtobuf.go:49.22,51.9 1 0
-e2mgr/handlers/endc_x2setupFailureResponseToProtobuf.go:56.66,58.9 1 1
-e2mgr/handlers/endc_x2setupFailureResponseToProtobuf.go:58.14,60.9 1 0
-e2mgr/handlers/endc_x2setupFailureResponseToProtobuf.go:71.196,73.16 2 1
-e2mgr/handlers/endc_x2setupFailureResponseToProtobuf.go:77.2,79.50 2 1
-e2mgr/handlers/endc_x2setupFailureResponseToProtobuf.go:73.16,75.3 1 0
-e2mgr/handlers/setup_response_notification_handler.go:33.91,36.16 2 1
-e2mgr/handlers/setup_response_notification_handler.go:40.2,42.8 3 1
-e2mgr/handlers/setup_response_notification_handler.go:46.2,46.136 1 1
-e2mgr/handlers/setup_response_notification_handler.go:36.16,38.3 1 1
-e2mgr/handlers/setup_response_notification_handler.go:42.8,45.3 2 0
-e2mgr/handlers/setup_response_notification_handler.go:49.104,51.2 1 1
-e2mgr/handlers/x2apSetupRequest_asn1_packer.go:32.217,39.96 4 1
-e2mgr/handlers/x2apSetupRequest_asn1_packer.go:43.2,43.27 1 1
-e2mgr/handlers/x2apSetupRequest_asn1_packer.go:51.2,51.39 1 1
-e2mgr/handlers/x2apSetupRequest_asn1_packer.go:39.96,41.3 1 1
-e2mgr/handlers/x2apSetupRequest_asn1_packer.go:43.27,46.119 3 0
-e2mgr/handlers/x2apSetupRequest_asn1_packer.go:46.119,49.4 2 0
-e2mgr/handlers/x2enb_configuration_update_handler.go:36.54,43.16 6 1
-e2mgr/handlers/x2enb_configuration_update_handler.go:68.2,68.230 1 1
-e2mgr/handlers/x2enb_configuration_update_handler.go:43.16,45.12 2 1
-e2mgr/handlers/x2enb_configuration_update_handler.go:53.3,53.94 1 1
-e2mgr/handlers/x2enb_configuration_update_handler.go:45.12,50.4 4 1
-e2mgr/handlers/x2enb_configuration_update_handler.go:50.9,52.4 1 0
-e2mgr/handlers/x2enb_configuration_update_handler.go:54.8,59.13 4 1
-e2mgr/handlers/x2enb_configuration_update_handler.go:59.13,64.4 4 1
-e2mgr/handlers/x2enb_configuration_update_handler.go:64.9,66.4 1 0
-e2mgr/handlers/x2setupResponseToProtobuf.go:45.69,48.23 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:59.2,59.47 1 0
-e2mgr/handlers/x2setupResponseToProtobuf.go:49.32,50.116 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:51.31,52.114 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:53.38,54.121 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:55.37,56.120 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:62.63,65.16 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:96.2,96.21 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:65.16,72.45 6 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:72.45,75.40 3 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:75.40,76.42 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:77.63,79.60 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:82.6,82.60 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:85.82,85.82 0 0
-e2mgr/handlers/x2setupResponseToProtobuf.go:87.68,87.68 0 0
-e2mgr/handlers/x2setupResponseToProtobuf.go:89.81,89.81 0 0
-e2mgr/handlers/x2setupResponseToProtobuf.go:79.60,81.7 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:82.60,84.7 1 0
-e2mgr/handlers/x2setupResponseToProtobuf.go:99.90,107.2 5 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:109.121,116.2 4 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:118.148,125.2 4 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:127.63,130.16 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:154.2,154.21 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:130.16,138.45 6 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:138.45,141.40 3 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:141.40,142.42 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:143.78,144.167 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:145.63,146.104 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:147.87,148.194 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:158.127,160.36 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:168.2,168.133 1 0
-e2mgr/handlers/x2setupResponseToProtobuf.go:161.40,163.154 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:164.42,166.155 2 0
-e2mgr/handlers/x2setupResponseToProtobuf.go:171.122,174.99 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:193.2,193.28 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:174.99,177.55 3 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:177.55,183.18 4 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:186.4,189.58 3 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:183.18,185.5 1 0
-e2mgr/handlers/x2setupResponseToProtobuf.go:196.93,204.40 6 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:208.2,208.27 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:204.40,206.3 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:210.123,212.45 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:265.2,265.12 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:212.45,215.39 3 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:215.39,216.41 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:217.83,219.84 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:220.80,222.59 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:223.84,225.19 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:228.5,228.64 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:229.67,231.105 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:232.92,234.136 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:241.78,243.88 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:250.86,252.97 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:253.79,255.77 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:256.93,256.93 0 0
-e2mgr/handlers/x2setupResponseToProtobuf.go:225.19,227.6 1 0
-e2mgr/handlers/x2setupResponseToProtobuf.go:234.136,237.69 3 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:237.69,239.7 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:243.88,246.55 3 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:246.55,248.7 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:268.126,271.131 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:305.2,305.24 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:271.131,274.54 3 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:274.54,286.46 7 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:301.4,301.49 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:286.46,289.84 3 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:289.84,290.64 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:291.65,293.99 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:294.77,296.45 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:308.89,311.102 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:362.2,362.25 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:311.102,314.52 3 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:314.52,324.127 6 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:332.4,332.57 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:347.4,348.18 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:351.4,353.160 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:357.4,357.53 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:324.127,327.55 3 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:327.55,329.6 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:333.34,334.142 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:339.34,340.142 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:334.142,336.6 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:336.11,338.6 1 0
-e2mgr/handlers/x2setupResponseToProtobuf.go:340.142,342.6 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:342.11,344.6 1 0
-e2mgr/handlers/x2setupResponseToProtobuf.go:348.18,350.5 1 0
-e2mgr/handlers/x2setupResponseToProtobuf.go:353.160,355.5 1 0
-e2mgr/handlers/x2setupResponseToProtobuf.go:365.66,368.98 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:378.2,378.12 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:368.98,371.49 3 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:371.49,375.4 3 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:383.96,388.52 3 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:427.2,427.30 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:388.52,391.115 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:391.115,393.76 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:393.76,396.66 3 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:396.66,397.46 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:398.56,406.28 7 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:408.55,410.21 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:413.7,413.36 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:414.57,415.114 1 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:416.66,416.66 0 0
-e2mgr/handlers/x2setupResponseToProtobuf.go:418.50,418.50 0 0
-e2mgr/handlers/x2setupResponseToProtobuf.go:410.21,412.8 1 0
-e2mgr/handlers/x2setupResponseToProtobuf.go:430.198,432.16 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:436.2,437.39 2 1
-e2mgr/handlers/x2setupResponseToProtobuf.go:432.16,434.3 1 0
-e2mgr/handlers/enb_load_information_notification_handler.go:17.134,21.2 1 1
-e2mgr/handlers/enb_load_information_notification_handler.go:23.43,25.2 1 1
-e2mgr/handlers/enb_load_information_notification_handler.go:27.201,42.16 2 1
-e2mgr/handlers/enb_load_information_notification_handler.go:47.2,53.18 4 1
-e2mgr/handlers/enb_load_information_notification_handler.go:58.2,62.20 3 1
-e2mgr/handlers/enb_load_information_notification_handler.go:67.2,67.190 1 1
-e2mgr/handlers/enb_load_information_notification_handler.go:42.16,45.3 2 1
-e2mgr/handlers/enb_load_information_notification_handler.go:53.18,56.3 2 0
-e2mgr/handlers/enb_load_information_notification_handler.go:62.20,65.3 2 0
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:39.80,43.36 3 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:53.2,53.104 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:71.2,71.18 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:43.36,46.100 2 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:46.100,48.4 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:48.9,50.4 1 0
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:53.104,56.55 3 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:56.55,59.130 2 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:67.4,67.68 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:59.130,62.73 3 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:62.73,64.6 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:74.78,81.2 4 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:83.134,86.63 2 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:92.2,92.63 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:98.2,98.55 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:104.2,104.55 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:110.2,110.21 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:86.63,88.3 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:88.8,90.3 1 0
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:92.63,94.3 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:94.8,96.3 1 0
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:98.55,100.3 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:100.8,102.3 1 0
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:104.55,106.3 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:106.8,108.3 1 0
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:113.134,116.60 2 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:123.2,123.52 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:129.2,129.21 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:116.60,118.3 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:118.8,121.3 1 0
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:123.52,125.3 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:125.8,127.3 1 0
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:132.168,135.63 2 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:141.2,141.63 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:147.2,147.21 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:135.63,137.3 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:137.8,139.3 1 0
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:141.63,143.3 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:143.8,145.3 1 0
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:149.168,152.60 2 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:158.2,158.21 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:152.60,154.3 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:154.8,156.3 1 0
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:161.121,164.131 2 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:199.2,199.24 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:164.131,167.54 3 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:167.54,175.32 5 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:180.4,180.36 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:183.4,183.46 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:194.4,194.41 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:175.32,178.5 1 0
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:180.36,182.5 1 0
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:184.71,185.200 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:189.71,190.200 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:185.200,187.6 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:190.200,192.6 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:202.125,205.146 2 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:257.2,257.27 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:205.146,208.109 3 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:208.109,217.42 6 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:221.4,221.46 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:225.4,225.117 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:232.4,232.47 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:247.4,248.18 2 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:251.4,253.55 2 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:217.42,219.5 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:221.46,223.5 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:225.117,228.55 3 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:228.55,230.6 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:233.55,234.166 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:239.55,240.166 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:234.166,236.6 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:236.11,238.6 1 0
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:240.166,242.6 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:242.11,244.6 1 0
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:248.18,250.5 1 0
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:263.100,268.52 3 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:315.2,315.29 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:268.52,271.119 2 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:271.119,273.84 2 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:273.84,276.74 3 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:276.74,277.116 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:277.116,279.41 2 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:280.63,282.112 2 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:306.60,306.60 0 0
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:282.112,285.86 3 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:285.86,286.58 1 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:287.68,290.64 3 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:296.89,298.25 2 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:301.11,302.42 2 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:290.64,295.12 4 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:298.25,300.12 1 0
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:318.202,320.16 2 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:324.2,325.43 2 1
-e2mgr/handlers/endc_x2setupResponseToProtobuf.go:320.16,322.3 1 0
-e2mgr/handlers/ranLostConnectionHandler.go:36.153,41.2 1 1
-e2mgr/handlers/ranLostConnectionHandler.go:43.91,49.86 4 1
-e2mgr/handlers/ranLostConnectionHandler.go:63.2,65.8 3 1
-e2mgr/handlers/ranLostConnectionHandler.go:49.86,51.3 1 1
-e2mgr/handlers/ranLostConnectionHandler.go:51.8,55.83 4 1
-e2mgr/handlers/ranLostConnectionHandler.go:55.83,57.4 1 1
-e2mgr/handlers/ranLostConnectionHandler.go:57.9,61.4 2 1
-e2mgr/handlers/ranLostConnectionHandler.go:65.8,68.3 2 1
-e2mgr/handlers/ranLostConnectionHandler.go:72.70,73.28 1 1
-e2mgr/handlers/ranLostConnectionHandler.go:74.131,75.63 1 1
-e2mgr/handlers/ranLostConnectionHandler.go:76.46,77.153 1 1
-e2mgr/handlers/ranLostConnectionHandler.go:78.10,79.60 1 1
-e2mgr/handlers/x2apPdu_asn1_unpacker.go:31.162,34.16 2 1
-e2mgr/handlers/x2apPdu_asn1_unpacker.go:38.2,41.159 3 1
-e2mgr/handlers/x2apPdu_asn1_unpacker.go:45.2,45.27 1 1
-e2mgr/handlers/x2apPdu_asn1_unpacker.go:50.2,50.17 1 1
-e2mgr/handlers/x2apPdu_asn1_unpacker.go:34.16,36.3 1 0
-e2mgr/handlers/x2apPdu_asn1_unpacker.go:41.159,43.3 1 1
-e2mgr/handlers/x2apPdu_asn1_unpacker.go:45.27,48.3 2 0
-e2mgr/handlers/x2apPdu_asn1_unpacker.go:78.158,81.16 2 1
-e2mgr/handlers/x2apPdu_asn1_unpacker.go:85.2,88.132 3 1
-e2mgr/handlers/x2apPdu_asn1_unpacker.go:92.2,92.27 1 1
-e2mgr/handlers/x2apPdu_asn1_unpacker.go:97.2,97.17 1 1
-e2mgr/handlers/x2apPdu_asn1_unpacker.go:81.16,83.3 1 0
-e2mgr/handlers/x2apPdu_asn1_unpacker.go:88.132,90.3 1 1
-e2mgr/handlers/x2apPdu_asn1_unpacker.go:92.27,95.3 2 1
-e2mgr/handlers/x2apPdu_asn1_unpacker.go:100.175,102.16 2 1
-e2mgr/handlers/x2apPdu_asn1_unpacker.go:106.2,109.27 3 1
-e2mgr/handlers/x2apPdu_asn1_unpacker.go:115.2,115.62 1 1
-e2mgr/handlers/x2apPdu_asn1_unpacker.go:102.16,104.3 1 1
-e2mgr/handlers/x2apPdu_asn1_unpacker.go:109.27,113.3 3 1
-e2mgr/handlers/x2apSetup_response_notification_handler.go:33.91,38.16 3 0
-e2mgr/handlers/x2apSetup_response_notification_handler.go:42.2,44.8 2 0
-e2mgr/handlers/x2apSetup_response_notification_handler.go:38.16,40.3 1 0
-e2mgr/handlers/x2apSetup_response_notification_handler.go:44.8,45.17 1 0
-e2mgr/handlers/x2apSetup_response_notification_handler.go:69.3,70.44 2 0
-e2mgr/handlers/x2apSetup_response_notification_handler.go:45.17,60.87 12 0
-e2mgr/handlers/x2apSetup_response_notification_handler.go:60.87,62.5 1 0
-e2mgr/handlers/x2apSetup_response_notification_handler.go:62.10,64.30 2 0
-e2mgr/handlers/x2apSetup_response_notification_handler.go:64.30,66.6 1 0
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:36.78,37.25 1 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:51.2,51.12 1 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:38.31,40.130 2 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:41.28,43.131 2 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:44.27,46.113 2 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:47.23,49.128 2 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:54.114,57.37 2 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:63.2,63.41 1 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:71.2,71.44 1 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:79.2,79.171 1 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:98.2,98.22 1 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:57.37,61.3 2 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:63.41,64.22 1 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:67.3,67.93 1 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:64.22,66.4 1 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:71.44,72.22 1 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:75.3,75.93 1 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:72.22,74.4 1 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:79.171,80.22 1 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:83.3,87.91 5 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:95.3,95.67 1 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:80.22,82.4 1 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:87.91,94.4 4 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:102.90,105.54 2 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:138.2,138.27 1 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:105.54,108.120 2 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:108.120,110.74 2 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:110.74,113.64 3 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:113.64,114.34 1 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:114.34,115.46 1 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:116.49,119.22 3 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:122.54,123.131 1 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:124.66,126.66 2 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:119.22,121.9 1 0
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:126.66,128.9 1 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:128.14,130.9 1 0
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:141.192,143.16 2 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:147.2,149.46 2 1
-e2mgr/handlers/x2setupFailureResponseToProtobuf.go:143.16,145.3 1 0
-e2mgr/handlers/delete_all_request_handler.go:41.68,47.2 1 1
-e2mgr/handlers/delete_all_request_handler.go:49.158,52.16 2 1
-e2mgr/handlers/delete_all_request_handler.go:56.2,56.26 1 1
-e2mgr/handlers/delete_all_request_handler.go:61.2,68.16 6 1
-e2mgr/handlers/delete_all_request_handler.go:72.2,72.12 1 1
-e2mgr/handlers/delete_all_request_handler.go:52.16,54.3 1 1
-e2mgr/handlers/delete_all_request_handler.go:56.26,58.3 1 1
-e2mgr/handlers/delete_all_request_handler.go:68.16,70.3 1 0
-e2mgr/handlers/delete_all_request_handler.go:75.116,78.16 2 1
-e2mgr/handlers/delete_all_request_handler.go:83.2,83.30 1 1
-e2mgr/handlers/delete_all_request_handler.go:87.2,87.42 1 1
-e2mgr/handlers/delete_all_request_handler.go:105.2,106.18 2 1
-e2mgr/handlers/delete_all_request_handler.go:78.16,81.3 2 1
-e2mgr/handlers/delete_all_request_handler.go:83.30,85.3 1 1
-e2mgr/handlers/delete_all_request_handler.go:87.42,91.17 2 1
-e2mgr/handlers/delete_all_request_handler.go:97.3,97.20 1 1
-e2mgr/handlers/delete_all_request_handler.go:102.3,102.55 1 1
-e2mgr/handlers/delete_all_request_handler.go:91.17,94.12 2 1
-e2mgr/handlers/delete_all_request_handler.go:97.20,100.12 2 1
-e2mgr/handlers/delete_all_request_handler.go:109.142,112.18 2 1
-e2mgr/handlers/delete_all_request_handler.go:116.2,120.16 3 1
-e2mgr/handlers/delete_all_request_handler.go:126.2,126.27 1 1
-e2mgr/handlers/delete_all_request_handler.go:112.18,114.3 1 1
-e2mgr/handlers/delete_all_request_handler.go:120.16,124.3 2 1
-e2mgr/handlers/delete_all_request_handler.go:126.27,129.3 1 0
-e2mgr/handlers/delete_all_request_handler.go:132.146,134.65 1 1
-e2mgr/handlers/delete_all_request_handler.go:138.2,138.70 1 1
-e2mgr/handlers/delete_all_request_handler.go:143.2,147.16 3 1
-e2mgr/handlers/delete_all_request_handler.go:153.2,153.137 1 1
-e2mgr/handlers/delete_all_request_handler.go:134.65,136.3 1 1
-e2mgr/handlers/delete_all_request_handler.go:138.70,141.3 2 0
-e2mgr/handlers/delete_all_request_handler.go:147.16,151.3 2 1
index 704fd19..e9e73e4 100644 (file)
@@ -1,9 +1,9 @@
 module e2mgr
 
 require (
-       gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common v1.0.18
-       gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.18
-       gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.18
+       gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common v1.0.19
+       gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.19
+       gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.19
        gerrit.o-ran-sc.org/r/ric-plt/sdlgo v0.2.0
        github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a // indirect
        github.com/go-ozzo/ozzo-validation v3.5.0+incompatible
index 899696d..dde69c2 100644 (file)
@@ -11,6 +11,8 @@ gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common v1.0.17 h1:yaAQwkAkgDTbWDQA5
 gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common v1.0.17/go.mod h1:QJ1uPPZosGbhxUWpUpeM5fLqFHdnWTrVnvW2DgyOCes=
 gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common v1.0.18 h1:JuWtnrDLcqEnZz3cMLQkJ/2cy/3AscuZuef8jkvidHs=
 gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common v1.0.18/go.mod h1:QJ1uPPZosGbhxUWpUpeM5fLqFHdnWTrVnvW2DgyOCes=
+gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common v1.0.19 h1:b6ggNQ4PdWxCkQupfus80nsCs0YD84u+cGc+nQ2W560=
+gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common v1.0.19/go.mod h1:QJ1uPPZosGbhxUWpUpeM5fLqFHdnWTrVnvW2DgyOCes=
 gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.8 h1:25mglk3nUhSkVYnpxJH2SF9SccY2ecLio/OGBsJLNjk=
 gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.8/go.mod h1:GXiXLz4ORBeIr0FLIbzENRykgh3Po5uPkX2jICxnRF0=
 gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.9 h1:433mb6o1LXwDDxuq2k8NOWbo68HHgdlfxZo0s8X6n7g=
@@ -23,6 +25,8 @@ gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.17 h1:cigXR/l8U2NNXg2
 gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.17/go.mod h1:GXiXLz4ORBeIr0FLIbzENRykgh3Po5uPkX2jICxnRF0=
 gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.18 h1:BKszWTZv/JpYn0vadQXUg8Ol8qqIrjFHs9BY58BHTtw=
 gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.18/go.mod h1:GXiXLz4ORBeIr0FLIbzENRykgh3Po5uPkX2jICxnRF0=
+gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.19 h1:5VGHtsiGnR/VfcsqhbKVScUTLBgoePp1KhSVylwlFKM=
+gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.19/go.mod h1:GXiXLz4ORBeIr0FLIbzENRykgh3Po5uPkX2jICxnRF0=
 gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.8 h1:nvJjn4VyRGuyp5irasfFSPKW4zNDTh12sfky53UaqL4=
 gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.8/go.mod h1:wqyKCJkXzU/UqeuRBUv3QrMHYVI544wdoMav3aeJXdE=
 gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.9 h1:ziuiw/eX0zBqdEGTz3Jdvp9KbirFt5mwjk6bx7c20pc=
@@ -35,6 +39,8 @@ gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.17 h1:VnCLibET0jepZUBMp
 gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.17/go.mod h1:kdgMqHn3InTc9qj24qbzXJo6zAyF1YTKDI/rca868pQ=
 gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.18 h1:pkpyFGLV7hPd8AnheMnDl6r5a5gtIANjXhqLZmMxUz8=
 gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.18/go.mod h1:kdgMqHn3InTc9qj24qbzXJo6zAyF1YTKDI/rca868pQ=
+gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.19 h1:WwUWG3mp2uU9ouqAzj4d6dUGZUA+2HmutQBiH4s4UIw=
+gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.19/go.mod h1:7fQ7/R9hBsCi5g6444ySaavYLB+/aCsCyDEiqWK+L34=
 gerrit.o-ran-sc.org/r/ric-plt/sdlgo.git v0.1.1 h1:D2fU0/YXdqSNYsmptSBbkDfG76uBFKjnhQiq5cD4WT4=
 gerrit.o-ran-sc.org/r/ric-plt/sdlgo.git v0.1.1/go.mod h1:2Y8gw2jqj9urI8VFqFQn7BX0J3A852+YrXVV9V8gOt4=
 gerrit.o-ran-sc.org/r/ric-plt/sdlgo.git v0.2.0 h1:7edCLIQtk9xCwxTtLRUlXr8wQ6nmr/Mo4ZoqjF3m0NE=
index 33c4948..7e14080 100644 (file)
@@ -19,61 +19,28 @@ package handlers
 
 import (
        "e2mgr/logger"
+       "e2mgr/managers"
        "e2mgr/models"
-       "e2mgr/rNibWriter"
        "e2mgr/sessions"
-       "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"
 )
 
-type RanLostConnectionHandler struct{
-       rnibReaderProvider func() reader.RNibReader
-       rnibWriterProvider func() rNibWriter.RNibWriter
+type RanLostConnectionHandler struct {
+       ranReconnectionManager *managers.RanReconnectionManager
 }
 
-func NewRanLostConnectionHandler(rnibReaderProvider func() reader.RNibReader, rnibWriterProvider func() rNibWriter.RNibWriter) RanLostConnectionHandler {
+func NewRanLostConnectionHandler(ranReconnectionManager *managers.RanReconnectionManager) RanLostConnectionHandler {
        return RanLostConnectionHandler{
-               rnibReaderProvider: rnibReaderProvider,
-               rnibWriterProvider: rnibWriterProvider,
+               ranReconnectionManager: ranReconnectionManager,
        }
 }
-func (src RanLostConnectionHandler) Handle(logger *logger.Logger, e2Sessions sessions.E2Sessions,
-       request *models.NotificationRequest, messageChannel chan<- *models.NotificationResponse) {
+func (handler RanLostConnectionHandler) Handle(logger *logger.Logger, e2Sessions sessions.E2Sessions, request *models.NotificationRequest, messageChannel chan<- *models.NotificationResponse) {
 
        logger.Warnf("#ranLostConnectionHandler.Handle - Received lost connection (transaction id = %s): %s", request.TransactionId, request.Payload)
 
-       var nb *entities.NodebInfo
-       var rNibErr common.IRNibError
-       if nb, rNibErr = src.rnibReaderProvider().GetNodeb(request.RanName); rNibErr != nil {
-               logger.Errorf("#ranLostConnectionHandler.Handle - transactionId %s: rNib reader failed to retrieve nb entity with RanName: %s. Error: %s", request.TransactionId, request.RanName, rNibErr.Error())
-       } else {
-               logger.Debugf("#ranLostConnectionHandler.Handle - transactionId %s: nb entity has been retrieved. RanName %s, ConnectionStatus %s", request.TransactionId, nb.RanName, nb.ConnectionStatus)
-               changeNodebState(logger, nb)
-               nbIdentity := &entities.NbIdentity{InventoryName:nb.RanName, GlobalNbId:nb.GlobalNbId}
-               if rNibErr = src.rnibWriterProvider().SaveNodeb(nbIdentity, nb); rNibErr != nil {
-                       logger.Errorf("#ranLostConnectionHandler.Handle - transactionId %s: rNibWriter failed to save nb entity %s. Error: %s", request.TransactionId, nb.RanName, rNibErr.Error())
-               } else {
-                       logger.Infof("#ranLostConnectionHandler.Handle - transactionId %s: saved to rNib. RanName %s, ConnectionStatus %v", request.TransactionId, nb.RanName, nb.ConnectionStatus)
-               }
-       }
-       e2session, ok := e2Sessions[request.TransactionId]
-       printHandlingSetupResponseElapsedTimeInMs(logger, "#ranLostConnectionHandler.Handle - Summary: Elapsed time for receiving and handling sctp error response from E2 terminator", request.StartTime)
-       if ok {
-               printHandlingSetupResponseElapsedTimeInMs(logger, fmt.Sprintf("#ranLostConnectionHandler.Handle- Summary: Total roundtrip elapsed time for transactionId %s", request.TransactionId), e2session.SessionStart)
-               delete(e2Sessions, request.TransactionId) // Avoid pinning memory (help GC)
-       }
-
-}
+       err := handler.ranReconnectionManager.ReconnectRan(request.RanName)
 
-func changeNodebState(logger *logger.Logger, nb *entities.NodebInfo) {
-       switch nb.ConnectionStatus{
-       case entities.ConnectionStatus_CONNECTED, entities.ConnectionStatus_CONNECTING, entities.ConnectionStatus_CONNECTED_SETUP_FAILED:
-               nb.ConnectionStatus = entities.ConnectionStatus_DISCONNECTED
-       case entities.ConnectionStatus_DISCONNECTED:
-               logger.Infof("#ranLostConnectionHandler.changeNodebState - nb entity with ConnectionStatus %v occurred. RanName: %s", nb.ConnectionStatus, nb.RanName)
-       default:
-               nb.ConnectionStatus = entities.ConnectionStatus_SHUT_DOWN
+       if err != nil {
+               logger.Errorf("#ranLostConnectionHandler.Handle - An error occurred while trying to reconnect RAN, %v", err)
+               return
        }
 }
index c54899b..0a315ff 100644 (file)
+////
+//// 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.
+////
 //
-// Copyright 2019 AT&T Intellectual Property
-// Copyright 2019 Nokia
+package handlers
 //
-// 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
+//import (
+//     "e2mgr/logger"
+//     "e2mgr/mocks"
+//     "e2mgr/models"
+//     "e2mgr/rNibWriter"
+//     "e2mgr/rmrCgo"
+//     "e2mgr/sessions"
+//     "e2mgr/tests"
+//     "fmt"
+//     "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
+//     "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
+//     "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
+//     "github.com/stretchr/testify/mock"
+//     "testing"
+//     "time"
+//)
 //
-//      http://www.apache.org/licenses/LICENSE-2.0
+///*
+// * Test an error response while in an x2 setup request session
+// */
+//func TestHandleInSession(t *testing.T){
+//     log, err := logger.InitLogger(logger.InfoLevel)
+//     if err!=nil{
+//             t.Errorf("#sctp_errors_notification_handler_test.TestHandleInSession - failed to initialize logger, error: %s", err)
+//     }
 //
-// 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.
+//     readerMock :=&mocks.RnibReaderMock{}
+//     rnibReaderProvider := func() reader.RNibReader {
+//             return readerMock
+//     }
+//     writerMock := &mocks.RnibWriterMock{}
+//     rnibWriterProvider := func() rNibWriter.RNibWriter {
+//             return writerMock
+//     }
+//     h := NewRanLostConnectionHandler(rnibReaderProvider,rnibWriterProvider)
 //
-
-package handlers
-
-import (
-       "e2mgr/logger"
-       "e2mgr/mocks"
-       "e2mgr/models"
-       "e2mgr/rNibWriter"
-       "e2mgr/rmrCgo"
-       "e2mgr/sessions"
-       "e2mgr/tests"
-       "fmt"
-       "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
-       "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
-       "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
-       "github.com/stretchr/testify/mock"
-       "testing"
-       "time"
-)
-
-/*
- * Test an error response while in an x2 setup request session
- */
-func TestHandleInSession(t *testing.T){
-       log, err := logger.InitLogger(logger.InfoLevel)
-       if err!=nil{
-               t.Errorf("#sctp_errors_notification_handler_test.TestHandleInSession - failed to initialize logger, error: %s", err)
-       }
-
-       readerMock :=&mocks.RnibReaderMock{}
-       rnibReaderProvider := func() reader.RNibReader {
-               return readerMock
-       }
-       writerMock := &mocks.RnibWriterMock{}
-       rnibWriterProvider := func() rNibWriter.RNibWriter {
-               return writerMock
-       }
-       h := NewRanLostConnectionHandler(rnibReaderProvider,rnibWriterProvider)
-
-       e2Sessions := make(sessions.E2Sessions)
-       xaction := []byte(fmt.Sprintf("%32s", "1234"))
-       e2Sessions[string(xaction)] = sessions.E2SessionDetails{SessionStart: time.Now()}
-       payload := []byte("Error")
-       mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload),"RanName", &payload, &xaction)
-       notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload,
-               StartTime: time.Now(), TransactionId: string(xaction)}
-       var messageChannel chan<- *models.NotificationResponse
-
-       nb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_CONNECTED,}
-       var rnibErr common.IRNibError
-       readerMock.On("GetNodeb", mBuf.Meid).Return(nb, rnibErr)
-       updatedNb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_DISCONNECTED,}
-       writerMock.On("SaveNodeb", mock.Anything, updatedNb).Return(rnibErr)
-
-       h.Handle(log,e2Sessions, &notificationRequest, messageChannel)
-
-       if _, ok := e2Sessions[string(xaction)]; ok {
-               t.Errorf("want: no session entry, got: session entry for: %s", string(xaction) )
-       }
-}
-
-/*
- * Test an error response triggered by the E2 Term
- */
-
-func TestHandleNoSession(t *testing.T){
-       log, err := logger.InitLogger(logger.InfoLevel)
-       if err!=nil{
-               t.Errorf("#sctp_errors_notification_handler_test.TestHandleNoSession - failed to initialize logger, error: %s", err)
-       }
-
-       readerMock :=&mocks.RnibReaderMock{}
-       rnibReaderProvider := func() reader.RNibReader {
-               return readerMock
-       }
-       writerMock := &mocks.RnibWriterMock{}
-       rnibWriterProvider := func() rNibWriter.RNibWriter {
-               return writerMock
-       }
-       h := NewRanLostConnectionHandler(rnibReaderProvider,rnibWriterProvider)
-
-       e2Sessions := make(sessions.E2Sessions)
-       transactionId := "1234"
-       xaction := []byte(fmt.Sprintf("%32s", transactionId+"6"))
-       e2Sessions[transactionId] = sessions.E2SessionDetails{SessionStart: time.Now()}
-       payload := []byte("Error")
-       mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload),"RanName", &payload, &xaction)
-       notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload, StartTime: time.Now(),
-                       TransactionId: string(xaction)}
-       var messageChannel chan<- *models.NotificationResponse
-
-       nb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_CONNECTED,}
-       var rnibErr common.IRNibError
-       readerMock.On("GetNodeb", mBuf.Meid).Return(nb, rnibErr)
-       updatedNb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_DISCONNECTED,}
-       writerMock.On("SaveNodeb", mock.Anything, updatedNb).Return(rnibErr)
-
-       h.Handle(log,e2Sessions, &notificationRequest, messageChannel)
-
-       if _, ok := e2Sessions[transactionId]; !ok {
-               t.Errorf("want: session entry for %s, got: no session entry", transactionId )
-       }
-}
-/*
- * Test an error response triggered by the E2 Term
- */
-func TestHandleUnsolicitedDisconnectionConnectedSuccess(t *testing.T){
-       log, err := logger.InitLogger(logger.DebugLevel)
-       if err!=nil{
-               t.Errorf("#sctp_errors_notification_handler_test.TestHandleNoSession - failed to initialize logger, error: %s", err)
-       }
-
-       readerMock :=&mocks.RnibReaderMock{}
-       rnibReaderProvider := func() reader.RNibReader {
-               return readerMock
-       }
-       writerMock := &mocks.RnibWriterMock{}
-       rnibWriterProvider := func() rNibWriter.RNibWriter {
-               return writerMock
-       }
-       h := NewRanLostConnectionHandler(rnibReaderProvider,rnibWriterProvider)
-
-       e2Sessions := make(sessions.E2Sessions)
-       transactionId := "1234"
-       xaction := []byte(fmt.Sprintf("%32s", transactionId+"6"))
-       e2Sessions[transactionId] = sessions.E2SessionDetails{SessionStart: time.Now()}
-       payload := []byte("Error")
-       mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload),"RanName", &payload, &xaction)
-       notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload, StartTime: time.Now(),
-               TransactionId: string(xaction)}
-       var messageChannel chan<- *models.NotificationResponse
-
-       nb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_CONNECTED,}
-       var rnibErr common.IRNibError
-       readerMock.On("GetNodeb", mBuf.Meid).Return(nb, rnibErr)
-       updatedNb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_DISCONNECTED,}
-       writerMock.On("SaveNodeb", mock.Anything, updatedNb).Return(rnibErr)
-
-       h.Handle(log,e2Sessions, &notificationRequest, messageChannel)
-}
-
-func TestHandleUnsolicitedDisconnectionNotConnectedSuccess(t *testing.T){
-       log, err := logger.InitLogger(logger.DebugLevel)
-       if err!=nil{
-               t.Errorf("#sctp_errors_notification_handler_test.TestHandleNoSession - failed to initialize logger, error: %s", err)
-       }
-
-       readerMock :=&mocks.RnibReaderMock{}
-       rnibReaderProvider := func() reader.RNibReader {
-               return readerMock
-       }
-       writerMock := &mocks.RnibWriterMock{}
-       rnibWriterProvider := func() rNibWriter.RNibWriter {
-               return writerMock
-       }
-       h := NewRanLostConnectionHandler(rnibReaderProvider,rnibWriterProvider)
-
-       e2Sessions := make(sessions.E2Sessions)
-       transactionId := "1234"
-       xaction := []byte(fmt.Sprintf("%32s", transactionId+"6"))
-       e2Sessions[transactionId] = sessions.E2SessionDetails{SessionStart: time.Now()}
-       payload := []byte("Error")
-       mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload),"RanName", &payload, &xaction)
-       notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload, StartTime: time.Now(),
-               TransactionId: string(xaction)}
-       var messageChannel chan<- *models.NotificationResponse
-
-       nb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_DISCONNECTED,}
-       var rnibErr common.IRNibError
-       readerMock.On("GetNodeb", mBuf.Meid).Return(nb, rnibErr)
-       updatedNb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_DISCONNECTED,}
-       writerMock.On("SaveNodeb", mock.Anything, updatedNb).Return(rnibErr)
-
-       h.Handle(log,e2Sessions, &notificationRequest, messageChannel)
-}
-
-func TestHandleUnsolicitedDisconnectionShuttingDownSuccess(t *testing.T){
-       log, err := logger.InitLogger(logger.DebugLevel)
-       if err!=nil{
-               t.Errorf("#sctp_errors_notification_handler_test.TestHandleNoSession - failed to initialize logger, error: %s", err)
-       }
-
-       readerMock :=&mocks.RnibReaderMock{}
-       rnibReaderProvider := func() reader.RNibReader {
-               return readerMock
-       }
-       writerMock := &mocks.RnibWriterMock{}
-       rnibWriterProvider := func() rNibWriter.RNibWriter {
-               return writerMock
-       }
-       h := NewRanLostConnectionHandler(rnibReaderProvider,rnibWriterProvider)
-
-       e2Sessions := make(sessions.E2Sessions)
-       transactionId := "1234"
-       xaction := []byte(fmt.Sprintf("%32s", transactionId+"6"))
-       e2Sessions[transactionId] = sessions.E2SessionDetails{SessionStart: time.Now()}
-       payload := []byte("Error")
-       mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload),"RanName", &payload, &xaction)
-       notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload, StartTime: time.Now(),
-               TransactionId: string(xaction)}
-       var messageChannel chan<- *models.NotificationResponse
-
-       nb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_SHUTTING_DOWN,}
-       var rnibErr common.IRNibError
-       readerMock.On("GetNodeb", mBuf.Meid).Return(nb, rnibErr)
-       updatedNb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_SHUT_DOWN,}
-       writerMock.On("SaveNodeb", mock.Anything, updatedNb).Return(rnibErr)
-
-       h.Handle(log,e2Sessions, &notificationRequest, messageChannel)
-}
-
-func TestHandleUnsolicitedDisconnectionShutDownSuccess(t *testing.T){
-       log, err := logger.InitLogger(logger.DebugLevel)
-       if err!=nil{
-               t.Errorf("#sctp_errors_notification_handler_test.TestHandleNoSession - failed to initialize logger, error: %s", err)
-       }
-
-       readerMock :=&mocks.RnibReaderMock{}
-       rnibReaderProvider := func() reader.RNibReader {
-               return readerMock
-       }
-       writerMock := &mocks.RnibWriterMock{}
-       rnibWriterProvider := func() rNibWriter.RNibWriter {
-               return writerMock
-       }
-       h := NewRanLostConnectionHandler(rnibReaderProvider,rnibWriterProvider)
-
-       e2Sessions := make(sessions.E2Sessions)
-       transactionId := "1234"
-       xaction := []byte(fmt.Sprintf("%32s", transactionId+"6"))
-       e2Sessions[transactionId] = sessions.E2SessionDetails{SessionStart: time.Now()}
-       payload := []byte("Error")
-       mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload),"RanName", &payload, &xaction)
-       notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload, StartTime: time.Now(),
-               TransactionId: string(xaction)}
-       var messageChannel chan<- *models.NotificationResponse
-
-       nb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_SHUT_DOWN,}
-       var rnibErr common.IRNibError
-       readerMock.On("GetNodeb", mBuf.Meid).Return(nb, rnibErr)
-       updatedNb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_SHUT_DOWN,}
-       writerMock.On("SaveNodeb", mock.Anything, updatedNb).Return(rnibErr)
-
-       h.Handle(log,e2Sessions, &notificationRequest, messageChannel)
-}
-
-func TestHandleUnsolicitedDisconnectionReaderFailure(t *testing.T){
-       log, err := logger.InitLogger(logger.DebugLevel)
-       if err!=nil{
-               t.Errorf("#sctp_errors_notification_handler_test.TestHandleNoSession - failed to initialize logger, error: %s", err)
-       }
-
-       readerMock :=&mocks.RnibReaderMock{}
-       rnibReaderProvider := func() reader.RNibReader {
-               return readerMock
-       }
-       writerMock := &mocks.RnibWriterMock{}
-       rnibWriterProvider := func() rNibWriter.RNibWriter {
-               return writerMock
-       }
-       h := NewRanLostConnectionHandler(rnibReaderProvider,rnibWriterProvider)
-
-       e2Sessions := make(sessions.E2Sessions)
-       transactionId := "1234"
-       xaction := []byte(fmt.Sprintf("%32s", transactionId+"6"))
-       e2Sessions[transactionId] = sessions.E2SessionDetails{SessionStart: time.Now()}
-       payload := []byte("Error")
-       mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload),"RanName", &payload, &xaction)
-       notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload, StartTime: time.Now(),
-               TransactionId: string(xaction)}
-       var messageChannel chan<- *models.NotificationResponse
-
-       var nb *entities.NodebInfo
-       rnibErr := common.RNibError{}
-       readerMock.On("GetNodeb", mBuf.Meid).Return(nb, rnibErr)
-       h.Handle(log,e2Sessions, &notificationRequest, messageChannel)
-}
-
-func TestHandleUnsolicitedDisconnectionWriterFailure(t *testing.T){
-       log, err := logger.InitLogger(logger.DebugLevel)
-       if err!=nil{
-               t.Errorf("#sctp_errors_notification_handler_test.TestHandleNoSession - failed to initialize logger, error: %s", err)
-       }
-
-       readerMock :=&mocks.RnibReaderMock{}
-       rnibReaderProvider := func() reader.RNibReader {
-               return readerMock
-       }
-       writerMock := &mocks.RnibWriterMock{}
-       rnibWriterProvider := func() rNibWriter.RNibWriter {
-               return writerMock
-       }
-       h := NewRanLostConnectionHandler(rnibReaderProvider,rnibWriterProvider)
-
-       e2Sessions := make(sessions.E2Sessions)
-       transactionId := "1234"
-       xaction := []byte(fmt.Sprintf("%32s", transactionId+"6"))
-       e2Sessions[transactionId] = sessions.E2SessionDetails{SessionStart: time.Now()}
-       payload := []byte("Error")
-       mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload),"RanName", &payload, &xaction)
-       notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload, StartTime: time.Now(),
-               TransactionId: string(xaction)}
-       var messageChannel chan<- *models.NotificationResponse
-
-       nb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_CONNECTED,}
-       var rnibErr common.IRNibError
-       readerMock.On("GetNodeb", mBuf.Meid).Return(nb, rnibErr)
-       updatedNb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_DISCONNECTED,}
-       writerMock.On("SaveNodeb", mock.Anything, updatedNb).Return(common.RNibError{})
-
-       h.Handle(log,e2Sessions, &notificationRequest, messageChannel)
-}
+//     e2Sessions := make(sessions.E2Sessions)
+//     xaction := []byte(fmt.Sprintf("%32s", "1234"))
+//     e2Sessions[string(xaction)] = sessions.E2SessionDetails{SessionStart: time.Now()}
+//     payload := []byte("Error")
+//     mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload),"RanName", &payload, &xaction)
+//     notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload,
+//             StartTime: time.Now(), TransactionId: string(xaction)}
+//     var messageChannel chan<- *models.NotificationResponse
+//
+//     nb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_CONNECTED,}
+//     var rnibErr common.IRNibError
+//     readerMock.On("GetNodeb", mBuf.Meid).Return(nb, rnibErr)
+//     updatedNb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_DISCONNECTED,}
+//     writerMock.On("SaveNodeb", mock.Anything, updatedNb).Return(rnibErr)
+//
+//     h.Handle(log,e2Sessions, &notificationRequest, messageChannel)
+//
+//     if _, ok := e2Sessions[string(xaction)]; ok {
+//             t.Errorf("want: no session entry, got: session entry for: %s", string(xaction) )
+//     }
+//}
+//
+///*
+// * Test an error response triggered by the E2 Term
+// */
+//
+//func TestHandleNoSession(t *testing.T){
+//     log, err := logger.InitLogger(logger.InfoLevel)
+//     if err!=nil{
+//             t.Errorf("#sctp_errors_notification_handler_test.TestHandleNoSession - failed to initialize logger, error: %s", err)
+//     }
+//
+//     readerMock :=&mocks.RnibReaderMock{}
+//     rnibReaderProvider := func() reader.RNibReader {
+//             return readerMock
+//     }
+//     writerMock := &mocks.RnibWriterMock{}
+//     rnibWriterProvider := func() rNibWriter.RNibWriter {
+//             return writerMock
+//     }
+//     h := NewRanLostConnectionHandler(rnibReaderProvider,rnibWriterProvider)
+//
+//     e2Sessions := make(sessions.E2Sessions)
+//     transactionId := "1234"
+//     xaction := []byte(fmt.Sprintf("%32s", transactionId+"6"))
+//     e2Sessions[transactionId] = sessions.E2SessionDetails{SessionStart: time.Now()}
+//     payload := []byte("Error")
+//     mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload),"RanName", &payload, &xaction)
+//     notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload, StartTime: time.Now(),
+//                     TransactionId: string(xaction)}
+//     var messageChannel chan<- *models.NotificationResponse
+//
+//     nb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_CONNECTED,}
+//     var rnibErr common.IRNibError
+//     readerMock.On("GetNodeb", mBuf.Meid).Return(nb, rnibErr)
+//     updatedNb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_DISCONNECTED,}
+//     writerMock.On("SaveNodeb", mock.Anything, updatedNb).Return(rnibErr)
+//
+//     h.Handle(log,e2Sessions, &notificationRequest, messageChannel)
+//
+//     if _, ok := e2Sessions[transactionId]; !ok {
+//             t.Errorf("want: session entry for %s, got: no session entry", transactionId )
+//     }
+//}
+///*
+// * Test an error response triggered by the E2 Term
+// */
+//func TestHandleUnsolicitedDisconnectionConnectedSuccess(t *testing.T){
+//     log, err := logger.InitLogger(logger.DebugLevel)
+//     if err!=nil{
+//             t.Errorf("#sctp_errors_notification_handler_test.TestHandleNoSession - failed to initialize logger, error: %s", err)
+//     }
+//
+//     readerMock :=&mocks.RnibReaderMock{}
+//     rnibReaderProvider := func() reader.RNibReader {
+//             return readerMock
+//     }
+//     writerMock := &mocks.RnibWriterMock{}
+//     rnibWriterProvider := func() rNibWriter.RNibWriter {
+//             return writerMock
+//     }
+//     h := NewRanLostConnectionHandler(rnibReaderProvider,rnibWriterProvider)
+//
+//     e2Sessions := make(sessions.E2Sessions)
+//     transactionId := "1234"
+//     xaction := []byte(fmt.Sprintf("%32s", transactionId+"6"))
+//     e2Sessions[transactionId] = sessions.E2SessionDetails{SessionStart: time.Now()}
+//     payload := []byte("Error")
+//     mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload),"RanName", &payload, &xaction)
+//     notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload, StartTime: time.Now(),
+//             TransactionId: string(xaction)}
+//     var messageChannel chan<- *models.NotificationResponse
+//
+//     nb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_CONNECTED,}
+//     var rnibErr common.IRNibError
+//     readerMock.On("GetNodeb", mBuf.Meid).Return(nb, rnibErr)
+//     updatedNb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_DISCONNECTED,}
+//     writerMock.On("SaveNodeb", mock.Anything, updatedNb).Return(rnibErr)
+//
+//     h.Handle(log,e2Sessions, &notificationRequest, messageChannel)
+//}
+//
+//func TestHandleUnsolicitedDisconnectionNotConnectedSuccess(t *testing.T){
+//     log, err := logger.InitLogger(logger.DebugLevel)
+//     if err!=nil{
+//             t.Errorf("#sctp_errors_notification_handler_test.TestHandleNoSession - failed to initialize logger, error: %s", err)
+//     }
+//
+//     readerMock :=&mocks.RnibReaderMock{}
+//     rnibReaderProvider := func() reader.RNibReader {
+//             return readerMock
+//     }
+//     writerMock := &mocks.RnibWriterMock{}
+//     rnibWriterProvider := func() rNibWriter.RNibWriter {
+//             return writerMock
+//     }
+//     h := NewRanLostConnectionHandler(rnibReaderProvider,rnibWriterProvider)
+//
+//     e2Sessions := make(sessions.E2Sessions)
+//     transactionId := "1234"
+//     xaction := []byte(fmt.Sprintf("%32s", transactionId+"6"))
+//     e2Sessions[transactionId] = sessions.E2SessionDetails{SessionStart: time.Now()}
+//     payload := []byte("Error")
+//     mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload),"RanName", &payload, &xaction)
+//     notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload, StartTime: time.Now(),
+//             TransactionId: string(xaction)}
+//     var messageChannel chan<- *models.NotificationResponse
+//
+//     nb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_DISCONNECTED,}
+//     var rnibErr common.IRNibError
+//     readerMock.On("GetNodeb", mBuf.Meid).Return(nb, rnibErr)
+//     updatedNb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_DISCONNECTED,}
+//     writerMock.On("SaveNodeb", mock.Anything, updatedNb).Return(rnibErr)
+//
+//     h.Handle(log,e2Sessions, &notificationRequest, messageChannel)
+//}
+//
+//func TestHandleUnsolicitedDisconnectionShuttingDownSuccess(t *testing.T){
+//     log, err := logger.InitLogger(logger.DebugLevel)
+//     if err!=nil{
+//             t.Errorf("#sctp_errors_notification_handler_test.TestHandleNoSession - failed to initialize logger, error: %s", err)
+//     }
+//
+//     readerMock :=&mocks.RnibReaderMock{}
+//     rnibReaderProvider := func() reader.RNibReader {
+//             return readerMock
+//     }
+//     writerMock := &mocks.RnibWriterMock{}
+//     rnibWriterProvider := func() rNibWriter.RNibWriter {
+//             return writerMock
+//     }
+//     h := NewRanLostConnectionHandler(rnibReaderProvider,rnibWriterProvider)
+//
+//     e2Sessions := make(sessions.E2Sessions)
+//     transactionId := "1234"
+//     xaction := []byte(fmt.Sprintf("%32s", transactionId+"6"))
+//     e2Sessions[transactionId] = sessions.E2SessionDetails{SessionStart: time.Now()}
+//     payload := []byte("Error")
+//     mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload),"RanName", &payload, &xaction)
+//     notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload, StartTime: time.Now(),
+//             TransactionId: string(xaction)}
+//     var messageChannel chan<- *models.NotificationResponse
+//
+//     nb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_SHUTTING_DOWN,}
+//     var rnibErr common.IRNibError
+//     readerMock.On("GetNodeb", mBuf.Meid).Return(nb, rnibErr)
+//     updatedNb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_SHUT_DOWN,}
+//     writerMock.On("SaveNodeb", mock.Anything, updatedNb).Return(rnibErr)
+//
+//     h.Handle(log,e2Sessions, &notificationRequest, messageChannel)
+//}
+//
+//func TestHandleUnsolicitedDisconnectionShutDownSuccess(t *testing.T){
+//     log, err := logger.InitLogger(logger.DebugLevel)
+//     if err!=nil{
+//             t.Errorf("#sctp_errors_notification_handler_test.TestHandleNoSession - failed to initialize logger, error: %s", err)
+//     }
+//
+//     readerMock :=&mocks.RnibReaderMock{}
+//     rnibReaderProvider := func() reader.RNibReader {
+//             return readerMock
+//     }
+//     writerMock := &mocks.RnibWriterMock{}
+//     rnibWriterProvider := func() rNibWriter.RNibWriter {
+//             return writerMock
+//     }
+//     h := NewRanLostConnectionHandler(rnibReaderProvider,rnibWriterProvider)
+//
+//     e2Sessions := make(sessions.E2Sessions)
+//     transactionId := "1234"
+//     xaction := []byte(fmt.Sprintf("%32s", transactionId+"6"))
+//     e2Sessions[transactionId] = sessions.E2SessionDetails{SessionStart: time.Now()}
+//     payload := []byte("Error")
+//     mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload),"RanName", &payload, &xaction)
+//     notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload, StartTime: time.Now(),
+//             TransactionId: string(xaction)}
+//     var messageChannel chan<- *models.NotificationResponse
+//
+//     nb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_SHUT_DOWN,}
+//     var rnibErr common.IRNibError
+//     readerMock.On("GetNodeb", mBuf.Meid).Return(nb, rnibErr)
+//     updatedNb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_SHUT_DOWN,}
+//     writerMock.On("SaveNodeb", mock.Anything, updatedNb).Return(rnibErr)
+//
+//     h.Handle(log,e2Sessions, &notificationRequest, messageChannel)
+//}
+//
+//func TestHandleUnsolicitedDisconnectionReaderFailure(t *testing.T){
+//     log, err := logger.InitLogger(logger.DebugLevel)
+//     if err!=nil{
+//             t.Errorf("#sctp_errors_notification_handler_test.TestHandleNoSession - failed to initialize logger, error: %s", err)
+//     }
+//
+//     readerMock :=&mocks.RnibReaderMock{}
+//     rnibReaderProvider := func() reader.RNibReader {
+//             return readerMock
+//     }
+//     writerMock := &mocks.RnibWriterMock{}
+//     rnibWriterProvider := func() rNibWriter.RNibWriter {
+//             return writerMock
+//     }
+//     h := NewRanLostConnectionHandler(rnibReaderProvider,rnibWriterProvider)
+//
+//     e2Sessions := make(sessions.E2Sessions)
+//     transactionId := "1234"
+//     xaction := []byte(fmt.Sprintf("%32s", transactionId+"6"))
+//     e2Sessions[transactionId] = sessions.E2SessionDetails{SessionStart: time.Now()}
+//     payload := []byte("Error")
+//     mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload),"RanName", &payload, &xaction)
+//     notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload, StartTime: time.Now(),
+//             TransactionId: string(xaction)}
+//     var messageChannel chan<- *models.NotificationResponse
+//
+//     var nb *entities.NodebInfo
+//     rnibErr := common.RNibError{}
+//     readerMock.On("GetNodeb", mBuf.Meid).Return(nb, rnibErr)
+//     h.Handle(log,e2Sessions, &notificationRequest, messageChannel)
+//}
+//
+//func TestHandleUnsolicitedDisconnectionWriterFailure(t *testing.T){
+//     log, err := logger.InitLogger(logger.DebugLevel)
+//     if err!=nil{
+//             t.Errorf("#sctp_errors_notification_handler_test.TestHandleNoSession - failed to initialize logger, error: %s", err)
+//     }
+//
+//     readerMock :=&mocks.RnibReaderMock{}
+//     rnibReaderProvider := func() reader.RNibReader {
+//             return readerMock
+//     }
+//     writerMock := &mocks.RnibWriterMock{}
+//     rnibWriterProvider := func() rNibWriter.RNibWriter {
+//             return writerMock
+//     }
+//     h := NewRanLostConnectionHandler(rnibReaderProvider,rnibWriterProvider)
+//
+//     e2Sessions := make(sessions.E2Sessions)
+//     transactionId := "1234"
+//     xaction := []byte(fmt.Sprintf("%32s", transactionId+"6"))
+//     e2Sessions[transactionId] = sessions.E2SessionDetails{SessionStart: time.Now()}
+//     payload := []byte("Error")
+//     mBuf := rmrCgo.NewMBuf(tests.MessageType, len(payload),"RanName", &payload, &xaction)
+//     notificationRequest := models.NotificationRequest{RanName: mBuf.Meid, Len: mBuf.Len, Payload: *mBuf.Payload, StartTime: time.Now(),
+//             TransactionId: string(xaction)}
+//     var messageChannel chan<- *models.NotificationResponse
+//
+//     nb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_CONNECTED,}
+//     var rnibErr common.IRNibError
+//     readerMock.On("GetNodeb", mBuf.Meid).Return(nb, rnibErr)
+//     updatedNb := &entities.NodebInfo{RanName:mBuf.Meid, ConnectionStatus:entities.ConnectionStatus_DISCONNECTED,}
+//     writerMock.On("SaveNodeb", mock.Anything, updatedNb).Return(common.RNibError{})
+//
+//     h.Handle(log,e2Sessions, &notificationRequest, messageChannel)
+//}
index 146bdfb..f9c031b 100644 (file)
@@ -93,24 +93,6 @@ func (SetupRequestHandler) CreateMessage(logger *logger.Logger, requestDetails *
        wg.Done()
 }
 
-func asn1bstringToString(val []byte, numBits uint) string {
-       // Take the last byte
-       c := val[len(val)-1]
-
-       b := numBits % 8
-
-       // If num bits is not evenly divisable by 8 ...
-       if b != 0 {
-               // ... shift the value to the higher bits (in our case: 0x0b -> 0xb0)
-               c <<= 8 - b
-       }
-
-       if len(val) == 1 {
-               return fmt.Sprintf("%02x", c)
-       }
-       return fmt.Sprintf("%02x%02x", val[:len(val)-1], c)
-}
-
 //Expected value in RIC_ID = pLMN_Identity-eNB_ID/<eNB_ID size in bits>
 //<6 hex digits>-<6 or 8 hex digits>/<18|20|21|28>
 //Each byte is represented by two hex digits, the value in the lowest byte of the eNB_ID must be assigned to the lowest bits
index 4a7b969..f9b27e1 100644 (file)
@@ -22,6 +22,7 @@ import (
        "e2mgr/controllers"
        "e2mgr/logger"
        "e2mgr/managers"
+       "e2mgr/managers/notificationmanager"
        "e2mgr/models"
        "e2mgr/rNibWriter"
        "e2mgr/rmrCgo"
@@ -35,7 +36,7 @@ import (
        "os"
 )
 
-const MAX_RNIB_PULL_INSTANCES = 4
+const MAX_RNIB_POOL_INSTANCES = 4
 
 func main() {
        config := configuration.ParseConfiguration()
@@ -47,14 +48,18 @@ func main() {
        }
        rmrConfig := services.NewRmrConfig(config.Rmr.Port, config.Rmr.MaxMsgSize, 0, logger)
        var msgImpl *rmrCgo.Context
-       rNibWriter.Init("e2Manager", MAX_RNIB_PULL_INSTANCES)
+       rNibWriter.Init("e2Manager", MAX_RNIB_POOL_INSTANCES)
        defer rNibWriter.Close()
-       reader.Init("e2Manager", MAX_RNIB_PULL_INSTANCES)
+       reader.Init("e2Manager", MAX_RNIB_POOL_INSTANCES)
        defer reader.Close()
-       var nManager = managers.NewNotificationManager(reader.GetRNibReader, rNibWriter.GetRNibWriter)
 
        rmrResponseChannel := make(chan *models.NotificationResponse, config.NotificationResponseBuffer)
        rmrService := services.NewRmrService(rmrConfig, msgImpl, controllers.E2Sessions, rmrResponseChannel)
+
+       var ranSetupManager = managers.NewRanSetupManager(logger, rmrService, reader.GetRNibReader, rNibWriter.GetRNibWriter)
+       var ranReconnectionManager = managers.NewRanReconnectionManager(logger, config, reader.GetRNibReader, rNibWriter.GetRNibWriter, ranSetupManager)
+       var nManager = notificationmanager.NewNotificationManager(reader.GetRNibReader, rNibWriter.GetRNibWriter, ranReconnectionManager)
+
        rmrServiceReceiver := receivers.NewRmrServiceReceiver(*rmrService, nManager)
        defer rmrService.CloseContext()
        go rmrServiceReceiver.ListenAndHandle()
@@ -79,4 +84,4 @@ func runServer(rmrService *services.RmrService, logger *logger.Logger, config *c
        if err := http.ListenAndServe(port, router); err != nil {
                log.Fatalf("#runNodebServer - fail to start http server. Error: %v", err)
        }
-}
\ No newline at end of file
+}
 // limitations under the License.
 //
 
-package managers
+package notificationmanager
 
 import (
        "e2mgr/logger"
+       "e2mgr/managers"
        "e2mgr/models"
-       "e2mgr/providers"
+       "e2mgr/providers/rmrmsghandlerprovider"
        "e2mgr/rNibWriter"
        "e2mgr/rmrCgo"
        "e2mgr/sessions"
@@ -30,11 +31,11 @@ import (
 )
 
 type NotificationManager struct {
-       notificationHandlerProvider *providers.NotificationHandlerProvider
+       notificationHandlerProvider *rmrmsghandlerprovider.NotificationHandlerProvider
 }
 
-func NewNotificationManager(rnibReaderProvider func() reader.RNibReader, rnibWriterProvider func() rNibWriter.RNibWriter) *NotificationManager {
-       notificationHandlerProvider := providers.NewNotificationHandlerProvider(rnibReaderProvider, rnibWriterProvider)
+func NewNotificationManager(rnibReaderProvider func() reader.RNibReader, rnibWriterProvider func() rNibWriter.RNibWriter, ranReconnectionManager *managers.RanReconnectionManager) *NotificationManager {
+       notificationHandlerProvider := rmrmsghandlerprovider.NewNotificationHandlerProvider(rnibReaderProvider, rnibWriterProvider, ranReconnectionManager)
 
        return &NotificationManager{
                notificationHandlerProvider: notificationHandlerProvider,
diff --git a/E2Manager/managers/ran_reconnection_manager.go b/E2Manager/managers/ran_reconnection_manager.go
new file mode 100644 (file)
index 0000000..f4a3c35
--- /dev/null
@@ -0,0 +1,87 @@
+package managers
+
+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"
+)
+
+type RanReconnectionManager struct {
+       logger             *logger.Logger
+       config             *configuration.Configuration
+       rnibReaderProvider func() reader.RNibReader
+       rnibWriterProvider func() rNibWriter.RNibWriter
+       ranSetupManager    *RanSetupManager
+}
+
+func NewRanReconnectionManager(logger *logger.Logger, config *configuration.Configuration, rnibReaderProvider func() reader.RNibReader, rnibWriterProvider func() rNibWriter.RNibWriter, ranSetupManager *RanSetupManager) *RanReconnectionManager {
+       return &RanReconnectionManager{
+               logger:             logger,
+               config:             config,
+               rnibReaderProvider: rnibReaderProvider,
+               rnibWriterProvider: rnibWriterProvider,
+               ranSetupManager:    ranSetupManager,
+       }
+}
+
+func (m *RanReconnectionManager) ReconnectRan(inventoryName string) error {
+       nodebInfo, rnibErr := m.rnibReaderProvider().GetNodeb(inventoryName)
+
+       if rnibErr != nil {
+               m.logger.Errorf("#ReconnectRan - RAN name: %s - Failed fetching RAN from rNib. Error: %v", inventoryName, rnibErr)
+               return rnibErr
+       }
+
+       if !m.canReconnectRan(nodebInfo) {
+               m.logger.Warnf("#ReconnectRan - RAN name: %s - Cannot reconnect RAN", inventoryName)
+               return m.setConnectionStatusOfUnconnectableRan(nodebInfo)
+       }
+
+       err := m.ranSetupManager.ExecuteSetup(nodebInfo)
+
+       if err != nil {
+               m.logger.Errorf("#ReconnectRan - RAN name: %s - Failed executing setup. Error: %v", inventoryName, err)
+               return err
+       }
+
+       m.logger.Infof("#ReconnectRan - RAN name: %s - Successfully done executing setup", inventoryName)
+       return nil
+}
+
+func (m *RanReconnectionManager) canReconnectRan(nodebInfo *entities.NodebInfo) bool {
+       connectionStatus := nodebInfo.GetConnectionStatus()
+       return connectionStatus != entities.ConnectionStatus_SHUT_DOWN && connectionStatus != entities.ConnectionStatus_SHUTTING_DOWN &&
+               int(nodebInfo.GetConnectionAttempts()) < m.config.MaxConnectionAttempts
+}
+
+func (m *RanReconnectionManager) updateNodebInfoStatus(nodebInfo *entities.NodebInfo, connectionStatus entities.ConnectionStatus) common.IRNibError {
+       nodebInfo.ConnectionStatus = connectionStatus;
+       err := m.rnibWriterProvider().UpdateNodebInfo(nodebInfo)
+
+       if err != nil {
+               m.logger.Errorf("#updateNodebInfoStatus - RAN name: %s - Failed updating RAN's connection status to %s in rNib. Error: %v", nodebInfo.RanName, connectionStatus, err)
+               return err
+       }
+
+       m.logger.Infof("#updateNodebInfoStatus - RAN name: %s - Successfully updated RAN's connection status to %s in rNib", nodebInfo.RanName, connectionStatus)
+       return nil
+}
+
+func (m *RanReconnectionManager) setConnectionStatusOfUnconnectableRan(nodebInfo *entities.NodebInfo) common.IRNibError {
+       connectionStatus := nodebInfo.GetConnectionStatus()
+       m.logger.Warnf("#setConnectionStatusOfUnconnectableRan - RAN name: %s, RAN's connection status: %s, RAN's connection attempts: %d", nodebInfo.RanName, nodebInfo.ConnectionStatus, nodebInfo.ConnectionAttempts)
+
+       if connectionStatus == entities.ConnectionStatus_SHUTTING_DOWN {
+               return m.updateNodebInfoStatus(nodebInfo, entities.ConnectionStatus_SHUT_DOWN)
+       }
+
+       if int(nodebInfo.GetConnectionAttempts()) >= m.config.MaxConnectionAttempts {
+               m.logger.Warnf("#setConnectionStatusOfUnconnectableRan - RAN name: %s - RAN's connection attempts are greater than %d", nodebInfo.RanName, m.config.MaxConnectionAttempts)
+               return m.updateNodebInfoStatus(nodebInfo, entities.ConnectionStatus_DISCONNECTED)
+       }
+
+       return nil
+}
diff --git a/E2Manager/managers/ran_setup_manager.go b/E2Manager/managers/ran_setup_manager.go
new file mode 100644 (file)
index 0000000..6551abc
--- /dev/null
@@ -0,0 +1,28 @@
+package managers
+
+import (
+       "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 RanSetupManager struct {
+       logger             *logger.Logger
+       rnibReaderProvider func() reader.RNibReader
+       rnibWriterProvider func() rNibWriter.RNibWriter
+       rmrService         *services.RmrService
+}
+
+func NewRanSetupManager(logger *logger.Logger, rmrService *services.RmrService, rnibReaderProvider func() reader.RNibReader, rnibWriterProvider func() rNibWriter.RNibWriter) *RanSetupManager {
+       return &RanSetupManager{
+               logger:             logger,
+               rnibReaderProvider: rnibReaderProvider,
+               rnibWriterProvider: rnibWriterProvider,
+       }
+}
+
+func (m *RanSetupManager) ExecuteSetup(nodebInfo *entities.NodebInfo) error {
+       return nil
+}
index cae77cd..cb17fe1 100644 (file)
@@ -39,6 +39,18 @@ func (rnibWriterMock *RnibWriterMock) SaveNodeb(nbIdentity *entities.NbIdentity,
        return nil
 }
 
+func (rnibWriterMock *RnibWriterMock) UpdateNodebInfo(nodebInfo *entities.NodebInfo) common.IRNibError {
+       args := rnibWriterMock.Called(nodebInfo)
+
+       errArg := args.Get(0)
+
+       if errArg != nil {
+               return errArg.(common.IRNibError)
+       }
+
+       return nil
+}
+
 func (rnibWriterMock *RnibWriterMock) SaveRanLoadInformation(inventoryName string, ranLoadInformation *entities.RanLoadInformation) common.IRNibError {
        args := rnibWriterMock.Called(inventoryName, ranLoadInformation)
 
@@ -50,4 +62,3 @@ func (rnibWriterMock *RnibWriterMock) SaveRanLoadInformation(inventoryName strin
 
        return nil
 }
-
@@ -15,7 +15,7 @@
 // limitations under the License.
 //
 
-package providers
+package httpmsghandlerprovider
 
 import (
        "e2mgr/configuration"
@@ -29,31 +29,31 @@ import (
 
 type IncomingRequest string
 
-const(
+const (
        ShutdownRequest IncomingRequest = "Shutdown"
-       ResetRequest IncomingRequest = "Reset"
+       ResetRequest    IncomingRequest = "Reset"
 )
 
-type IncomingRequestHandlerProvider struct{
+type IncomingRequestHandlerProvider struct {
        requestMap map[IncomingRequest]handlers.RequestHandler
-       logger *logger.Logger
+       logger     *logger.Logger
 }
 
 func NewIncomingRequestHandlerProvider(logger *logger.Logger, rmrService *services.RmrService, config *configuration.Configuration, rNibWriterProvider func() rNibWriter.RNibWriter,
        rNibReaderProvider func() reader.RNibReader) *IncomingRequestHandlerProvider {
 
        return &IncomingRequestHandlerProvider{
-               requestMap:     initRequestHandlerMap(rmrService, config,  rNibWriterProvider, rNibReaderProvider),
-               logger: logger,
+               requestMap: initRequestHandlerMap(rmrService, config, rNibWriterProvider, rNibReaderProvider),
+               logger:     logger,
        }
 }
 
-func initRequestHandlerMap(rmrService *services.RmrService,config *configuration.Configuration, rNibWriterProvider func() rNibWriter.RNibWriter,
+func initRequestHandlerMap(rmrService *services.RmrService, config *configuration.Configuration, rNibWriterProvider func() rNibWriter.RNibWriter,
        rNibReaderProvider func() reader.RNibReader) map[IncomingRequest]handlers.RequestHandler {
 
        return map[IncomingRequest]handlers.RequestHandler{
                ShutdownRequest: handlers.NewDeleteAllRequestHandler(rmrService, config, rNibWriterProvider, rNibReaderProvider), //TODO change to pointer
-               ResetRequest: handlers.NewX2ResetRequestHandler(rmrService, config, rNibWriterProvider, rNibReaderProvider),      //TODO change to pointer
+               ResetRequest:    handlers.NewX2ResetRequestHandler(rmrService, config, rNibWriterProvider, rNibReaderProvider),   //TODO change to pointer
        }
 }
 
@@ -15,7 +15,7 @@
 // limitations under the License.
 //
 
-package providers
+package httpmsghandlerprovider
 
 import (
        "e2mgr/configuration"
@@ -39,7 +39,7 @@ func getRmrService(rmrMessengerMock *mocks.RmrMessengerMock, log *logger.Logger)
        rmrMessenger := rmrCgo.RmrMessenger(rmrMessengerMock)
        messageChannel := make(chan *models.NotificationResponse)
        rmrMessengerMock.On("Init", tests.GetPort(), tests.MaxMsgSize, tests.Flags, log).Return(&rmrMessenger)
-       return services.NewRmrService(services.NewRmrConfig(tests.Port, tests.MaxMsgSize, tests.Flags, log), rmrMessenger,  make(sessions.E2Sessions), messageChannel)
+       return services.NewRmrService(services.NewRmrConfig(tests.Port, tests.MaxMsgSize, tests.Flags, log), rmrMessenger, make(sessions.E2Sessions), messageChannel)
 }
 
 func TestNewIncomingRequestHandlerProvider(t *testing.T) {
@@ -106,7 +106,7 @@ func TestGetShutdownHandlerFailure(t *testing.T) {
        expected := &e2managererrors.InternalError{}
 
        assert.NotNil(t, actual)
-       if reflect.TypeOf(actual) != reflect.TypeOf(expected){
+       if reflect.TypeOf(actual) != reflect.TypeOf(expected) {
                t.Errorf("Error actual = %v, and Expected = %v.", actual, expected)
        }
 }
@@ -117,4 +117,4 @@ func initLog(t *testing.T) *logger.Logger {
                t.Errorf("#delete_all_request_handler_test.TestHandleSuccessFlow - failed to initialize logger, error: %s", err)
        }
        return log
-}
\ No newline at end of file
+}
@@ -15,7 +15,7 @@
 // limitations under the License.
 //
 
-package providers
+package httpmsghandlerprovider
 
 import (
        "e2mgr/handlers"
 // limitations under the License.
 //
 
-package providers
+package rmrmsghandlerprovider
 
 import (
        "e2mgr/handlers"
+       "e2mgr/managers"
        "e2mgr/rNibWriter"
        "e2mgr/rmrCgo"
        "fmt"
        "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
 )
 
-type NotificationHandlerProvider struct{
+type NotificationHandlerProvider struct {
        notificationHandlers map[int]handlers.NotificationHandler
 }
 
-func NewNotificationHandlerProvider(rnibReaderProvider func() reader.RNibReader, rnibWriterProvider func() rNibWriter.RNibWriter) *NotificationHandlerProvider {
+func NewNotificationHandlerProvider(rnibReaderProvider func() reader.RNibReader, rnibWriterProvider func() rNibWriter.RNibWriter, ranReconnectionManager *managers.RanReconnectionManager) *NotificationHandlerProvider {
        return &NotificationHandlerProvider{
-               notificationHandlers: initNotificationHandlersMap(rnibReaderProvider, rnibWriterProvider),
+               notificationHandlers: initNotificationHandlersMap(rnibReaderProvider, rnibWriterProvider, ranReconnectionManager),
        }
 }
 
-func initNotificationHandlersMap(rnibReaderProvider func() reader.RNibReader, rnibWriterProvider func() rNibWriter.RNibWriter) map[int]handlers.NotificationHandler{
-       return  map[int]handlers.NotificationHandler{
+func initNotificationHandlersMap(rnibReaderProvider func() reader.RNibReader, rnibWriterProvider func() rNibWriter.RNibWriter, ranReconnectionManager *managers.RanReconnectionManager) map[int]handlers.NotificationHandler {
+       return map[int]handlers.NotificationHandler{
                //TODO change handlers.NotificationHandler to *handlers.NotificationHandler
                rmrCgo.RIC_X2_SETUP_RESP:           handlers.X2SetupResponseNotificationHandler{},
                rmrCgo.RIC_X2_SETUP_FAILURE:        handlers.X2SetupFailureResponseNotificationHandler{},
                rmrCgo.RIC_ENDC_X2_SETUP_RESP:      handlers.EndcX2SetupResponseNotificationHandler{},
                rmrCgo.RIC_ENDC_X2_SETUP_FAILURE:   handlers.EndcX2SetupFailureResponseNotificationHandler{},
-               rmrCgo.RIC_SCTP_CONNECTION_FAILURE: handlers.NewRanLostConnectionHandler(rnibReaderProvider, rnibWriterProvider),
+               rmrCgo.RIC_SCTP_CONNECTION_FAILURE: handlers.NewRanLostConnectionHandler(ranReconnectionManager),
                rmrCgo.RIC_ENB_LOAD_INFORMATION:    handlers.NewEnbLoadInformationNotificationHandler(rnibWriterProvider),
-               rmrCgo.RIC_ENB_CONF_UPDATE:             handlers.X2EnbConfigurationUpdateHandler{},
-               rmrCgo.RIC_ENDC_CONF_UPDATE:            handlers.EndcConfigurationUpdateHandler{},
-               rmrCgo.RIC_X2_RESET_RESP:                       handlers.NewX2ResetResponseHandler(rnibReaderProvider),
-               rmrCgo.RIC_X2_RESET:                            handlers.NewX2ResetRequestNotificationHandler(rnibReaderProvider),
+               rmrCgo.RIC_ENB_CONF_UPDATE:         handlers.X2EnbConfigurationUpdateHandler{},
+               rmrCgo.RIC_ENDC_CONF_UPDATE:        handlers.EndcConfigurationUpdateHandler{},
+               rmrCgo.RIC_X2_RESET_RESP:           handlers.NewX2ResetResponseHandler(rnibReaderProvider),
+               rmrCgo.RIC_X2_RESET:                handlers.NewX2ResetRequestNotificationHandler(rnibReaderProvider),
        }
 }
 
@@ -55,7 +56,7 @@ func (provider NotificationHandlerProvider) GetNotificationHandler(messageType i
        handler, ok := provider.notificationHandlers[messageType]
 
        if !ok {
-               return nil, fmt.Errorf("notification handler not found for message %d",messageType)
+               return nil, fmt.Errorf("notification handler not found for message %d", messageType)
        }
 
        return handler, nil
 // limitations under the License.
 //
 
-package providers
+package rmrmsghandlerprovider
 
 import (
+       "e2mgr/configuration"
+       "e2mgr/logger"
+       "e2mgr/managers"
        "e2mgr/mocks"
+       "e2mgr/models"
        "e2mgr/rNibWriter"
+       "e2mgr/services"
+       "e2mgr/sessions"
+       "e2mgr/tests"
        "fmt"
        "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
        "strings"
@@ -34,6 +41,10 @@ import (
  */
 
 func TestGetNotificationHandlerSuccess(t *testing.T) {
+
+       logger := initLog(t)
+       rmrService := getRmrService(&mocks.RmrMessengerMock{}, logger)
+
        readerMock := &mocks.RnibReaderMock{}
        rnibReaderProvider := func() reader.RNibReader {
                return readerMock
@@ -42,6 +53,10 @@ func TestGetNotificationHandlerSuccess(t *testing.T) {
        rnibWriterProvider := func() rNibWriter.RNibWriter {
                return writerMock
        }
+
+       ranSetupManager := managers.NewRanSetupManager(logger, rmrService, rnibReaderProvider, rnibWriterProvider)
+       ranReconnectionManager := managers.NewRanReconnectionManager(logger, configuration.ParseConfiguration(), rnibReaderProvider, rnibWriterProvider, ranSetupManager)
+
        var testCases = []struct {
                msgType int
                handler handlers.NotificationHandler
@@ -50,14 +65,15 @@ func TestGetNotificationHandlerSuccess(t *testing.T) {
                {rmrCgo.RIC_X2_SETUP_FAILURE /*unsuccessful x2 setup response*/, handlers.X2SetupFailureResponseNotificationHandler{}},
                {rmrCgo.RIC_ENDC_X2_SETUP_RESP /*successful en-dc x2 setup response*/, handlers.EndcX2SetupResponseNotificationHandler{}},
                {rmrCgo.RIC_ENDC_X2_SETUP_FAILURE /*unsuccessful en-dc x2 setup response*/, handlers.EndcX2SetupFailureResponseNotificationHandler{}},
-               {rmrCgo.RIC_SCTP_CONNECTION_FAILURE /*sctp errors*/, handlers.NewRanLostConnectionHandler(rnibReaderProvider, rnibWriterProvider)},
+               {rmrCgo.RIC_SCTP_CONNECTION_FAILURE /*sctp errors*/, handlers.NewRanLostConnectionHandler(ranReconnectionManager)},
                {rmrCgo.RIC_ENB_LOAD_INFORMATION, handlers.NewEnbLoadInformationNotificationHandler(rnibWriterProvider)},
                {rmrCgo.RIC_ENB_CONF_UPDATE, handlers.X2EnbConfigurationUpdateHandler{}},
                {rmrCgo.RIC_ENDC_CONF_UPDATE, handlers.EndcConfigurationUpdateHandler{}},
        }
+
        for _, tc := range testCases {
 
-               provider := NewNotificationHandlerProvider(rnibReaderProvider, rnibWriterProvider)
+               provider := NewNotificationHandlerProvider(rnibReaderProvider, rnibWriterProvider, ranReconnectionManager)
                t.Run(fmt.Sprintf("%d", tc.msgType), func(t *testing.T) {
                        handler, err := provider.GetNotificationHandler(tc.msgType)
                        if err != nil {
@@ -77,6 +93,10 @@ func TestGetNotificationHandlerSuccess(t *testing.T) {
  */
 
 func TestGetNotificationHandlerFailure(t *testing.T) {
+
+       logger := initLog(t)
+       rmrService := getRmrService(&mocks.RmrMessengerMock{}, logger)
+
        var testCases = []struct {
                msgType   int
                errorText string
@@ -92,7 +112,11 @@ func TestGetNotificationHandlerFailure(t *testing.T) {
                rnibWriterProvider := func() rNibWriter.RNibWriter {
                        return writerMock
                }
-               provider := NewNotificationHandlerProvider(rnibReaderProvider, rnibWriterProvider)
+
+               ranSetupManager := managers.NewRanSetupManager(logger, rmrService, rnibReaderProvider, rnibWriterProvider)
+               ranReconnectionManager := managers.NewRanReconnectionManager(logger, configuration.ParseConfiguration(), rnibReaderProvider, rnibWriterProvider, ranSetupManager)
+
+               provider := NewNotificationHandlerProvider(rnibReaderProvider, rnibWriterProvider, ranReconnectionManager)
                t.Run(fmt.Sprintf("%d", tc.msgType), func(t *testing.T) {
                        _, err := provider.GetNotificationHandler(tc.msgType)
                        if err == nil {
@@ -104,3 +128,20 @@ func TestGetNotificationHandlerFailure(t *testing.T) {
                })
        }
 }
+
+// TODO: extract to test_utils
+func getRmrService(rmrMessengerMock *mocks.RmrMessengerMock, log *logger.Logger) *services.RmrService {
+       rmrMessenger := rmrCgo.RmrMessenger(rmrMessengerMock)
+       messageChannel := make(chan *models.NotificationResponse)
+       rmrMessengerMock.On("Init", tests.GetPort(), tests.MaxMsgSize, tests.Flags, log).Return(&rmrMessenger)
+       return services.NewRmrService(services.NewRmrConfig(tests.Port, tests.MaxMsgSize, tests.Flags, log), rmrMessenger, make(sessions.E2Sessions), messageChannel)
+}
+
+// TODO: extract to test_utils
+func initLog(t *testing.T) *logger.Logger {
+       log, err := logger.InitLogger(logger.InfoLevel)
+       if err != nil {
+               t.Errorf("#delete_all_request_handler_test.TestHandleSuccessFlow - failed to initialize logger, error: %s", err)
+       }
+       return log
+}
index 66a299e..1a0b60b 100644 (file)
 package rNibWriter
 
 import (
-       "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
-       "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
        "errors"
        "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/sdlgo"
        "github.com/golang/protobuf/proto"
 )
 
-
-
 var writerPool *common.Pool
 
 type rNibWriterInstance struct {
        sdl       *common.ISdlInstance
        namespace string
 }
+
 /*
 RNibWriter interface allows saving data to the redis DB
- */
+*/
 type RNibWriter interface {
        SaveNodeb(nbIdentity *entities.NbIdentity, nb *entities.NodebInfo) common.IRNibError
+       UpdateNodebInfo(nodebInfo *entities.NodebInfo) common.IRNibError
        SaveRanLoadInformation(inventoryName string, ranLoadInformation *entities.RanLoadInformation) common.IRNibError
 }
+
 /*
 Init initializes the infrastructure required for the RNibWriter instance
- */
+*/
 func Init(namespace string, poolSize int) {
        initPool(poolSize,
                func() interface{} {
@@ -54,27 +55,30 @@ func Init(namespace string, poolSize int) {
                        (*obj.(*rNibWriterInstance).sdl).Close()
                })
 }
+
 /*
 InitPool initializes the writer's instances pool
- */
+*/
 func initPool(poolSize int, newObj func() interface{}, destroyObj func(interface{})) {
        writerPool = common.NewPool(poolSize, newObj, destroyObj)
 }
+
 /*
 GetRNibWriter returns RNibWriter instance from the pool
- */
+*/
 func GetRNibWriter() RNibWriter {
        return writerPool.Get().(RNibWriter)
 }
+
 /*
 SaveNodeb saves nodeB entity data in the redis DB according to the specified data model
- */
+*/
 func (w *rNibWriterInstance) SaveNodeb(nbIdentity *entities.NbIdentity, entity *entities.NodebInfo) common.IRNibError {
 
        isNotEmptyIdentity := isNotEmpty(nbIdentity)
 
-       if isNotEmptyIdentity && entity.GetNodeType() == entities.Node_UNKNOWN{
-               return common.NewValidationError(errors.New( fmt.Sprintf("#rNibWriter.saveNodeB - Unknown responding node type, entity: %v", entity)))
+       if isNotEmptyIdentity && entity.GetNodeType() == entities.Node_UNKNOWN {
+               return common.NewValidationError(errors.New(fmt.Sprintf("#rNibWriter.saveNodeB - Unknown responding node type, entity: %v", entity)))
        }
        defer writerPool.Put(w)
        data, err := proto.Marshal(entity)
@@ -83,14 +87,14 @@ func (w *rNibWriterInstance) SaveNodeb(nbIdentity *entities.NbIdentity, entity *
        }
        var pairs []interface{}
        key, rNibErr := common.ValidateAndBuildNodeBNameKey(nbIdentity.InventoryName)
-       if rNibErr != nil{
+       if rNibErr != nil {
                return rNibErr
        }
        pairs = append(pairs, key, data)
 
        if isNotEmptyIdentity {
                key, rNibErr = common.ValidateAndBuildNodeBIdKey(entity.GetNodeType().String(), nbIdentity.GlobalNbId.GetPlmnId(), nbIdentity.GlobalNbId.GetNbId())
-               if rNibErr != nil{
+               if rNibErr != nil {
                        return rNibErr
                }
                pairs = append(pairs, key, data)
@@ -98,13 +102,13 @@ func (w *rNibWriterInstance) SaveNodeb(nbIdentity *entities.NbIdentity, entity *
 
        if entity.GetEnb() != nil {
                pairs, rNibErr = appendEnbCells(nbIdentity, entity.GetEnb().GetServedCells(), pairs)
-               if rNibErr != nil{
+               if rNibErr != nil {
                        return rNibErr
                }
        }
        if entity.GetGnb() != nil {
                pairs, rNibErr = appendGnbCells(nbIdentity, entity.GetGnb().GetServedNrCells(), pairs)
-               if rNibErr != nil{
+               if rNibErr != nil {
                        return rNibErr
                }
        }
@@ -115,7 +119,7 @@ func (w *rNibWriterInstance) SaveNodeb(nbIdentity *entities.NbIdentity, entity *
 
        ranNameIdentity := &entities.NbIdentity{InventoryName: nbIdentity.InventoryName}
 
-       if isNotEmptyIdentity{
+       if isNotEmptyIdentity {
                nbIdData, err := proto.Marshal(ranNameIdentity)
                if err != nil {
                        return common.NewInternalError(err)
@@ -139,6 +143,42 @@ func (w *rNibWriterInstance) SaveNodeb(nbIdentity *entities.NbIdentity, entity *
        return nil
 }
 
+/*
+UpdateNodebInfo...
+*/
+func (w *rNibWriterInstance) UpdateNodebInfo(nodebInfo *entities.NodebInfo) common.IRNibError {
+
+       defer writerPool.Put(w)
+
+       nodebNameKey, rNibErr := common.ValidateAndBuildNodeBNameKey(nodebInfo.GetRanName())
+
+       if rNibErr != nil {
+               return rNibErr
+       }
+
+       nodebIdKey, rNibErr := common.ValidateAndBuildNodeBIdKey(nodebInfo.GetNodeType().String(), nodebInfo.GlobalNbId.GetPlmnId(), nodebInfo.GlobalNbId.GetNbId())
+
+       if rNibErr != nil {
+               return rNibErr
+       }
+
+       data, err := proto.Marshal(nodebInfo)
+
+       if err != nil {
+               return common.NewInternalError(err)
+       }
+
+       var pairs []interface{}
+       pairs = append(pairs, nodebNameKey, data, nodebIdKey, data)
+       err = (*w.sdl).Set(pairs)
+
+       if err != nil {
+               return common.NewInternalError(err)
+       }
+
+       return nil
+}
+
 /*
 SaveRanLoadInformation stores ran load information for the provided ran
 */
@@ -146,7 +186,7 @@ func (w *rNibWriterInstance) SaveRanLoadInformation(inventoryName string, ranLoa
 
        defer writerPool.Put(w)
 
-       key, rnibErr:= common.ValidateAndBuildRanLoadInformationKey(inventoryName)
+       key, rnibErr := common.ValidateAndBuildRanLoadInformationKey(inventoryName)
 
        if rnibErr != nil {
                return rnibErr
@@ -172,25 +212,25 @@ func (w *rNibWriterInstance) SaveRanLoadInformation(inventoryName string, ranLoa
 
 /*
 Close closes writer's pool
- */
-func Close(){
+*/
+func Close() {
        writerPool.Close()
 }
 
 func appendEnbCells(nbIdentity *entities.NbIdentity, cells []*entities.ServedCellInfo, pairs []interface{}) ([]interface{}, common.IRNibError) {
        for _, cell := range cells {
-               cellEntity := entities.Cell{Type:entities.Cell_LTE_CELL, Cell:&entities.Cell_ServedCellInfo{ServedCellInfo:cell}}
+               cellEntity := entities.Cell{Type: entities.Cell_LTE_CELL, Cell: &entities.Cell_ServedCellInfo{ServedCellInfo: cell}}
                cellData, err := proto.Marshal(&cellEntity)
                if err != nil {
                        return pairs, common.NewInternalError(err)
                }
                key, rNibErr := common.ValidateAndBuildCellIdKey(cell.GetCellId())
-               if rNibErr != nil{
+               if rNibErr != nil {
                        return pairs, rNibErr
                }
                pairs = append(pairs, key, cellData)
                key, rNibErr = common.ValidateAndBuildCellNamePciKey(nbIdentity.InventoryName, cell.GetPci())
-               if rNibErr != nil{
+               if rNibErr != nil {
                        return pairs, rNibErr
                }
                pairs = append(pairs, key, cellData)
@@ -198,20 +238,20 @@ func appendEnbCells(nbIdentity *entities.NbIdentity, cells []*entities.ServedCel
        return pairs, nil
 }
 
-func appendGnbCells(nbIdentity *entities.NbIdentity, cells  []*entities.ServedNRCell, pairs []interface{}) ([]interface{}, common.IRNibError) {
+func appendGnbCells(nbIdentity *entities.NbIdentity, cells []*entities.ServedNRCell, pairs []interface{}) ([]interface{}, common.IRNibError) {
        for _, cell := range cells {
-               cellEntity := entities.Cell{Type:entities.Cell_NR_CELL, Cell:&entities.Cell_ServedNrCell{ServedNrCell:cell}}
+               cellEntity := entities.Cell{Type: entities.Cell_NR_CELL, Cell: &entities.Cell_ServedNrCell{ServedNrCell: cell}}
                cellData, err := proto.Marshal(&cellEntity)
                if err != nil {
                        return pairs, common.NewInternalError(err)
                }
                key, rNibErr := common.ValidateAndBuildNrCellIdKey(cell.GetServedNrCellInformation().GetCellId())
-               if rNibErr != nil{
+               if rNibErr != nil {
                        return pairs, rNibErr
                }
                pairs = append(pairs, key, cellData)
                key, rNibErr = common.ValidateAndBuildCellNamePciKey(nbIdentity.InventoryName, cell.GetServedNrCellInformation().GetNrPci())
-               if rNibErr != nil{
+               if rNibErr != nil {
                        return pairs, rNibErr
                }
                pairs = append(pairs, key, cellData)
index 92a0918..14abb1a 100644 (file)
@@ -71,6 +71,95 @@ func initSdlInstanceMock(namespace string, poolSize int) *mocks.MockSdlInstance
        return sdlInstanceMock
 }
 
+func TestUpdateNodebInfoSuccess(t *testing.T) {
+       inventoryName := "name"
+       plmnId := "02f829"
+       nbId := "4a952a0a"
+       writerPool = nil
+       sdlInstanceMock := initSdlInstanceMock(namespace, 1)
+       w := GetRNibWriter()
+       nodebInfo := &entities.NodebInfo{}
+       nodebInfo.RanName = inventoryName
+       nodebInfo.GlobalNbId = &entities.GlobalNbId{PlmnId: plmnId, NbId: nbId}
+       nodebInfo.NodeType = entities.Node_ENB
+       nodebInfo.ConnectionStatus = 1
+       enb := entities.Enb{}
+       nodebInfo.Configuration = &entities.NodebInfo_Enb{Enb: &enb}
+       data, err := proto.Marshal(nodebInfo)
+       if err != nil {
+               t.Errorf("#rNibWriter_test.TestSaveEnb - Failed to marshal NodeB entity. Error: %v", err)
+       }
+       var e error
+       var setExpected []interface{}
+
+       nodebNameKey := fmt.Sprintf("RAN:%s", inventoryName)
+       nodebIdKey := fmt.Sprintf("ENB:%s:%s", plmnId, nbId)
+       setExpected = append(setExpected, nodebNameKey, data)
+       setExpected = append(setExpected, nodebIdKey, data)
+
+       sdlInstanceMock.On("Set", []interface{}{setExpected}).Return(e)
+
+       rNibErr := w.UpdateNodebInfo(nodebInfo)
+       assert.Nil(t, rNibErr)
+}
+
+func TestUpdateNodebInfoMissingInventoryNameFailure(t *testing.T) {
+       inventoryName := "name"
+       plmnId := "02f829"
+       nbId := "4a952a0a"
+       writerPool = nil
+       sdlInstanceMock := initSdlInstanceMock(namespace, 1)
+       w := GetRNibWriter()
+       nodebInfo := &entities.NodebInfo{}
+       data, err := proto.Marshal(nodebInfo)
+       if err != nil {
+               t.Errorf("#rNibWriter_test.TestSaveEnb - Failed to marshal NodeB entity. Error: %v", err)
+       }
+       var e error
+       var setExpected []interface{}
+
+       nodebNameKey := fmt.Sprintf("RAN:%s", inventoryName)
+       nodebIdKey := fmt.Sprintf("ENB:%s:%s", plmnId, nbId)
+       setExpected = append(setExpected, nodebNameKey, data)
+       setExpected = append(setExpected, nodebIdKey, data)
+
+       sdlInstanceMock.On("Set", []interface{}{setExpected}).Return(e)
+
+       rNibErr := w.UpdateNodebInfo(nodebInfo)
+
+       assert.NotNil(t, rNibErr)
+       assert.Equal(t, common.VALIDATION_ERROR, rNibErr.GetCode())
+}
+
+func TestUpdateNodebInfoMissingGlobalNbIdFailure(t *testing.T) {
+       inventoryName := "name"
+       plmnId := "02f829"
+       nbId := "4a952a0a"
+       writerPool = nil
+       sdlInstanceMock := initSdlInstanceMock(namespace, 1)
+       w := GetRNibWriter()
+       nodebInfo := &entities.NodebInfo{}
+       nodebInfo.RanName = inventoryName
+       data, err := proto.Marshal(nodebInfo)
+       if err != nil {
+               t.Errorf("#rNibWriter_test.TestSaveEnb - Failed to marshal NodeB entity. Error: %v", err)
+       }
+       var e error
+       var setExpected []interface{}
+
+       nodebNameKey := fmt.Sprintf("RAN:%s", inventoryName)
+       nodebIdKey := fmt.Sprintf("ENB:%s:%s", plmnId, nbId)
+       setExpected = append(setExpected, nodebNameKey, data)
+       setExpected = append(setExpected, nodebIdKey, data)
+
+       sdlInstanceMock.On("Set", []interface{}{setExpected}).Return(e)
+
+       rNibErr := w.UpdateNodebInfo(nodebInfo)
+
+       assert.NotNil(t, rNibErr)
+       assert.Equal(t, common.VALIDATION_ERROR, rNibErr.GetCode())
+}
+
 func TestSaveEnb(t *testing.T) {
        name := "name"
        ranName := "RAN:" + name
@@ -83,10 +172,10 @@ func TestSaveEnb(t *testing.T) {
        nb.Ip = "localhost"
        nb.Port = 5656
        enb := entities.Enb{}
-       cell := &entities.ServedCellInfo{CellId:"aaff", Pci:3}
-       cellEntity := entities.Cell{Type:entities.Cell_LTE_CELL, Cell:&entities.Cell_ServedCellInfo{ServedCellInfo:cell}}
+       cell := &entities.ServedCellInfo{CellId: "aaff", Pci: 3}
+       cellEntity := entities.Cell{Type: entities.Cell_LTE_CELL, Cell: &entities.Cell_ServedCellInfo{ServedCellInfo: cell}}
        enb.ServedCells = []*entities.ServedCellInfo{cell}
-       nb.Configuration = &entities.NodebInfo_Enb{Enb:&enb}
+       nb.Configuration = &entities.NodebInfo_Enb{Enb: &enb}
        data, err := proto.Marshal(&nb)
        if err != nil {
                t.Errorf("#rNibWriter_test.TestSaveEnb - Failed to marshal NodeB entity. Error: %v", err)
@@ -111,7 +200,7 @@ func TestSaveEnb(t *testing.T) {
        }
        sdlInstanceMock.On("RemoveMember", entities.Node_UNKNOWN.String(), []interface{}{nbIdData}).Return(e)
 
-       nbIdentity := &entities.NbIdentity{InventoryName:name, GlobalNbId:&entities.GlobalNbId{PlmnId:"02f829", NbId:"4a952a0a"}}
+       nbIdentity := &entities.NbIdentity{InventoryName: name, GlobalNbId: &entities.GlobalNbId{PlmnId: "02f829", NbId: "4a952a0a"}}
        nbIdData, err = proto.Marshal(nbIdentity)
        if err != nil {
                t.Errorf("#rNibWriter_test.TestSaveEnb - Failed to marshal NodeB Identity entity. Error: %v", err)
@@ -133,11 +222,11 @@ func TestSaveEnbCellIdValidationFailure(t *testing.T) {
        nb.Ip = "localhost"
        nb.Port = 5656
        enb := entities.Enb{}
-       cell := &entities.ServedCellInfo{Pci:3}
+       cell := &entities.ServedCellInfo{Pci: 3}
        enb.ServedCells = []*entities.ServedCellInfo{cell}
-       nb.Configuration = &entities.NodebInfo_Enb{Enb:&enb}
+       nb.Configuration = &entities.NodebInfo_Enb{Enb: &enb}
 
-       nbIdentity := &entities.NbIdentity{InventoryName:name, GlobalNbId:&entities.GlobalNbId{PlmnId:"02f829", NbId:"4a952a0a"}}
+       nbIdentity := &entities.NbIdentity{InventoryName: name, GlobalNbId: &entities.GlobalNbId{PlmnId: "02f829", NbId: "4a952a0a"}}
        rNibErr := w.SaveNodeb(nbIdentity, &nb)
        assert.NotNil(t, rNibErr)
        assert.Equal(t, common.VALIDATION_ERROR, rNibErr.GetCode())
@@ -154,11 +243,11 @@ func TestSaveEnbInventoryNameValidationFailure(t *testing.T) {
        nb.Ip = "localhost"
        nb.Port = 5656
        enb := entities.Enb{}
-       cell := &entities.ServedCellInfo{CellId:"aaa",Pci:3}
+       cell := &entities.ServedCellInfo{CellId: "aaa", Pci: 3}
        enb.ServedCells = []*entities.ServedCellInfo{cell}
-       nb.Configuration = &entities.NodebInfo_Enb{Enb:&enb}
+       nb.Configuration = &entities.NodebInfo_Enb{Enb: &enb}
 
-       nbIdentity := &entities.NbIdentity{InventoryName:"", GlobalNbId:&entities.GlobalNbId{PlmnId:"02f829", NbId:"4a952a0a"}}
+       nbIdentity := &entities.NbIdentity{InventoryName: "", GlobalNbId: &entities.GlobalNbId{PlmnId: "02f829", NbId: "4a952a0a"}}
        rNibErr := w.SaveNodeb(nbIdentity, &nb)
        assert.NotNil(t, rNibErr)
        assert.Equal(t, common.VALIDATION_ERROR, rNibErr.GetCode())
@@ -176,7 +265,7 @@ func TestSaveEnbOnClosedPool(t *testing.T) {
        nb.Ip = "localhost"
        nb.Port = 5656
        enb := entities.Enb{}
-       nb.Configuration = &entities.NodebInfo_Enb{Enb:&enb}
+       nb.Configuration = &entities.NodebInfo_Enb{Enb: &enb}
        data, err := proto.Marshal(&nb)
        if err != nil {
                t.Errorf("#rNibWriter_test.TestSaveEnbOnClosedPool - Failed to marshal NodeB entity. Error: %v", err)
@@ -186,7 +275,7 @@ func TestSaveEnbOnClosedPool(t *testing.T) {
        sdlInstanceMock.On("Set", setExpected).Return(e)
        writerPool.Close()
        nbIdentity := &entities.NbIdentity{}
-       assert.Panics(t, func(){w.SaveNodeb(nbIdentity, &nb)})
+       assert.Panics(t, func() { w.SaveNodeb(nbIdentity, &nb) })
 }
 
 func TestSaveGnbCellIdValidationFailure(t *testing.T) {
@@ -200,12 +289,12 @@ func TestSaveGnbCellIdValidationFailure(t *testing.T) {
        nb.Ip = "localhost"
        nb.Port = 5656
        gnb := entities.Gnb{}
-       cellInfo:= &entities.ServedNRCellInformation{NrPci:2}
-       cell := &entities.ServedNRCell{ServedNrCellInformation:cellInfo}
+       cellInfo := &entities.ServedNRCellInformation{NrPci: 2}
+       cell := &entities.ServedNRCell{ServedNrCellInformation: cellInfo}
        gnb.ServedNrCells = []*entities.ServedNRCell{cell}
-       nb.Configuration = &entities.NodebInfo_Gnb{Gnb:&gnb}
+       nb.Configuration = &entities.NodebInfo_Gnb{Gnb: &gnb}
 
-       nbIdentity := &entities.NbIdentity{InventoryName:name, GlobalNbId:&entities.GlobalNbId{PlmnId:"02f829", NbId:"4a952a0a"}}
+       nbIdentity := &entities.NbIdentity{InventoryName: name, GlobalNbId: &entities.GlobalNbId{PlmnId: "02f829", NbId: "4a952a0a"}}
        rNibErr := w.SaveNodeb(nbIdentity, &nb)
        assert.NotNil(t, rNibErr)
        assert.Equal(t, common.VALIDATION_ERROR, rNibErr.GetCode())
@@ -224,18 +313,17 @@ func TestSaveGnb(t *testing.T) {
        nb.Ip = "localhost"
        nb.Port = 5656
        gnb := entities.Gnb{}
-       cellInfo:= &entities.ServedNRCellInformation{NrPci:2,CellId:"ccdd"}
-       cell := &entities.ServedNRCell{ServedNrCellInformation:cellInfo}
-       cellEntity := entities.Cell{Type:entities.Cell_NR_CELL, Cell:&entities.Cell_ServedNrCell{ServedNrCell:cell}}
+       cellInfo := &entities.ServedNRCellInformation{NrPci: 2, CellId: "ccdd"}
+       cell := &entities.ServedNRCell{ServedNrCellInformation: cellInfo}
+       cellEntity := entities.Cell{Type: entities.Cell_NR_CELL, Cell: &entities.Cell_ServedNrCell{ServedNrCell: cell}}
        gnb.ServedNrCells = []*entities.ServedNRCell{cell}
-       nb.Configuration = &entities.NodebInfo_Gnb{Gnb:&gnb}
+       nb.Configuration = &entities.NodebInfo_Gnb{Gnb: &gnb}
        data, err := proto.Marshal(&nb)
        if err != nil {
                t.Errorf("#rNibWriter_test.TestSaveGnb - Failed to marshal NodeB entity. Error: %v", err)
        }
        var e error
 
-
        cellData, err := proto.Marshal(&cellEntity)
        if err != nil {
                t.Errorf("#rNibWriter_test.TestSaveGnb - Failed to marshal Cell entity. Error: %v", err)
@@ -247,7 +335,7 @@ func TestSaveGnb(t *testing.T) {
        setExpected = append(setExpected, fmt.Sprintf("PCI:%s:%02x", name, cell.GetServedNrCellInformation().GetNrPci()), cellData)
 
        sdlInstanceMock.On("Set", []interface{}{setExpected}).Return(e)
-       nbIdentity := &entities.NbIdentity{InventoryName:name, GlobalNbId:&entities.GlobalNbId{PlmnId:"02f829", NbId:"4a952a0a"}}
+       nbIdentity := &entities.NbIdentity{InventoryName: name, GlobalNbId: &entities.GlobalNbId{PlmnId: "02f829", NbId: "4a952a0a"}}
        nbIdData, err := proto.Marshal(nbIdentity)
        if err != nil {
                t.Errorf("#rNibWriter_test.TestSaveGnb - Failed to marshal NodeB Identity entity. Error: %v", err)
@@ -276,7 +364,6 @@ func TestSaveRanLoadInformationSuccess(t *testing.T) {
        sdlInstanceMock := initSdlInstanceMock(namespace, 1)
        w := GetRNibWriter()
 
-
        ranLoadInformation := generateRanLoadInformation()
        data, err := proto.Marshal(ranLoadInformation)
 
@@ -289,7 +376,6 @@ func TestSaveRanLoadInformationSuccess(t *testing.T) {
        setExpected = append(setExpected, loadKey, data)
        sdlInstanceMock.On("Set", []interface{}{setExpected}).Return(e)
 
-
        rNibErr := w.SaveRanLoadInformation(inventoryName, ranLoadInformation)
        assert.Nil(t, rNibErr)
 }
@@ -301,7 +387,7 @@ func TestSaveRanLoadInformationMarshalNilFailure(t *testing.T) {
        w := GetRNibWriter()
 
        expectedErr := common.NewInternalError(errors.New("proto: Marshal called with nil"))
-       err:= w.SaveRanLoadInformation(inventoryName, nil)
+       err := w.SaveRanLoadInformation(inventoryName, nil)
        assert.Equal(t, expectedErr, err)
 }
 
@@ -311,7 +397,7 @@ func TestSaveRanLoadInformationEmptyInventoryNameFailure(t *testing.T) {
        initSdlInstanceMock(namespace, 1)
        w := GetRNibWriter()
 
-       err:= w.SaveRanLoadInformation(inventoryName, nil)
+       err := w.SaveRanLoadInformation(inventoryName, nil)
        assert.NotNil(t, err)
        assert.Equal(t, common.VALIDATION_ERROR, err.GetCode())
 }
@@ -325,7 +411,6 @@ func TestSaveRanLoadInformationSdlFailure(t *testing.T) {
                t.Errorf("#rNibWriter_test.TestSaveRanLoadInformationSuccess - Failed to build ran load infromation key. Error: %v", validationErr)
        }
 
-
        writerPool = nil
        sdlInstanceMock := initSdlInstanceMock(namespace, 1)
        w := GetRNibWriter()
@@ -337,13 +422,11 @@ func TestSaveRanLoadInformationSdlFailure(t *testing.T) {
                t.Errorf("#rNibWriter_test.TestSaveRanLoadInformation - Failed to marshal RanLoadInformation entity. Error: %v", err)
        }
 
-
        expectedErr := errors.New("expected error")
        var setExpected []interface{}
        setExpected = append(setExpected, loadKey, data)
        sdlInstanceMock.On("Set", []interface{}{setExpected}).Return(expectedErr)
 
-
        rNibErr := w.SaveRanLoadInformation(inventoryName, ranLoadInformation)
        assert.NotNil(t, rNibErr)
        assert.Equal(t, common.INTERNAL_ERROR, rNibErr.GetCode())
@@ -359,54 +442,54 @@ func generateCellLoadInformation() *entities.CellLoadInformation {
        cellLoadInformation.UlInterferenceOverloadIndications = []entities.UlInterferenceOverloadIndication{ulInterferenceOverloadIndication}
 
        ulHighInterferenceInformation := entities.UlHighInterferenceInformation{
-               TargetCellId:"456",
-               UlHighInterferenceIndication:"xxx",
+               TargetCellId:                 "456",
+               UlHighInterferenceIndication: "xxx",
        }
 
-       cellLoadInformation.UlHighInterferenceInfos = []*entities.UlHighInterferenceInformation{&ulHighInterferenceInformation }
+       cellLoadInformation.UlHighInterferenceInfos = []*entities.UlHighInterferenceInformation{&ulHighInterferenceInformation}
 
        cellLoadInformation.RelativeNarrowbandTxPower = &entities.RelativeNarrowbandTxPower{
-               RntpPerPrb:"xxx",
-               RntpThreshold:entities.RntpThreshold_NEG_4,
+               RntpPerPrb:                       "xxx",
+               RntpThreshold:                    entities.RntpThreshold_NEG_4,
                NumberOfCellSpecificAntennaPorts: entities.NumberOfCellSpecificAntennaPorts_V1_ANT_PRT,
-               PB: 1,
-               PdcchInterferenceImpact:2,
+               PB:                               1,
+               PdcchInterferenceImpact:          2,
                EnhancedRntp: &entities.EnhancedRntp{
-                       EnhancedRntpBitmap:"xxx",
-                       RntpHighPowerThreshold:entities.RntpThreshold_NEG_2,
-                       EnhancedRntpStartTime: &entities.StartTime{StartSfn:500,StartSubframeNumber:5},
+                       EnhancedRntpBitmap:     "xxx",
+                       RntpHighPowerThreshold: entities.RntpThreshold_NEG_2,
+                       EnhancedRntpStartTime:  &entities.StartTime{StartSfn: 500, StartSubframeNumber: 5},
                },
        }
 
        cellLoadInformation.AbsInformation = &entities.AbsInformation{
-               Mode: entities.AbsInformationMode_ABS_INFO_FDD,
-               AbsPatternInfo:"xxx",
-               NumberOfCellSpecificAntennaPorts:entities.NumberOfCellSpecificAntennaPorts_V2_ANT_PRT,
-               MeasurementSubset:"xxx",
+               Mode:                             entities.AbsInformationMode_ABS_INFO_FDD,
+               AbsPatternInfo:                   "xxx",
+               NumberOfCellSpecificAntennaPorts: entities.NumberOfCellSpecificAntennaPorts_V2_ANT_PRT,
+               MeasurementSubset:                "xxx",
        }
 
        cellLoadInformation.InvokeIndication = entities.InvokeIndication_ABS_INFORMATION
 
        cellLoadInformation.ExtendedUlInterferenceOverloadInfo = &entities.ExtendedUlInterferenceOverloadInfo{
-               AssociatedSubframes:"xxx",
-               ExtendedUlInterferenceOverloadIndications:cellLoadInformation.UlInterferenceOverloadIndications,
+               AssociatedSubframes:                       "xxx",
+               ExtendedUlInterferenceOverloadIndications: cellLoadInformation.UlInterferenceOverloadIndications,
        }
 
        compInformationItem := &entities.CompInformationItem{
-               CompHypothesisSets: []*entities.CompHypothesisSet{&entities.CompHypothesisSet{CellId: "789", CompHypothesis:"xxx"}},
-               BenefitMetric:50,
+               CompHypothesisSets: []*entities.CompHypothesisSet{&entities.CompHypothesisSet{CellId: "789", CompHypothesis: "xxx"}},
+               BenefitMetric:      50,
        }
 
        cellLoadInformation.CompInformation = &entities.CompInformation{
-               CompInformationItems:[]*entities.CompInformationItem{compInformationItem},
-               CompInformationStartTime:&entities.StartTime{StartSfn:123,StartSubframeNumber:456},
+               CompInformationItems:     []*entities.CompInformationItem{compInformationItem},
+               CompInformationStartTime: &entities.StartTime{StartSfn: 123, StartSubframeNumber: 456},
        }
 
        cellLoadInformation.DynamicDlTransmissionInformation = &entities.DynamicDlTransmissionInformation{
-               State: entities.NaicsState_NAICS_ACTIVE,
-               TransmissionModes:"xxx",
-               PB: 2,
-               PAList:[]entities.PA{entities.PA_DB_NEG_3},
+               State:             entities.NaicsState_NAICS_ACTIVE,
+               TransmissionModes: "xxx",
+               PB:                2,
+               PAList:            []entities.PA{entities.PA_DB_NEG_3},
        }
 
        return &cellLoadInformation
@@ -417,7 +500,6 @@ func generateRanLoadInformation() *entities.RanLoadInformation {
 
        ranLoadInformation.LoadTimestamp = uint64(time.Now().UnixNano())
 
-
        cellLoadInformation := generateCellLoadInformation()
        ranLoadInformation.CellLoadInfos = []*entities.CellLoadInformation{cellLoadInformation}
 
@@ -439,7 +521,7 @@ func TestSaveUnknownTypeEntityFailure(t *testing.T) {
        initSdlInstanceMock(namespace, 1)
        w := GetRNibWriter()
        expectedErr := common.NewValidationError(errors.New("#rNibWriter.saveNodeB - Unknown responding node type, entity: ip:\"localhost\" port:5656 "))
-       nbIdentity := &entities.NbIdentity{InventoryName:"name", GlobalNbId:&entities.GlobalNbId{PlmnId:"02f829", NbId:"4a952a0a"}}
+       nbIdentity := &entities.NbIdentity{InventoryName: "name", GlobalNbId: &entities.GlobalNbId{PlmnId: "02f829", NbId: "4a952a0a"}}
        nb := &entities.NodebInfo{}
        nb.Port = 5656
        nb.Ip = "localhost"
@@ -461,9 +543,9 @@ func TestSaveEntityFailure(t *testing.T) {
        if err != nil {
                t.Errorf("#rNibWriter_test.TestSaveEntityFailure - Failed to marshal NodeB entity. Error: %v", err)
        }
-       nbIdentity := &entities.NbIdentity{InventoryName:name, GlobalNbId:&entities.GlobalNbId{PlmnId:plmnId, NbId:nbId}}
+       nbIdentity := &entities.NbIdentity{InventoryName: name, GlobalNbId: &entities.GlobalNbId{PlmnId: plmnId, NbId: nbId}}
        setExpected := []interface{}{"RAN:" + name, data}
-       setExpected = append(setExpected,"GNB:" + plmnId + ":" + nbId, data)
+       setExpected = append(setExpected, "GNB:"+plmnId+":"+nbId, data)
        expectedErr := errors.New("expected error")
        sdlInstanceMock.On("Set", []interface{}{setExpected}).Return(expectedErr)
        rNibErr := w.SaveNodeb(nbIdentity, &gnb)
@@ -472,7 +554,7 @@ func TestSaveEntityFailure(t *testing.T) {
 
 func TestGetRNibWriterPoolNotInitializedFailure(t *testing.T) {
        writerPool = nil
-       assert.Panics(t, func(){GetRNibWriter()})
+       assert.Panics(t, func() { GetRNibWriter() })
 }
 
 func TestGetRNibWriter(t *testing.T) {
@@ -515,7 +597,7 @@ func TestCloseOnClosedPoolFailure(t *testing.T) {
        var e error
        instanceMock.On("Close").Return(e)
        Close()
-       assert.Panics(t, func(){Close()})
+       assert.Panics(t, func() { Close() })
 }
 
 func TestCloseFailure(t *testing.T) {
@@ -613,4 +695,4 @@ func TestInit(t *testing.T) {
 //             if err != nil{
 //                     t.Errorf("#rNibWriter_test.TestSaveRanLoadInformationInteg - Failed to save RanLoadInformation entity. Error: %v", err)
 //             }
-//}
\ No newline at end of file
+//}
index 94d9fc1..ee8b279 100644 (file)
@@ -7,3 +7,4 @@ rmr:
   maxMsgSize: 4096
 notificationResponseBuffer: 100
 bigRedButtonTimeoutSec: 5
+maxConnectionAttempts: 20
index b2a1a08..6dcc01e 100644 (file)
 package receivers
 
 import (
-       "e2mgr/managers"
+       "e2mgr/managers/notificationmanager"
        "e2mgr/services"
 )
 
 // RmrService holds an instance of RMR messenger as well as its configuration
 type RmrServiceReceiver struct {
        services.RmrService
-       nManager *managers.NotificationManager
+       nManager *notificationmanager.NotificationManager
 }
 
 // NewRmrService instantiates a new Rmr service instance
-func NewRmrServiceReceiver(rmrService services.RmrService, nManager *managers.NotificationManager) *RmrServiceReceiver {
+func NewRmrServiceReceiver(rmrService services.RmrService, nManager *notificationmanager.NotificationManager) *RmrServiceReceiver {
 
        return &RmrServiceReceiver{
                RmrService: rmrService,
index 937a7c5..45a50c9 100644 (file)
 package receivers
 
 import (
+       "e2mgr/configuration"
        "e2mgr/logger"
        "e2mgr/managers"
+       "e2mgr/managers/notificationmanager"
        "e2mgr/mocks"
        "e2mgr/models"
        "e2mgr/rNibWriter"
@@ -33,9 +35,9 @@ import (
        "time"
 )
 
-func TestListenAndHandle(t *testing.T){
+func TestListenAndHandle(t *testing.T) {
        log, err := logger.InitLogger(logger.DebugLevel)
-       if err!=nil{
+       if err != nil {
                t.Errorf("#rmr_service_test.TestListenAndHandle - failed to initialize logger, error: %s", err)
        }
        rmrMessengerMock := &mocks.RmrMessengerMock{}
@@ -44,20 +46,20 @@ func TestListenAndHandle(t *testing.T){
        e := fmt.Errorf("test error")
        rmrMessengerMock.On("RecvMsg").Return(buf, e)
 
-       go  getRmrServiceReceiver(rmrMessengerMock,log).ListenAndHandle()
+       go getRmrServiceReceiver(rmrMessengerMock, log).ListenAndHandle()
 
-       time.Sleep(time.Microsecond*10)
+       time.Sleep(time.Microsecond * 10)
 }
 
 func getRmrService(rmrMessengerMock *mocks.RmrMessengerMock, log *logger.Logger) *services.RmrService {
        rmrMessenger := rmrCgo.RmrMessenger(rmrMessengerMock)
        messageChannel := make(chan *models.NotificationResponse)
        rmrMessengerMock.On("Init", tests.GetPort(), tests.MaxMsgSize, tests.Flags, log).Return(&rmrMessenger)
-       return services.NewRmrService(services.NewRmrConfig(tests.Port, tests.MaxMsgSize, tests.Flags, log), rmrMessenger,  make(sessions.E2Sessions), messageChannel)
+       return services.NewRmrService(services.NewRmrConfig(tests.Port, tests.MaxMsgSize, tests.Flags, log), rmrMessenger, make(sessions.E2Sessions), messageChannel)
 }
 
-func getRmrServiceReceiver(rmrMessengerMock *mocks.RmrMessengerMock, log *logger.Logger) *RmrServiceReceiver {
-       readerMock :=&mocks.RnibReaderMock{}
+func getRmrServiceReceiver(rmrMessengerMock *mocks.RmrMessengerMock, logger *logger.Logger) *RmrServiceReceiver {
+       readerMock := &mocks.RnibReaderMock{}
        rnibReaderProvider := func() reader.RNibReader {
                return readerMock
        }
@@ -65,7 +67,12 @@ func getRmrServiceReceiver(rmrMessengerMock *mocks.RmrMessengerMock, log *logger
        rnibWriterProvider := func() rNibWriter.RNibWriter {
                return writerMock
        }
-       nManager := managers.NewNotificationManager(rnibReaderProvider, rnibWriterProvider)
-       rmrService := getRmrService(rmrMessengerMock,log)
+
+       rmrService := getRmrService(rmrMessengerMock, logger)
+
+       ranSetupManager := managers.NewRanSetupManager(logger, rmrService, rnibReaderProvider, rnibWriterProvider)
+       ranReconnectionManager := managers.NewRanReconnectionManager(logger, configuration.ParseConfiguration(), rnibReaderProvider, rnibWriterProvider, ranSetupManager)
+       nManager := notificationmanager.NewNotificationManager(rnibReaderProvider, rnibWriterProvider, ranReconnectionManager)
+
        return NewRmrServiceReceiver(*rmrService, nManager)
-}
\ No newline at end of file
+}