Refactor optimization policies 88/99288/2
authorPamela Dragosh <pdragosh@research.att.com>
Sat, 7 Dec 2019 23:00:36 +0000 (18:00 -0500)
committerPamela Dragosh <pdragosh@research.att.com>
Sat, 7 Dec 2019 23:32:18 +0000 (18:32 -0500)
Optimization policies need to be further refactored so
that Resource vs Service type policies can be specified.

Issue-ID: POLICY-2066
Change-Id: Ia40a947097692ea7dcc6ea8d13eb8669c37fac14
Signed-off-by: Pamela Dragosh <pdragosh@research.att.com>
15 files changed:
models-examples/src/main/resources/policytypes/onap.policies.Optimization.yaml
models-examples/src/main/resources/policytypes/onap.policies.optimization.Resource.yaml [new file with mode: 0644]
models-examples/src/main/resources/policytypes/onap.policies.optimization.Service.yaml [new file with mode: 0644]
models-examples/src/main/resources/policytypes/onap.policies.optimization.resource.AffinityPolicy.yaml [moved from models-examples/src/main/resources/policytypes/onap.policies.optimization.AffinityPolicy.yaml with 84% similarity]
models-examples/src/main/resources/policytypes/onap.policies.optimization.resource.DistancePolicy.yaml [moved from models-examples/src/main/resources/policytypes/onap.policies.optimization.DistancePolicy.yaml with 91% similarity]
models-examples/src/main/resources/policytypes/onap.policies.optimization.resource.HpaPolicy.yaml [moved from models-examples/src/main/resources/policytypes/onap.policies.optimization.HpaPolicy.yaml with 95% similarity]
models-examples/src/main/resources/policytypes/onap.policies.optimization.resource.OptimizationPolicy.yaml [moved from models-examples/src/main/resources/policytypes/onap.policies.optimization.OptimizationPolicy.yaml with 92% similarity]
models-examples/src/main/resources/policytypes/onap.policies.optimization.resource.PciPolicy.yaml [moved from models-examples/src/main/resources/policytypes/onap.policies.optimization.PciPolicy.yaml with 85% similarity]
models-examples/src/main/resources/policytypes/onap.policies.optimization.resource.Vim_fit.yaml [moved from models-examples/src/main/resources/policytypes/onap.policies.optimization.Vim_fit.yaml with 84% similarity]
models-examples/src/main/resources/policytypes/onap.policies.optimization.resource.VnfPolicy.yaml [moved from models-examples/src/main/resources/policytypes/onap.policies.optimization.VnfPolicy.yaml with 89% similarity]
models-examples/src/main/resources/policytypes/onap.policies.optimization.service.QueryPolicy.yaml [moved from models-examples/src/main/resources/policytypes/onap.policies.optimization.QueryPolicy.yaml with 81% similarity]
models-examples/src/main/resources/policytypes/onap.policies.optimization.service.SubscriberPolicy.yaml [moved from models-examples/src/main/resources/policytypes/onap.policies.optimization.SubscriberPolicy.yaml with 83% similarity]
models-provider/src/test/java/org/onap/policy/models/provider/impl/PolicyTypePersistenceTest.java
models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyTypeFilterTest.java
models-tosca/src/test/java/org/onap/policy/models/tosca/simple/serialization/OptimizationPolicyTypeSerializationTest.java

index f88239d..2cd391f 100644 (file)
@@ -13,22 +13,6 @@ policy_types:
             required: true
             entry_schema:
                type: string
-         services:
-            description: One or more services that the policy applies to.
-            type: list
-            metadata:
-               matchable: true
-            required: true
-            entry_schema:
-               type: string
-         resources:
-            description: One or more VNF resources that the policy applies to.
-            type: list
-            metadata:
-               matchable: true
-            required: true
-            entry_schema:
-               type: string
          geography:
             description: One or more geographic regions
             type: list
