Delete Policy Type Api 96/9296/4
authornaman.gupta <naman.gupta@samsung.com>
Mon, 17 Oct 2022 18:55:14 +0000 (00:25 +0530)
committernaman.gupta <naman.gupta@samsung.com>
Fri, 21 Oct 2022 09:55:48 +0000 (15:25 +0530)
Delete policy type APi implementation.

Signed-off-by: naman.gupta <naman.gupta@samsung.com>
Change-Id: I321ff0e5470b26a39a019cf6ca91d9dc1b5f9ad2

a1-go/pkg/restful/restful.go
a1-go/pkg/resthooks/resthooks.go
a1-go/pkg/resthooks/resthooks_test.go
a1-go/pkg/resthooks/types.go

index ec63201..91b9659 100644 (file)
@@ -109,6 +109,19 @@ func (r *Restful) setupHandler() *operations.A1API {
 
        })
 
+       api.A1MediatorA1ControllerDeletePolicyTypeHandler = a1_mediator.A1ControllerDeletePolicyTypeHandlerFunc(func(params a1_mediator.A1ControllerDeletePolicyTypeParams) middleware.Responder {
+               a1.Logger.Debug("handler for delete policy type")
+               if err := r.rh.DeletePolicyType(models.PolicyTypeID(params.PolicyTypeID)); err != nil {
+                       if r.rh.CanPolicyTypeBeDeleted(err) {
+                               return a1_mediator.NewA1ControllerDeletePolicyTypeBadRequest()
+                       }
+                       return a1_mediator.NewA1ControllerDeletePolicyTypeServiceUnavailable()
+               }
+
+               return a1_mediator.NewA1ControllerDeletePolicyTypeNoContent()
+
+       })
+
        return api
 
 }
index 79dba93..8d30b3d 100644 (file)
@@ -30,8 +30,8 @@ import (
 
        "gerrit.o-ran-sc.org/r/ric-plt/a1/pkg/a1"
        "gerrit.o-ran-sc.org/r/ric-plt/a1/pkg/models"
+       "gerrit.o-ran-sc.org/r/ric-plt/a1/pkg/rmr"
        "gerrit.o-ran-sc.org/r/ric-plt/sdlgo"
-       "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp"
        "github.com/santhosh-tekuri/jsonschema/v5"
        "gopkg.in/yaml.v2"
 )
@@ -50,6 +50,11 @@ var typeMismatchError = errors.New("Policytype Mismatch")
 var invalidJsonSchema = errors.New("Invalid Json ")
 var policyInstanceNotFoundError = errors.New("Policy Instance Not Found")
 var policyTypeNotFoundError = errors.New("Policy Type Not Found")
+var policyTypeCanNotBeDeletedError = errors.New("tried to delete a type that isn't empty")
+
+func (rh *Resthook) CanPolicyTypeBeDeleted(err error) bool {
+       return err == policyTypeCanNotBeDeletedError
+}
 
 func (rh *Resthook) IsPolicyTypePresent(err error) bool {
        return err == policyTypeNotFoundError
@@ -454,3 +459,28 @@ func (rh *Resthook) GetAllPolicyInstance(policyTypeId models.PolicyTypeID) ([]mo
        a1.Logger.Debug("return : %+v", policyTypeInstances)
        return policyTypeInstances, nil
 }
+
+func (rh *Resthook) DeletePolicyType(policyTypeId models.PolicyTypeID) error {
+       a1.Logger.Debug("DeletePolicyType")
+
+       policyinstances, err := rh.GetAllPolicyInstance(policyTypeId)
+       if err != nil {
+               a1.Logger.Error("error in retrieving policy. err: %v", err)
+               return err
+       }
+
+       var keys [1]string
+       key := a1PolicyPrefix + strconv.FormatInt((int64(policyTypeId)), 10)
+       keys[0] = key
+       if len(policyinstances) == 0 {
+               err := rh.db.Remove(a1MediatorNs, keys[:])
+               if err != nil {
+                       a1.Logger.Error("error in deleting policy type err: %v", err)
+                       return err
+               }
+       } else {
+               a1.Logger.Error("tried to delete a type that isn't empty")
+               return policyTypeCanNotBeDeletedError
+       }
+       return nil
+}
index 4466927..45e7666 100644 (file)
@@ -187,6 +187,22 @@ func TestGetAllPolicyIntances(t *testing.T) {
        assert.Equal(t, 2, len(resp))
 }
 
+func TestDeletePolicyType(t *testing.T) {
+
+       policyTypeId := models.PolicyTypeID(20001)
+       key := a1PolicyPrefix + strconv.FormatInt((int64(policyTypeId)), 10)
+       var keys [1]string
+       keys[0] = key
+
+       //Setup Expectations
+       sdlInst.On("Remove", a1MediatorNs, keys[:]).Return(nil)
+
+       errresp := rh.DeletePolicyType(policyTypeId)
+
+       assert.Nil(t, errresp)
+       sdlInst.AssertExpectations(t)
+}
+
 type SdlMock struct {
        mock.Mock
 }
@@ -245,3 +261,8 @@ func (rmr *RmrSenderMock) RmrSendToXapp(httpBodyString string) bool {
        args := rmr.MethodCalled("RmrSendToXapp", httpBodyString)
        return args.Bool(0)
 }
+
+func (s *SdlMock) Remove(ns string, keys []string) error {
+       args := s.MethodCalled("Remove", ns, keys)
+       return args.Error(0)
+}
index 01f4258..4765e29 100644 (file)
@@ -34,6 +34,7 @@ type iSdl interface {
        Get(string, []string) (map[string]interface{}, error)
        SetIf(ns string, key string, oldData, newData interface{}) (bool, error)
        Set(ns string, pairs ...interface{}) error
+       Remove(ns string, keys []string) error
 }
 
 type iRMRClient interface {