sdl := sdlgo.NewSdlInstance("e2Manager", db)
defer sdl.Close()
rnibDataService := services.NewRnibDataService(logger, config, reader.GetRNibReader(sdl), rNibWriter.GetRNibWriter(sdl, config.RnibWriter))
+
+ ranListManager := managers.NewRanListManager(logger, rnibDataService)
+
+ err = ranListManager.InitNbIdentityMap()
+
+ if err != nil {
+ logger.Errorf("#app.main - quit")
+ os.Exit(1)
+ }
+
var msgImpl *rmrCgo.Context
rmrMessenger := msgImpl.Init("tcp:"+strconv.Itoa(config.Rmr.Port), config.Rmr.MaxMsgSize, 0, logger)
rmrSender := rmrsender.NewRmrSender(logger, rmrMessenger)
e2tInstancesManager := managers.NewE2TInstancesManager(rnibDataService, logger)
routingManagerClient := clients.NewRoutingManagerClient(logger, config, clients.NewHttpClient())
- ranListManager := managers.NewRanListManager(logger)
ranAlarmService := services.NewRanAlarmService(logger, config)
ranConnectStatusChangeManager := managers.NewRanConnectStatusChangeManager(logger, rnibDataService, ranListManager, ranAlarmService)
e2tAssociationManager := managers.NewE2TAssociationManager(logger, rnibDataService, e2tInstancesManager, routingManagerClient, ranConnectStatusChangeManager)
# The Jenkins job requires a tag to build the Docker image.
# Global-JJB script assumes this file is in the repo root.
---
-tag: 5.2.12
+tag: 5.2.13
rnibDataService := services.NewRnibDataService(log, config, readerMock, nil)
e2tInstancesManager := managers.NewE2TInstancesManager(rnibDataService, log)
- ranListManager := managers.NewRanListManager(log)
+ ranListManager := managers.NewRanListManager(log, rnibDataService)
ranAlarmService := services.NewRanAlarmService(log, config)
ranConnectStatusChangeManager := managers.NewRanConnectStatusChangeManager(log, rnibDataService,ranListManager, ranAlarmService)
nodebValidator := managers.NewNodebValidator()
ConnectionStatus: entities.ConnectionStatus_DISCONNECTED,
}
- nbIdentity := entities.NbIdentity{InventoryName: addEnbRequest.RanName, GlobalNbId: addEnbRequest.GlobalNbId}
-
- writerMock.On("SaveNodeb", &nbIdentity, &nodebInfo).Return(context.saveNodebParams.err)
+ //nbIdentity := entities.NbIdentity{InventoryName: addEnbRequest.RanName, GlobalNbId: addEnbRequest.GlobalNbId}
+ writerMock.On("SaveNodeb", &nodebInfo).Return(context.saveNodebParams.err)
+ // TODO: add writerMock.On("AddNbIdentity")
}
}
module e2mgr
require (
- gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common v1.0.44
- gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.44
- gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.44
+ gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common v1.0.45
+ gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.45
+ gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.45
gerrit.o-ran-sc.org/r/ric-plt/sdlgo v0.5.2
github.com/golang/protobuf v1.4.2
github.com/gorilla/mux v1.7.0
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common v1.0.44 h1:rda7Ubx7ZW579wWNduk/MD/9Fl7fsKo08KE+2ngIkZM=
gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common v1.0.44/go.mod h1:QJ1uPPZosGbhxUWpUpeM5fLqFHdnWTrVnvW2DgyOCes=
+gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common v1.0.45 h1:2zwckksGVcIkXJeymAPvtyaO3bb+8UCyRENY8/q1yZs=
+gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common v1.0.45/go.mod h1:QJ1uPPZosGbhxUWpUpeM5fLqFHdnWTrVnvW2DgyOCes=
gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.44 h1:/Kye3C5ZAJkK1ux1mNrQEE4Jph537EV6DJ1qOCtKPqQ=
gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.44/go.mod h1:YaQ+XEI4PcAoISxp9wUpUr2TP0J7JihpQTD0G1Lpd4A=
+gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.45 h1:YuNGHpf6UsHkvi4qqxbE6ijuceRqoz5+qdWe6nUTNIU=
+gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities v1.0.45/go.mod h1:YaQ+XEI4PcAoISxp9wUpUr2TP0J7JihpQTD0G1Lpd4A=
gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.44 h1:VCOBMhSZJE3hZJLA+eJOZCrCoifCDi7ZmR3aMdV5mP8=
gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.44/go.mod h1:eRI+ExoQG8rEzexqRtW5Shn2tT/7w9l+WqaiPZqOsEA=
+gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.45 h1:p+yPMhomeiQy+qermMGzBhwh/i9T2gaL8cWOT3V5DG4=
+gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader v1.0.45/go.mod h1:3p1bZS4GA2MGVg5CHZEnMlCuO7KXpfW3Y38HTAbo6/4=
gerrit.o-ran-sc.org/r/ric-plt/sdlgo.git v0.5.2 h1:UK7awyRKIkVdokWvvkYvazlg3EWIfMnIqCcJxTnLlDA=
gerrit.o-ran-sc.org/r/ric-plt/sdlgo.git v0.5.2/go.mod h1:y2WhrCvdLkAKdH+ySdHSOSehACJkTMyZghCGVcqoZzc=
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
return nil, e2managererrors.NewRnibDbError()
}
- nbIdentity := h.createNbIdentity(addEnbRequest)
nodebInfo := h.createNodebInfo(addEnbRequest)
-
- err = h.rNibDataService.SaveNodeb(nbIdentity, nodebInfo)
+ err = h.rNibDataService.SaveNodeb(nodebInfo)
if err != nil {
h.logger.Errorf("#AddEnbRequestHandler.Handle - RAN name: %s - failed to save nodeb entity in RNIB. Error: %s", addEnbRequest.RanName, err)
return nil, e2managererrors.NewRnibDbError()
}
+ _ = h.createNbIdentity(addEnbRequest) // TODO: add call to ranListManager
+
return models.NewAddEnbResponse(nodebInfo), nil
}
}
func (h *AddEnbRequestHandler) createNbIdentity(addEnbRequest *models.AddEnbRequest) *entities.NbIdentity {
- nbIdentity := entities.NbIdentity{
- GlobalNbId: addEnbRequest.GlobalNbId,
- InventoryName: addEnbRequest.RanName,
+ return &entities.NbIdentity{
+ GlobalNbId: addEnbRequest.GlobalNbId,
+ InventoryName: addEnbRequest.RanName,
+ ConnectionStatus: entities.ConnectionStatus_DISCONNECTED,
}
-
- return &nbIdentity
}
func (h *AddEnbRequestHandler) validateRequestBody(addEnbRequest *models.AddEnbRequest) error {
httpClientMock := &mocks.HttpClientMock{}
rmClient := clients.NewRoutingManagerClient(log, config, httpClientMock)
- ranListManager := managers.NewRanListManager(log)
+ ranListManager := managers.NewRanListManager(log, rnibDataService)
ranAlarmService := services.NewRanAlarmService(log, config)
ranConnectStatusChangeManager := managers.NewRanConnectStatusChangeManager(log, rnibDataService,ranListManager, ranAlarmService)
func (h *E2SetupRequestNotificationHandler) handleNewRan(ranName string, e2tIpAddress string, setupRequest *models.E2SetupRequestMessage) (*entities.NodebInfo, error) {
- nodebInfo, err := h.buildNodebInfo(ranName, e2tIpAddress, setupRequest)
+ nodebInfo := h.buildNodebInfo(ranName, e2tIpAddress, setupRequest)
+ err := h.rNibDataService.SaveNodeb(nodebInfo)
if err != nil {
- h.logger.Errorf("#E2SetupRequestNotificationHandler.handleNewRan - RAN name: %s - failed to build nodebInfo entity. Error: %s", ranName, err)
+ h.logger.Errorf("#E2SetupRequestNotificationHandler.handleNewRan - RAN name: %s - failed saving nodebInfo. Error: %s", ranName, err)
return nil, err
}
- nbIdentity := h.buildNbIdentity(ranName, setupRequest)
- err = h.rNibDataService.SaveNodeb(nbIdentity, nodebInfo)
-
- if err != nil {
- h.logger.Errorf("#E2SetupRequestNotificationHandler.handleNewRan - RAN name: %s - failed to save nodebInfo entity. Error: %s", ranName, err)
- return nil, err
- }
+ _ = h.buildNbIdentity(ranName, setupRequest) // TODO: add call to ranListManager
return nodebInfo, nil
}
return []byte(normalized)
}
-func (h *E2SetupRequestNotificationHandler) buildNodebInfo(ranName string, e2tAddress string, request *models.E2SetupRequestMessage) (*entities.NodebInfo, error) {
-
- var err error
+func (h *E2SetupRequestNotificationHandler) buildNodebInfo(ranName string, e2tAddress string, request *models.E2SetupRequestMessage) *entities.NodebInfo {
nodebInfo := &entities.NodebInfo{
AssociatedE2TInstanceAddress: e2tAddress,
RanName: ranName,
}
h.setGnbFunctions(nodebInfo, request)
- return nodebInfo, err
+ return nodebInfo
}
func (h *E2SetupRequestNotificationHandler) buildGlobalNbId(setupRequest *models.E2SetupRequestMessage) *entities.GlobalNbId {
readerMock.On("GetNodeb", nodebRanName).Return(gnb, common.NewResourceNotFoundError("Not found"))
notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append([]byte(e2SetupMsgPrefix), xml...)}
nodebInfo := getExpectedNodebForNewRan(notificationRequest.Payload)
- nbIdentity := &entities.NbIdentity{InventoryName: nodebRanName, GlobalNbId: nodebInfo.GlobalNbId}
- writerMock.On("SaveNodeb", nbIdentity, nodebInfo).Return(common.NewInternalError(errors.New("error")))
-
+ writerMock.On("SaveNodeb", nodebInfo).Return(common.NewInternalError(errors.New("error")))
+ //nbIdentity := &entities.NbIdentity{InventoryName: nodebRanName, GlobalNbId: nodebInfo.GlobalNbId}
+ // TODO: add writerMock.On("AddNbIdentity")
handler.Handle(notificationRequest)
readerMock.AssertExpectations(t)
readerMock.On("GetNodeb", nodebRanName).Return(gnb, common.NewResourceNotFoundError("Not found"))
notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append([]byte(e2SetupMsgPrefix), xml...)}
nodebInfo := getExpectedNodebForNewRan(notificationRequest.Payload)
- nbIdentity := &entities.NbIdentity{InventoryName: nodebRanName, GlobalNbId: nodebInfo.GlobalNbId}
- writerMock.On("SaveNodeb", nbIdentity, nodebInfo).Return(nil)
+ writerMock.On("SaveNodeb", nodebInfo).Return(nil)
+ //nbIdentity := &entities.NbIdentity{InventoryName: nodebRanName, GlobalNbId: nodebInfo.GlobalNbId}
+ // TODO: add writerMock.On("AddNbIdentity")
updatedNodebInfo := *nodebInfo
updatedNodebInfo.ConnectionStatus = entities.ConnectionStatus_CONNECTED
writerMock.On("UpdateNodebInfoOnConnectionStatusInversion", &updatedNodebInfo, nodebRanName+"_CONNECTED").Return(nil)
readerMock.On("GetNodeb", mock.Anything).Return(gnb, common.NewResourceNotFoundError("Not found"))
notificationRequest := &models.NotificationRequest{RanName: nodebRanName, Payload: append([]byte(e2SetupMsgPrefix), xmlGnb...)}
nodebInfo := getExpectedNodebForNewRan(notificationRequest.Payload)
- writerMock.On("SaveNodeb", mock.Anything, nodebInfo).Return(nil)
+ writerMock.On("SaveNodeb", nodebInfo).Return(nil)
updatedNodebInfo := *nodebInfo
updatedNodebInfo.ConnectionStatus = entities.ConnectionStatus_CONNECTED
writerMock.On("UpdateNodebInfoOnConnectionStatusInversion", &updatedNodebInfo, nodebRanName+"_CONNECTED").Return(nil)
routingManagerClientMock := &mocks.RoutingManagerClientMock{}
rnibDataService := services.NewRnibDataService(logger, config, readerMock, writerMock)
e2tInstancesManagerMock := &mocks.E2TInstancesManagerMock{}
- ranListManager := managers.NewRanListManager(logger)
+ ranListManager := managers.NewRanListManager(logger, rnibDataService)
ranAlarmService := services.NewRanAlarmService(logger, config)
ranConnectStatusChangeManager := managers.NewRanConnectStatusChangeManager(logger, rnibDataService, ranListManager, ranAlarmService)
routingManagerClientMock := &mocks.RoutingManagerClientMock{}
rnibDataService := services.NewRnibDataService(logger, config, readerMock, writerMock)
e2tInstancesManagerMock := &mocks.E2TInstancesManagerMock{}
- ranListManager := managers.NewRanListManager(logger)
+ ranListManager := managers.NewRanListManager(logger, rnibDataService)
ranAlarmService := services.NewRanAlarmService(logger, config)
ranConnectStatusChangeManager := managers.NewRanConnectStatusChangeManager(logger, rnibDataService, ranListManager, ranAlarmService)
e2tAssociationManager := managers.NewE2TAssociationManager(logger, rnibDataService, e2tInstancesManagerMock, routingManagerClientMock, ranConnectStatusChangeManager)
rnibDataService := services.NewRnibDataService(logger, config, readerMock, writerMock)
e2tInstancesManager := managers.NewE2TInstancesManager(rnibDataService, logger)
- ranListManager := managers.NewRanListManager(logger)
+ ranListManager := managers.NewRanListManager(logger, rnibDataService)
ranAlarmService := services.NewRanAlarmService(logger, config)
ranConnectStatusChangeManager := managers.NewRanConnectStatusChangeManager(logger, rnibDataService,ranListManager, ranAlarmService)
e2tAssociationManager := managers.NewE2TAssociationManager(logger, rnibDataService, e2tInstancesManager, routingManagerClient, ranConnectStatusChangeManager)
e2tInstancesManager := managers.NewE2TInstancesManager(rnibDataService, logger)
httpClientMock := &mocks.HttpClientMock{}
routingManagerClient := clients.NewRoutingManagerClient(logger, config, httpClientMock)
- ranListManager := managers.NewRanListManager(logger)
+ ranListManager := managers.NewRanListManager(logger, rnibDataService)
ranAlarmService := services.NewRanAlarmService(logger, config)
ranConnectStatusChangeManager := managers.NewRanConnectStatusChangeManager(logger, rnibDataService, ranListManager, ranAlarmService)
return
}
- rnibErr = h.rnibDataService.SaveNodeb(nbIdentity, nodebInfo)
+ rnibErr = h.rnibDataService.SaveNodeb(nodebInfo)
if rnibErr != nil {
h.logger.Errorf("#SetupResponseNotificationHandler - RAN name: %s - Error saving RAN to rNib: %v", request.RanName, rnibErr)
}
testContext.readerMock.On("GetNodeb", RanName).Return(nodebInfo, rnibErr)
- testContext.writerMock.On("SaveNodeb", mock.Anything, mock.Anything).Return(tc.saveNodebMockError)
+ testContext.writerMock.On("SaveNodeb", mock.Anything).Return(tc.saveNodebMockError)
testContext.rmrMessengerMock.On("SendMsg", tc.statusChangeMbuf, true).Return(&rmrCgo.MBuf{}, tc.sendMsgError)
handler.Handle(¬ificationRequest)
}
testContext.readerMock.On("GetNodeb", RanName).Return(nodebInfo, rnibErr)
- testContext.writerMock.On("SaveNodeb", mock.Anything, mock.Anything).Return(tc.saveNodebMockError)
+ testContext.writerMock.On("SaveNodeb", mock.Anything).Return(tc.saveNodebMockError)
handler.Handle(¬ificationRequest)
return testContext, nodebInfo
testContext, nodebInfo := executeHandleSetupSuccessResponse(t, tc)
testContext.readerMock.AssertCalled(t, "GetNodeb", RanName)
- testContext.writerMock.AssertCalled(t, "SaveNodeb", mock.Anything, nodebInfo)
+ testContext.writerMock.AssertCalled(t, "SaveNodeb", nodebInfo)
assert.EqualValues(t, entities.ConnectionStatus_CONNECTED, nodebInfo.ConnectionStatus)
assert.EqualValues(t, entities.Node_ENB, nodebInfo.NodeType)
testContext, nodebInfo := executeHandleSetupFailureResponse(t, tc)
testContext.readerMock.AssertCalled(t, "GetNodeb", RanName)
- testContext.writerMock.AssertCalled(t, "SaveNodeb", mock.Anything, nodebInfo)
+ testContext.writerMock.AssertCalled(t, "SaveNodeb", nodebInfo)
assert.EqualValues(t, entities.ConnectionStatus_CONNECTED_SETUP_FAILED, nodebInfo.ConnectionStatus)
assert.EqualValues(t, entities.Failure_X2_SETUP_FAILURE, nodebInfo.FailureType)
assert.NotNil(t, nodebInfo.SetupFailure)
testContext, nodebInfo := executeHandleSetupSuccessResponse(t, tc)
testContext.readerMock.AssertCalled(t, "GetNodeb", RanName)
- testContext.writerMock.AssertCalled(t, "SaveNodeb", mock.Anything, nodebInfo)
+ testContext.writerMock.AssertCalled(t, "SaveNodeb", nodebInfo)
assert.EqualValues(t, entities.ConnectionStatus_CONNECTED, nodebInfo.ConnectionStatus)
assert.EqualValues(t, entities.Node_GNB, nodebInfo.NodeType)
assert.IsType(t, &entities.NodebInfo_Gnb{}, nodebInfo.Configuration)
testContext, nodebInfo := executeHandleSetupFailureResponse(t, tc)
testContext.readerMock.AssertCalled(t, "GetNodeb", RanName)
- testContext.writerMock.AssertCalled(t, "SaveNodeb", mock.Anything, nodebInfo)
+ testContext.writerMock.AssertCalled(t, "SaveNodeb", nodebInfo)
assert.EqualValues(t, entities.ConnectionStatus_CONNECTED_SETUP_FAILED, nodebInfo.ConnectionStatus)
assert.EqualValues(t, entities.Failure_ENDC_X2_SETUP_FAILURE, nodebInfo.FailureType)
assert.NotNil(t, nodebInfo.SetupFailure)
testContext, nodebInfo := executeHandleSetupSuccessResponse(t, tc)
testContext.readerMock.AssertCalled(t, "GetNodeb", RanName)
- testContext.writerMock.AssertCalled(t, "SaveNodeb", mock.Anything, nodebInfo)
+ testContext.writerMock.AssertCalled(t, "SaveNodeb", nodebInfo)
testContext.rmrMessengerMock.AssertNotCalled(t, "SendMsg")
}
testContext, nodebInfo := executeHandleSetupSuccessResponse(t, tc)
testContext.readerMock.AssertCalled(t, "GetNodeb", RanName)
- testContext.writerMock.AssertCalled(t, "SaveNodeb", mock.Anything, nodebInfo)
+ testContext.writerMock.AssertCalled(t, "SaveNodeb", nodebInfo)
assert.EqualValues(t, entities.ConnectionStatus_CONNECTED, nodebInfo.ConnectionStatus)
assert.EqualValues(t, entities.Node_ENB, nodebInfo.NodeType)
e2tInstancesManager := NewE2TInstancesManager(rnibDataService, log)
httpClientMock := &mocks.HttpClientMock{}
rmClient := clients.NewRoutingManagerClient(log, config, httpClientMock)
- ranListManager := NewRanListManager(log)
+ ranListManager := NewRanListManager(log, rnibDataService)
ranAlarmService := services.NewRanAlarmService(log, config)
ranConnectStatusChangeManager := NewRanConnectStatusChangeManager(log, rnibDataService, ranListManager, ranAlarmService)
e2tAssociationManager := NewE2TAssociationManager(log, rnibDataService, e2tInstancesManager, rmClient, ranConnectStatusChangeManager)
httpClientMock := &mocks.HttpClientMock{}
rmClient := clients.NewRoutingManagerClient(log, config, httpClientMock)
- ranListManager := NewRanListManager(log)
+ ranListManager := NewRanListManager(log, rnibDataService)
ranAlarmService := services.NewRanAlarmService(log, config)
ranConnectStatusChangeManager := NewRanConnectStatusChangeManager(log, rnibDataService, ranListManager, ranAlarmService)
associationManager := NewE2TAssociationManager(log, rnibDataService, e2tInstancesManager, rmClient, ranConnectStatusChangeManager)
rnibDataService := services.NewRnibDataService(logger, config, readerMock, writerMock)
e2tInstancesManager := managers.NewE2TInstancesManager(rnibDataService, logger)
routingManagerClient := clients.NewRoutingManagerClient(logger, config, httpClient)
- ranListManager := managers.NewRanListManager(logger)
+ ranListManager := managers.NewRanListManager(logger, rnibDataService)
ranAlarmService := services.NewRanAlarmService(logger, config)
ranConnectStatusChangeManager := managers.NewRanConnectStatusChangeManager(logger, rnibDataService,ranListManager, ranAlarmService)
e2tAssociationManager := managers.NewE2TAssociationManager(logger, rnibDataService, e2tInstancesManager, routingManagerClient, ranConnectStatusChangeManager)
e2tInstancesManager := NewE2TInstancesManager(rnibDataService, logger)
httpClient := &mocks.HttpClientMock{}
routingManagerClient := clients.NewRoutingManagerClient(logger, config, httpClient)
- ranListManager := NewRanListManager(logger)
+ ranListManager := NewRanListManager(logger, rnibDataService)
ranAlarmService := services.NewRanAlarmService(logger, config)
ranConnectStatusChangeManager := NewRanConnectStatusChangeManager(logger, rnibDataService,ranListManager, ranAlarmService)
e2tAssociationManager := NewE2TAssociationManager(logger, rnibDataService, e2tInstancesManager, routingManagerClient, ranConnectStatusChangeManager)
import (
"e2mgr/logger"
+ "e2mgr/services"
"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
+ "sync"
)
type ranListManagerInstance struct {
- logger *logger.Logger
+ logger *logger.Logger
+ rnibDataService services.RNibDataService
+ mux sync.Mutex
+ nbIdentityMap map[string]*entities.NbIdentity
}
type RanListManager interface {
- UpdateRanState(nodebInfo *entities.NodebInfo) error
+ InitNbIdentityMap() error
+ AddNbIdentity(nodeType entities.Node_Type, nbIdentity *entities.NbIdentity) error
+ UpdateNbIdentityConnectionStatus(nodeType entities.Node_Type, ranName string, connectionStatus entities.ConnectionStatus) error
+ RemoveNbIdentity(nodeType entities.Node_Type, ranName string) error
+ GetNbIdentityList() []*entities.NbIdentity
+ UpdateRanState(nodebInfo *entities.NodebInfo) error // TODO: replace with UpdateNbIdentityConnectionStatus
}
-func NewRanListManager(logger *logger.Logger) RanListManager {
+func NewRanListManager(logger *logger.Logger, rnibDataService services.RNibDataService) RanListManager {
return &ranListManagerInstance{
- logger: logger,
+ logger: logger,
+ rnibDataService: rnibDataService,
+ nbIdentityMap: make(map[string]*entities.NbIdentity),
}
}
+// TODO: replace with UpdateNbIdentityConnectionStatus
func (m *ranListManagerInstance) UpdateRanState(nodebInfo *entities.NodebInfo) error {
m.logger.Infof("#ranListManagerInstance.UpdateRanState - RAN name: %s - Updating state...", nodebInfo.RanName)
return nil
}
+
+func (m *ranListManagerInstance) InitNbIdentityMap() error {
+ nbIds, err := m.rnibDataService.GetListNodebIds()
+
+ if err != nil {
+ m.logger.Errorf("#ranListManagerInstance.InitRanList - Failed fetching RAN list from DB. error: %s", err)
+ return err
+ }
+
+ for _, v := range nbIds {
+ m.nbIdentityMap[v.InventoryName] = v
+ }
+
+ m.logger.Infof("#ranListManagerInstance.InitRanList - Successfully initiated nodeb identity map")
+ return nil
+}
+
+func (m *ranListManagerInstance) AddNbIdentity(nodeType entities.Node_Type, nbIdentity *entities.NbIdentity) error {
+ m.mux.Lock()
+ defer m.mux.Unlock()
+
+ m.nbIdentityMap[nbIdentity.InventoryName] = nbIdentity
+
+ err := m.rnibDataService.AddNbIdentity(nodeType, nbIdentity)
+
+ if err != nil {
+ m.logger.Errorf("#ranListManagerInstance.AddNbIdentity - RAN name: %s - Failed adding nodeb identity to DB. error: %s", nbIdentity.InventoryName, err)
+ return err
+ }
+
+ m.logger.Infof("#ranListManagerInstance.AddNbIdentity - RAN name: %s - Successfully added nodeb identity", nbIdentity.InventoryName)
+ return nil
+}
+
+func (m *ranListManagerInstance) UpdateNbIdentityConnectionStatus(nodeType entities.Node_Type, ranName string, connectionStatus entities.ConnectionStatus) error {
+ //TODO: implement
+ return nil
+}
+
+func (m *ranListManagerInstance) RemoveNbIdentity(nodeType entities.Node_Type, ranName string) error {
+ //TODO: implement
+ return nil
+}
+
+func (m *ranListManagerInstance) GetNbIdentityList() []*entities.NbIdentity {
+ nbIds := make([]*entities.NbIdentity, len(m.nbIdentityMap))
+ for _, v := range m.nbIdentityMap {
+ nbIds = append(nbIds, v)
+ }
+
+ return nbIds
+}
mock.Mock
}
+// TODO: remove after replaced with UpdateNbIdentityConnectionStatus
func (m *RanListManagerMock) UpdateRanState(nodebInfo *entities.NodebInfo) error {
args := m.Called(nodebInfo)
return args.Error(0)
-}
\ No newline at end of file
+}
+
+func (m *RanListManagerMock) InitNbIdentityMap() error {
+ args := m.Called()
+ return args.Error(0)
+}
+
+func (m *RanListManagerMock) AddNbIdentity(nodeType entities.Node_Type, nbIdentity *entities.NbIdentity) error {
+ args := m.Called(nodeType, nbIdentity)
+ return args.Error(0)
+}
+
+func (m *RanListManagerMock) UpdateNbIdentityConnectionStatus(nodeType entities.Node_Type, ranName string, connectionStatus entities.ConnectionStatus) error {
+ args := m.Called(nodeType, ranName, connectionStatus)
+ return args.Error(0)
+}
+
+func (m *RanListManagerMock) RemoveNbIdentity(nodeType entities.Node_Type, ranName string) error {
+ args := m.Called(nodeType, ranName)
+ return args.Error(0)
+}
+
+func (m *RanListManagerMock) GetNbIdentityList() []*entities.NbIdentity {
+ args := m.Called()
+ return args.Get(0).([]*entities.NbIdentity)
+}
mock.Mock
}
-func (rnibWriterMock *RnibWriterMock) SaveNodeb(nbIdentity *entities.NbIdentity, nb *entities.NodebInfo) error {
- args := rnibWriterMock.Called(nbIdentity, nb)
+func (rnibWriterMock *RnibWriterMock) SaveNodeb(nodebInfo *entities.NodebInfo) error {
+ args := rnibWriterMock.Called(nodebInfo)
errArg := args.Get(0)
args := rnibWriterMock.Called(nodebInfo, servedCells)
return args.Error(0)
-}
\ No newline at end of file
+}
+
+func (rnibWriterMock *RnibWriterMock) AddNbIdentity(nodeType entities.Node_Type, nbIdentity *entities.NbIdentity) error {
+ args := rnibWriterMock.Called(nodeType, nbIdentity)
+ return args.Error(0)
+}
+func (rnibWriterMock *RnibWriterMock) RemoveNbIdentity(nodeType entities.Node_Type, nbIdentity *entities.NbIdentity) error {
+ args := rnibWriterMock.Called(nodeType, nbIdentity)
+ return args.Error(0)
+}
e2tInstancesManager := managers.NewE2TInstancesManager(rnibDataService, log)
httpClientMock := &mocks.HttpClientMock{}
rmClient := clients.NewRoutingManagerClient(log, config, httpClientMock)
- ranListManager := managers.NewRanListManager(log)
+ ranListManager := managers.NewRanListManager(log, rnibDataService)
ranAlarmService := services.NewRanAlarmService(log, config)
ranConnectStatusChangeManager := managers.NewRanConnectStatusChangeManager(log, rnibDataService, ranListManager, ranAlarmService)
nodebValidator := managers.NewNodebValidator()
rnibDataService := services.NewRnibDataService(logger, config, readerMock, writerMock)
e2tInstancesManager := managers.NewE2TInstancesManager(rnibDataService, logger)
routingManagerClient := clients.NewRoutingManagerClient(logger, config, httpClient)
- ranListManager := managers.NewRanListManager(logger)
+ ranListManager := managers.NewRanListManager(logger, rnibDataService)
ranAlarmService := services.NewRanAlarmService(logger, config)
ranConnectStatusChangeManager := managers.NewRanConnectStatusChangeManager(logger, rnibDataService, ranListManager, ranAlarmService)
e2tAssociationManager := managers.NewE2TAssociationManager(logger, rnibDataService, e2tInstancesManager, routingManagerClient, ranConnectStatusChangeManager)
RNibWriter interface allows saving data to the redis DB
*/
type RNibWriter interface {
- SaveNodeb(nbIdentity *entities.NbIdentity, nb *entities.NodebInfo) error
+ SaveNodeb(nodebInfo *entities.NodebInfo) error
UpdateNodebInfo(nodebInfo *entities.NodebInfo) error
SaveRanLoadInformation(inventoryName string, ranLoadInformation *entities.RanLoadInformation) error
SaveE2TInstance(e2tInstance *entities.E2TInstance) error
RemoveEnb(nodebInfo *entities.NodebInfo) error
RemoveServedCells(inventoryName string, servedCells []*entities.ServedCellInfo) error
UpdateEnb(nodebInfo *entities.NodebInfo, servedCells []*entities.ServedCellInfo) error
+ AddNbIdentity(nodeType entities.Node_Type, nbIdentity *entities.NbIdentity) error
+ RemoveNbIdentity(nodeType entities.Node_Type, nbIdentity *entities.NbIdentity) error
}
/*
return &rNibWriterInstance{sdl: sdl, rnibWriterConfig: rnibWriterConfig}
}
+func (w *rNibWriterInstance) AddNbIdentity(nodeType entities.Node_Type, nbIdentity *entities.NbIdentity) error {
+ nbIdData, err := proto.Marshal(nbIdentity)
+
+ if err != nil {
+ return common.NewInternalError(err)
+ }
+
+ err = w.sdl.AddMember(nodeType.String(), nbIdData)
+
+ if err != nil {
+ return common.NewInternalError(err)
+ }
+ return nil
+}
+
func (w *rNibWriterInstance) RemoveServedNrCells(inventoryName string, servedNrCells []*entities.ServedNRCell) error {
cellKeysToRemove := buildServedNRCellKeysToRemove(inventoryName, servedNrCells)
/*
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) error {
- isNotEmptyIdentity := isNotEmpty(nbIdentity)
-
- nodeType := entity.GetNodeType()
-
- if isNotEmptyIdentity && nodeType == entities.Node_UNKNOWN {
- return common.NewValidationError(fmt.Sprintf("#rNibWriter.saveNodeB - Unknown responding node type, entity: %v", entity))
- }
+func (w *rNibWriterInstance) SaveNodeb(nodebInfo *entities.NodebInfo) error {
- data, err := proto.Marshal(entity)
+ data, err := proto.Marshal(nodebInfo)
if err != nil {
return common.NewInternalError(err)
}
var pairs []interface{}
- key, rNibErr := common.ValidateAndBuildNodeBNameKey(nbIdentity.InventoryName)
+ key, rNibErr := common.ValidateAndBuildNodeBNameKey(nodebInfo.RanName)
if rNibErr != nil {
return rNibErr
pairs = append(pairs, key, data)
- if isNotEmptyIdentity {
+ if nodebInfo.GlobalNbId != nil {
- key, rNibErr = common.ValidateAndBuildNodeBIdKey(nodeType.String(), nbIdentity.GlobalNbId.GetPlmnId(), nbIdentity.GlobalNbId.GetNbId())
+ key, rNibErr = common.ValidateAndBuildNodeBIdKey(nodebInfo.GetNodeType().String(), nodebInfo.GlobalNbId.GetPlmnId(), nodebInfo.GlobalNbId.GetNbId())
if rNibErr != nil {
return rNibErr
}
pairs = append(pairs, key, data)
}
- if entity.GetEnb() != nil {
- pairs, rNibErr = appendEnbCells(nbIdentity.InventoryName, entity.GetEnb().GetServedCells(), pairs)
+ if nodebInfo.GetEnb() != nil {
+ pairs, rNibErr = appendEnbCells(nodebInfo.RanName, nodebInfo.GetEnb().GetServedCells(), pairs)
if rNibErr != nil {
return rNibErr
}
}
- if entity.GetGnb() != nil {
- pairs, rNibErr = appendGnbCells(nbIdentity.InventoryName, entity.GetGnb().GetServedNrCells(), pairs)
+ if nodebInfo.GetGnb() != nil {
+ pairs, rNibErr = appendGnbCells(nodebInfo.RanName, nodebInfo.GetGnb().GetServedNrCells(), pairs)
if rNibErr != nil {
return rNibErr
}
}
- if nodeType == entities.Node_ENB {
- err = w.sdl.SetAndPublish([]string{w.rnibWriterConfig.RanManipulationMessageChannel, fmt.Sprintf("%s_%s", entity.RanName, RanAddedEvent)}, pairs)
+ if nodebInfo.GetNodeType() == entities.Node_ENB {
+ err = w.sdl.SetAndPublish([]string{w.rnibWriterConfig.RanManipulationMessageChannel, fmt.Sprintf("%s_%s", nodebInfo.RanName, RanAddedEvent)}, pairs)
} else {
err = w.sdl.Set(pairs)
}
return common.NewInternalError(err)
}
- ranNameIdentity := &entities.NbIdentity{InventoryName: nbIdentity.InventoryName}
-
- if isNotEmptyIdentity {
- err := w.removeNbIdentity(entities.Node_UNKNOWN, ranNameIdentity)
- if err != nil {
- return common.NewInternalError(err)
- }
- } else {
- nbIdentity = ranNameIdentity
- }
-
- nbIdData, err := proto.Marshal(nbIdentity)
-
- if err != nil {
- return common.NewInternalError(err)
- }
-
- err = w.sdl.AddMember(nodeType.String(), nbIdData)
-
- if err != nil {
- return common.NewInternalError(err)
- }
return nil
}
return keys, nil
}
-func (w *rNibWriterInstance) removeNbIdentity(nodeType entities.Node_Type ,nbIdentity *entities.NbIdentity) error {
+func (w *rNibWriterInstance) RemoveNbIdentity(nodeType entities.Node_Type, nbIdentity *entities.NbIdentity) error {
nbIdData, err := proto.Marshal(nbIdentity)
if err != nil {
return common.NewInternalError(err)
}
func (w *rNibWriterInstance) RemoveEnb(nodebInfo *entities.NodebInfo) error {
- ranNameIdentity := &entities.NbIdentity{InventoryName: nodebInfo.RanName, GlobalNbId: nodebInfo.GetGlobalNbId()}
- err := w.removeNbIdentity(entities.Node_ENB, ranNameIdentity)
- if err != nil {
- return err
- }
-
keysToRemove, err := w.buildRemoveEnbKeys(nodebInfo)
if err != nil {
return err
return nil
}
+
/*
Close the writer
*/
pairs = append(pairs, key, cellData)
}
return pairs, nil
-}
-
-func isNotEmpty(nbIdentity *entities.NbIdentity) bool {
- return nbIdentity.GlobalNbId != nil && nbIdentity.GlobalNbId.PlmnId != "" && nbIdentity.GlobalNbId.NbId != ""
}
\ No newline at end of file
ChoiceEutraMode: &entities.ChoiceEUTRAMode{
Fdd: &entities.FddInfo{},
},
- Pci: uint32(i + 1),
+ Pci: uint32(i + 1),
BroadcastPlmns: []string{"whatever"},
})
}
for i, v := range cellIds {
servedCells = append(servedCells, &entities.ServedCellInfo{
CellId: v,
- Pci: uint32(i + 1),
+ Pci: uint32(i + 1),
})
}
}
func TestSaveEnb(t *testing.T) {
- name := "name"
- ranName := "RAN:" + name
+ ranName := "RAN:" + RanName
w, sdlInstanceMock := initSdlInstanceMock(namespace)
- nb := entities.NodebInfo{}
- nb.RanName = name
- nb.NodeType = entities.Node_ENB
- nb.ConnectionStatus = 1
- nb.Ip = "localhost"
- nb.Port = 5656
+ nb := entities.NodebInfo{
+ RanName: RanName,
+ NodeType: entities.Node_ENB,
+ ConnectionStatus: entities.ConnectionStatus_CONNECTED,
+ Ip: "localhost",
+ Port: 5656,
+ GlobalNbId: &entities.GlobalNbId{
+ NbId: "4a952a0a",
+ PlmnId: "02f829",
+ },
+ }
+
enb := entities.Enb{}
cell := &entities.ServedCellInfo{CellId: "aaff", Pci: 3}
cellEntity := entities.Cell{Type: entities.Cell_LTE_CELL, Cell: &entities.Cell_ServedCellInfo{ServedCellInfo: cell}}
setExpected = append(setExpected, ranName, data)
setExpected = append(setExpected, "ENB:02f829:4a952a0a", data)
setExpected = append(setExpected, fmt.Sprintf("CELL:%s", cell.GetCellId()), cellData)
- setExpected = append(setExpected, fmt.Sprintf("PCI:%s:%02x", name, cell.GetPci()), cellData)
-
- sdlInstanceMock.On("SetAndPublish", []string{"RAN_MANIPULATION", name + "_" + RanAddedEvent}, []interface{}{setExpected}).Return(e)
-
- nbIdData, err := proto.Marshal(&entities.NbIdentity{InventoryName: name})
- if err != nil {
- t.Errorf("#rNibWriter_test.TestSaveEnb - Failed to marshal nbIdentity entity. Error: %v", err)
- }
- sdlInstanceMock.On("RemoveMember", entities.Node_UNKNOWN.String(), []interface{}{nbIdData}).Return(e)
+ setExpected = append(setExpected, fmt.Sprintf("PCI:%s:%02x", RanName, cell.GetPci()), cellData)
- 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)
- }
- sdlInstanceMock.On("AddMember", "ENB", []interface{}{nbIdData}).Return(e)
+ sdlInstanceMock.On("SetAndPublish", []string{"RAN_MANIPULATION", RanName + "_" + RanAddedEvent}, []interface{}{setExpected}).Return(e)
- rNibErr := w.SaveNodeb(nbIdentity, &nb)
+ rNibErr := w.SaveNodeb(&nb)
assert.Nil(t, rNibErr)
}
func TestSaveEnbCellIdValidationFailure(t *testing.T) {
- name := "name"
w, _ := initSdlInstanceMock(namespace)
nb := entities.NodebInfo{}
+ nb.RanName = "name"
nb.NodeType = entities.Node_ENB
nb.ConnectionStatus = 1
nb.Ip = "localhost"
cell := &entities.ServedCellInfo{Pci: 3}
enb.ServedCells = []*entities.ServedCellInfo{cell}
nb.Configuration = &entities.NodebInfo_Enb{Enb: &enb}
-
- nbIdentity := &entities.NbIdentity{InventoryName: name, GlobalNbId: &entities.GlobalNbId{PlmnId: "02f829", NbId: "4a952a0a"}}
- rNibErr := w.SaveNodeb(nbIdentity, &nb)
+ rNibErr := w.SaveNodeb(&nb)
assert.NotNil(t, rNibErr)
assert.IsType(t, &common.ValidationError{}, rNibErr)
assert.Equal(t, "#utils.ValidateAndBuildCellIdKey - an empty cell id received", rNibErr.Error())
func TestSaveEnbInventoryNameValidationFailure(t *testing.T) {
w, _ := initSdlInstanceMock(namespace)
- nb := entities.NodebInfo{}
- nb.NodeType = entities.Node_ENB
- nb.ConnectionStatus = 1
- nb.Ip = "localhost"
- nb.Port = 5656
+ nb := entities.NodebInfo{
+ NodeType: entities.Node_ENB,
+ ConnectionStatus: entities.ConnectionStatus_CONNECTED,
+ Ip: "localhost",
+ Port: 5656,
+ GlobalNbId: &entities.GlobalNbId{
+ NbId: "4a952a0a",
+ PlmnId: "02f829",
+ },
+ }
enb := entities.Enb{}
cell := &entities.ServedCellInfo{CellId: "aaa", Pci: 3}
enb.ServedCells = []*entities.ServedCellInfo{cell}
nb.Configuration = &entities.NodebInfo_Enb{Enb: &enb}
-
- nbIdentity := &entities.NbIdentity{InventoryName: "", GlobalNbId: &entities.GlobalNbId{PlmnId: "02f829", NbId: "4a952a0a"}}
- rNibErr := w.SaveNodeb(nbIdentity, &nb)
+ rNibErr := w.SaveNodeb(&nb)
assert.NotNil(t, rNibErr)
assert.IsType(t, &common.ValidationError{}, rNibErr)
assert.Equal(t, "#utils.ValidateAndBuildNodeBNameKey - an empty inventory name received", rNibErr.Error())
}
func TestSaveGnbCellIdValidationFailure(t *testing.T) {
- name := "name"
w, _ := initSdlInstanceMock(namespace)
nb := entities.NodebInfo{}
+ nb.RanName = "name"
nb.NodeType = entities.Node_GNB
nb.ConnectionStatus = 1
nb.Ip = "localhost"
gnb.ServedNrCells = []*entities.ServedNRCell{cell}
nb.Configuration = &entities.NodebInfo_Gnb{Gnb: &gnb}
- nbIdentity := &entities.NbIdentity{InventoryName: name, GlobalNbId: &entities.GlobalNbId{PlmnId: "02f829", NbId: "4a952a0a"}}
- rNibErr := w.SaveNodeb(nbIdentity, &nb)
+ rNibErr := w.SaveNodeb(&nb)
assert.NotNil(t, rNibErr)
assert.IsType(t, &common.ValidationError{}, rNibErr)
assert.Equal(t, "#utils.ValidateAndBuildNrCellIdKey - an empty cell id received", rNibErr.Error())
}
func TestSaveGnb(t *testing.T) {
- name := "name"
- ranName := "RAN:" + name
+ ranName := "RAN:" + RanName
w, sdlInstanceMock := initSdlInstanceMock(namespace)
- nb := entities.NodebInfo{}
- nb.NodeType = entities.Node_GNB
- nb.ConnectionStatus = 1
- nb.Ip = "localhost"
- nb.Port = 5656
+ nb := entities.NodebInfo{
+ RanName: RanName,
+ NodeType: entities.Node_GNB,
+ ConnectionStatus: 1,
+ GlobalNbId: &entities.GlobalNbId{
+ NbId: "4a952a0a",
+ PlmnId: "02f829",
+ },
+ Ip: "localhost",
+ Port: 5656,
+ }
+
gnb := entities.Gnb{}
cellInfo := &entities.ServedNRCellInformation{NrPci: 2, CellId: "ccdd"}
cell := &entities.ServedNRCell{ServedNrCellInformation: cellInfo}
setExpected = append(setExpected, ranName, data)
setExpected = append(setExpected, "GNB:02f829:4a952a0a", data)
setExpected = append(setExpected, fmt.Sprintf("NRCELL:%s", cell.GetServedNrCellInformation().GetCellId()), cellData)
- setExpected = append(setExpected, fmt.Sprintf("PCI:%s:%02x", name, cell.GetServedNrCellInformation().GetNrPci()), cellData)
+ setExpected = append(setExpected, fmt.Sprintf("PCI:%s:%02x", RanName, cell.GetServedNrCellInformation().GetNrPci()), cellData)
sdlInstanceMock.On("Set", []interface{}{setExpected}).Return(e)
- 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)
- }
- sdlInstanceMock.On("AddMember", "GNB", []interface{}{nbIdData}).Return(e)
-
- nbIdData, err = proto.Marshal(&entities.NbIdentity{InventoryName: name})
- if err != nil {
- t.Errorf("#rNibWriter_test.TestSaveEnb - Failed to marshal nbIdentity entity. Error: %v", err)
- }
- sdlInstanceMock.On("RemoveMember", entities.Node_UNKNOWN.String(), []interface{}{nbIdData}).Return(e)
-
- rNibErr := w.SaveNodeb(nbIdentity, &nb)
+ rNibErr := w.SaveNodeb(&nb)
assert.Nil(t, rNibErr)
}
func TestSaveNilEntityFailure(t *testing.T) {
w, _ := initSdlInstanceMock(namespace)
expectedErr := common.NewInternalError(errors.New("proto: Marshal called with nil"))
- nbIdentity := &entities.NbIdentity{}
- actualErr := w.SaveNodeb(nbIdentity, nil)
+ actualErr := w.SaveNodeb(nil)
assert.Equal(t, expectedErr, actualErr)
}
func TestSaveUnknownTypeEntityFailure(t *testing.T) {
w, _ := initSdlInstanceMock(namespace)
- nbIdentity := &entities.NbIdentity{InventoryName: "name", GlobalNbId: &entities.GlobalNbId{PlmnId: "02f829", NbId: "4a952a0a"}}
nb := &entities.NodebInfo{}
nb.Port = 5656
nb.Ip = "localhost"
- actualErr := w.SaveNodeb(nbIdentity, nb)
+ actualErr := w.SaveNodeb(nb)
assert.IsType(t, &common.ValidationError{}, actualErr)
}
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}}
setExpected := []interface{}{"RAN:" + name, 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)
+ rNibErr := w.SaveNodeb(&gnb)
assert.NotEmpty(t, rNibErr)
}
var e error
- nbIdentity := &entities.NbIdentity{InventoryName: nodebInfo.RanName, GlobalNbId: nodebInfo.GetGlobalNbId()}
- nbIdData, err := proto.Marshal(nbIdentity)
- if err != nil {
- t.Errorf("#rNibWriter_test.TestRemoveEnbSuccess - Failed to marshal NbIdentity entity. Error: %v", err)
- }
- sdlInstanceMock.On("RemoveMember", entities.Node_ENB.String(), []interface{}{nbIdData}).Return(e)
-
expectedKeys := []string{}
cell1Key := fmt.Sprintf("CELL:%s", nodebInfo.GetEnb().ServedCells[0].CellId)
cell1PciKey := fmt.Sprintf("PCI:%s:%02x", inventoryName, nodebInfo.GetEnb().ServedCells[0].Pci)
sdlInstanceMock.AssertExpectations(t)
}
-func TestRemoveEnbRemoveNbIdentityError(t *testing.T) {
- inventoryName := "name"
- plmnId := "02f829"
- nbId := "4a952a0a"
- w, sdlInstanceMock := initSdlInstanceMock(namespace)
- nodebInfo := generateNodebInfo(inventoryName, entities.Node_ENB, plmnId, nbId)
- nodebInfo.GetEnb().ServedCells = generateServedCellInfos("cell1", "cell2")
-
- nbIdentity := &entities.NbIdentity{InventoryName: nodebInfo.RanName, GlobalNbId: nodebInfo.GetGlobalNbId()}
- nbIdData, err := proto.Marshal(nbIdentity)
- if err != nil {
- t.Errorf("#rNibWriter_test.TestRemoveEnbSuccess - Failed to marshal NbIdentity entity. Error: %v", err)
- }
- sdlInstanceMock.On("RemoveMember", entities.Node_ENB.String(), []interface{}{nbIdData}).Return(errors.New("for test"))
-
- rNibErr := w.RemoveEnb(nodebInfo)
- assert.NotNil(t, rNibErr)
- sdlInstanceMock.AssertExpectations(t)
-}
-
func TestRemoveEnbRemoveAndPublishError(t *testing.T) {
inventoryName := "name"
plmnId := "02f829"
nodebInfo := generateNodebInfo(inventoryName, entities.Node_ENB, plmnId, nbId)
nodebInfo.GetEnb().ServedCells = generateServedCellInfos("cell1", "cell2")
- var e error
-
- nbIdentity := &entities.NbIdentity{InventoryName: nodebInfo.RanName, GlobalNbId: nodebInfo.GetGlobalNbId()}
- nbIdData, err := proto.Marshal(nbIdentity)
- if err != nil {
- t.Errorf("#rNibWriter_test.TestRemoveEnbSuccess - Failed to marshal NbIdentity entity. Error: %v", err)
- }
- sdlInstanceMock.On("RemoveMember", entities.Node_ENB.String(), []interface{}{nbIdData}).Return(e)
-
expectedKeys := []string{}
cell1Key := fmt.Sprintf("CELL:%s", nodebInfo.GetEnb().ServedCells[0].CellId)
cell1PciKey := fmt.Sprintf("PCI:%s:%02x", inventoryName, nodebInfo.GetEnb().ServedCells[0].Pci)
rmrSender := rmrsender.NewRmrSender(logger, rmrMessenger)
e2tInstancesManager := managers.NewE2TInstancesManager(rnibDataService, logger)
routingManagerClient := clients.NewRoutingManagerClient(logger, config, httpClient)
- ranListManager := managers.NewRanListManager(logger)
+ ranListManager := managers.NewRanListManager(logger, rnibDataService)
ranAlarmService := services.NewRanAlarmService(logger, config)
ranConnectStatusChangeManager := managers.NewRanConnectStatusChangeManager(logger, rnibDataService, ranListManager, ranAlarmService)
e2tAssociationManager := managers.NewE2TAssociationManager(logger, rnibDataService, e2tInstancesManager, routingManagerClient, ranConnectStatusChangeManager)
)
type RNibDataService interface {
- SaveNodeb(nbIdentity *entities.NbIdentity, nb *entities.NodebInfo) error
+ SaveNodeb(nodebInfo *entities.NodebInfo) error
UpdateNodebInfo(nodebInfo *entities.NodebInfo) error
SaveRanLoadInformation(inventoryName string, ranLoadInformation *entities.RanLoadInformation) error
GetNodeb(ranName string) (*entities.NodebInfo, error)
RemoveEnb(nodebInfo *entities.NodebInfo) error
RemoveServedCells(inventoryName string, servedCells []*entities.ServedCellInfo) error
UpdateEnb(nodebInfo *entities.NodebInfo, servedCells []*entities.ServedCellInfo) error
+ AddNbIdentity(nodeType entities.Node_Type, nbIdentity *entities.NbIdentity) error
}
type rNibDataService struct {
- logger *logger.Logger
- rnibReader reader.RNibReader
- rnibWriter rNibWriter.RNibWriter
- maxAttempts int
- retryInterval time.Duration
+ logger *logger.Logger
+ rnibReader reader.RNibReader
+ rnibWriter rNibWriter.RNibWriter
+ maxAttempts int
+ retryInterval time.Duration
}
func NewRnibDataService(logger *logger.Logger, config *configuration.Configuration, rnibReader reader.RNibReader, rnibWriter rNibWriter.RNibWriter) *rNibDataService {
return &rNibDataService{
- logger: logger,
- rnibReader: rnibReader,
- rnibWriter: rnibWriter,
- maxAttempts: config.MaxRnibConnectionAttempts,
- retryInterval: time.Duration(config.RnibRetryIntervalMs) * time.Millisecond,
+ logger: logger,
+ rnibReader: rnibReader,
+ rnibWriter: rnibWriter,
+ maxAttempts: config.MaxRnibConnectionAttempts,
+ retryInterval: time.Duration(config.RnibRetryIntervalMs) * time.Millisecond,
}
}
+func (w *rNibDataService) AddNbIdentity(nodeType entities.Node_Type, nbIdentity *entities.NbIdentity) error {
+ w.logger.Infof("#RnibDataService.AddNbIdentity - nbIdentity: %s", nbIdentity)
+
+ err := w.retry("AddNbIdentity", func() (err error) {
+ err = w.rnibWriter.AddNbIdentity(nodeType, nbIdentity)
+ return
+ })
+
+ return err
+}
+
func (w *rNibDataService) RemoveServedNrCells(inventoryName string, servedNrCells []*entities.ServedNRCell) error {
err := w.retry("RemoveServedNrCells", func() (err error) {
err = w.rnibWriter.RemoveServedNrCells(inventoryName, servedNrCells)
return err
}
-func (w *rNibDataService) SaveNodeb(nbIdentity *entities.NbIdentity, nb *entities.NodebInfo) error {
- w.logger.Infof("#RnibDataService.SaveNodeb - nbIdentity: %s, nodebInfo: %s", nbIdentity, nb)
+func (w *rNibDataService) SaveNodeb(nodebInfo *entities.NodebInfo) error {
+ w.logger.Infof("#RnibDataService.SaveNodeb - nodebInfo: %s", nodebInfo)
err := w.retry("SaveNodeb", func() (err error) {
- err = w.rnibWriter.SaveNodeb(nbIdentity, nb)
+ err = w.rnibWriter.SaveNodeb(nodebInfo)
return
})
// This source code is part of the near-RT RIC (RAN Intelligent Controller)
// platform project (RICP).
-
package services
import (
readerMock := &mocks.RnibReaderMock{}
-
writerMock := &mocks.RnibWriterMock{}
-
rnibDataService := NewRnibDataService(logger, config, readerMock, writerMock)
assert.NotNil(t, rnibDataService)
rnibDataService, _, writerMock := setupRnibDataServiceTest(t)
nodebInfo := &entities.NodebInfo{}
- nbIdentity := &entities.NbIdentity{}
- writerMock.On("SaveNodeb", nbIdentity, nodebInfo).Return(nil)
+ writerMock.On("SaveNodeb", nodebInfo).Return(nil)
- rnibDataService.SaveNodeb(nbIdentity, nodebInfo)
+ rnibDataService.SaveNodeb(nodebInfo)
writerMock.AssertNumberOfCalls(t, "SaveNodeb", 1)
}
rnibDataService, _, writerMock := setupRnibDataServiceTest(t)
nodebInfo := &entities.NodebInfo{}
- nbIdentity := &entities.NbIdentity{}
mockErr := &common.InternalError{Err: &net.OpError{Err: fmt.Errorf("connection error")}}
- writerMock.On("SaveNodeb", nbIdentity, nodebInfo).Return(mockErr)
+ writerMock.On("SaveNodeb", nodebInfo).Return(mockErr)
- rnibDataService.SaveNodeb(nbIdentity, nodebInfo)
+ rnibDataService.SaveNodeb(nodebInfo)
writerMock.AssertNumberOfCalls(t, "SaveNodeb", 3)
}
rnibDataService, _, writerMock := setupRnibDataServiceTest(t)
nodebInfo := &entities.NodebInfo{}
- nbIdentity := &entities.NbIdentity{}
mockErr := &common.InternalError{Err: fmt.Errorf("non connection failure")}
- writerMock.On("SaveNodeb", nbIdentity, nodebInfo).Return(mockErr)
+ writerMock.On("SaveNodeb", nodebInfo).Return(mockErr)
- rnibDataService.SaveNodeb(nbIdentity, nodebInfo)
+ rnibDataService.SaveNodeb(nodebInfo)
writerMock.AssertNumberOfCalls(t, "SaveNodeb", 1)
}
res, err := rnibDataService.GetNodeb(invName)
readerMock.AssertNumberOfCalls(t, "GetNodeb", 3)
- assert.True(t, strings.Contains(err.Error(), "connection error", ))
+ assert.True(t, strings.Contains(err.Error(), "connection error"))
assert.Equal(t, nodeb, res)
}
res, err := rnibDataService.GetListNodebIds()
readerMock.AssertNumberOfCalls(t, "GetListNodebIds", 3)
- assert.True(t, strings.Contains(err.Error(), "connection error", ))
+ assert.True(t, strings.Contains(err.Error(), "connection error"))
assert.Equal(t, nodeIds, res)
}
res, err := rnibDataService.GetListNodebIds()
readerMock.AssertNumberOfCalls(t, "GetListNodebIds", 3)
- assert.True(t, strings.Contains(err.Error(), "connection error", ))
+ assert.True(t, strings.Contains(err.Error(), "connection error"))
assert.Equal(t, nodeIds, res)
res2, err := rnibDataService.GetNodeb(invName)
readerMock.AssertNumberOfCalls(t, "GetNodeb", 3)
- assert.True(t, strings.Contains(err.Error(), "connection error", ))
+ assert.True(t, strings.Contains(err.Error(), "connection error"))
assert.Equal(t, nodeb, res2)
}
res, err := rnibDataService.GetListNodebIds()
readerMock.AssertNumberOfCalls(t, "GetListNodebIds", 5)
- assert.True(t, strings.Contains(err.Error(), "connection error", ))
+ assert.True(t, strings.Contains(err.Error(), "connection error"))
assert.Equal(t, nodeIds, res)
}
writerMock.AssertNumberOfCalls(t, "UpdateNodebInfoOnConnectionStatusInversion", 3)
}
-//func TestConnFailureThenSuccessGetNodebIdList(t *testing.T) {
-// rnibDataService, readerMock, _ := setupRnibDataServiceTest(t)
-//
-// var nilNodeIds []*entities.NbIdentity = nil
-// nodeIds := []*entities.NbIdentity{}
-// mockErr := &common.InternalError{Err: &net.OpError{Err:fmt.Errorf("connection error")}}
-// //readerMock.On("GetListNodebIds").Return(nilNodeIds, mockErr)
-// //readerMock.On("GetListNodebIds").Return(nodeIds, nil)
-//
-// res, err := rnibDataService.GetListNodebIds()
-// readerMock.AssertNumberOfCalls(t, "GetListNodebIds", 2)
-// assert.True(t, strings.Contains(err.Error(),"connection failure", ))
-// assert.Equal(t, nodeIds, res)
-//}
-
func TestGetE2TInstanceConnFailure(t *testing.T) {
rnibDataService, readerMock, _ := setupRnibDataServiceTest(t)
err := rnibDataService.RemoveEnb(nodebInfo)
writerMock.AssertNumberOfCalls(t, "RemoveEnb", 1)
assert.NotNil(t, err)
-}
\ No newline at end of file
+}