diff options
author | rameshiyer27 <ramesh.murugan.iyer@est.tech> | 2024-02-14 10:13:16 +0000 |
---|---|---|
committer | rameshiyer27 <ramesh.murugan.iyer@est.tech> | 2024-02-28 10:44:36 +0000 |
commit | b15eda6e03133862f071a6dc0127c3bc660aad1f (patch) | |
tree | 2465a306b7d3d5a052187e91034bf5382bbd120a /policy-regression-tests/policy-clamp-regression | |
parent | fbfc234895c48282e2e92b44c8c8b49745e81745 (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')
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 |