From d6f916f52c57b0ca00a6d7c48910a3462e724793 Mon Sep 17 00:00:00 2001 From: rameshiyer27 Date: Wed, 23 Feb 2022 19:07:28 +0000 Subject: Add support for retrieving apex-policyModel from metadata Apex policyModel had been provided under policy properties for apex-pdp. Additional support included to retrieve the policyModel from metadata if PAP supplied it as metadataSet. Issue-ID: POLICY-3834 Signed-off-by: zrrmmua Change-Id: Ic810d78cf01c507c5b4d167f28ae6f7729132238 --- .../service/parameters/ApexParameterHandler.java | 21 ++++- .../engine/parameters/ApexParametersTest.java | 48 +++++++++- .../parameters/policyModelFromMetadata.json | 89 +++++++++++++++++ .../parameters/policyModelFromProperties.json | 85 +++++++++++++++++ .../resources/parameters/policyModelMultiple.json | 105 +++++++++++++++++++++ 5 files changed, 345 insertions(+), 3 deletions(-) create mode 100644 services/services-engine/src/test/resources/parameters/policyModelFromMetadata.json create mode 100644 services/services-engine/src/test/resources/parameters/policyModelFromProperties.json create mode 100644 services/services-engine/src/test/resources/parameters/policyModelMultiple.json diff --git a/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/ApexParameterHandler.java b/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/ApexParameterHandler.java index 2e97c54fc..72cbd2800 100644 --- a/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/ApexParameterHandler.java +++ b/services/services-engine/src/main/java/org/onap/policy/apex/service/parameters/ApexParameterHandler.java @@ -29,7 +29,9 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import java.nio.file.Files; import java.nio.file.Paths; +import java.util.Map; import java.util.Map.Entry; +import java.util.Optional; import org.onap.policy.apex.core.engine.EngineParameters; import org.onap.policy.apex.model.basicmodel.concepts.ApexException; import org.onap.policy.apex.service.engine.main.ApexCommandLineArguments; @@ -63,6 +65,7 @@ public class ApexParameterHandler { private static final String POLICY_TYPE_IMPL = "policy_type_impl"; private static final String APEX_POLICY_MODEL = "apexPolicyModel"; + private static final String METADATA_SET = "metadataSet"; private String policyModel; private String apexConfig; @@ -171,14 +174,28 @@ public class ApexParameterHandler { apexConfigJsonObject.add(property.getKey(), body); } apexConfig = standardCoder.encode(apexConfigJsonObject); + + // populate policyModel from metadata if present + Optional> metadata = + Optional.ofNullable(toscaServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0) + .entrySet().iterator().next().getValue().getMetadata()); + if (metadata.isPresent() && metadata.get().containsKey(METADATA_SET)) { + JsonElement body = standardCoder.convert(metadata.get(), JsonObject.class); + policyModel = extractPolicyModel(standardCoder, body); + } } catch (Exception e) { throw new ApexException("Parsing config and model from the tosca policy failed.", e); } } private String extractPolicyModel(StandardCoder standardCoder, JsonElement body) throws CoderException { - // Check for "policy_type_impl" - JsonElement policyTypeImplObject = ((JsonObject) body).get(POLICY_TYPE_IMPL); + JsonElement policyTypeImplObject = null; + // Check for "policy_type_impl, if not present check for "metadataSet" + if (body.getAsJsonObject().has(POLICY_TYPE_IMPL)) { + policyTypeImplObject = ((JsonObject) body).get(POLICY_TYPE_IMPL); + } else if (body.getAsJsonObject().has(METADATA_SET)) { + policyTypeImplObject = ((JsonObject) body).get(METADATA_SET); + } if (null == policyTypeImplObject) { return null; } diff --git a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/parameters/ApexParametersTest.java b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/parameters/ApexParametersTest.java index a0169d7e3..dd76374d8 100644 --- a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/parameters/ApexParametersTest.java +++ b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/parameters/ApexParametersTest.java @@ -1,7 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2018 Ericsson. All rights reserved. - * Modifications Copyright (C) 2020 Nordix Foundation. + * Modifications Copyright (C) 2020,2022 Nordix Foundation. * Modifications Copyright (C) 2020 Bell Canada. All rights reserved. * Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved. * ================================================================================ @@ -23,6 +23,7 @@ package org.onap.policy.apex.service.engine.parameters; +import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -78,6 +79,51 @@ public class ApexParametersTest { .hasMessageContaining("\"value\" value \"null\" INVALID, is blank"); } + @Test + public void testPolicyModelFromMetadata() throws ParameterException { + // Policy Models provided only in metadata. + final String[] args = {"-p", "src/test/resources/parameters/policyModelFromMetadata.json"}; + final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args); + + ApexParameters parameters = new ApexParameterHandler().getParameters(arguments); + + assertThat(parameters.getEngineServiceParameters().getPolicyModel()).isNotEmpty(); + assertThat(parameters.getEngineServiceParameters().getPolicyModel()) + .contains("{\"key\":{\"name\":\"dummy key1 provided in metadata\",\"version\":\"0.0.1\"},\"keyInformation\"" + + ":{\"key\":{\"name\":\"dummy key2 provided in metadata\",\"version\":\"0.0.1\"}}," + + "\"threshold\":3.15,\"state\":\"passive\"}"); + } + + @Test + public void testPolicyModelFromProperties() throws ParameterException { + // Policy models provided in properties under EngineServiceParameters for backward compatibility + final String[] args = {"-p", "src/test/resources/parameters/policyModelFromProperties.json"}; + final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args); + + ApexParameters parameters = new ApexParameterHandler().getParameters(arguments); + + assertThat(parameters.getEngineServiceParameters().getPolicyModel()).isNotEmpty(); + assertThat(parameters.getEngineServiceParameters().getPolicyModel()) + .contains("{\"key\":{\"name\":\"dummy key1 provided in properties\",\"version\":\"0.0.1\"}," + + "\"keyInformation\":{\"key\":{\"name\":\"dummy key2 provided in properties\"," + + "\"version\":\"0.0.1\"}},\"threshold\":3.15,\"state\":\"passive\"}"); + } + + @Test + public void testPolicyModelFromPropertiesAndMetadata() throws ParameterException { + // Policy models provided in both properties and in metadata. policyModels in metadata takes precedence + final String[] args = {"-p", "src/test/resources/parameters/policyModelMultiple.json"}; + final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args); + + ApexParameters parameters = new ApexParameterHandler().getParameters(arguments); + + assertThat(parameters.getEngineServiceParameters().getPolicyModel()).isNotEmpty(); + assertThat(parameters.getEngineServiceParameters().getPolicyModel()) + .contains("{\"key\":{\"name\":\"dummy key1 provided in metadata\",\"version\":\"0.0.1\"}," + + "\"keyInformation\":{\"key\":{\"name\":\"dummy key2 provided in metadata\"," + + "\"version\":\"0.0.1\"}},\"threshold\":3.15,\"state\":\"passive\"}"); + } + @Test public void testGettersSetters() { ApexParameters pars = new ApexParameters(); diff --git a/services/services-engine/src/test/resources/parameters/policyModelFromMetadata.json b/services/services-engine/src/test/resources/parameters/policyModelFromMetadata.json new file mode 100644 index 000000000..d7423bce9 --- /dev/null +++ b/services/services-engine/src/test/resources/parameters/policyModelFromMetadata.json @@ -0,0 +1,89 @@ +{ + "tosca_definitions_version": "tosca_simple_yaml_1_1_0", + "topology_template": { + "policies": [ + { + "onap.policies.apex.Simplecontrolloop": { + "type": "onap.policies.native.Apex", + "type_version": "1.0.0", + "name": "onap.policies.apex.Simplecontrolloop", + "version": "1.0.0", + "metadata": { + "metadataSetName": "dummyMetadataSet", + "metadataSetVersion": "1.0.0", + "metadataSet": { + "apexPolicyModel": { + "key": { + "name": "dummy key1 provided in metadata", + "version": "0.0.1" + }, + "keyInformation": { + "key": { + "name": "dummy key2 provided in metadata", + "version": "0.0.1" + } + }, + "threshold": 3.15, + "state": "passive" + } + } + }, + "properties": { + "javaProperties": [ + [ + "property0", + "property0Value" + ], + [ + "property1", + "property1Value" + ] + ], + "engineServiceParameters": { + "name": "MyApexEngine", + "version": "0.0.1", + "id": 45, + "instanceCount": 345, + "deploymentPort": 65522, + "engineParameters": { + "contextParameters": { + "parameterClassName": "org.onap.policy.apex.context.parameters.ContextParameters" + }, + "executorParameters": { + "JAVASCRIPT": { + "parameterClassName": "org.onap.policy.apex.service.engine.parameters.dummyclasses.SuperDooperExecutorParameters" + } + } + } + }, + "eventOutputParameters": { + "FirstProducer": { + "carrierTechnologyParameters": { + "carrierTechnology": "FILE", + "parameters": { + "fileName": "target/aaa.json" + } + }, + "eventProtocolParameters": { + "eventProtocol": "JSON" + } + } + }, + "eventInputParameters": { + "MySuperDooperConsumer1": { + "carrierTechnologyParameters": { + "carrierTechnology": "SUPER_DOOPER", + "parameterClassName": "org.onap.policy.apex.service.engine.parameters.dummyclasses.SuperDooperCarrierTechnologyParameters" + }, + "eventProtocolParameters": { + "eventProtocol": "SUPER_TOK_DEL", + "parameterClassName": "org.onap.policy.apex.service.engine.parameters.dummyclasses.SuperTokenDelimitedEventProtocolParameters" + } + } + } + } + } + } + ] + } +} \ No newline at end of file diff --git a/services/services-engine/src/test/resources/parameters/policyModelFromProperties.json b/services/services-engine/src/test/resources/parameters/policyModelFromProperties.json new file mode 100644 index 000000000..77f00ac4d --- /dev/null +++ b/services/services-engine/src/test/resources/parameters/policyModelFromProperties.json @@ -0,0 +1,85 @@ +{ + "tosca_definitions_version": "tosca_simple_yaml_1_1_0", + "topology_template": { + "policies": [ + { + "onap.policies.apex.Simplecontrolloop": { + "type": "onap.policies.native.Apex", + "type_version": "1.0.0", + "name": "onap.policies.apex.Simplecontrolloop", + "version": "1.0.0", + "properties": { + "javaProperties": [ + [ + "property0", + "property0Value" + ], + [ + "property1", + "property1Value" + ] + ], + "engineServiceParameters": { + "name": "MyApexEngine", + "version": "0.0.1", + "id": 45, + "instanceCount": 345, + "deploymentPort": 65522, + "policy_type_impl": { + "apexPolicyModel": { + "key": { + "name": "dummy key1 provided in properties", + "version": "0.0.1" + }, + "keyInformation": { + "key": { + "name": "dummy key2 provided in properties", + "version": "0.0.1" + } + }, + "threshold": 3.15, + "state": "passive" + } + }, + "engineParameters": { + "contextParameters": { + "parameterClassName": "org.onap.policy.apex.context.parameters.ContextParameters" + }, + "executorParameters": { + "JAVASCRIPT": { + "parameterClassName": "org.onap.policy.apex.service.engine.parameters.dummyclasses.SuperDooperExecutorParameters" + } + } + } + }, + "eventOutputParameters": { + "FirstProducer": { + "carrierTechnologyParameters": { + "carrierTechnology": "FILE", + "parameters": { + "fileName": "target/aaa.json" + } + }, + "eventProtocolParameters": { + "eventProtocol": "JSON" + } + } + }, + "eventInputParameters": { + "MySuperDooperConsumer1": { + "carrierTechnologyParameters": { + "carrierTechnology": "SUPER_DOOPER", + "parameterClassName": "org.onap.policy.apex.service.engine.parameters.dummyclasses.SuperDooperCarrierTechnologyParameters" + }, + "eventProtocolParameters": { + "eventProtocol": "SUPER_TOK_DEL", + "parameterClassName": "org.onap.policy.apex.service.engine.parameters.dummyclasses.SuperTokenDelimitedEventProtocolParameters" + } + } + } + } + } + } + ] + } +} \ No newline at end of file diff --git a/services/services-engine/src/test/resources/parameters/policyModelMultiple.json b/services/services-engine/src/test/resources/parameters/policyModelMultiple.json new file mode 100644 index 000000000..dc1e2bc91 --- /dev/null +++ b/services/services-engine/src/test/resources/parameters/policyModelMultiple.json @@ -0,0 +1,105 @@ +{ + "tosca_definitions_version": "tosca_simple_yaml_1_1_0", + "topology_template": { + "policies": [ + { + "onap.policies.apex.Simplecontrolloop": { + "type": "onap.policies.native.Apex", + "type_version": "1.0.0", + "name": "onap.policies.apex.Simplecontrolloop", + "version": "1.0.0", + "metadata": { + "metadataSetName": "dummyMetadataSet", + "metadataSetVersion": "1.0.0", + "metadataSet": { + "apexPolicyModel": { + "key": { + "name": "dummy key1 provided in metadata", + "version": "0.0.1" + }, + "keyInformation": { + "key": { + "name": "dummy key2 provided in metadata", + "version": "0.0.1" + } + }, + "threshold": 3.15, + "state": "passive" + } + } + }, + "properties": { + "javaProperties": [ + [ + "property0", + "property0Value" + ], + [ + "property1", + "property1Value" + ] + ], + "engineServiceParameters": { + "name": "MyApexEngine", + "version": "0.0.1", + "id": 45, + "instanceCount": 345, + "deploymentPort": 65522, + "policy_type_impl": { + "apexPolicyModel": { + "key": { + "name": "dummy key1 provided in properties", + "version": "0.0.1" + }, + "keyInformation": { + "key": { + "name": "dummy key2 provided in properties", + "version": "0.0.1" + } + }, + "threshold": 3.15, + "state": "passive" + } + }, + "engineParameters": { + "contextParameters": { + "parameterClassName": "org.onap.policy.apex.context.parameters.ContextParameters" + }, + "executorParameters": { + "JAVASCRIPT": { + "parameterClassName": "org.onap.policy.apex.service.engine.parameters.dummyclasses.SuperDooperExecutorParameters" + } + } + } + }, + "eventOutputParameters": { + "FirstProducer": { + "carrierTechnologyParameters": { + "carrierTechnology": "FILE", + "parameters": { + "fileName": "target/aaa.json" + } + }, + "eventProtocolParameters": { + "eventProtocol": "JSON" + } + } + }, + "eventInputParameters": { + "MySuperDooperConsumer1": { + "carrierTechnologyParameters": { + "carrierTechnology": "SUPER_DOOPER", + "parameterClassName": "org.onap.policy.apex.service.engine.parameters.dummyclasses.SuperDooperCarrierTechnologyParameters" + }, + "eventProtocolParameters": { + "eventProtocol": "SUPER_TOK_DEL", + "parameterClassName": "org.onap.policy.apex.service.engine.parameters.dummyclasses.SuperTokenDelimitedEventProtocolParameters" + } + } + } + } + } + } + ] + } +} \ No newline at end of file -- cgit 1.2.3-korg