From: naman.gupta Date: Mon, 17 Oct 2022 18:55:14 +0000 (+0530) Subject: Delete Policy Type Api X-Git-Tag: 3.0.0~24 X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=commitdiff_plain;h=b513650252f1a739e3e9e2d02f2598d506aa86cf;p=ric-plt%2Fa1.git Delete Policy Type Api Delete policy type APi implementation. Signed-off-by: naman.gupta Change-Id: I321ff0e5470b26a39a019cf6ca91d9dc1b5f9ad2 --- diff --git a/a1-go/pkg/restful/restful.go b/a1-go/pkg/restful/restful.go index ec63201..91b9659 100644 --- a/a1-go/pkg/restful/restful.go +++ b/a1-go/pkg/restful/restful.go @@ -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 } diff --git a/a1-go/pkg/resthooks/resthooks.go b/a1-go/pkg/resthooks/resthooks.go index 79dba93..8d30b3d 100644 --- a/a1-go/pkg/resthooks/resthooks.go +++ b/a1-go/pkg/resthooks/resthooks.go @@ -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 +} diff --git a/a1-go/pkg/resthooks/resthooks_test.go b/a1-go/pkg/resthooks/resthooks_test.go index 4466927..45e7666 100644 --- a/a1-go/pkg/resthooks/resthooks_test.go +++ b/a1-go/pkg/resthooks/resthooks_test.go @@ -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) +} diff --git a/a1-go/pkg/resthooks/types.go b/a1-go/pkg/resthooks/types.go index 01f4258..4765e29 100644 --- a/a1-go/pkg/resthooks/types.go +++ b/a1-go/pkg/resthooks/types.go @@ -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 {