summaryrefslogtreecommitdiffstats
path: root/applications/optimization
diff options
context:
space:
mode:
Diffstat (limited to 'applications/optimization')
-rw-r--r--applications/optimization/pom.xml5
-rw-r--r--applications/optimization/src/main/java/org/onap/policy/xacml/pdp/application/optimization/OptimizationPdpApplication.java22
-rw-r--r--applications/optimization/src/test/java/org/onap/policy/xacml/pdp/application/optimization/OptimizationPdpApplicationTest.java26
-rw-r--r--applications/optimization/src/test/resources/onap.policies.Optimization-1.0.0.json66
-rw-r--r--applications/optimization/src/test/resources/onap.policies.optimization.AffinityPolicy-1.0.0.json54
-rw-r--r--applications/optimization/src/test/resources/onap.policies.optimization.DistancePolicy-1.0.0.json89
-rw-r--r--applications/optimization/src/test/resources/onap.policies.optimization.SubscriberPolicy-1.0.0.json43
-rw-r--r--applications/optimization/src/test/resources/vCPE.policies.optimization.input.tosca.yaml185
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