From 7ec767641505f52cd8ecf8b9a76fa35afe32635e Mon Sep 17 00:00:00 2001 From: Sirisha_Manchikanti Date: Mon, 28 Feb 2022 17:10:36 +0000 Subject: [PATCH] Rename ControlLoop to AutomationCompsition Issue-ID: POLICY-3938 Signed-off-by: Sirisha_Manchikanti Change-Id: I63188fa9bc5d634d3aeb7e2d7051c4d67b5a202c --- .../resources/parameters/TestConfigParams.json | 2 +- .../src/main/resources/etc/defaultConfig.json | 32 ++--- .../src/main/resources/etc/s3pConfig.json | 32 ++--- ...ifecycleApiAutomationCompositionForwarder.java} | 24 ++-- ...iAutomationCompositionForwarderParameters.java} | 13 +- ...omationCompositionForwarderParametersTest.java} | 38 ++--- ...ycleApiAutomationCompositionForwarderTest.java} | 48 ++++--- ...ApiAutomationCompositionSimulatorEndpoint.java} | 10 +- ...ycleApiAutomationCompositionSimulatorMain.java} | 8 +- .../LifecycycleApiSimulatorEndpoint.java | 2 +- ...iAutomationCompositionForwarderParameters.json} | 4 +- ...tionCompositionForwarderParametersInvalid.json} | 4 +- ...oop.json => sample_automation_composition.json} | 154 ++++++++++----------- .../test/resources/parameters/sample_policy.json | 10 +- .../parameters/sample_policy_failure.json | 10 +- .../resources/parameters/sample_policy_type.json | 46 +++--- ...=> AutomationCompositionDecoderFileInCsar.java} | 24 ++-- ...ompositionDecoderFileInCsarParameterGroup.java} | 10 +- ...sitionDecoderFileInCsarParameterGroupTest.java} | 25 ++-- ...utomationCompositionDecoderFileInCsarTest.java} | 35 ++--- ...CsarAutomationCompositionDecoderParameters.json | 3 + ...omationCompositionDecoderParametersInvalid.json | 3 + .../FileInCsarControlLoopDecoderParameters.json | 3 - ...eInCsarControlLoopDecoderParametersInvalid.json | 3 - ...rolloop.csar => service-Sampleservice-acm.csar} | Bin 79322 -> 79303 bytes .../setup/config/jsonConfigs/apiConfigFile.json | 18 +-- .../setup/config/jsonConfigs/pdpSimConfig.json | 2 +- .../setup/distribution/etc/defaultConfig.json | 32 ++--- .../src/main/resources/testplans/stability.jmx | 2 +- 29 files changed, 302 insertions(+), 295 deletions(-) rename plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/lifecycle/api/{LifecycleApiControlLoopForwarder.java => LifecycleApiAutomationCompositionForwarder.java} (82%) rename plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/lifecycle/api/{LifecycleApiControlLoopForwarderParameters.java => LifecycleApiAutomationCompositionForwarderParameters.java} (71%) rename plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/lifecycle/api/{LifecycleApiControlLoopForwarderParametersTest.java => LifecycleApiAutomationCompositionForwarderParametersTest.java} (63%) rename plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/lifecycle/api/{LifecycleApiControlLoopForwarderTest.java => LifecycleApiAutomationCompositionForwarderTest.java} (60%) rename plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/testclasses/{LifecycleApiControlLoopSimulatorEndpoint.java => LifecycleApiAutomationCompositionSimulatorEndpoint.java} (83%) rename plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/testclasses/{LifecycleApiControlLoopSimulatorMain.java => LifecycleApiAutomationCompositionSimulatorMain.java} (92%) rename plugins/forwarding-plugins/src/test/resources/parameters/{LifecycleApiControlLoopForwarderParameters.json => LifecycleApiAutomationCompositionForwarderParameters.json} (59%) rename plugins/forwarding-plugins/src/test/resources/parameters/{LifecycleApiControlLoopForwarderParametersInvalid.json => LifecycleApiAutomationCompositionForwarderParametersInvalid.json} (58%) rename plugins/forwarding-plugins/src/test/resources/parameters/{sample_control_loop.json => sample_automation_composition.json} (77%) rename plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/decoding/policy/file/{ControlLoopDecoderFileInCsar.java => AutomationCompositionDecoderFileInCsar.java} (81%) rename plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/decoding/policy/file/{ControlLoopDecoderFileInCsarParameterGroup.java => AutomationCompositionDecoderFileInCsarParameterGroup.java} (77%) rename plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/decoding/policy/file/{ControlLoopDecoderFileInCsarParameterGroupTest.java => AutomationCompositionDecoderFileInCsarParameterGroupTest.java} (65%) rename plugins/reception-plugins/src/test/java/org/onap/policy/distribution/reception/decoding/policy/file/{ControlLoopDecoderFileInCsarTest.java => AutomationCompositionDecoderFileInCsarTest.java} (63%) create mode 100644 plugins/reception-plugins/src/test/resources/parameters/FileInCsarAutomationCompositionDecoderParameters.json create mode 100644 plugins/reception-plugins/src/test/resources/parameters/FileInCsarAutomationCompositionDecoderParametersInvalid.json delete mode 100644 plugins/reception-plugins/src/test/resources/parameters/FileInCsarControlLoopDecoderParameters.json delete mode 100644 plugins/reception-plugins/src/test/resources/parameters/FileInCsarControlLoopDecoderParametersInvalid.json rename plugins/reception-plugins/src/test/resources/{service-Sampleservice-controlloop.csar => service-Sampleservice-acm.csar} (54%) diff --git a/main/src/test/resources/parameters/TestConfigParams.json b/main/src/test/resources/parameters/TestConfigParams.json index 0bb50d65..8bd957a1 100644 --- a/main/src/test/resources/parameters/TestConfigParams.json +++ b/main/src/test/resources/parameters/TestConfigParams.json @@ -2,7 +2,7 @@ "name":"SDCDistributionGroup", "restServerParameters":{ "host":"0.0.0.0", - "port":54290, + "port":50654, "userName":"healthcheck", "password":"zb!XztG34" }, diff --git a/packages/policy-distribution-tarball/src/main/resources/etc/defaultConfig.json b/packages/policy-distribution-tarball/src/main/resources/etc/defaultConfig.json index 4c14f75b..5cdb99ec 100644 --- a/packages/policy-distribution-tarball/src/main/resources/etc/defaultConfig.json +++ b/packages/policy-distribution-tarball/src/main/resources/etc/defaultConfig.json @@ -20,10 +20,10 @@ "decoderClassName": "org.onap.policy.distribution.reception.decoding.policy.file.PolicyDecoderFileInCsarToPolicy", "decoderConfigurationName": "toscaPolicyDecoderConfiguration" }, - "ToscaControlLoopDecoder": { - "decoderType": "ToscaControlLoopDecoder", - "decoderClassName": "org.onap.policy.distribution.reception.decoding.policy.file.ControlLoopDecoderFileInCsar", - "decoderConfigurationName": "toscaControlLoopDecoderConfiguration" + "ToscaAutomationCompositionDecoder": { + "decoderType": "ToscaAutomationCompositionDecoder", + "decoderClassName": "org.onap.policy.distribution.reception.decoding.policy.file.AutomationCompositionDecoderFileInCsar", + "decoderConfigurationName": "toscaAutomationCompositionDecoderConfiguration" } }, "policyForwarders": { @@ -32,10 +32,10 @@ "forwarderClassName": "org.onap.policy.distribution.forwarding.lifecycle.api.LifecycleApiPolicyForwarder", "forwarderConfigurationName": "lifecycleApiPolicyConfiguration" }, - "LifeCycleApiControlLoopForwarder": { - "forwarderType": "LifeCycleControlLoopAPI", - "forwarderClassName": "org.onap.policy.distribution.forwarding.lifecycle.api.LifecycleApiControlLoopForwarder", - "forwarderConfigurationName": "lifecycleApiControlLoopConfiguration" + "LifeCycleApiAutomationCompositionForwarder": { + "forwarderType": "LifeCycleAutomationCompositionAPI", + "forwarderClassName": "org.onap.policy.distribution.forwarding.lifecycle.api.LifecycleApiAutomationCompositionForwarder", + "forwarderConfigurationName": "lifecycleApiAutomationCompositionConfiguration" } } } @@ -76,10 +76,10 @@ "policyTypeFileName": "tosca_policy_type" } }, - "toscaControlLoopDecoderConfiguration": { - "parameterClassName": "org.onap.policy.distribution.reception.decoding.policy.file.ControlLoopDecoderFileInCsarParameterGroup", + "toscaAutomationCompositionDecoderConfiguration": { + "parameterClassName": "org.onap.policy.distribution.reception.decoding.policy.file.AutomationCompositionDecoderFileInCsarParameterGroup", "parameters": { - "controlLoopType": "controlloop" + "automationCompositionType": "acm" } } }, @@ -106,12 +106,12 @@ "deployPolicies": true } }, - "lifecycleApiControlLoopConfiguration": { - "parameterClassName": "org.onap.policy.distribution.forwarding.lifecycle.api.LifecycleApiControlLoopForwarderParameters", + "lifecycleApiAutomationCompositionConfiguration": { + "parameterClassName": "org.onap.policy.distribution.forwarding.lifecycle.api.LifecycleApiAutomationCompositionForwarderParameters", "parameters": { - "controlLoopRuntimeParameters": { - "clientName": "policy-clamp-cl-runtime", - "hostname": "policy-clamp-cl-runtime", + "automationCompositionRuntimeParameters": { + "clientName": "policy-clamp-runtime-acm", + "hostname": "policy-clamp-runtime-acm", "port": 6969, "useHttps": true, "userName": "policyadmin", diff --git a/packages/policy-distribution-tarball/src/main/resources/etc/s3pConfig.json b/packages/policy-distribution-tarball/src/main/resources/etc/s3pConfig.json index cea48547..2a057c80 100644 --- a/packages/policy-distribution-tarball/src/main/resources/etc/s3pConfig.json +++ b/packages/policy-distribution-tarball/src/main/resources/etc/s3pConfig.json @@ -18,10 +18,10 @@ "decoderClassName": "org.onap.policy.distribution.reception.decoding.policy.file.PolicyDecoderFileInCsarToPolicy", "decoderConfigurationName": "toscaPolicyDecoderConfiguration" }, - "ToscaControlLoopDecoder": { - "decoderType": "ToscaControlLoopDecoder", - "decoderClassName": "org.onap.policy.distribution.reception.decoding.policy.file.ControlLoopDecoderFileInCsar", - "decoderConfigurationName": "toscaControlLoopDecoderConfiguration" + "ToscaAutomationCompositionDecoder": { + "decoderType": "ToscaAutomationCompositionDecoder", + "decoderClassName": "org.onap.policy.distribution.reception.decoding.policy.file.AutomationCompositionDecoderFileInCsar", + "decoderConfigurationName": "toscaAutomationCompositionDecoderConfiguration" } }, "policyForwarders": { @@ -30,10 +30,10 @@ "forwarderClassName": "org.onap.policy.distribution.forwarding.lifecycle.api.LifecycleApiPolicyForwarder", "forwarderConfigurationName": "lifecycleApiPolicyConfiguration" }, - "LifeCycleApiControlLoopForwarder": { - "forwarderType": "LifeCycleControlLoopAPI", - "forwarderClassName": "org.onap.policy.distribution.forwarding.lifecycle.api.LifecycleApiControlLoopForwarder", - "forwarderConfigurationName": "lifecycleApiControlLoopConfiguration" + "LifeCycleApiAutomationCompositionForwarder": { + "forwarderType": "LifeCycleAutomationCompositionAPI", + "forwarderClassName": "org.onap.policy.distribution.forwarding.lifecycle.api.LifecycleApiAutomationCompositionForwarder", + "forwarderConfigurationName": "lifecycleApiAutomationCompositionConfiguration" } } } @@ -55,10 +55,10 @@ "policyTypeFileName": "tosca_policy_type" } }, - "toscaControlLoopDecoderConfiguration": { - "parameterClassName": "org.onap.policy.distribution.reception.decoding.policy.file.ControlLoopDecoderFileInCsarParameterGroup", + "toscaAutomationCompositionDecoderConfiguration": { + "parameterClassName": "org.onap.policy.distribution.reception.decoding.policy.file.AutomationCompositionDecoderFileInCsarParameterGroup", "parameters": { - "controlLoopType": "controlloop" + "automationCompositionType": "acm" } } }, @@ -85,12 +85,12 @@ "deployPolicies": true } }, - "lifecycleApiControlLoopConfiguration": { - "parameterClassName": "org.onap.policy.distribution.forwarding.lifecycle.api.LifecycleApiControlLoopForwarderParameters", + "lifecycleApiAutomationCompositionConfiguration": { + "parameterClassName": "org.onap.policy.distribution.forwarding.lifecycle.api.LifecycleApiAutomationCompositionForwarderParameters", "parameters": { - "controlLoopRuntimeParameters": { - "clientName": "policy-clamp-cl-runtime", - "hostname": "policy-clamp-cl-runtime", + "automationCompositionRuntimeParameters": { + "clientName": "policy-clamp-runtime-acm", + "hostname": "policy-clamp-runtime-acm", "port": 6969, "useHttps": true, "userName": "policyadmin", diff --git a/plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/lifecycle/api/LifecycleApiControlLoopForwarder.java b/plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/lifecycle/api/LifecycleApiAutomationCompositionForwarder.java similarity index 82% rename from plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/lifecycle/api/LifecycleApiControlLoopForwarder.java rename to plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/lifecycle/api/LifecycleApiAutomationCompositionForwarder.java index 605c68cd..99615f50 100644 --- a/plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/lifecycle/api/LifecycleApiControlLoopForwarder.java +++ b/plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/lifecycle/api/LifecycleApiAutomationCompositionForwarder.java @@ -43,17 +43,17 @@ import org.slf4j.LoggerFactory; /** * This class provides an implementation of {@link PolicyForwarder} interface for forwarding the - * controlloop design template to the life cycle api's of controlloop components. + * automationComposition design template to the life cycle api's of automationComposition components. * * @author Sirisha Manchikanti (sirisha.manchikanti@est.tech) */ -public class LifecycleApiControlLoopForwarder implements PolicyForwarder { +public class LifecycleApiAutomationCompositionForwarder implements PolicyForwarder { - private static final String COMMISSION_CONTROLLOOP_URI = "/onap/controlloop/v2/commission"; - private static final Logger LOGGER = LoggerFactory.getLogger(LifecycleApiControlLoopForwarder.class); + private static final String COMMISSION_AUTOMATION_COMPOSITION_URI = "/onap/acm/v2/commission"; + private static final Logger LOGGER = LoggerFactory.getLogger(LifecycleApiAutomationCompositionForwarder.class); - private LifecycleApiControlLoopForwarderParameters forwarderParameters; - private HttpClient controlLoopClient; + private LifecycleApiAutomationCompositionForwarderParameters forwarderParameters; + private HttpClient automationCompositionClient; /** * {@inheritDoc}. @@ -62,8 +62,8 @@ public class LifecycleApiControlLoopForwarder implements PolicyForwarder { public void configure(final String parameterGroupName) throws HttpClientConfigException { forwarderParameters = ParameterService.get(parameterGroupName); - controlLoopClient = HttpClientFactoryInstance.getClientFactory().build( - forwarderParameters.getControlLoopRuntimeParameters()); + automationCompositionClient = HttpClientFactoryInstance.getClientFactory().build( + forwarderParameters.getAutomationCompositionRuntimeParameters()); } /** @@ -88,7 +88,7 @@ public class LifecycleApiControlLoopForwarder implements PolicyForwarder { if (null != toscaServiceTemplate.getToscaTopologyTemplate() && null != toscaServiceTemplate.getNodeTypes() && null != toscaServiceTemplate.getDataTypes()) { - commissionControlLoop(toscaServiceTemplate); + commissionAutomationComposition(toscaServiceTemplate); } } else { throw new PolicyForwardingException("The entity is not of type ToscaServiceTemplate - " + entity); @@ -99,15 +99,15 @@ public class LifecycleApiControlLoopForwarder implements PolicyForwarder { } } - private Response commissionControlLoop(final ToscaServiceTemplate toscaServiceTemplate) + private Response commissionAutomationComposition(final ToscaServiceTemplate toscaServiceTemplate) throws PolicyForwardingException { return invokeHttpClient(Entity.entity(toscaServiceTemplate, MediaType.APPLICATION_JSON), - COMMISSION_CONTROLLOOP_URI); + COMMISSION_AUTOMATION_COMPOSITION_URI); } private Response invokeHttpClient(final Entity entity, final String path) throws PolicyForwardingException { - var response = controlLoopClient.post(path, entity, Map.of(HttpHeaders.ACCEPT, + var response = automationCompositionClient.post(path, entity, Map.of(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON, HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)); if (response.getStatus() / 100 != 2) { LOGGER.error( diff --git a/plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/lifecycle/api/LifecycleApiControlLoopForwarderParameters.java b/plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/lifecycle/api/LifecycleApiAutomationCompositionForwarderParameters.java similarity index 71% rename from plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/lifecycle/api/LifecycleApiControlLoopForwarderParameters.java rename to plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/lifecycle/api/LifecycleApiAutomationCompositionForwarderParameters.java index d1abce71..be7c5263 100644 --- a/plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/lifecycle/api/LifecycleApiControlLoopForwarderParameters.java +++ b/plugins/forwarding-plugins/src/main/java/org/onap/policy/distribution/forwarding/lifecycle/api/LifecycleApiAutomationCompositionForwarderParameters.java @@ -29,19 +29,20 @@ import org.onap.policy.common.parameters.annotations.Valid; import org.onap.policy.distribution.main.parameters.PolicyForwarderConfigurationParameterGroup; /** - * Holds the parameters for the {@link LifecycleApiControlLoopForwarder}. + * Holds the parameters for the {@link LifecycleApiAutomationCompositionForwarder}. * * @author Sirisha Manchikanti (sirisha.manchikanti@est.tech) */ @Getter @NotNull @NotBlank -public class LifecycleApiControlLoopForwarderParameters extends PolicyForwarderConfigurationParameterGroup { - public static final String CONTROLLOOP_FORWARDER_PLUGIN_CLASS = LifecycleApiControlLoopForwarder.class.getName(); +public class LifecycleApiAutomationCompositionForwarderParameters extends PolicyForwarderConfigurationParameterGroup { + public static final String AUTOMATION_COMPOSITION_FORWARDER_PLUGIN_CLASS = + LifecycleApiAutomationCompositionForwarder.class.getName(); - private @Valid RestClientParameters controlLoopRuntimeParameters; + private @Valid RestClientParameters automationCompositionRuntimeParameters; - public LifecycleApiControlLoopForwarderParameters() { - super(LifecycleApiControlLoopForwarderParameters.class.getSimpleName()); + public LifecycleApiAutomationCompositionForwarderParameters() { + super(LifecycleApiAutomationCompositionForwarderParameters.class.getSimpleName()); } } diff --git a/plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/lifecycle/api/LifecycleApiControlLoopForwarderParametersTest.java b/plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/lifecycle/api/LifecycleApiAutomationCompositionForwarderParametersTest.java similarity index 63% rename from plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/lifecycle/api/LifecycleApiControlLoopForwarderParametersTest.java rename to plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/lifecycle/api/LifecycleApiAutomationCompositionForwarderParametersTest.java index ba8d9bfb..2ad522fb 100644 --- a/plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/lifecycle/api/LifecycleApiControlLoopForwarderParametersTest.java +++ b/plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/lifecycle/api/LifecycleApiAutomationCompositionForwarderParametersTest.java @@ -31,37 +31,37 @@ import org.onap.policy.common.parameters.ValidationStatus; import org.onap.policy.distribution.forwarding.testclasses.CommonTestData; /** - * Class to perform unit test of {@link LifecycleApiControlLoopForwarderParameters}. + * Class to perform unit test of {@link LifecycleApiAutomationCompositionForwarderParameters}. * * @author Sirisha Manchikanti (sirisha.manchikanti@est.tech) */ -public class LifecycleApiControlLoopForwarderParametersTest { +public class LifecycleApiAutomationCompositionForwarderParametersTest { - private static final String CONTROLLOOP_RUNTIME_HOST_NAME = "0.0.0.0"; - private static final int CONTROLLOOP_RUNTIME_PORT = 6969; - private static final String CONTROLLOOP_RUNTIME_USER = "policyadmin"; - private static final String CONTROLLOOP_RUNTIME_PASSWORD = "zb!XztG34"; + private static final String AUTOMATION_COMPOSITION_RUNTIME_HOST_NAME = "0.0.0.0"; + private static final int AUTOMATION_COMPOSITION_RUNTIME_PORT = 6969; + private static final String AUTOMATION_COMPOSITION_RUNTIME_USER = "policyadmin"; + private static final String AUTOMATION_COMPOSITION_RUNTIME_PASSWORD = "zb!XztG34"; @Test public void testValidParameters() { - final LifecycleApiControlLoopForwarderParameters configurationParameters = + final LifecycleApiAutomationCompositionForwarderParameters configurationParameters = CommonTestData.getPolicyForwarderParameters( - "src/test/resources/parameters/LifecycleApiControlLoopForwarderParameters.json", - LifecycleApiControlLoopForwarderParameters.class); + "src/test/resources/parameters/LifecycleApiAutomationCompositionForwarderParameters.json", + LifecycleApiAutomationCompositionForwarderParameters.class); - assertEquals(LifecycleApiControlLoopForwarderParameters.class.getSimpleName(), + assertEquals(LifecycleApiAutomationCompositionForwarderParameters.class.getSimpleName(), configurationParameters.getName()); - assertEquals(CONTROLLOOP_RUNTIME_HOST_NAME, - configurationParameters.getControlLoopRuntimeParameters().getHostname()); - assertEquals(CONTROLLOOP_RUNTIME_PORT, - configurationParameters.getControlLoopRuntimeParameters().getPort()); - assertFalse(configurationParameters.getControlLoopRuntimeParameters().isUseHttps()); - assertEquals(CONTROLLOOP_RUNTIME_USER, - configurationParameters.getControlLoopRuntimeParameters().getUserName()); - assertEquals(CONTROLLOOP_RUNTIME_PASSWORD, - configurationParameters.getControlLoopRuntimeParameters().getPassword()); + assertEquals(AUTOMATION_COMPOSITION_RUNTIME_HOST_NAME, + configurationParameters.getAutomationCompositionRuntimeParameters().getHostname()); + assertEquals(AUTOMATION_COMPOSITION_RUNTIME_PORT, + configurationParameters.getAutomationCompositionRuntimeParameters().getPort()); + assertFalse(configurationParameters.getAutomationCompositionRuntimeParameters().isUseHttps()); + assertEquals(AUTOMATION_COMPOSITION_RUNTIME_USER, + configurationParameters.getAutomationCompositionRuntimeParameters().getUserName()); + assertEquals(AUTOMATION_COMPOSITION_RUNTIME_PASSWORD, + configurationParameters.getAutomationCompositionRuntimeParameters().getPassword()); assertThat(configurationParameters.validate().getResult()).isNull(); assertEquals(ValidationStatus.CLEAN, configurationParameters.validate().getStatus()); diff --git a/plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/lifecycle/api/LifecycleApiControlLoopForwarderTest.java b/plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/lifecycle/api/LifecycleApiAutomationCompositionForwarderTest.java similarity index 60% rename from plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/lifecycle/api/LifecycleApiControlLoopForwarderTest.java rename to plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/lifecycle/api/LifecycleApiAutomationCompositionForwarderTest.java index 047482ef..672cb6bf 100644 --- a/plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/lifecycle/api/LifecycleApiControlLoopForwarderTest.java +++ b/plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/lifecycle/api/LifecycleApiAutomationCompositionForwarderTest.java @@ -37,20 +37,22 @@ import org.onap.policy.common.utils.network.NetworkUtil; import org.onap.policy.common.utils.resources.ResourceUtils; import org.onap.policy.distribution.forwarding.PolicyForwardingException; import org.onap.policy.distribution.forwarding.testclasses.CommonTestData; -import org.onap.policy.distribution.forwarding.testclasses.LifecycleApiControlLoopSimulatorMain; +import org.onap.policy.distribution.forwarding.testclasses.LifecycleApiAutomationCompositionSimulatorMain; import org.onap.policy.models.tosca.authorative.concepts.ToscaEntity; import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate; /** - * Class to perform unit test of {@link LifecycleApiControlLoopForwarder}. + * Class to perform unit test of {@link LifecycleApiAutomationCompositionForwarder}. * * @author Sirisha Manchikanti (sirisha.manchikanti@est.tech) */ -public class LifecycleApiControlLoopForwarderTest { +public class LifecycleApiAutomationCompositionForwarderTest { - private static final String CONTROL_LOOP = "src/test/resources/parameters/sample_control_loop.json"; + private static final String AUTOMATION_COMPOSITION = + "src/test/resources/parameters/sample_automation_composition.json"; private final StandardCoder standardCoder = new StandardCoder(); - private static final LifecycleApiControlLoopSimulatorMain simulator = new LifecycleApiControlLoopSimulatorMain(); + private static final LifecycleApiAutomationCompositionSimulatorMain simulator = + new LifecycleApiAutomationCompositionSimulatorMain(); /** * Set up. @@ -62,8 +64,8 @@ public class LifecycleApiControlLoopForwarderTest { @BeforeClass public static void setUp() throws PolicyForwardingException, CoderException, InterruptedException { final ParameterGroup parameterGroup = CommonTestData.getPolicyForwarderParameters( - "src/test/resources/parameters/LifecycleApiControlLoopForwarderParameters.json", - LifecycleApiControlLoopForwarderParameters.class); + "src/test/resources/parameters/LifecycleApiAutomationCompositionForwarderParameters.json", + LifecycleApiAutomationCompositionForwarderParameters.class); ParameterService.register(parameterGroup); simulator.startLifecycycleApiSimulator(); if (!NetworkUtil.isTcpPortOpen("0.0.0.0", 6969, 50, 200L)) { @@ -76,40 +78,42 @@ public class LifecycleApiControlLoopForwarderTest { */ @AfterClass public static void tearDown() { - ParameterService.deregister(LifecycleApiControlLoopForwarderParameters.class.getSimpleName()); + ParameterService.deregister(LifecycleApiAutomationCompositionForwarderParameters.class.getSimpleName()); simulator.stopLifecycycleApiSimulator(); } @Test - public void testForwardControlLoopUsingSimulator() throws Exception { + public void testForwardAutomationCompositionUsingSimulator() throws Exception { assertThatCode(() -> { - final ToscaServiceTemplate toscaServiceTemplate = - standardCoder.decode(ResourceUtils.getResourceAsString(CONTROL_LOOP), ToscaServiceTemplate.class); + final ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode( + ResourceUtils.getResourceAsString(AUTOMATION_COMPOSITION), ToscaServiceTemplate.class); - final LifecycleApiControlLoopForwarder forwarder = new LifecycleApiControlLoopForwarder(); - forwarder.configure(LifecycleApiControlLoopForwarderParameters.class.getSimpleName()); + final LifecycleApiAutomationCompositionForwarder forwarder = + new LifecycleApiAutomationCompositionForwarder(); + forwarder.configure(LifecycleApiAutomationCompositionForwarderParameters.class.getSimpleName()); - final Collection controlLoopList = new ArrayList<>(); - controlLoopList.add(toscaServiceTemplate); + final Collection automationCompositionList = new ArrayList<>(); + automationCompositionList.add(toscaServiceTemplate); - forwarder.forward(controlLoopList); + forwarder.forward(automationCompositionList); }).doesNotThrowAnyException(); } @Test - public void testForwardControlLoopFailureUsingSimulator() throws Exception { + public void testForwardAutomationCompositionFailureUsingSimulator() throws Exception { final ToscaEntity toscaEntity = new ToscaEntity(); toscaEntity.setName("FailureCase"); - final LifecycleApiControlLoopForwarder forwarder = new LifecycleApiControlLoopForwarder(); - forwarder.configure(LifecycleApiControlLoopForwarderParameters.class.getSimpleName()); + final LifecycleApiAutomationCompositionForwarder forwarder = new LifecycleApiAutomationCompositionForwarder(); + forwarder.configure(LifecycleApiAutomationCompositionForwarderParameters.class.getSimpleName()); - final Collection controlLoopList = new ArrayList<>(); - controlLoopList.add(toscaEntity); + final Collection automationCompositionList = new ArrayList<>(); + automationCompositionList.add(toscaEntity); - assertThatThrownBy(() -> forwarder.forward(controlLoopList)).isInstanceOf(PolicyForwardingException.class) + assertThatThrownBy(() -> forwarder.forward(automationCompositionList)) + .isInstanceOf(PolicyForwardingException.class) .hasMessageContaining("Failed forwarding the following entities:"); } } diff --git a/plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/testclasses/LifecycleApiControlLoopSimulatorEndpoint.java b/plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/testclasses/LifecycleApiAutomationCompositionSimulatorEndpoint.java similarity index 83% rename from plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/testclasses/LifecycleApiControlLoopSimulatorEndpoint.java rename to plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/testclasses/LifecycleApiAutomationCompositionSimulatorEndpoint.java index d361d166..00b017ba 100644 --- a/plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/testclasses/LifecycleApiControlLoopSimulatorEndpoint.java +++ b/plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/testclasses/LifecycleApiAutomationCompositionSimulatorEndpoint.java @@ -30,25 +30,25 @@ import javax.ws.rs.core.Response; import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate; /** - * Class to provide rest end points for LifecycleApiControlLoopSimulator. + * Class to provide rest end points for LifecycleApiAutomationCompositionSimulator. * * @author Sirisha Manchikanti (sirisha.manchikanti@est.tech) */ @Path("/onap") @Produces(MediaType.APPLICATION_JSON) -public class LifecycleApiControlLoopSimulatorEndpoint { +public class LifecycleApiAutomationCompositionSimulatorEndpoint { /** - * ControlLoop commissioning end-point. + * AutomationComposition commissioning end-point. * * @param body the post body * @return the response object */ @POST - @Path("/controlloop/v2/commission") + @Path("/acm/v2/commission") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) - public Response commissionControlLoop(final ToscaServiceTemplate body) { + public Response commissionAutomationComposition(final ToscaServiceTemplate body) { return Response.status(Response.Status.OK).entity(body).build(); } } diff --git a/plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/testclasses/LifecycleApiControlLoopSimulatorMain.java b/plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/testclasses/LifecycleApiAutomationCompositionSimulatorMain.java similarity index 92% rename from plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/testclasses/LifecycleApiControlLoopSimulatorMain.java rename to plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/testclasses/LifecycleApiAutomationCompositionSimulatorMain.java index a60fda1d..98615af0 100644 --- a/plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/testclasses/LifecycleApiControlLoopSimulatorMain.java +++ b/plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/testclasses/LifecycleApiAutomationCompositionSimulatorMain.java @@ -27,15 +27,15 @@ import org.onap.policy.common.utils.coder.CoderException; import org.onap.policy.common.utils.coder.StandardCoder; import org.onap.policy.common.utils.resources.ResourceUtils; import org.onap.policy.distribution.forwarding.PolicyForwardingException; -import org.onap.policy.distribution.forwarding.lifecycle.api.LifecycleApiControlLoopForwarder; +import org.onap.policy.distribution.forwarding.lifecycle.api.LifecycleApiAutomationCompositionForwarder; import org.onap.policy.distribution.main.rest.aaf.AafDistributionFilter; /** - * The class for starting/stopping simulator for testing {@link LifecycleApiControlLoopForwarder} . + * The class for starting/stopping simulator for testing {@link LifecycleApiAutomationCompositionForwarder} . * * @author Sirisha Manchikanti (sirisha.manchikanti@est.tech) */ -public class LifecycleApiControlLoopSimulatorMain { +public class LifecycleApiAutomationCompositionSimulatorMain { private RestServer restServer; /** @@ -50,7 +50,7 @@ public class LifecycleApiControlLoopSimulatorMain { ResourceUtils.getResourceAsString("src/test/resources/parameters/RestServerParameters.json"), RestServerParameters.class); restServer = new RestServer(restServerParameters, AafDistributionFilter.class, - LifecycleApiControlLoopSimulatorEndpoint.class); + LifecycleApiAutomationCompositionSimulatorEndpoint.class); if (!restServer.start()) { throw new PolicyForwardingException("Failed to start rest simulator. Check log for more details..."); } diff --git a/plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/testclasses/LifecycycleApiSimulatorEndpoint.java b/plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/testclasses/LifecycycleApiSimulatorEndpoint.java index 4a881cb0..22aeff2f 100644 --- a/plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/testclasses/LifecycycleApiSimulatorEndpoint.java +++ b/plugins/forwarding-plugins/src/test/java/org/onap/policy/distribution/forwarding/testclasses/LifecycycleApiSimulatorEndpoint.java @@ -71,7 +71,7 @@ public class LifecycycleApiSimulatorEndpoint { public Response createPolicies(@PathParam("policyTypeId") final String policyTypeId, @PathParam("policyTypeVersion") final String policyTypeVersion, @ApiParam(value = "Entity body of policy", required = true) final ToscaServiceTemplate body) { - if ("onap.policies.controlloop.operational.ApexFailure".equals(policyTypeId)) { + if ("onap.policies.acm.operational.ApexFailure".equals(policyTypeId)) { return Response.status(Response.Status.NOT_FOUND).build(); } else { return Response.status(Response.Status.OK).entity(body).build(); diff --git a/plugins/forwarding-plugins/src/test/resources/parameters/LifecycleApiControlLoopForwarderParameters.json b/plugins/forwarding-plugins/src/test/resources/parameters/LifecycleApiAutomationCompositionForwarderParameters.json similarity index 59% rename from plugins/forwarding-plugins/src/test/resources/parameters/LifecycleApiControlLoopForwarderParameters.json rename to plugins/forwarding-plugins/src/test/resources/parameters/LifecycleApiAutomationCompositionForwarderParameters.json index 1eef9773..d9d6dbb1 100644 --- a/plugins/forwarding-plugins/src/test/resources/parameters/LifecycleApiControlLoopForwarderParameters.json +++ b/plugins/forwarding-plugins/src/test/resources/parameters/LifecycleApiAutomationCompositionForwarderParameters.json @@ -1,6 +1,6 @@ { - "controlLoopRuntimeParameters": { - "clientName": "policy-clamp-cl-runtime", + "automationCompositionRuntimeParameters": { + "clientName": "policy-clamp-runtime-acm", "hostname": "0.0.0.0", "port": 6969, "useHttps": false, diff --git a/plugins/forwarding-plugins/src/test/resources/parameters/LifecycleApiControlLoopForwarderParametersInvalid.json b/plugins/forwarding-plugins/src/test/resources/parameters/LifecycleApiAutomationCompositionForwarderParametersInvalid.json similarity index 58% rename from plugins/forwarding-plugins/src/test/resources/parameters/LifecycleApiControlLoopForwarderParametersInvalid.json rename to plugins/forwarding-plugins/src/test/resources/parameters/LifecycleApiAutomationCompositionForwarderParametersInvalid.json index 5ac0c4ee..a98d2827 100644 --- a/plugins/forwarding-plugins/src/test/resources/parameters/LifecycleApiControlLoopForwarderParametersInvalid.json +++ b/plugins/forwarding-plugins/src/test/resources/parameters/LifecycleApiAutomationCompositionForwarderParametersInvalid.json @@ -1,6 +1,6 @@ { - "controlLoopRuntimeParameters": { - "clientName": "policy-clamp-cl-runtime", + "automationCompositionRuntimeParameters": { + "clientName": "policy-clamp-runtime-acm", "hostname": "", "port": 6969, "useHttps": false, diff --git a/plugins/forwarding-plugins/src/test/resources/parameters/sample_control_loop.json b/plugins/forwarding-plugins/src/test/resources/parameters/sample_automation_composition.json similarity index 77% rename from plugins/forwarding-plugins/src/test/resources/parameters/sample_control_loop.json rename to plugins/forwarding-plugins/src/test/resources/parameters/sample_automation_composition.json index 20dedc50..32e62335 100644 --- a/plugins/forwarding-plugins/src/test/resources/parameters/sample_control_loop.json +++ b/plugins/forwarding-plugins/src/test/resources/parameters/sample_automation_composition.json @@ -14,9 +14,9 @@ } } }, - "onap.datatype.controlloop.Target": { + "onap.datatype.acm.Target": { "derived_from": "tosca.datatypes.Root", - "description": "Definition for a entity in A&AI to perform a control loop operation on", + "description": "Definition for a entity in A&AI to perform a acm operation on", "properties": { "targetType": { "type": "string", @@ -46,7 +46,7 @@ } } }, - "onap.datatype.controlloop.Actor": { + "onap.datatype.acm.Actor": { "derived_from": "tosca.datatypes.Root", "description": "An actor/operation/target definition", "properties": { @@ -67,7 +67,7 @@ "required": true }, "target": { - "type": "onap.datatype.controlloop.Target", + "type": "onap.datatype.acm.Target", "description": "The resource the operation should be performed on.", "required": true }, @@ -84,7 +84,7 @@ } } }, - "onap.datatype.controlloop.Operation": { + "onap.datatype.acm.Operation": { "derived_from": "tosca.datatypes.Root", "description": "An operation supported by an actor", "properties": { @@ -99,7 +99,7 @@ "required": false }, "operation": { - "type": "onap.datatype.controlloop.Actor", + "type": "onap.datatype.acm.Actor", "description": "The definition of the operation to be performed.", "required": true }, @@ -439,7 +439,7 @@ "derived_from": "tosca.datatypes.Root", "metadata": {} }, - "org.onap.datatypes.policy.clamp.controlloop.httpControlLoopElement.RestRequest": { + "org.onap.datatypes.policy.clamp.acm.httpAutomationCompositionElement.RestRequest": { "version": "1.0.0", "derived_from": "tosca.datatypes.Root", "properties": { @@ -481,7 +481,7 @@ "description": "THe expected HTTP status code for the REST request" } }, - "org.onap.datatypes.policy.clamp.controlloop.httpControlLoopElement.ConfigurationEntity": { + "org.onap.datatypes.policy.clamp.acm.httpAutomationCompositionElement.ConfigurationEntity": { "version": "1.0.0", "derived_from": "tosca.datatypes.Root", "properties": { @@ -489,12 +489,12 @@ "type": "onap.datatypes.ToscaConceptIdentifier", "typeVersion": "1.0.0", "required": true, - "description": "The name and version of a Configuration Entity to be handled by the HTTP Control Loop Element" + "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.controlloop.httpControlLoopElement.RestRequest", + "type": "org.onap.datatypes.policy.clamp.acm.httpAutomationCompositionElement.RestRequest", "typeVersion": "1.0.0" }, "description": "A sequence of REST commands to send to the REST endpoint" @@ -504,7 +504,7 @@ } }, "node_types": { - "org.onap.policy.clamp.controlloop.Participant": { + "org.onap.policy.clamp.acm.Participant": { "version": "1.0.1", "derived_from": "tosca.nodetypes.Root", "properties": { @@ -514,7 +514,7 @@ } } }, - "org.onap.policy.clamp.controlloop.ControlLoopElement": { + "org.onap.policy.clamp.acm.AutomationCompositionElement": { "version": "1.0.1", "derived_from": "tosca.nodetypes.Root", "properties": { @@ -524,7 +524,7 @@ "metadata": { "common": true }, - "description": "Specifies the organization that provides the control loop element" + "description": "Specifies the organization that provides the acm element" }, "participant_id": { "type": "onap.datatypes.ToscaConceptIdentifier", @@ -539,7 +539,7 @@ "metadata": { "common": true }, - "description": "The identity of the participant type that hosts this type of Control Loop Element" + "description": "The identity of the participant type that hosts this type of Automation Composition Element" }, "startPhase": { "type": "integer", @@ -552,7 +552,7 @@ "metadata": { "common": true }, - "description": "A value indicating the start phase in which this control loop element will be started, the first start phase is zero. Control Loop Elements are started in their start_phase order and stopped in reverse start phase order. Control Loop Elements with the same start phase are started and stopped simultaneously" + "description": "A value indicating the start phase in which this acm 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", @@ -612,7 +612,7 @@ } } }, - "org.onap.policy.clamp.controlloop.ControlLoop": { + "org.onap.policy.clamp.acm.AutomationComposition": { "version": "1.0.1", "derived_from": "tosca.nodetypes.Root", "properties": { @@ -622,7 +622,7 @@ "metadata": { "common": true }, - "description": "Specifies the organization that provides the control loop element" + "description": "Specifies the organization that provides the acm element" }, "elements": { "type": "list", @@ -633,13 +633,13 @@ "entry_schema": { "type": "onap.datatypes.ToscaConceptIdentifier" }, - "description": "Specifies a list of control loop element definitions that make up this control loop definition" + "description": "Specifies a list of acm element definitions that make up this acm definition" } } }, - "org.onap.policy.clamp.controlloop.PolicyControlLoopElement": { + "org.onap.policy.clamp.acm.PolicyAutomationCompositionElement": { "version": "1.0.1", - "derived_from": "org.onap.policy.clamp.controlloop.ControlLoopElement", + "derived_from": "org.onap.policy.clamp.acm.AutomationCompositionElement", "properties": { "policy_type_id": { "type": "onap.datatypes.ToscaConceptIdentifier", @@ -651,9 +651,9 @@ } } }, - "org.onap.policy.clamp.controlloop.DerivedPolicyControlLoopElement": { + "org.onap.policy.clamp.acm.DerivedPolicyAutomationCompositionElement": { "version": "1.0.1", - "derived_from": "org.onap.policy.clamp.controlloop.PolicyControlLoopElement", + "derived_from": "org.onap.policy.clamp.acm.PolicyAutomationCompositionElement", "properties": { "policy_type_id": { "type": "onap.datatypes.ToscaConceptIdentifier", @@ -665,9 +665,9 @@ } } }, - "org.onap.policy.clamp.controlloop.DerivedDerivedPolicyControlLoopElement": { + "org.onap.policy.clamp.acm.DerivedDerivedPolicyAutomationCompositionElement": { "version": "1.0.1", - "derived_from": "org.onap.policy.clamp.controlloop.DerivedPolicyControlLoopElement", + "derived_from": "org.onap.policy.clamp.acm.DerivedPolicyAutomationCompositionElement", "properties": { "policy_type_id": { "type": "onap.datatypes.ToscaConceptIdentifier", @@ -679,9 +679,9 @@ } } }, - "org.onap.policy.clamp.controlloop.CDSControlLoopElement": { + "org.onap.policy.clamp.acm.CDSAutomationCompositionElement": { "version": "1.0.1", - "derived_from": "org.onap.policy.clamp.controlloop.ControlLoopElement", + "derived_from": "org.onap.policy.clamp.acm.AutomationCompositionElement", "properties": { "cds_blueprint_id": { "type": "onap.datatypes.ToscaConceptIdentifier", @@ -689,9 +689,9 @@ } } }, - "org.onap.policy.clamp.controlloop.K8SMicroserviceControlLoopElement": { + "org.onap.policy.clamp.acm.K8SMicroserviceAutomationCompositionElement": { "version": "1.0.1", - "derived_from": "org.onap.policy.clamp.controlloop.ControlLoopElement", + "derived_from": "org.onap.policy.clamp.acm.AutomationCompositionElement", "properties": { "chart": { "type": "string", @@ -716,9 +716,9 @@ } } }, - "org.onap.policy.clamp.controlloop.HttpControlLoopElement": { + "org.onap.policy.clamp.acm.HttpAutomationCompositionElement": { "version": "1.0.1", - "derived_from": "org.onap.policy.clamp.controlloop.ControlLoopElement", + "derived_from": "org.onap.policy.clamp.acm.AutomationCompositionElement", "properties": { "baseUrl": { "type": "string", @@ -737,10 +737,10 @@ "type": "map", "required": true, "entry_schema": { - "type": "org.onap.datatypes.policy.clamp.controlloop.httpControlLoopElement.ConfigurationEntity", + "type": "org.onap.datatypes.policy.clamp.acm.httpAutomationCompositionElement.ConfigurationEntity", "typeVersion": "1.0.0" }, - "description": "The connfiguration entities the Control Loop Element is managing and their associated REST requests" + "description": "The connfiguration entities the Automation Composition Element is managing and their associated REST requests" } } } @@ -765,20 +765,20 @@ } }, "node_templates": { - "org.onap.policy.controlloop.PolicyControlLoopParticipant": { + "org.onap.policy.acm.PolicyAutomationCompositionParticipant": { "version": "2.3.1", - "type": "org.onap.policy.clamp.controlloop.Participant", + "type": "org.onap.policy.clamp.acm.Participant", "type_version": "1.0.1", "description": "Participant for DCAE microservices", "properties": { "provider": "ONAP" } }, - "org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement": { + "org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement": { "version": "1.2.3", - "type": "org.onap.policy.clamp.controlloop.PolicyControlLoopElement", + "type": "org.onap.policy.clamp.acm.PolicyAutomationCompositionElement", "type_version": "1.0.0", - "description": "Control loop element for the monitoring policy for Performance Management Subscription Handling", + "description": "Automation Composition element for the monitoring policy for Performance Management Subscription Handling", "properties": { "provider": "Ericsson", "participant_id": { @@ -786,7 +786,7 @@ "version": "1.0.0" }, "participantType": { - "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant", + "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant", "version": "2.3.1" }, "policy_type_id": { @@ -798,11 +798,11 @@ } } }, - "org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement": { + "org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement": { "version": "1.2.3", - "type": "org.onap.policy.clamp.controlloop.PolicyControlLoopElement", + "type": "org.onap.policy.clamp.acm.PolicyAutomationCompositionElement", "type_version": "1.0.0", - "description": "Control loop element for the operational policy for Performance Management Subscription Handling", + "description": "Automation Composition element for the operational policy for Performance Management Subscription Handling", "properties": { "provider": "Ericsson", "participant_id": { @@ -810,7 +810,7 @@ "version": "1.0.0" }, "participantType": { - "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant", + "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant", "version": "2.3.1" }, "policy_type_id": { @@ -822,15 +822,15 @@ } } }, - "org.onap.domain.pmsh.DerivedPolicyControlLoopElement": { + "org.onap.domain.pmsh.DerivedPolicyAutomationCompositionElement": { "version": "1.2.3", - "type": "org.onap.policy.clamp.controlloop.DerivedPolicyControlLoopElement", + "type": "org.onap.policy.clamp.acm.DerivedPolicyAutomationCompositionElement", "type_version": "1.0.0", - "description": "Control loop for Performance Management Subscription Handling", + "description": "Automation Composition for Performance Management Subscription Handling", "properties": { "provider": "Ericsson", "participantType": { - "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant", + "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant", "version": "2.3.1" }, "participant_id": { @@ -839,15 +839,15 @@ } } }, - "org.onap.domain.pmsh.DerivedDerivedPolicyControlLoopElement": { + "org.onap.domain.pmsh.DerivedDerivedPolicyAutomationCompositionElement": { "version": "1.2.3", - "type": "org.onap.policy.clamp.controlloop.DerivedDerivedPolicyControlLoopElement", + "type": "org.onap.policy.clamp.acm.DerivedDerivedPolicyAutomationCompositionElement", "type_version": "1.0.0", - "description": "Control loop for Performance Management Subscription Handling", + "description": "Automation Composition for Performance Management Subscription Handling", "properties": { "provider": "Ericsson", "participantType": { - "name": "org.onap.policy.controlloop.PolicyControlLoopParticipant", + "name": "org.onap.policy.acm.PolicyAutomationCompositionParticipant", "version": "2.3.1" }, "participant_id": { @@ -856,20 +856,20 @@ } } }, - "org.onap.k8s.controlloop.K8SControlLoopParticipant": { + "org.onap.k8s.acm.K8SAutomationCompositionParticipant": { "version": "2.3.4", - "type": "org.onap.policy.clamp.controlloop.Participant", + "type": "org.onap.policy.clamp.acm.Participant", "type_version": "1.0.1", "description": "Participant for K8S", "properties": { "provider": "ONAP" } }, - "org.onap.domain.database.PMSH_K8SMicroserviceControlLoopElement": { + "org.onap.domain.database.PMSH_K8SMicroserviceAutomationCompositionElement": { "version": "1.2.3", - "type": "org.onap.policy.clamp.controlloop.K8SMicroserviceControlLoopElement", + "type": "org.onap.policy.clamp.acm.K8SMicroserviceAutomationCompositionElement", "type_version": "1.0.0", - "description": "Control loop element for the K8S microservice for PMSH", + "description": "Automation Composition element for the K8S microservice for PMSH", "properties": { "provider": "ONAP", "participant_id": { @@ -877,7 +877,7 @@ "version": "1.0.0" }, "participantType": { - "name": "org.onap.k8s.controlloop.K8SControlLoopParticipant", + "name": "org.onap.k8s.acm.K8SAutomationCompositionParticipant", "version": "2.3.4" }, "chart": { @@ -901,11 +901,11 @@ } } }, - "org.onap.domain.database.Local_K8SMicroserviceControlLoopElement": { + "org.onap.domain.database.Local_K8SMicroserviceAutomationCompositionElement": { "version": "1.2.3", - "type": "org.onap.policy.clamp.controlloop.K8SMicroserviceControlLoopElement", + "type": "org.onap.policy.clamp.acm.K8SMicroserviceAutomationCompositionElement", "type_version": "1.0.0", - "description": "Control loop element for the K8S microservice for local chart", + "description": "Automation Composition element for the K8S microservice for local chart", "properties": { "provider": "ONAP", "participant_id": { @@ -913,7 +913,7 @@ "version": "1.0.0" }, "participantType": { - "name": "org.onap.k8s.controlloop.K8SControlLoopParticipant", + "name": "org.onap.k8s.acm.K8SAutomationCompositionParticipant", "version": "2.3.4" }, "chart": { @@ -926,20 +926,20 @@ } } }, - "org.onap.controlloop.HttpControlLoopParticipant": { + "org.onap.acm.HttpAutomationCompositionParticipant": { "version": "2.3.4", - "type": "org.onap.policy.clamp.controlloop.Participant", + "type": "org.onap.policy.clamp.acm.Participant", "type_version": "1.0.1", "description": "Participant for Http requests", "properties": { "provider": "ONAP" } }, - "org.onap.domain.database.Http_PMSHMicroserviceControlLoopElement": { + "org.onap.domain.database.Http_PMSHMicroserviceAutomationCompositionElement": { "version": "1.2.3", - "type": "org.onap.policy.clamp.controlloop.HttpControlLoopElement", + "type": "org.onap.policy.clamp.acm.HttpAutomationCompositionElement", "type_version": "1.0.1", - "description": "Control loop element for the http requests of PMSH microservice", + "description": "Automation Composition element for the http requests of PMSH microservice", "properties": { "provider": "ONAP", "participant_id": { @@ -947,7 +947,7 @@ "version": "1.0.0" }, "participantType": { - "name": "org.onap.k8s.controlloop.HttpControlLoopParticipant", + "name": "org.onap.k8s.acm.HttpAutomationCompositionParticipant", "version": "2.3.4" }, "uninitializedToPassiveTimeout": 180, @@ -970,7 +970,7 @@ }, "httpMethod": "PUT", "path": "v1/kv/dcae-pmsh2", - "body": "{ \"control_loop_name\":\"pmsh-control-loop\", \"operational_policy_name\":\"pmsh-operational-policy\", \"aaf_password\":\"demo123456!\", \"aaf_identity\":\"dcae@dcae.onap.org\", \"cert_path\":\"/opt/app/pmsh/etc/certs/cert.pem\", \"key_path\":\"/opt/app/pmsh/etc/certs/key.pem\", \"ca_cert_path\":\"/opt/app/pmsh/etc/certs/cacert.pem\", \"enable_tls\":\"true\", \"pmsh_policy\":{ \"subscription\":{ \"subscriptionName\":\"ExtraPM-All-gNB-R2B\", \"administrativeState\":\"UNLOCKED\", \"fileBasedGP\":15, \"fileLocation\":\"\\/pm\\/pm.xml\", \"nfFilter\":{ \"nfNames\":[ \"^pnf.*\", \"^vnf.*\" ], \"modelInvariantIDs\":[ ], \"modelVersionIDs\":[ ], \"modelNames\":[ ] }, \"measurementGroups\":[ { \"measurementGroup\":{ \"measurementTypes\":[ { \"measurementType\":\"countera\" }, { \"measurementType\":\"counterb\" } ], \"managedObjectDNsBasic\":[ { \"DN\":\"dna\" }, { \"DN\":\"dnb\" } ] } }, { \"measurementGroup\":{ \"measurementTypes\":[ { \"measurementType\":\"counterc\" }, { \"measurementType\":\"counterd\" } ], \"managedObjectDNsBasic\":[ { \"DN\":\"dnc\" }, { \"DN\":\"dnd\" } ] } } ] } }, \"streams_subscribes\":{ \"aai_subscriber\":{ \"type\":\"message_router\", \"dmaap_info\":{ \"topic_url\":\"https://10.152.183.151:3905/events/AAI_EVENT\", \"client_role\":\"org.onap.dcae.aaiSub\", \"location\":\"san-francisco\", \"client_id\":\"1575976809466\" } }, \"policy_pm_subscriber\":{ \"type\":\"message_router\", \"dmaap_info\":{ \"topic_url\":\"https://10.152.183.151:3905/events/org.onap.dmaap.mr.PM_SUBSCRIPTIONS\", \"client_role\":\"org.onap.dcae.pmSubscriber\", \"location\":\"san-francisco\", \"client_id\":\"1575876809456\" } } }, \"streams_publishes\":{ \"policy_pm_publisher\":{ \"type\":\"message_router\", \"dmaap_info\":{ \"topic_url\":\"https://10.152.183.151:3905/events/org.onap.dmaap.mr.PM_SUBSCRIPTIONS\", \"client_role\":\"org.onap.dcae.pmPublisher\", \"location\":\"san-francisco\", \"client_id\":\"1475976809466\" } }, \"other_publisher\":{ \"type\":\"message_router\", \"dmaap_info\":{ \"topic_url\":\"https://10.152.183.151:3905/events/org.onap.dmaap.mr.SOME_OTHER_TOPIC\", \"client_role\":\"org.onap.dcae.pmControlPub\", \"location\":\"san-francisco\", \"client_id\":\"1875976809466\" } } } }", + "body": "{ \"automation_composition_name\":\"pmsh-automation_composition\", \"operational_policy_name\":\"pmsh-operational-policy\", \"aaf_password\":\"demo123456!\", \"aaf_identity\":\"dcae@dcae.onap.org\", \"cert_path\":\"/opt/app/pmsh/etc/certs/cert.pem\", \"key_path\":\"/opt/app/pmsh/etc/certs/key.pem\", \"ca_cert_path\":\"/opt/app/pmsh/etc/certs/cacert.pem\", \"enable_tls\":\"true\", \"pmsh_policy\":{ \"subscription\":{ \"subscriptionName\":\"ExtraPM-All-gNB-R2B\", \"administrativeState\":\"UNLOCKED\", \"fileBasedGP\":15, \"fileLocation\":\"\\/pm\\/pm.xml\", \"nfFilter\":{ \"nfNames\":[ \"^pnf.*\", \"^vnf.*\" ], \"modelInvariantIDs\":[ ], \"modelVersionIDs\":[ ], \"modelNames\":[ ] }, \"measurementGroups\":[ { \"measurementGroup\":{ \"measurementTypes\":[ { \"measurementType\":\"countera\" }, { \"measurementType\":\"counterb\" } ], \"managedObjectDNsBasic\":[ { \"DN\":\"dna\" }, { \"DN\":\"dnb\" } ] } }, { \"measurementGroup\":{ \"measurementTypes\":[ { \"measurementType\":\"counterc\" }, { \"measurementType\":\"counterd\" } ], \"managedObjectDNsBasic\":[ { \"DN\":\"dnc\" }, { \"DN\":\"dnd\" } ] } } ] } }, \"streams_subscribes\":{ \"aai_subscriber\":{ \"type\":\"message_router\", \"dmaap_info\":{ \"topic_url\":\"https://10.152.183.151:3905/events/AAI_EVENT\", \"client_role\":\"org.onap.dcae.aaiSub\", \"location\":\"san-francisco\", \"client_id\":\"1575976809466\" } }, \"policy_pm_subscriber\":{ \"type\":\"message_router\", \"dmaap_info\":{ \"topic_url\":\"https://10.152.183.151:3905/events/org.onap.dmaap.mr.PM_SUBSCRIPTIONS\", \"client_role\":\"org.onap.dcae.pmSubscriber\", \"location\":\"san-francisco\", \"client_id\":\"1575876809456\" } } }, \"streams_publishes\":{ \"policy_pm_publisher\":{ \"type\":\"message_router\", \"dmaap_info\":{ \"topic_url\":\"https://10.152.183.151:3905/events/org.onap.dmaap.mr.PM_SUBSCRIPTIONS\", \"client_role\":\"org.onap.dcae.pmPublisher\", \"location\":\"san-francisco\", \"client_id\":\"1475976809466\" } }, \"other_publisher\":{ \"type\":\"message_router\", \"dmaap_info\":{ \"topic_url\":\"https://10.152.183.151:3905/events/org.onap.dmaap.mr.SOME_OTHER_TOPIC\", \"client_role\":\"org.onap.dcae.pmControlPub\", \"location\":\"san-francisco\", \"client_id\":\"1875976809466\" } } } }", "expectedResponse": 200 } ] @@ -978,40 +978,40 @@ ] } }, - "org.onap.domain.sample.GenericK8s_ControlLoopDefinition": { + "org.onap.domain.sample.GenericK8s_AutomationCompositionDefinition": { "version": "1.2.3", - "type": "org.onap.policy.clamp.controlloop.ControlLoop", + "type": "org.onap.policy.clamp.acm.AutomationComposition", "type_version": "1.0.0", - "description": "Control loop for Hello World", + "description": "Automation Composition for Hello World", "properties": { "provider": "ONAP", "elements": [ { - "name": "org.onap.domain.database.PMSH_K8SMicroserviceControlLoopElement", + "name": "org.onap.domain.database.PMSH_K8SMicroserviceAutomationCompositionElement", "version": "1.2.3" }, { - "name": "org.onap.domain.database.Local_K8SMicroserviceControlLoopElement", + "name": "org.onap.domain.database.Local_K8SMicroserviceAutomationCompositionElement", "version": "1.2.3" }, { - "name": "org.onap.domain.database.Http_PMSHMicroserviceControlLoopElement", + "name": "org.onap.domain.database.Http_PMSHMicroserviceAutomationCompositionElement", "version": "1.2.3" }, { - "name": "org.onap.domain.pmsh.DerivedPolicyControlLoopElement", + "name": "org.onap.domain.pmsh.DerivedPolicyAutomationCompositionElement", "version": "1.2.3" }, { - "name": "org.onap.domain.pmsh.DerivedDerivedPolicyControlLoopElement", + "name": "org.onap.domain.pmsh.DerivedDerivedPolicyAutomationCompositionElement", "version": "1.2.3" }, { - "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyControlLoopElement", + "name": "org.onap.domain.pmsh.PMSH_MonitoringPolicyAutomationCompositionElement", "version": "1.2.3" }, { - "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyControlLoopElement", + "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement", "version": "1.2.3" } ] diff --git a/plugins/forwarding-plugins/src/test/resources/parameters/sample_policy.json b/plugins/forwarding-plugins/src/test/resources/parameters/sample_policy.json index d8651ce4..adbf12a2 100644 --- a/plugins/forwarding-plugins/src/test/resources/parameters/sample_policy.json +++ b/plugins/forwarding-plugins/src/test/resources/parameters/sample_policy.json @@ -4,12 +4,12 @@ "policies": [ { "operational.sampledomain": { - "type": "onap.policies.controlloop.operational.Apex", + "type": "onap.policies.acm.operational.Apex", "typeVersion": "1.0.0", - "name": "onap.policies.controlloop.operational.apex.Sampledomain", + "name": "onap.policies.acm.operational.apex.Sampledomain", "version": "1.0.0", "metadata": { - "policy-id": "onap.policies.controlloop.operational.apex.Sampledomain" + "policy-id": "onap.policies.acm.operational.apex.Sampledomain" }, "properties": { "content": { @@ -37,7 +37,7 @@ "jsonAdapters": { "Instant": { "adaptedClass": "java.time.Instant", - "adaptorClass": "org.onap.policy.controlloop.util.Serialization$GsonInstantAdapter" + "adaptorClass": "org.onap.policy.acm.util.Serialization$GsonInstantAdapter" }, "APPC_LCM_REQUEST": { "adaptedClass": "org.onap.policy.appclcm.LcmRequest", @@ -98,4 +98,4 @@ } ] } -} \ No newline at end of file +} diff --git a/plugins/forwarding-plugins/src/test/resources/parameters/sample_policy_failure.json b/plugins/forwarding-plugins/src/test/resources/parameters/sample_policy_failure.json index 1d30f08b..08ba6997 100644 --- a/plugins/forwarding-plugins/src/test/resources/parameters/sample_policy_failure.json +++ b/plugins/forwarding-plugins/src/test/resources/parameters/sample_policy_failure.json @@ -4,12 +4,12 @@ "policies": [ { "operational.sampledomain": { - "type": "onap.policies.controlloop.operational.ApexFailure", + "type": "onap.policies.acm.operational.ApexFailure", "typeVersion": "1.0.0", - "name": "onap.policies.controlloop.operational.apex.Sampledomain", + "name": "onap.policies.acm.operational.apex.Sampledomain", "version": "1.0.0", "metadata": { - "policy-id": "onap.policies.controlloop.operational.apex.Sampledomain" + "policy-id": "onap.policies.acm.operational.apex.Sampledomain" }, "properties": { "content": { @@ -37,7 +37,7 @@ "jsonAdapters": { "Instant": { "adaptedClass": "java.time.Instant", - "adaptorClass": "org.onap.policy.controlloop.util.Serialization$GsonInstantAdapter" + "adaptorClass": "org.onap.policy.acm.util.Serialization$GsonInstantAdapter" }, "APPC_LCM_REQUEST": { "adaptedClass": "org.onap.policy.appclcm.LcmRequest", @@ -98,4 +98,4 @@ } ] } -} \ No newline at end of file +} diff --git a/plugins/forwarding-plugins/src/test/resources/parameters/sample_policy_type.json b/plugins/forwarding-plugins/src/test/resources/parameters/sample_policy_type.json index 810d970d..6aead75c 100644 --- a/plugins/forwarding-plugins/src/test/resources/parameters/sample_policy_type.json +++ b/plugins/forwarding-plugins/src/test/resources/parameters/sample_policy_type.json @@ -1,40 +1,40 @@ { "tosca_definitions_version": "tosca_simple_yaml_1_0_0", "policy_types": { - "onap.policies.controlloop.operational.Apex": { + "onap.policies.acm.operational.Apex": { "version": "1.0.0", - "description": "Operational Policy for Control Loops using the APEX PDP", + "description": "Operational Policy for Automation Compositions using the APEX PDP", "properties": { "engine_service": { - "type": "onap.datatypes.policies.controlloop.operational.apex.EngineService", + "type": "onap.datatypes.policies.acm.operational.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.policies.controlloop.operational.apex.EventHandler" + "type": "onap.datatypes.policies.acm.operational.apex.EventHandler" } }, "outputs": { "type": "map", "description": "Outputs for handling events going out of the APEX engine", "entry_schema": { - "type": "onap.datatypes.policies.controlloop.operational.apex.EventHandler" + "type": "onap.datatypes.policies.acm.operational.apex.EventHandler" } }, "environment": { "type": "list", "description": "Envioronmental parameters for the APEX engine", "entry_schema": { - "type": "onap.datatypes.policies.controlloop.operational.apex.Environment" + "type": "onap.datatypes.policies.acm.operational.apex.Environment" } } } } }, "data_types": { - "onap.datatypes.policies.controlloop.operational.apex.EngineService": { + "onap.datatypes.policies.acm.operational.apex.EngineService": { "derived_from": "tosca.datatypes.Root", "properties": { "name": { @@ -84,13 +84,13 @@ "default": 0 }, "engine": { - "type": "onap.datatypes.policies.controlloop.operational.apex.engineservice.Engine", + "type": "onap.datatypes.policies.acm.operational.apex.engineservice.Engine", "description": "The parameters for all engines in the APEX engine service", "required": true } } }, - "onap.datatypes.policies.controlloop.operational.apex.EventHandler": { + "onap.datatypes.policies.acm.operational.apex.EventHandler": { "derived_from": "tosca.datatypes.Root", "properties": { "name": { @@ -99,12 +99,12 @@ "required": false }, "carrier_technology": { - "type": "onap.datatypes.policies.controlloop.operational.apex.CarrierTechnology", + "type": "onap.datatypes.policies.acm.operational.apex.CarrierTechnology", "description": "Specifies the carrier technology of the event handler (such as REST/Web Socket/Kafka)", "required": true }, "event_protocol": { - "type": "onap.datatypes.policies.controlloop.operational.apex.EventProtocol", + "type": "onap.datatypes.policies.acm.operational.apex.EventProtocol", "description": "Specifies the event protocol of events for the event handler (such as Yaml/JSON/XML/POJO)", "required": true }, @@ -156,7 +156,7 @@ } } }, - "onap.datatypes.policies.controlloop.operational.apex.CarrierTechnology": { + "onap.datatypes.policies.acm.operational.apex.CarrierTechnology": { "derived_from": "tosca.datatypes.Root", "properties": { "label": { @@ -171,7 +171,7 @@ } } }, - "onap.datatypes.policies.controlloop.operational.apex.EventProtocol": { + "onap.datatypes.policies.acm.operational.apex.EventProtocol": { "derived_from": "tosca.datatypes.Root", "properties": { "label": { @@ -186,7 +186,7 @@ } } }, - "onap.datatypes.policies.controlloop.operational.apex.Environmental": { + "onap.datatypes.policies.acm.operational.apex.Environmental": { "derived_from": "tosca.datatypes.Root", "properties": { "name": { @@ -201,11 +201,11 @@ } } }, - "onap.datatypes.policies.controlloop.operational.apex.engineservice.Engine": { + "onap.datatypes.policies.acm.operational.apex.engineservice.Engine": { "derived_from": "tosca.datatypes.Root", "properties": { "context": { - "type": "onap.datatypes.policies.controlloop.operational.apex.engineservice.engine.Context", + "type": "onap.datatypes.policies.acm.operational.apex.engineservice.engine.Context", "description": "The properties for handling context in APEX engines, defaults to using Java maps for context", "required": false }, @@ -220,11 +220,11 @@ } } }, - "onap.datatypes.policies.controlloop.operational.apex.engineservice.engine.Context": { + "onap.datatypes.policies.acm.operational.apex.engineservice.engine.Context": { "derived_from": "tosca.datatypes.Root", "properties": { "distributor": { - "type": "onap.datatypes.policies.controlloop.operational.apex.Plugin", + "type": "onap.datatypes.policies.acm.operational.apex.Plugin", "description": "The plugin to be used for distributing context between APEX PDPs at runtime", "required": false }, @@ -233,22 +233,22 @@ "description": "The plugins for context schemas available in APEX PDPs such as Java and Avro", "required": false, "entry_schema": { - "type": "onap.datatypes.policies.controlloop.operational.apex.Plugin" + "type": "onap.datatypes.policies.acm.operational.apex.Plugin" } }, "locking": { - "type": "onap.datatypes.policies.controlloop.operational.apex.plugin", + "type": "onap.datatypes.policies.acm.operational.apex.plugin", "description": "The plugin to be used for locking context in and between APEX PDPs at runtime", "required": false }, "persistence": { - "type": "onap.datatypes.policies.controlloop.operational.apex.Plugin", + "type": "onap.datatypes.policies.acm.operational.apex.Plugin", "description": "The plugin to be used for persisting context for APEX PDPs at runtime", "required": false } } }, - "onap.datatypes.policies.controlloop.operational.apex.Plugin": { + "onap.datatypes.policies.acm.operational.apex.Plugin": { "derived_from": "tosca.datatypes.Root", "properties": { "name": { @@ -263,4 +263,4 @@ } } } -} \ No newline at end of file +} diff --git a/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/decoding/policy/file/ControlLoopDecoderFileInCsar.java b/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/decoding/policy/file/AutomationCompositionDecoderFileInCsar.java similarity index 81% rename from plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/decoding/policy/file/ControlLoopDecoderFileInCsar.java rename to plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/decoding/policy/file/AutomationCompositionDecoderFileInCsar.java index 96db632c..7bfcb0f9 100644 --- a/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/decoding/policy/file/ControlLoopDecoderFileInCsar.java +++ b/plugins/reception-plugins/src/main/java/org/onap/policy/distribution/reception/decoding/policy/file/AutomationCompositionDecoderFileInCsar.java @@ -38,13 +38,13 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaEntity; import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate; /** - * This class extracts controlloop information from a CSAR file. + * This class extracts acm information from a CSAR file. * * @author Sirisha Manchikanti (sirisha.manchikanti@est.tech) */ -public class ControlLoopDecoderFileInCsar implements PolicyDecoder { +public class AutomationCompositionDecoderFileInCsar implements PolicyDecoder { - private ControlLoopDecoderFileInCsarParameterGroup decoderParameters; + private AutomationCompositionDecoderFileInCsarParameterGroup decoderParameters; private static final String NODE_TYPES = "nodes.yml"; private static final String DATA_TYPES = "data.yml"; @@ -69,7 +69,7 @@ public class ControlLoopDecoderFileInCsar implements PolicyDecoder decode(final Csar csar) throws PolicyDecodingException { - final Collection controlLoopList = new ArrayList<>(); + final Collection automationCompositionList = new ArrayList<>(); ToscaServiceTemplate nodeTypes = null; ToscaServiceTemplate dataTypes = null; @@ -94,24 +94,24 @@ public class ControlLoopDecoderFileInCsar implements PolicyDecoder controlLoopHolders = decoder.decode(csar); - assertEquals(1, controlLoopHolders.size()); + final Collection automationCompositionHolders = decoder.decode(csar); + assertEquals(1, automationCompositionHolders.size()); } @Test - public void testDecodeControlLoopZipError() { + public void testDecodeAutomationCompositionZipError() { - final ControlLoopDecoderFileInCsar decoder = new ControlLoopDecoderFileInCsar(); - decoder.configure(ControlLoopDecoderFileInCsarParameterGroup.class.getSimpleName()); + final AutomationCompositionDecoderFileInCsar decoder = new AutomationCompositionDecoderFileInCsar(); + decoder.configure(AutomationCompositionDecoderFileInCsarParameterGroup.class.getSimpleName()); final File file = new File("unknown.csar"); final Csar csar = new Csar(file.getAbsolutePath()); assertTrue(decoder.canHandle(csar)); assertThatThrownBy(() -> decoder.decode(csar)).isInstanceOf(PolicyDecodingException.class) - .hasMessageContaining("Failed decoding the controlloop"); + .hasMessageContaining("Failed decoding the acm"); } } diff --git a/plugins/reception-plugins/src/test/resources/parameters/FileInCsarAutomationCompositionDecoderParameters.json b/plugins/reception-plugins/src/test/resources/parameters/FileInCsarAutomationCompositionDecoderParameters.json new file mode 100644 index 00000000..672a6677 --- /dev/null +++ b/plugins/reception-plugins/src/test/resources/parameters/FileInCsarAutomationCompositionDecoderParameters.json @@ -0,0 +1,3 @@ +{ + "automationCompositionType": "acm" +} diff --git a/plugins/reception-plugins/src/test/resources/parameters/FileInCsarAutomationCompositionDecoderParametersInvalid.json b/plugins/reception-plugins/src/test/resources/parameters/FileInCsarAutomationCompositionDecoderParametersInvalid.json new file mode 100644 index 00000000..ef58553a --- /dev/null +++ b/plugins/reception-plugins/src/test/resources/parameters/FileInCsarAutomationCompositionDecoderParametersInvalid.json @@ -0,0 +1,3 @@ +{ + "acm": "" +} diff --git a/plugins/reception-plugins/src/test/resources/parameters/FileInCsarControlLoopDecoderParameters.json b/plugins/reception-plugins/src/test/resources/parameters/FileInCsarControlLoopDecoderParameters.json deleted file mode 100644 index ca112388..00000000 --- a/plugins/reception-plugins/src/test/resources/parameters/FileInCsarControlLoopDecoderParameters.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "controlLoopType": "controlloop" -} diff --git a/plugins/reception-plugins/src/test/resources/parameters/FileInCsarControlLoopDecoderParametersInvalid.json b/plugins/reception-plugins/src/test/resources/parameters/FileInCsarControlLoopDecoderParametersInvalid.json deleted file mode 100644 index 9d33896e..00000000 --- a/plugins/reception-plugins/src/test/resources/parameters/FileInCsarControlLoopDecoderParametersInvalid.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "controlLoop": "" -} diff --git a/plugins/reception-plugins/src/test/resources/service-Sampleservice-controlloop.csar b/plugins/reception-plugins/src/test/resources/service-Sampleservice-acm.csar similarity index 54% rename from plugins/reception-plugins/src/test/resources/service-Sampleservice-controlloop.csar rename to plugins/reception-plugins/src/test/resources/service-Sampleservice-acm.csar index 03e293660a61d7d7314c7a95c21839d7336589da..226ab158fa91601b4a15b2c5ec31b5a439f3af9b 100644 GIT binary patch delta 29906 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 delta 30113 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 XKm@RWqBsF8@C0uOaf(QPkJSGGbcTD! diff --git a/testsuites/stability/src/main/resources/setup/config/jsonConfigs/apiConfigFile.json b/testsuites/stability/src/main/resources/setup/config/jsonConfigs/apiConfigFile.json index e6f076ab..63e0c4c6 100644 --- a/testsuites/stability/src/main/resources/setup/config/jsonConfigs/apiConfigFile.json +++ b/testsuites/stability/src/main/resources/setup/config/jsonConfigs/apiConfigFile.json @@ -36,20 +36,20 @@ "policytypes/onap.policies.optimization.service.SubscriberPolicy.yaml", "policytypes/onap.policies.optimization.resource.Vim_fit.yaml", "policytypes/onap.policies.optimization.resource.VnfPolicy.yaml", - "policytypes/onap.policies.controlloop.guard.Common.yaml", - "policytypes/onap.policies.controlloop.guard.common.Blacklist.yaml", - "policytypes/onap.policies.controlloop.guard.common.FrequencyLimiter.yaml", - "policytypes/onap.policies.controlloop.guard.common.MinMax.yaml", - "policytypes/onap.policies.controlloop.guard.common.Filter.yaml", - "policytypes/onap.policies.controlloop.guard.coordination.FirstBlocksSecond.yaml", + "policytypes/onap.policies.acm.guard.Common.yaml", + "policytypes/onap.policies.acm.guard.common.Blacklist.yaml", + "policytypes/onap.policies.acm.guard.common.FrequencyLimiter.yaml", + "policytypes/onap.policies.acm.guard.common.MinMax.yaml", + "policytypes/onap.policies.acm.guard.common.Filter.yaml", + "policytypes/onap.policies.acm.guard.coordination.FirstBlocksSecond.yaml", "policytypes/onap.policies.Naming.yaml", "policytypes/onap.policies.Match.yaml", "policytypes/onap.policies.native.Drools.yaml", "policytypes/onap.policies.native.Xacml.yaml", "policytypes/onap.policies.native.Apex.yaml", - "policytypes/onap.policies.controlloop.operational.Common.yaml", - "policytypes/onap.policies.controlloop.operational.common.Apex.yaml", - "policytypes/onap.policies.controlloop.operational.common.Drools.yaml" + "policytypes/onap.policies.acm.operational.Common.yaml", + "policytypes/onap.policies.acm.operational.common.Apex.yaml", + "policytypes/onap.policies.acm.operational.common.Drools.yaml" ], "preloadPolicies" : [ "policies/sdnc.policy.naming.input.tosca.yaml" diff --git a/testsuites/stability/src/main/resources/setup/config/jsonConfigs/pdpSimConfig.json b/testsuites/stability/src/main/resources/setup/config/jsonConfigs/pdpSimConfig.json index 396b9f7a..ee832326 100644 --- a/testsuites/stability/src/main/resources/setup/config/jsonConfigs/pdpSimConfig.json +++ b/testsuites/stability/src/main/resources/setup/config/jsonConfigs/pdpSimConfig.json @@ -6,7 +6,7 @@ "pdpType":"apex", "description":"Pdp Heartbeat", "supportedPolicyTypes":[ - {"name":"onap.policies.controlloop.operational.common.Apex","version":"1.0.0"}, + {"name":"onap.policies.acm.operational.common.Apex","version":"1.0.0"}, {"name":"onap.policies.native.Apex","version":"1.0.0"} ] }, diff --git a/testsuites/stability/src/main/resources/setup/distribution/etc/defaultConfig.json b/testsuites/stability/src/main/resources/setup/distribution/etc/defaultConfig.json index 2b3078ac..8a5b769e 100644 --- a/testsuites/stability/src/main/resources/setup/distribution/etc/defaultConfig.json +++ b/testsuites/stability/src/main/resources/setup/distribution/etc/defaultConfig.json @@ -18,10 +18,10 @@ "decoderClassName":"org.onap.policy.distribution.reception.decoding.policy.file.PolicyDecoderFileInCsarToPolicy", "decoderConfigurationName": "toscaPolicyDecoderConfiguration" }, - "ToscaControlLoopDecoder": { - "decoderType": "ToscaControlLoopDecoder", - "decoderClassName": "org.onap.policy.distribution.reception.decoding.policy.file.ControlLoopDecoderFileInCsar", - "decoderConfigurationName": "toscaControlLoopDecoderConfiguration" + "ToscaAutomationCompositionDecoder": { + "decoderType": "ToscaAutomationCompositionDecoder", + "decoderClassName": "org.onap.policy.distribution.reception.decoding.policy.file.AutomationCompositionDecoderFileInCsar", + "decoderConfigurationName": "toscaAutomationCompositionDecoderConfiguration" } }, "policyForwarders": { @@ -30,10 +30,10 @@ "forwarderClassName": "org.onap.policy.distribution.forwarding.lifecycle.api.LifecycleApiPolicyForwarder", "forwarderConfigurationName": "lifecycleApiPolicyConfiguration" }, - "LifeCycleApiControlLoopForwarder": { - "forwarderType": "LifeCycleControlLoopAPI", - "forwarderClassName": "org.onap.policy.distribution.forwarding.lifecycle.api.LifecycleApiControlLoopForwarder", - "forwarderConfigurationName": "lifecycleApiControlLoopConfiguration" + "LifeCycleApiAutomationCompositionForwarder": { + "forwarderType": "LifeCycleAutomationCompositionAPI", + "forwarderClassName": "org.onap.policy.distribution.forwarding.lifecycle.api.LifecycleApiAutomationCompositionForwarder", + "forwarderConfigurationName": "lifecycleApiAutomationCompositionConfiguration" } } } @@ -56,10 +56,10 @@ "policyTypeFileName": "tosca_policy_type" } }, - "toscaControlLoopDecoderConfiguration": { - "parameterClassName": "org.onap.policy.distribution.reception.decoding.policy.file.ControlLoopDecoderFileInCsarParameterGroup", + "toscaAutomationCompositionDecoderConfiguration": { + "parameterClassName": "org.onap.policy.distribution.reception.decoding.policy.file.AutomationCompositionDecoderFileInCsarParameterGroup", "parameters": { - "controlLoopType": "controlloop" + "automationCompositionType": "acm" } } }, @@ -87,12 +87,12 @@ "deployPolicies": true } }, - "lifecycleApiControlLoopConfiguration": { - "parameterClassName": "org.onap.policy.distribution.forwarding.lifecycle.api.LifecycleApiControlLoopForwarderParameters", + "lifecycleApiAutomationCompositionConfiguration": { + "parameterClassName": "org.onap.policy.distribution.forwarding.lifecycle.api.LifecycleApiAutomationCompositionForwarderParameters", "parameters": { - "controlLoopRuntimeParameters": { - "clientName": "policy-clamp-cl-runtime", - "hostname": "policy-clamp-cl-runtime", + "automationCompositionRuntimeParameters": { + "clientName": "policy-clamp-runtime-acm", + "hostname": "policy-clamp-runtime-acm", "port": 6969, "useHttps": true, "userName": "policyadmin", diff --git a/testsuites/stability/src/main/resources/testplans/stability.jmx b/testsuites/stability/src/main/resources/testplans/stability.jmx index 9182a97d..8022d607 100644 --- a/testsuites/stability/src/main/resources/testplans/stability.jmx +++ b/testsuites/stability/src/main/resources/testplans/stability.jmx @@ -364,7 +364,7 @@ $[:2].policy-type - onap.policies.controlloop.operational.common.Apex + onap.policies.acm.operational.common.Apex true false false -- 2.16.6