diff --git a/models-examples/src/main/resources/policytypes/onap.policies.optimization.Resource.yaml b/models-examples/src/main/resources/policytypes/onap.policies.optimization.Resource.yaml
new file mode 100644 (file)
index 0000000..1d81351
--- /dev/null
@@ -0,0 +1,23 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+policy_types:
+   onap.policies.optimization.Resource:
+      derived_from: onap.policies.Optimization
+      version: 1.0.0
+      description: The base policy type for all policies that govern optimization for a Resource in a Service.
+      properties:
+         services:
+            description: One or more services that the policy applies to.
+            type: list
+            metadata:
+               matchable: true
+            required: true
+            entry_schema:
+               type: string
+         resources:
+            description: One or more VNF resources that the policy applies to.
+            type: list
+            metadata:
+               matchable: true
+            required: true
+            entry_schema:
+               type: string
\ No newline at end of file
diff --git a/models-examples/src/main/resources/policytypes/onap.policies.optimization.Service.yaml b/models-examples/src/main/resources/policytypes/onap.policies.optimization.Service.yaml
new file mode 100644 (file)
index 0000000..8e7b724
--- /dev/null
@@ -0,0 +1,15 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+policy_types:
+   onap.policies.optimization.Service:
+      derived_from: onap.policies.Optimization
+      version: 1.0.0
+      description: The base policy type for all policies that govern optimization for a Service.
+      properties:
+         services:
+            description: One or more services that the policy applies to.
+            type: list
+            metadata:
+               matchable: true
+            required: true
+            entry_schema:
+               type: string               
\ No newline at end of file
@@ -1,7 +1,7 @@
 tosca_definitions_version: tosca_simple_yaml_1_0_0
 policy_types:
-   onap.policies.optimization.AffinityPolicy:
-      derived_from: onap.policies.Optimization
+   onap.policies.optimization.resource.AffinityPolicy:
+      derived_from: onap.policies.optimization.Resource
       version: 1.0.0
       properties:
          applicableResources:
@@ -1,7 +1,7 @@
 tosca_definitions_version: tosca_simple_yaml_1_0_0
 policy_types:
-   onap.policies.optimization.DistancePolicy:
-      derived_from: onap.policies.Optimization
+   onap.policies.optimization.resource.DistancePolicy:
+      derived_from: onap.policies.optimization.Resource
       version: 1.0.0
       properties:
          applicableResources:
@@ -1,7 +1,7 @@
 tosca_definitions_version: tosca_simple_yaml_1_0_0
 policy_types:
-   onap.policies.optimization.HpaPolicy:
-      derived_from: onap.policies.Optimization
+   onap.policies.optimization.resource.HpaPolicy:
+      derived_from: onap.policies.optimization.Resource
       version: 1.0.0
       properties:
          flavorFeatures:
@@ -1,7 +1,7 @@
 tosca_definitions_version: tosca_simple_yaml_1_0_0
 policy_types:
-   onap.policies.optimization.OptimizationPolicy:
-      derived_from: onap.policies.Optimization
+   onap.policies.optimization.resource.OptimizationPolicy:
+      derived_from: onap.policies.optimization.Resource
       version: 1.0.0
       properties:
          objective:
@@ -1,7 +1,7 @@
 tosca_definitions_version: tosca_simple_yaml_1_0_0
 policy_types:
-   onap.policies.optimization.PciPolicy:
-      derived_from: onap.policies.Optimization
+   onap.policies.optimization.resource.PciPolicy:
+      derived_from: onap.policies.optimization.Resource
       version: 1.0.0
       properties:
          pciProperties:
@@ -1,7 +1,7 @@
 tosca_definitions_version: tosca_simple_yaml_1_0_0
 policy_types:
-   onap.policies.optimization.Vim_fit:
-      derived_from: onap.policies.Optimization
+   onap.policies.optimization.resource.Vim_fit:
+      derived_from: onap.policies.optimization.Resource
       version: 1.0.0
       properties:
          applicableResources:
@@ -1,7 +1,7 @@
 tosca_definitions_version: tosca_simple_yaml_1_0_0
 policy_types:
-   onap.policies.optimization.VnfPolicy:
-      derived_from: onap.policies.Optimization
+   onap.policies.optimization.resource.VnfPolicy:
+      derived_from: onap.policies.optimization.Resource
       version: 1.0.0
       properties:
          applicableResources:
@@ -1,7 +1,7 @@
 tosca_definitions_version: tosca_simple_yaml_1_0_0
 policy_types:
-   onap.policies.optimization.QueryPolicy:
-      derived_from: onap.policies.Optimization
+   onap.policies.optimization.service.QueryPolicy:
+      derived_from: onap.policies.optimization.Service
       version: 1.0.0
       properties:
          queryProperties:
@@ -1,7 +1,7 @@
 tosca_definitions_version: tosca_simple_yaml_1_0_0
 policy_types:
-   onap.policies.optimization.SubscriberPolicy:
-      derived_from: onap.policies.Optimization
+   onap.policies.optimization.service.SubscriberPolicy:
+      derived_from: onap.policies.optimization.Service
       version: 1.0.0
       properties:
          subscriberProperties:
