Merge "Changing status to connected state after timeout."
[ric-plt/e2mgr.git] / E2Manager / managers / update_enb_manager.go
index 6c9ae14..0e8ed7e 100644 (file)
@@ -25,6 +25,7 @@ import (
        "e2mgr/models"
        "e2mgr/services"
        "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
+       "github.com/pkg/errors"
 )
 
 type UpdateEnbManager struct {
@@ -41,21 +42,34 @@ func NewUpdateEnbManager(logger *logger.Logger, rnibDataService services.RNibDat
        }
 }
 
-func (h *UpdateEnbManager) Validate(request *models.UpdateNodebRequest) error {
+func (h *UpdateEnbManager) Validate(request models.Request) error {
 
-       h.logger.Infof("#UpdateEnbManager.Validate - Validate incoming request, ran name: %s", request.RanName)
+       updateEnbRequest := request.(*models.UpdateEnbRequest)
 
-       if err := h.nodebValidator.IsEnbValid(request.Enb); err != nil {
-               //TODO add log
+       h.logger.Infof("#UpdateEnbManager.Validate - Validate incoming request, ran name: %s", updateEnbRequest.RanName)
+
+       if err := h.validateRequestBody(updateEnbRequest); err != nil {
+               h.logger.Errorf("#UpdateEnbManager.Validate - validation failure: %s is a mandatory field and cannot be empty", err)
                return err
        }
-
        return nil
 }
 
 func (h *UpdateEnbManager) RemoveNodebCells(nodeb *entities.NodebInfo) error {
 
-       err := h.rnibDataService.RemoveServedCells(nodeb.GetRanName(), nodeb.GetEnb().GetServedCells())
+       if nodeb.NodeType != entities.Node_ENB {
+               h.logger.Errorf("#UpdateEnbManager.RemoveNodebCells - RAN name: %s - RAN is not eNB.", nodeb.RanName)
+               return e2managererrors.NewRequestValidationError()
+       }
+
+       servedCells := nodeb.GetEnb().GetServedCells()
+
+       if len(servedCells) == 0 {
+               h.logger.Infof("#UpdateGnbManager.RemoveNodebCells - RAN name: %s - eNB cells are nil or empty - no cells to remove", nodeb.GetRanName())
+               return nil
+       }
+
+       err := h.rnibDataService.RemoveServedCells(nodeb.GetRanName(), servedCells)
        if err != nil {
                h.logger.Errorf("#UpdateEnbManager.RemoveNodebCells - RAN name: %s - Failed removing eNB served cells", nodeb.GetRanName())
                return e2managererrors.NewRnibDbError()
@@ -65,17 +79,14 @@ func (h *UpdateEnbManager) RemoveNodebCells(nodeb *entities.NodebInfo) error {
        return nil
 }
 
-func (h *UpdateEnbManager) SetNodeb(nodeb *entities.NodebInfo, request *models.UpdateNodebRequest) error {
+func (h *UpdateEnbManager) SetNodeb(nodeb *entities.NodebInfo, request models.Request) {
+       updateEnbRequest := request.(*models.UpdateEnbRequest)
 
-       ranName := nodeb.GetRanName()
-
-       if nodeb.NodeType != entities.Node_ENB {
-               h.logger.Errorf("#UpdateEnbManager.SetNodeb - RAN name: %s - nodeb missing eNB configuration", ranName)
-               return e2managererrors.NewRequestValidationError()
+       if nodeb.SetupFromNetwork {
+               updateEnbRequest.Enb.EnbType = nodeb.GetEnb().GetEnbType()
        }
-       nodeb.Configuration = &entities.NodebInfo_Enb{Enb: request.Enb}
 
-       return nil
+       nodeb.Configuration = &entities.NodebInfo_Enb{Enb: updateEnbRequest.Enb}
 }
 
 func (h *UpdateEnbManager) UpdateNodeb(nodeb *entities.NodebInfo) error {
@@ -89,3 +100,28 @@ func (h *UpdateEnbManager) UpdateNodeb(nodeb *entities.NodebInfo) error {
 
        return nil
 }
+
+func (h *UpdateEnbManager) validateRequestBody(request *models.UpdateEnbRequest) error {
+
+       if request.Enb == nil {
+               return errors.New("enb")
+       }
+
+       if err := h.nodebValidator.IsEnbValid(request.Enb); err != nil {
+               return err
+       }
+
+       return nil
+}
+
+func (h *UpdateEnbManager) ValidateNodeb(nodeb *entities.NodebInfo) error{
+
+       enbType := nodeb.GetEnb().GetEnbType()
+
+       if h.nodebValidator.IsNgEnbType(enbType) {
+               h.logger.Errorf("#UpdateEnbManager.ValidateNodeb - validation failure: current enb type is not supported. enb type: %s", enbType)
+               return errors.New("")
+       }
+       return nil
+}
+