Fixing the status of policy instance 14/10114/1 3.0.0
authornaman.gupta <naman.gupta@samsung.com>
Tue, 13 Dec 2022 12:01:17 +0000 (17:31 +0530)
committernaman.gupta <naman.gupta@samsung.com>
Tue, 13 Dec 2022 12:04:12 +0000 (17:34 +0530)
Fixing the status of policy instance after recieving the OK status from
southbound message.

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

pkg/resthooks/resthooks.go
pkg/resthooks/resthooks_test.go

index b76e982..cf7a2d1 100644 (file)
@@ -572,18 +572,34 @@ func (rh *Resthook) getMetaData(policyTypeId models.PolicyTypeID, policyInstance
        return instanceMetadataMap, nil
 }
 
+func (rh *Resthook) getPolicyInstanceStatus(policyTypeId models.PolicyTypeID, policyInstanceID models.PolicyInstanceID) (bool, error) {
+       instancehandlerKey := a1HandlerPrefix + strconv.FormatInt((int64(policyTypeId)), 10) + "." + string(policyInstanceID)
+       var keys [1]string
+       keys[0] = instancehandlerKey
+       resp, err := rh.db.Get(a1MediatorNs, keys[:])
+       if err != nil {
+               a1.Logger.Error("error1 :%+v", err)
+               return false, err
+       }
+       for _, key := range resp {
+               if key == "OK" {
+                       return true, nil
+               }
+       }
+       return false, nil
+}
+
 func (rh *Resthook) GetPolicyInstanceStatus(policyTypeId models.PolicyTypeID, policyInstanceID models.PolicyInstanceID) (*a1_mediator.A1ControllerGetPolicyInstanceStatusOKBody, error) {
        err := rh.instanceValidity(policyTypeId, policyInstanceID)
        policyInstanceStatus := a1_mediator.A1ControllerGetPolicyInstanceStatusOKBody{}
+       policyInstanceStatus.InstanceStatus = "NOT IN EFFECT"
        if err != nil && err == policyInstanceNotFoundError || err == policyTypeNotFoundError {
-               policyInstanceStatus.InstanceStatus = "NOT IN EFFECT"
                return &policyInstanceStatus, err
        }
        metadata, err := rh.getMetaData(policyTypeId, policyInstanceID)
        a1.Logger.Debug(" metadata %v", metadata)
        if err != nil {
                a1.Logger.Error("policy instance error : %v", err)
-               policyInstanceStatus.InstanceStatus = "NOT IN EFFECT"
                return &policyInstanceStatus, err
        }
        jsonbody, err := json.Marshal(metadata)
@@ -597,10 +613,12 @@ func (rh *Resthook) GetPolicyInstanceStatus(policyTypeId models.PolicyTypeID, po
                //this error maps to 503 error but can be mapped to 500: internal error
                return &policyInstanceStatus, err
        }
-       if policyInstanceStatus.HasBeenDeleted == false {
+       resp, err := rh.getPolicyInstanceStatus(policyTypeId, policyInstanceID)
+       if err != nil || (err == nil && resp == false) {
+               a1.Logger.Error("marshal error : %v", err)
+               return &policyInstanceStatus, err
+       } else if policyInstanceStatus.HasBeenDeleted == true {
                policyInstanceStatus.InstanceStatus = "IN EFFECT"
-       } else {
-               policyInstanceStatus.InstanceStatus = "NOT IN EFFECT"
        }
        return &policyInstanceStatus, nil
 }
index ac3dc25..01d11e7 100644 (file)
@@ -229,7 +229,11 @@ func TestGetPolicyInstanceStatus(t *testing.T) {
        var keys [1]string
        keys[0] = instancekey
        sdlInst.On("Get", a1MediatorNs, keys[:]).Return(httpBody)
-
+       instancekey = a1HandlerPrefix + strconv.FormatInt(20001, 10) + "." + string(policyInstanceID)
+       var instancekeys [1]string
+       instancekeys[0] = instancekey
+       instancearr := []interface{}{instancekey, "OK"}
+       sdlInst.On("Get", a1MediatorNs, instancekeys[:]).Return(instancearr, nil)
        resp, errresp := rh.GetPolicyInstanceStatus(policyTypeId, policyInstanceID)
 
        assert.Nil(t, errresp)