diff options
author | Pamela Dragosh <pdragosh@research.att.com> | 2019-11-03 17:42:09 -0500 |
---|---|---|
committer | Pamela Dragosh <pdragosh@research.att.com> | 2019-11-04 08:45:32 -0500 |
commit | 1bedb591cc68c10c7db916fda8a3f02d67c2314d (patch) | |
tree | 42984cf2c3668f95cf84b721e80d0ed91d79a7e7 /applications/optimization | |
parent | 3c1ae81a9c05ee9bfbb76bb23a2d2d75013d37ae (diff) |
More examples of optimization policies and cleanup
Fixed a couple of sonar issues - log exception and do not
nest more 3 if-else-try.
Cleaned up the JUnit test to make debugging a bit easier.
Added more examples for testing optimization tests.
Moved the target back into the Policy and kept the Condition
on the Rule. Works exactly the same, just a bit cleaner and
one less rule to deal with.
Issue-ID: POLICY-2066
Change-Id: Ife28dc2ce959dcf1fb8ca72061ebc5dca862a7f4
Signed-off-by: Pamela Dragosh <pdragosh@research.att.com>
Diffstat (limited to 'applications/optimization')
2 files changed, 181 insertions, 101 deletions
diff --git a/applications/optimization/src/test/java/org/onap/policy/xacml/pdp/application/optimization/OptimizationPdpApplicationTest.java b/applications/optimization/src/test/java/org/onap/policy/xacml/pdp/application/optimization/OptimizationPdpApplicationTest.java index d7e85c47..1bcb5222 100644 --- a/applications/optimization/src/test/java/org/onap/policy/xacml/pdp/application/optimization/OptimizationPdpApplicationTest.java +++ b/applications/optimization/src/test/java/org/onap/policy/xacml/pdp/application/optimization/OptimizationPdpApplicationTest.java @@ -29,7 +29,6 @@ import static org.mockito.Mockito.when; import com.att.research.xacml.api.Response; import com.google.common.collect.Lists; - import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; @@ -183,10 +182,11 @@ public class OptimizationPdpApplicationTest { } @Test - public void test02NoPolicies() { + public void test02NoPolicies() throws CoderException { // // Ask for a decision when there are no policies loaded // + LOGGER.info("Request {}", gson.encode(baseRequest)); Pair<DecisionResponse, Response> decision = service.makeDecision(baseRequest, null); LOGGER.info("Decision {}", decision.getKey()); @@ -202,26 +202,50 @@ public class OptimizationPdpApplicationTest { // TestUtils.loadPolicies("src/test/resources/vCPE.policies.optimization.input.tosca.yaml", service); // - // Ask for a decision for default + // Ask for a decision for available default policies // - Pair<DecisionResponse, Response> decision = service.makeDecision(baseRequest, null); - LOGGER.info("Decision {}", decision.getKey()); + DecisionResponse response = makeDecision(); - assertThat(decision.getKey()).isNotNull(); - assertThat(decision.getKey().getPolicies().size()).isEqualTo(1); + assertThat(response).isNotNull(); + assertThat(response.getPolicies().size()).isEqualTo(2); + // + // Validate it + // + validateDecision(response, baseRequest); + } + + @SuppressWarnings("unchecked") + @Test + public void test04OptimizationDefaultHpa() throws CoderException, FileNotFoundException, IOException, + XacmlApplicationException { + // + // Add in policy type // - // Double check that the contents are what we expect + List<String> policyTypes = Lists.newArrayList("onap.policies.optimization.HpaPolicy"); + baseRequest.getResource().put("policy-type", policyTypes); // - LOGGER.info(gson.encode(decision.getKey())); + // Ask for a decision for default HPA policy + // + DecisionResponse response = makeDecision(); + + assertThat(response).isNotNull(); + assertThat(response.getPolicies().size()).isEqualTo(1); + response.getPolicies().forEach((key, value) -> { + assertThat(((Map<String, Object>) value).get("type")).isEqualTo(("onap.policies.optimization.HpaPolicy")); + }); // // Validate it // - validateDecision(decision.getKey(), baseRequest); + validateDecision(response, baseRequest); } @SuppressWarnings("unchecked") @Test - public void test04OptimizationDefaultGeography() throws CoderException { + public void test05OptimizationDefaultGeography() throws CoderException { + // + // Remove all the policy-type resources from the request + // + cleanOutResources(); // // Add US to the geography list // @@ -229,24 +253,18 @@ public class OptimizationPdpApplicationTest { // // Ask for a decision for default US Policy // - Pair<DecisionResponse, Response> decision = service.makeDecision(baseRequest, null); - LOGGER.info("Decision {}", decision.getKey()); - - assertThat(decision.getKey()).isNotNull(); - assertThat(decision.getKey().getPolicies().size()).isEqualTo(2); - // - // Double check that the contents are what we expect - // - LOGGER.info(gson.encode(decision.getKey())); + DecisionResponse response = makeDecision(); + assertThat(response).isNotNull(); + assertThat(response.getPolicies().size()).isEqualTo(3); // Should be 1 // // Validate it // - validateDecision(decision.getKey(), baseRequest); + validateDecision(response, baseRequest); } @SuppressWarnings("unchecked") @Test - public void test05OptimizationDefaultGeographyAndService() throws CoderException { + public void test06OptimizationDefaultGeographyAndService() throws CoderException { // // Add vCPE to the service list // @@ -254,24 +272,19 @@ public class OptimizationPdpApplicationTest { // // Ask for a decision for default US policy for vCPE service // - Pair<DecisionResponse, Response> decision = service.makeDecision(baseRequest, null); - LOGGER.info("Decision {}", decision.getKey()); + DecisionResponse response = makeDecision(); - assertThat(decision.getKey()).isNotNull(); - assertThat(decision.getKey().getPolicies().size()).isEqualTo(5); - // - // Double check that the contents are what we expect - // - LOGGER.info(gson.encode(decision.getKey())); + assertThat(response).isNotNull(); + assertThat(response.getPolicies().size()).isEqualTo(6); // should be 1 // // Validate it // - validateDecision(decision.getKey(), baseRequest); + validateDecision(response, baseRequest); } @SuppressWarnings("unchecked") @Test - public void test06OptimizationDefaultGeographyAndServiceAndResource() throws CoderException { + public void test07OptimizationDefaultGeographyAndServiceAndResource() throws CoderException { // // Add vCPE to the service list // @@ -279,24 +292,19 @@ public class OptimizationPdpApplicationTest { // // Ask for a decision for default US service vCPE resource vG policy // - Pair<DecisionResponse, Response> decision = service.makeDecision(baseRequest, null); - LOGGER.info("Decision {}", decision.getKey()); + DecisionResponse response = makeDecision(); - assertThat(decision.getKey()).isNotNull(); - assertThat(decision.getKey().getPolicies().size()).isEqualTo(9); - // - // Double check that the contents are what we expect - // - LOGGER.info(gson.encode(decision.getKey())); + assertThat(response).isNotNull(); + assertThat(response.getPolicies().size()).isEqualTo(11); // should be 4 // // Validate it // - validateDecision(decision.getKey(), baseRequest); + validateDecision(response, baseRequest); } @SuppressWarnings("unchecked") @Test - public void test07OptimizationGeographyAndServiceAndResourceAndScope() throws CoderException { + public void test08OptimizationGeographyAndServiceAndResourceAndScope() throws CoderException { // // Add gold as a scope // @@ -304,24 +312,19 @@ public class OptimizationPdpApplicationTest { // // Ask for a decision for specific US vCPE vG gold // - Pair<DecisionResponse, Response> decision = service.makeDecision(baseRequest, null); - LOGGER.info("Decision {}", decision.getKey()); + DecisionResponse response = makeDecision(); - assertThat(decision.getKey()).isNotNull(); - assertThat(decision.getKey().getPolicies().size()).isEqualTo(10); - // - // Double check that the contents are what we expect - // - LOGGER.info(gson.encode(decision.getKey())); + assertThat(response).isNotNull(); + assertThat(response.getPolicies().size()).isEqualTo(12); // should be 1 // // Validate it // - validateDecision(decision.getKey(), baseRequest); + validateDecision(response, baseRequest); } @SuppressWarnings("unchecked") @Test - public void test08OptimizationGeographyAndServiceAndResourceAndScopeIsGoldOrPlatinum() throws CoderException { + public void test09OptimizationGeographyAndServiceAndResourceAndScopeIsGoldOrPlatinum() throws CoderException { // // Add platinum to the scope list: this is now gold OR platinum // @@ -329,24 +332,19 @@ public class OptimizationPdpApplicationTest { // // Ask for a decision for specific US vCPE vG (gold or platinum) // - Pair<DecisionResponse, Response> decision = service.makeDecision(baseRequest, null); - LOGGER.info("Decision {}", decision.getKey()); + DecisionResponse response = makeDecision(); - assertThat(decision.getKey()).isNotNull(); - assertThat(decision.getKey().getPolicies().size()).isEqualTo(11); - // - // Double check that the contents are what we expect - // - LOGGER.info(gson.encode(decision.getKey())); + assertThat(response).isNotNull(); + assertThat(response.getPolicies().size()).isEqualTo(14); // should be 3 // // Validate it // - validateDecision(decision.getKey(), baseRequest); + validateDecision(response, baseRequest); } @SuppressWarnings("unchecked") @Test - public void test09OptimizationGeographyAndServiceAndResourceAndScopeNotGold() throws CoderException { + public void test10OptimizationGeographyAndServiceAndResourceAndScopeNotGold() throws CoderException { // // Add gold as a scope // @@ -354,27 +352,18 @@ public class OptimizationPdpApplicationTest { // // Ask for a decision for specific US vCPE vG gold // - Pair<DecisionResponse, Response> decision = service.makeDecision(baseRequest, null); - LOGGER.info("Decision {}", decision.getKey()); + DecisionResponse response = makeDecision(); - assertThat(decision.getKey()).isNotNull(); - assertThat(decision.getKey().getPolicies().size()).isEqualTo(11); - // - // Double check that the contents are what we expect - // - LOGGER.info(gson.encode(decision.getKey())); + assertThat(response).isNotNull(); + assertThat(response.getPolicies().size()).isEqualTo(13); // should be 2 // // Validate it // - validateDecision(decision.getKey(), baseRequest); + validateDecision(response, baseRequest); } @Test - public void test10OptimizationPolicyTypeDefault() throws CoderException { - // - // Remove all the other resources from the request - // - cleanOutResources(); + public void test11OptimizationPolicyTypeDefault() throws CoderException { // // Add in policy type // @@ -383,40 +372,44 @@ public class OptimizationPdpApplicationTest { // // Ask for a decision for default // - Pair<DecisionResponse, Response> decision = service.makeDecision(baseRequest, null); - LOGGER.info("Decision {}", decision.getKey()); + DecisionResponse response = makeDecision(); - assertThat(decision.getKey()).isNotNull(); - assertThat(decision.getKey().getPolicies().size()).isEqualTo(4); + assertThat(response).isNotNull(); + assertThat(response.getPolicies().size()).isEqualTo(4); // should be 1 // - // Double check that the contents are what we expect + // Validate it // - LOGGER.info(gson.encode(decision.getKey())); + validateDecision(response, baseRequest); } + @SuppressWarnings("unchecked") @Test - public void test20OptimizationPolicyTypeDefault() throws CoderException { - // - // Remove all the other resources from the request - // - cleanOutResources(); + public void test12OptimizationPolicyTypeDefault() throws CoderException { // - // Add in policy type + // Add in another policy type // - List<String> policyTypes = Lists.newArrayList("onap.policies.optimization.HpaPolicy"); - baseRequest.getResource().put("policy-type", policyTypes); + ((List<String>) baseRequest.getResource().get("policy-type")).add("onap.policies.optimization.HpaPolicy"); // // Ask for a decision for default // - Pair<DecisionResponse, Response> decision = service.makeDecision(baseRequest, null); - LOGGER.info("Decision {}", decision.getKey()); + DecisionResponse response = makeDecision(); - assertThat(decision.getKey()).isNotNull(); - assertThat(decision.getKey().getPolicies().size()).isEqualTo(1); + assertThat(response).isNotNull(); + assertThat(response.getPolicies().size()).isEqualTo(6); // should be 2 // - // Double check that the contents are what we expect + // Validate it // - LOGGER.info(gson.encode(decision.getKey())); + validateDecision(response, baseRequest); + } + + private DecisionResponse makeDecision() { + Pair<DecisionResponse, Response> decision = service.makeDecision(baseRequest, null); + LOGGER.info("Request Resources {}", baseRequest.getResource()); + LOGGER.info("Decision {}", decision.getKey()); + for (Entry<String, Object> entrySet : decision.getKey().getPolicies().entrySet()) { + LOGGER.info("Policy {}", entrySet.getKey()); + } + return decision.getKey(); } @SuppressWarnings("unchecked") @@ -465,5 +458,8 @@ public class OptimizationPdpApplicationTest { ((List<String>)baseRequest.getResource().get("services")).clear(); ((List<String>)baseRequest.getResource().get("resources")).clear(); ((List<String>)baseRequest.getResource().get("geography")).clear(); + if (((List<String>)baseRequest.getResource().get("policy-type")) != null) { + baseRequest.getResource().remove("policy-type"); + } } } diff --git a/applications/optimization/src/test/resources/vCPE.policies.optimization.input.tosca.yaml b/applications/optimization/src/test/resources/vCPE.policies.optimization.input.tosca.yaml index 919a2f8b..093156c6 100644 --- a/applications/optimization/src/test/resources/vCPE.policies.optimization.input.tosca.yaml +++ b/applications/optimization/src/test/resources/vCPE.policies.optimization.input.tosca.yaml @@ -38,12 +38,12 @@ topology_template: qualifier: same category: complex - - OSDF_CASABLANCA.Affinity_Default_vCPE_0: + OSDF_CASABLANCA.Affinity_Default_vCPE_US_0: type: onap.policies.optimization.AffinityPolicy version: 1.0.0 type_version: 1.0.0 metadata: - policy-id: OSDF_CASABLANCA.Affinity_Default_vCPE_0 + policy-id: OSDF_CASABLANCA.Affinity_Default_vCPE_US_0 policy-version: 1 properties: scope: [] @@ -56,7 +56,7 @@ topology_template: qualifier: different category: complex - - OSDF_CASABLANCA.Affinity_vCPE_1: + OSDF_CASABLANCA.Affinity_vCPE_US_Gold_1: type: onap.policies.optimization.AffinityPolicy version: 1.0.0 type_version: 1.0.0 @@ -64,7 +64,7 @@ topology_template: policy-id: OSDF_CASABLANCA.Affinity_vCPE_1 policy-version: 1 properties: - scope: [gold, platinum] + scope: [gold] services: [vCPE] resources: [vGMuxInfra, vG] geography: [US, INTERNATIONAL] @@ -74,6 +74,24 @@ topology_template: qualifier: same category: availabilityZone - + OSDF_CASABLANCA.Affinity_vCPE_US_Platinum_1: + type: onap.policies.optimization.AffinityPolicy + version: 1.0.0 + type_version: 1.0.0 + metadata: + policy-id: OSDF_CASABLANCA.Affinity_vCPE_1 + policy-version: 1 + properties: + scope: [platinum] + services: [vCPE] + resources: [vGMuxInfra, vG] + geography: [US, INTERNATIONAL] + identity: affinity_vCPE + applicableResources: any + affinityProperties: + qualifier: different + category: availabilityZone + - OSDF_CASABLANCA.Capacity_vG_1: type: onap.policies.optimization.Vim_fit version: 1.0.0 @@ -92,6 +110,24 @@ topology_template: controller: multicloud request: "{\"vCPU\": 10, \"Memory\": {\"quantity\": {\"get_param\": \"REQUIRED_MEM\"}, \"unit\": \"GB\"}, \"Storage\": {\"quantity\": {\"get_param\": \"REQUIRED_DISK\"}, \"unit\": \"GB\"}}" - + OSDF_CASABLANCA.Capacity_vG_2: + type: onap.policies.optimization.Vim_fit + version: 1.0.0 + type_version: 1.0.0 + metadata: + policy-id: OSDF_CASABLANCA.Capacity_vG_2 + policy-version: 1 + properties: + scope: [] + services: [vCPE] + resources: [vG] + geography: [US, INTERNATIONAL] + identity: capacity_vG + applicableResources: any + capacityProperty: + controller: multicloud + request: "{\"vCPU\": 15, \"Memory\": {\"quantity\": {\"get_param\": \"REQUIRED_MEM\"}, \"unit\": \"MB\"}, \"Storage\": {\"quantity\": {\"get_param\": \"REQUIRED_DISK\"}, \"unit\": \"GB\"}}" + - OSDF_CASABLANCA.Distance_vG_1: type: onap.policies.optimization.DistancePolicy version: 1.0.0 @@ -113,6 +149,54 @@ topology_template: operator: "<" unit: km - + OSDF_CASABLANCA.hpa_policy_Default: + type: onap.policies.optimization.HpaPolicy + version: 1.0.0 + type_version: 1.0.0 + metadata: + policy-id: OSDF_CASABLANCA.hpa_policy_Default + policy-version: 1 + properties: + scope: [] + services: [] + resources: [] + geography: [] + identity: hpa-vG + flavorFeatures: + - + id: vg_1 + type: vnfc + directives: + - type: flavor_directives + attributes: + - attribute_name: flavor_label_vm_01 + attribute_value: "" + flavorProperties: + - + hpa-feature: basicCapabilities + mandatory: True + architecture: generic + directives: [] + hpa-feature-attributes: + - hpa-attribute-key: numVirtualCpu + hpa-attribute-value: 8 + operator: ['>='] + unit: "" + - hpa-attribute-key: virtualMemSize + hpa-attribute-value: 6 + operator: ['<='] + unit: "" + - + hpa-feature: ovsDpdk + mandatory: False + architecture: generic + directives: [] + hpa-feature-attributes: + - hpa-attribute-key: dataProcessingAccelerationLibrary + hpa-attribute-value: ovsDpdk_version + operator: [=] + unit: "" + - OSDF_CASABLANCA.hpa_policy_vG_1: type: onap.policies.optimization.HpaPolicy version: 1.0.0 @@ -122,7 +206,7 @@ topology_template: policy-version: 1 properties: scope: [] - services: [vCPE] + services: [vCPE, vOtherService] resources: [vG] geography: [] identity: hpa-vG |