diff options
Diffstat (limited to 'applications/optimization')
8 files changed, 440 insertions, 50 deletions
diff --git a/applications/optimization/pom.xml b/applications/optimization/pom.xml index 5e72d03a..b81be793 100644 --- a/applications/optimization/pom.xml +++ b/applications/optimization/pom.xml @@ -34,6 +34,11 @@ <dependencies> <dependency> + <groupId>org.powermock</groupId> + <artifactId>powermock-api-mockito</artifactId> + <scope>test</scope> + </dependency> + <dependency> <groupId>org.onap.policy.xacml-pdp.applications</groupId> <artifactId>common</artifactId> <version>${project.version}</version> diff --git a/applications/optimization/src/main/java/org/onap/policy/xacml/pdp/application/optimization/OptimizationPdpApplication.java b/applications/optimization/src/main/java/org/onap/policy/xacml/pdp/application/optimization/OptimizationPdpApplication.java index 91c46746..e2ab00c6 100644 --- a/applications/optimization/src/main/java/org/onap/policy/xacml/pdp/application/optimization/OptimizationPdpApplication.java +++ b/applications/optimization/src/main/java/org/onap/policy/xacml/pdp/application/optimization/OptimizationPdpApplication.java @@ -22,13 +22,15 @@ package org.onap.policy.xacml.pdp.application.optimization; +import java.nio.file.Path; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; - +import org.onap.policy.common.endpoints.parameters.RestServerParameters; import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier; import org.onap.policy.pdp.xacml.application.common.ToscaPolicyTranslator; +import org.onap.policy.pdp.xacml.application.common.XacmlApplicationException; import org.onap.policy.pdp.xacml.application.common.std.StdMatchableTranslator; import org.onap.policy.pdp.xacml.application.common.std.StdXacmlApplicationServiceProvider; import org.slf4j.Logger; @@ -77,6 +79,21 @@ public class OptimizationPdpApplication extends StdXacmlApplicationServiceProvid } @Override + public void initialize(Path pathForData, RestServerParameters policyApiParameters) + throws XacmlApplicationException { + // + // Store our API parameters and path for translator so it + // can go get Policy Types + // + this.translator.setPathForData(pathForData); + this.translator.setApiRestParameters(policyApiParameters); + // + // Let our super class do its thing + // + super.initialize(pathForData, policyApiParameters); + } + + @Override public synchronized List<ToscaPolicyTypeIdentifier> supportedPolicyTypes() { return Collections.unmodifiableList(supportedPolicyTypes); } @@ -102,6 +119,9 @@ public class OptimizationPdpApplication extends StdXacmlApplicationServiceProvid @Override protected ToscaPolicyTranslator getTranslator(String type) { + // + // Return translator + // return translator; } 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 6d1afda6..a356926d 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 @@ -23,16 +23,18 @@ package org.onap.policy.xacml.pdp.application.optimization; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; import com.att.research.xacml.api.Response; - import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; import java.util.Iterator; import java.util.Properties; import java.util.ServiceLoader; - import org.apache.commons.lang3.tuple.Pair; import org.junit.BeforeClass; import org.junit.ClassRule; @@ -40,6 +42,7 @@ import org.junit.FixMethodOrder; import org.junit.Test; import org.junit.rules.TemporaryFolder; import org.junit.runners.MethodSorters; +import org.onap.policy.common.endpoints.parameters.RestServerParameters; import org.onap.policy.common.utils.coder.CoderException; import org.onap.policy.common.utils.coder.StandardCoder; import org.onap.policy.common.utils.resources.TextFileUtils; @@ -62,6 +65,11 @@ public class OptimizationPdpApplicationTest { private static XacmlApplicationServiceProvider service; private static StandardCoder gson = new StandardCoder(); private static DecisionRequest requestAffinity; + private static RestServerParameters clientParams; + private static String[] listPolicyTypeFiles = { "onap.policies.Optimization", + "onap.policies.optimization.AffinityPolicy", + "onap.policies.optimization.DistancePolicy", + "onap.policies.optimization.SubscriberPolicy"}; @ClassRule public static final TemporaryFolder policyFolder = new TemporaryFolder(); @@ -73,6 +81,9 @@ public class OptimizationPdpApplicationTest { */ @BeforeClass public static void setUp() throws Exception { + clientParams = mock(RestServerParameters.class); + when(clientParams.getHost()).thenReturn("localhost"); + when(clientParams.getPort()).thenReturn(6969); // // Load Single Decision Request // @@ -88,6 +99,13 @@ public class OptimizationPdpApplicationTest { propertiesFile = XacmlPolicyUtils.copyXacmlPropertiesContents("src/test/resources/xacml.properties", properties, myCreator); // + // Copy the test policy types into data area + // + for (String policy : listPolicyTypeFiles) { + Files.copy(Paths.get("src/test/resources", policy + "-1.0.0.json"), + Paths.get(policyFolder.getRoot().getAbsolutePath(), policy + "-1.0.0.json")); + } + // // Load service // ServiceLoader<XacmlApplicationServiceProvider> applicationLoader = @@ -121,7 +139,7 @@ public class OptimizationPdpApplicationTest { // Tell it to initialize based on the properties file // we just built for it. // - service.initialize(propertiesFile.toPath().getParent()); + service.initialize(propertiesFile.toPath().getParent(), clientParams); } @Test @@ -171,7 +189,7 @@ public class OptimizationPdpApplicationTest { LOGGER.info("Decision {}", decision.getKey()); assertThat(decision.getKey()).isNotNull(); - assertThat(decision.getKey().getPolicies().size()).isEqualTo(1); + assertThat(decision.getKey().getPolicies().size()).isEqualTo(4); // // Dump it out as Json // diff --git a/applications/optimization/src/test/resources/onap.policies.Optimization-1.0.0.json b/applications/optimization/src/test/resources/onap.policies.Optimization-1.0.0.json new file mode 100644 index 00000000..8ee418e2 --- /dev/null +++ b/applications/optimization/src/test/resources/onap.policies.Optimization-1.0.0.json @@ -0,0 +1,66 @@ +{ + "tosca_definitions_version": "tosca_simple_yaml_1_0_0", + "policy_types": { + "onap.policies.Optimization": { + "derived_from": "tosca.policies.Root", + "version": "1.0.0", + "description": "The base policy type for all policies that govern optimization", + "properties": { + "scope": { + "description": "Scope for the policy - could be for a specific release.", + "type": "list", + "metadata": { + "matchable": true + }, + "required": true + }, + "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", + "metadata": { + "matchable": true + }, + "required": true, + "entry_schema": { + "type": "string", + "constraints": [ + { + "valid_values": [ + "US", + "International" + ] + } + ] + } + }, + "identity": { + "description": "Used internally for identification", + "type": "string", + "required": true + } + } + } + } +}
\ No newline at end of file diff --git a/applications/optimization/src/test/resources/onap.policies.optimization.AffinityPolicy-1.0.0.json b/applications/optimization/src/test/resources/onap.policies.optimization.AffinityPolicy-1.0.0.json new file mode 100644 index 00000000..d2b1b4b7 --- /dev/null +++ b/applications/optimization/src/test/resources/onap.policies.optimization.AffinityPolicy-1.0.0.json @@ -0,0 +1,54 @@ +{ + "tosca_definitions_version": "tosca_simple_yaml_1_0_0", + "policy_types": { + "onap.policies.optimization.AffinityPolicy": { + "derived_from": "onap.policies.Optimization", + "version": "1.0.0", + "type_version": "1.0.0", + "properties": { + "applicableResources": { + "type": "list", + "required": true, + "entry_schema": { + "type": "string", + "constraints": [ + { + "valid_values": [ + "any", + "all" + ] + } + ] + } + }, + "affinityProperties": { + "type": "policy.data.affinityProperties_properties", + "required": true + } + } + } + }, + "data_types": { + "policy.data.affinityProperties_properties": { + "derived_from": "tosca.nodes.Root", + "version": "1.0.0", + "properties": { + "qualifier": { + "type": "string", + "constraints": [ + { + "valid_values": [ + "same", + "different" + ] + } + ] + }, + "category": { + "type": "string", + "required": true + } + } + } + } +}
\ No newline at end of file diff --git a/applications/optimization/src/test/resources/onap.policies.optimization.DistancePolicy-1.0.0.json b/applications/optimization/src/test/resources/onap.policies.optimization.DistancePolicy-1.0.0.json new file mode 100644 index 00000000..1b74c356 --- /dev/null +++ b/applications/optimization/src/test/resources/onap.policies.optimization.DistancePolicy-1.0.0.json @@ -0,0 +1,89 @@ +{ + "tosca_definitions_version": "tosca_simple_yaml_1_0_0", + "policy_types": { + "onap.policies.optimization.DistancePolicy": { + "derived_from": "onap.policies.Optimization", + "version": "1.0.0", + "properties": { + "applicableResources": { + "type": "list", + "required": true, + "entry_schema": { + "type": "string", + "constraints": [ + { + "valid_values": [ + "any", + "all" + ] + } + ] + } + }, + "distanceProperties": { + "type": "policy.data.distanceProperties_properties", + "required": true + } + } + } + }, + "data_types": { + "policy.data.distanceProperties_properties": { + "derived_from": "tosca.nodes.Root", + "properties": { + "locationInfo": { + "type": "string", + "required": true + }, + "distance": { + "type": "policy.data.distance_properties", + "required": true, + "entry_schema": { + "type": "policy.data.distance_properties" + } + } + } + }, + "policy.data.distance_properties": { + "derived_from": "tosca.nodes.Root", + "properties": { + "value": { + "type": "string", + "required": true + }, + "operator": { + "type": "list", + "required": true, + "entry_schema": { + "type": "string", + "constraints": [ + { + "valid_values": [ + "<", + "<=", + "\n", + ">=", + "=" + ] + } + ] + } + }, + "unit": { + "type": "list", + "required": true, + "entry_schema": { + "type": "string", + "constraints": [ + { + "valid_values": [ + "km" + ] + } + ] + } + } + } + } + } +}
\ No newline at end of file diff --git a/applications/optimization/src/test/resources/onap.policies.optimization.SubscriberPolicy-1.0.0.json b/applications/optimization/src/test/resources/onap.policies.optimization.SubscriberPolicy-1.0.0.json new file mode 100644 index 00000000..a239d829 --- /dev/null +++ b/applications/optimization/src/test/resources/onap.policies.optimization.SubscriberPolicy-1.0.0.json @@ -0,0 +1,43 @@ +{ + "tosca_definitions_version": "tosca_simple_yaml_1_0_0", + "policy_types": { + "onap.policies.optimization.SubscriberPolicy": { + "derived_from": "onap.policies.Optimization", + "version": "1.0.0", + "properties": { + "subscriberProperties": { + "type": "policy.data.subscriberProperties_properties", + "required": true + } + } + } + }, + "data_types": { + "policy.data.subscriberProperties_properties": { + "derived_from": "tosca.nodes.Root", + "properties": { + "subscriberName": { + "type": "list", + "required": true, + "entry_schema": { + "type": "string" + } + }, + "subscriberRole": { + "type": "list", + "required": true, + "entry_schema": { + "type": "string" + } + }, + "provStatus": { + "type": "list", + "required": true, + "entry_schema": { + "type": "string" + } + } + } + } + } +}
\ No newline at end of file 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 2d21a571..80888149 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 @@ -1,91 +1,175 @@ tosca_definitions_version: tosca_simple_yaml_1_0_0 topology_template: policies: - - - OSDF_CASABLANCA.Affinity_vCPE_1: + - + OSDF_CASABLANCA.Affinity_Default: type: onap.policies.optimization.AffinityPolicy version: 1.0.0 + type_version: 1.0.0 metadata: - policy-id: OSDF_CASABLANCA.Affinity_vCPE_1 + policy-id: OSDF_CASABLANCA.Affinity_Default policy-version: 1 properties: + scope: [] + services: [] + resources: [] + geography: [US] identity: affinity_vCPE - policyScope: [vCPE, US, INTERNATIONAL, ip, vGMuxInfra, vG] - affinityProperties: + applicableResources: any + affinityProperties: qualifier: same category: complex - policyType: zone + - + OSDF_CASABLANCA.Affinity_vCPE_0: + type: onap.policies.optimization.AffinityPolicy + version: 1.0.0 + type_version: 1.0.0 + metadata: + policy-id: OSDF_CASABLANCA.Affinity_vCPE_0 + policy-version: 1 + properties: + scope: [] + services: [vCPE] + resources: [] + geography: [US] + identity: affinity_vCPE + applicableResources: any + affinityProperties: + qualifier: different + category: complex + - + OSDF_CASABLANCA.Affinity_vCPE_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: [gold, platinum] + services: [vCPE] resources: [vGMuxInfra, vG] + geography: [US, INTERNATIONAL] + identity: affinity_vCPE + applicableResources: any + affinityProperties: + qualifier: same + category: availabilityZone - OSDF_CASABLANCA.Capacity_vG_1: type: onap.policies.optimization.Vim_fit version: 1.0.0 + type_version: 1.0.0 metadata: policy-id: OSDF_CASABLANCA.Capacity_vG_1 policy-version: 1 properties: - identity: capacity_vG - policyScope: [VCPE, US, INTERNATIONAL, ip, vG] + scope: [] + services: [vCPE] resources: [vG] - capacityProperty: + geography: [US, INTERNATIONAL] + identity: capacity_vG + applicableResources: any + capacityProperty: controller: multicloud request: "{\"vCPU\": 10, \"Memory\": {\"quantity\": {\"get_param\": \"REQUIRED_MEM\"}, \"unit\": \"GB\"}, \"Storage\": {\"quantity\": {\"get_param\": \"REQUIRED_DISK\"}, \"unit\": \"GB\"}}" - policyType: vim_fit - applicableResources: any - OSDF_CASABLANCA.Distance_vG_1: type: onap.policies.optimization.DistancePolicy version: 1.0.0 + type_version: 1.0.0 metadata: policy-id: OSDF_CASABLANCA.Distance_vG_1 policy-version: 1 properties: - distanceProperties: + scope: [platinum] + services: [vCPE] + resources: [vG] + geography: [US, INTERNATIONAL] + identity: distance-vG + applicableResources: any + distanceProperties: locationInfo: customer_loc - distance: + distance: value: 1500 operator: "<" unit: km - identity: "distance-vG" - resources: [vG] - policyScope: [vCPE, US, INTERNATIONAL, ip, vG] - policyType: distance_to_location - applicableResources: any - OSDF_CASABLANCA.hpa_policy_vG_1: type: onap.policies.optimization.HpaPolicy version: 1.0.0 + type_version: 1.0.0 metadata: policy-id: OSDF_CASABLANCA.hpa_policy_vG_1 policy-version: 1 properties: + scope: [] + services: [vCPE] resources: [vG] - identity: "hpa-vG" - policyScope: [vCPE, US, INTERNATIONAL, ip, vG] - policyType: hpa - # NONE OF THE FLAVORFEATURES CAME OUT RIGHT + 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: 6 + operator: ['>='] + unit: "" + - hpa-attribute-key: virtualMemSize + hpa-attribute-value: 4 + 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.queryPolicy_vCPE: type: onap.policies.optimization.QueryPolicy version: 1.0.0 + type_version: 1.0.0 metadata: policy-id: OSDF_CASABLANCA.queryPolicy_vCPE policy-version: 1 properties: - queryProperties: - - + scope: [] + services: [vCPE] + resources: [vGMuxInfra, vG] + geography: [US, INTERNATIONAL] + identity: vCPE_Query_Policy + queryProperties: + - attribute: locationId attribute_location: customerLocation value: "" - - + - attribute: id attribute_location: "vpnInfo.vpnId" value: "" - - + - attribute: upstreamBW attribute_location: "vpnInfo.upstreamBW" value: "" - - + - attribute: customerLatitude attribute_location: customerLatitude value: 1.1 @@ -93,45 +177,56 @@ topology_template: attribute: customerLongitude attribute_location: customerLongitude value: 2.2 - serviceName: vCPE - policyScope: [vCPE, US, INTERNATIONAL, ip, vGMuxInfra, vG] - policyType: request_param_query - identity: vCPE_Query_Policy - - OSDF_CASABLANCA.SubscriberPolicy_v1: type: onap.policies.optimization.SubscriberPolicy version: 1.0.0 + type_version: 1.0.0 metadata: policy-id: OSDF_CASABLANCA.SubscriberPolicy_v1 policy-version: 1 properties: + scope: [] + services: [vCPE] identity: subscriber_vCPE - policyScope: [vCPE, subscriber_x, subscriber_y, subscriberPolicy] - properties: + properties: subscriberName: [subscriber_x, subscriber_y] - subscriberRole: ["PVT Homing"] + subscriberRole: [platinum] + provStatus: [CAPPED] + - + OSDF_CASABLANCA.SubscriberPolicy_v2: + type: onap.policies.optimization.SubscriberPolicy + version: 1.0.0 + type_version: 1.0.0 + metadata: + policy-id: OSDF_CASABLANCA.SubscriberPolicy_v2 + policy-version: 1 + properties: + scope: [] + services: [vCPE] + identity: subscriber_vCPE + properties: + subscriberName: [subscriber_a, subscriber_b] + subscriberRole: [gold] provStatus: [CAPPED] - policyType: subscriberPolicy - serviceName: vCPE - OSDF_CASABLANCA.vnfPolicy_vG: type: onap.policies.optimization.VnfPolicy version: 1.0.0 + type_version: 1.0.0 metadata: policy-id: OSDF_CASABLANCA.vnfPolicy_vG policy-version: 1 properties: - identity: vnf_vG - policyScope: [vCPE, US, INTERNATIONAL, ip, vG] - policyType: vnfPolicy + scope: [] + services: [vCPE] resources: [vG] + geography: [US, INTERNATIONAL] + identity: vnf_vG applicableResources: any - vnfProperties: - - + vnfProperties: + - inventoryProvider: aai serviceType: "" - inventoryType: cloud + inventoryType: cloudRegionId customerId: "" - orchestrationStatus: "" - equipmentRole: ""
\ No newline at end of file |