"preloadedPolicyTypes/onap.policies.optimization.QueryPolicy.json",
"preloadedPolicyTypes/onap.policies.optimization.SubscriberPolicy.json",
"preloadedPolicyTypes/onap.policies.optimization.Vim_fit.json",
- "preloadedPolicyTypes/onap.policies.optimization.VnfPolicy.json"
+ "preloadedPolicyTypes/onap.policies.optimization.VnfPolicy.json",
+ "preloadedPolicyTypes/onap.policies.controlloop.guard.Blacklist.json",
+ "preloadedPolicyTypes/onap.policies.controlloop.guard.FrequencyLimiter.json",
+ "preloadedPolicyTypes/onap.policies.controlloop.guard.MinMax.json",
+ "preloadedPolicyTypes/onap.policies.controlloop.Operational.json"
};
/**
--- /dev/null
+{
+ "tosca_definitions_version": "tosca_simple_yaml_1_0_0",
+ "policy_types": [
+ {
+ "onap.policies.controlloop.Operational": {
+ "derived_from": "tosca.policies.Root",
+ "version": "1.0.0",
+ "description": "Operational Policy for Control Loops"
+ }
+ }
+ ]
+}
\ No newline at end of file
--- /dev/null
+{
+ "tosca_definitions_version": "tosca_simple_yaml_1_0_0",
+ "policy_types": [
+ {
+ "onap.policies.controlloop.Guard": {
+ "derived_from": "tosca.policies.Root",
+ "version": "1.0.0",
+ "description": "Guard Policies for Control Loop Operational Policies"
+ }
+ },
+ {
+ "onap.policies.controlloop.guard.Blacklist": {
+ "derived_from": "onap.policies.controlloop.Guard",
+ "version": "1.0.0",
+ "description": "Supports blacklist of VNF's from performing control loop actions on.",
+ "properties": {
+ "blacklist_policy": {
+ "type": "map",
+ "description": null,
+ "entry_schema": {
+ "type": "onap.datatypes.guard.Blacklist"
+ }
+ }
+ }
+ }
+ }
+ ],
+ "data_types": [
+ {
+ "onap.datatypes.guard.Blacklist": {
+ "derived_from": "tosca.datatypes.Root",
+ "properties": {
+ "actor": {
+ "type": "string",
+ "description": "Specifies the Actor",
+ "required": true
+ },
+ "recipe": {
+ "type": "string",
+ "description": "Specified the Recipe",
+ "required": true
+ },
+ "time_range": {
+ "type": "tosca.datatypes.TimeInterval",
+ "description": "An optional range of time during the day the blacklist is valid for.",
+ "required": false
+ },
+ "controlLoopName": {
+ "type": "string",
+ "description": "An optional specific control loop to apply this guard to.",
+ "required": false
+ },
+ "blacklist": {
+ "type": "list",
+ "description": "List of VNF's",
+ "required": true
+ }
+ }
+ }
+ }
+ ]
+}
\ No newline at end of file
--- /dev/null
+{
+ "tosca_definitions_version": "tosca_simple_yaml_1_0_0",
+ "policy_types": [
+ {
+ "onap.policies.controlloop.Guard": {
+ "derived_from": "tosca.policies.Root",
+ "version": "1.0.0",
+ "description": "Guard Policies for Control Loop Operational Policies"
+ }
+ },
+ {
+ "onap.policies.controlloop.guard.FrequencyLimiter": {
+ "derived_from": "onap.policies.controlloop.Guard",
+ "version": "1.0.0",
+ "description": "Supports limiting the frequency of actions being taken by a Actor.",
+ "properties": {
+ "frequency_policy": {
+ "type": "map",
+ "description": null,
+ "entry_schema": {
+ "type": "onap.datatypes.guard.FrequencyLimiter"
+ }
+ }
+ }
+ }
+ }
+ ],
+ "data_types": [
+ {
+ "onap.datatypes.guard.FrequencyLimiter": {
+ "derived_from": "tosca.datatypes.Root",
+ "properties": {
+ "actor": {
+ "type": "string",
+ "description": "Specifies the Actor",
+ "required": true
+ },
+ "recipe": {
+ "type": "string",
+ "description": "Specified the Recipe",
+ "required": true
+ },
+ "time_window": {
+ "type": "scalar-unit.time",
+ "description": "The time window to count the actions against.",
+ "required": true
+ },
+ "limit": {
+ "type": "integer",
+ "description": "The limit",
+ "required": true,
+ "constraints": [
+ {
+ "greater_than": 0
+ }
+ ]
+ },
+ "time_range": {
+ "type": "tosca.datatypes.TimeInterval",
+ "description": "An optional range of time during the day the frequency is valid for.",
+ "required": false
+ },
+ "controlLoopName": {
+ "type": "string",
+ "description": "An optional specific control loop to apply this guard to.",
+ "required": false
+ },
+ "target": {
+ "type": "string",
+ "description": "An optional specific VNF to apply this guard to.",
+ "required": false
+ }
+ }
+ }
+ }
+ ]
+}
\ No newline at end of file
--- /dev/null
+{
+ "policy_types": [
+ {
+ "onap.policies.controlloop.Guard": {
+ "derived_from": "tosca.policies.Root",
+ "version": "1.0.0",
+ "description": "Guard Policies for Control Loop Operational Policies"
+ }
+ },
+ {
+ "onap.policies.controlloop.guard.MinMax": {
+ "derived_from": "onap.policies.controlloop.Guard",
+ "version": "1.0.0",
+ "description": "Supports Min/Max number of VF Modules",
+ "properties": {
+ "minmax_policy": {
+ "type": "map",
+ "description": null,
+ "entry_schema": {
+ "type": "onap.datatypes.guard.MinMax"
+ }
+ }
+ }
+ }
+ }
+ ],
+ "data_types": [
+ {
+ "onap.datatypes.guard.MinMax": {
+ "derived_from": "tosca.datatypes.Root",
+ "properties": {
+ "actor": {
+ "type": "string",
+ "description": "Specifies the Actor",
+ "required": true
+ },
+ "recipe": {
+ "type": "string",
+ "description": "Specified the Recipe",
+ "required": true
+ },
+ "time_range": {
+ "type": "tosca.datatypes.TimeInterval",
+ "description": "An optional range of time during the day the Min/Max limit is valid for.",
+ "required": false
+ },
+ "controlLoopName": {
+ "type": "string",
+ "description": "An optional specific control loop to apply this guard to.",
+ "required": false
+ },
+ "min_vf_module_instances": {
+ "type": "integer",
+ "required": true,
+ "description": "The minimum instances of this VF-Module"
+ },
+ "max_vf_module_instances": {
+ "type": "integer",
+ "required": false,
+ "description": "The maximum instances of this VF-Module"
+ }
+ }
+ }
+ }
+ ]
+}
\ No newline at end of file
};
private String[] toscaPolicyTypeResourceNames = {
- "policytypes/onap.policy.monitoring.cdap.tca.hi.lo.app.json",
+ "policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app.json",
"policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server.json"
};
main = startApiService(true);
for (String resrcName : legacyGuardPolicyResourceNames) {
Response rawResponse = createGuardPolicy(GUARD_POLICIES, resrcName, true);
- assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
+ assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
}
}).doesNotThrowAnyException();
}
main = startApiService(true);
for (String resrcName : legacyOperationalPolicyResourceNames) {
Response rawResponse = createOperationalPolicy(OPS_POLICIES, resrcName, true);
- assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
+ assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
}
}).doesNotThrowAnyException();
}
main = startApiService(false);
for (String resrcName : legacyGuardPolicyResourceNames) {
Response rawResponse = createGuardPolicy(GUARD_POLICIES, resrcName, false);
- assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
+ assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
}
}).doesNotThrowAnyException();
}
main = startApiService(false);
for (String resrcName : legacyOperationalPolicyResourceNames) {
Response rawResponse = createOperationalPolicy(OPS_POLICIES, resrcName, false);
- assertEquals(Response.Status.OK.getStatusCode(), rawResponse.getStatus());
+ assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), rawResponse.getStatus());
}
}).doesNotThrowAnyException();
}
import org.onap.policy.common.utils.resources.ResourceUtils;
import org.onap.policy.models.base.PfModelException;
import org.onap.policy.models.provider.PolicyModelsProviderParameters;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
import org.onap.policy.models.tosca.legacy.concepts.LegacyGuardPolicyInput;
import org.onap.policy.models.tosca.legacy.concepts.LegacyGuardPolicyOutput;
public class TestLegacyGuardPolicyProvider {
private static LegacyGuardPolicyProvider guardPolicyProvider;
+ private static PolicyTypeProvider policyTypeProvider;
private static PolicyModelsProviderParameters providerParams;
private static ApiParameterGroup apiParamGroup;
private static StandardCoder standardCoder;
private static final String POLICY_RESOURCE = "policies/vDNS.policy.guard.frequency.input.json";
+ private static final String POLICY_TYPE_RESOURCE =
+ "policytypes/onap.policies.controlloop.guard.FrequencyLimiter.json";
+ private static final String POLICY_TYPE_ID = "onap.policies.controlloop.guard.FrequencyLimiter:1.0.0";
+ private static final String POLICY_ID = "guard.frequency.scaleout:1.0.0";
/**
* Initializes parameters.
apiParamGroup = new ApiParameterGroup("ApiGroup", null, providerParams);
ParameterService.register(apiParamGroup, true);
guardPolicyProvider = new LegacyGuardPolicyProvider();
+ policyTypeProvider = new PolicyTypeProvider();
}
/**
public static void tearDown() throws PfModelException {
guardPolicyProvider.close();
+ policyTypeProvider.close();
ParameterService.deregister(apiParamGroup);
}
@Test
public void testCreateGuardPolicy() {
+ assertThatThrownBy(() -> {
+ String policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
+ LegacyGuardPolicyInput policyToCreate = standardCoder.decode(policyString, LegacyGuardPolicyInput.class);
+ guardPolicyProvider.createGuardPolicy(policyToCreate);
+ }).hasMessage("policy type " + POLICY_TYPE_ID + " for policy " + POLICY_ID + " does not exist");
+
+ assertThatCode(() -> {
+ String policyTypeString = ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE);
+ ToscaServiceTemplate policyTypeServiceTemplate =
+ standardCoder.decode(policyTypeString, ToscaServiceTemplate.class);
+ policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
+ }).doesNotThrowAnyException();
+
assertThatCode(() -> {
String policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
LegacyGuardPolicyInput policyToCreate = standardCoder.decode(policyString, LegacyGuardPolicyInput.class);
guardPolicyProvider.deleteGuardPolicy("dummy", "dummy");
}).hasMessage("no policy found for policy ID: dummy");
+ assertThatCode(() -> {
+ String policyTypeString = ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE);
+ ToscaServiceTemplate policyTypeServiceTemplate =
+ standardCoder.decode(policyTypeString, ToscaServiceTemplate.class);
+ policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
+ }).doesNotThrowAnyException();
+
assertThatCode(() -> {
String policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
LegacyGuardPolicyInput policyToCreate = standardCoder.decode(policyString, LegacyGuardPolicyInput.class);
assertThatThrownBy(() -> {
guardPolicyProvider.deleteGuardPolicy("guard.frequency.scaleout", "1.0.0");
}).hasMessage("no policy found for policy ID: guard.frequency.scaleout");
+
+ assertThatCode(() -> {
+ policyTypeProvider.deletePolicyType("onap.policies.controlloop.guard.FrequencyLimiter", "1.0.0");
+ }).doesNotThrowAnyException();
+
}
}
import org.onap.policy.common.utils.resources.ResourceUtils;
import org.onap.policy.models.base.PfModelException;
import org.onap.policy.models.provider.PolicyModelsProviderParameters;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
import org.onap.policy.models.tosca.legacy.concepts.LegacyOperationalPolicy;
/**
public class TestLegacyOperationalPolicyProvider {
private static LegacyOperationalPolicyProvider operationalPolicyProvider;
+ private static PolicyTypeProvider policyTypeProvider;
private static PolicyModelsProviderParameters providerParams;
private static ApiParameterGroup apiParamGroup;
private static StandardCoder standardCoder;
private static final String POLICY_RESOURCE = "policies/vCPE.policy.operational.input.json";
+ private static final String POLICY_TYPE_RESOURCE = "policytypes/onap.policies.controlloop.Operational.json";
+ private static final String POLICY_TYPE_ID = "onap.policies.controlloop.Operational:1.0.0";
+ private static final String POLICY_ID = "operational.restart:1.0.0";
/**
* Initializes parameters.
apiParamGroup = new ApiParameterGroup("ApiGroup", null, providerParams);
ParameterService.register(apiParamGroup, true);
operationalPolicyProvider = new LegacyOperationalPolicyProvider();
+ policyTypeProvider = new PolicyTypeProvider();
}
/**
public static void tearDown() throws PfModelException {
operationalPolicyProvider.close();
+ policyTypeProvider.close();
ParameterService.deregister(apiParamGroup);
}
@Test
public void testCreateOperationalPolicy() {
+ assertThatThrownBy(() -> {
+ String policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
+ LegacyOperationalPolicy policyToCreate = standardCoder.decode(policyString, LegacyOperationalPolicy.class);
+ operationalPolicyProvider.createOperationalPolicy(policyToCreate);
+ }).hasMessage("policy type " + POLICY_TYPE_ID + " for policy " + POLICY_ID + " does not exist");
+
+ assertThatCode(() -> {
+ String policyTypeString = ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE);
+ ToscaServiceTemplate policyTypeServiceTemplate =
+ standardCoder.decode(policyTypeString, ToscaServiceTemplate.class);
+ policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
+ }).doesNotThrowAnyException();
+
assertThatCode(() -> {
String policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
LegacyOperationalPolicy policyToCreate = standardCoder.decode(policyString, LegacyOperationalPolicy.class);
operationalPolicyProvider.deleteOperationalPolicy("dummy", "dummy");
}).hasMessage("no policy found for policy ID: dummy");
+ assertThatCode(() -> {
+ String policyTypeString = ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE);
+ ToscaServiceTemplate policyTypeServiceTemplate =
+ standardCoder.decode(policyTypeString, ToscaServiceTemplate.class);
+ policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
+ }).doesNotThrowAnyException();
+
assertThatCode(() -> {
String policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
LegacyOperationalPolicy policyToCreate = standardCoder.decode(policyString, LegacyOperationalPolicy.class);
assertThatThrownBy(() -> {
operationalPolicyProvider.deleteOperationalPolicy("operational.restart", "1.0.0");
}).hasMessage("no policy found for policy ID: operational.restart");
+
+ assertThatCode(() -> {
+ policyTypeProvider.deletePolicyType("onap.policies.controlloop.Operational", "1.0.0");
+ }).doesNotThrowAnyException();
}
}
private static StandardCoder standardCoder;
private static final String POLICY_RESOURCE = "policies/vCPE.policy.monitoring.input.tosca.json";
- private static final String POLICY_TYPE_RESOURCE = "policytypes/onap.policy.monitoring.cdap.tca.hi.lo.app.json";
+ private static final String POLICY_TYPE_RESOURCE = "policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app.json";
private static final String POLICY_RESOURCE_WITH_BAD_POLICYTYPE_ID = "policies/vCPE.policy.bad.policytypeid.json";
private static final String POLICY_RESOURCE_WITH_BAD_POLICYTYPE_VERSION =
"policies/vCPE.policy.bad.policytypeversion.json";
private static StandardCoder standardCoder;
private static final String POLICY_RESOURCE = "policies/vCPE.policy.monitoring.input.tosca.json";
- private static final String POLICY_TYPE_RESOURCE = "policytypes/onap.policy.monitoring.cdap.tca.hi.lo.app.json";
+ private static final String POLICY_TYPE_RESOURCE = "policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app.json";
/**
* Initializes parameters.
--- /dev/null
+{
+ "tosca_definitions_version": "tosca_simple_yaml_1_0_0",
+ "policy_types": [
+ {
+ "onap.policies.controlloop.Operational": {
+ "derived_from": "tosca.policies.Root",
+ "version": "1.0.0",
+ "description": "Operational Policy for Control Loops"
+ }
+ }
+ ]
+}
\ No newline at end of file
--- /dev/null
+{
+ "tosca_definitions_version": "tosca_simple_yaml_1_0_0",
+ "policy_types": [
+ {
+ "onap.policies.controlloop.Guard": {
+ "derived_from": "tosca.policies.Root",
+ "version": "1.0.0",
+ "description": "Guard Policies for Control Loop Operational Policies"
+ }
+ },
+ {
+ "onap.policies.controlloop.guard.FrequencyLimiter": {
+ "derived_from": "onap.policies.controlloop.Guard",
+ "version": "1.0.0",
+ "description": "Supports limiting the frequency of actions being taken by a Actor.",
+ "properties": {
+ "frequency_policy": {
+ "type": "map",
+ "description": null,
+ "entry_schema": {
+ "type": "onap.datatypes.guard.FrequencyLimiter"
+ }
+ }
+ }
+ }
+ }
+ ],
+ "data_types": [
+ {
+ "onap.datatypes.guard.FrequencyLimiter": {
+ "derived_from": "tosca.datatypes.Root",
+ "properties": {
+ "actor": {
+ "type": "string",
+ "description": "Specifies the Actor",
+ "required": true
+ },
+ "recipe": {
+ "type": "string",
+ "description": "Specified the Recipe",
+ "required": true
+ },
+ "time_window": {
+ "type": "scalar-unit.time",
+ "description": "The time window to count the actions against.",
+ "required": true
+ },
+ "limit": {
+ "type": "integer",
+ "description": "The limit",
+ "required": true,
+ "constraints": [
+ {
+ "greater_than": 0
+ }
+ ]
+ },
+ "time_range": {
+ "type": "tosca.datatypes.TimeInterval",
+ "description": "An optional range of time during the day the frequency is valid for.",
+ "required": false
+ },
+ "controlLoopName": {
+ "type": "string",
+ "description": "An optional specific control loop to apply this guard to.",
+ "required": false
+ },
+ "target": {
+ "type": "string",
+ "description": "An optional specific VNF to apply this guard to.",
+ "required": false
+ }
+ }
+ }
+ }
+ ]
+}
\ No newline at end of file