From b66a56aed5774e59c693d7cfd22b29512e293458 Mon Sep 17 00:00:00 2001 From: jhh Date: Tue, 9 Jun 2020 17:11:36 -0500 Subject: do strict validation before domain conversion need to perform a validation pass as the validation combined with putting a domain model object tree together run into problems when dealing with integers that are passed as strings. Issue-ID: POLICY-2577 Signed-off-by: jhh Change-Id: I06a2b6e8dc7e0442c2503b6d978deddbf652d830 Signed-off-by: jhh --- .../drools/lifecycle/LifecycleStateRunning.java | 2 +- .../drools/lifecycle/LifecycleStateActiveTest.java | 25 ++++++++++++--- .../tosca-policy-compliant-vcpe-bad-integer.json | 36 ++++++++++++++++++++++ 3 files changed, 58 insertions(+), 5 deletions(-) create mode 100644 feature-lifecycle/src/test/resources/tosca-policy-compliant-vcpe-bad-integer.json (limited to 'feature-lifecycle/src') diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleStateRunning.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleStateRunning.java index f762bff0..503c0c11 100644 --- a/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleStateRunning.java +++ b/feature-lifecycle/src/main/java/org/onap/policy/drools/lifecycle/LifecycleStateRunning.java @@ -168,7 +168,7 @@ public abstract class LifecycleStateRunning extends LifecycleStateDefault { continue; } - success = sync.test(controller, policy) && success; + success = fsm.getDomainMaker().isConformant(policy) && sync.test(controller, policy) && success; } return success; diff --git a/feature-lifecycle/src/test/java/org/onap/policy/drools/lifecycle/LifecycleStateActiveTest.java b/feature-lifecycle/src/test/java/org/onap/policy/drools/lifecycle/LifecycleStateActiveTest.java index 54f7d68f..54f4b6a6 100644 --- a/feature-lifecycle/src/test/java/org/onap/policy/drools/lifecycle/LifecycleStateActiveTest.java +++ b/feature-lifecycle/src/test/java/org/onap/policy/drools/lifecycle/LifecycleStateActiveTest.java @@ -28,6 +28,7 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.io.IOException; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; import java.util.ArrayList; @@ -53,6 +54,15 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifi */ public class LifecycleStateActiveTest extends LifecycleStateRunningTest { + private static final String POLICY_COMPLIANT_VCPE_BAD_INTEGER_JSON = + "src/test/resources/tosca-policy-compliant-vcpe-bad-integer.json"; + private static final String POLICY_OPERATIONAL_FIREWALL_JSON = + "src/test/resources/tosca-policy-operational-firewall.json"; + private static final String POLICY_OPERATIONAL_RESTART_V_2_JSON = + "src/test/resources/tosca-policy-operational-restart.v2.json"; + private static final String POLICY_OPERATIONAL_RESTART_JSON = + "src/test/resources/tosca-policy-operational-restart.json"; + /** * Start tests in the Active state. */ @@ -199,7 +209,7 @@ public class LifecycleStateActiveTest extends LifecycleStateRunningTest { assertEquals("w", fsm.getSubgroup()); String restartV1 = - new String(Files.readAllBytes(Paths.get("src/test/resources/tosca-policy-operational-restart.json"))); + Files.readString(Paths.get(POLICY_OPERATIONAL_RESTART_JSON), StandardCharsets.UTF_8); ToscaPolicy toscaPolicyRestartV1 = new StandardCoder().decode(restartV1, ToscaPolicy.class); update.setPolicies(Arrays.asList(toscaPolicyRestartV1)); @@ -237,7 +247,6 @@ public class LifecycleStateActiveTest extends LifecycleStateRunningTest { .decode(fsm.client.getSink().getRecentEvents()[qlength + 1], PdpStatus.class); assertEquals(new ArrayList<>(fsm.policiesMap.keySet()), cachedStatus.getPolicies()); - factPolicies = controllerSupport.getFacts(ToscaPolicy.class); assertEquals(1, factPolicies.size()); assertEquals(toscaPolicyRestartV1, factPolicies.get(0)); @@ -275,7 +284,7 @@ public class LifecycleStateActiveTest extends LifecycleStateRunningTest { // deploy a new version of the operational.restart policy String restartV2 = - new String(Files.readAllBytes(Paths.get("src/test/resources/tosca-policy-operational-restart.v2.json"))); + Files.readString(Paths.get(POLICY_OPERATIONAL_RESTART_V_2_JSON), StandardCharsets.UTF_8); ToscaPolicy toscaPolicyRestartV2 = new StandardCoder().decode(restartV2, ToscaPolicy.class); update.setPolicies(Arrays.asList(toscaPolicyRestartV2)); assertTrue(fsm.update(update)); @@ -294,7 +303,7 @@ public class LifecycleStateActiveTest extends LifecycleStateRunningTest { // deploy another policy : firewall String firewall = - new String(Files.readAllBytes(Paths.get("src/test/resources/tosca-policy-operational-firewall.json"))); + Files.readString(Paths.get(POLICY_OPERATIONAL_FIREWALL_JSON), StandardCharsets.UTF_8); ToscaPolicy toscaPolicyFirewall = new StandardCoder().decode(firewall, ToscaPolicy.class); update.setPolicies(Arrays.asList(toscaPolicyRestartV2, toscaPolicyFirewall)); assertTrue(fsm.update(update)); @@ -320,6 +329,14 @@ public class LifecycleStateActiveTest extends LifecycleStateRunningTest { assertEquals(PdpState.ACTIVE, fsm.state()); assertEquals(interval, fsm.getStatusTimerSeconds()); + // bad policy deployment + + String badIntegerPolicy = + Files.readString(Paths.get(POLICY_COMPLIANT_VCPE_BAD_INTEGER_JSON), StandardCharsets.UTF_8); + ToscaPolicy toscaPolicyRestartBad = new StandardCoder().decode(badIntegerPolicy, ToscaPolicy.class); + update.setPolicies(Arrays.asList(toscaPolicyRestartBad)); + assertFalse(fsm.update(update)); + assertTrue(controllerSupport.getController().getDrools().delete(ToscaPolicy.class)); fsm.shutdown(); diff --git a/feature-lifecycle/src/test/resources/tosca-policy-compliant-vcpe-bad-integer.json b/feature-lifecycle/src/test/resources/tosca-policy-compliant-vcpe-bad-integer.json new file mode 100644 index 00000000..3ff7dbb2 --- /dev/null +++ b/feature-lifecycle/src/test/resources/tosca-policy-compliant-vcpe-bad-integer.json @@ -0,0 +1,36 @@ +{ + "type": "onap.policies.controlloop.operational.common.Drools", + "type_version": "1.0.0", + "name": "vcpe.timeout.integer.as.string", + "version": "1.0.0", + "metadata": { + "policy-id": "vcpe.timeout.integer.as.string" + }, + "properties": { + "id": "ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e", + "timeout": "3600", + "abatement": true, + "trigger": "unique-policy-id-1-restart", + "operations": [ + { + "id": "unique-policy-id-1-restart", + "description": "Restart the VM", + "operation": { + "actor": "APPC", + "operation": "Restart", + "target": { + "targetType": "VNF" + } + }, + "timeout": "1200", + "retries": 3, + "success": "final_success", + "failure": "final_failure", + "failure_timeout": "final_failure_timeout", + "failure_retries": "final_failure_retries", + "failure_exception": "final_failure_exception", + "failure_guard": "final_failure_guard" + } + ] + } +} -- cgit 1.2.3-korg