Merge "Improve unit test coverage"
[ric-plt/e2mgr.git] / E2Manager / rNibWriter / rNibWriter.go
index 3069258..bbf485b 100644 (file)
@@ -46,6 +46,7 @@ RNibWriter interface allows saving data to the redis DB
 type RNibWriter interface {
        SaveNodeb(nodebInfo *entities.NodebInfo) error
        UpdateNodebInfo(nodebInfo *entities.NodebInfo) error
+       UpdateNodebInfoAndPublish(nodebInfo *entities.NodebInfo) error
        SaveRanLoadInformation(inventoryName string, ranLoadInformation *entities.RanLoadInformation) error
        SaveE2TInstance(e2tInstance *entities.E2TInstance) error
        SaveE2TAddresses(addresses []string) error
@@ -59,8 +60,9 @@ type RNibWriter interface {
        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
+       AddEnb(nodebInfo *entities.NodebInfo) error
+       UpdateNbIdentities(nodeType entities.Node_Type, oldNbIdentities []*entities.NbIdentity, newNbIdentities []*entities.NbIdentity) error
 }
-
 /*
 GetRNibWriter returns reference to RNibWriter
 */
@@ -166,13 +168,48 @@ func (w *rNibWriterInstance) SaveNodeb(nodebInfo *entities.NodebInfo) error {
                }
        }
 
-       if nodebInfo.GetNodeType() == entities.Node_ENB {
-               channelsAndEvents := getChannelsAndEventsPair(w.rnibWriterConfig.RanManipulationMessageChannel, nodebInfo.RanName, RanAddedEvent)
-               err = w.sdl.SetAndPublish(channelsAndEvents, pairs)
-       } else {
-               err = w.sdl.Set(pairs)
+       err = w.sdl.Set(pairs)
+
+       if err != nil {
+               return common.NewInternalError(err)
+       }
+
+       return nil
+}
+
+func (w *rNibWriterInstance) AddEnb(nodebInfo *entities.NodebInfo) error {
+
+       data, err := proto.Marshal(nodebInfo)
+
+       if err != nil {
+               return common.NewInternalError(err)
+       }
+
+       var pairs []interface{}
+       key, rNibErr := common.ValidateAndBuildNodeBNameKey(nodebInfo.RanName)
+
+       if rNibErr != nil {
+               return rNibErr
+       }
+
+       pairs = append(pairs, key, data)
+
+       if nodebInfo.GlobalNbId != nil {
+
+               key, rNibErr = common.ValidateAndBuildNodeBIdKey(nodebInfo.GetNodeType().String(), nodebInfo.GlobalNbId.GetPlmnId(), nodebInfo.GlobalNbId.GetNbId())
+               if rNibErr != nil {
+                       return rNibErr
+               }
+               pairs = append(pairs, key, data)
        }
 
+       pairs, rNibErr = appendEnbCells(nodebInfo.RanName, nodebInfo.GetEnb().GetServedCells(), pairs)
+       if rNibErr != nil {
+               return rNibErr
+       }
+
+       channelsAndEvents := getChannelsAndEventsPair(w.rnibWriterConfig.RanManipulationMessageChannel, nodebInfo.RanName, RanAddedEvent)
+       err = w.sdl.SetAndPublish(channelsAndEvents, pairs)
        if err != nil {
                return common.NewInternalError(err)
        }
@@ -180,6 +217,31 @@ func (w *rNibWriterInstance) SaveNodeb(nodebInfo *entities.NodebInfo) error {
        return nil
 }
 
+func (w *rNibWriterInstance) UpdateNbIdentities(nodeType entities.Node_Type, oldNbIdentities []*entities.NbIdentity, newNbIdentities []*entities.NbIdentity) error {
+
+       nbIdIdentitiesToRemove, err := w.buildNbIdentitiesMembers(oldNbIdentities)
+       if err != nil {
+               return err
+       }
+
+       err = w.sdl.RemoveMember(nodeType.String(), nbIdIdentitiesToRemove[:]...)
+       if err != nil {
+               return err
+       }
+
+       nbIdIdentitiesToAdd, err := w.buildNbIdentitiesMembers(newNbIdentities)
+       if err != nil {
+               return err
+       }
+
+       err = w.sdl.AddMember(nodeType.String(), nbIdIdentitiesToAdd[:]...)
+       if err != nil {
+               return err
+       }
+
+       return nil
+}
+
 func (w *rNibWriterInstance) UpdateGnbCells(nodebInfo *entities.NodebInfo, servedNrCells []*entities.ServedNRCell) error {
 
        pairs, err := buildUpdateNodebInfoPairs(nodebInfo)
@@ -304,10 +366,7 @@ func (w *rNibWriterInstance) RemoveNbIdentity(nodeType entities.Node_Type, nbIde
        return nil
 }
 
-/*
-UpdateNodebInfo...
-*/
-func (w *rNibWriterInstance) UpdateNodebInfo(nodebInfo *entities.NodebInfo) error {
+func (w *rNibWriterInstance) updateNodebInfo(nodebInfo *entities.NodebInfo, publish bool) error {
 
        pairs, err := buildUpdateNodebInfoPairs(nodebInfo)
 
@@ -315,7 +374,12 @@ func (w *rNibWriterInstance) UpdateNodebInfo(nodebInfo *entities.NodebInfo) erro
                return err
        }
 
-       err = w.sdl.Set(pairs)
+       if publish {
+               channelsAndEvents := getChannelsAndEventsPair(w.rnibWriterConfig.RanManipulationMessageChannel, nodebInfo.RanName, RanUpdatedEvent)
+               err = w.sdl.SetAndPublish(channelsAndEvents, pairs)
+       } else {
+               err = w.sdl.Set(pairs)
+       }
 
        if err != nil {
                return common.NewInternalError(err)
@@ -324,6 +388,21 @@ func (w *rNibWriterInstance) UpdateNodebInfo(nodebInfo *entities.NodebInfo) erro
        return nil
 }
 
+/*
+UpdateNodebInfo...
+*/
+func (w *rNibWriterInstance) UpdateNodebInfo(nodebInfo *entities.NodebInfo) error {
+       return w.updateNodebInfo(nodebInfo, false)
+}
+
+/*
+UpdateNodebInfoAndPublish...
+*/
+func (w *rNibWriterInstance) UpdateNodebInfoAndPublish(nodebInfo *entities.NodebInfo) error {
+       return w.updateNodebInfo(nodebInfo, true)
+}
+
+
 /*
 SaveRanLoadInformation stores ran load information for the provided ran
 */
@@ -492,6 +571,20 @@ func (w *rNibWriterInstance) UpdateEnb(nodebInfo *entities.NodebInfo, servedCell
        return nil
 }
 
+func (w *rNibWriterInstance) buildNbIdentitiesMembers(nbIdentities []*entities.NbIdentity) ([]interface{}, error) {
+
+       var nbIdIdentitiesMembers []interface{}
+       for _, nbIdentity := range nbIdentities {
+
+               nbIdData, err := proto.Marshal(nbIdentity)
+               if err != nil {
+                       return nil, common.NewInternalError(err)
+               }
+               nbIdIdentitiesMembers = append(nbIdIdentitiesMembers, nbIdData)
+       }
+
+       return nbIdIdentitiesMembers, nil
+}
 /*
 Close the writer
 */