index 2ccf215..75f21d2 100644 (file)
@@ -64,17 +64,17 @@ public class PolicyTypePersistenceTest {
     // @formatter:off
     private String[] policyTypeResourceNames = {
         "policytypes/onap.policies.controlloop.Operational.yaml",
-        "policytypes/onap.policies.optimization.DistancePolicy.yaml",
-        "policytypes/onap.policies.optimization.VnfPolicy.yaml",
-        "policytypes/onap.policies.optimization.PciPolicy.yaml",
-        "policytypes/onap.policies.optimization.OptimizationPolicy.yaml",
+        "policytypes/onap.policies.optimization.resource.DistancePolicy.yaml",
+        "policytypes/onap.policies.optimization.resource.VnfPolicy.yaml",
+        "policytypes/onap.policies.optimization.resource.PciPolicy.yaml",
+        "policytypes/onap.policies.optimization.resource.OptimizationPolicy.yaml",
         "policytypes/onap.policies.controlloop.guard.Blacklist.yaml",
         "policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server.yaml",
-        "policytypes/onap.policies.optimization.HpaPolicy.yaml",
-        "policytypes/onap.policies.optimization.Vim_fit.yaml",
-        "policytypes/onap.policies.optimization.SubscriberPolicy.yaml",
-        "policytypes/onap.policies.optimization.AffinityPolicy.yaml",
-        "policytypes/onap.policies.optimization.QueryPolicy.yaml",
+        "policytypes/onap.policies.optimization.resource.HpaPolicy.yaml",
+        "policytypes/onap.policies.optimization.resource.Vim_fit.yaml",
+        "policytypes/onap.policies.optimization.service.SubscriberPolicy.yaml",
+        "policytypes/onap.policies.optimization.resource.AffinityPolicy.yaml",
+        "policytypes/onap.policies.optimization.service.QueryPolicy.yaml",
         "policytypes/onap.policies.controlloop.guard.MinMax.yaml",
         "policytypes/onap.policies.controlloop.guard.FrequencyLimiter.yaml",
         "policytypes/onap.policies.controlloop.guard.coordination.FirstBlocksSecond.yaml",
index d9ffec5..f4f822c 100644 (file)
@@ -27,12 +27,10 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
 import com.google.gson.GsonBuilder;
-
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
-
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.onap.policy.common.utils.coder.CoderException;
@@ -59,17 +57,17 @@ public class ToscaPolicyTypeFilterTest {
     // @formatter:off
     private static final String[] policyTypeResourceNames = {
         "policytypes/onap.policies.controlloop.Operational.yaml",
-        "policytypes/onap.policies.optimization.DistancePolicy.yaml",
-        "policytypes/onap.policies.optimization.VnfPolicy.yaml",
-        "policytypes/onap.policies.optimization.PciPolicy.yaml",
-        "policytypes/onap.policies.optimization.OptimizationPolicy.yaml",
+        "policytypes/onap.policies.optimization.resource.DistancePolicy.yaml",
+        "policytypes/onap.policies.optimization.resource.VnfPolicy.yaml",
+        "policytypes/onap.policies.optimization.resource.PciPolicy.yaml",
+        "policytypes/onap.policies.optimization.resource.OptimizationPolicy.yaml",
         "policytypes/onap.policies.controlloop.guard.Blacklist.yaml",
         "policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server.yaml",
-        "policytypes/onap.policies.optimization.HpaPolicy.yaml",
-        "policytypes/onap.policies.optimization.Vim_fit.yaml",
-        "policytypes/onap.policies.optimization.SubscriberPolicy.yaml",
-        "policytypes/onap.policies.optimization.AffinityPolicy.yaml",
-        "policytypes/onap.policies.optimization.QueryPolicy.yaml",
+        "policytypes/onap.policies.optimization.resource.HpaPolicy.yaml",
+        "policytypes/onap.policies.optimization.resource.Vim_fit.yaml",
+        "policytypes/onap.policies.optimization.service.SubscriberPolicy.yaml",
+        "policytypes/onap.policies.optimization.resource.AffinityPolicy.yaml",
+        "policytypes/onap.policies.optimization.service.QueryPolicy.yaml",
         "policytypes/onap.policies.controlloop.guard.MinMax.yaml",
         "policytypes/onap.policies.controlloop.guard.FrequencyLimiter.yaml",
         "policytypes/onap.policies.controlloop.guard.coordination.FirstBlocksSecond.yaml",
index 9f99069..e710faa 100644 (file)
@@ -44,7 +44,10 @@ public class OptimizationPolicyTypeSerializationTest {
     private static final String TYPE_ROOT = "tosca.policies.Root";
     private static final String VERSION = "1.0.0";
 
-    private static final String INPUT_YAML = "policytypes/onap.policies.Optimization.yaml";
+    private static final String INPUT_OPTIMIZATION_YAML = "policytypes/onap.policies.Optimization.yaml";
+    private static final String INPUT_OPTIMIZATION_RESOURCE_YAML =
+            "policytypes/onap.policies.optimization.Resource.yaml";
+    private static final String INPUT_OPTIMIZATION_SERVICE_YAML = "policytypes/onap.policies.optimization.Service.yaml";
 
     private StandardCoder coder;
 
@@ -54,13 +57,39 @@ public class OptimizationPolicyTypeSerializationTest {
     }
 
     @Test
-    public void test() throws CoderException {
-        JpaToscaServiceTemplate svctmpl = loadYaml(INPUT_YAML);
-        validate("initial object", svctmpl);
+    public void testOptimization() throws CoderException {
+        JpaToscaServiceTemplate svctmpl = loadYaml(INPUT_OPTIMIZATION_YAML);
+        validate("initial object", svctmpl, TYPE_ROOT, "onap.policies.Optimization", false, false);
 
         String ser = serialize(svctmpl);
         JpaToscaServiceTemplate svctmpl2 = deserialize(ser);
-        validate("copy", svctmpl2);
+        validate("copy", svctmpl2, TYPE_ROOT, "onap.policies.Optimization", false, false);
+
+        assertEquals(svctmpl, svctmpl2);
+    }
+
+    @Test
+    public void testOptimizationResource() throws CoderException {
+        JpaToscaServiceTemplate svctmpl = loadYaml(INPUT_OPTIMIZATION_RESOURCE_YAML);
+        validate("initial object", svctmpl, "onap.policies.Optimization", "onap.policies.optimization.Resource", true,
+                true);
+
+        String ser = serialize(svctmpl);
+        JpaToscaServiceTemplate svctmpl2 = deserialize(ser);
+        validate("copy", svctmpl2, "onap.policies.Optimization", "onap.policies.optimization.Resource", true, true);
+
+        assertEquals(svctmpl, svctmpl2);
+    }
+
+    @Test
+    public void testOptimizationService() throws CoderException {
+        JpaToscaServiceTemplate svctmpl = loadYaml(INPUT_OPTIMIZATION_SERVICE_YAML);
+        validate("initial object", svctmpl, "onap.policies.Optimization", "onap.policies.optimization.Service", false,
+                true);
+
+        String ser = serialize(svctmpl);
+        JpaToscaServiceTemplate svctmpl2 = deserialize(ser);
+        validate("copy", svctmpl2, "onap.policies.Optimization", "onap.policies.optimization.Service", false, true);
 
         assertEquals(svctmpl, svctmpl2);
     }
@@ -86,29 +115,32 @@ public class OptimizationPolicyTypeSerializationTest {
         return coder.encode(auth);
     }
 
-    private void validate(String testnm, JpaToscaServiceTemplate svctmpl) {
+    private void validate(String testnm, JpaToscaServiceTemplate svctmpl, String derivedFrom,
+            String typeName, boolean checkResource, boolean checkService) {
         JpaToscaPolicyTypes policyTypes = svctmpl.getPolicyTypes();
 
         assertEquals(testnm + " type count", 1, policyTypes.getConceptMap().size());
         JpaToscaPolicyType policyType = policyTypes.getConceptMap().values().iterator().next();
 
-        assertEquals(testnm + " name", "onap.policies.Optimization", policyType.getName());
+        assertEquals(testnm + " name", typeName, policyType.getName());
         assertEquals(testnm + " version", VERSION, policyType.getVersion());
 
         assertNotNull(testnm + " derived from", policyType.getDerivedFrom());
-        assertEquals(testnm + " derived from name", TYPE_ROOT, policyType.getDerivedFrom().getName());
-
-        assertEquals(testnm + " description", "The base policy type for all policies that govern optimization",
-                        policyType.getDescription());
+        assertEquals(testnm + " derived from name", derivedFrom, policyType.getDerivedFrom().getName());
 
         Map<String, JpaToscaProperty> props = policyType.getProperties();
         assertNotNull(testnm + " properties", props);
 
-        validateScope(testnm, props.get("scope"));
-        validateServices(testnm, props.get("services"));
-        validateResources(testnm, props.get("resources"));
-        validateGeography(testnm, props.get("geography"));
-        validateIdentity(testnm, props.get("identity"));
+        if (checkResource && checkService) {
+            validateResources(testnm, props.get("resources"));
+            validateServices(testnm, props.get("services"));
+        } else if (checkService && !checkResource) {
+            validateServices(testnm, props.get("services"));
+        } else {
+            validateScope(testnm, props.get("scope"));
+            validateGeography(testnm, props.get("geography"));
+            validateIdentity(testnm, props.get("identity"));
+        }
     }
 
     // only need to validate deep match of one of these; geography is the most interesting