summaryrefslogtreecommitdiffstats
path: root/policy-regression-tests/policy-clamp-regression
diff options
context:
space:
mode:
authorrameshiyer27 <ramesh.murugan.iyer@est.tech>2024-02-14 10:13:16 +0000
committerrameshiyer27 <ramesh.murugan.iyer@est.tech>2024-02-28 10:44:36 +0000
commitb15eda6e03133862f071a6dc0127c3bc660aad1f (patch)
tree2465a306b7d3d5a052187e91034bf5382bbd120a /policy-regression-tests/policy-clamp-regression
parentfbfc234895c48282e2e92b44c8c8b49745e81745 (diff)
Add ACM regression test suite
Issue-ID: POLICY-4920 Signed-off-by: rameshiyer27 <ramesh.murugan.iyer@est.tech> Change-Id: Icf042b71a3faa2a83dc32dde57ddaf3d66e599d7
Diffstat (limited to 'policy-regression-tests/policy-clamp-regression')
-rw-r--r--policy-regression-tests/policy-clamp-regression/pom.xml72
-rw-r--r--policy-regression-tests/policy-clamp-regression/src/test/java/org.onap.policy.clamp.regression/AcmRegressionTests.java37
-rw-r--r--policy-regression-tests/policy-clamp-regression/src/test/java/org.onap.policy.clamp.regression/StepDefinitions.java354
-rw-r--r--policy-regression-tests/policy-clamp-regression/src/test/resources/data/AcInstantiate.json25
-rw-r--r--policy-regression-tests/policy-clamp-regression/src/test/resources/data/AcMigrateInstance.json27
-rw-r--r--policy-regression-tests/policy-clamp-regression/src/test/resources/data/AcUpdateProperty.json27
-rw-r--r--policy-regression-tests/policy-clamp-regression/src/test/resources/data/acelement-usecase1.json1498
-rw-r--r--policy-regression-tests/policy-clamp-regression/src/test/resources/data/acelement-usecase2.json1498
-rw-r--r--policy-regression-tests/policy-clamp-regression/src/test/resources/features/acm-basic-workflow.feature97
-rw-r--r--policy-regression-tests/policy-clamp-regression/src/test/resources/features/acm-migration-workflow.feature88
10 files changed, 3723 insertions, 0 deletions
diff --git a/policy-regression-tests/policy-clamp-regression/pom.xml b/policy-regression-tests/policy-clamp-regression/pom.xml
new file mode 100644
index 00000000..a9f31c97
--- /dev/null
+++ b/policy-regression-tests/policy-clamp-regression/pom.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.onap.policy.regression</groupId>
+ <artifactId>policy-regression-tests</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>policy-clamp-regression</artifactId>
+ <packaging>jar</packaging>
+
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <version.cucumber>7.15.0</version.cucumber>
+ <version.rest-assured>5.4.0</version.rest-assured>
+ <version.junit-platform>1.10.2</version.junit-platform>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>io.cucumber</groupId>
+ <artifactId>cucumber-java</artifactId>
+ <version>${version.cucumber}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>io.cucumber</groupId>
+ <artifactId>cucumber-junit-platform-engine</artifactId>
+ <version>${version.cucumber}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.junit.jupiter</groupId>
+ <artifactId>junit-jupiter</artifactId>
+ <version>${version.jupiter}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-test</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>jakarta.xml.bind</groupId>
+ <artifactId>jakarta.xml.bind-api</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>io.rest-assured</groupId>
+ <artifactId>rest-assured</artifactId>
+ <version>${version.rest-assured}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.junit.platform</groupId>
+ <artifactId>junit-platform-suite</artifactId>
+ <version>${version.junit-platform}</version>
+ <scope>test</scope>
+ </dependency>
+
+ </dependencies>
+
+</project>
diff --git a/policy-regression-tests/policy-clamp-regression/src/test/java/org.onap.policy.clamp.regression/AcmRegressionTests.java b/policy-regression-tests/policy-clamp-regression/src/test/java/org.onap.policy.clamp.regression/AcmRegressionTests.java
new file mode 100644
index 00000000..90ec0ce5
--- /dev/null
+++ b/policy-regression-tests/policy-clamp-regression/src/test/java/org.onap.policy.clamp.regression/AcmRegressionTests.java
@@ -0,0 +1,37 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2024 Nordix Foundation. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.clamp.regression;
+
+import static io.cucumber.junit.platform.engine.Constants.PLUGIN_PROPERTY_NAME;
+
+import org.junit.platform.suite.api.ConfigurationParameter;
+import org.junit.platform.suite.api.IncludeEngines;
+import org.junit.platform.suite.api.SelectClasspathResource;
+import org.junit.platform.suite.api.Suite;
+
+@Suite
+@IncludeEngines("cucumber")
+@SelectClasspathResource("features")
+@ConfigurationParameter(key = PLUGIN_PROPERTY_NAME, value = "pretty")
+public class AcmRegressionTests {
+
+
+}
diff --git a/policy-regression-tests/policy-clamp-regression/src/test/java/org.onap.policy.clamp.regression/StepDefinitions.java b/policy-regression-tests/policy-clamp-regression/src/test/java/org.onap.policy.clamp.regression/StepDefinitions.java
new file mode 100644
index 00000000..b8454592
--- /dev/null
+++ b/policy-regression-tests/policy-clamp-regression/src/test/java/org.onap.policy.clamp.regression/StepDefinitions.java
@@ -0,0 +1,354 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2024 Nordix Foundation. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.clamp.regression;
+
+import static io.restassured.config.EncoderConfig.encoderConfig;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import io.cucumber.java.en.Then;
+import io.cucumber.java.en.When;
+import io.restassured.RestAssured;
+import io.restassured.http.ContentType;
+import io.restassured.path.json.JsonPath;
+import io.restassured.response.Response;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.concurrent.TimeUnit;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+
+public class StepDefinitions {
+ private static final String acmUrl = "http://localhost:30007/";
+ private static final String username = "runtimeUser";
+ private static final String password = "zb!XztG34";
+ private static String compositionId;
+ private static String instanceId;
+ private static String targetCompositionId;
+
+ private Response response;
+
+ /**
+ * Verify ACM healthcheck.
+ */
+ @When("the acm health check endpoint is invoked {string}")
+ public void isAcmEndpointRunning(String endpoint) {
+ response = RestAssured.given()
+ .auth().basic(username, password)
+ .baseUri(acmUrl)
+ .get(endpoint);
+ }
+
+ /**
+ * Verify commissioning.
+ */
+ @When("the ACM commissioning endpoint {string} is invoked with {string} {string}")
+ public void commissioningIsAccepted(String endpoint, String filePath, String isMigration) throws IOException {
+ var jsonContent = new String(Files.readAllBytes(Path.of(filePath)));
+ response = RestAssured.given()
+ .config(RestAssured.config().encoderConfig(encoderConfig()
+ .encodeContentTypeAs("", ContentType.JSON)))
+ .auth().basic(username, password)
+ .contentType(ContentType.JSON)
+ .accept(ContentType.JSON)
+ .baseUri(acmUrl)
+ .body(jsonContent)
+ .post(endpoint);
+ var jsonPath = new JsonPath(response.getBody().asString());
+ if (Boolean.parseBoolean(isMigration)) {
+ targetCompositionId = jsonPath.getString("compositionId");
+ } else {
+ compositionId = jsonPath.getString("compositionId");
+ }
+ }
+
+ /**
+ * Register participants.
+ */
+ @When("the register participants endpoint is invoked {string}")
+ public void registerParticipants(String endpoint) {
+ response = RestAssured.given()
+ .auth().basic(username, password)
+ .baseUri(acmUrl)
+ .put(endpoint);
+ }
+
+ /**
+ * Verify priming.
+ */
+ @When("the ACM participants are primed {string} {string}")
+ public void primeTheParticipants(String endpoint, String isMigration) throws JSONException {
+ var jsonBody = new JSONObject().put("primeOrder", "PRIME");
+ response = RestAssured.given()
+ .config(RestAssured.config().encoderConfig(encoderConfig()
+ .encodeContentTypeAs("", ContentType.JSON)))
+ .auth().basic(username, password)
+ .contentType(ContentType.JSON)
+ .accept(ContentType.JSON)
+ .baseUri(acmUrl)
+ .body(jsonBody.toString())
+ .put(endpoint.replace("{compositionId}",
+ Boolean.parseBoolean(isMigration) ? targetCompositionId : compositionId));
+ }
+
+ /**
+ * Fetch composition by Id.
+ */
+ @When("the ACM composition is fetched {string}")
+ public void fetchCompositionById(String endpoint) {
+ response = RestAssured.given()
+ .auth().basic(username, password)
+ .baseUri(acmUrl)
+ .get(endpoint.replace("{compositionId}", compositionId));
+ }
+
+ /**
+ * Wait and retry requests until the keyword is present.
+ */
+ @Then("Wait and retry until the response contains the keyword {string} {string} {string}")
+ public void waitUntilKeyword(String keyword, String endpoint, String isMigration) throws InterruptedException {
+ var startTime = System.currentTimeMillis();
+ var maxWaitTime = TimeUnit.MINUTES.toMillis(2); // 2 minutes in milliseconds
+ var conditionMet = false;
+ while (!conditionMet && System.currentTimeMillis() - startTime < maxWaitTime) {
+ var jsonPath = new JsonPath(response.getBody().asString());
+ switch (keyword) {
+ case "PRIMED", "COMMISSIONED" -> {
+ conditionMet = keyword.equals(jsonPath.getString("state"));
+ if (!conditionMet) {
+ Thread.sleep(10000); // Wait for 10 second before retrying
+ fetchCompositionById(endpoint);
+ }
+ }
+ case "DEPLOYED", "UNDEPLOYED" -> {
+ conditionMet = keyword.equals(jsonPath.getString("deployState"));
+ if (!conditionMet) {
+ Thread.sleep(10000); // Wait for 10 second before retrying
+ fetchAcInstanceById(endpoint,
+ Boolean.parseBoolean(isMigration) ? targetCompositionId : compositionId);
+ }
+ }
+ default -> {
+ break;
+ }
+ }
+ }
+ assertTrue(conditionMet);
+ }
+
+
+ /**
+ * Verify AC instantiation.
+ */
+ @When("the ACM instance is created {string} with {string}")
+ public void instantiate(String endpoint, String filePath) throws IOException {
+ var jsonContent = new String(Files.readAllBytes(Path.of(filePath)));
+ response = RestAssured.given()
+ .config(RestAssured.config().encoderConfig(encoderConfig()
+ .encodeContentTypeAs("", ContentType.JSON)))
+ .auth().basic(username, password)
+ .contentType(ContentType.JSON)
+ .accept(ContentType.JSON)
+ .baseUri(acmUrl)
+ .body(jsonContent.replace("COMPOSITIONIDPLACEHOLDER", compositionId))
+ .post(endpoint.replace("{compositionId}", compositionId));
+ var jsonPath = new JsonPath(response.getBody().asString());
+ instanceId = jsonPath.getString("instanceId");
+ }
+
+ /**
+ * Verify update property.
+ */
+ @When("the AC instance property is updated {string} {string}")
+ public void updateInstanceProperty(String endpoint, String filePath) throws IOException {
+ var jsonContent = new String(Files.readAllBytes(Path.of(filePath)));
+ response = RestAssured.given()
+ .config(RestAssured.config().encoderConfig(encoderConfig()
+ .encodeContentTypeAs("", ContentType.JSON)))
+ .auth().basic(username, password)
+ .contentType(ContentType.JSON)
+ .accept(ContentType.JSON)
+ .baseUri(acmUrl)
+ .body(jsonContent.replace("COMPOSITIONIDPLACEHOLDER", compositionId)
+ .replace("INSTANCEIDPLACEHOLDER", instanceId))
+ .post(endpoint.replace("{compositionId}", compositionId));
+ var jsonPath = new JsonPath(response.getBody().asString());
+ instanceId = jsonPath.getString("instanceId");
+ }
+
+ /**
+ * Verify AC deployment.
+ */
+ @When("the AC instance is deployed {string}")
+ public void deployAcInstance(String endpoint) throws JSONException {
+ var jsonBody = new JSONObject().put("deployOrder", "DEPLOY");
+ response = RestAssured.given()
+ .config(RestAssured.config().encoderConfig(encoderConfig()
+ .encodeContentTypeAs("", ContentType.JSON)))
+ .auth().basic(username, password)
+ .contentType(ContentType.JSON)
+ .accept(ContentType.JSON)
+ .baseUri(acmUrl)
+ .body(jsonBody.toString())
+ .put(endpoint.replace("{compositionId}", compositionId)
+ .replace("{instanceId}", instanceId));
+ }
+
+ /**
+ * Fetch Ac instance by id.
+ */
+ @When("the AC instance is fetched {string} {string}")
+ public void fetchAcInstanceById(String endpoint, String isMigration) {
+ response = RestAssured.given()
+ .auth().basic(username, password)
+ .baseUri(acmUrl)
+ .get(endpoint.replace("{compositionId}",
+ Boolean.parseBoolean(isMigration) ? targetCompositionId : compositionId)
+ .replace("{instanceId}", instanceId));
+ }
+
+ /**
+ * Verify Ac undeployment.
+ */
+ @When("the AC instance is undeployed {string}")
+ public void unDeployAcInstance(String endpoint) throws JSONException {
+ var jsonBody = new JSONObject().put("deployOrder", "UNDEPLOY");
+ response = RestAssured.given()
+ .config(RestAssured.config().encoderConfig(encoderConfig()
+ .encodeContentTypeAs("", ContentType.JSON)))
+ .auth().basic(username, password)
+ .contentType(ContentType.JSON)
+ .accept(ContentType.JSON)
+ .baseUri(acmUrl)
+ .body(jsonBody.toString())
+ .put(endpoint.replace("{compositionId}", compositionId)
+ .replace("{instanceId}", instanceId));
+ }
+
+ /**
+ * Verify Ac uninstantiation.
+ */
+ @When("the ACM instance is uninstantiated {string}")
+ public void unInstantiate(String endpoint) {
+ response = RestAssured.given()
+ .auth().basic(username, password)
+ .baseUri(acmUrl)
+ .delete(endpoint.replace("{compositionId}", compositionId).replace("{instanceId}", instanceId));
+ }
+
+ /**
+ * Fetch all Ac instances for the given composition id.
+ */
+ @When("all the AC instances are fetched {string}")
+ public void fetchAllAcInstances(String endpoint) {
+ response = RestAssured.given()
+ .auth().basic(username, password)
+ .baseUri(acmUrl)
+ .get(endpoint.replace("{compositionId}", compositionId));
+ }
+
+ /**
+ * Wait and retry request until the instance list is empty in the response.
+ */
+ @Then("Wait and retry until the ac instance list is empty {string}")
+ public void waitUntilTheCondition(String endpoint) throws InterruptedException {
+ var startTime = System.currentTimeMillis();
+ var maxWaitTime = TimeUnit.MINUTES.toMillis(2); // 2 minutes in milliseconds
+ var conditionMet = false;
+ while (!conditionMet && System.currentTimeMillis() - startTime < maxWaitTime) {
+ var size = response.getBody().jsonPath().getList("automationCompositionList").size();
+ conditionMet = Integer.valueOf(0).equals(size);
+ if (!conditionMet) {
+ Thread.sleep(10000); // Wait for 10 second before retrying
+ fetchAllAcInstances(endpoint);
+ }
+ }
+ }
+
+ /**
+ * Verify de-priming.
+ */
+ @When("the ACM participants are deprimed {string}")
+ public void deprimeTheParticipants(String endpoint) throws JSONException {
+ var jsonBody = new JSONObject().put("primeOrder", "DEPRIME");
+ response = RestAssured.given()
+ .config(RestAssured.config().encoderConfig(encoderConfig()
+ .encodeContentTypeAs("", ContentType.JSON)))
+ .auth().basic(username, password)
+ .contentType(ContentType.JSON)
+ .accept(ContentType.JSON)
+ .baseUri(acmUrl)
+ .body(jsonBody.toString())
+ .put(endpoint.replace("{compositionId}", compositionId));
+ }
+
+ /**
+ * Verify deletion of composition defintion.
+ */
+ @When("the AC definition is deleted {string}")
+ public void deleteAcDefinition(String endpoint) throws IOException {
+ response = RestAssured.given()
+ .auth().basic(username, password)
+ .baseUri(acmUrl)
+ .delete(endpoint.replace("{compositionId}", compositionId));
+ }
+
+ /**
+ * Verify migration functionality.
+ */
+ @When("the ACM instance is migrated {string} with {string}")
+ public void migrate(String endpoint, String filePath) throws IOException {
+ var jsonContent = new String(Files.readAllBytes(Path.of(filePath)));
+ response = RestAssured.given()
+ .config(RestAssured.config().encoderConfig(encoderConfig()
+ .encodeContentTypeAs("", ContentType.JSON)))
+ .auth().basic(username, password)
+ .contentType(ContentType.JSON)
+ .accept(ContentType.JSON)
+ .baseUri(acmUrl)
+ .body(jsonContent
+ .replace("COMPOSITIONIDPLACEHOLDER", compositionId)
+ .replace("INSTANCEIDPLACEHOLDER", instanceId)
+ .replace("COMPOSITIONTARGETIDPLACEHOLDER", targetCompositionId))
+ .post(endpoint.replace("{compositionId}", compositionId));
+ }
+
+ /**
+ * Verify the response status.
+ */
+ @Then("the response status code should be {int}")
+ public void theUserEndpointIsUpAndRunning(int expectedStatus) {
+ assertEquals(expectedStatus, response.getStatusCode());
+ }
+
+ /**
+ * Verify the response contains specific keywords.
+ */
+ @Then("the response should contain the updated properties {string} {string}")
+ public void theUserEndpointIsUpAndRunning(String value1, String value2) {
+ assertThat(value1, response.getBody().asString().contains(value1));
+ assertThat(value1, response.getBody().asString().contains(value2));
+ }
+
+}
diff --git a/policy-regression-tests/policy-clamp-regression/src/test/resources/data/AcInstantiate.json b/policy-regression-tests/policy-clamp-regression/src/test/resources/data/AcInstantiate.json
new file mode 100644
index 00000000..6b0b1553
--- /dev/null
+++ b/policy-regression-tests/policy-clamp-regression/src/test/resources/data/AcInstantiate.json
@@ -0,0 +1,25 @@
+{
+ "name": "DemoInstance0",
+ "version": "1.0.1",
+ "compositionId": "COMPOSITIONIDPLACEHOLDER",
+ "description": "Demo automation composition instance 0",
+ "elements": {
+ "709c62b3-8918-41b9-a747-d21eb79c6c20": {
+ "id": "709c62b3-8918-41b9-a747-d21eb79c6c20",
+ "definition": {
+ "name": "onap.policy.clamp.ac.element.Policy_AutomationCompositionElement",
+ "version": "1.2.3"
+ },
+ "description": "Policy Automation Composition Element for the Demo",
+ "properties": {
+ "policy_type_id": {
+ "name": "onap.policies.native.Apex",
+ "version": "1.0.0"
+ },
+ "policy_id": {
+ "get_input": "acm_element_policy"
+ }
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/policy-regression-tests/policy-clamp-regression/src/test/resources/data/AcMigrateInstance.json b/policy-regression-tests/policy-clamp-regression/src/test/resources/data/AcMigrateInstance.json
new file mode 100644
index 00000000..1d505ae5
--- /dev/null
+++ b/policy-regression-tests/policy-clamp-regression/src/test/resources/data/AcMigrateInstance.json
@@ -0,0 +1,27 @@
+{
+ "name": "DemoInstance0",
+ "version": "1.0.1",
+ "compositionId": "COMPOSITIONIDPLACEHOLDER",
+ "instanceId": "INSTANCEIDPLACEHOLDER",
+ "compositionTargetId": "COMPOSITIONTARGETIDPLACEHOLDER",
+ "description": "Demo automation composition instance 0",
+ "elements": {
+ "709c62b3-8918-41b9-a747-d21eb79c6c20": {
+ "id": "709c62b3-8918-41b9-a747-d21eb79c6c20",
+ "definition": {
+ "name": "onap.policy.clamp.ac.element.Policy_AutomationCompositionElement",
+ "version": "1.2.3"
+ },
+ "description": "Policy Automation Composition Element for the Demo",
+ "properties": {
+ "policy_type_id": {
+ "name": "onap.policies.native.Apex",
+ "version": "1.0.0"
+ },
+ "policy_id": {
+ "get_input": "acm_element_policy"
+ }
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/policy-regression-tests/policy-clamp-regression/src/test/resources/data/AcUpdateProperty.json b/policy-regression-tests/policy-clamp-regression/src/test/resources/data/AcUpdateProperty.json
new file mode 100644
index 00000000..a8598aaf
--- /dev/null
+++ b/policy-regression-tests/policy-clamp-regression/src/test/resources/data/AcUpdateProperty.json
@@ -0,0 +1,27 @@
+{
+ "name": "DemoInstance0",
+ "version": "1.0.1",
+ "compositionId": "COMPOSITIONIDPLACEHOLDER",
+ "instanceId": "INSTANCEIDPLACEHOLDER",
+ "description": "Demo automation composition instance 0",
+ "elements": {
+ "709c62b3-8918-41b9-a747-d21eb79c6c20": {
+ "id": "709c62b3-8918-41b9-a747-d21eb79c6c20",
+ "definition": {
+ "name": "onap.policy.clamp.ac.element.Policy_AutomationCompositionElement",
+ "version": "1.2.3"
+ },
+ "description": "Policy Automation Composition Element for the Demo",
+ "properties": {
+ "policy_type_id": {
+ "name": "onap.policies.native.Apex",
+ "version": "1.0.0"
+ },
+ "policy_id": {
+ "get_input": "acm_element_policy_updated"
+ },
+ "new_property": "test"
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/policy-regression-tests/policy-clamp-regression/src/test/resources/data/acelement-usecase1.json b/policy-regression-tests/policy-clamp-regression/src/test/resources/data/acelement-usecase1.json
new file mode 100644
index 00000000..ff7539f8
--- /dev/null
+++ b/policy-regression-tests/policy-clamp-regression/src/test/resources/data/acelement-usecase1.json
@@ -0,0 +1,1498 @@
+{
+ "tosca_definitions_version": "tosca_simple_yaml_1_3",
+ "data_types": {
+ "onap.datatypes.ToscaConceptIdentifier": {
+ "derived_from": "tosca.datatypes.Root",
+ "properties": {
+ "name": {
+ "type": "string",
+ "required": true
+ },
+ "version": {
+ "type": "string",
+ "required": true
+ }
+ }
+ },
+ "onap.datatypes.native.apex.EngineService": {
+ "derived_from": "tosca.datatypes.Root",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "Specifies the engine name",
+ "required": false,
+ "default": "ApexEngineService"
+ },
+ "version": {
+ "type": "string",
+ "description": "Specifies the engine version in double dotted format",
+ "required": false,
+ "default": "1.0.0"
+ },
+ "id": {
+ "type": "integer",
+ "description": "Specifies the engine id",
+ "required": true
+ },
+ "instance_count": {
+ "type": "integer",
+ "description": "Specifies the number of engine threads that should be run",
+ "required": true
+ },
+ "deployment_port": {
+ "type": "integer",
+ "description": "Specifies the port to connect to for engine administration",
+ "required": false,
+ "default": 1
+ },
+ "policy_model_file_name": {
+ "type": "string",
+ "description": "The name of the file from which to read the APEX policy model",
+ "required": false
+ },
+ "policy_type_impl": {
+ "type": "string",
+ "description": "The policy type implementation from which to read the APEX policy model",
+ "required": false
+ },
+ "periodic_event_period": {
+ "type": "string",
+ "description": "The time interval in milliseconds for the periodic scanning event, 0 means don't scan",
+ "required": false
+ },
+ "engine": {
+ "type": "onap.datatypes.native.apex.engineservice.Engine",
+ "description": "The parameters for all engines in the APEX engine service",
+ "required": true
+ }
+ }
+ },
+ "onap.datatypes.native.apex.EventHandler": {
+ "derived_from": "tosca.datatypes.Root",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "Specifies the event handler name, if not specified this is set to the key name",
+ "required": false
+ },
+ "carrier_technology": {
+ "type": "onap.datatypes.native.apex.CarrierTechnology",
+ "description": "Specifies the carrier technology of the event handler (such as REST/Web Socket/Kafka)",
+ "required": true
+ },
+ "event_protocol": {
+ "type": "onap.datatypes.native.apex.EventProtocol",
+ "description": "Specifies the event protocol of events for the event handler (such as Yaml/JSON/XML/POJO)",
+ "required": true
+ },
+ "event_name": {
+ "type": "string",
+ "description": "Specifies the event name for events on this event handler, if not specified, the event name is read from or written to the event being received or sent",
+ "required": false
+ },
+ "event_name_filter": {
+ "type": "string",
+ "description": "Specifies a filter as a regular expression, events that do not match the filter are dropped, the default is to let all events through",
+ "required": false
+ },
+ "synchronous_mode": {
+ "type": "boolean",
+ "description": "Specifies the event handler is syncronous (receive event and send response)",
+ "required": false,
+ "default": false
+ },
+ "synchronous_peer": {
+ "type": "string",
+ "description": "The peer event handler (output for input or input for output) of this event handler in synchronous mode, this parameter is mandatory if the event handler is in synchronous mode",
+ "required": false
+ },
+ "synchronous_timeout": {
+ "type": "integer",
+ "description": "The timeout in milliseconds for responses to be issued by APEX torequests, this parameter is mandatory if the event handler is in synchronous mode",
+ "required": false
+ },
+ "requestor_mode": {
+ "type": "boolean",
+ "description": "Specifies the event handler is in requestor mode (send event and wait for response mode)",
+ "required": false,
+ "default": false
+ },
+ "requestor_peer": {
+ "type": "string",
+ "description": "The peer event handler (output for input or input for output) of this event handler in requestor mode, this parameter is mandatory if the event handler is in requestor mode",
+ "required": false
+ },
+ "requestor_timeout": {
+ "type": "integer",
+ "description": "The timeout in milliseconds for wait for responses to requests, this parameter is mandatory if the event handler is in requestor mode",
+ "required": false
+ }
+ }
+ },
+ "onap.datatypes.native.apex.CarrierTechnology": {
+ "derived_from": "tosca.datatypes.Root",
+ "properties": {
+ "label": {
+ "type": "string",
+ "description": "The label (name) of the carrier technology (such as REST, Kafka, WebSocket)",
+ "required": true
+ },
+ "plugin_parameter_class_name": {
+ "type": "string",
+ "description": "The class name of the class that overrides default handling of event input or output for this carrier technology, defaults to the supplied input or output class",
+ "required": false
+ }
+ }
+ },
+ "onap.datatypes.native.apex.EventProtocol": {
+ "derived_from": "tosca.datatypes.Root",
+ "properties": {
+ "label": {
+ "type": "string",
+ "description": "The label (name) of the event protocol (such as Yaml, JSON, XML, or POJO)",
+ "required": true
+ },
+ "event_protocol_plugin_class": {
+ "type": "string",
+ "description": "The class name of the class that overrides default handling of the event protocol for this carrier technology, defaults to the supplied event protocol class",
+ "required": false
+ }
+ }
+ },
+ "onap.datatypes.native.apex.Environment": {
+ "derived_from": "tosca.datatypes.Root",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "The name of the environment variable",
+ "required": true
+ },
+ "value": {
+ "type": "string",
+ "description": "The value of the environment variable",
+ "required": true
+ }
+ }
+ },
+ "onap.datatypes.native.apex.engineservice.Engine": {
+ "derived_from": "tosca.datatypes.Root",
+ "properties": {
+ "context": {
+ "type": "onap.datatypes.native.apex.engineservice.engine.Context",
+ "description": "The properties for handling context in APEX engines, defaults to using Java maps for context",
+ "required": false
+ },
+ "executors": {
+ "type": "map",
+ "description": "The plugins for policy executors used in engines such as javascript, MVEL, Jython",
+ "required": true,
+ "entry_schema": {
+ "description": "The plugin class path for this policy executor",
+ "type": "string"
+ }
+ }
+ }
+ },
+ "onap.datatypes.native.apex.engineservice.engine.Context": {
+ "derived_from": "tosca.datatypes.Root",
+ "properties": {
+ "distributor": {
+ "type": "onap.datatypes.native.apex.Plugin",
+ "description": "The plugin to be used for distributing context between APEX PDPs at runtime",
+ "required": false
+ },
+ "schemas": {
+ "type": "map",
+ "description": "The plugins for context schemas available in APEX PDPs such as Java and Avro",
+ "required": false,
+ "entry_schema": {
+ "type": "onap.datatypes.native.apex.Plugin"
+ }
+ },
+ "locking": {
+ "type": "onap.datatypes.native.apex.Plugin",
+ "description": "The plugin to be used for locking context in and between APEX PDPs at runtime",
+ "required": false
+ },
+ "persistence": {
+ "type": "onap.datatypes.native.apex.Plugin",
+ "description": "The plugin to be used for persisting context for APEX PDPs at runtime",
+ "required": false
+ }
+ }
+ },
+ "onap.datatypes.native.apex.Plugin": {
+ "derived_from": "tosca.datatypes.Root",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "The name of the executor such as Javascript, Jython or MVEL",
+ "required": true
+ },
+ "plugin_class_name": {
+ "type": "string",
+ "description": "The class path of the plugin class for this executor"
+ }
+ }
+ },
+ "org.onap.datatypes.policy.clamp.acm.httpAutomationCompositionElement.RestRequest": {
+ "version": "1.0.0",
+ "derived_from": "tosca.datatypes.Root",
+ "properties": {
+ "restRequestId": {
+ "type": "onap.datatypes.ToscaConceptIdentifier",
+ "required": true,
+ "description": "The name and version of a REST request to be sent to a REST endpoint"
+ },
+ "httpMethod": {
+ "type": "string",
+ "required": true,
+ "constraints": [
+ {
+ "valid_values": [
+ "POST",
+ "PUT",
+ "GET",
+ "DELETE"
+ ]
+ }
+ ],
+ "description": "The REST method to use"
+ },
+ "path": {
+ "type": "string",
+ "required": true,
+ "description": "The path of the REST request relative to the base URL"
+ },
+ "body": {
+ "type": "string",
+ "required": false,
+ "description": "The body of the REST request for PUT and POST requests"
+ },
+ "expectedResponse": {
+ "type": "integer",
+ "required": true,
+ "constraints": [],
+ "description": "THe expected HTTP status code for the REST request"
+ }
+ }
+ },
+ "org.onap.datatypes.policy.clamp.acm.httpAutomationCompositionElement.ConfigurationEntity": {
+ "version": "1.0.0",
+ "derived_from": "tosca.datatypes.Root",
+ "properties": {
+ "configurationEntityId": {
+ "type": "onap.datatypes.ToscaConceptIdentifier",
+ "required": true,
+ "description": "The name and version of a Configuration Entity to be handled by the HTTP Automation Composition Element"
+ },
+ "restSequence": {
+ "type": "list",
+ "entry_schema": {
+ "type": "org.onap.datatypes.policy.clamp.acm.httpAutomationCompositionElement.RestRequest",
+ "type_version": "1.0.0"
+ },
+ "description": "A sequence of REST commands to send to the REST endpoint"
+ }
+ }
+ }
+ },
+ "policy_types": {
+ "onap.policies.Native": {
+ "derived_from": "tosca.policies.Root",
+ "description": "a base policy type for all native PDP policies",
+ "version": "1.0.0",
+ "name": "onap.policies.Native"
+ },
+ "onap.policies.native.Apex": {
+ "derived_from": "onap.policies.Native",
+ "description": "a policy type for native apex policies",
+ "version": "1.0.0",
+ "name": "onap.policies.native.Apex",
+ "properties": {
+ "engine_service": {
+ "type": "onap.datatypes.native.apex.EngineService",
+ "description": "APEX Engine Service Parameters"
+ },
+ "inputs": {
+ "type": "map",
+ "description": "Inputs for handling events coming into the APEX engine",
+ "entry_schema": {
+ "type": "onap.datatypes.native.apex.EventHandler"
+ }
+ },
+ "outputs": {
+ "type": "map",
+ "description": "Outputs for handling events going out of the APEX engine",
+ "entry_schema": {
+ "type": "onap.datatypes.native.apex.EventHandler"
+ }
+ },
+ "environment": {
+ "type": "list",
+ "description": "Envioronmental parameters for the APEX engine",
+ "entry_schema": {
+ "type": "onap.datatypes.native.apex.Environment"
+ }
+ }
+ }
+ }
+ },
+ "node_types": {
+ "org.onap.policy.clamp.acm.Participant": {
+ "version": "1.0.1",
+ "derived_from": "tosca.nodetypes.Root",
+ "properties": {
+ "provider": {
+ "type": "string",
+ "required": false
+ }
+ }
+ },
+ "org.onap.policy.clamp.acm.AutomationCompositionElement": {
+ "version": "1.0.1",
+ "derived_from": "tosca.nodetypes.Root",
+ "properties": {
+ "provider": {
+ "type": "string",
+ "required": false,
+ "metadata": {
+ "common": true
+ },
+ "description": "Specifies the organization that provides the automation composition element"
+ },
+ "startPhase": {
+ "type": "integer",
+ "required": false,
+ "constraints": [
+ {
+ "greater_or_equal": 0
+ }
+ ],
+ "metadata": {
+ "common": true
+ },
+ "description": "A value indicating the start phase in which this automation composition element will be started, the first start phase is zero. Automation Composition Elements are started in their start_phase order and stopped in reverse start phase order. Automation Composition Elements with the same start phase are started and stopped simultaneously"
+ },
+ "uninitializedToPassiveTimeout": {
+ "type": "integer",
+ "required": false,
+ "constraints": [
+ {
+ "greater_or_equal": 0
+ }
+ ],
+ "default": 60,
+ "metadata": {
+ "common": true
+ },
+ "description": "The maximum time in seconds to wait for a state chage from uninitialized to passive"
+ },
+ "passiveToRunningTimeout": {
+ "type": "integer",
+ "required": false,
+ "constraints": [
+ {
+ "greater_or_equal": 0
+ }
+ ],
+ "default": 60,
+ "metadata": {
+ "common": true
+ },
+ "description": "The maximum time in seconds to wait for a state chage from passive to running"
+ },
+ "runningToPassiveTimeout": {
+ "type": "integer",
+ "required": false,
+ "constraints": [
+ {
+ "greater_or_equal": 0
+ }
+ ],
+ "default": 60,
+ "metadata": {
+ "common": true
+ },
+ "description": "The maximum time in seconds to wait for a state chage from running to passive"
+ },
+ "passiveToUninitializedTimeout": {
+ "type": "integer",
+ "required": false,
+ "constraints": [
+ {
+ "greater_or_equal": 0
+ }
+ ],
+ "default": 60,
+ "metadata": {
+ "common": true
+ },
+ "description": "The maximum time in seconds to wait for a state chage from passive to uninitialized"
+ }
+ }
+ },
+ "org.onap.policy.clamp.acm.AutomationComposition": {
+ "version": "1.0.1",
+ "derived_from": "tosca.nodetypes.Root",
+ "properties": {
+ "provider": {
+ "type": "string",
+ "required": false,
+ "metadata": {
+ "common": true
+ },
+ "description": "Specifies the organization that provides the automation composition element"
+ },
+ "elements": {
+ "type": "list",
+ "required": true,
+ "metadata": {
+ "common": true
+ },
+ "entry_schema": {
+ "type": "onap.datatypes.ToscaConceptIdentifier"
+ },
+ "description": "Specifies a list of automation composition element definitions that make up this automation composition definition"
+ }
+ }
+ },
+ "org.onap.policy.clamp.acm.PolicyAutomationCompositionElement": {
+ "version": "1.0.0",
+ "derived_from": "org.onap.policy.clamp.acm.AutomationCompositionElement",
+ "properties": {
+ "policy_type_id": {
+ "type": "onap.datatypes.ToscaConceptIdentifier",
+ "required": true
+ },
+ "policy_id": {
+ "type": "onap.datatypes.ToscaConceptIdentifier",
+ "required": false
+ }
+ }
+ },
+ "org.onap.policy.clamp.acm.K8SMicroserviceAutomationCompositionElement": {
+ "version": "1.0.0",
+ "derived_from": "org.onap.policy.clamp.acm.AutomationCompositionElement",
+ "properties": {
+ "chart": {
+ "type": "string",
+ "required": true
+ },
+ "configs": {
+ "type": "list",
+ "required": false
+ },
+ "requirements": {
+ "type": "string",
+ "required": false
+ },
+ "templates": {
+ "type": "list",
+ "required": false,
+ "entry_schema": null
+ },
+ "values": {
+ "type": "string",
+ "required": true
+ }
+ }
+ },
+ "org.onap.policy.clamp.acm.HttpAutomationCompositionElement": {
+ "version": "1.0.0",
+ "derived_from": "org.onap.policy.clamp.acm.AutomationCompositionElement",
+ "properties": {
+ "baseUrl": {
+ "type": "string",
+ "required": true,
+ "description": "The base URL to be prepended to each path, identifies the host for the REST endpoints."
+ },
+ "httpHeaders": {
+ "type": "map",
+ "required": false,
+ "entry_schema": {
+ "type": "string"
+ },
+ "description": "HTTP headers to send on REST requests"
+ },
+ "configurationEntities": {
+ "type": "map",
+ "required": true,
+ "entry_schema": {
+ "type": "org.onap.datatypes.policy.clamp.acm.httpAutomationCompositionElement.ConfigurationEntity",
+ "type_version": "1.0.0"
+ },
+ "description": "The connfiguration entities the Automation Composition Element is managing and their associated REST requests"
+ }
+ }
+ }
+ },
+ "topology_template": {
+ "inputs": {
+ "acm_element_policy": {
+ "type": "onap.datatypes.ToscaConceptIdentifier",
+ "description": "The ID of the operational policy to use",
+ "default": {
+ "name": "onap.policies.native.apex.ac.element",
+ "version": "1.0.0"
+ }
+ }
+ },
+ "node_templates": {
+ "org.onap.policy.clamp.acm.PolicyParticipant": {
+ "version": "2.3.1",
+ "type": "org.onap.policy.clamp.acm.Participant",
+ "type_version": "1.0.1",
+ "description": "Participant for Policy microservices",
+ "properties": {
+ "provider": "ONAP"
+ }
+ },
+ "onap.policy.clamp.ac.element.Policy_AutomationCompositionElement": {
+ "version": "1.2.3",
+ "type": "org.onap.policy.clamp.acm.PolicyAutomationCompositionElement",
+ "type_version": "1.0.0",
+ "description": "Automation composition element for the operational policy for Performance Management Subscription Handling",
+ "properties": {
+ "provider": "Ericsson",
+ "startPhase": 0
+ }
+ },
+ "org.onap.k8s.acm.K8SAutomationCompositionParticipant": {
+ "version": "2.3.4",
+ "type": "org.onap.policy.clamp.acm.Participant",
+ "type_version": "1.0.1",
+ "description": "Participant for K8S",
+ "properties": {
+ "provider": "ONAP"
+ }
+ },
+ "onap.policy.clamp.ac.element.K8S_StarterAutomationCompositionElement": {
+ "version": "1.2.3",
+ "type": "org.onap.policy.clamp.acm.K8SMicroserviceAutomationCompositionElement",
+ "type_version": "1.0.0",
+ "description": "Automation composition element for the K8S microservice for AC Element Starter",
+ "properties": {
+ "provider": "ONAP",
+ "startPhase": 0,
+ "uninitializedToPassiveTimeout": 300,
+ "podStatusCheckInterval": 30
+ }
+ },
+ "onap.policy.clamp.ac.element.K8S_BridgeAutomationCompositionElement": {
+ "version": "1.2.3",
+ "type": "org.onap.policy.clamp.acm.K8SMicroserviceAutomationCompositionElement",
+ "type_version": "1.0.0",
+ "description": "Automation composition element for the K8S microservice for AC Element Bridge",
+ "properties": {
+ "provider": "ONAP",
+ "startPhase": 0,
+ "uninitializedToPassiveTimeout": 300,
+ "podStatusCheckInterval": 30
+ }
+ },
+ "onap.policy.clamp.ac.element.K8S_SinkAutomationCompositionElement": {
+ "version": "1.2.3",
+ "type": "org.onap.policy.clamp.acm.K8SMicroserviceAutomationCompositionElement",
+ "type_version": "1.0.0",
+ "description": "Automation composition element for the K8S microservice for AC Element Sink",
+ "properties": {
+ "provider": "ONAP",
+ "startPhase": 0,
+ "uninitializedToPassiveTimeout": 300,
+ "podStatusCheckInterval": 30
+ }
+ },
+ "org.onap.policy.clamp.acm.HttpParticipant": {
+ "version": "2.3.4",
+ "type": "org.onap.policy.clamp.acm.Participant",
+ "type_version": "1.0.1",
+ "description": "Participant for Http requests",
+ "properties": {
+ "provider": "ONAP"
+ }
+ },
+ "onap.policy.clamp.ac.element.Http_StarterAutomationCompositionElement": {
+ "version": "1.2.3",
+ "type": "org.onap.policy.clamp.acm.HttpAutomationCompositionElement",
+ "type_version": "1.0.0",
+ "description": "Automation composition element for the http requests of AC Element Starter microservice",
+ "properties": {
+ "provider": "ONAP",
+ "uninitializedToPassiveTimeout": 300,
+ "startPhase": 1
+ }
+ },
+ "onap.policy.clamp.ac.element.Http_BridgeAutomationCompositionElement": {
+ "version": "1.2.3",
+ "type": "org.onap.policy.clamp.acm.HttpAutomationCompositionElement",
+ "type_version": "1.0.0",
+ "description": "Automation composition element for the http requests of AC Element Bridge microservice",
+ "properties": {
+ "provider": "ONAP",
+ "uninitializedToPassiveTimeout": 300,
+ "startPhase": 1
+ }
+ },
+ "onap.policy.clamp.ac.element.Http_SinkAutomationCompositionElement": {
+ "version": "1.2.3",
+ "type": "org.onap.policy.clamp.acm.HttpAutomationCompositionElement",
+ "type_version": "1.0.0",
+ "description": "Automation composition element for the http requests of AC Element Sink microservice",
+ "properties": {
+ "provider": "ONAP",
+ "uninitializedToPassiveTimeout": 300,
+ "startPhase": 1
+ }
+ },
+ "onap.policy.clamp.ac.element.AutomationCompositionDefinition": {
+ "version": "1.2.3",
+ "type": "org.onap.policy.clamp.acm.AutomationComposition",
+ "type_version": "1.0.1",
+ "description": "Automation composition for Demo",
+ "properties": {
+ "provider": "ONAP",
+ "elements": [
+ {
+ "name": "onap.policy.clamp.ac.element.Policy_AutomationCompositionElement",
+ "version": "1.2.3"
+ },
+ {
+ "name": "onap.policy.clamp.ac.element.K8S_StarterAutomationCompositionElement",
+ "version": "1.2.3"
+ },
+ {
+ "name": "onap.policy.clamp.ac.element.K8S_BridgeAutomationCompositionElement",
+ "version": "1.2.3"
+ },
+ {
+ "name": "onap.policy.clamp.ac.element.K8S_SinkAutomationCompositionElement",
+ "version": "1.2.3"
+ },
+ {
+ "name": "onap.policy.clamp.ac.element.Http_StarterAutomationCompositionElement",
+ "version": "1.2.3"
+ },
+ {
+ "name": "onap.policy.clamp.ac.element.Http_BridgeAutomationCompositionElement",
+ "version": "1.2.3"
+ },
+ {
+ "name": "onap.policy.clamp.ac.element.Http_SinkAutomationCompositionElement",
+ "version": "1.2.3"
+ }
+ ]
+ }
+ }
+ },
+ "policies": [
+ {
+ "onap.policies.native.apex.ac.element": {
+ "type": "onap.policies.native.Apex",
+ "type_version": "1.0.0",
+ "properties": {
+ "engineServiceParameters": {
+ "name": "MyApexEngine",
+ "version": "0.0.1",
+ "id": 45,
+ "instanceCount": 2,
+ "deploymentPort": 12561,
+ "engineParameters": {
+ "executorParameters": {
+ "JAVASCRIPT": {
+ "parameterClassName": "org.onap.policy.apex.plugins.executor.javascript.JavascriptExecutorParameters"
+ }
+ },
+ "contextParameters": {
+ "parameterClassName": "org.onap.policy.apex.context.parameters.ContextParameters",
+ "schemaParameters": {
+ "Json": {
+ "parameterClassName": "org.onap.policy.apex.plugins.context.schema.json.JsonSchemaHelperParameters"
+ }
+ }
+ }
+ },
+ "policy_type_impl": {
+ "policies": {
+ "key": {
+ "name": "APEXacElementPolicy_Policies",
+ "version": "0.0.1"
+ },
+ "policyMap": {
+ "entry": [
+ {
+ "key": {
+ "name": "ReceiveEventPolicy",
+ "version": "0.0.1"
+ },
+ "value": {
+ "policyKey": {
+ "name": "ReceiveEventPolicy",
+ "version": "0.0.1"
+ },
+ "template": "Freestyle",
+ "state": {
+ "entry": [
+ {
+ "key": "DecideForwardingState",
+ "value": {
+ "stateKey": {
+ "parentKeyName": "ReceiveEventPolicy",
+ "parentKeyVersion": "0.0.1",
+ "parentLocalName": "NULL",
+ "localName": "DecideForwardingState"
+ },
+ "trigger": {
+ "name": "AcElementEvent",
+ "version": "0.0.1"
+ },
+ "stateOutputs": {
+ "entry": [
+ {
+ "key": "CreateForwardPayload",
+ "value": {
+ "key": {
+ "parentKeyName": "ReceiveEventPolicy",
+ "parentKeyVersion": "0.0.1",
+ "parentLocalName": "DecideForwardingState",
+ "localName": "CreateForwardPayload"
+ },
+ "outgoingEvent": {
+ "name": "DmaapResponseStatusEvent",
+ "version": "0.0.1"
+ },
+ "outgoingEventReference": [
+ {
+ "name": "DmaapResponseStatusEvent",
+ "version": "0.0.1"
+ }
+ ],
+ "nextState": {
+ "parentKeyName": "NULL",
+ "parentKeyVersion": "0.0.0",
+ "parentLocalName": "NULL",
+ "localName": "NULL"
+ }
+ }
+ }
+ ]
+ },
+ "contextAlbumReference": [],
+ "taskSelectionLogic": {
+ "key": {
+ "parentKeyName": "NULL",
+ "parentKeyVersion": "0.0.0",
+ "parentLocalName": "NULL",
+ "localName": "NULL"
+ },
+ "logicFlavour": "UNDEFINED",
+ "logic": ""
+ },
+ "stateFinalizerLogicMap": {
+ "entry": []
+ },
+ "defaultTask": {
+ "name": "ForwardPayloadTask",
+ "version": "0.0.1"
+ },
+ "taskReferences": {
+ "entry": [
+ {
+ "key": {
+ "name": "ForwardPayloadTask",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "parentKeyName": "ReceiveEventPolicy",
+ "parentKeyVersion": "0.0.1",
+ "parentLocalName": "DecideForwardingState",
+ "localName": "ReceiveEventPolicy"
+ },
+ "outputType": "DIRECT",
+ "output": {
+ "parentKeyName": "ReceiveEventPolicy",
+ "parentKeyVersion": "0.0.1",
+ "parentLocalName": "DecideForwardingState",
+ "localName": "CreateForwardPayload"
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ ]
+ },
+ "firstState": "DecideForwardingState"
+ }
+ }
+ ]
+ }
+ },
+ "tasks": {
+ "key": {
+ "name": "APEXacElementPolicy_Tasks",
+ "version": "0.0.1"
+ },
+ "taskMap": {
+ "entry": [
+ {
+ "key": {
+ "name": "ForwardPayloadTask",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "ForwardPayloadTask",
+ "version": "0.0.1"
+ },
+ "inputEvent": {
+ "key": {
+ "name": "AcElementEvent",
+ "version": "0.0.1"
+ },
+ "nameSpace": "org.onap.policy.apex.ac.element",
+ "source": "Dmaap",
+ "target": "APEX",
+ "parameter": {
+ "entry": [
+ {
+ "key": "DmaapResponseEvent",
+ "value": {
+ "key": {
+ "parentKeyName": "AcElementEvent",
+ "parentKeyVersion": "0.0.1",
+ "parentLocalName": "NULL",
+ "localName": "DmaapResponseEvent"
+ },
+ "fieldSchemaKey": {
+ "name": "ACEventType",
+ "version": "0.0.1"
+ },
+ "optional": false
+ }
+ }
+ ]
+ },
+ "toscaPolicyState": "ENTRY"
+ },
+ "outputEvents": {
+ "entry": [
+ {
+ "key": "DmaapResponseStatusEvent",
+ "value": {
+ "key": {
+ "name": "DmaapResponseStatusEvent",
+ "version": "0.0.1"
+ },
+ "nameSpace": "org.onap.policy.apex.ac.element",
+ "source": "APEX",
+ "target": "Dmaap",
+ "parameter": {
+ "entry": [
+ {
+ "key": "DmaapResponseStatusEvent",
+ "value": {
+ "key": {
+ "parentKeyName": "DmaapResponseStatusEvent",
+ "parentKeyVersion": "0.0.1",
+ "parentLocalName": "NULL",
+ "localName": "DmaapResponseStatusEvent"
+ },
+ "fieldSchemaKey": {
+ "name": "ACEventType",
+ "version": "0.0.1"
+ },
+ "optional": false
+ }
+ }
+ ]
+ },
+ "toscaPolicyState": ""
+ }
+ }
+ ]
+ },
+ "taskParameters": {
+ "entry": []
+ },
+ "contextAlbumReference": [
+ {
+ "name": "ACElementAlbum",
+ "version": "0.0.1"
+ }
+ ],
+ "taskLogic": {
+ "key": {
+ "parentKeyName": "ForwardPayloadTask",
+ "parentKeyVersion": "0.0.1",
+ "parentLocalName": "NULL",
+ "localName": "TaskLogic"
+ },
+ "logicFlavour": "JAVASCRIPT",
+ "logic": "/*\n * ============LICENSE_START=======================================================\n * Copyright (C) 2022 Nordix. All rights reserved.\n * ================================================================================\n * Licensed under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n * ============LICENSE_END=========================================================\n */\n\nexecutor.logger.info(executor.subject.id);\nexecutor.logger.info(executor.inFields);\n\nvar msgResponse = executor.inFields.get('DmaapResponseEvent');\nexecutor.logger.info('Task in progress with mesages: ' + msgResponse);\n\nvar elementId = msgResponse.get('elementId').get('name');\n\nif (msgResponse.get('messageType') == 'STATUS' &&\n (elementId == 'onap.policy.clamp.ac.startertobridge'\n || elementId == 'onap.policy.clamp.ac.bridgetosink')) {\n\n var receiverId = '';\n if (elementId == 'onap.policy.clamp.ac.startertobridge') {\n receiverId = 'onap.policy.clamp.ac.bridge';\n } else {\n receiverId = 'onap.policy.clamp.ac.sink';\n }\n\n var elementIdResponse = new java.util.HashMap();\n elementIdResponse.put('name', receiverId);\n elementIdResponse.put('version', msgResponse.get('elementId').get('version'));\n\n var dmaapResponse = new java.util.HashMap();\n dmaapResponse.put('elementId', elementIdResponse);\n\n var message = msgResponse.get('message') + ' trace added from policy';\n dmaapResponse.put('message', message);\n dmaapResponse.put('messageType', 'STATUS');\n dmaapResponse.put('messageId', msgResponse.get('messageId'));\n dmaapResponse.put('timestamp', msgResponse.get('timestamp'));\n\n executor.logger.info('Sending forwarding Event to Ac element: ' + dmaapResponse);\n\n executor.outFields.put('DmaapResponseStatusEvent', dmaapResponse);\n}\n\ntrue;"
+ }
+ }
+ }
+ ]
+ }
+ },
+ "events": {
+ "key": {
+ "name": "APEXacElementPolicy_Events",
+ "version": "0.0.1"
+ },
+ "eventMap": {
+ "entry": [
+ {
+ "key": {
+ "name": "AcElementEvent",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "AcElementEvent",
+ "version": "0.0.1"
+ },
+ "nameSpace": "org.onap.policy.apex.ac.element",
+ "source": "Dmaap",
+ "target": "APEX",
+ "parameter": {
+ "entry": [
+ {
+ "key": "DmaapResponseEvent",
+ "value": {
+ "key": {
+ "parentKeyName": "AcElementEvent",
+ "parentKeyVersion": "0.0.1",
+ "parentLocalName": "NULL",
+ "localName": "DmaapResponseEvent"
+ },
+ "fieldSchemaKey": {
+ "name": "ACEventType",
+ "version": "0.0.1"
+ },
+ "optional": false
+ }
+ }
+ ]
+ },
+ "toscaPolicyState": "ENTRY"
+ }
+ },
+ {
+ "key": {
+ "name": "DmaapResponseStatusEvent",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "DmaapResponseStatusEvent",
+ "version": "0.0.1"
+ },
+ "nameSpace": "org.onap.policy.apex.ac.element",
+ "source": "APEX",
+ "target": "Dmaap",
+ "parameter": {
+ "entry": [
+ {
+ "key": "DmaapResponseStatusEvent",
+ "value": {
+ "key": {
+ "parentKeyName": "DmaapResponseStatusEvent",
+ "parentKeyVersion": "0.0.1",
+ "parentLocalName": "NULL",
+ "localName": "DmaapResponseStatusEvent"
+ },
+ "fieldSchemaKey": {
+ "name": "ACEventType",
+ "version": "0.0.1"
+ },
+ "optional": false
+ }
+ }
+ ]
+ },
+ "toscaPolicyState": ""
+ }
+ },
+ {
+ "key": {
+ "name": "LogEvent",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "LogEvent",
+ "version": "0.0.1"
+ },
+ "nameSpace": "org.onap.policy.apex.ac.element",
+ "source": "APEX",
+ "target": "file",
+ "parameter": {
+ "entry": [
+ {
+ "key": "final_status",
+ "value": {
+ "key": {
+ "parentKeyName": "LogEvent",
+ "parentKeyVersion": "0.0.1",
+ "parentLocalName": "NULL",
+ "localName": "final_status"
+ },
+ "fieldSchemaKey": {
+ "name": "SimpleStringType",
+ "version": "0.0.1"
+ },
+ "optional": false
+ }
+ },
+ {
+ "key": "message",
+ "value": {
+ "key": {
+ "parentKeyName": "LogEvent",
+ "parentKeyVersion": "0.0.1",
+ "parentLocalName": "NULL",
+ "localName": "message"
+ },
+ "fieldSchemaKey": {
+ "name": "SimpleStringType",
+ "version": "0.0.1"
+ },
+ "optional": false
+ }
+ }
+ ]
+ },
+ "toscaPolicyState": ""
+ }
+ }
+ ]
+ }
+ },
+ "albums": {
+ "key": {
+ "name": "APEXacElementPolicy_Albums",
+ "version": "0.0.1"
+ },
+ "albums": {
+ "entry": [
+ {
+ "key": {
+ "name": "ACElementAlbum",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "ACElementAlbum",
+ "version": "0.0.1"
+ },
+ "scope": "policy",
+ "isWritable": true,
+ "itemSchema": {
+ "name": "ACEventType",
+ "version": "0.0.1"
+ }
+ }
+ }
+ ]
+ }
+ },
+ "schemas": {
+ "key": {
+ "name": "APEXacElementPolicy_Schemas",
+ "version": "0.0.1"
+ },
+ "schemas": {
+ "entry": [
+ {
+ "key": {
+ "name": "ACEventType",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "ACEventType",
+ "version": "0.0.1"
+ },
+ "schemaFlavour": "Json",
+ "schemaDefinition": "{\n \"$schema\": \"http://json-schema.org/draft-04/schema#\",\n \"type\": \"object\",\n \"properties\": {\n \"elementId\": {\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\n },\n \"version\": {\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"name\",\n \"version\"\n ]\n },\n \"message\": {\n \"type\": \"string\"\n },\n \"messageType\": {\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"elementId\",\n \"message\",\n \"messageType\"\n ]\n}"
+ }
+ },
+ {
+ "key": {
+ "name": "SimpleIntType",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "SimpleIntType",
+ "version": "0.0.1"
+ },
+ "schemaFlavour": "Java",
+ "schemaDefinition": "java.lang.Integer"
+ }
+ },
+ {
+ "key": {
+ "name": "SimpleStringType",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "SimpleStringType",
+ "version": "0.0.1"
+ },
+ "schemaFlavour": "Java",
+ "schemaDefinition": "java.lang.String"
+ }
+ },
+ {
+ "key": {
+ "name": "UUIDType",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "UUIDType",
+ "version": "0.0.1"
+ },
+ "schemaFlavour": "Java",
+ "schemaDefinition": "java.util.UUID"
+ }
+ }
+ ]
+ }
+ },
+ "key": {
+ "name": "APEXacElementPolicy",
+ "version": "0.0.1"
+ },
+ "keyInformation": {
+ "key": {
+ "name": "APEXacElementPolicy_KeyInfo",
+ "version": "0.0.1"
+ },
+ "keyInfoMap": {
+ "entry": [
+ {
+ "key": {
+ "name": "ACElementAlbum",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "ACElementAlbum",
+ "version": "0.0.1"
+ },
+ "UUID": "7cddfab8-6d3f-3f7f-8ac3-e2eb5979c900",
+ "description": "Generated description for concept referred to by key \"ACElementAlbum:0.0.1\""
+ }
+ },
+ {
+ "key": {
+ "name": "ACEventType",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "ACEventType",
+ "version": "0.0.1"
+ },
+ "UUID": "dab78794-b666-3929-a75b-70d634b04fe5",
+ "description": "Generated description for concept referred to by key \"ACEventType:0.0.1\""
+ }
+ },
+ {
+ "key": {
+ "name": "APEXacElementPolicy",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "APEXacElementPolicy",
+ "version": "0.0.1"
+ },
+ "UUID": "da478611-7d77-3c46-b4be-be968769ba4e",
+ "description": "Generated description for concept referred to by key \"APEXacElementPolicy:0.0.1\""
+ }
+ },
+ {
+ "key": {
+ "name": "APEXacElementPolicy_Albums",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "APEXacElementPolicy_Albums",
+ "version": "0.0.1"
+ },
+ "UUID": "fa8dc15e-8c8d-3de3-a0f8-585b76511175",
+ "description": "Generated description for concept referred to by key \"APEXacElementPolicy_Albums:0.0.1\""
+ }
+ },
+ {
+ "key": {
+ "name": "APEXacElementPolicy_Events",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "APEXacElementPolicy_Events",
+ "version": "0.0.1"
+ },
+ "UUID": "8508cd65-8dd2-342d-a5c6-1570810dbe2b",
+ "description": "Generated description for concept referred to by key \"APEXacElementPolicy_Events:0.0.1\""
+ }
+ },
+ {
+ "key": {
+ "name": "APEXacElementPolicy_KeyInfo",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "APEXacElementPolicy_KeyInfo",
+ "version": "0.0.1"
+ },
+ "UUID": "09e6927d-c5ac-3779-919f-9333994eed22",
+ "description": "Generated description for concept referred to by key \"APEXacElementPolicy_KeyInfo:0.0.1\""
+ }
+ },
+ {
+ "key": {
+ "name": "APEXacElementPolicy_Policies",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "APEXacElementPolicy_Policies",
+ "version": "0.0.1"
+ },
+ "UUID": "cade3c9a-1600-3642-a6f4-315612187f46",
+ "description": "Generated description for concept referred to by key \"APEXacElementPolicy_Policies:0.0.1\""
+ }
+ },
+ {
+ "key": {
+ "name": "APEXacElementPolicy_Schemas",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "APEXacElementPolicy_Schemas",
+ "version": "0.0.1"
+ },
+ "UUID": "5bb4a8e9-35fa-37db-9a49-48ef036a7ba9",
+ "description": "Generated description for concept referred to by key \"APEXacElementPolicy_Schemas:0.0.1\""
+ }
+ },
+ {
+ "key": {
+ "name": "APEXacElementPolicy_Tasks",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "APEXacElementPolicy_Tasks",
+ "version": "0.0.1"
+ },
+ "UUID": "2527eeec-0d1f-3094-ad3f-212622b12836",
+ "description": "Generated description for concept referred to by key \"APEXacElementPolicy_Tasks:0.0.1\""
+ }
+ },
+ {
+ "key": {
+ "name": "AcElementEvent",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "AcElementEvent",
+ "version": "0.0.1"
+ },
+ "UUID": "32c013e2-2740-3986-a626-cbdf665b63e9",
+ "description": "Generated description for concept referred to by key \"AcElementEvent:0.0.1\""
+ }
+ },
+ {
+ "key": {
+ "name": "DmaapResponseStatusEvent",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "DmaapResponseStatusEvent",
+ "version": "0.0.1"
+ },
+ "UUID": "2715cb6c-2778-3461-8b69-871e79f95935",
+ "description": "Generated description for concept referred to by key \"DmaapResponseStatusEvent:0.0.1\""
+ }
+ },
+ {
+ "key": {
+ "name": "ForwardPayloadTask",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "ForwardPayloadTask",
+ "version": "0.0.1"
+ },
+ "UUID": "51defa03-1ecf-3314-bf34-2a652bce57fa",
+ "description": "Generated description for concept referred to by key \"ForwardPayloadTask:0.0.1\""
+ }
+ },
+ {
+ "key": {
+ "name": "LogEvent",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "LogEvent",
+ "version": "0.0.1"
+ },
+ "UUID": "c540f048-96af-35e3-a36e-e9c29377cba7",
+ "description": "Generated description for concept referred to by key \"LogEvent:0.0.1\""
+ }
+ },
+ {
+ "key": {
+ "name": "ReceiveEventPolicy",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "ReceiveEventPolicy",
+ "version": "0.0.1"
+ },
+ "UUID": "568b7345-9de1-36d3-b6a3-9b857e6809a1",
+ "description": "Generated description for concept referred to by key \"ReceiveEventPolicy:0.0.1\""
+ }
+ },
+ {
+ "key": {
+ "name": "SimpleIntType",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "SimpleIntType",
+ "version": "0.0.1"
+ },
+ "UUID": "153791fd-ae0a-36a7-88a5-309a7936415d",
+ "description": "Generated description for concept referred to by key \"SimpleIntType:0.0.1\""
+ }
+ },
+ {
+ "key": {
+ "name": "SimpleStringType",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "SimpleStringType",
+ "version": "0.0.1"
+ },
+ "UUID": "8a4957cf-9493-3a76-8c22-a208e23259af",
+ "description": "Generated description for concept referred to by key \"SimpleStringType:0.0.1\""
+ }
+ },
+ {
+ "key": {
+ "name": "UUIDType",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "UUIDType",
+ "version": "0.0.1"
+ },
+ "UUID": "6a8cc68e-dfc8-3403-9c6d-071c886b319c",
+ "description": "Generated description for concept referred to by key \"UUIDType:0.0.1\""
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "eventInputParameters": {
+ "DmaapConsumer": {
+ "carrierTechnologyParameters": {
+ "carrierTechnology": "KAFKA",
+ "parameterClassName": "org.onap.policy.apex.plugins.event.carrier.kafka.KafkaCarrierTechnologyParameters",
+ "parameters": {
+ "bootstrapServers": "kafka:9092",
+ "groupId": "clamp-grp",
+ "enableAutoCommit": true,
+ "autoCommitTime": 1000,
+ "sessionTimeout": 30000,
+ "consumerPollTime": 100,
+ "consumerTopicList": [
+ "ac_element_msg"
+ ],
+ "keyDeserializer": "org.apache.kafka.common.serialization.StringDeserializer",
+ "valueDeserializer": "org.apache.kafka.common.serialization.StringDeserializer",
+ "kafkaProperties": []
+ }
+ },
+ "eventProtocolParameters": {
+ "eventProtocol": "JSON",
+ "parameters": {
+ "pojoField": "DmaapResponseEvent"
+ }
+ },
+ "eventName": "AcElementEvent",
+ "eventNameFilter": "AcElementEvent"
+ }
+ },
+ "eventOutputParameters": {
+ "logOutputter": {
+ "carrierTechnologyParameters": {
+ "carrierTechnology": "FILE",
+ "parameters": {
+ "fileName": "outputevents.log"
+ }
+ },
+ "eventProtocolParameters": {
+ "eventProtocol": "JSON"
+ }
+ },
+ "DmaapReplyProducer": {
+ "carrierTechnologyParameters": {
+ "carrierTechnology": "KAFKA",
+ "parameterClassName": "org.onap.policy.apex.plugins.event.carrier.kafka.KafkaCarrierTechnologyParameters",
+ "parameters": {
+ "bootstrapServers": "kafka:9092",
+ "acks": "all",
+ "retries": 0,
+ "batchSize": 16384,
+ "lingerTime": 1,
+ "bufferMemory": 33554432,
+ "producerTopic": "policy_update_msg",
+ "keySerializer": "org.apache.kafka.common.serialization.StringSerializer",
+ "valueSerializer": "org.apache.kafka.common.serialization.StringSerializer",
+ "kafkaProperties": []
+ }
+ },
+ "eventProtocolParameters": {
+ "eventProtocol": "JSON",
+ "parameters": {
+ "pojoField": "DmaapResponseStatusEvent"
+ }
+ },
+ "eventNameFilter": "LogEvent|DmaapResponseStatusEvent"
+ }
+ }
+ },
+ "name": "onap.policies.native.apex.ac.element",
+ "version": "1.0.0"
+ }
+ }
+ ]
+ }
+} \ No newline at end of file
diff --git a/policy-regression-tests/policy-clamp-regression/src/test/resources/data/acelement-usecase2.json b/policy-regression-tests/policy-clamp-regression/src/test/resources/data/acelement-usecase2.json
new file mode 100644
index 00000000..a64e4851
--- /dev/null
+++ b/policy-regression-tests/policy-clamp-regression/src/test/resources/data/acelement-usecase2.json
@@ -0,0 +1,1498 @@
+{
+ "tosca_definitions_version": "tosca_simple_yaml_1_3",
+ "data_types": {
+ "onap.datatypes.ToscaConceptIdentifier": {
+ "derived_from": "tosca.datatypes.Root",
+ "properties": {
+ "name": {
+ "type": "string",
+ "required": true
+ },
+ "version": {
+ "type": "string",
+ "required": true
+ }
+ }
+ },
+ "onap.datatypes.native.apex.EngineService": {
+ "derived_from": "tosca.datatypes.Root",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "Specifies the engine name",
+ "required": false,
+ "default": "ApexEngineService"
+ },
+ "version": {
+ "type": "string",
+ "description": "Specifies the engine version in double dotted format",
+ "required": false,
+ "default": "1.0.0"
+ },
+ "id": {
+ "type": "integer",
+ "description": "Specifies the engine id",
+ "required": true
+ },
+ "instance_count": {
+ "type": "integer",
+ "description": "Specifies the number of engine threads that should be run",
+ "required": true
+ },
+ "deployment_port": {
+ "type": "integer",
+ "description": "Specifies the port to connect to for engine administration",
+ "required": false,
+ "default": 1
+ },
+ "policy_model_file_name": {
+ "type": "string",
+ "description": "The name of the file from which to read the APEX policy model",
+ "required": false
+ },
+ "policy_type_impl": {
+ "type": "string",
+ "description": "The policy type implementation from which to read the APEX policy model",
+ "required": false
+ },
+ "periodic_event_period": {
+ "type": "string",
+ "description": "The time interval in milliseconds for the periodic scanning event, 0 means don't scan",
+ "required": false
+ },
+ "engine": {
+ "type": "onap.datatypes.native.apex.engineservice.Engine",
+ "description": "The parameters for all engines in the APEX engine service",
+ "required": true
+ }
+ }
+ },
+ "onap.datatypes.native.apex.EventHandler": {
+ "derived_from": "tosca.datatypes.Root",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "Specifies the event handler name, if not specified this is set to the key name",
+ "required": false
+ },
+ "carrier_technology": {
+ "type": "onap.datatypes.native.apex.CarrierTechnology",
+ "description": "Specifies the carrier technology of the event handler (such as REST/Web Socket/Kafka)",
+ "required": true
+ },
+ "event_protocol": {
+ "type": "onap.datatypes.native.apex.EventProtocol",
+ "description": "Specifies the event protocol of events for the event handler (such as Yaml/JSON/XML/POJO)",
+ "required": true
+ },
+ "event_name": {
+ "type": "string",
+ "description": "Specifies the event name for events on this event handler, if not specified, the event name is read from or written to the event being received or sent",
+ "required": false
+ },
+ "event_name_filter": {
+ "type": "string",
+ "description": "Specifies a filter as a regular expression, events that do not match the filter are dropped, the default is to let all events through",
+ "required": false
+ },
+ "synchronous_mode": {
+ "type": "boolean",
+ "description": "Specifies the event handler is syncronous (receive event and send response)",
+ "required": false,
+ "default": false
+ },
+ "synchronous_peer": {
+ "type": "string",
+ "description": "The peer event handler (output for input or input for output) of this event handler in synchronous mode, this parameter is mandatory if the event handler is in synchronous mode",
+ "required": false
+ },
+ "synchronous_timeout": {
+ "type": "integer",
+ "description": "The timeout in milliseconds for responses to be issued by APEX torequests, this parameter is mandatory if the event handler is in synchronous mode",
+ "required": false
+ },
+ "requestor_mode": {
+ "type": "boolean",
+ "description": "Specifies the event handler is in requestor mode (send event and wait for response mode)",
+ "required": false,
+ "default": false
+ },
+ "requestor_peer": {
+ "type": "string",
+ "description": "The peer event handler (output for input or input for output) of this event handler in requestor mode, this parameter is mandatory if the event handler is in requestor mode",
+ "required": false
+ },
+ "requestor_timeout": {
+ "type": "integer",
+ "description": "The timeout in milliseconds for wait for responses to requests, this parameter is mandatory if the event handler is in requestor mode",
+ "required": false
+ }
+ }
+ },
+ "onap.datatypes.native.apex.CarrierTechnology": {
+ "derived_from": "tosca.datatypes.Root",
+ "properties": {
+ "label": {
+ "type": "string",
+ "description": "The label (name) of the carrier technology (such as REST, Kafka, WebSocket)",
+ "required": true
+ },
+ "plugin_parameter_class_name": {
+ "type": "string",
+ "description": "The class name of the class that overrides default handling of event input or output for this carrier technology, defaults to the supplied input or output class",
+ "required": false
+ }
+ }
+ },
+ "onap.datatypes.native.apex.EventProtocol": {
+ "derived_from": "tosca.datatypes.Root",
+ "properties": {
+ "label": {
+ "type": "string",
+ "description": "The label (name) of the event protocol (such as Yaml, JSON, XML, or POJO)",
+ "required": true
+ },
+ "event_protocol_plugin_class": {
+ "type": "string",
+ "description": "The class name of the class that overrides default handling of the event protocol for this carrier technology, defaults to the supplied event protocol class",
+ "required": false
+ }
+ }
+ },
+ "onap.datatypes.native.apex.Environment": {
+ "derived_from": "tosca.datatypes.Root",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "The name of the environment variable",
+ "required": true
+ },
+ "value": {
+ "type": "string",
+ "description": "The value of the environment variable",
+ "required": true
+ }
+ }
+ },
+ "onap.datatypes.native.apex.engineservice.Engine": {
+ "derived_from": "tosca.datatypes.Root",
+ "properties": {
+ "context": {
+ "type": "onap.datatypes.native.apex.engineservice.engine.Context",
+ "description": "The properties for handling context in APEX engines, defaults to using Java maps for context",
+ "required": false
+ },
+ "executors": {
+ "type": "map",
+ "description": "The plugins for policy executors used in engines such as javascript, MVEL, Jython",
+ "required": true,
+ "entry_schema": {
+ "description": "The plugin class path for this policy executor",
+ "type": "string"
+ }
+ }
+ }
+ },
+ "onap.datatypes.native.apex.engineservice.engine.Context": {
+ "derived_from": "tosca.datatypes.Root",
+ "properties": {
+ "distributor": {
+ "type": "onap.datatypes.native.apex.Plugin",
+ "description": "The plugin to be used for distributing context between APEX PDPs at runtime",
+ "required": false
+ },
+ "schemas": {
+ "type": "map",
+ "description": "The plugins for context schemas available in APEX PDPs such as Java and Avro",
+ "required": false,
+ "entry_schema": {
+ "type": "onap.datatypes.native.apex.Plugin"
+ }
+ },
+ "locking": {
+ "type": "onap.datatypes.native.apex.Plugin",
+ "description": "The plugin to be used for locking context in and between APEX PDPs at runtime",
+ "required": false
+ },
+ "persistence": {
+ "type": "onap.datatypes.native.apex.Plugin",
+ "description": "The plugin to be used for persisting context for APEX PDPs at runtime",
+ "required": false
+ }
+ }
+ },
+ "onap.datatypes.native.apex.Plugin": {
+ "derived_from": "tosca.datatypes.Root",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "The name of the executor such as Javascript, Jython or MVEL",
+ "required": true
+ },
+ "plugin_class_name": {
+ "type": "string",
+ "description": "The class path of the plugin class for this executor"
+ }
+ }
+ },
+ "org.onap.datatypes.policy.clamp.acm.httpAutomationCompositionElement.RestRequest": {
+ "version": "1.0.0",
+ "derived_from": "tosca.datatypes.Root",
+ "properties": {
+ "restRequestId": {
+ "type": "onap.datatypes.ToscaConceptIdentifier",
+ "required": true,
+ "description": "The name and version of a REST request to be sent to a REST endpoint"
+ },
+ "httpMethod": {
+ "type": "string",
+ "required": true,
+ "constraints": [
+ {
+ "valid_values": [
+ "POST",
+ "PUT",
+ "GET",
+ "DELETE"
+ ]
+ }
+ ],
+ "description": "The REST method to use"
+ },
+ "path": {
+ "type": "string",
+ "required": true,
+ "description": "The path of the REST request relative to the base URL"
+ },
+ "body": {
+ "type": "string",
+ "required": false,
+ "description": "The body of the REST request for PUT and POST requests"
+ },
+ "expectedResponse": {
+ "type": "integer",
+ "required": true,
+ "constraints": [],
+ "description": "THe expected HTTP status code for the REST request"
+ }
+ }
+ },
+ "org.onap.datatypes.policy.clamp.acm.httpAutomationCompositionElement.ConfigurationEntity": {
+ "version": "1.0.0",
+ "derived_from": "tosca.datatypes.Root",
+ "properties": {
+ "configurationEntityId": {
+ "type": "onap.datatypes.ToscaConceptIdentifier",
+ "required": true,
+ "description": "The name and version of a Configuration Entity to be handled by the HTTP Automation Composition Element"
+ },
+ "restSequence": {
+ "type": "list",
+ "entry_schema": {
+ "type": "org.onap.datatypes.policy.clamp.acm.httpAutomationCompositionElement.RestRequest",
+ "type_version": "1.0.0"
+ },
+ "description": "A sequence of REST commands to send to the REST endpoint"
+ }
+ }
+ }
+ },
+ "policy_types": {
+ "onap.policies.Native": {
+ "derived_from": "tosca.policies.Root",
+ "description": "a base policy type for all native PDP policies",
+ "version": "1.0.0",
+ "name": "onap.policies.Native"
+ },
+ "onap.policies.native.Apex": {
+ "derived_from": "onap.policies.Native",
+ "description": "a policy type for native apex policies",
+ "version": "1.0.0",
+ "name": "onap.policies.native.Apex",
+ "properties": {
+ "engine_service": {
+ "type": "onap.datatypes.native.apex.EngineService",
+ "description": "APEX Engine Service Parameters"
+ },
+ "inputs": {
+ "type": "map",
+ "description": "Inputs for handling events coming into the APEX engine",
+ "entry_schema": {
+ "type": "onap.datatypes.native.apex.EventHandler"
+ }
+ },
+ "outputs": {
+ "type": "map",
+ "description": "Outputs for handling events going out of the APEX engine",
+ "entry_schema": {
+ "type": "onap.datatypes.native.apex.EventHandler"
+ }
+ },
+ "environment": {
+ "type": "list",
+ "description": "Envioronmental parameters for the APEX engine",
+ "entry_schema": {
+ "type": "onap.datatypes.native.apex.Environment"
+ }
+ }
+ }
+ }
+ },
+ "node_types": {
+ "org.onap.policy.clamp.acm.Participant": {
+ "version": "1.0.1",
+ "derived_from": "tosca.nodetypes.Root",
+ "properties": {
+ "provider": {
+ "type": "string",
+ "required": false
+ }
+ }
+ },
+ "org.onap.policy.clamp.acm.AutomationCompositionElement": {
+ "version": "1.0.1",
+ "derived_from": "tosca.nodetypes.Root",
+ "properties": {
+ "provider": {
+ "type": "string",
+ "required": false,
+ "metadata": {
+ "common": true
+ },
+ "description": "Specifies the organization that provides the automation composition element"
+ },
+ "startPhase": {
+ "type": "integer",
+ "required": false,
+ "constraints": [
+ {
+ "greater_or_equal": 0
+ }
+ ],
+ "metadata": {
+ "common": true
+ },
+ "description": "A value indicating the start phase in which this automation composition element will be started, the first start phase is zero. Automation Composition Elements are started in their start_phase order and stopped in reverse start phase order. Automation Composition Elements with the same start phase are started and stopped simultaneously"
+ },
+ "uninitializedToPassiveTimeout": {
+ "type": "integer",
+ "required": false,
+ "constraints": [
+ {
+ "greater_or_equal": 0
+ }
+ ],
+ "default": 60,
+ "metadata": {
+ "common": true
+ },
+ "description": "The maximum time in seconds to wait for a state chage from uninitialized to passive"
+ },
+ "passiveToRunningTimeout": {
+ "type": "integer",
+ "required": false,
+ "constraints": [
+ {
+ "greater_or_equal": 0
+ }
+ ],
+ "default": 60,
+ "metadata": {
+ "common": true
+ },
+ "description": "The maximum time in seconds to wait for a state chage from passive to running"
+ },
+ "runningToPassiveTimeout": {
+ "type": "integer",
+ "required": false,
+ "constraints": [
+ {
+ "greater_or_equal": 0
+ }
+ ],
+ "default": 60,
+ "metadata": {
+ "common": true
+ },
+ "description": "The maximum time in seconds to wait for a state chage from running to passive"
+ },
+ "passiveToUninitializedTimeout": {
+ "type": "integer",
+ "required": false,
+ "constraints": [
+ {
+ "greater_or_equal": 0
+ }
+ ],
+ "default": 60,
+ "metadata": {
+ "common": true
+ },
+ "description": "The maximum time in seconds to wait for a state chage from passive to uninitialized"
+ }
+ }
+ },
+ "org.onap.policy.clamp.acm.AutomationComposition": {
+ "version": "1.0.1",
+ "derived_from": "tosca.nodetypes.Root",
+ "properties": {
+ "provider": {
+ "type": "string",
+ "required": false,
+ "metadata": {
+ "common": true
+ },
+ "description": "Specifies the organization that provides the automation composition element"
+ },
+ "elements": {
+ "type": "list",
+ "required": true,
+ "metadata": {
+ "common": true
+ },
+ "entry_schema": {
+ "type": "onap.datatypes.ToscaConceptIdentifier"
+ },
+ "description": "Specifies a list of automation composition element definitions that make up this automation composition definition"
+ }
+ }
+ },
+ "org.onap.policy.clamp.acm.PolicyAutomationCompositionElement": {
+ "version": "1.0.0",
+ "derived_from": "org.onap.policy.clamp.acm.AutomationCompositionElement",
+ "properties": {
+ "policy_type_id": {
+ "type": "onap.datatypes.ToscaConceptIdentifier",
+ "required": true
+ },
+ "policy_id": {
+ "type": "onap.datatypes.ToscaConceptIdentifier",
+ "required": false
+ }
+ }
+ },
+ "org.onap.policy.clamp.acm.K8SMicroserviceAutomationCompositionElement": {
+ "version": "1.0.0",
+ "derived_from": "org.onap.policy.clamp.acm.AutomationCompositionElement",
+ "properties": {
+ "chart": {
+ "type": "string",
+ "required": true
+ },
+ "configs": {
+ "type": "list",
+ "required": false
+ },
+ "requirements": {
+ "type": "string",
+ "required": false
+ },
+ "templates": {
+ "type": "list",
+ "required": false,
+ "entry_schema": null
+ },
+ "values": {
+ "type": "string",
+ "required": true
+ }
+ }
+ },
+ "org.onap.policy.clamp.acm.HttpAutomationCompositionElement": {
+ "version": "1.0.0",
+ "derived_from": "org.onap.policy.clamp.acm.AutomationCompositionElement",
+ "properties": {
+ "baseUrl": {
+ "type": "string",
+ "required": true,
+ "description": "The base URL to be prepended to each path, identifies the host for the REST endpoints."
+ },
+ "httpHeaders": {
+ "type": "map",
+ "required": false,
+ "entry_schema": {
+ "type": "string"
+ },
+ "description": "HTTP headers to send on REST requests"
+ },
+ "configurationEntities": {
+ "type": "map",
+ "required": true,
+ "entry_schema": {
+ "type": "org.onap.datatypes.policy.clamp.acm.httpAutomationCompositionElement.ConfigurationEntity",
+ "type_version": "1.0.0"
+ },
+ "description": "The connfiguration entities the Automation Composition Element is managing and their associated REST requests"
+ }
+ }
+ }
+ },
+ "topology_template": {
+ "inputs": {
+ "acm_element_policy": {
+ "type": "onap.datatypes.ToscaConceptIdentifier",
+ "description": "The ID of the operational policy to use",
+ "default": {
+ "name": "onap.policies.native.apex.ac.element",
+ "version": "1.0.2"
+ }
+ }
+ },
+ "node_templates": {
+ "org.onap.policy.clamp.acm.PolicyParticipant": {
+ "version": "2.3.1",
+ "type": "org.onap.policy.clamp.acm.Participant",
+ "type_version": "1.0.1",
+ "description": "Participant for Policy microservices",
+ "properties": {
+ "provider": "ONAP"
+ }
+ },
+ "onap.policy.clamp.ac.element.Policy_AutomationCompositionElement": {
+ "version": "1.2.3",
+ "type": "org.onap.policy.clamp.acm.PolicyAutomationCompositionElement",
+ "type_version": "1.0.0",
+ "description": "Automation composition element for the operational policy for Performance Management Subscription Handling",
+ "properties": {
+ "provider": "Ericsson",
+ "startPhase": 0
+ }
+ },
+ "org.onap.k8s.acm.K8SAutomationCompositionParticipant": {
+ "version": "2.3.4",
+ "type": "org.onap.policy.clamp.acm.Participant",
+ "type_version": "1.0.1",
+ "description": "Participant for K8S",
+ "properties": {
+ "provider": "ONAP"
+ }
+ },
+ "onap.policy.clamp.ac.element.K8S_StarterAutomationCompositionElement": {
+ "version": "1.2.3",
+ "type": "org.onap.policy.clamp.acm.K8SMicroserviceAutomationCompositionElement",
+ "type_version": "1.0.0",
+ "description": "Automation composition element for the K8S microservice for AC Element Starter",
+ "properties": {
+ "provider": "ONAP",
+ "startPhase": 0,
+ "uninitializedToPassiveTimeout": 300,
+ "podStatusCheckInterval": 30
+ }
+ },
+ "onap.policy.clamp.ac.element.K8S_BridgeAutomationCompositionElement": {
+ "version": "1.2.3",
+ "type": "org.onap.policy.clamp.acm.K8SMicroserviceAutomationCompositionElement",
+ "type_version": "1.0.0",
+ "description": "Automation composition element for the K8S microservice for AC Element Bridge",
+ "properties": {
+ "provider": "ONAP",
+ "startPhase": 0,
+ "uninitializedToPassiveTimeout": 300,
+ "podStatusCheckInterval": 30
+ }
+ },
+ "onap.policy.clamp.ac.element.K8S_SinkAutomationCompositionElement": {
+ "version": "1.2.3",
+ "type": "org.onap.policy.clamp.acm.K8SMicroserviceAutomationCompositionElement",
+ "type_version": "1.0.0",
+ "description": "Automation composition element for the K8S microservice for AC Element Sink",
+ "properties": {
+ "provider": "ONAP",
+ "startPhase": 0,
+ "uninitializedToPassiveTimeout": 300,
+ "podStatusCheckInterval": 30
+ }
+ },
+ "org.onap.policy.clamp.acm.HttpParticipant": {
+ "version": "2.3.4",
+ "type": "org.onap.policy.clamp.acm.Participant",
+ "type_version": "1.0.1",
+ "description": "Participant for Http requests",
+ "properties": {
+ "provider": "ONAP"
+ }
+ },
+ "onap.policy.clamp.ac.element.Http_StarterAutomationCompositionElement": {
+ "version": "1.2.3",
+ "type": "org.onap.policy.clamp.acm.HttpAutomationCompositionElement",
+ "type_version": "1.0.0",
+ "description": "Automation composition element for the http requests of AC Element Starter microservice",
+ "properties": {
+ "provider": "ONAP",
+ "uninitializedToPassiveTimeout": 300,
+ "startPhase": 1
+ }
+ },
+ "onap.policy.clamp.ac.element.Http_BridgeAutomationCompositionElement": {
+ "version": "1.2.3",
+ "type": "org.onap.policy.clamp.acm.HttpAutomationCompositionElement",
+ "type_version": "1.0.0",
+ "description": "Automation composition element for the http requests of AC Element Bridge microservice",
+ "properties": {
+ "provider": "ONAP",
+ "uninitializedToPassiveTimeout": 300,
+ "startPhase": 1
+ }
+ },
+ "onap.policy.clamp.ac.element.Http_SinkAutomationCompositionElement": {
+ "version": "1.2.3",
+ "type": "org.onap.policy.clamp.acm.HttpAutomationCompositionElement",
+ "type_version": "1.0.0",
+ "description": "Automation composition element for the http requests of AC Element Sink microservice",
+ "properties": {
+ "provider": "ONAP",
+ "uninitializedToPassiveTimeout": 300,
+ "startPhase": 1
+ }
+ },
+ "onap.policy.clamp.ac.element.AutomationCompositionDefinition": {
+ "version": "1.2.3",
+ "type": "org.onap.policy.clamp.acm.AutomationComposition",
+ "type_version": "1.0.1",
+ "description": "Automation composition for Demo",
+ "properties": {
+ "provider": "ONAP",
+ "elements": [
+ {
+ "name": "onap.policy.clamp.ac.element.Policy_AutomationCompositionElement",
+ "version": "1.2.3"
+ },
+ {
+ "name": "onap.policy.clamp.ac.element.K8S_StarterAutomationCompositionElement",
+ "version": "1.2.3"
+ },
+ {
+ "name": "onap.policy.clamp.ac.element.K8S_BridgeAutomationCompositionElement",
+ "version": "1.2.3"
+ },
+ {
+ "name": "onap.policy.clamp.ac.element.K8S_SinkAutomationCompositionElement",
+ "version": "1.2.3"
+ },
+ {
+ "name": "onap.policy.clamp.ac.element.Http_StarterAutomationCompositionElement",
+ "version": "1.2.3"
+ },
+ {
+ "name": "onap.policy.clamp.ac.element.Http_BridgeAutomationCompositionElement",
+ "version": "1.2.3"
+ },
+ {
+ "name": "onap.policy.clamp.ac.element.Http_SinkAutomationCompositionElement",
+ "version": "1.2.3"
+ }
+ ]
+ }
+ }
+ },
+ "policies": [
+ {
+ "onap.policies.native.apex.ac.element": {
+ "type": "onap.policies.native.Apex",
+ "type_version": "1.0.0",
+ "properties": {
+ "engineServiceParameters": {
+ "name": "MyApexEngine",
+ "version": "0.0.1",
+ "id": 45,
+ "instanceCount": 3,
+ "deploymentPort": 12561,
+ "engineParameters": {
+ "executorParameters": {
+ "JAVASCRIPT": {
+ "parameterClassName": "org.onap.policy.apex.plugins.executor.javascript.JavascriptExecutorParameters"
+ }
+ },
+ "contextParameters": {
+ "parameterClassName": "org.onap.policy.apex.context.parameters.ContextParameters",
+ "schemaParameters": {
+ "Json": {
+ "parameterClassName": "org.onap.policy.apex.plugins.context.schema.json.JsonSchemaHelperParameters"
+ }
+ }
+ }
+ },
+ "policy_type_impl": {
+ "policies": {
+ "key": {
+ "name": "APEXacElementPolicy_Policies",
+ "version": "0.0.1"
+ },
+ "policyMap": {
+ "entry": [
+ {
+ "key": {
+ "name": "ReceiveEventPolicy",
+ "version": "0.0.1"
+ },
+ "value": {
+ "policyKey": {
+ "name": "ReceiveEventPolicy",
+ "version": "0.0.1"
+ },
+ "template": "Freestyle",
+ "state": {
+ "entry": [
+ {
+ "key": "DecideForwardingState",
+ "value": {
+ "stateKey": {
+ "parentKeyName": "ReceiveEventPolicy",
+ "parentKeyVersion": "0.0.1",
+ "parentLocalName": "NULL",
+ "localName": "DecideForwardingState"
+ },
+ "trigger": {
+ "name": "AcElementEvent",
+ "version": "0.0.1"
+ },
+ "stateOutputs": {
+ "entry": [
+ {
+ "key": "CreateForwardPayload",
+ "value": {
+ "key": {
+ "parentKeyName": "ReceiveEventPolicy",
+ "parentKeyVersion": "0.0.1",
+ "parentLocalName": "DecideForwardingState",
+ "localName": "CreateForwardPayload"
+ },
+ "outgoingEvent": {
+ "name": "DmaapResponseStatusEvent",
+ "version": "0.0.1"
+ },
+ "outgoingEventReference": [
+ {
+ "name": "DmaapResponseStatusEvent",
+ "version": "0.0.1"
+ }
+ ],
+ "nextState": {
+ "parentKeyName": "NULL",
+ "parentKeyVersion": "0.0.0",
+ "parentLocalName": "NULL",
+ "localName": "NULL"
+ }
+ }
+ }
+ ]
+ },
+ "contextAlbumReference": [],
+ "taskSelectionLogic": {
+ "key": {
+ "parentKeyName": "NULL",
+ "parentKeyVersion": "0.0.0",
+ "parentLocalName": "NULL",
+ "localName": "NULL"
+ },
+ "logicFlavour": "UNDEFINED",
+ "logic": ""
+ },
+ "stateFinalizerLogicMap": {
+ "entry": []
+ },
+ "defaultTask": {
+ "name": "ForwardPayloadTask",
+ "version": "0.0.1"
+ },
+ "taskReferences": {
+ "entry": [
+ {
+ "key": {
+ "name": "ForwardPayloadTask",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "parentKeyName": "ReceiveEventPolicy",
+ "parentKeyVersion": "0.0.1",
+ "parentLocalName": "DecideForwardingState",
+ "localName": "ReceiveEventPolicy"
+ },
+ "outputType": "DIRECT",
+ "output": {
+ "parentKeyName": "ReceiveEventPolicy",
+ "parentKeyVersion": "0.0.1",
+ "parentLocalName": "DecideForwardingState",
+ "localName": "CreateForwardPayload"
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ ]
+ },
+ "firstState": "DecideForwardingState"
+ }
+ }
+ ]
+ }
+ },
+ "tasks": {
+ "key": {
+ "name": "APEXacElementPolicy_Tasks",
+ "version": "0.0.1"
+ },
+ "taskMap": {
+ "entry": [
+ {
+ "key": {
+ "name": "ForwardPayloadTask",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "ForwardPayloadTask",
+ "version": "0.0.1"
+ },
+ "inputEvent": {
+ "key": {
+ "name": "AcElementEvent",
+ "version": "0.0.1"
+ },
+ "nameSpace": "org.onap.policy.apex.ac.element",
+ "source": "Dmaap",
+ "target": "APEX",
+ "parameter": {
+ "entry": [
+ {
+ "key": "DmaapResponseEvent",
+ "value": {
+ "key": {
+ "parentKeyName": "AcElementEvent",
+ "parentKeyVersion": "0.0.1",
+ "parentLocalName": "NULL",
+ "localName": "DmaapResponseEvent"
+ },
+ "fieldSchemaKey": {
+ "name": "ACEventType",
+ "version": "0.0.1"
+ },
+ "optional": false
+ }
+ }
+ ]
+ },
+ "toscaPolicyState": "ENTRY"
+ },
+ "outputEvents": {
+ "entry": [
+ {
+ "key": "DmaapResponseStatusEvent",
+ "value": {
+ "key": {
+ "name": "DmaapResponseStatusEvent",
+ "version": "0.0.1"
+ },
+ "nameSpace": "org.onap.policy.apex.ac.element",
+ "source": "APEX",
+ "target": "Dmaap",
+ "parameter": {
+ "entry": [
+ {
+ "key": "DmaapResponseStatusEvent",
+ "value": {
+ "key": {
+ "parentKeyName": "DmaapResponseStatusEvent",
+ "parentKeyVersion": "0.0.1",
+ "parentLocalName": "NULL",
+ "localName": "DmaapResponseStatusEvent"
+ },
+ "fieldSchemaKey": {
+ "name": "ACEventType",
+ "version": "0.0.1"
+ },
+ "optional": false
+ }
+ }
+ ]
+ },
+ "toscaPolicyState": ""
+ }
+ }
+ ]
+ },
+ "taskParameters": {
+ "entry": []
+ },
+ "contextAlbumReference": [
+ {
+ "name": "ACElementAlbum",
+ "version": "0.0.1"
+ }
+ ],
+ "taskLogic": {
+ "key": {
+ "parentKeyName": "ForwardPayloadTask",
+ "parentKeyVersion": "0.0.1",
+ "parentLocalName": "NULL",
+ "localName": "TaskLogic"
+ },
+ "logicFlavour": "JAVASCRIPT",
+ "logic": "/*\n * ============LICENSE_START=======================================================\n * Copyright (C) 2022 Nordix. All rights reserved.\n * ================================================================================\n * Licensed under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n * ============LICENSE_END=========================================================\n */\n\nexecutor.logger.info(executor.subject.id);\nexecutor.logger.info(executor.inFields);\n\nvar msgResponse = executor.inFields.get('DmaapResponseEvent');\nexecutor.logger.info('Task in progress with mesages: ' + msgResponse);\n\nvar elementId = msgResponse.get('elementId').get('name');\n\nif (msgResponse.get('messageType') == 'STATUS' &&\n (elementId == 'onap.policy.clamp.ac.startertobridge'\n || elementId == 'onap.policy.clamp.ac.bridgetosink')) {\n\n var receiverId = '';\n if (elementId == 'onap.policy.clamp.ac.startertobridge') {\n receiverId = 'onap.policy.clamp.ac.bridge';\n } else {\n receiverId = 'onap.policy.clamp.ac.sink';\n }\n\n var elementIdResponse = new java.util.HashMap();\n elementIdResponse.put('name', receiverId);\n elementIdResponse.put('version', msgResponse.get('elementId').get('version'));\n\n var dmaapResponse = new java.util.HashMap();\n dmaapResponse.put('elementId', elementIdResponse);\n\n var message = msgResponse.get('message') + ' trace added from policy';\n dmaapResponse.put('message', message);\n dmaapResponse.put('messageType', 'STATUS');\n dmaapResponse.put('messageId', msgResponse.get('messageId'));\n dmaapResponse.put('timestamp', msgResponse.get('timestamp'));\n\n executor.logger.info('Sending forwarding Event to Ac element: ' + dmaapResponse);\n\n executor.outFields.put('DmaapResponseStatusEvent', dmaapResponse);\n}\n\ntrue;"
+ }
+ }
+ }
+ ]
+ }
+ },
+ "events": {
+ "key": {
+ "name": "APEXacElementPolicy_Events",
+ "version": "0.0.1"
+ },
+ "eventMap": {
+ "entry": [
+ {
+ "key": {
+ "name": "AcElementEvent",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "AcElementEvent",
+ "version": "0.0.1"
+ },
+ "nameSpace": "org.onap.policy.apex.ac.element",
+ "source": "Dmaap",
+ "target": "APEX",
+ "parameter": {
+ "entry": [
+ {
+ "key": "DmaapResponseEvent",
+ "value": {
+ "key": {
+ "parentKeyName": "AcElementEvent",
+ "parentKeyVersion": "0.0.1",
+ "parentLocalName": "NULL",
+ "localName": "DmaapResponseEvent"
+ },
+ "fieldSchemaKey": {
+ "name": "ACEventType",
+ "version": "0.0.1"
+ },
+ "optional": false
+ }
+ }
+ ]
+ },
+ "toscaPolicyState": "ENTRY"
+ }
+ },
+ {
+ "key": {
+ "name": "DmaapResponseStatusEvent",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "DmaapResponseStatusEvent",
+ "version": "0.0.1"
+ },
+ "nameSpace": "org.onap.policy.apex.ac.element",
+ "source": "APEX",
+ "target": "Dmaap",
+ "parameter": {
+ "entry": [
+ {
+ "key": "DmaapResponseStatusEvent",
+ "value": {
+ "key": {
+ "parentKeyName": "DmaapResponseStatusEvent",
+ "parentKeyVersion": "0.0.1",
+ "parentLocalName": "NULL",
+ "localName": "DmaapResponseStatusEvent"
+ },
+ "fieldSchemaKey": {
+ "name": "ACEventType",
+ "version": "0.0.1"
+ },
+ "optional": false
+ }
+ }
+ ]
+ },
+ "toscaPolicyState": ""
+ }
+ },
+ {
+ "key": {
+ "name": "LogEvent",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "LogEvent",
+ "version": "0.0.1"
+ },
+ "nameSpace": "org.onap.policy.apex.ac.element",
+ "source": "APEX",
+ "target": "file",
+ "parameter": {
+ "entry": [
+ {
+ "key": "final_status",
+ "value": {
+ "key": {
+ "parentKeyName": "LogEvent",
+ "parentKeyVersion": "0.0.1",
+ "parentLocalName": "NULL",
+ "localName": "final_status"
+ },
+ "fieldSchemaKey": {
+ "name": "SimpleStringType",
+ "version": "0.0.1"
+ },
+ "optional": false
+ }
+ },
+ {
+ "key": "message",
+ "value": {
+ "key": {
+ "parentKeyName": "LogEvent",
+ "parentKeyVersion": "0.0.1",
+ "parentLocalName": "NULL",
+ "localName": "message"
+ },
+ "fieldSchemaKey": {
+ "name": "SimpleStringType",
+ "version": "0.0.1"
+ },
+ "optional": false
+ }
+ }
+ ]
+ },
+ "toscaPolicyState": ""
+ }
+ }
+ ]
+ }
+ },
+ "albums": {
+ "key": {
+ "name": "APEXacElementPolicy_Albums",
+ "version": "0.0.1"
+ },
+ "albums": {
+ "entry": [
+ {
+ "key": {
+ "name": "ACElementAlbum",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "ACElementAlbum",
+ "version": "0.0.1"
+ },
+ "scope": "policy",
+ "isWritable": true,
+ "itemSchema": {
+ "name": "ACEventType",
+ "version": "0.0.1"
+ }
+ }
+ }
+ ]
+ }
+ },
+ "schemas": {
+ "key": {
+ "name": "APEXacElementPolicy_Schemas",
+ "version": "0.0.1"
+ },
+ "schemas": {
+ "entry": [
+ {
+ "key": {
+ "name": "ACEventType",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "ACEventType",
+ "version": "0.0.1"
+ },
+ "schemaFlavour": "Json",
+ "schemaDefinition": "{\n \"$schema\": \"http://json-schema.org/draft-04/schema#\",\n \"type\": \"object\",\n \"properties\": {\n \"elementId\": {\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\n },\n \"version\": {\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"name\",\n \"version\"\n ]\n },\n \"message\": {\n \"type\": \"string\"\n },\n \"messageType\": {\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"elementId\",\n \"message\",\n \"messageType\"\n ]\n}"
+ }
+ },
+ {
+ "key": {
+ "name": "SimpleIntType",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "SimpleIntType",
+ "version": "0.0.1"
+ },
+ "schemaFlavour": "Java",
+ "schemaDefinition": "java.lang.Integer"
+ }
+ },
+ {
+ "key": {
+ "name": "SimpleStringType",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "SimpleStringType",
+ "version": "0.0.1"
+ },
+ "schemaFlavour": "Java",
+ "schemaDefinition": "java.lang.String"
+ }
+ },
+ {
+ "key": {
+ "name": "UUIDType",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "UUIDType",
+ "version": "0.0.1"
+ },
+ "schemaFlavour": "Java",
+ "schemaDefinition": "java.util.UUID"
+ }
+ }
+ ]
+ }
+ },
+ "key": {
+ "name": "APEXacElementPolicy",
+ "version": "0.0.1"
+ },
+ "keyInformation": {
+ "key": {
+ "name": "APEXacElementPolicy_KeyInfo",
+ "version": "0.0.1"
+ },
+ "keyInfoMap": {
+ "entry": [
+ {
+ "key": {
+ "name": "ACElementAlbum",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "ACElementAlbum",
+ "version": "0.0.1"
+ },
+ "UUID": "7cddfab8-6d3f-3f7f-8ac3-e2eb5979c900",
+ "description": "Generated description for concept referred to by key \"ACElementAlbum:0.0.1\""
+ }
+ },
+ {
+ "key": {
+ "name": "ACEventType",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "ACEventType",
+ "version": "0.0.1"
+ },
+ "UUID": "dab78794-b666-3929-a75b-70d634b04fe5",
+ "description": "Generated description for concept referred to by key \"ACEventType:0.0.1\""
+ }
+ },
+ {
+ "key": {
+ "name": "APEXacElementPolicy",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "APEXacElementPolicy",
+ "version": "0.0.1"
+ },
+ "UUID": "da478611-7d77-3c46-b4be-be968769ba4e",
+ "description": "Generated description for concept referred to by key \"APEXacElementPolicy:0.0.1\""
+ }
+ },
+ {
+ "key": {
+ "name": "APEXacElementPolicy_Albums",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "APEXacElementPolicy_Albums",
+ "version": "0.0.1"
+ },
+ "UUID": "fa8dc15e-8c8d-3de3-a0f8-585b76511175",
+ "description": "Generated description for concept referred to by key \"APEXacElementPolicy_Albums:0.0.1\""
+ }
+ },
+ {
+ "key": {
+ "name": "APEXacElementPolicy_Events",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "APEXacElementPolicy_Events",
+ "version": "0.0.1"
+ },
+ "UUID": "8508cd65-8dd2-342d-a5c6-1570810dbe2b",
+ "description": "Generated description for concept referred to by key \"APEXacElementPolicy_Events:0.0.1\""
+ }
+ },
+ {
+ "key": {
+ "name": "APEXacElementPolicy_KeyInfo",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "APEXacElementPolicy_KeyInfo",
+ "version": "0.0.1"
+ },
+ "UUID": "09e6927d-c5ac-3779-919f-9333994eed22",
+ "description": "Generated description for concept referred to by key \"APEXacElementPolicy_KeyInfo:0.0.1\""
+ }
+ },
+ {
+ "key": {
+ "name": "APEXacElementPolicy_Policies",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "APEXacElementPolicy_Policies",
+ "version": "0.0.1"
+ },
+ "UUID": "cade3c9a-1600-3642-a6f4-315612187f46",
+ "description": "Generated description for concept referred to by key \"APEXacElementPolicy_Policies:0.0.1\""
+ }
+ },
+ {
+ "key": {
+ "name": "APEXacElementPolicy_Schemas",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "APEXacElementPolicy_Schemas",
+ "version": "0.0.1"
+ },
+ "UUID": "5bb4a8e9-35fa-37db-9a49-48ef036a7ba9",
+ "description": "Generated description for concept referred to by key \"APEXacElementPolicy_Schemas:0.0.1\""
+ }
+ },
+ {
+ "key": {
+ "name": "APEXacElementPolicy_Tasks",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "APEXacElementPolicy_Tasks",
+ "version": "0.0.1"
+ },
+ "UUID": "2527eeec-0d1f-3094-ad3f-212622b12836",
+ "description": "Generated description for concept referred to by key \"APEXacElementPolicy_Tasks:0.0.1\""
+ }
+ },
+ {
+ "key": {
+ "name": "AcElementEvent",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "AcElementEvent",
+ "version": "0.0.1"
+ },
+ "UUID": "32c013e2-2740-3986-a626-cbdf665b63e9",
+ "description": "Generated description for concept referred to by key \"AcElementEvent:0.0.1\""
+ }
+ },
+ {
+ "key": {
+ "name": "DmaapResponseStatusEvent",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "DmaapResponseStatusEvent",
+ "version": "0.0.1"
+ },
+ "UUID": "2715cb6c-2778-3461-8b69-871e79f95935",
+ "description": "Generated description for concept referred to by key \"DmaapResponseStatusEvent:0.0.1\""
+ }
+ },
+ {
+ "key": {
+ "name": "ForwardPayloadTask",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "ForwardPayloadTask",
+ "version": "0.0.1"
+ },
+ "UUID": "51defa03-1ecf-3314-bf34-2a652bce57fa",
+ "description": "Generated description for concept referred to by key \"ForwardPayloadTask:0.0.1\""
+ }
+ },
+ {
+ "key": {
+ "name": "LogEvent",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "LogEvent",
+ "version": "0.0.1"
+ },
+ "UUID": "c540f048-96af-35e3-a36e-e9c29377cba7",
+ "description": "Generated description for concept referred to by key \"LogEvent:0.0.1\""
+ }
+ },
+ {
+ "key": {
+ "name": "ReceiveEventPolicy",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "ReceiveEventPolicy",
+ "version": "0.0.1"
+ },
+ "UUID": "568b7345-9de1-36d3-b6a3-9b857e6809a1",
+ "description": "Generated description for concept referred to by key \"ReceiveEventPolicy:0.0.1\""
+ }
+ },
+ {
+ "key": {
+ "name": "SimpleIntType",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "SimpleIntType",
+ "version": "0.0.1"
+ },
+ "UUID": "153791fd-ae0a-36a7-88a5-309a7936415d",
+ "description": "Generated description for concept referred to by key \"SimpleIntType:0.0.1\""
+ }
+ },
+ {
+ "key": {
+ "name": "SimpleStringType",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "SimpleStringType",
+ "version": "0.0.1"
+ },
+ "UUID": "8a4957cf-9493-3a76-8c22-a208e23259af",
+ "description": "Generated description for concept referred to by key \"SimpleStringType:0.0.1\""
+ }
+ },
+ {
+ "key": {
+ "name": "UUIDType",
+ "version": "0.0.1"
+ },
+ "value": {
+ "key": {
+ "name": "UUIDType",
+ "version": "0.0.1"
+ },
+ "UUID": "6a8cc68e-dfc8-3403-9c6d-071c886b319c",
+ "description": "Generated description for concept referred to by key \"UUIDType:0.0.1\""
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "eventInputParameters": {
+ "DmaapConsumer": {
+ "carrierTechnologyParameters": {
+ "carrierTechnology": "KAFKA",
+ "parameterClassName": "org.onap.policy.apex.plugins.event.carrier.kafka.KafkaCarrierTechnologyParameters",
+ "parameters": {
+ "bootstrapServers": "kafka:9092",
+ "groupId": "clamp-grp",
+ "enableAutoCommit": true,
+ "autoCommitTime": 1000,
+ "sessionTimeout": 30000,
+ "consumerPollTime": 100,
+ "consumerTopicList": [
+ "ac_element_msg"
+ ],
+ "keyDeserializer": "org.apache.kafka.common.serialization.StringDeserializer",
+ "valueDeserializer": "org.apache.kafka.common.serialization.StringDeserializer",
+ "kafkaProperties": []
+ }
+ },
+ "eventProtocolParameters": {
+ "eventProtocol": "JSON",
+ "parameters": {
+ "pojoField": "DmaapResponseEvent"
+ }
+ },
+ "eventName": "AcElementEvent",
+ "eventNameFilter": "AcElementEvent"
+ }
+ },
+ "eventOutputParameters": {
+ "logOutputter": {
+ "carrierTechnologyParameters": {
+ "carrierTechnology": "FILE",
+ "parameters": {
+ "fileName": "outputevents.log"
+ }
+ },
+ "eventProtocolParameters": {
+ "eventProtocol": "JSON"
+ }
+ },
+ "DmaapReplyProducer": {
+ "carrierTechnologyParameters": {
+ "carrierTechnology": "KAFKA",
+ "parameterClassName": "org.onap.policy.apex.plugins.event.carrier.kafka.KafkaCarrierTechnologyParameters",
+ "parameters": {
+ "bootstrapServers": "kafka:9092",
+ "acks": "all",
+ "retries": 0,
+ "batchSize": 16384,
+ "lingerTime": 1,
+ "bufferMemory": 33554432,
+ "producerTopic": "policy_update_msg",
+ "keySerializer": "org.apache.kafka.common.serialization.StringSerializer",
+ "valueSerializer": "org.apache.kafka.common.serialization.StringSerializer",
+ "kafkaProperties": []
+ }
+ },
+ "eventProtocolParameters": {
+ "eventProtocol": "JSON",
+ "parameters": {
+ "pojoField": "DmaapResponseStatusEvent"
+ }
+ },
+ "eventNameFilter": "LogEvent|DmaapResponseStatusEvent"
+ }
+ }
+ },
+ "name": "onap.policies.native.apex.ac.element",
+ "version": "1.0.2"
+ }
+ }
+ ]
+ }
+} \ No newline at end of file
diff --git a/policy-regression-tests/policy-clamp-regression/src/test/resources/features/acm-basic-workflow.feature b/policy-regression-tests/policy-clamp-regression/src/test/resources/features/acm-basic-workflow.feature
new file mode 100644
index 00000000..9d2ed611
--- /dev/null
+++ b/policy-regression-tests/policy-clamp-regression/src/test/resources/features/acm-basic-workflow.feature
@@ -0,0 +1,97 @@
+Feature: ACM basic workflow
+ # Verifies ACM basic workflows commission, prime, de-prime, instantiate, deploy, update-properties, undeploy, uninstantiate and delete.
+
+ Scenario: ACM Health check should be up
+ When the acm health check endpoint is invoked "/onap/policy/clamp/acm/health"
+ Then the response status code should be 200
+
+ Scenario Outline: Verify the ACM commissioning works
+ When the ACM commissioning endpoint "/onap/policy/clamp/acm/v2/compositions" is invoked with "<AcDefinitionFile>" "<isMigration>"
+ Then the response status code should be 201
+ Examples:
+ | AcDefinitionFile | isMigration |
+ | src/test/resources/data/acelement-usecase1.json | false |
+
+ Scenario: Make sure the participants are registered with runtime
+ When the register participants endpoint is invoked "/onap/policy/clamp/acm/v2/participants"
+ Then the response status code should be 202
+
+ Scenario Outline: Verify the priming is accepted
+ When the ACM participants are primed "/onap/policy/clamp/acm/v2/compositions/{compositionId}" "<isMigration>"
+ Then the response status code should be 202
+ Examples:
+ | isMigration |
+ | false |
+
+ Scenario Outline: Wait until all the participants are primed
+ When the ACM composition is fetched "/onap/policy/clamp/acm/v2/compositions/{compositionId}"
+ Then the response status code should be 200
+ Then Wait and retry until the response contains the keyword "PRIMED" "/onap/policy/clamp/acm/v2/compositions/{compositionId}" "<isMigration>"
+ Examples:
+ | isMigration |
+ | false |
+
+ Scenario Outline: Verify AC Instantiation works
+ When the ACM instance is created "/onap/policy/clamp/acm/v2/compositions/{compositionId}/instances" with "<AcInstantiateFile>"
+ Then the response status code should be 201
+ Examples:
+ | AcInstantiateFile |
+ | src/test/resources/data/AcInstantiate.json |
+
+ Scenario: Verify the AC deployment is accepted
+ When the AC instance is deployed "/onap/policy/clamp/acm/v2/compositions/{compositionId}/instances/{instanceId}"
+ Then the response status code should be 202
+
+ Scenario Outline: Wait until all the AC elements are deployed
+ When the AC instance is fetched "/onap/policy/clamp/acm/v2/compositions/{compositionId}/instances/{instanceId}" "<isMigration>"
+ Then the response status code should be 200
+ Then Wait and retry until the response contains the keyword "DEPLOYED" "/onap/policy/clamp/acm/v2/compositions/{compositionId}/instances/{instanceId}" "<isMigration>"
+ Examples:
+ | isMigration |
+ | false |
+
+ Scenario Outline: Update instance property after deployment
+ When the AC instance property is updated "/onap/policy/clamp/acm/v2/compositions/{compositionId}/instances" "<AcUpdatePropertyFile>"
+ Then the response status code should be 200
+ Then Wait and retry until the response contains the keyword "DEPLOYED" "/onap/policy/clamp/acm/v2/compositions/{compositionId}/instances/{instanceId}" "<isMigration>"
+ Then the response should contain the updated properties "acm_element_policy_updated" "test"
+ Examples:
+ | AcUpdatePropertyFile | isMigration |
+ | src/test/resources/data/AcUpdateProperty.json | false |
+
+ Scenario: Verify AC instance undeployment is accepted
+ When the AC instance is undeployed "/onap/policy/clamp/acm/v2/compositions/{compositionId}/instances/{instanceId}"
+ Then the response status code should be 202
+
+ Scenario Outline: Wait until all the AC elements are undeployed
+ When the AC instance is fetched "/onap/policy/clamp/acm/v2/compositions/{compositionId}/instances/{instanceId}" "<isMigration>"
+ Then the response status code should be 200
+ Then Wait and retry until the response contains the keyword "UNDEPLOYED" "/onap/policy/clamp/acm/v2/compositions/{compositionId}/instances/{instanceId}" "<isMigration>"
+ Examples:
+ | isMigration |
+ | false |
+
+ Scenario: Verify AC UnInstantiation is accepted
+ When the ACM instance is uninstantiated " /onap/policy/clamp/acm/v2/compositions/{compositionId}/instances/{instanceId}"
+ Then the response status code should be 202
+
+ Scenario: Wait until the AC instance is uninstatiated
+ When all the AC instances are fetched "/onap/policy/clamp/acm/v2/compositions/{compositionId}/instances"
+ Then the response status code should be 200
+ Then Wait and retry until the ac instance list is empty "/onap/policy/clamp/acm/v2/compositions/{compositionId}/instances"
+
+ Scenario: Verify the DePriming is accepted
+ When the ACM participants are deprimed "/onap/policy/clamp/acm/v2/compositions/{compositionId}"
+ Then the response status code should be 202
+
+ Scenario Outline: Wait until all the participants are deprimed
+ When the ACM composition is fetched "/onap/policy/clamp/acm/v2/compositions/{compositionId}"
+ Then the response status code should be 200
+ Then Wait and retry until the response contains the keyword "COMMISSIONED" "/onap/policy/clamp/acm/v2/compositions/{compositionId}" "<isMigration>"
+ Examples:
+ | isMigration |
+ | false |
+
+ Scenario: Verify the deletion of Ac definition
+ When the AC definition is deleted "/onap/policy/clamp/acm/v2/compositions/{compositionId}"
+ Then the response status code should be 200 \ No newline at end of file
diff --git a/policy-regression-tests/policy-clamp-regression/src/test/resources/features/acm-migration-workflow.feature b/policy-regression-tests/policy-clamp-regression/src/test/resources/features/acm-migration-workflow.feature
new file mode 100644
index 00000000..c15cdaab
--- /dev/null
+++ b/policy-regression-tests/policy-clamp-regression/src/test/resources/features/acm-migration-workflow.feature
@@ -0,0 +1,88 @@
+Feature: ACM migration workflow
+ # Verifies ACM migration of instance from one AC definition to another
+
+ Scenario: ACM Health check should be up
+ When the acm health check endpoint is invoked "/onap/policy/clamp/acm/health"
+ Then the response status code should be 200
+
+ Scenario Outline: Verify the ACM commissioning works
+ When the ACM commissioning endpoint "/onap/policy/clamp/acm/v2/compositions" is invoked with "<AcDefinitionFile>" "<isMigration>"
+ Then the response status code should be 201
+ Examples:
+ | AcDefinitionFile | isMigration |
+ | src/test/resources/data/acelement-usecase2.json | false |
+
+ Scenario: Make sure the participants are registered with runtime
+ When the register participants endpoint is invoked "/onap/policy/clamp/acm/v2/participants"
+ Then the response status code should be 202
+
+ Scenario Outline: Verify the priming is accepted
+ When the ACM participants are primed "/onap/policy/clamp/acm/v2/compositions/{compositionId}" "<isMigration>"
+ Then the response status code should be 202
+ Examples:
+ | isMigration |
+ | false |
+
+ Scenario Outline: Wait until all the participants are primed
+ When the ACM composition is fetched "/onap/policy/clamp/acm/v2/compositions/{compositionId}"
+ Then the response status code should be 200
+ Then Wait and retry until the response contains the keyword "PRIMED" "/onap/policy/clamp/acm/v2/compositions/{compositionId}" "<isMigration>"
+ Examples:
+ | isMigration |
+ | false |
+
+ Scenario Outline: Verify AC Instantiation works
+ When the ACM instance is created "/onap/policy/clamp/acm/v2/compositions/{compositionId}/instances" with "<AcInstantiateFile>"
+ Then the response status code should be 201
+ Examples:
+ | AcInstantiateFile |
+ | src/test/resources/data/AcInstantiate.json |
+
+ Scenario: Verify the AC deployment is accepted
+ When the AC instance is deployed "/onap/policy/clamp/acm/v2/compositions/{compositionId}/instances/{instanceId}"
+ Then the response status code should be 202
+
+ Scenario Outline: Wait until all the AC elements are deployed
+ When the AC instance is fetched "/onap/policy/clamp/acm/v2/compositions/{compositionId}/instances/{instanceId}" "<isMigration>"
+ Then the response status code should be 200
+ Then Wait and retry until the response contains the keyword "DEPLOYED" "/onap/policy/clamp/acm/v2/compositions/{compositionId}/instances/{instanceId}" "<isMigration>"
+ Examples:
+ | isMigration |
+ | false |
+
+ Scenario Outline: Commission the AC definition file for migration
+ When the ACM commissioning endpoint "/onap/policy/clamp/acm/v2/compositions" is invoked with "<AcDefinitionFile>" "<isMigration>"
+ Then the response status code should be 201
+ Examples:
+ | AcDefinitionFile | isMigration |
+ | src/test/resources/data/acelement-usecase2.json | true |
+
+ Scenario Outline: Prime the second AC definition to the participants
+ When the ACM participants are primed "/onap/policy/clamp/acm/v2/compositions/{compositionId}" "<isMigration>"
+ Then the response status code should be 202
+ Examples:
+ | isMigration |
+ | true |
+
+ Scenario Outline: Wait until all the participants are primed
+ When the ACM composition is fetched "/onap/policy/clamp/acm/v2/compositions/{compositionId}"
+ Then the response status code should be 200
+ Then Wait and retry until the response contains the keyword "PRIMED" "/onap/policy/clamp/acm/v2/compositions/{compositionId}" "<isMigration>"
+ Examples:
+ | isMigration |
+ | true |
+
+ Scenario Outline: Migrate the existing instance to the new AC definition
+ When the ACM instance is migrated "/onap/policy/clamp/acm/v2/compositions/{compositionId}/instances" with "<AcMigrationFile>"
+ Then the response status code should be 200
+ Examples:
+ | AcMigrationFile |
+ | src/test/resources/data/AcMigrateInstance.json |
+
+ Scenario Outline: Wait until all the AC elements are migrated
+ When the AC instance is fetched "/onap/policy/clamp/acm/v2/compositions/{compositionId}/instances/{instanceId}" "<isMigration>"
+ Then the response status code should be 200
+ Then Wait and retry until the response contains the keyword "DEPLOYED" "/onap/policy/clamp/acm/v2/compositions/{compositionId}/instances/{instanceId}" "<isMigration>"
+ Examples:
+ | isMigration |
+ | true | \ No newline at end of file