diff options
38 files changed, 7770 insertions, 2776 deletions
diff --git a/examples/examples-pcvs/src/test/resources/META-INF/persistence.xml b/examples/examples-pcvs/src/test/resources/META-INF/persistence.xml index 4dcba14b7..632ae0fca 100644 --- a/examples/examples-pcvs/src/test/resources/META-INF/persistence.xml +++ b/examples/examples-pcvs/src/test/resources/META-INF/persistence.xml @@ -2,19 +2,20 @@ <!-- ============LICENSE_START======================================================= Copyright (C) 2016-2018 Ericsson. All rights reserved. + Modifications Copyright (C) 2019-2021 Nordix Foundation. ================================================================================ 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========================================================= --> @@ -58,7 +59,7 @@ <properties> <property name="javax.persistence.jdbc.url" value="jdbc:derby:memory:apex_test" /> - <property name="javax.persistence.target-database" value="Derby" /> + <property name="eclipselink.target-database" value="Derby" /> <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver" /> <property name="eclipselink.ddl-generation" value="drop-and-create-tables" /> diff --git a/packages/apex-pdp-package-full/src/main/resources/META-INF/persistence.xml b/packages/apex-pdp-package-full/src/main/resources/META-INF/persistence.xml index 670acb5f0..61f5409bd 100644 --- a/packages/apex-pdp-package-full/src/main/resources/META-INF/persistence.xml +++ b/packages/apex-pdp-package-full/src/main/resources/META-INF/persistence.xml @@ -2,6 +2,7 @@ <!-- ============LICENSE_START======================================================= Copyright (C) 2016-2018 Ericsson. All rights reserved. + Modifications Copyright (C) 2019-2021 Nordix Foundation. ================================================================================ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -65,11 +66,11 @@ <exclude-unlisted-classes>false</exclude-unlisted-classes> <properties> - <property name="javax.persistence.target-database" value="PostgreSQL" /> - <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" /> - <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/apex" /> - <property name="javax.persistence.jdbc.user" value="postgres" /> - <property name="javax.persistence.jdbc.password" value="postgres" /> + <property name="eclipselink.target-database" value="MySQL" /> + <property name="javax.persistence.jdbc.driver" value="org.mariadb.jdbc.Driver" /> + <property name="javax.persistence.jdbc.url" value="jdbc:mariadb://localhost:5432/apex" /> + <property name="javax.persistence.jdbc.user" value="policy" /> + <property name="javax.persistence.jdbc.password" value="P01icY" /> <property name="eclipselink.ddl-generation" value="create-or-extend-tables" /> <property name="eclipselink.logging.level" value="INFO" /> @@ -122,11 +123,11 @@ <exclude-unlisted-classes>false</exclude-unlisted-classes> <properties> - <property name="javax.persistence.target-database" value="PostgreSQL" /> - <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" /> - <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/apex_test" /> - <property name="javax.persistence.jdbc.user" value="postgres" /> - <property name="javax.persistence.jdbc.password" value="postgres" /> + <property name="eclipselink.target-database" value="MySQL" /> + <property name="javax.persistence.jdbc.driver" value="org.mariadb.jdbc.Driver" /> + <property name="javax.persistence.jdbc.url" value="jdbc:mariadb://localhost:5432/apex_test" /> + <property name="javax.persistence.jdbc.user" value="policy" /> + <property name="javax.persistence.jdbc.password" value="P01icY" /> <property name="eclipselink.ddl-generation" value="drop-and-create-tables" /> <property name="eclipselink.logging.level" value="INFO" /> @@ -177,13 +178,13 @@ <class>org.onap.policy.apex.domains.vpn.concepts.VPNProblem</class> <properties> - <property name="javax.persistence.target-database" value="PostgreSQL" /> - <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" /> - <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/apex" /> - <property name="javax.persistence.jdbc.user" value="postgres" /> - <property name="javax.persistence.jdbc.password" value="postgres" /> + <property name="eclipselink.target-database" value="MySQL" /> + <property name="javax.persistence.jdbc.driver" value="org.mariadb.jdbc.Driver" /> + <property name="javax.persistence.jdbc.url" value="jdbc:mariadb://localhost:5432/apex" /> + <property name="javax.persistence.jdbc.user" value="policy" /> + <property name="javax.persistence.jdbc.password" value="P01icY" /> - <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQL94Dialect" /> + <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" /> <property name="hibernate.hbm2ddl.auto" value="update" /> <property name="hibernate.connection.provider_class" value="org.hibernate.connection.C3P0ConnectionProvider" /> @@ -240,12 +241,12 @@ <class>org.onap.policy.apex.domains.vpn.concepts.VPNProblem</class> <properties> - <property name="javax.persistence.target-database" value="PostgreSQL" /> - <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" /> - <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/apex_test" /> - <property name="javax.persistence.jdbc.user" value="postgres" /> - <property name="javax.persistence.jdbc.password" value="postgres" /> - <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQL94Dialect" /> + <property name="eclipselink.target-database" value="MySQL" /> + <property name="javax.persistence.jdbc.driver" value="org.mariadb.jdbc.Driver" /> + <property name="javax.persistence.jdbc.url" value="jdbc:mariadb://localhost:5432/apex_test" /> + <property name="javax.persistence.jdbc.user" value="policy" /> + <property name="javax.persistence.jdbc.password" value="P01icY" /> + <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" /> <property name="hibernate.hbm2ddl.auto" value="create" /> <property name="hibernate.connection.provider_class" value="org.hibernate.connection.C3P0ConnectionProvider" /> diff --git a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-jms/src/main/java/org/onap/policy/apex/plugins/event/carrier/jms/ApexJmsConsumer.java b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-jms/src/main/java/org/onap/policy/apex/plugins/event/carrier/jms/ApexJmsConsumer.java index 538b63546..4bad4cb7a 100644 --- a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-jms/src/main/java/org/onap/policy/apex/plugins/event/carrier/jms/ApexJmsConsumer.java +++ b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-jms/src/main/java/org/onap/policy/apex/plugins/event/carrier/jms/ApexJmsConsumer.java @@ -30,6 +30,7 @@ import javax.jms.MessageListener; import javax.jms.Session; import javax.jms.Topic; import javax.naming.InitialContext; +import javax.naming.NamingException; import org.onap.policy.apex.core.infrastructure.threading.ThreadUtilities; import org.onap.policy.apex.service.engine.event.ApexEventException; import org.onap.policy.apex.service.engine.event.ApexEventReceiver; @@ -77,10 +78,10 @@ public class ApexJmsConsumer extends ApexPluginsEventConsumer implements Message jmsConsumerProperties = (JmsCarrierTechnologyParameters) consumerParameters.getCarrierTechnologyParameters(); // Look up the JMS connection factory - InitialContext jmsContext = null; - ConnectionFactory connectionFactory = null; + InitialContext jmsContext; + ConnectionFactory connectionFactory; try { - jmsContext = new InitialContext(jmsConsumerProperties.getJmsConsumerProperties()); + jmsContext = getInitialContext(); connectionFactory = (ConnectionFactory) jmsContext.lookup(jmsConsumerProperties.getConnectionFactory()); // Check if we actually got a connection factory @@ -124,6 +125,17 @@ public class ApexJmsConsumer extends ApexPluginsEventConsumer implements Message } /** + * Construct InitialContext. This function should not be run directly. + * Package-private access is set for testing purposes only. + * + * @return InitialContext + * @throws NamingException if a naming exception is encountered + */ + InitialContext getInitialContext() throws NamingException { + return new InitialContext(jmsConsumerProperties.getJmsConsumerProperties()); + } + + /** * {@inheritDoc}. */ @Override diff --git a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-jms/src/main/java/org/onap/policy/apex/plugins/event/carrier/jms/ApexJmsProducer.java b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-jms/src/main/java/org/onap/policy/apex/plugins/event/carrier/jms/ApexJmsProducer.java index 4e5c7a31c..44ed810fd 100644 --- a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-jms/src/main/java/org/onap/policy/apex/plugins/event/carrier/jms/ApexJmsProducer.java +++ b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-jms/src/main/java/org/onap/policy/apex/plugins/event/carrier/jms/ApexJmsProducer.java @@ -1,7 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2016-2018 Ericsson. All rights reserved. - * Modifications Copyright (C) 2019-2020 Nordix Foundation. + * Modifications Copyright (C) 2019-2021 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -32,6 +32,7 @@ import javax.jms.MessageProducer; import javax.jms.Session; import javax.jms.Topic; import javax.naming.InitialContext; +import javax.naming.NamingException; import org.onap.policy.apex.service.engine.event.ApexEventException; import org.onap.policy.apex.service.engine.event.ApexEventProducer; import org.onap.policy.apex.service.engine.event.ApexEventRuntimeException; @@ -72,7 +73,8 @@ public class ApexJmsProducer implements ApexEventProducer { private String name = null; // The peer references for this event handler - private Map<EventHandlerPeeredMode, PeeredReference> peerReferenceMap = new EnumMap<>(EventHandlerPeeredMode.class); + private final Map<EventHandlerPeeredMode, PeeredReference> peerReferenceMap = + new EnumMap<>(EventHandlerPeeredMode.class); /** * {@inheritDoc}. @@ -91,10 +93,10 @@ public class ApexJmsProducer implements ApexEventProducer { jmsProducerProperties = (JmsCarrierTechnologyParameters) producerParameters.getCarrierTechnologyParameters(); // Look up the JMS connection factory - InitialContext jmsContext = null; - ConnectionFactory connectionFactory = null; + InitialContext jmsContext; + ConnectionFactory connectionFactory; try { - jmsContext = new InitialContext(jmsProducerProperties.getJmsProducerProperties()); + jmsContext = getInitialContext(); connectionFactory = (ConnectionFactory) jmsContext.lookup(jmsProducerProperties.getConnectionFactory()); // Check if we actually got a connection factory @@ -159,6 +161,17 @@ public class ApexJmsProducer implements ApexEventProducer { } /** + * Construct InitialContext. This function should not be run directly. + * Package-private access is set for testing purposes only. + * + * @return InitialContext + * @throws NamingException if a naming exception is encountered + */ + public InitialContext getInitialContext() throws NamingException { + return new InitialContext(jmsProducerProperties.getJmsProducerProperties()); + } + + /** * {@inheritDoc}. */ @Override @@ -204,7 +217,7 @@ public class ApexJmsProducer implements ApexEventProducer { } // The JMS message to send is constructed using the JMS session - Message jmsMessage = null; + Message jmsMessage; // Check the type of JMS message to send if (jmsProducerProperties.isObjectMessageSending()) { diff --git a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-jms/src/test/java/org/onap/policy/apex/plugins/event/carrier/jms/ApexJmsConsumerTest.java b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-jms/src/test/java/org/onap/policy/apex/plugins/event/carrier/jms/ApexJmsConsumerTest.java index 8591d0470..e3ead320f 100644 --- a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-jms/src/test/java/org/onap/policy/apex/plugins/event/carrier/jms/ApexJmsConsumerTest.java +++ b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-jms/src/test/java/org/onap/policy/apex/plugins/event/carrier/jms/ApexJmsConsumerTest.java @@ -1,7 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2019 Samsung. All rights reserved. - * Modifications Copyright (C) 2019-2020 Nordix Foundation. + * Modifications Copyright (C) 2019-2021 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -26,10 +26,18 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; +import java.util.Properties; +import javax.jms.Connection; +import javax.jms.ConnectionFactory; +import javax.jms.JMSException; import javax.jms.Message; -import javax.jms.Session; +import javax.jms.Topic; +import javax.naming.InitialContext; +import javax.naming.NamingException; import org.junit.Before; import org.junit.Test; +import org.mockito.ArgumentMatchers; +import org.mockito.Mockito; import org.onap.policy.apex.service.engine.event.ApexEventException; import org.onap.policy.apex.service.engine.event.ApexEventProducer; import org.onap.policy.apex.service.engine.event.ApexEventReceiver; @@ -41,41 +49,150 @@ import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerPeeredMo public class ApexJmsConsumerTest { - ApexJmsConsumer apexJmsConsumer = null; - EventHandlerParameters consumerParameters = null; - ApexEventReceiver incomingEventReceiver = null; - ApexEventProducer apexJmsProducer = null; - Session jmsSession = null; - JmsCarrierTechnologyParameters jmsCarrierTechnologyParameters = null; + private static final String CONSUMER_NAME = "TestApexJmsConsumer"; + private ApexJmsConsumer apexJmsConsumer = null; + private EventHandlerParameters consumerParameters = null; + private ApexEventReceiver incomingEventReceiver = null; + private ApexEventProducer apexJmsProducer = null; + private JmsCarrierTechnologyParameters jmsCarrierTechnologyParameters = null; /** * Set up testing. - * - * @throws Exception on test set up errors. */ @Before - public void setUp() throws Exception { - apexJmsConsumer = new ApexJmsConsumer(); + public void setUp() { + apexJmsConsumer = Mockito.spy(new ApexJmsConsumer()); consumerParameters = new EventHandlerParameters(); apexJmsProducer = new ApexJmsProducer(); } @Test - public void testInitWithNonJmsCarrierTechnologyParameters() throws ApexEventException { - consumerParameters.setCarrierTechnologyParameters(new CarrierTechnologyParameters() {}); - assertThatThrownBy(() -> apexJmsConsumer.init("TestApexJmsConsumer", consumerParameters, incomingEventReceiver)) + public void testInitWithNonJmsCarrierTechnologyParameters() { + consumerParameters.setCarrierTechnologyParameters(new CarrierTechnologyParameters() { + }); + assertThatThrownBy( + () -> apexJmsConsumer.init(CONSUMER_NAME, consumerParameters, incomingEventReceiver) + ) .isInstanceOf(ApexEventException.class); } @Test - public void testInitWithJmsCarrierTechnologyParameters() throws ApexEventException { + public void testInitWithJmsCarrierTechnologyParameters() { jmsCarrierTechnologyParameters = new JmsCarrierTechnologyParameters(); consumerParameters.setCarrierTechnologyParameters(jmsCarrierTechnologyParameters); - assertThatThrownBy(() -> apexJmsConsumer.init("TestApexJmsConsumer", consumerParameters, incomingEventReceiver)) + assertThatThrownBy( + () -> apexJmsConsumer.init(CONSUMER_NAME, consumerParameters, incomingEventReceiver) + ) .isInstanceOf(ApexEventException.class); } @Test + public void testInitNoConnectionFactory() throws NamingException { + jmsCarrierTechnologyParameters = new JmsCarrierTechnologyParameters(); + consumerParameters.setCarrierTechnologyParameters(jmsCarrierTechnologyParameters); + + final InitialContext context = Mockito.mock(InitialContext.class); + Mockito.doReturn(null).when(context).lookup(jmsCarrierTechnologyParameters.getConnectionFactory()); + Mockito.doReturn(context).when(apexJmsConsumer).getInitialContext(); + + assertThatThrownBy( + () -> apexJmsConsumer.init(CONSUMER_NAME, consumerParameters, incomingEventReceiver) + ) + .isInstanceOf(ApexEventException.class); + } + + @Test + public void testInitNoConsumerTopic() throws NamingException { + jmsCarrierTechnologyParameters = new JmsCarrierTechnologyParameters(); + consumerParameters.setCarrierTechnologyParameters(jmsCarrierTechnologyParameters); + + final InitialContext context = Mockito.mock(InitialContext.class); + final ConnectionFactory connectionFactory = Mockito.mock(ConnectionFactory.class); + + Mockito.doReturn(connectionFactory).when(context).lookup(jmsCarrierTechnologyParameters.getConnectionFactory()); + Mockito.doReturn(null).when(context).lookup(jmsCarrierTechnologyParameters.getConsumerTopic()); + Mockito.doReturn(context).when(apexJmsConsumer).getInitialContext(); + + assertThatThrownBy( + () -> apexJmsConsumer.init(CONSUMER_NAME, consumerParameters, incomingEventReceiver) + ) + .isInstanceOf(ApexEventException.class); + } + + @Test + public void testInitNoConnection() throws NamingException, JMSException { + jmsCarrierTechnologyParameters = new JmsCarrierTechnologyParameters(); + consumerParameters.setCarrierTechnologyParameters(jmsCarrierTechnologyParameters); + + final InitialContext context = Mockito.mock(InitialContext.class); + final ConnectionFactory connectionFactory = Mockito.mock(ConnectionFactory.class); + final Topic topic = Mockito.mock(Topic.class); + + Mockito.doReturn(connectionFactory).when(context).lookup(jmsCarrierTechnologyParameters.getConnectionFactory()); + Mockito.doReturn(topic).when(context).lookup(jmsCarrierTechnologyParameters.getConsumerTopic()); + Mockito.doThrow(JMSException.class) + .when(connectionFactory) + .createConnection(jmsCarrierTechnologyParameters.getSecurityPrincipal(), + jmsCarrierTechnologyParameters.getSecurityCredentials()); + + Mockito.doReturn(context).when(apexJmsConsumer).getInitialContext(); + + assertThatThrownBy( + () -> apexJmsConsumer.init(CONSUMER_NAME, consumerParameters, incomingEventReceiver) + ) + .isInstanceOf(ApexEventException.class); + } + + @Test + public void testInitConnectionError() throws NamingException, JMSException { + jmsCarrierTechnologyParameters = new JmsCarrierTechnologyParameters(); + consumerParameters.setCarrierTechnologyParameters(jmsCarrierTechnologyParameters); + + final InitialContext context = Mockito.mock(InitialContext.class); + final ConnectionFactory connectionFactory = Mockito.mock(ConnectionFactory.class); + final Topic topic = Mockito.mock(Topic.class); + final Connection connection = Mockito.mock(Connection.class); + + Mockito.doReturn(connectionFactory).when(context).lookup(jmsCarrierTechnologyParameters.getConnectionFactory()); + Mockito.doReturn(topic).when(context).lookup(jmsCarrierTechnologyParameters.getConsumerTopic()); + Mockito.doReturn(connection) + .when(connectionFactory) + .createConnection(jmsCarrierTechnologyParameters.getSecurityPrincipal(), + jmsCarrierTechnologyParameters.getSecurityCredentials()); + Mockito.doThrow(JMSException.class).when(connection).start(); + Mockito.doReturn(context).when(apexJmsConsumer).getInitialContext(); + + assertThatThrownBy( + () -> apexJmsConsumer.init(CONSUMER_NAME, consumerParameters, incomingEventReceiver) + ) + .isInstanceOf(ApexEventException.class); + } + + @Test + public void testInit() throws NamingException, JMSException, ApexEventException { + jmsCarrierTechnologyParameters = new JmsCarrierTechnologyParameters(); + consumerParameters.setCarrierTechnologyParameters(jmsCarrierTechnologyParameters); + + final InitialContext context = Mockito.mock(InitialContext.class); + final ConnectionFactory connectionFactory = Mockito.mock(ConnectionFactory.class); + final Topic topic = Mockito.mock(Topic.class); + final Connection connection = Mockito.mock(Connection.class); + + Mockito.doReturn(connectionFactory).when(context).lookup(jmsCarrierTechnologyParameters.getConnectionFactory()); + Mockito.doReturn(topic).when(context).lookup(jmsCarrierTechnologyParameters.getConsumerTopic()); + Mockito.doReturn(connection) + .when(connectionFactory) + .createConnection(jmsCarrierTechnologyParameters.getSecurityPrincipal(), + jmsCarrierTechnologyParameters.getSecurityCredentials()); + Mockito.doNothing().when(connection).start(); + Mockito.doReturn(context).when(apexJmsConsumer).getInitialContext(); + + apexJmsConsumer.init(CONSUMER_NAME, consumerParameters, incomingEventReceiver); + + Mockito.verify(connection, Mockito.times(1)).start(); + } + + @Test public void testStart() { assertThatCode(apexJmsConsumer::start).doesNotThrowAnyException(); } @@ -93,7 +210,7 @@ public class ApexJmsConsumerTest { @Test public void testSetPeeredReference() { PeeredReference peeredReference = new PeeredReference(EventHandlerPeeredMode.REQUESTOR, - apexJmsConsumer, apexJmsProducer); + apexJmsConsumer, apexJmsProducer); apexJmsConsumer.setPeeredReference(EventHandlerPeeredMode.REQUESTOR, peeredReference); assertNotNull(apexJmsConsumer.getPeeredReference(EventHandlerPeeredMode.REQUESTOR)); } @@ -104,14 +221,107 @@ public class ApexJmsConsumerTest { } @Test - public void testOnMessage() { + public void testOnMessageUninitialized() { Message jmsMessage = null; assertThatThrownBy(() -> apexJmsConsumer.onMessage(jmsMessage)) .isInstanceOf(ApexEventRuntimeException.class); } @Test - public void testStop() { + public void testOnMessage() throws JMSException, NamingException, ApexEventException { + // prepare ApexJmsConsumer + jmsCarrierTechnologyParameters = new JmsCarrierTechnologyParameters(); + consumerParameters.setCarrierTechnologyParameters(jmsCarrierTechnologyParameters); + + final InitialContext context = Mockito.mock(InitialContext.class); + final ConnectionFactory connectionFactory = Mockito.mock(ConnectionFactory.class); + final Topic topic = Mockito.mock(Topic.class); + final Connection connection = Mockito.mock(Connection.class); + incomingEventReceiver = Mockito.mock(ApexEventReceiver.class); + + + Mockito.doReturn(connectionFactory).when(context).lookup(jmsCarrierTechnologyParameters.getConnectionFactory()); + Mockito.doReturn(topic).when(context).lookup(jmsCarrierTechnologyParameters.getConsumerTopic()); + Mockito.doReturn(connection) + .when(connectionFactory) + .createConnection(jmsCarrierTechnologyParameters.getSecurityPrincipal(), + jmsCarrierTechnologyParameters.getSecurityCredentials()); + Mockito.doNothing().when(connection).start(); + Mockito.doReturn(context).when(apexJmsConsumer).getInitialContext(); + + apexJmsConsumer.init(CONSUMER_NAME, consumerParameters, incomingEventReceiver); + + final Message message = Mockito.mock(Message.class); + + apexJmsConsumer.onMessage(message); + Mockito + .verify(incomingEventReceiver, Mockito.times(1)) + .receiveEvent(ArgumentMatchers.any(Properties.class), ArgumentMatchers.eq(message)); + } + + @Test + public void testConnectionError() throws NamingException, JMSException, ApexEventException { + // prepare ApexJmsConsumer + jmsCarrierTechnologyParameters = new JmsCarrierTechnologyParameters(); + consumerParameters.setCarrierTechnologyParameters(jmsCarrierTechnologyParameters); + + final InitialContext context = Mockito.mock(InitialContext.class); + final ConnectionFactory connectionFactory = Mockito.mock(ConnectionFactory.class); + final Topic topic = Mockito.mock(Topic.class); + final Connection connection = Mockito.mock(Connection.class); + + Mockito.doReturn(connectionFactory).when(context).lookup(jmsCarrierTechnologyParameters.getConnectionFactory()); + Mockito.doReturn(topic).when(context).lookup(jmsCarrierTechnologyParameters.getConsumerTopic()); + Mockito.doReturn(connection) + .when(connectionFactory) + .createConnection(jmsCarrierTechnologyParameters.getSecurityPrincipal(), + jmsCarrierTechnologyParameters.getSecurityCredentials()); + Mockito.doNothing().when(connection).start(); + Mockito.doReturn(context).when(apexJmsConsumer).getInitialContext(); + + apexJmsConsumer.init(CONSUMER_NAME, consumerParameters, incomingEventReceiver); + + Mockito.doThrow(JMSException.class).when(connection).close(); + + // do tests + apexJmsConsumer.start(); + assertThatCode(() -> apexJmsConsumer.stop()).doesNotThrowAnyException(); + Mockito.verify(connection, Mockito.times(1)).close(); + } + + @Test + public void testStop() throws NamingException, JMSException, ApexEventException { + // prepare ApexJmsConsumer + jmsCarrierTechnologyParameters = new JmsCarrierTechnologyParameters(); + consumerParameters.setCarrierTechnologyParameters(jmsCarrierTechnologyParameters); + + final InitialContext context = Mockito.mock(InitialContext.class); + final ConnectionFactory connectionFactory = Mockito.mock(ConnectionFactory.class); + final Topic topic = Mockito.mock(Topic.class); + final Connection connection = Mockito.mock(Connection.class); + + Mockito.doReturn(connectionFactory).when(context).lookup(jmsCarrierTechnologyParameters.getConnectionFactory()); + Mockito.doReturn(topic).when(context).lookup(jmsCarrierTechnologyParameters.getConsumerTopic()); + Mockito.doReturn(connection) + .when(connectionFactory) + .createConnection(jmsCarrierTechnologyParameters.getSecurityPrincipal(), + jmsCarrierTechnologyParameters.getSecurityCredentials()); + Mockito.doNothing().when(connection).start(); + Mockito.doReturn(context).when(apexJmsConsumer).getInitialContext(); + + apexJmsConsumer.init(CONSUMER_NAME, consumerParameters, incomingEventReceiver); + + Mockito.doNothing().when(connection).close(); + + apexJmsConsumer.start(); + + // do tests + apexJmsConsumer.stop(); + Mockito.verify(connection, Mockito.times(1)).close(); + } + + @Test + public void testStopNoJmsProperties() { assertThatThrownBy(apexJmsConsumer::stop).isInstanceOf(NullPointerException.class); } } diff --git a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-jms/src/test/java/org/onap/policy/apex/plugins/event/carrier/jms/ApexJmsProducerTest.java b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-jms/src/test/java/org/onap/policy/apex/plugins/event/carrier/jms/ApexJmsProducerTest.java index 09a87f804..708f29f4f 100644 --- a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-jms/src/test/java/org/onap/policy/apex/plugins/event/carrier/jms/ApexJmsProducerTest.java +++ b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-jms/src/test/java/org/onap/policy/apex/plugins/event/carrier/jms/ApexJmsProducerTest.java @@ -21,18 +21,33 @@ package org.onap.policy.apex.plugins.event.carrier.jms; +import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatCode; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertSame; +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; +import java.util.Random; +import javax.jms.Connection; +import javax.jms.ConnectionFactory; +import javax.jms.JMSException; +import javax.jms.Message; +import javax.jms.MessageProducer; +import javax.jms.ObjectMessage; import javax.jms.Session; +import javax.jms.TextMessage; +import javax.jms.Topic; +import javax.naming.InitialContext; +import javax.naming.NamingException; +import org.apache.commons.lang3.RandomStringUtils; +import org.junit.After; import org.junit.Before; import org.junit.Test; +import org.mockito.Mockito; import org.onap.policy.apex.service.engine.event.ApexEvent; import org.onap.policy.apex.service.engine.event.ApexEventException; -import org.onap.policy.apex.service.engine.event.ApexEventProducer; -import org.onap.policy.apex.service.engine.event.ApexEventReceiver; import org.onap.policy.apex.service.engine.event.ApexEventRuntimeException; import org.onap.policy.apex.service.engine.event.PeeredReference; import org.onap.policy.apex.service.engine.event.SynchronousEventCache; @@ -42,43 +57,204 @@ import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerPeeredMo public class ApexJmsProducerTest { - ApexJmsConsumer apexJmsConsumer = null; - EventHandlerParameters producerParameters = null; - ApexEventReceiver incomingEventReceiver = null; - ApexEventProducer apexJmsProducer = null; - Session jmsSession = null; - JmsCarrierTechnologyParameters jmsCarrierTechnologyParameters = null; - SynchronousEventCache synchronousEventCache = null; + private static final String PRODUCER_NAME = "TestApexJmsProducer"; + private ApexJmsConsumer apexJmsConsumer; + private EventHandlerParameters producerParameters; + private ApexJmsProducer apexJmsProducer; + private JmsCarrierTechnologyParameters jmsCarrierTechnologyParameters; private static final long DEFAULT_SYNCHRONOUS_EVENT_TIMEOUT = 1000; + private final Random random = new Random(); + private final PrintStream out = System.out; /** * Set up testing. * - * @throws Exception on test set up errors. */ @Before - public void setUp() throws Exception { + public void setUp() { apexJmsConsumer = new ApexJmsConsumer(); producerParameters = new EventHandlerParameters(); - apexJmsProducer = new ApexJmsProducer(); + apexJmsProducer = Mockito.spy(new ApexJmsProducer()); + } + + @After + public void tearDown() { + // restore system.out + System.setOut(out); } @Test public void testInitWithNonJmsCarrierTechnologyParameters() { - producerParameters.setCarrierTechnologyParameters(new CarrierTechnologyParameters() {}); - assertThatThrownBy(() -> apexJmsProducer.init("TestApexJmsProducer", producerParameters)) + producerParameters.setCarrierTechnologyParameters(new CarrierTechnologyParameters() { + }); + assertThatThrownBy(() -> apexJmsProducer.init(PRODUCER_NAME, producerParameters)) + .isInstanceOf(ApexEventException.class); + } + + @Test + public void testInitWithJmsCarrierTechnologyParameters() { + jmsCarrierTechnologyParameters = new JmsCarrierTechnologyParameters(); + producerParameters.setCarrierTechnologyParameters(jmsCarrierTechnologyParameters); + assertThatThrownBy(() -> apexJmsProducer.init(PRODUCER_NAME, producerParameters)) + .isInstanceOf(ApexEventException.class); + } + + @Test + public void testInitWithoutConnectionFactory() throws NamingException { + jmsCarrierTechnologyParameters = new JmsCarrierTechnologyParameters(); + producerParameters.setCarrierTechnologyParameters(jmsCarrierTechnologyParameters); + final String producerName = RandomStringUtils.randomAlphabetic(5); + + InitialContext context = Mockito.mock(InitialContext.class); + Mockito.doReturn(context).when(apexJmsProducer).getInitialContext(); + Mockito.doReturn(null).when(context).lookup(jmsCarrierTechnologyParameters.getConnectionFactory()); + + assertThatThrownBy(() -> apexJmsProducer.init(producerName, producerParameters)) + .isInstanceOf(ApexEventException.class); + } + + @Test + public void testInitWithoutTopic() throws NamingException { + jmsCarrierTechnologyParameters = new JmsCarrierTechnologyParameters(); + producerParameters.setCarrierTechnologyParameters(jmsCarrierTechnologyParameters); + final String producerName = RandomStringUtils.randomAlphabetic(5); + + final InitialContext context = Mockito.mock(InitialContext.class); + final ConnectionFactory connectionFactory = Mockito.mock(ConnectionFactory.class); + + Mockito.doReturn(context).when(apexJmsProducer).getInitialContext(); + Mockito.doReturn(connectionFactory).when(context).lookup(jmsCarrierTechnologyParameters.getConnectionFactory()); + Mockito.doReturn(null).when(context).lookup(jmsCarrierTechnologyParameters.getProducerTopic()); + + assertThatThrownBy(() -> apexJmsProducer.init(producerName, producerParameters)) + .isInstanceOf(ApexEventException.class); + } + + @Test + public void testInitConnectionCreateError() throws NamingException, JMSException { + jmsCarrierTechnologyParameters = new JmsCarrierTechnologyParameters(); + producerParameters.setCarrierTechnologyParameters(jmsCarrierTechnologyParameters); + final String producerName = RandomStringUtils.randomAlphabetic(5); + + final InitialContext context = Mockito.mock(InitialContext.class); + final ConnectionFactory connectionFactory = Mockito.mock(ConnectionFactory.class); + final Topic topic = Mockito.mock(Topic.class); + + Mockito.doReturn(context).when(apexJmsProducer).getInitialContext(); + Mockito.doReturn(connectionFactory).when(context).lookup(jmsCarrierTechnologyParameters.getConnectionFactory()); + Mockito.doReturn(topic).when(context).lookup(jmsCarrierTechnologyParameters.getProducerTopic()); + Mockito.doThrow(JMSException.class).when(connectionFactory) + .createConnection(jmsCarrierTechnologyParameters.getSecurityPrincipal(), + jmsCarrierTechnologyParameters.getSecurityCredentials()); + + assertThatThrownBy(() -> apexJmsProducer.init(producerName, producerParameters)) + .isInstanceOf(ApexEventException.class); + } + + @Test + public void testInitConnectionStartError() throws NamingException, JMSException { + jmsCarrierTechnologyParameters = new JmsCarrierTechnologyParameters(); + producerParameters.setCarrierTechnologyParameters(jmsCarrierTechnologyParameters); + final String producerName = RandomStringUtils.randomAlphabetic(5); + + final InitialContext context = Mockito.mock(InitialContext.class); + final ConnectionFactory connectionFactory = Mockito.mock(ConnectionFactory.class); + final Topic topic = Mockito.mock(Topic.class); + final Connection connection = Mockito.mock(Connection.class); + + Mockito.doReturn(context).when(apexJmsProducer).getInitialContext(); + Mockito.doReturn(connectionFactory).when(context).lookup(jmsCarrierTechnologyParameters.getConnectionFactory()); + Mockito.doReturn(topic).when(context).lookup(jmsCarrierTechnologyParameters.getProducerTopic()); + Mockito.doReturn(connection) + .when(connectionFactory) + .createConnection(jmsCarrierTechnologyParameters.getSecurityPrincipal(), + jmsCarrierTechnologyParameters.getSecurityCredentials()); + Mockito.doThrow(JMSException.class).when(connection).start(); + + assertThatThrownBy(() -> apexJmsProducer.init(producerName, producerParameters)) + .isInstanceOf(ApexEventException.class); + } + + @Test + public void testInitSessionCreateError() throws NamingException, JMSException { + jmsCarrierTechnologyParameters = new JmsCarrierTechnologyParameters(); + producerParameters.setCarrierTechnologyParameters(jmsCarrierTechnologyParameters); + final String producerName = RandomStringUtils.randomAlphabetic(5); + + final InitialContext context = Mockito.mock(InitialContext.class); + final ConnectionFactory connectionFactory = Mockito.mock(ConnectionFactory.class); + final Topic topic = Mockito.mock(Topic.class); + final Connection connection = Mockito.mock(Connection.class); + + Mockito.doReturn(context).when(apexJmsProducer).getInitialContext(); + Mockito.doReturn(connectionFactory).when(context).lookup(jmsCarrierTechnologyParameters.getConnectionFactory()); + Mockito.doReturn(topic).when(context).lookup(jmsCarrierTechnologyParameters.getProducerTopic()); + Mockito.doReturn(connection) + .when(connectionFactory) + .createConnection(jmsCarrierTechnologyParameters.getSecurityPrincipal(), + jmsCarrierTechnologyParameters.getSecurityCredentials()); + Mockito.doNothing().when(connection).start(); + Mockito.doThrow(JMSException.class).when(connection).createSession(false, Session.AUTO_ACKNOWLEDGE); + + assertThatThrownBy(() -> apexJmsProducer.init(producerName, producerParameters)) .isInstanceOf(ApexEventException.class); } @Test - public void testInitWithJmsCarrierTechnologyParameters() throws ApexEventException { + public void testInitProducerCreateError() throws NamingException, JMSException { jmsCarrierTechnologyParameters = new JmsCarrierTechnologyParameters(); producerParameters.setCarrierTechnologyParameters(jmsCarrierTechnologyParameters); - assertThatThrownBy(() -> apexJmsProducer.init("TestApexJmsProducer", producerParameters)) + final String producerName = RandomStringUtils.randomAlphabetic(5); + + final InitialContext context = Mockito.mock(InitialContext.class); + final ConnectionFactory connectionFactory = Mockito.mock(ConnectionFactory.class); + final Topic topic = Mockito.mock(Topic.class); + final Connection connection = Mockito.mock(Connection.class); + final Session session = Mockito.mock(Session.class); + + Mockito.doReturn(context).when(apexJmsProducer).getInitialContext(); + Mockito.doReturn(connectionFactory).when(context).lookup(jmsCarrierTechnologyParameters.getConnectionFactory()); + Mockito.doReturn(topic).when(context).lookup(jmsCarrierTechnologyParameters.getProducerTopic()); + Mockito.doReturn(connection) + .when(connectionFactory) + .createConnection(jmsCarrierTechnologyParameters.getSecurityPrincipal(), + jmsCarrierTechnologyParameters.getSecurityCredentials()); + Mockito.doNothing().when(connection).start(); + Mockito.doReturn(session).when(connection).createSession(false, Session.AUTO_ACKNOWLEDGE); + Mockito.doThrow(JMSException.class).when(session).createProducer(topic); + assertThatThrownBy(() -> apexJmsProducer.init(producerName, producerParameters)) .isInstanceOf(ApexEventException.class); } @Test + public void testInit() throws NamingException, JMSException { + jmsCarrierTechnologyParameters = new JmsCarrierTechnologyParameters(); + producerParameters.setCarrierTechnologyParameters(jmsCarrierTechnologyParameters); + final String producerName = RandomStringUtils.randomAlphabetic(5); + + final InitialContext context = Mockito.mock(InitialContext.class); + final ConnectionFactory connectionFactory = Mockito.mock(ConnectionFactory.class); + final Topic topic = Mockito.mock(Topic.class); + final Connection connection = Mockito.mock(Connection.class); + final Session session = Mockito.mock(Session.class); + final MessageProducer messageProducer = Mockito.mock(MessageProducer.class); + + Mockito.doReturn(context).when(apexJmsProducer).getInitialContext(); + Mockito.doReturn(connectionFactory).when(context).lookup(jmsCarrierTechnologyParameters.getConnectionFactory()); + Mockito.doReturn(topic).when(context).lookup(jmsCarrierTechnologyParameters.getProducerTopic()); + Mockito.doReturn(connection) + .when(connectionFactory) + .createConnection(jmsCarrierTechnologyParameters.getSecurityPrincipal(), + jmsCarrierTechnologyParameters.getSecurityCredentials()); + Mockito.doNothing().when(connection).start(); + Mockito.doReturn(session).when(connection).createSession(false, Session.AUTO_ACKNOWLEDGE); + Mockito.doReturn(messageProducer).when(session).createProducer(topic); + + assertThatCode(() -> apexJmsProducer.init(producerName, producerParameters)) + .doesNotThrowAnyException(); + } + + @Test public void testGetName() { assertNull(apexJmsProducer.getName()); } @@ -91,40 +267,444 @@ public class ApexJmsProducerTest { @Test public void testSetPeeredReference() { PeeredReference peeredReference = new PeeredReference(EventHandlerPeeredMode.REQUESTOR, - apexJmsConsumer, apexJmsProducer); + apexJmsConsumer, apexJmsProducer); apexJmsProducer.setPeeredReference(EventHandlerPeeredMode.REQUESTOR, peeredReference); - assertNotNull(apexJmsProducer.getPeeredReference(EventHandlerPeeredMode.REQUESTOR)); + final PeeredReference actual = apexJmsProducer.getPeeredReference(EventHandlerPeeredMode.REQUESTOR); + assertSame(peeredReference, actual); + } + + @Test + public void testSendEventNotSerializable() { + producerParameters.setCarrierTechnologyParameters(new JmsCarrierTechnologyParameters()); + Object object = new Object(); + final long executionId = random.nextLong(); + assertThatThrownBy(() -> apexJmsProducer.sendEvent(executionId, null, PRODUCER_NAME, object)) + .isInstanceOf(ApexEventRuntimeException.class); } @Test - public void testSendEvent() throws ApexEventException { - producerParameters.setCarrierTechnologyParameters(new JmsCarrierTechnologyParameters() {}); - synchronousEventCache = new SynchronousEventCache(EventHandlerPeeredMode.SYNCHRONOUS, - apexJmsConsumer, apexJmsProducer, DEFAULT_SYNCHRONOUS_EVENT_TIMEOUT); + public void testSendEventRemoveCache() { + producerParameters.setCarrierTechnologyParameters(new JmsCarrierTechnologyParameters()); + final SynchronousEventCache synchronousEventCache = + Mockito.spy(new SynchronousEventCache(EventHandlerPeeredMode.SYNCHRONOUS, + apexJmsConsumer, apexJmsProducer, DEFAULT_SYNCHRONOUS_EVENT_TIMEOUT)); apexJmsProducer.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, - synchronousEventCache); + synchronousEventCache); + + Object object = new Object(); + final long executionId = random.nextLong(); + + assertThatThrownBy(() -> apexJmsProducer.sendEvent(executionId, null, PRODUCER_NAME, object)) + .isInstanceOf(ApexEventRuntimeException.class); + Mockito.verify(synchronousEventCache, Mockito.times(1)).removeCachedEventToApexIfExists(executionId); + } + + @Test + public void testSendEventCreateObjectMessageError() throws ApexEventException, NamingException, JMSException { + // Prepare ApexJmsProducer + jmsCarrierTechnologyParameters = new JmsCarrierTechnologyParameters(); + producerParameters.setCarrierTechnologyParameters(jmsCarrierTechnologyParameters); + + final InitialContext context = Mockito.mock(InitialContext.class); + final ConnectionFactory connectionFactory = Mockito.mock(ConnectionFactory.class); + final Topic topic = Mockito.mock(Topic.class); + final Connection connection = Mockito.mock(Connection.class); + final Session session = Mockito.mock(Session.class); + final MessageProducer messageProducer = Mockito.mock(MessageProducer.class); + + Mockito.doReturn(context).when(apexJmsProducer).getInitialContext(); + Mockito.doReturn(connectionFactory).when(context).lookup(jmsCarrierTechnologyParameters.getConnectionFactory()); + Mockito.doReturn(topic).when(context).lookup(jmsCarrierTechnologyParameters.getProducerTopic()); + Mockito.doReturn(connection) + .when(connectionFactory) + .createConnection(jmsCarrierTechnologyParameters.getSecurityPrincipal(), + jmsCarrierTechnologyParameters.getSecurityCredentials()); + Mockito.doNothing().when(connection).start(); + Mockito.doReturn(session).when(connection).createSession(false, Session.AUTO_ACKNOWLEDGE); + Mockito.doReturn(messageProducer).when(session).createProducer(topic); + + apexJmsProducer.init(RandomStringUtils.random(5), producerParameters); + + // Prepare sendEvent + ApexEvent apexEvent = new ApexEvent("testEvent", "testVersion", "testNameSpace", - "testSource", "testTarget"); - assertThatThrownBy(() -> apexJmsProducer.sendEvent(1000L, null, "TestApexJmsProducer", apexEvent)) - .isInstanceOf(NullPointerException.class); + "testSource", "testTarget"); + Mockito.doThrow(JMSException.class).when(session).createObjectMessage(apexEvent); + + final long executionId = random.nextLong(); + + + assertThatThrownBy(() -> apexJmsProducer.sendEvent(executionId, null, PRODUCER_NAME, apexEvent)) + .isInstanceOf(ApexEventRuntimeException.class); } @Test - public void testSendEventWithNonSerializableObject() throws ApexEventException { - producerParameters.setCarrierTechnologyParameters(new JmsCarrierTechnologyParameters() {}); - synchronousEventCache = new SynchronousEventCache(EventHandlerPeeredMode.SYNCHRONOUS, - apexJmsConsumer, apexJmsProducer, DEFAULT_SYNCHRONOUS_EVENT_TIMEOUT); - apexJmsProducer.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, - synchronousEventCache); + public void testSendEventCreateObjectMessageSendError() throws ApexEventException, NamingException, JMSException { + // Prepare ApexJmsProducer + jmsCarrierTechnologyParameters = new JmsCarrierTechnologyParameters(); + producerParameters.setCarrierTechnologyParameters(jmsCarrierTechnologyParameters); + + final InitialContext context = Mockito.mock(InitialContext.class); + final ConnectionFactory connectionFactory = Mockito.mock(ConnectionFactory.class); + final Topic topic = Mockito.mock(Topic.class); + final Connection connection = Mockito.mock(Connection.class); + final Session session = Mockito.mock(Session.class); + final MessageProducer messageProducer = Mockito.mock(MessageProducer.class); + + Mockito.doReturn(context).when(apexJmsProducer).getInitialContext(); + Mockito.doReturn(connectionFactory).when(context).lookup(jmsCarrierTechnologyParameters.getConnectionFactory()); + Mockito.doReturn(topic).when(context).lookup(jmsCarrierTechnologyParameters.getProducerTopic()); + Mockito.doReturn(connection) + .when(connectionFactory) + .createConnection(jmsCarrierTechnologyParameters.getSecurityPrincipal(), + jmsCarrierTechnologyParameters.getSecurityCredentials()); + Mockito.doNothing().when(connection).start(); + Mockito.doReturn(session).when(connection).createSession(false, Session.AUTO_ACKNOWLEDGE); + Mockito.doReturn(messageProducer).when(session).createProducer(topic); + + apexJmsProducer.init(RandomStringUtils.random(5), producerParameters); + + // Prepare sendEvent + final Message message = Mockito.mock(ObjectMessage.class); + ApexEvent apexEvent = new ApexEvent("testEvent", "testVersion", "testNameSpace", + "testSource", "testTarget"); + Mockito.doReturn(message).when(session).createObjectMessage(apexEvent); + Mockito.doThrow(JMSException.class).when(messageProducer).send(message); + + final long executionId = random.nextLong(); + + + assertThatThrownBy( + () -> apexJmsProducer + .sendEvent(executionId, null, PRODUCER_NAME, apexEvent) + ) + .isInstanceOf(ApexEventRuntimeException.class); + } + + @Test + public void testSendEventCreateObjectMessageSend() throws ApexEventException, NamingException, JMSException { + // Prepare ApexJmsProducer + jmsCarrierTechnologyParameters = new JmsCarrierTechnologyParameters(); + producerParameters.setCarrierTechnologyParameters(jmsCarrierTechnologyParameters); + + final InitialContext context = Mockito.mock(InitialContext.class); + final ConnectionFactory connectionFactory = Mockito.mock(ConnectionFactory.class); + final Topic topic = Mockito.mock(Topic.class); + final Connection connection = Mockito.mock(Connection.class); + final Session session = Mockito.mock(Session.class); + final MessageProducer messageProducer = Mockito.mock(MessageProducer.class); + + Mockito.doReturn(context).when(apexJmsProducer).getInitialContext(); + Mockito.doReturn(connectionFactory).when(context).lookup(jmsCarrierTechnologyParameters.getConnectionFactory()); + Mockito.doReturn(topic).when(context).lookup(jmsCarrierTechnologyParameters.getProducerTopic()); + Mockito.doReturn(connection) + .when(connectionFactory) + .createConnection(jmsCarrierTechnologyParameters.getSecurityPrincipal(), + jmsCarrierTechnologyParameters.getSecurityCredentials()); + Mockito.doNothing().when(connection).start(); + Mockito.doReturn(session).when(connection).createSession(false, Session.AUTO_ACKNOWLEDGE); + Mockito.doReturn(messageProducer).when(session).createProducer(topic); + + apexJmsProducer.init(RandomStringUtils.random(5), producerParameters); + + // Prepare sendEvent + final Message message = Mockito.mock(ObjectMessage.class); + ApexEvent apexEvent = new ApexEvent("testEvent", "testVersion", "testNameSpace", + "testSource", "testTarget"); + Mockito.doReturn(message).when(session).createObjectMessage(apexEvent); + Mockito.doNothing().when(messageProducer).send(message); + + final long executionId = random.nextLong(); + + + assertThatCode( + () -> apexJmsProducer + .sendEvent(executionId, null, PRODUCER_NAME, apexEvent) + ) + .doesNotThrowAnyException(); + } + + @Test + public void testSendEventCreateTextMessageError() throws ApexEventException, NamingException, JMSException { + // Prepare ApexJmsProducer + jmsCarrierTechnologyParameters = new JmsCarrierTechnologyParameters(); + jmsCarrierTechnologyParameters.setObjectMessageSending(false); + producerParameters.setCarrierTechnologyParameters(jmsCarrierTechnologyParameters); + + final InitialContext context = Mockito.mock(InitialContext.class); + final ConnectionFactory connectionFactory = Mockito.mock(ConnectionFactory.class); + final Topic topic = Mockito.mock(Topic.class); + final Connection connection = Mockito.mock(Connection.class); + final Session session = Mockito.mock(Session.class); + final MessageProducer messageProducer = Mockito.mock(MessageProducer.class); + + Mockito.doReturn(context).when(apexJmsProducer).getInitialContext(); + Mockito.doReturn(connectionFactory).when(context).lookup(jmsCarrierTechnologyParameters.getConnectionFactory()); + Mockito.doReturn(topic).when(context).lookup(jmsCarrierTechnologyParameters.getProducerTopic()); + Mockito.doReturn(connection) + .when(connectionFactory) + .createConnection(jmsCarrierTechnologyParameters.getSecurityPrincipal(), + jmsCarrierTechnologyParameters.getSecurityCredentials()); + Mockito.doNothing().when(connection).start(); + Mockito.doReturn(session).when(connection).createSession(false, Session.AUTO_ACKNOWLEDGE); + Mockito.doReturn(messageProducer).when(session).createProducer(topic); + apexJmsProducer.init(RandomStringUtils.random(5), producerParameters); + + // Prepare sendEvent + ApexEvent apexEvent = new ApexEvent("testEvent", "testVersion", "testNameSpace", + "testSource", "testTarget"); + + Mockito.doThrow(JMSException.class).when(session).createTextMessage(apexEvent.toString()); - ApexJmsProducerTest producerTest = new ApexJmsProducerTest(); + final long executionId = random.nextLong(); - assertThatThrownBy(() -> apexJmsProducer.sendEvent(-1L, null, "TestApexJmsProducer", producerTest)) + assertThatThrownBy( + () -> apexJmsProducer + .sendEvent(executionId, null, PRODUCER_NAME, apexEvent) + ) .isInstanceOf(ApexEventRuntimeException.class); } @Test - public void testStop() { + public void testSendEventCreateTextMessageSendError() throws ApexEventException, NamingException, JMSException { + // Prepare ApexJmsProducer + jmsCarrierTechnologyParameters = new JmsCarrierTechnologyParameters(); + jmsCarrierTechnologyParameters.setObjectMessageSending(false); + producerParameters.setCarrierTechnologyParameters(jmsCarrierTechnologyParameters); + + final InitialContext context = Mockito.mock(InitialContext.class); + final ConnectionFactory connectionFactory = Mockito.mock(ConnectionFactory.class); + final Topic topic = Mockito.mock(Topic.class); + final Connection connection = Mockito.mock(Connection.class); + final Session session = Mockito.mock(Session.class); + final MessageProducer messageProducer = Mockito.mock(MessageProducer.class); + + Mockito.doReturn(context).when(apexJmsProducer).getInitialContext(); + Mockito.doReturn(connectionFactory).when(context).lookup(jmsCarrierTechnologyParameters.getConnectionFactory()); + Mockito.doReturn(topic).when(context).lookup(jmsCarrierTechnologyParameters.getProducerTopic()); + Mockito.doReturn(connection) + .when(connectionFactory) + .createConnection(jmsCarrierTechnologyParameters.getSecurityPrincipal(), + jmsCarrierTechnologyParameters.getSecurityCredentials()); + Mockito.doNothing().when(connection).start(); + Mockito.doReturn(session).when(connection).createSession(false, Session.AUTO_ACKNOWLEDGE); + Mockito.doReturn(messageProducer).when(session).createProducer(topic); + + apexJmsProducer.init(RandomStringUtils.random(5), producerParameters); + + // Prepare sendEvent + final Message message = Mockito.mock(TextMessage.class); + ApexEvent apexEvent = new ApexEvent("testEvent", "testVersion", "testNameSpace", + "testSource", "testTarget"); + Mockito.doReturn(message).when(session).createTextMessage(apexEvent.toString()); + Mockito.doThrow(JMSException.class).when(messageProducer).send(message); + + final long executionId = random.nextLong(); + + + assertThatThrownBy( + () -> apexJmsProducer + .sendEvent(executionId, null, PRODUCER_NAME, apexEvent) + ) + .isInstanceOf(ApexEventRuntimeException.class); + } + + @Test + public void testSendEventCreateTextMessageSend() throws ApexEventException, NamingException, JMSException { + // Prepare ApexJmsProducer + jmsCarrierTechnologyParameters = new JmsCarrierTechnologyParameters(); + jmsCarrierTechnologyParameters.setObjectMessageSending(false); + producerParameters.setCarrierTechnologyParameters(jmsCarrierTechnologyParameters); + + final InitialContext context = Mockito.mock(InitialContext.class); + final ConnectionFactory connectionFactory = Mockito.mock(ConnectionFactory.class); + final Topic topic = Mockito.mock(Topic.class); + final Connection connection = Mockito.mock(Connection.class); + final Session session = Mockito.mock(Session.class); + final MessageProducer messageProducer = Mockito.mock(MessageProducer.class); + + Mockito.doReturn(context).when(apexJmsProducer).getInitialContext(); + Mockito.doReturn(connectionFactory).when(context).lookup(jmsCarrierTechnologyParameters.getConnectionFactory()); + Mockito.doReturn(topic).when(context).lookup(jmsCarrierTechnologyParameters.getProducerTopic()); + Mockito.doReturn(connection) + .when(connectionFactory) + .createConnection(jmsCarrierTechnologyParameters.getSecurityPrincipal(), + jmsCarrierTechnologyParameters.getSecurityCredentials()); + Mockito.doNothing().when(connection).start(); + Mockito.doReturn(session).when(connection).createSession(false, Session.AUTO_ACKNOWLEDGE); + Mockito.doReturn(messageProducer).when(session).createProducer(topic); + + apexJmsProducer.init(RandomStringUtils.random(5), producerParameters); + + // Prepare sendEvent + final Message message = Mockito.mock(TextMessage.class); + ApexEvent apexEvent = new ApexEvent("testEvent", "testVersion", "testNameSpace", + "testSource", "testTarget"); + Mockito.doReturn(message).when(session).createTextMessage(apexEvent.toString()); + Mockito.doNothing().when(messageProducer).send(message); + + final long executionId = random.nextLong(); + + + assertThatCode( + () -> apexJmsProducer.sendEvent(executionId, null, PRODUCER_NAME, apexEvent) + ) + .doesNotThrowAnyException(); + } + + @Test + public void testStopProducerException() throws NamingException, ApexEventException, JMSException { + // Prepare ApexJmsProducer + jmsCarrierTechnologyParameters = new JmsCarrierTechnologyParameters(); + jmsCarrierTechnologyParameters.setObjectMessageSending(false); + producerParameters.setCarrierTechnologyParameters(jmsCarrierTechnologyParameters); + + final InitialContext context = Mockito.mock(InitialContext.class); + final ConnectionFactory connectionFactory = Mockito.mock(ConnectionFactory.class); + final Topic topic = Mockito.mock(Topic.class); + final Connection connection = Mockito.mock(Connection.class); + final Session session = Mockito.mock(Session.class); + final MessageProducer messageProducer = Mockito.mock(MessageProducer.class); + + Mockito.doReturn(context).when(apexJmsProducer).getInitialContext(); + Mockito.doReturn(connectionFactory).when(context).lookup(jmsCarrierTechnologyParameters.getConnectionFactory()); + Mockito.doReturn(topic).when(context).lookup(jmsCarrierTechnologyParameters.getProducerTopic()); + Mockito.doReturn(connection) + .when(connectionFactory) + .createConnection(jmsCarrierTechnologyParameters.getSecurityPrincipal(), + jmsCarrierTechnologyParameters.getSecurityCredentials()); + Mockito.doNothing().when(connection).start(); + Mockito.doReturn(session).when(connection).createSession(false, Session.AUTO_ACKNOWLEDGE); + Mockito.doReturn(messageProducer).when(session).createProducer(topic); + + apexJmsProducer.init(RandomStringUtils.random(5), producerParameters); + + // Prepare stop mock + Mockito.doThrow(JMSException.class).when(messageProducer).close(); + + // Prepare system.out + final ByteArrayOutputStream testBuffer = new ByteArrayOutputStream(); + System.setOut(new PrintStream(testBuffer)); + + // do the test + assertThatCode(apexJmsProducer::stop).doesNotThrowAnyException(); + assertThat(testBuffer.toString()).contains("failed to close JMS message producer"); + } + + @Test + public void testStopCloseSessionException() throws NamingException, ApexEventException, JMSException { + // Prepare ApexJmsProducer + jmsCarrierTechnologyParameters = new JmsCarrierTechnologyParameters(); + jmsCarrierTechnologyParameters.setObjectMessageSending(false); + producerParameters.setCarrierTechnologyParameters(jmsCarrierTechnologyParameters); + + final InitialContext context = Mockito.mock(InitialContext.class); + final ConnectionFactory connectionFactory = Mockito.mock(ConnectionFactory.class); + final Topic topic = Mockito.mock(Topic.class); + final Connection connection = Mockito.mock(Connection.class); + final Session session = Mockito.mock(Session.class); + final MessageProducer messageProducer = Mockito.mock(MessageProducer.class); + + Mockito.doReturn(context).when(apexJmsProducer).getInitialContext(); + Mockito.doReturn(connectionFactory).when(context).lookup(jmsCarrierTechnologyParameters.getConnectionFactory()); + Mockito.doReturn(topic).when(context).lookup(jmsCarrierTechnologyParameters.getProducerTopic()); + Mockito.doReturn(connection) + .when(connectionFactory) + .createConnection(jmsCarrierTechnologyParameters.getSecurityPrincipal(), + jmsCarrierTechnologyParameters.getSecurityCredentials()); + Mockito.doNothing().when(connection).start(); + Mockito.doReturn(session).when(connection).createSession(false, Session.AUTO_ACKNOWLEDGE); + Mockito.doReturn(messageProducer).when(session).createProducer(topic); + + apexJmsProducer.init(RandomStringUtils.random(5), producerParameters); + + // Prepare stop mocks + Mockito.doNothing().when(messageProducer).close(); + Mockito.doThrow(JMSException.class).when(session).close(); + + // Prepare system.out + final ByteArrayOutputStream testBuffer = new ByteArrayOutputStream(); + System.setOut(new PrintStream(testBuffer)); + + // do the test + assertThatCode(apexJmsProducer::stop).doesNotThrowAnyException(); + assertThat(testBuffer.toString()).contains("failed to close the JMS session"); + } + + @Test + public void testStopCloseConnectionException() throws NamingException, ApexEventException, JMSException { + // Prepare ApexJmsProducer + jmsCarrierTechnologyParameters = new JmsCarrierTechnologyParameters(); + jmsCarrierTechnologyParameters.setObjectMessageSending(false); + producerParameters.setCarrierTechnologyParameters(jmsCarrierTechnologyParameters); + + final InitialContext context = Mockito.mock(InitialContext.class); + final ConnectionFactory connectionFactory = Mockito.mock(ConnectionFactory.class); + final Topic topic = Mockito.mock(Topic.class); + final Connection connection = Mockito.mock(Connection.class); + final Session session = Mockito.mock(Session.class); + final MessageProducer messageProducer = Mockito.mock(MessageProducer.class); + + Mockito.doReturn(context).when(apexJmsProducer).getInitialContext(); + Mockito.doReturn(connectionFactory).when(context).lookup(jmsCarrierTechnologyParameters.getConnectionFactory()); + Mockito.doReturn(topic).when(context).lookup(jmsCarrierTechnologyParameters.getProducerTopic()); + Mockito.doReturn(connection) + .when(connectionFactory) + .createConnection(jmsCarrierTechnologyParameters.getSecurityPrincipal(), + jmsCarrierTechnologyParameters.getSecurityCredentials()); + Mockito.doNothing().when(connection).start(); + Mockito.doReturn(session).when(connection).createSession(false, Session.AUTO_ACKNOWLEDGE); + Mockito.doReturn(messageProducer).when(session).createProducer(topic); + + apexJmsProducer.init(RandomStringUtils.random(5), producerParameters); + + // Prepare stop mocks + Mockito.doNothing().when(messageProducer).close(); + Mockito.doNothing().when(session).close(); + Mockito.doThrow(JMSException.class).when(connection).close(); + + // Prepare system.out + final ByteArrayOutputStream testBuffer = new ByteArrayOutputStream(); + System.setOut(new PrintStream(testBuffer)); + + // do the test + assertThatCode(apexJmsProducer::stop).doesNotThrowAnyException(); + assertThat(testBuffer.toString()).contains("close of connection"); + } + + @Test + public void testStop() throws NamingException, JMSException, ApexEventException { + // Prepare ApexJmsProducer + jmsCarrierTechnologyParameters = new JmsCarrierTechnologyParameters(); + jmsCarrierTechnologyParameters.setObjectMessageSending(false); + producerParameters.setCarrierTechnologyParameters(jmsCarrierTechnologyParameters); + + final InitialContext context = Mockito.mock(InitialContext.class); + final ConnectionFactory connectionFactory = Mockito.mock(ConnectionFactory.class); + final Topic topic = Mockito.mock(Topic.class); + final Connection connection = Mockito.mock(Connection.class); + final Session session = Mockito.mock(Session.class); + final MessageProducer messageProducer = Mockito.mock(MessageProducer.class); + + Mockito.doReturn(context).when(apexJmsProducer).getInitialContext(); + Mockito.doReturn(connectionFactory).when(context).lookup(jmsCarrierTechnologyParameters.getConnectionFactory()); + Mockito.doReturn(topic).when(context).lookup(jmsCarrierTechnologyParameters.getProducerTopic()); + Mockito.doReturn(connection) + .when(connectionFactory) + .createConnection(jmsCarrierTechnologyParameters.getSecurityPrincipal(), + jmsCarrierTechnologyParameters.getSecurityCredentials()); + Mockito.doNothing().when(connection).start(); + Mockito.doReturn(session).when(connection).createSession(false, Session.AUTO_ACKNOWLEDGE); + Mockito.doReturn(messageProducer).when(session).createProducer(topic); + + apexJmsProducer.init(RandomStringUtils.random(5), producerParameters); + + // Prepare stop mocks + Mockito.doNothing().when(messageProducer).close(); + Mockito.doNothing().when(session).close(); + Mockito.doNothing().when(connection).close(); + + // do the test assertThatCode(apexJmsProducer::stop).doesNotThrowAnyException(); } } diff --git a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-kafka/src/main/java/org/onap/policy/apex/plugins/event/carrier/kafka/KafkaCarrierTechnologyParameters.java b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-kafka/src/main/java/org/onap/policy/apex/plugins/event/carrier/kafka/KafkaCarrierTechnologyParameters.java index b37455d6e..eb1f15c93 100644 --- a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-kafka/src/main/java/org/onap/policy/apex/plugins/event/carrier/kafka/KafkaCarrierTechnologyParameters.java +++ b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-kafka/src/main/java/org/onap/policy/apex/plugins/event/carrier/kafka/KafkaCarrierTechnologyParameters.java @@ -2,6 +2,7 @@ * ============LICENSE_START======================================================= * Copyright (C) 2016-2018 Ericsson. All rights reserved. * Modifications Copyright (C) 2019 Nordix Foundation. + * Modifications Copyright (C) 2021 Bell Canada. 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. @@ -281,9 +282,10 @@ public class KafkaCarrierTechnologyParameters extends CarrierTechnologyParameter ENTRY + i + " invalid, key is null or blank"); } - if (StringUtils.isBlank(kafkaProperties[i][1])) { + // the value of a property has to be specified as empty in some cases, but should never be null. + if (null == kafkaProperties[i][1]) { result.setResult(KAFKA_PROPERTIES, ValidationStatus.INVALID, - ENTRY + i + " invalid, value is null or blank"); + ENTRY + i + " invalid, value is null"); } } } diff --git a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-kafka/src/test/java/org/onap/policy/apex/plugins/event/carrier/kafka/KafkaCarrierTechnologyParametersTest.java b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-kafka/src/test/java/org/onap/policy/apex/plugins/event/carrier/kafka/KafkaCarrierTechnologyParametersTest.java index 9287f52ae..14f13bc97 100644 --- a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-kafka/src/test/java/org/onap/policy/apex/plugins/event/carrier/kafka/KafkaCarrierTechnologyParametersTest.java +++ b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-kafka/src/test/java/org/onap/policy/apex/plugins/event/carrier/kafka/KafkaCarrierTechnologyParametersTest.java @@ -2,6 +2,7 @@ * ============LICENSE_START======================================================= * Copyright (C) 2019 Samsung. All rights reserved. * Modifications Copyright (C) 2019 Nordix Foundation. + * Modifications Copyright (C) 2021 Bell Canada. 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. @@ -275,6 +276,18 @@ public class KafkaCarrierTechnologyParametersTest { kafkaCarrierTechnologyParameters.setKafkaProperties(kafkaProperties2); assertFalse(kafkaCarrierTechnologyParameters.validate().isValid()); + + // @formatter:off + String[][] kafkaPropertiesWithEmptyValue = { + { + "Property1", "" + } + }; + // @formatter:on + + kafkaCarrierTechnologyParameters.setKafkaProperties(kafkaPropertiesWithEmptyValue); + assertTrue(kafkaCarrierTechnologyParameters.validate().isValid()); + kafkaCarrierTechnologyParameters.setKafkaProperties(origKafkaProperties); assertTrue(kafkaCarrierTechnologyParameters.validate().isValid()); diff --git a/plugins/plugins-event/plugins-event-protocol/plugins-event-protocol-jms/pom.xml b/plugins/plugins-event/plugins-event-protocol/plugins-event-protocol-jms/pom.xml index d9f800e12..6e562a812 100644 --- a/plugins/plugins-event/plugins-event-protocol/plugins-event-protocol-jms/pom.xml +++ b/plugins/plugins-event/plugins-event-protocol/plugins-event-protocol-jms/pom.xml @@ -1,6 +1,7 @@ <!-- ============LICENSE_START======================================================= Copyright (C) 2018 Ericsson. All rights reserved. + Modifications Copyright (C) 2021 Nordix Foundation. ================================================================================ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17,8 +18,17 @@ SPDX-License-Identifier: Apache-2.0 ============LICENSE_END========================================================= --> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + 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> + <dependencies> + <dependency> + <groupId>org.apache.activemq</groupId> + <artifactId>activemq-client</artifactId> + <version>5.16.1</version> + <scope>test</scope> + </dependency> + </dependencies> <parent> <groupId>org.onap.policy.apex-pdp.plugins.plugins-event.plugins-event-protocol</groupId> <artifactId>plugins-event-protocol</artifactId> @@ -27,5 +37,6 @@ <artifactId>plugins-event-protocol-jms</artifactId> <name>${project.artifactId}</name> - <description>[${project.parent.artifactId}] Plugins for handling events that are being transported as JMS messages</description> + <description>[${project.parent.artifactId}] Plugins for handling events that are being transported as JMS messages + </description> </project>
\ No newline at end of file diff --git a/plugins/plugins-event/plugins-event-protocol/plugins-event-protocol-jms/src/main/java/org/onap/policy/apex/plugins/event/protocol/jms/Apex2JmsObjectEventConverter.java b/plugins/plugins-event/plugins-event-protocol/plugins-event-protocol-jms/src/main/java/org/onap/policy/apex/plugins/event/protocol/jms/Apex2JmsObjectEventConverter.java index 89e2e8110..924765dc5 100644 --- a/plugins/plugins-event/plugins-event-protocol/plugins-event-protocol-jms/src/main/java/org/onap/policy/apex/plugins/event/protocol/jms/Apex2JmsObjectEventConverter.java +++ b/plugins/plugins-event/plugins-event-protocol/plugins-event-protocol-jms/src/main/java/org/onap/policy/apex/plugins/event/protocol/jms/Apex2JmsObjectEventConverter.java @@ -1,7 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2016-2018 Ericsson. All rights reserved. - * Modifications Copyright (C) 2019 Nordix Foundation. + * Modifications Copyright (C) 2019-2021 Nordix Foundation. * Modifications Copyright (C) 2021 Bell Canada. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -141,4 +141,13 @@ public final class Apex2JmsObjectEventConverter implements ApexEventProtocolConv // Return the single object from the Apex event message return apexEvent.values().iterator().next(); } + + /** + * Returns eventProtocolParameters field. Getter used only for testing + * + * @return eventProtocolParameters + */ + JmsObjectEventProtocolParameters getEventProtocolParameters() { + return eventProtocolParameters; + } } diff --git a/plugins/plugins-event/plugins-event-protocol/plugins-event-protocol-jms/src/main/test/org/onap/policy/apex/plugins/event/protocol/jms/Apex2JmsObjectEventConverterTest.java b/plugins/plugins-event/plugins-event-protocol/plugins-event-protocol-jms/src/main/test/org/onap/policy/apex/plugins/event/protocol/jms/Apex2JmsObjectEventConverterTest.java new file mode 100644 index 000000000..70c17c34e --- /dev/null +++ b/plugins/plugins-event/plugins-event-protocol/plugins-event-protocol-jms/src/main/test/org/onap/policy/apex/plugins/event/protocol/jms/Apex2JmsObjectEventConverterTest.java @@ -0,0 +1,195 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2021 Nordix Foundation. + * ================================================================================ + * 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.apex.plugins.event.protocol.jms; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertSame; + + +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; +import java.util.List; +import javax.jms.JMSException; +import javax.jms.ObjectMessage; +import org.apache.activemq.command.ActiveMQObjectMessage; +import org.apache.commons.lang3.RandomStringUtils; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.onap.policy.apex.service.engine.event.ApexEvent; +import org.onap.policy.apex.service.engine.event.ApexEventException; +import org.onap.policy.apex.service.engine.event.ApexEventRuntimeException; +import org.onap.policy.apex.service.engine.event.impl.apexprotocolplugin.ApexEventProtocolParameters; + +public class Apex2JmsObjectEventConverterTest { + private Apex2JmsObjectEventConverter converter; + private final PrintStream orgOutBuffer = System.out; + private ByteArrayOutputStream testOutStream; + + @Before + public void setUp() throws Exception { + converter = new Apex2JmsObjectEventConverter(); + testOutStream = new ByteArrayOutputStream(); + System.setOut(new PrintStream(testOutStream)); + } + + @After + public void tearDown() { + System.setOut(orgOutBuffer); + } + + @Test + public void initNull() { + assertThatThrownBy(() -> converter.init(null)) + .isInstanceOf(NullPointerException.class); + } + + @Test + public void initWrongClass() { + converter.init(new ApexEventProtocolParameters()); + final String actual = testOutStream.toString(); + assertThat(actual).contains("specified Event Protocol Parameters properties of typ"); + assertNull(converter.getEventProtocolParameters()); + } + + @Test + public void init() { + final JmsObjectEventProtocolParameters parameters = new JmsObjectEventProtocolParameters(); + converter.init(parameters); + final JmsObjectEventProtocolParameters actual = converter.getEventProtocolParameters(); + assertSame(parameters, actual); + } + + @Test + public void toApexEventNull() { + final JmsObjectEventProtocolParameters parameters = new JmsObjectEventProtocolParameters(); + converter.init(parameters); + final String eventName = RandomStringUtils.randomAlphabetic(4); + assertThatThrownBy(() -> converter.toApexEvent(eventName, null)) + .isInstanceOf(ApexEventRuntimeException.class); + } + + @Test + public void toApexEventObject() { + final JmsObjectEventProtocolParameters parameters = new JmsObjectEventProtocolParameters(); + converter.init(parameters); + final String eventName = RandomStringUtils.randomAlphabetic(4); + assertThatThrownBy(() -> converter.toApexEvent(eventName, new Object())) + .isInstanceOf(ApexEventRuntimeException.class); + } + + @Test + public void toApexEventNoParams() { + final String eventName = RandomStringUtils.randomAlphabetic(4); + ObjectMessage object = new ActiveMQObjectMessage(); + assertThatThrownBy(() -> converter.toApexEvent(eventName, object)) + .isInstanceOf(ApexEventRuntimeException.class); + } + + @Test + public void toApexEventIncomingObjectIsNull() { + final JmsObjectEventProtocolParameters parameters = new JmsObjectEventProtocolParameters(); + + converter.init(parameters); + final String eventName = RandomStringUtils.randomAlphabetic(4); + ObjectMessage object = new ActiveMQObjectMessage(); + assertThatThrownBy(() -> converter.toApexEvent(eventName, object)) + .isInstanceOf(NullPointerException.class); + } + + @Test + public void toApexEvent() throws ApexEventException, JMSException { + final JmsObjectEventProtocolParameters parameters = new JmsObjectEventProtocolParameters(); + + converter.init(parameters); + final String eventName = RandomStringUtils.randomAlphabetic(4); + final ObjectMessage object = new ActiveMQObjectMessage(); + final String value = RandomStringUtils.randomAlphabetic(3); + object.setObject(value); + + // Prepare expected object + final ApexEvent expectedEvent = new ApexEvent("String" + parameters.getIncomingEventSuffix(), + parameters.getIncomingEventVersion(), + "java.lang", + parameters.getIncomingEventSource(), + parameters.getIncomingEventTarget()); + // Overwrite executionId to match executionId of actual + expectedEvent.setExecutionId(1); + final Object[] expected = {expectedEvent}; + + // Run tested method + final List<ApexEvent> actual = converter.toApexEvent(eventName, object); + // Overwrite executionId to match executionId of expected + actual.get(0).setExecutionId(1); + assertArrayEquals(expected, actual.toArray()); + } + + @Test + public void fromApexEventNull() { + assertThatThrownBy(() -> converter.fromApexEvent(null)) + .isInstanceOf(ApexEventException.class); + } + + @Test + public void fromApexEventEmptyEvent() throws ApexEventException { + final ApexEvent apexEvent = new ApexEvent( + "a" + RandomStringUtils.randomAlphabetic(3), + "a" + RandomStringUtils.randomAlphabetic(3), + "a" + RandomStringUtils.randomAlphabetic(3), + "", + ""); + assertThatThrownBy(() -> converter.fromApexEvent(apexEvent)) + .isInstanceOf(ApexEventException.class); + } + + @Test + public void fromApexEventMultipleEvents() throws ApexEventException { + final ApexEvent apexEvent = new ApexEvent( + "a" + RandomStringUtils.randomAlphabetic(3), + "a" + RandomStringUtils.randomAlphabetic(4), + "a" + RandomStringUtils.randomAlphabetic(5), + "", + ""); + apexEvent.put(RandomStringUtils.randomAlphabetic(2), new Object()); + apexEvent.put(RandomStringUtils.randomAlphabetic(6), new Object()); + assertThatThrownBy(() -> converter.fromApexEvent(apexEvent)).isInstanceOf(ApexEventException.class); + } + + @Test + public void fromApexEventSingleEvent() throws ApexEventException { + final ApexEvent apexEvent = new ApexEvent( + "a" + RandomStringUtils.randomAlphabetic(3), + "a" + RandomStringUtils.randomAlphabetic(3), + "a" + RandomStringUtils.randomAlphabetic(3), + "", + ""); + + final Object expected = new Object(); + apexEvent.put(RandomStringUtils.randomAlphabetic(2), expected); + + final Object actual = converter.fromApexEvent(apexEvent); + + assertSame(expected, actual); + } +} diff --git a/plugins/plugins-event/plugins-event-protocol/plugins-event-protocol-jms/src/main/test/org/onap/policy/apex/plugins/event/protocol/jms/Apex2JmsTextEventConverterTest.java b/plugins/plugins-event/plugins-event-protocol/plugins-event-protocol-jms/src/main/test/org/onap/policy/apex/plugins/event/protocol/jms/Apex2JmsTextEventConverterTest.java new file mode 100644 index 000000000..9f68b49df --- /dev/null +++ b/plugins/plugins-event/plugins-event-protocol/plugins-event-protocol-jms/src/main/test/org/onap/policy/apex/plugins/event/protocol/jms/Apex2JmsTextEventConverterTest.java @@ -0,0 +1,149 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2021 Nordix Foundation. + * ================================================================================ + * 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.apex.plugins.event.protocol.jms; + +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; + + +import java.util.List; +import org.apache.commons.lang3.RandomStringUtils; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.onap.policy.apex.context.parameters.ContextParameterConstants; +import org.onap.policy.apex.context.parameters.SchemaParameters; +import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey; +import org.onap.policy.apex.model.basicmodel.service.ModelService; +import org.onap.policy.apex.model.contextmodel.concepts.AxContextSchema; +import org.onap.policy.apex.model.contextmodel.concepts.AxContextSchemas; +import org.onap.policy.apex.model.eventmodel.concepts.AxEvent; +import org.onap.policy.apex.model.eventmodel.concepts.AxEvents; +import org.onap.policy.apex.service.engine.event.ApexEvent; +import org.onap.policy.apex.service.engine.event.ApexEventException; +import org.onap.policy.apex.service.engine.event.ApexEventRuntimeException; +import org.onap.policy.apex.service.engine.event.impl.filecarrierplugin.consumer.TextBlock; +import org.onap.policy.apex.service.engine.event.impl.jsonprotocolplugin.JsonEventProtocolParameters; +import org.onap.policy.common.parameters.ParameterService; + +public class Apex2JmsTextEventConverterTest { + private Apex2JmsTextEventConverter converter; + + @Before + public void setUp() { + converter = new Apex2JmsTextEventConverter(); + ModelService.registerModel(AxContextSchemas.class, new AxContextSchemas()); + ModelService.registerModel(AxEvents.class, new AxEvents()); + ParameterService.register(new SchemaParameters()); + } + + @After + public void tearDown() { + ModelService.deregisterModel(AxContextSchema.class); + ModelService.deregisterModel(AxEvents.class); + ParameterService.deregister(ContextParameterConstants.SCHEMA_GROUP_NAME); + } + + @Test + public void toApexEventNull() { + final String eventName = RandomStringUtils.randomAlphabetic(4); + assertThatThrownBy(() -> converter.toApexEvent(eventName, null)) + .isInstanceOf(ApexEventRuntimeException.class); + } + + @Test + public void toApexEventObject() { + final String eventName = RandomStringUtils.randomAlphabetic(4); + assertThatThrownBy(() -> converter.toApexEvent(eventName, new Object())) + .isInstanceOf(ApexEventRuntimeException.class); + } + + @Test + public void toApexEventJsonString() throws ApexEventException { + final String eventName = RandomStringUtils.randomAlphabetic(4); + final String eventVersion = "0.0.1"; + final String source = RandomStringUtils.randomAlphabetic(5); + final String target = RandomStringUtils.randomAlphabetic(6); + final String nameSpace = "a.name.space"; + + // Prepare Json String to be translated into ApexEvent + final TextBlock object = + new TextBlock(false, "{\"name\": \"" + eventName + "\", \"version\":\"" + eventVersion + "\"}"); + + // Prepare Model service + final AxArtifactKey eventKey = new AxArtifactKey(eventName + ":" + eventVersion); + final AxEvent axEvent = new AxEvent(eventKey, nameSpace, source, target); + ModelService.getModel(AxEvents.class).getEventMap().put(eventKey, axEvent); + + // prepare converter + converter.init(new JsonEventProtocolParameters()); + + // execute test + final List<ApexEvent> apexEvents = converter.toApexEvent(eventName, object); + + final ApexEvent expectedEvent = new ApexEvent(eventName, eventVersion, nameSpace, source, target); + + // Reset executionId + expectedEvent.setExecutionId(0); + for (ApexEvent event : apexEvents) { + event.setExecutionId(0); + } + Object[] expected = {expectedEvent}; + + assertArrayEquals(expected, apexEvents.toArray()); + } + + @Test + public void fromApexNull() { + assertThatThrownBy(() -> converter.fromApexEvent(null)).isInstanceOf(ApexEventException.class); + } + + @Test + public void fromApex() throws ApexEventException { + final String name = RandomStringUtils.randomAlphabetic(4); + final String version = "0.2.3"; + final String nameSpace = "a.name.space"; + final String source = RandomStringUtils.randomAlphabetic(6); + final String target = RandomStringUtils.randomAlphabetic(7); + + final String expected = "{\n" + + " \"name\": \"" + name + "\",\n" + + " \"version\": \"" + version + "\",\n" + + " \"nameSpace\": \"" + nameSpace + "\",\n" + + " \"source\": \"" + source + "\",\n" + + " \"target\": \"" + target + "\"\n" + + "}"; + + // Prepare Model service + final AxArtifactKey eventKey = new AxArtifactKey(name + ":" + version); + final AxEvent axEvent = new AxEvent(eventKey, nameSpace, source, target); + ModelService.getModel(AxEvents.class).getEventMap().put(eventKey, axEvent); + + converter.init(new JsonEventProtocolParameters()); + + final ApexEvent apexEvent = new ApexEvent(name, version, nameSpace, source, target); + final Object actual = converter.fromApexEvent(apexEvent); + + assertEquals(expected, actual); + } + +} diff --git a/plugins/plugins-event/plugins-event-protocol/plugins-event-protocol-jms/src/main/test/org/onap/policy/apex/plugins/event/protocol/jms/JmsObjectEventProtocolParametersTest.java b/plugins/plugins-event/plugins-event-protocol/plugins-event-protocol-jms/src/main/test/org/onap/policy/apex/plugins/event/protocol/jms/JmsObjectEventProtocolParametersTest.java new file mode 100644 index 000000000..8baa9d5b1 --- /dev/null +++ b/plugins/plugins-event/plugins-event-protocol/plugins-event-protocol-jms/src/main/test/org/onap/policy/apex/plugins/event/protocol/jms/JmsObjectEventProtocolParametersTest.java @@ -0,0 +1,53 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2021 Nordix Foundation. + * ================================================================================ + * 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.apex.plugins.event.protocol.jms; + +import static org.junit.Assert.assertEquals; + + +import org.junit.Test; + +public class JmsObjectEventProtocolParametersTest { + + @Test + public void getIncomingEventVersion() { + final JmsObjectEventProtocolParameters jmsObjectEventProtocolParameters = + new JmsObjectEventProtocolParameters(); + final String actual = jmsObjectEventProtocolParameters.getIncomingEventVersion(); + assertEquals("1.0.0", actual); + } + + @Test + public void getIncomingEventSource() { + final JmsObjectEventProtocolParameters jmsObjectEventProtocolParameters = + new JmsObjectEventProtocolParameters(); + final String actual = jmsObjectEventProtocolParameters.getIncomingEventSource(); + assertEquals("JMS", actual); + } + + @Test + public void getIncomingEventTarget() { + final JmsObjectEventProtocolParameters jmsObjectEventProtocolParameters = + new JmsObjectEventProtocolParameters(); + final String actual = jmsObjectEventProtocolParameters.getIncomingEventTarget(); + assertEquals("Apex", actual); + } +} diff --git a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexCommandLineArguments.java b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexCommandLineArguments.java index 31131b465..0d7560f89 100644 --- a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexCommandLineArguments.java +++ b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexCommandLineArguments.java @@ -1,7 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2016-2018 Ericsson. All rights reserved. - * Modification Copyright (C) 2020 Nordix Foundation. + * Modification Copyright (C) 2020-2021 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,21 +22,19 @@ package org.onap.policy.apex.service.engine.main; import java.io.File; -import java.io.PrintWriter; -import java.io.StringWriter; -import java.net.URL; import java.util.Arrays; import lombok.Getter; import lombok.Setter; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.DefaultParser; -import org.apache.commons.cli.HelpFormatter; import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; import org.apache.commons.cli.ParseException; import org.onap.policy.apex.model.basicmodel.concepts.ApexException; import org.onap.policy.apex.model.basicmodel.concepts.ApexRuntimeException; -import org.onap.policy.common.utils.resources.ResourceUtils; +import org.onap.policy.common.utils.cmd.CommandLineArgumentsHandler; +import org.onap.policy.common.utils.cmd.CommandLineException; +import org.onap.policy.common.utils.resources.MessageConstants; import org.onap.policy.common.utils.validation.ParameterValidationUtils; /** @@ -45,30 +43,34 @@ import org.onap.policy.common.utils.validation.ParameterValidationUtils; * * @author Liam Fallon (liam.fallon@ericsson.com) */ -public class ApexCommandLineArguments { +public class ApexCommandLineArguments extends CommandLineArgumentsHandler { // A system property holding the root directory for relative paths in the // configuration file public static final String APEX_RELATIVE_FILE_ROOT = "APEX_RELATIVE_FILE_ROOT"; - - // Recurring string constants - private static final String FILE_PREAMBLE = " file \""; private static final String RELATIVE_FILE_ROOT = "relative file root \""; - private static final int HELP_LINE_LENGTH = 120; - - // Apache Commons CLI options - private final Options options; @Getter @Setter private String toscaPolicyFilePath = null; + + @Getter private String relativeFileRoot = null; + private CommandLine cmd = null; + /** * Construct the options for the CLI editor. */ public ApexCommandLineArguments() { + super(ApexMain.class.getName(), MessageConstants.POLICY_APEX_PDP, apexCustomOptions()); + } + + /** + * Builds Apex custom options. + */ + private static Options apexCustomOptions() { //@formatter:off - options = new Options(); + Options options = new Options(); options.addOption(Option.builder("h") .longOpt("help") .desc("outputs the usage of this command") @@ -76,25 +78,26 @@ public class ApexCommandLineArguments { .type(Boolean.class) .build()); options.addOption(Option.builder("v") - .longOpt("version") - .desc("outputs the version of Apex") - .required(false) - .type(Boolean.class) - .build()); + .longOpt("version") + .desc("outputs the version of Apex") + .required(false) + .type(Boolean.class) + .build()); options.addOption(Option.builder("rfr") - .longOpt("relative-file-root") - .desc("the root file path for relative file paths specified in the Apex configuration file, " - + "defaults to the current directory from where Apex is executed") - .hasArg() - .argName(APEX_RELATIVE_FILE_ROOT) - .required(false) - .type(String.class) - .build()); + .longOpt("relative-file-root") + .desc("the root file path for relative file paths specified in the Apex configuration file, " + + "defaults to the current directory from where Apex is executed") + .hasArg() + .argName(APEX_RELATIVE_FILE_ROOT) + .required(false) + .type(String.class) + .build()); options.addOption(Option.builder("p").longOpt("tosca-policy-file") .desc("the full path to the ToscaPolicy file to use.").hasArg().argName("TOSCA_POLICY_FILE") .required(false) .type(String.class).build()); //@formatter:on + return options; } /** @@ -109,106 +112,72 @@ public class ApexCommandLineArguments { // Parse the arguments try { parse(args); - } catch (final ApexException e) { + } catch (final CommandLineException e) { throw new ApexRuntimeException("parse error on Apex parameters", e); } } - /** - * Parse the command line options. - * - * @param args The command line arguments - * @return a string with a message for help and version, or null if there is no - * message - * @throws ApexException on command argument errors - */ - public String parse(final String[] args) throws ApexException { + @Override + public String parse(final String[] args) throws CommandLineException { // Clear all our arguments setToscaPolicyFilePath(null); - CommandLine commandLine = null; + setRelativeFileRoot(null); + try { - commandLine = new DefaultParser().parse(options, args); + cmd = new DefaultParser().parse(apexCustomOptions(), args); } catch (final ParseException e) { - throw new ApexException("invalid command line arguments specified : " + e.getMessage()); + throw new CommandLineException("invalid command line arguments specified", e); } // Arguments left over after Commons CLI does its stuff - final String[] remainingArgs = commandLine.getArgs(); + final String[] remainingArgs = cmd.getArgs(); - if (remainingArgs.length > 0 && commandLine.hasOption('p') || remainingArgs.length > 1) { - throw new ApexException("too many command line arguments specified : " + Arrays.toString(args)); + if (remainingArgs.length > 0 && cmd.hasOption('p') || remainingArgs.length > 1) { + throw new CommandLineException("too many command line arguments specified: " + Arrays.toString(args)); } if (remainingArgs.length == 1) { toscaPolicyFilePath = remainingArgs[0]; } - if (commandLine.hasOption('h')) { - return help(ApexMain.class.getName()); + if (cmd.hasOption('h')) { + return help(); } - if (commandLine.hasOption('v')) { + if (cmd.hasOption('v')) { return version(); } - if (commandLine.hasOption("rfr")) { - setRelativeFileRoot(commandLine.getOptionValue("rfr")); - } else { - setRelativeFileRoot(null); + if (cmd.hasOption("rfr")) { + setRelativeFileRoot(cmd.getOptionValue("rfr")); } - if (commandLine.hasOption('p')) { - toscaPolicyFilePath = commandLine.getOptionValue('p'); + if (cmd.hasOption('p')) { + setToscaPolicyFilePath(cmd.getOptionValue('p')); } return null; } + @Override + public CommandLine getCommandLine() { + return this.cmd; + } + /** * Validate the command line options. * * @throws ApexException on command argument validation errors */ - public void validate() throws ApexException { - validateReadableFile("Tosca Policy", toscaPolicyFilePath); + public void validateInputFiles() throws ApexException { + try { + validateReadableFile("Tosca Policy", toscaPolicyFilePath); + } catch (CommandLineException e) { + throw new ApexException(e.getMessage()); + } validateRelativeFileRoot(); } /** - * Print version information for Apex. - * - * @return the version string - */ - public String version() { - return ResourceUtils.getResourceAsString("version.txt"); - } - - /** - * Print help information for Apex. - * - * @param mainClassName the main class name - * @return the help string - */ - public String help(final String mainClassName) { - final StringWriter stringWriter = new StringWriter(); - final PrintWriter stringPrintWriter = new PrintWriter(stringWriter); - - new HelpFormatter().printHelp(stringPrintWriter, HELP_LINE_LENGTH, mainClassName + " [options...]", "options", - options, 0, 0, ""); - - return stringWriter.toString(); - } - - /** - * Gets the root file path for relative file paths in the configuration file. - * - * @return the root file path - */ - public String getRelativeFileRoot() { - return relativeFileRoot; - } - - - /** * Sets the root file path for relative file paths in the configuration file. * * @param relativeFileRoot the configuration file path @@ -231,37 +200,6 @@ public class ApexCommandLineArguments { } /** - * Validate readable file. - * - * @param fileTag the file tag - * @param fileName the file name - * @throws ApexException the apex exception - */ - private void validateReadableFile(final String fileTag, final String fileName) throws ApexException { - if (fileName == null || fileName.length() == 0) { - throw new ApexException(fileTag + " file was not specified as an argument"); - } - - // The file name can refer to a resource on the local file system or on the - // class path - final URL fileUrl = ResourceUtils.getUrl4Resource(fileName); - if (fileUrl == null) { - throw new ApexException(fileTag + FILE_PREAMBLE + fileName + "\" does not exist"); - } - - final File theFile = new File(fileUrl.getPath()); - if (!theFile.exists()) { - throw new ApexException(fileTag + FILE_PREAMBLE + fileName + "\" does not exist"); - } - if (!theFile.isFile()) { - throw new ApexException(fileTag + FILE_PREAMBLE + fileName + "\" is not a normal file"); - } - if (!theFile.canRead()) { - throw new ApexException(fileTag + FILE_PREAMBLE + fileName + "\" is ureadable"); - } - } - - /** * Validate the relative file root. */ private void validateRelativeFileRoot() throws ApexException { diff --git a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexMain.java b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexMain.java index 3e9072dd4..9757c57e8 100644 --- a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexMain.java +++ b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexMain.java @@ -1,7 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2016-2018 Ericsson. All rights reserved. - * Modification Copyright (C) 2019-2021 Nordix Foundation. + * Modifications Copyright (C) 2019-2021 Nordix Foundation. * Modifications Copyright (C) 2020-2021 Bell Canada. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -38,6 +38,7 @@ import org.onap.policy.apex.service.parameters.ApexParameters; import org.onap.policy.apex.service.parameters.engineservice.EngineServiceParameters; import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters; import org.onap.policy.common.parameters.ParameterService; +import org.onap.policy.common.utils.cmd.CommandLineException; import org.slf4j.ext.XLogger; import org.slf4j.ext.XLoggerFactory; @@ -110,8 +111,8 @@ public class ApexMain { } // Validate that the arguments are sane - arguments.validate(); - } catch (final ApexException e) { + arguments.validateInputFiles(); + } catch (final ApexException | CommandLineException e) { LOGGER.error("Arguments validation failed.", e); throw new ApexException("Arguments validation failed.", e); } diff --git a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/PeeredReferenceTest.java b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/PeeredReferenceTest.java new file mode 100644 index 000000000..cadb5c8a1 --- /dev/null +++ b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/PeeredReferenceTest.java @@ -0,0 +1,57 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2021 Nordix Foundation + * ================================================================================ + * 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.apex.service.engine.event; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import org.junit.Test; +import org.onap.policy.apex.service.engine.event.impl.filecarrierplugin.consumer.ApexFileEventConsumer; +import org.onap.policy.apex.service.engine.event.impl.filecarrierplugin.producer.ApexFileEventProducer; +import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerPeeredMode; + +public class PeeredReferenceTest { + + @Test + public void getPeeredConsumer() { + final ApexFileEventConsumer eventConsumer = new ApexFileEventConsumer(); + final ApexFileEventProducer eventProducer = new ApexFileEventProducer(); + final EventHandlerPeeredMode peeredMode = EventHandlerPeeredMode.REQUESTOR; + final PeeredReference peeredReference = + new PeeredReference(peeredMode, eventConsumer, eventProducer); + + final ApexEventConsumer actual = peeredReference.getPeeredConsumer(); + assertNotNull(actual); + assertEquals(peeredReference, actual.getPeeredReference(peeredMode)); + } + + @Test + public void getPeeredProducer() { + final ApexEventConsumer eventConsumer = new ApexFileEventConsumer(); + final ApexEventProducer eventProducer = new ApexFileEventProducer(); + final EventHandlerPeeredMode peeredMode = EventHandlerPeeredMode.SYNCHRONOUS; + final PeeredReference reference = + new PeeredReference(peeredMode, eventConsumer, eventProducer); + + final ApexEventProducer actual = reference.getPeeredProducer(); + assertNotNull(actual); + assertEquals(reference, actual.getPeeredReference(peeredMode)); + } +}
\ No newline at end of file diff --git a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/impl/EventConsumerFactoryTest.java b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/impl/EventConsumerFactoryTest.java new file mode 100644 index 000000000..976376e5a --- /dev/null +++ b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/impl/EventConsumerFactoryTest.java @@ -0,0 +1,83 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2021 Nordix Foundation + * ================================================================================ + * 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.apex.service.engine.event.impl; + +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.junit.Assert.assertNotNull; + +import org.apache.commons.lang3.RandomStringUtils; +import org.junit.Before; +import org.junit.Test; +import org.onap.policy.apex.service.engine.event.ApexEventConsumer; +import org.onap.policy.apex.service.engine.event.ApexEventException; +import org.onap.policy.apex.service.engine.parameters.dummyclasses.SuperDooperCarrierTechnologyParameters; +import org.onap.policy.apex.service.parameters.carriertechnology.RestPluginCarrierTechnologyParameters; +import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters; + +public class EventConsumerFactoryTest { + private EventConsumerFactory factory; + + @Before + public void setUp() throws Exception { + factory = new EventConsumerFactory(); + } + + @Test + public void createConsumerNoTechnologyParameter() { + final String name = RandomStringUtils.randomAlphabetic(6); + final EventHandlerParameters parameters = new EventHandlerParameters(); + + assertThatThrownBy(() -> factory.createConsumer(name, parameters)) + .isInstanceOf(NullPointerException.class); + } + + @Test + public void createConsumerNoConsumerPlugin() { + final String name = RandomStringUtils.randomAlphabetic(6); + final EventHandlerParameters parameters = new EventHandlerParameters(); + parameters.setCarrierTechnologyParameters(new RestPluginCarrierTechnologyParameters()); + + assertThatThrownBy(() -> factory.createConsumer(name, parameters)) + .isInstanceOf(ApexEventException.class); + } + + @Test + public void createConsumerWrongPluginClassName() { + final String name = RandomStringUtils.randomAlphabetic(6); + final EventHandlerParameters parameters = new EventHandlerParameters(); + final RestPluginCarrierTechnologyParameters technologyParameters = + new RestPluginCarrierTechnologyParameters(); + technologyParameters.setEventConsumerPluginClass("java.lang.Object"); + parameters.setCarrierTechnologyParameters(technologyParameters); + + assertThatThrownBy(() -> factory.createConsumer(name, parameters)) + .isInstanceOf(ApexEventException.class); + } + + @Test + public void createConsumer() throws ApexEventException { + final String name = RandomStringUtils.randomAlphabetic(6); + final EventHandlerParameters parameters = new EventHandlerParameters(); + parameters.setCarrierTechnologyParameters(new SuperDooperCarrierTechnologyParameters()); + + final ApexEventConsumer actual = factory.createConsumer(name, parameters); + assertNotNull(actual); + } +}
\ No newline at end of file diff --git a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/impl/EventProducerFactoryTest.java b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/impl/EventProducerFactoryTest.java new file mode 100644 index 000000000..7e3cb5478 --- /dev/null +++ b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/impl/EventProducerFactoryTest.java @@ -0,0 +1,83 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2021 Nordix Foundation + * ================================================================================ + * 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.apex.service.engine.event.impl; + +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.junit.Assert.assertNotNull; + +import org.apache.commons.lang3.RandomStringUtils; +import org.junit.Before; +import org.junit.Test; +import org.onap.policy.apex.service.engine.event.ApexEventException; +import org.onap.policy.apex.service.engine.event.ApexEventProducer; +import org.onap.policy.apex.service.engine.parameters.dummyclasses.SuperDooperCarrierTechnologyParameters; +import org.onap.policy.apex.service.parameters.carriertechnology.RestPluginCarrierTechnologyParameters; +import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters; + +public class EventProducerFactoryTest { + private EventProducerFactory factory; + + @Before + public void setUp() throws Exception { + factory = new EventProducerFactory(); + } + + @Test + public void createConsumerNoTechnologyParameter() { + final EventHandlerParameters parameters = new EventHandlerParameters(); + final String name = RandomStringUtils.randomAlphabetic(4); + + assertThatThrownBy(() -> factory.createProducer(name, parameters)) + .isInstanceOf(NullPointerException.class); + } + + @Test + public void createConsumerNoConsumerPlugin() { + final EventHandlerParameters parameters = new EventHandlerParameters(); + final String name = RandomStringUtils.randomAlphabetic(4); + parameters.setCarrierTechnologyParameters(new RestPluginCarrierTechnologyParameters()); + + assertThatThrownBy(() -> factory.createProducer(name, parameters)) + .isInstanceOf(ApexEventException.class); + } + + @Test + public void createConsumerWrongProducerPluginName() { + final EventHandlerParameters parameters = new EventHandlerParameters(); + final RestPluginCarrierTechnologyParameters technologyParameters = + new RestPluginCarrierTechnologyParameters(); + final String name = RandomStringUtils.randomAlphabetic(4); + technologyParameters.setEventProducerPluginClass("java.lang.Object"); + parameters.setCarrierTechnologyParameters(technologyParameters); + + assertThatThrownBy(() -> factory.createProducer(name, parameters)) + .isInstanceOf(ApexEventException.class); + } + + @Test + public void createConsumer() throws ApexEventException { + final EventHandlerParameters parameters = new EventHandlerParameters(); + parameters.setCarrierTechnologyParameters(new SuperDooperCarrierTechnologyParameters()); + final String name = RandomStringUtils.randomAlphabetic(4); + + final ApexEventProducer actual = factory.createProducer(name, parameters); + assertNotNull(actual); + } +}
\ No newline at end of file diff --git a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/impl/EventProtocolFactoryTest.java b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/impl/EventProtocolFactoryTest.java new file mode 100644 index 000000000..8ed3a9fec --- /dev/null +++ b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/impl/EventProtocolFactoryTest.java @@ -0,0 +1,70 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2021 Nordix Foundation + * ================================================================================ + * 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.apex.service.engine.event.impl; + +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.junit.Assert.assertNotNull; + +import org.apache.commons.lang3.RandomStringUtils; +import org.junit.Before; +import org.junit.Test; +import org.onap.policy.apex.service.engine.event.ApexEventProtocolConverter; +import org.onap.policy.apex.service.engine.event.ApexEventRuntimeException; +import org.onap.policy.apex.service.engine.event.impl.apexprotocolplugin.ApexEventProtocolParameters; +import org.onap.policy.apex.service.engine.event.impl.jsonprotocolplugin.JsonEventProtocolParameters; +import org.onap.policy.apex.service.parameters.eventprotocol.EventProtocolParameters; + +public class EventProtocolFactoryTest { + private EventProtocolFactory factory; + + @Before + public void setUp() throws Exception { + factory = new EventProtocolFactory(); + } + + @Test + public void createConsumerNoConsumerPlugin() { + final EventProtocolParameters parameters = new ApexEventProtocolParameters(); + parameters.setEventProtocolPluginClass(""); + final String name = RandomStringUtils.randomAlphabetic(9); + + assertThatThrownBy(() -> factory.createConverter(name, parameters)) + .isInstanceOf(ApexEventRuntimeException.class); + } + + @Test + public void createConsumer2() { + final EventProtocolParameters parameters = new ApexEventProtocolParameters(); + final String name = RandomStringUtils.randomAlphabetic(9); + parameters.setEventProtocolPluginClass("java.lang.Object"); + + assertThatThrownBy(() -> factory.createConverter(name, parameters)) + .isInstanceOf(ApexEventRuntimeException.class); + } + + @Test + public void createConsumer() { + final EventProtocolParameters parameters = new JsonEventProtocolParameters(); + final String name = RandomStringUtils.randomAlphabetic(9); + + final ApexEventProtocolConverter actual = factory.createConverter(name, parameters); + assertNotNull(actual); + } +}
\ No newline at end of file diff --git a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/impl/apexprotocolplugin/Apex2ApexEventConverterTest.java b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/impl/apexprotocolplugin/Apex2ApexEventConverterTest.java new file mode 100644 index 000000000..04e87ee42 --- /dev/null +++ b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/impl/apexprotocolplugin/Apex2ApexEventConverterTest.java @@ -0,0 +1,180 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2021 Nordix Foundation + * ================================================================================ + * 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.apex.service.engine.event.impl.apexprotocolplugin; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatNoException; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertSame; + +import java.util.List; +import org.apache.commons.lang3.RandomStringUtils; +import org.junit.Before; +import org.junit.Test; +import org.onap.policy.apex.service.engine.event.ApexEvent; +import org.onap.policy.apex.service.engine.event.ApexEventException; +import org.onap.policy.apex.service.engine.event.ApexEventList; +import org.onap.policy.apex.service.engine.event.ApexEventRuntimeException; + +public class Apex2ApexEventConverterTest { + private Apex2ApexEventConverter converter; + + @Before + public void setUp() throws Exception { + converter = new Apex2ApexEventConverter(); + } + + @Test + public void initWithNull() { + assertThatThrownBy(() -> converter.init(null)) + .isInstanceOf(ApexEventRuntimeException.class); + } + + @Test + public void init() { + assertThatNoException() + .isThrownBy(() -> converter.init(new ApexEventProtocolParameters())); + } + + @Test + public void toApexEventWithNull() { + final String eventName = RandomStringUtils.randomAlphanumeric(5); + assertThatThrownBy(() -> converter.toApexEvent(eventName, null)) + .isInstanceOf(ApexEventException.class); + } + + @Test + public void toApexEventWithNonApexEvent() { + final String eventName = RandomStringUtils.randomAlphanumeric(5); + assertThatThrownBy(() -> converter.toApexEvent(eventName, new Object())) + .isInstanceOf(ApexEventException.class); + } + + @Test + public void toApexEmptyEvent() throws ApexEventException { + final String eventName = RandomStringUtils.randomAlphanumeric(4); + final String name = RandomStringUtils.randomAlphanumeric(5); + final String version = RandomStringUtils.randomAlphanumeric(6); + final String nameSpace = "a" + RandomStringUtils.randomAlphanumeric(7); + final String source = RandomStringUtils.randomAlphanumeric(8); + final String target = RandomStringUtils.randomAlphanumeric(9); + + final ApexEvent event = new ApexEvent(name, version, nameSpace, source, target); + final List<ApexEvent> result = converter.toApexEvent(eventName, event); + assertThat(result).isEmpty(); + } + + @Test + public void toApexEventWithApexAndOtherFields() throws ApexEventException { + final String eventName = RandomStringUtils.randomAlphanumeric(4); + final String name1 = RandomStringUtils.randomAlphanumeric(5); + final String version1 = RandomStringUtils.randomAlphanumeric(6); + final String nameSpace1 = "a" + RandomStringUtils.randomAlphanumeric(7); + final String source1 = RandomStringUtils.randomAlphanumeric(8); + final String target1 = RandomStringUtils.randomAlphanumeric(9); + + final ApexEvent event = new ApexEvent(name1, version1, nameSpace1, source1, target1); + + final String key = RandomStringUtils.randomAlphabetic(3); + event.put(key, new Object()); + final List<ApexEvent> result = converter.toApexEvent(eventName, event); + Object[] expected = {event}; + assertArrayEquals(expected, result.toArray()); + } + + @Test + public void toApexEventWithApexAndList() throws ApexEventException { + final String eventName = RandomStringUtils.randomAlphanumeric(4); + final String name1 = RandomStringUtils.randomAlphanumeric(5); + final String version1 = RandomStringUtils.randomAlphanumeric(6); + final String nameSpace1 = "a" + RandomStringUtils.randomAlphanumeric(7); + final String source1 = RandomStringUtils.randomAlphanumeric(8); + final String target1 = RandomStringUtils.randomAlphanumeric(9); + + final ApexEvent event = new ApexEvent(name1, version1, nameSpace1, source1, target1); + + final ApexEventList eventList = new ApexEventList(); + eventList.add(event); + + final String name2 = RandomStringUtils.randomAlphanumeric(15); + final String version2 = RandomStringUtils.randomAlphanumeric(16); + final String nameSpace2 = "b" + RandomStringUtils.randomAlphanumeric(17); + final String source2 = RandomStringUtils.randomAlphanumeric(18); + final String target2 = RandomStringUtils.randomAlphanumeric(19); + + final ApexEvent parentEvent = new ApexEvent(name2, version2, nameSpace2, source2, target2); + final String key = RandomStringUtils.randomAlphabetic(3); + parentEvent.put(key, eventList); + final List<ApexEvent> result = converter.toApexEvent(eventName, parentEvent); + Object[] expected = {event}; + assertArrayEquals(expected, result.toArray()); + } + + @Test + public void toApexEventWithApexAndListAndOtherFields() throws ApexEventException { + final String eventName = RandomStringUtils.randomAlphanumeric(4); + final String name1 = RandomStringUtils.randomAlphanumeric(5); + final String version1 = RandomStringUtils.randomAlphanumeric(6); + final String nameSpace1 = "a" + RandomStringUtils.randomAlphanumeric(7); + final String source1 = RandomStringUtils.randomAlphanumeric(8); + final String target1 = RandomStringUtils.randomAlphanumeric(9); + + final ApexEvent event = new ApexEvent(name1, version1, nameSpace1, source1, target1); + + final ApexEventList eventList = new ApexEventList(); + eventList.add(event); + + final String name2 = RandomStringUtils.randomAlphanumeric(15); + final String version2 = RandomStringUtils.randomAlphanumeric(16); + final String nameSpace2 = "b" + RandomStringUtils.randomAlphanumeric(17); + final String source2 = RandomStringUtils.randomAlphanumeric(18); + final String target2 = RandomStringUtils.randomAlphanumeric(19); + + final ApexEvent parentEvent = new ApexEvent(name2, version2, nameSpace2, source2, target2); + final String key1 = RandomStringUtils.randomAlphabetic(3); + final String key2 = RandomStringUtils.randomAlphabetic(2); + parentEvent.put(key1, eventList); + parentEvent.put(key2, new Object()); + assertThatThrownBy(() -> converter.toApexEvent(eventName, parentEvent)) + .isInstanceOf(ApexEventException.class); + } + + @Test + public void fromApexEventNull() { + assertThatThrownBy(() -> converter.fromApexEvent(null)) + .isInstanceOf(ApexEventException.class); + } + + @Test + public void fromApexEvent() throws ApexEventException { + final String name1 = RandomStringUtils.randomAlphanumeric(5); + final String version1 = RandomStringUtils.randomAlphanumeric(6); + final String nameSpace1 = "a" + RandomStringUtils.randomAlphanumeric(7); + final String source1 = RandomStringUtils.randomAlphanumeric(8); + final String target1 = RandomStringUtils.randomAlphanumeric(9); + + final ApexEvent event = new ApexEvent(name1, version1, nameSpace1, source1, target1); + + final Object actual = converter.fromApexEvent(event); + assertSame(event, actual); + } + +} diff --git a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/impl/apexprotocolplugin/ApexEventProtocolParametersTest.java b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/impl/apexprotocolplugin/ApexEventProtocolParametersTest.java new file mode 100644 index 000000000..8b39b0a74 --- /dev/null +++ b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/impl/apexprotocolplugin/ApexEventProtocolParametersTest.java @@ -0,0 +1,50 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2021 Nordix Foundation + * ================================================================================ + * 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.apex.service.engine.event.impl.apexprotocolplugin; + +import static org.junit.Assert.assertEquals; + +import org.apache.commons.lang3.RandomStringUtils; +import org.junit.Test; + +public class ApexEventProtocolParametersTest { + + @Test + public void testNoArgConstructor() { + final ApexEventProtocolParameters apexEventProtocolParameters = new ApexEventProtocolParameters(); + final String actual = apexEventProtocolParameters.getLabel(); + final String pluginClass = apexEventProtocolParameters.getEventProtocolPluginClass(); + + assertEquals(ApexEventProtocolParameters.APEX_EVENT_PROTOCOL_LABEL, actual); + assertEquals(Apex2ApexEventConverter.class.getName(), pluginClass); + } + + @Test + public void testConstructor() { + final String expected = RandomStringUtils.randomAlphabetic(6); + final ApexEventProtocolParameters apexEventProtocolParameters = new ApexEventProtocolParameters(expected); + final String actual = apexEventProtocolParameters.getLabel(); + final String pluginClass = apexEventProtocolParameters.getEventProtocolPluginClass(); + + assertEquals(expected, actual); + assertEquals(Apex2ApexEventConverter.class.getName(), pluginClass); + } + +}
\ No newline at end of file diff --git a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/impl/enevent/ApexEvent2EnEventConverterTest.java b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/impl/enevent/ApexEvent2EnEventConverterTest.java new file mode 100644 index 000000000..562760f69 --- /dev/null +++ b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/impl/enevent/ApexEvent2EnEventConverterTest.java @@ -0,0 +1,100 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2021 Nordix Foundation + * ================================================================================ + * 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.apex.service.engine.event.impl.enevent; + +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.junit.Assert.assertArrayEquals; + +import java.util.List; +import java.util.Random; +import org.apache.commons.lang3.RandomStringUtils; +import org.junit.Before; +import org.junit.Test; +import org.onap.policy.apex.core.engine.event.EnEvent; +import org.onap.policy.apex.model.basicmodel.concepts.ApexException; +import org.onap.policy.apex.model.eventmodel.concepts.AxEvent; +import org.onap.policy.apex.service.engine.event.ApexEvent; +import org.onap.policy.apex.service.engine.event.ApexEventException; +import org.onap.policy.apex.service.engine.event.ApexEventRuntimeException; + +public class ApexEvent2EnEventConverterTest { + private ApexEvent2EnEventConverter converter; + private final Random random = new Random(); + + @Before + public void setUp() throws Exception { + converter = new ApexEvent2EnEventConverter(null); + } + + @Test + public void toApexEventNull() { + final String eventName = RandomStringUtils.randomAlphabetic(3); + assertThatThrownBy(() -> converter.toApexEvent(eventName, null)) + .isInstanceOf(ApexEventException.class); + } + + @Test + public void toApexEventWrongClass() throws ApexException { + final String eventName = RandomStringUtils.randomAlphabetic(3); + final String name = RandomStringUtils.randomAlphanumeric(5); + final String version = RandomStringUtils.randomAlphanumeric(6); + final String nameSpace = "a" + RandomStringUtils.randomAlphanumeric(7); + final String source = RandomStringUtils.randomAlphanumeric(8); + final String target = RandomStringUtils.randomAlphanumeric(9); + + final ApexEvent event = new ApexEvent(name, version, nameSpace, source, target); + + assertThatThrownBy(() -> converter.toApexEvent(eventName, event)) + .isInstanceOf(ApexEventRuntimeException.class); + } + + @Test + public void toApex() throws ApexException { + // prepare String values for events + final String name = RandomStringUtils.randomAlphabetic(5); + final String version = RandomStringUtils.randomAlphabetic(6); + final String nameSpace = "b" + RandomStringUtils.randomAlphabetic(7); + final String source = RandomStringUtils.randomAlphabetic(8); + final String target = RandomStringUtils.randomAlphabetic(9); + final int executionId = random.nextInt(1000); + final String exceptionMessage = RandomStringUtils.randomAlphabetic(11); + + // prepare events + final AxEvent axEvent = new AxEvent(); + axEvent.getKey().setName(name); + axEvent.getKey().setVersion(version); + axEvent.setNameSpace(nameSpace); + axEvent.setSource(source); + axEvent.setTarget(target); + final EnEvent enEvent = new EnEvent(axEvent); + enEvent.setExecutionId(executionId); + enEvent.setExceptionMessage(exceptionMessage); + + // prepare expected event + final ApexEvent apexEvent = new ApexEvent(name, version, nameSpace, source, target); + apexEvent.setExecutionId(executionId); + apexEvent.setExceptionMessage(exceptionMessage); + final Object[] expected = {apexEvent}; + + // Test + final List<ApexEvent> actual = converter.toApexEvent(RandomStringUtils.randomAlphabetic(3), enEvent); + assertArrayEquals(expected, actual.toArray()); + } +}
\ No newline at end of file diff --git a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/impl/eventrequestor/EventRequestorCarrierTechnologyParametersTest.java b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/impl/eventrequestor/EventRequestorCarrierTechnologyParametersTest.java new file mode 100644 index 000000000..c0da81625 --- /dev/null +++ b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/impl/eventrequestor/EventRequestorCarrierTechnologyParametersTest.java @@ -0,0 +1,43 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2021 Nordix Foundation + * ================================================================================ + * 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.apex.service.engine.event.impl.eventrequestor; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import org.junit.Test; +import org.onap.policy.common.parameters.GroupValidationResult; + +public class EventRequestorCarrierTechnologyParametersTest { + + @Test + public void getName() { + final EventRequestorCarrierTechnologyParameters parameters = new EventRequestorCarrierTechnologyParameters(); + final String actual = parameters.getName(); + assertEquals(EventRequestorCarrierTechnologyParameters.EVENT_REQUESTOR_CARRIER_TECHNOLOGY_LABEL, actual); + } + + @Test + public void validate() { + final EventRequestorCarrierTechnologyParameters parameters = new EventRequestorCarrierTechnologyParameters(); + final GroupValidationResult actual = parameters.validate(); + assertNotNull(actual); + } +}
\ No newline at end of file diff --git a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/impl/eventrequestor/EventRequestorConsumerTest.java b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/impl/eventrequestor/EventRequestorConsumerTest.java new file mode 100644 index 000000000..dd44da7dd --- /dev/null +++ b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/impl/eventrequestor/EventRequestorConsumerTest.java @@ -0,0 +1,86 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2021 Nordix Foundation + * ================================================================================ + * 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.apex.service.engine.event.impl.eventrequestor; + +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.junit.Assert.assertEquals; + +import org.apache.commons.lang3.RandomStringUtils; +import org.junit.Before; +import org.junit.Test; +import org.onap.policy.apex.service.engine.event.ApexEventException; +import org.onap.policy.apex.service.engine.event.PeeredReference; +import org.onap.policy.apex.service.engine.event.impl.filecarrierplugin.consumer.ApexFileEventConsumer; +import org.onap.policy.apex.service.engine.event.impl.filecarrierplugin.producer.ApexFileEventProducer; +import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters; +import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerPeeredMode; + +public class EventRequestorConsumerTest { + private EventRequestorConsumer consumer; + + @Before + public void setUp() throws Exception { + consumer = new EventRequestorConsumer(); + } + + @Test + public void initNoCarrierTechnologyParameters() { + final String consumerName = RandomStringUtils.randomAlphabetic(6); + final EventHandlerParameters eventHandlerParameters = new EventHandlerParameters(); + + assertThatThrownBy(() -> consumer.init(consumerName, eventHandlerParameters, null)) + .isInstanceOf(ApexEventException.class); + } + + @Test + public void initNoPeered() { + final String consumerName = RandomStringUtils.randomAlphabetic(6); + final EventHandlerParameters eventHandlerParameters = new EventHandlerParameters(); + eventHandlerParameters.setCarrierTechnologyParameters(new EventRequestorCarrierTechnologyParameters()); + + assertThatThrownBy(() -> consumer.init(consumerName, eventHandlerParameters, null)) + .isInstanceOf(ApexEventException.class); + } + + @Test + public void getName() throws ApexEventException { + final String consumerName = RandomStringUtils.randomAlphabetic(6); + final EventHandlerParameters eventHandlerParameters = new EventHandlerParameters(); + eventHandlerParameters.setCarrierTechnologyParameters(new EventRequestorCarrierTechnologyParameters()); + eventHandlerParameters.setPeeredMode(EventHandlerPeeredMode.REQUESTOR, true); + + consumer.init(consumerName, eventHandlerParameters, null); + final String actual = consumer.getName(); + + assertEquals(consumerName, actual); + } + + @Test + public void getSetPeeeredReference() { + final PeeredReference peeredReference = + new PeeredReference(EventHandlerPeeredMode.REQUESTOR, new ApexFileEventConsumer(), + new ApexFileEventProducer()); + consumer.setPeeredReference(EventHandlerPeeredMode.REQUESTOR, peeredReference); + + final PeeredReference actual = consumer.getPeeredReference(EventHandlerPeeredMode.REQUESTOR); + + assertEquals(peeredReference, actual); + } +}
\ No newline at end of file diff --git a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/impl/eventrequestor/EventRequestorProducerTest.java b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/impl/eventrequestor/EventRequestorProducerTest.java new file mode 100644 index 000000000..2f4764fb5 --- /dev/null +++ b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/impl/eventrequestor/EventRequestorProducerTest.java @@ -0,0 +1,161 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2021 Nordix Foundation + * ================================================================================ + * 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.apex.service.engine.event.impl.eventrequestor; + +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.junit.Assert.assertEquals; + +import java.util.Random; +import org.apache.commons.lang3.RandomStringUtils; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Matchers; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; +import org.onap.policy.apex.service.engine.event.ApexEventException; +import org.onap.policy.apex.service.engine.event.ApexEventProducer; +import org.onap.policy.apex.service.engine.event.ApexEventRuntimeException; +import org.onap.policy.apex.service.engine.event.PeeredReference; +import org.onap.policy.apex.service.engine.event.SynchronousEventCache; +import org.onap.policy.apex.service.engine.event.impl.filecarrierplugin.consumer.ApexFileEventConsumer; +import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters; +import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerPeeredMode; + +public class EventRequestorProducerTest { + private final Random random = new Random(); + private EventRequestorProducer producer; + + @Mock + private ApexEventProducer apexProducer; + @Mock + private EventRequestorConsumer apexConsumer; + + @Before + public void setUp() throws Exception { + MockitoAnnotations.initMocks(this); + producer = new EventRequestorProducer(); + } + + @Test + public void initWithEmptyParams() { + final String producerName = RandomStringUtils.random(4); + final EventHandlerParameters eventHandlerParameters = new EventHandlerParameters(); + + assertThatThrownBy(() -> producer.init(producerName, eventHandlerParameters)) + .isInstanceOf(ApexEventException.class); + } + + @Test + public void initNotPeered() { + final String producerName = RandomStringUtils.random(4); + final EventHandlerParameters eventHandlerParameters = new EventHandlerParameters(); + eventHandlerParameters.setCarrierTechnologyParameters(new EventRequestorCarrierTechnologyParameters()); + + assertThatThrownBy(() -> producer.init(producerName, eventHandlerParameters)) + .isInstanceOf(ApexEventException.class); + } + + @Test + public void getName() throws ApexEventException { + final String expected = RandomStringUtils.random(4); + final EventHandlerParameters eventHandlerParameters = new EventHandlerParameters(); + eventHandlerParameters.setCarrierTechnologyParameters(new EventRequestorCarrierTechnologyParameters()); + eventHandlerParameters.setPeeredMode(EventHandlerPeeredMode.REQUESTOR, true); + + producer.init(expected, eventHandlerParameters); + final String actual = producer.getName(); + + assertEquals(expected, actual); + } + + @Test + public void getSetPeeredReference() { + final PeeredReference peeredReference = new PeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, apexConsumer, + apexProducer); + producer.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, peeredReference); + + final PeeredReference actual = this.producer.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS); + assertEquals(peeredReference, actual); + } + + @Test + public void sendEventNoRequestor() { + final int id = random.nextInt(1000); + + assertThatThrownBy(() -> producer.sendEvent(id, null, null, null)) + .isInstanceOf(ApexEventRuntimeException.class); + } + + @Test + public void sendEventNoEventRequestorConsumer() { + final int id = random.nextInt(1000); + + final ApexFileEventConsumer fileEventConsumer = Mockito.mock(ApexFileEventConsumer.class); + + final PeeredReference reference = + new PeeredReference(EventHandlerPeeredMode.REQUESTOR, fileEventConsumer, apexProducer); + + producer.setPeeredReference(EventHandlerPeeredMode.REQUESTOR, reference); + + assertThatThrownBy(() -> producer.sendEvent(id, null, null, null)) + .isInstanceOf(ApexEventRuntimeException.class); + } + + @Test + public void sendEvent() { + final int id = random.nextInt(1000); + // Prepare mocks + final PeeredReference peeredReference = Mockito.mock(PeeredReference.class); + + Mockito.when(apexConsumer.getPeeredReference(Matchers.any())).thenReturn(peeredReference); + Mockito.when(peeredReference.getPeeredConsumer()).thenReturn(apexConsumer); + + final PeeredReference reference = + new PeeredReference(EventHandlerPeeredMode.REQUESTOR, apexConsumer, apexProducer); + producer.setPeeredReference(EventHandlerPeeredMode.REQUESTOR, reference); + + producer.sendEvent(id, null, null, null); + Mockito.verify(apexConsumer, Mockito.times(1)).processEvent(Matchers.any()); + } + + @Test + public void sendEventCached() { + final int id = random.nextInt(1000); + + // Set event cache + final SynchronousEventCache eventCache = Mockito.mock(SynchronousEventCache.class); + producer.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, eventCache); + + // Prepare other mocks + final PeeredReference peeredReference = Mockito.mock(PeeredReference.class); + + Mockito.when(peeredReference.getPeeredConsumer()).thenReturn(apexConsumer); + Mockito.when(apexConsumer.getPeeredReference(Matchers.any())).thenReturn(peeredReference); + + final PeeredReference reference = + new PeeredReference(EventHandlerPeeredMode.REQUESTOR, apexConsumer, apexProducer); + producer.setPeeredReference(EventHandlerPeeredMode.REQUESTOR, reference); + + producer.sendEvent(id, null, null, null); + Mockito.verify(apexConsumer, Mockito.times(1)).processEvent(Matchers.any()); + Mockito.verify(eventCache, Mockito.times(1)).removeCachedEventToApexIfExists(id); + } +}
\ No newline at end of file diff --git a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/impl/filecarrierplugin/consumer/TextBlockReaderFactoryTest.java b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/impl/filecarrierplugin/consumer/TextBlockReaderFactoryTest.java new file mode 100644 index 000000000..4fa42a727 --- /dev/null +++ b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/impl/filecarrierplugin/consumer/TextBlockReaderFactoryTest.java @@ -0,0 +1,79 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2021 Nordix Foundation + * ================================================================================ + * 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.apex.service.engine.event.impl.filecarrierplugin.consumer; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import org.apache.commons.lang3.RandomStringUtils; +import org.junit.Before; +import org.junit.Test; +import org.onap.policy.apex.service.engine.event.ApexEventException; +import org.onap.policy.apex.service.engine.event.impl.apexprotocolplugin.ApexEventProtocolParameters; +import org.onap.policy.apex.service.engine.event.impl.jsonprotocolplugin.JsonEventProtocolParameters; +import org.onap.policy.apex.service.engine.parameters.dummyclasses.SuperTokenDelimitedEventProtocolParameters; +import org.onap.policy.apex.service.parameters.eventprotocol.EventProtocolParameters; + +public class TextBlockReaderFactoryTest { + private TextBlockReaderFactory factory; + + @Before + public void setUp() throws Exception { + factory = new TextBlockReaderFactory(); + } + + @Test + public void getTaggedReaderTextCharDelimitedParametersParams() throws ApexEventException { + final String text = RandomStringUtils.randomAlphanumeric(22); + final InputStream inputStream = prepareInputStream(text); + final EventProtocolParameters parameters = new JsonEventProtocolParameters(); + + final TextBlockReader actual = factory.getTaggedReader(inputStream, parameters); + assertThat(actual).isNotInstanceOf(HeaderDelimitedTextBlockReader.class); + } + + @Test + public void getTaggedReaderTextTokenDelimitedParams() throws ApexEventException { + final String text = RandomStringUtils.randomAlphanumeric(22); + final InputStream inputStream = prepareInputStream(text); + new ApexEventProtocolParameters(); + final EventProtocolParameters parameters = new SuperTokenDelimitedEventProtocolParameters(); + + final TextBlockReader actual = factory.getTaggedReader(inputStream, parameters); + assertThat(actual).isInstanceOf(HeaderDelimitedTextBlockReader.class); + } + + @Test + public void getTaggedReaderNotSupportedParams() { + final String text = RandomStringUtils.randomAlphanumeric(22); + final InputStream inputStream = prepareInputStream(text); + final EventProtocolParameters parameters = new ApexEventProtocolParameters(); + assertThatThrownBy(() -> factory.getTaggedReader(inputStream, parameters)) + .isInstanceOf(ApexEventException.class); + } + + + private InputStream prepareInputStream(String text) { + return new ByteArrayInputStream(text.getBytes(StandardCharsets.UTF_8)); + } +}
\ No newline at end of file diff --git a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/impl/filecarrierplugin/consumer/TextBlockTest.java b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/impl/filecarrierplugin/consumer/TextBlockTest.java new file mode 100644 index 000000000..4390c3f3a --- /dev/null +++ b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/event/impl/filecarrierplugin/consumer/TextBlockTest.java @@ -0,0 +1,57 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2021 Nordix Foundation + * ================================================================================ + * 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.apex.service.engine.event.impl.filecarrierplugin.consumer; + +import static org.junit.Assert.assertEquals; + +import java.util.Random; +import org.apache.commons.lang3.RandomStringUtils; +import org.junit.Test; + +public class TextBlockTest { + private final Random random = new Random(); + + @Test + public void isEndOfText() { + final boolean endOfText = random.nextBoolean(); + final TextBlock textBlock = new TextBlock(endOfText, null); + + assertEquals(endOfText, textBlock.isEndOfText()); + } + + @Test + public void getText() { + final boolean endOfText = random.nextBoolean(); + final String text = RandomStringUtils.randomAlphanumeric(8); + final TextBlock textBlock = new TextBlock(endOfText, text); + + assertEquals(text, textBlock.getText()); + } + + @Test + public void setText() { + final boolean endOfText = random.nextBoolean(); + final String text = RandomStringUtils.randomAlphanumeric(8); + final TextBlock textBlock = new TextBlock(endOfText, null); + + textBlock.setText(text); + assertEquals(text, textBlock.getText()); + } +}
\ No newline at end of file diff --git a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/main/ApexCommandLineArgumentsTest.java b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/main/ApexCommandLineArgumentsTest.java index 09663c0bf..b5b68c9fc 100644 --- a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/main/ApexCommandLineArgumentsTest.java +++ b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/main/ApexCommandLineArgumentsTest.java @@ -1,7 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2016-2018 Ericsson. All rights reserved. - * Modifications Copyright (C) 2020 Nordix Foundation + * Modifications Copyright (C) 2020-2021 Nordix Foundation. * Modifications Copyright (C) 2020 Bell Canada. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -22,12 +22,14 @@ package org.onap.policy.apex.service.engine.main; +import static org.assertj.core.api.Assertions.assertThatCode; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.Assert.assertTrue; import org.junit.After; import org.junit.Test; import org.onap.policy.apex.model.basicmodel.concepts.ApexException; +import org.onap.policy.common.utils.cmd.CommandLineException; /** * Test Apex Command Line Arguments. @@ -41,14 +43,9 @@ public class ApexCommandLineArgumentsTest { } @Test - public void testCommandLineArguments() throws ApexException { + public void testCommandLineArguments() throws ApexException, CommandLineException { final ApexCommandLineArguments apexArguments = new ApexCommandLineArguments(); - final String[] args00 = {""}; - apexArguments.parse(args00); - assertThatThrownBy(() -> apexArguments.validate()) - .hasMessage("Tosca Policy file was not specified as an argument"); - final String[] args01 = {"-h"}; final String result = apexArguments.parse(args01); assertTrue(result.startsWith("usage: org.onap.policy.apex.service.engine.main.ApexMain [options...]")); @@ -65,70 +62,80 @@ public class ApexCommandLineArgumentsTest { final String result04 = apexArguments.parse(args04); assertTrue(result04.startsWith("usage: org.onap.policy.apex.service.engine.main.ApexMain [options...]")); - final String[] args05 = {"-a"}; - assertThatThrownBy(() -> apexArguments.parse(args05)) - .hasMessage("invalid command line arguments specified : Unrecognized option: -a"); - final String[] args06 = {"-p", "goodbye", "-h", "-v"}; final String result06 = apexArguments.parse(args06); assertTrue(result06.startsWith("usage: org.onap.policy.apex.service.engine.main.ApexMain [options...]")); + } + + @Test + public void testCommandLineArgumentsExceptions() throws ApexException, CommandLineException { + final ApexCommandLineArguments apexArguments = new ApexCommandLineArguments(); + + final String[] args00 = {""}; + apexArguments.parse(args00); + assertThatThrownBy(() -> apexArguments.validateInputFiles()) + .hasMessage("Tosca Policy file was not specified as an argument"); + + final String[] args05 = {"-a"}; + assertThatThrownBy(() -> apexArguments.parse(args05)).hasMessage("invalid command line arguments specified") + .hasRootCauseMessage("Unrecognized option: -a"); final String[] args07 = {"-p", "goodbye", "-h", "aaa"}; assertThatThrownBy(() -> apexArguments.parse(args07)) - .hasMessage("too many command line arguments specified : [-p, goodbye, -h, aaa]"); + .hasMessage("too many command line arguments specified: [-p, goodbye, -h, aaa]"); + } + + @Test + public void testCommandLineFileParameters() throws ApexException, CommandLineException { + final ApexCommandLineArguments apexArguments = new ApexCommandLineArguments(); + + final String[] args02 = {"-p", "src/test/resources/parameters/goodParams.json"}; + apexArguments.parse(args02); + assertThatCode(() -> apexArguments.validateInputFiles()).doesNotThrowAnyException(); } @Test - public void testCommandLineFileParameters() throws ApexException { + public void testCommandLineFileParametersExceptions() throws ApexException, CommandLineException { final ApexCommandLineArguments apexArguments = new ApexCommandLineArguments(); final String[] args00 = {"-c", "zooby"}; - assertThatThrownBy(() -> apexArguments.parse(args00)) - .hasMessage("invalid command line arguments specified : Unrecognized option: -c"); + assertThatThrownBy(() -> apexArguments.parse(args00)).hasMessage("invalid command line arguments specified") + .hasRootCauseMessage("Unrecognized option: -c"); final String[] args01 = {"-p"}; - assertThatThrownBy(() -> apexArguments.parse(args01)) - .hasMessage("invalid command line arguments specified : Missing argument for option: p"); - - final String[] args02 = {"-p", "src/test/resources/parameters/goodParams.json"}; - apexArguments.parse(args02); - apexArguments.validate(); + assertThatThrownBy(() -> apexArguments.parse(args01)).hasMessage("invalid command line arguments specified") + .hasRootCauseMessage("Missing argument for option: p"); final String[] args03 = {"-p", "src/test/resources/parameters/goodParams.json", "-m", "zooby"}; - assertThatThrownBy(() -> apexArguments.parse(args03)) - .hasMessage("invalid command line arguments specified : Unrecognized option: -m"); - - final String[] args06 = {"-p", "src/test/resources/parameters/goodParams.json"}; - apexArguments.parse(args06); - apexArguments.validate(); + assertThatThrownBy(() -> apexArguments.parse(args03)).hasMessage("invalid command line arguments specified") + .hasRootCauseMessage("Unrecognized option: -m"); } @Test - public void testCommandLineRelativeRootParameters() throws ApexException { + public void testCommandLineRelativeRootParameters() throws ApexException, CommandLineException { final ApexCommandLineArguments apexArguments = new ApexCommandLineArguments(); final String[] args00 = {"-p", "src/test/resources/parameters/goodParams.json", "-rfr", "zooby"}; apexArguments.parse(args00); - assertThatThrownBy(() -> apexArguments.validate()) - .hasMessageContaining("zooby\" does not exist or is not a directory"); + assertThatThrownBy(() -> apexArguments.validateInputFiles()) + .hasMessageContaining("zooby\" does not exist or is not a directory"); final String[] args01 = {"-rfr"}; - assertThatThrownBy(() -> apexArguments.parse(args01)) - .hasMessage("invalid command line arguments specified : Missing argument for option: rfr"); + assertThatThrownBy(() -> apexArguments.parse(args01)).hasMessage("invalid command line arguments specified") + .hasRootCauseMessage("Missing argument for option: rfr"); final String[] args02 = {"-p", "src/test/resources/parameters/goodParams.json", "-rfr", "pom.xml"}; apexArguments.parse(args02); - assertThatThrownBy(() -> apexArguments.validate()) - .hasMessageContaining("pom.xml\" does not exist or is not a directory"); + assertThatThrownBy(() -> apexArguments.validateInputFiles()) + .hasMessageContaining("pom.xml\" does not exist or is not a directory"); final String[] args03 = {"-p", "src/test/resources/parameters/goodParams.json", "-rfr", "target"}; apexArguments.parse(args03); - apexArguments.validate(); + assertThatCode(() -> apexArguments.validateInputFiles()).doesNotThrowAnyException(); - final String[] args04 = - {"-p", "src/test/resources/parameters/goodParamsRelative.json", "-rfr", "src/test/resources"}; + final String[] args04 = {"-p", "parameters/goodParamsRelative.json", "-rfr", "src/test/resources"}; apexArguments.parse(args04); - apexArguments.validate(); + assertThatCode(() -> apexArguments.validateInputFiles()).doesNotThrowAnyException(); } } diff --git a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/main/ApexMainTest.java b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/main/ApexMainTest.java index 5764a5275..b7532aba2 100644 --- a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/main/ApexMainTest.java +++ b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/main/ApexMainTest.java @@ -89,7 +89,7 @@ public class ApexMainTest { apexMain1 = new ApexMain(args); await().atMost(200, TimeUnit.MILLISECONDS).until(() -> outContent.toString() - .contains("invalid command line arguments specified : Unrecognized option: -whee")); + .contains("invalid command line arguments specified")); assertNotNull(apexMain1); } diff --git a/services/services-onappf/src/main/java/org/onap/policy/apex/services/onappf/ApexStarterCommandLineArguments.java b/services/services-onappf/src/main/java/org/onap/policy/apex/services/onappf/ApexStarterCommandLineArguments.java index cad2ffa72..dfc43e0ac 100644 --- a/services/services-onappf/src/main/java/org/onap/policy/apex/services/onappf/ApexStarterCommandLineArguments.java +++ b/services/services-onappf/src/main/java/org/onap/policy/apex/services/onappf/ApexStarterCommandLineArguments.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. + * Copyright (C) 2019-2021 Nordix Foundation. * Modifications Copyright (C) 2020 Bell Canada. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -21,72 +21,24 @@ package org.onap.policy.apex.services.onappf; -import java.io.File; -import java.io.PrintWriter; -import java.io.StringWriter; -import java.net.URL; -import java.util.Arrays; -import org.apache.commons.cli.CommandLine; -import org.apache.commons.cli.DefaultParser; -import org.apache.commons.cli.HelpFormatter; import org.apache.commons.cli.Option; -import org.apache.commons.cli.Options; -import org.apache.commons.cli.ParseException; -import org.onap.policy.apex.services.onappf.exception.ApexStarterException; import org.onap.policy.apex.services.onappf.exception.ApexStarterRunTimeException; -import org.onap.policy.common.utils.resources.ResourceUtils; +import org.onap.policy.common.utils.cmd.CommandLineArgumentsHandler; +import org.onap.policy.common.utils.cmd.CommandLineException; /** * This class reads and handles command line parameters for the apex starter. * * @author Ajith Sreekumar (ajith.sreekumar@est.tech) */ -public class ApexStarterCommandLineArguments { - - private static final String FILE_MESSAGE_PREAMBLE = " file \""; - private static final int HELP_LINE_LENGTH = 120; - - private final Options options; - private String configurationFilePath = null; - private String propertyFilePath = null; +public class ApexStarterCommandLineArguments extends CommandLineArgumentsHandler { + private static final String APEX_COMPONENT = "policy apex starter"; /** * Construct the options for the CLI editor. */ public ApexStarterCommandLineArguments() { - //@formatter:off - options = new Options(); - options.addOption(Option.builder("h") - .longOpt("help") - .desc("outputs the usage of this command") - .required(false) - .type(Boolean.class) - .build()); - options.addOption(Option.builder("v") - .longOpt("version") - .desc("outputs the version of apex starter") - .required(false) - .type(Boolean.class) - .build()); - options.addOption(Option.builder("c") - .longOpt("config-file") - .desc("the full path to the configuration file to use, " - + "the configuration file must be a Json file containing the apex starter parameters") - .hasArg() - .argName("CONFIG_FILE") - .required(false) - .type(String.class) - .build()); - options.addOption(Option.builder("p") - .longOpt("property-file") - .desc("the full path to the topic property file to use, " - + "the property file contains the apex starter topic properties") - .hasArg() - .argName("PROP_FILE") - .required(false) - .type(String.class) - .build()); - //@formatter:on + super(ApexStarterMain.class.getName(), APEX_COMPONENT, apexPropertyFileOpt()); } /** @@ -95,203 +47,24 @@ public class ApexStarterCommandLineArguments { * @param args The command line arguments */ public ApexStarterCommandLineArguments(final String[] args) { - // Set up the options with the default constructor this(); - // Parse the arguments try { parse(args); - } catch (final ApexStarterException e) { + } catch (final CommandLineException e) { throw new ApexStarterRunTimeException("parse error on apex starter parameters", e); } } /** - * Parse the command line options. - * - * @param args The command line arguments - * @return a string with a message for help and version, or null if there is no message - * @throws ApexStarterException on command argument errors - */ - public String parse(final String[] args) throws ApexStarterException { - // Clear all our arguments - setConfigurationFilePath(null); - setPropertyFilePath(null); - - CommandLine commandLine = null; - try { - commandLine = new DefaultParser().parse(options, args); - } catch (final ParseException e) { - throw new ApexStarterException("invalid command line arguments specified : " + e.getMessage()); - } - - // Arguments left over after Commons CLI does its stuff - final String[] remainingArgs = commandLine.getArgs(); - - if (remainingArgs.length > 0 && commandLine.hasOption('c') || remainingArgs.length > 0) { - throw new ApexStarterException("too many command line arguments specified : " + Arrays.toString(args)); - } - - if (remainingArgs.length == 1) { - configurationFilePath = remainingArgs[0]; - } - - if (commandLine.hasOption('h')) { - return help(ApexStarterMain.class.getName()); - } - - if (commandLine.hasOption('v')) { - return version(); - } - - if (commandLine.hasOption('c')) { - setConfigurationFilePath(commandLine.getOptionValue('c')); - } - - if (commandLine.hasOption('p')) { - setPropertyFilePath(commandLine.getOptionValue('p')); - } - - return null; - } - - /** - * Validate the command line options. - * - * @throws ApexStarterException on command argument validation errors - */ - public void validate() throws ApexStarterException { - validateReadableFile("apex starter configuration", configurationFilePath); - } - - /** - * Print version information for apex starter. - * - * @return the version string - */ - public String version() { - return ResourceUtils.getResourceAsString("src/main/resources/version.txt"); - } - - /** - * Print help information for apex starter. - * - * @param mainClassName the main class name - * @return the help string - */ - public String help(final String mainClassName) { - final HelpFormatter helpFormatter = new HelpFormatter(); - final StringWriter stringWriter = new StringWriter(); - final PrintWriter printWriter = new PrintWriter(stringWriter); - - helpFormatter.printHelp(printWriter, HELP_LINE_LENGTH, mainClassName + " [options...]", "options", options, 0, - 0, ""); - - return stringWriter.toString(); - } - - /** - * Gets the configuration file path. - * - * @return the configuration file path - */ - public String getConfigurationFilePath() { - return configurationFilePath; - } - - /** - * Gets the full expanded configuration file path. - * - * @return the configuration file path - */ - public String getFullConfigurationFilePath() { - return ResourceUtils.getFilePath4Resource(getConfigurationFilePath()); - } - - /** - * Sets the configuration file path. - * - * @param configurationFilePath the configuration file path - */ - public void setConfigurationFilePath(final String configurationFilePath) { - this.configurationFilePath = configurationFilePath; - - } - - /** - * Check set configuration file path. + * Build the extra option property-file for ApexStarter. * - * @return true, if check set configuration file path + * @return the property-file option */ - public boolean checkSetConfigurationFilePath() { - return configurationFilePath != null && configurationFilePath.length() > 0; - } - - /** - * Gets the property file path. - * - * @return the property file path - */ - public String getPropertyFilePath() { - return propertyFilePath; - } - - /** - * Gets the full expanded property file path. - * - * @return the property file path - */ - public String getFullPropertyFilePath() { - return ResourceUtils.getFilePath4Resource(getPropertyFilePath()); - } - - /** - * Sets the property file path. - * - * @param propertyFilePath the property file path - */ - public void setPropertyFilePath(final String propertyFilePath) { - this.propertyFilePath = propertyFilePath; - - } - - /** - * Check set property file path. - * - * @return true, if check set property file path - */ - public boolean checkSetPropertyFilePath() { - return propertyFilePath != null && propertyFilePath.length() > 0; - } - - /** - * Validate readable file. - * - * @param fileTag the file tag - * @param fileName the file name - * @throws ApexStarterException on the file name passed as a parameter - */ - private void validateReadableFile(final String fileTag, final String fileName) throws ApexStarterException { - if (fileName == null || fileName.length() == 0) { - throw new ApexStarterException(fileTag + " file was not specified as an argument"); - } - - // The file name refers to a resource on the local file system - final URL fileUrl = ResourceUtils.getUrl4Resource(fileName); - if (fileUrl == null) { - throw new ApexStarterException(fileTag + FILE_MESSAGE_PREAMBLE + fileName + "\" does not exist"); - } - - final File theFile = new File(fileUrl.getPath()); - if (!theFile.exists()) { - throw new ApexStarterException(fileTag + FILE_MESSAGE_PREAMBLE + fileName + "\" does not exist"); - } - if (!theFile.isFile()) { - throw new ApexStarterException(fileTag + FILE_MESSAGE_PREAMBLE + fileName + "\" is not a normal file"); - } - if (!theFile.canRead()) { - throw new ApexStarterException(fileTag + FILE_MESSAGE_PREAMBLE + fileName + "\" is ureadable"); - } + private static Option apexPropertyFileOpt() { + return Option.builder("p").longOpt("property-file") + .desc("the full path to the topic property file to use, " + + "the property file contains the policy apex starter properties") + .hasArg().argName("PROP_FILE").required(false).type(String.class).build(); } - } diff --git a/services/services-onappf/src/main/java/org/onap/policy/apex/services/onappf/ApexStarterMain.java b/services/services-onappf/src/main/java/org/onap/policy/apex/services/onappf/ApexStarterMain.java index 7daa22846..c9362bcdd 100644 --- a/services/services-onappf/src/main/java/org/onap/policy/apex/services/onappf/ApexStarterMain.java +++ b/services/services-onappf/src/main/java/org/onap/policy/apex/services/onappf/ApexStarterMain.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2019-2020 Nordix Foundation. + * Copyright (C) 2019-2021 Nordix Foundation. * Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. * Modifications Copyright (C) 2020 Bell Canada. All rights reserved. * ================================================================================ @@ -28,6 +28,7 @@ import org.onap.policy.apex.services.onappf.exception.ApexStarterException; import org.onap.policy.apex.services.onappf.exception.ApexStarterRunTimeException; import org.onap.policy.apex.services.onappf.parameters.ApexStarterParameterGroup; import org.onap.policy.apex.services.onappf.parameters.ApexStarterParameterHandler; +import org.onap.policy.common.utils.cmd.CommandLineException; import org.onap.policy.common.utils.resources.MessageConstants; import org.onap.policy.common.utils.services.Registry; import org.slf4j.Logger; @@ -77,7 +78,7 @@ public class ApexStarterMain { // Start the activator activator.initialize(); - } catch (final ApexStarterException e) { + } catch (final ApexStarterException | CommandLineException e) { if (null != activator) { Registry.unregister(ApexStarterConstants.REG_APEX_STARTER_ACTIVATOR); } diff --git a/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/TestApexStarterCommandLineArguments.java b/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/TestApexStarterCommandLineArguments.java new file mode 100644 index 000000000..e564d38e4 --- /dev/null +++ b/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/TestApexStarterCommandLineArguments.java @@ -0,0 +1,53 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2021 Nordix Foundation. + * ================================================================================ + * 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.apex.services.onappf; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +public class TestApexStarterCommandLineArguments { + + /** + * Test method for {@link org.onap.policy.apex.services.onappf.ApexStarterCommandLineArguments + * #getPropertyFilePath()}. + * Assert custom option was added to options object from super. + */ + @Test + public void testCommandLineHasPropertyFileOption() { + String[] args = {"-p", "someFile.json"}; + ApexStarterCommandLineArguments sut = new ApexStarterCommandLineArguments(args); + assertEquals("someFile.json", sut.getPropertyFilePath()); + } + + /** + * Test method for {@link org.onap.policy.apex.services.onappf.ApexStarterCommandLineArguments#version()}. + * Assert method consults version.txt from Apex module. + */ + @Test + public void testVersion() { + String[] args = {"-v"}; + ApexStarterCommandLineArguments sut = new ApexStarterCommandLineArguments(args); + assertThat(sut.version()).startsWith("ONAP Policy Framework Apex Starter Service"); + } + +} diff --git a/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/comm/TestPdpStateChangeListener.java b/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/comm/TestPdpStateChangeListener.java index f04cf04f6..10f82633f 100644 --- a/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/comm/TestPdpStateChangeListener.java +++ b/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/comm/TestPdpStateChangeListener.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2019-2020 Nordix Foundation. + * Copyright (C) 2019-2021 Nordix Foundation. * Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. * Modifications Copyright (C) 2020 Bell Canada. All rights reserved. * ================================================================================ @@ -46,6 +46,7 @@ import org.onap.policy.apex.services.onappf.handler.ApexEngineHandler; import org.onap.policy.apex.services.onappf.parameters.ApexStarterParameterGroup; import org.onap.policy.apex.services.onappf.parameters.ApexStarterParameterHandler; import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure; +import org.onap.policy.common.utils.cmd.CommandLineException; import org.onap.policy.common.utils.coder.CoderException; import org.onap.policy.common.utils.services.Registry; import org.onap.policy.models.pdp.concepts.PdpStateChange; @@ -74,9 +75,10 @@ public class TestPdpStateChangeListener { * @throws ApexStarterException if some error occurs while starting up the apex starter * @throws FileNotFoundException if the file is missing * @throws IOException if IO exception occurs + * @throws CommandLineException if any parsing of args has errors */ @Before - public void setUp() throws ApexStarterException, FileNotFoundException, IOException { + public void setUp() throws ApexStarterException, FileNotFoundException, IOException, CommandLineException { pdpUpdateMessageListener = new PdpUpdateListener(); pdpStateChangeListener = new PdpStateChangeListener(); Registry.newRegistry(); diff --git a/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/comm/TestPdpUpdateListener.java b/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/comm/TestPdpUpdateListener.java index 636cdb0fc..ec3da9bc3 100644 --- a/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/comm/TestPdpUpdateListener.java +++ b/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/comm/TestPdpUpdateListener.java @@ -47,6 +47,7 @@ import org.onap.policy.apex.services.onappf.handler.PdpMessageHandler; import org.onap.policy.apex.services.onappf.parameters.ApexStarterParameterGroup; import org.onap.policy.apex.services.onappf.parameters.ApexStarterParameterHandler; import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure; +import org.onap.policy.common.utils.cmd.CommandLineException; import org.onap.policy.common.utils.coder.CoderException; import org.onap.policy.common.utils.services.Registry; import org.onap.policy.models.pdp.concepts.PdpStateChange; @@ -75,9 +76,10 @@ public class TestPdpUpdateListener { * @throws ApexStarterException if some error occurs while starting up the apex starter * @throws FileNotFoundException if the file is missing * @throws IOException if IO exception occurs + * @throws CommandLineException if any parsing of args has errors */ @Before - public void setUp() throws ApexStarterException, FileNotFoundException, IOException { + public void setUp() throws ApexStarterException, FileNotFoundException, IOException, CommandLineException { Registry.newRegistry(); final String[] apexStarterConfigParameters = {"-c", "src/test/resources/ApexStarterConfigParametersNoop.json"}; final ApexStarterCommandLineArguments arguments = new ApexStarterCommandLineArguments(); diff --git a/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/parameters/TestApexStarterParameterHandler.java b/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/parameters/TestApexStarterParameterHandler.java index d39cbecf0..dd424c15b 100644 --- a/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/parameters/TestApexStarterParameterHandler.java +++ b/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/parameters/TestApexStarterParameterHandler.java @@ -1,7 +1,6 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. - * Modifications Copyright (C) 2020 Nordix Foundation + * Copyright (C) 2019-2021 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -29,6 +28,7 @@ import java.io.FileNotFoundException; import org.junit.Test; import org.onap.policy.apex.services.onappf.ApexStarterCommandLineArguments; import org.onap.policy.apex.services.onappf.exception.ApexStarterException; +import org.onap.policy.common.utils.cmd.CommandLineException; import org.onap.policy.common.utils.coder.CoderException; /** @@ -39,7 +39,7 @@ import org.onap.policy.common.utils.coder.CoderException; public class TestApexStarterParameterHandler { @Test - public void testParameterHandlerNoParameterFile() throws ApexStarterException { + public void testParameterHandlerNoParameterFile() throws ApexStarterException, CommandLineException { final String[] emptyArgumentString = { "-c", "src/test/resources/NoParametersFile.json" }; final ApexStarterCommandLineArguments emptyArguments = new ApexStarterCommandLineArguments(); @@ -51,7 +51,7 @@ public class TestApexStarterParameterHandler { } @Test - public void testParameterHandlerEmptyParameters() throws ApexStarterException { + public void testParameterHandlerEmptyParameters() throws ApexStarterException, CommandLineException { final String[] noArgumentString = { "-c", "src/test/resources/NoParameters.json" }; final ApexStarterCommandLineArguments noArguments = new ApexStarterCommandLineArguments(); @@ -62,7 +62,7 @@ public class TestApexStarterParameterHandler { } @Test - public void testParameterHandlerInvalidParameters() throws ApexStarterException { + public void testParameterHandlerInvalidParameters() throws ApexStarterException, CommandLineException { final String[] invalidArgumentString = { "-c", "src/test/resources/InvalidParameters.json" }; final ApexStarterCommandLineArguments invalidArguments = new ApexStarterCommandLineArguments(); @@ -74,7 +74,7 @@ public class TestApexStarterParameterHandler { } @Test - public void testParameterHandlerNoParameters() throws ApexStarterException { + public void testParameterHandlerNoParameters() throws ApexStarterException, CommandLineException { final String[] noArgumentString = { "-c", "src/test/resources/EmptyConfigParameters.json" }; final ApexStarterCommandLineArguments noArguments = new ApexStarterCommandLineArguments(); @@ -85,7 +85,7 @@ public class TestApexStarterParameterHandler { } @Test - public void testApexStarterParameterGroup() throws ApexStarterException { + public void testApexStarterParameterGroup() throws ApexStarterException, CommandLineException { final String[] apexStarterConfigParameters = { "-c", "src/test/resources/ApexStarterConfigParameters.json" }; final ApexStarterCommandLineArguments arguments = new ApexStarterCommandLineArguments(); @@ -97,7 +97,7 @@ public class TestApexStarterParameterHandler { } @Test - public void testApexStarterParameterGroup_InvalidName() throws ApexStarterException { + public void testApexStarterParameterGroup_InvalidName() throws ApexStarterException, CommandLineException { final String[] apexStarterConfigParameters = { "-c", "src/test/resources/ApexStarterConfigParameters_InvalidName.json" }; @@ -110,7 +110,7 @@ public class TestApexStarterParameterHandler { } @Test - public void testApexStarterVersion() throws ApexStarterException { + public void testApexStarterVersion() throws ApexStarterException, CommandLineException { final String[] apexStarterConfigParameters = { "-v" }; final ApexStarterCommandLineArguments arguments = new ApexStarterCommandLineArguments(); final String version = arguments.parse(apexStarterConfigParameters); @@ -118,7 +118,7 @@ public class TestApexStarterParameterHandler { } @Test - public void testApexStarterHelp() throws ApexStarterException { + public void testApexStarterHelp() throws ApexStarterException, CommandLineException { final String[] apexStarterConfigParameters = { "-h" }; final ApexStarterCommandLineArguments arguments = new ApexStarterCommandLineArguments(); final String help = arguments.parse(apexStarterConfigParameters); diff --git a/testsuites/apex-pdp-stability/src/main/resources/apexPdpStabilityTestPlan.jmx b/testsuites/apex-pdp-stability/src/main/resources/apexPdpStabilityTestPlan.jmx index 7a8777f17..afeb77fab 100644 --- a/testsuites/apex-pdp-stability/src/main/resources/apexPdpStabilityTestPlan.jmx +++ b/testsuites/apex-pdp-stability/src/main/resources/apexPdpStabilityTestPlan.jmx @@ -67,43 +67,43 @@ </elementProp> <elementProp name="threadsTimeOutInMs" elementType="Argument"> <stringProp name="Argument.name">threadsTimeOutInMs</stringProp> - <stringProp name="Argument.value">${__P(threadsTimeOutInMs,150000)}</stringProp> + <stringProp name="Argument.value">${__P(threadsTimeOutInMs,5000)}</stringProp> <stringProp name="Argument.metadata">=</stringProp> </elementProp> <elementProp name="wait" elementType="Argument"> <stringProp name="Argument.name">wait</stringProp> - <stringProp name="Argument.value">${__P(wait,120000)}</stringProp> + <stringProp name="Argument.value">${__P(wait,10000)}</stringProp> <stringProp name="Argument.desc">Wait time between requests to apex-pdp</stringProp> <stringProp name="Argument.metadata">=</stringProp> </elementProp> <elementProp name="PAP_PORT" elementType="Argument"> <stringProp name="Argument.name">PAP_PORT</stringProp> - <stringProp name="Argument.value">${__P(PAP_PORT,30844)}</stringProp> + <stringProp name="Argument.value">${__P(PAP_PORT,30211)}</stringProp> <stringProp name="Argument.metadata">=</stringProp> </elementProp> <elementProp name="API_PORT" elementType="Argument"> <stringProp name="Argument.name">API_PORT</stringProp> - <stringProp name="Argument.value">${__P(API_PORT,30485)}</stringProp> + <stringProp name="Argument.value">${__P(API_PORT,30785)}</stringProp> <stringProp name="Argument.metadata">=</stringProp> </elementProp> <elementProp name="APEX_PORT" elementType="Argument"> <stringProp name="Argument.name">APEX_PORT</stringProp> - <stringProp name="Argument.value">${__P(APEX_PORT,31686)}</stringProp> + <stringProp name="Argument.value">${__P(APEX_PORT,30687)}</stringProp> <stringProp name="Argument.metadata">=</stringProp> </elementProp> <elementProp name="DMAAP_PORT" elementType="Argument"> <stringProp name="Argument.name">DMAAP_PORT</stringProp> - <stringProp name="Argument.value">${__P(DMAAP_PORT,31499)}</stringProp> + <stringProp name="Argument.value">${__P(DMAAP_PORT,31345)}</stringProp> <stringProp name="Argument.metadata">=</stringProp> </elementProp> <elementProp name="HOSTNAME" elementType="Argument"> <stringProp name="Argument.name">HOSTNAME</stringProp> - <stringProp name="Argument.value">${__P(HOSTNAME,10.2.0.97)}</stringProp> + <stringProp name="Argument.value">${__P(HOSTNAME,10.2.0.120)}</stringProp> <stringProp name="Argument.metadata">=</stringProp> </elementProp> <elementProp name="LOG_PATH" elementType="Argument"> <stringProp name="Argument.name">LOG_PATH</stringProp> - <stringProp name="Argument.value">${__P(LOG_PATH,/home/wayned/apex_stability)}</stringProp> + <stringProp name="Argument.value">${__P(LOG_PATH,/home/arkadiusza/apex_stability)}</stringProp> <stringProp name="Argument.metadata">=</stringProp> </elementProp> </collectionProp> @@ -157,2296 +157,2287 @@ <elementProp name="" elementType="HTTPArgument"> <boolProp name="HTTPArgument.always_encode">false</boolProp> <stringProp name="Argument.value">{
 - "tosca_definitions_version": "tosca_simple_yaml_1_1_0",
 - "topology_template": {
 - "policies": [
 - {
 - "operational.apex.stabilityTestDefaultDomain": {
 - "type": "onap.policies.native.Apex",
 - "type_version": "1.0.0",
 - "properties": {
 - "engineServiceParameters": {
 - "name": "MyApexEngine",
 - "version": "0.0.1",
 - "id": 45,
 - "instanceCount": 4,
 - "deploymentPort": 12561,
 - "engineParameters": {
 - "executorParameters": {
 - "JAVASCRIPT": {
 - "parameterClassName": "org.onap.policy.apex.plugins.executor.javascript.JavascriptExecutorParameters"
 - }
 - },
 - "contextParameters": {
 - "parameterClassName": "org.onap.policy.apex.context.parameters.ContextParameters",
 - "schemaParameters": {
 - "Avro": {
 - "parameterClassName": "org.onap.policy.apex.plugins.context.schema.avro.AvroSchemaHelperParameters"
 - },
 - "Java": {
 - "parameterClassName": "org.onap.policy.apex.context.impl.schema.java.JavaSchemaHelperParameters",
 - "jsonAdapters": {
 - "Instant": {
 - "adaptedClass": "java.time.Instant",
 - "adaptorClass": "org.onap.policy.controlloop.util.Serialization$GsonInstantAdapter"
 - }
 + "tosca_definitions_version": "tosca_simple_yaml_1_1_0",
 + "topology_template": {
 + "policies": [
 + {
 + "operational.apex.stabilityTestDefaultDomain": {
 + "type": "onap.policies.native.Apex",
 + "type_version": "1.0.0",
 + "properties": {
 + "engineServiceParameters": {
 + "name": "MyApexEngine",
 + "version": "0.0.1",
 + "id": 45,
 + "instanceCount": 4,
 + "deploymentPort": 12561,
 + "engineParameters": {
 + "executorParameters": {
 + "JAVASCRIPT": {
 + "parameterClassName": "org.onap.policy.apex.plugins.executor.javascript.JavascriptExecutorParameters"
 + }
 + },
 + "contextParameters": {
 + "parameterClassName": "org.onap.policy.apex.context.parameters.ContextParameters",
 + "schemaParameters": {
 + "Avro": {
 + "parameterClassName": "org.onap.policy.apex.plugins.context.schema.avro.AvroSchemaHelperParameters"
 + }
 + }
 + }
 + },
 + "policy_type_impl": {
 + "apexPolicyModel": {
 + "key": {
 + "name": "APEXgRPCPolicy",
 + "version": "0.0.1"
 + },
 + "keyInformation": {
 + "key": {
 + "name": "APEXgRPCPolicy_KeyInfo",
 + "version": "0.0.1"
 + },
 + "keyInfoMap": {
 + "entry": [
 + {
 + "key": {
 + "name": "APEXgRPCPolicy",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "APEXgRPCPolicy",
 + "version": "0.0.1"
 + },
 + "UUID": "b8424cdb-29fb-3566-b77a-f4f847d81cc9",
 + "description": "Generated description for concept referred to by key \"APEXgRPCPolicy:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "APEXgRPCPolicy_Albums",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "APEXgRPCPolicy_Albums",
 + "version": "0.0.1"
 + },
 + "UUID": "9922906c-ccaa-34f7-95e2-bcc36e77821b",
 + "description": "Generated description for concept referred to by key \"APEXgRPCPolicy_Albums:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "APEXgRPCPolicy_Events",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "APEXgRPCPolicy_Events",
 + "version": "0.0.1"
 + },
 + "UUID": "5bf28afd-787c-3138-a3e1-b33ad94a038a",
 + "description": "Generated description for concept referred to by key \"APEXgRPCPolicy_Events:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "APEXgRPCPolicy_KeyInfo",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "APEXgRPCPolicy_KeyInfo",
 + "version": "0.0.1"
 + },
 + "UUID": "68abaa6f-8d03-3a53-9590-007115817d5c",
 + "description": "Generated description for concept referred to by key \"APEXgRPCPolicy_KeyInfo:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "APEXgRPCPolicy_Policies",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "APEXgRPCPolicy_Policies",
 + "version": "0.0.1"
 + },
 + "UUID": "819d06c3-33c2-3031-aa78-96281aa4270a",
 + "description": "Generated description for concept referred to by key \"APEXgRPCPolicy_Policies:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "APEXgRPCPolicy_Schemas",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "APEXgRPCPolicy_Schemas",
 + "version": "0.0.1"
 + },
 + "UUID": "8e67d466-f990-3a39-9fd7-4490cac342dc",
 + "description": "Generated description for concept referred to by key \"APEXgRPCPolicy_Schemas:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "APEXgRPCPolicy_Tasks",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "APEXgRPCPolicy_Tasks",
 + "version": "0.0.1"
 + },
 + "UUID": "4668db3d-6fe2-3885-8e47-f30cd0102f0a",
 + "description": "Generated description for concept referred to by key \"APEXgRPCPolicy_Tasks:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "CDSActionIdentifiersType",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CDSActionIdentifiersType",
 + "version": "0.0.1"
 + },
 + "UUID": "6e5fa19b-14df-37e3-a4ae-8c537e861a82",
 + "description": "Generated description for concept referred to by key \"CDSActionIdentifiersType:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "CDSCreateSubscriptionPayloadType",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CDSCreateSubscriptionPayloadType",
 + "version": "0.0.1"
 + },
 + "UUID": "8350ac5e-c157-38b9-9614-a0f93a830e60",
 + "description": "Generated description for concept referred to by key \"CDSCreateSubscriptionPayloadType:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "CDSDeleteSubscriptionPayloadType",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CDSDeleteSubscriptionPayloadType",
 + "version": "0.0.1"
 + },
 + "UUID": "12658406-9147-3c9d-a38c-5ad5e30b092b",
 + "description": "Generated description for concept referred to by key \"CDSDeleteSubscriptionPayloadType:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "CDSRequestCommonHeaderType",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CDSRequestCommonHeaderType",
 + "version": "0.0.1"
 + },
 + "UUID": "35590ac0-062c-39f1-8786-b4ff716e30b1",
 + "description": "Generated description for concept referred to by key \"CDSRequestCommonHeaderType:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "CDSResponseCommonHeaderType",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CDSResponseCommonHeaderType",
 + "version": "0.0.1"
 + },
 + "UUID": "dd7e1805-885a-350b-aaf9-ed541321ae3c",
 + "description": "Generated description for concept referred to by key \"CDSResponseCommonHeaderType:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "CDSResponseEvent",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CDSResponseEvent",
 + "version": "0.0.1"
 + },
 + "UUID": "15161037-9ac8-3223-820f-4e743562a345",
 + "description": "Generated description for concept referred to by key \"CDSResponseEvent:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "CDSResponsePayloadType",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CDSResponsePayloadType",
 + "version": "0.0.1"
 + },
 + "UUID": "97dc5f58-25bb-3c20-8d53-fdb70d7ca256",
 + "description": "Generated description for concept referred to by key \"CDSResponsePayloadType:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "CDSResponsePolicy",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CDSResponsePolicy",
 + "version": "0.0.1"
 + },
 + "UUID": "c28b05a8-7436-3ac0-82ca-6d5fc18c9584",
 + "description": "Generated description for concept referred to by key \"CDSResponsePolicy:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "CDSResponseStatusEvent",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CDSResponseStatusEvent",
 + "version": "0.0.1"
 + },
 + "UUID": "7986e21b-32f7-302e-9554-31f21b673493",
 + "description": "Generated description for concept referred to by key \"CDSResponseStatusEvent:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "CDSResponseStatusType",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CDSResponseStatusType",
 + "version": "0.0.1"
 + },
 + "UUID": "92b8a2cf-344e-3ce1-8cc0-2b7d3cb695fa",
 + "description": "Generated description for concept referred to by key \"CDSResponseStatusType:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "CDSResponseTask",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CDSResponseTask",
 + "version": "0.0.1"
 + },
 + "UUID": "d22c78a5-272c-391d-8083-28588280caf9",
 + "description": "Generated description for concept referred to by key \"CDSResponseTask:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "CreateSubscriptionPayloadEvent",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CreateSubscriptionPayloadEvent",
 + "version": "0.0.1"
 + },
 + "UUID": "92162397-1a8e-3a3f-a469-d2af7700af4a",
 + "description": "Generated description for concept referred to by key \"CreateSubscriptionPayloadEvent:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "CreateSubscriptionPayloadTask",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CreateSubscriptionPayloadTask",
 + "version": "0.0.1"
 + },
 + "UUID": "bc0c69f0-52ed-38ea-b468-ae4a6fd1730d",
 + "description": "Generated description for concept referred to by key \"CreateSubscriptionPayloadTask:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "CreateSubscriptionRequestEvent",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CreateSubscriptionRequestEvent",
 + "version": "0.0.1"
 + },
 + "UUID": "7cfcf843-337e-3f41-b755-5043cb0a08fc",
 + "description": "Generated description for concept referred to by key \"CreateSubscriptionRequestEvent:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "CreateSubscriptionRequestTask",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CreateSubscriptionRequestTask",
 + "version": "0.0.1"
 + },
 + "UUID": "89cb75e9-f06c-30d3-b4ff-698d45f63869",
 + "description": "Generated description for concept referred to by key \"CreateSubscriptionRequestTask:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "DeleteSubscriptionPayloadEvent",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "DeleteSubscriptionPayloadEvent",
 + "version": "0.0.1"
 + },
 + "UUID": "994fa441-04ab-33bb-832d-1cd12ab5d074",
 + "description": "Generated description for concept referred to by key \"DeleteSubscriptionPayloadEvent:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "DeleteSubscriptionPayloadTask",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "DeleteSubscriptionPayloadTask",
 + "version": "0.0.1"
 + },
 + "UUID": "0f519117-5fea-3e4b-941f-8f778100465f",
 + "description": "Generated description for concept referred to by key \"DeleteSubscriptionPayloadTask:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "DeleteSubscriptionRequestEvent",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "DeleteSubscriptionRequestEvent",
 + "version": "0.0.1"
 + },
 + "UUID": "15d618d8-1689-3a05-89a5-05efa9388f65",
 + "description": "Generated description for concept referred to by key \"DeleteSubscriptionRequestEvent:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "DeleteSubscriptionRequestTask",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "DeleteSubscriptionRequestTask",
 + "version": "0.0.1"
 + },
 + "UUID": "acb772fe-d442-39e3-98f9-b1080caf4150",
 + "description": "Generated description for concept referred to by key \"DeleteSubscriptionRequestTask:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "PMSubscriptionAlbum",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "PMSubscriptionAlbum",
 + "version": "0.0.1"
 + },
 + "UUID": "c2bd6f0d-6854-317a-9be2-97c08338428c",
 + "description": "Generated description for concept referred to by key \"PMSubscriptionAlbum:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "PMSubscriptionOutputEvent",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "PMSubscriptionOutputEvent",
 + "version": "0.0.1"
 + },
 + "UUID": "992b7819-9f69-3aa0-bb0f-6e45ea15ce05",
 + "description": "Generated description for concept referred to by key \"PMSubscriptionOutputEvent:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "PMSubscriptionType",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "PMSubscriptionType",
 + "version": "0.0.1"
 + },
 + "UUID": "73c1c397-4fc3-357f-93b6-a8ad707fbaae",
 + "description": "Generated description for concept referred to by key \"PMSubscriptionType: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": "ReceivePMSubscriptionTask",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "ReceivePMSubscriptionTask",
 + "version": "0.0.1"
 + },
 + "UUID": "6c1c6c45-26e0-3591-94bf-679d20e283f4",
 + "description": "Generated description for concept referred to by key \"ReceivePMSubscriptionTask: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": "SubscriptionStatusType",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "SubscriptionStatusType",
 + "version": "0.0.1"
 + },
 + "UUID": "597643b1-9db1-31ce-85d0-e1c63c43b30b",
 + "description": "Generated description for concept referred to by key \"SubscriptionStatusType:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "SubscriptionType",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "SubscriptionType",
 + "version": "0.0.1"
 + },
 + "UUID": "184547bb-7d64-3cb2-a273-d7185102c5ce",
 + "description": "Generated description for concept referred to by key \"SubscriptionType: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\""
 + }
 + },
 + {
 + "key": {
 + "name": "testPolicyB",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "testPolicyB",
 + "version": "0.0.1"
 + },
 + "UUID": "ead590a3-ba2e-3a01-b6e9-9329f5c8fee1",
 + "description": "Generated description for concept referred to by key \"testPolicyB:0.0.1\""
 + }
 + }
 + ]
 + }
 + },
 + "policies": {
 + "key": {
 + "name": "APEXgRPCPolicy_Policies",
 + "version": "0.0.1"
 + },
 + "policyMap": {
 + "entry": [
 + {
 + "key": {
 + "name": "CDSResponsePolicy",
 + "version": "0.0.1"
 + },
 + "value": {
 + "policyKey": {
 + "name": "CDSResponsePolicy",
 + "version": "0.0.1"
 + },
 + "template": "Freestyle",
 + "state": {
 + "entry": [
 + {
 + "key": "CDSResponseState",
 + "value": {
 + "stateKey": {
 + "parentKeyName": "CDSResponsePolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "NULL",
 + "localName": "CDSResponseState"
 + },
 + "trigger": {
 + "name": "CDSResponseEvent",
 + "version": "0.0.1"
 + },
 + "stateOutputs": {
 + "entry": [
 + {
 + "key": "ResponseOutput",
 + "value": {
 + "key": {
 + "parentKeyName": "CDSResponsePolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "CDSResponseState",
 + "localName": "ResponseOutput"
 + },
 + "outgoingEvent": {
 + "name": "CDSResponseStatusEvent",
 + "version": "0.0.1"
 + },
 + "nextState": {
 + "parentKeyName": "NULL",
 + "parentKeyVersion": "0.0.0",
 + "parentLocalName": "NULL",
 + "localName": "NULL"
 }
 + }
 }
 + ]
 + },
 + "contextAlbumReference": [],
 + "taskSelectionLogic": {
 + "key": "NULL",
 + "logicFlavour": "UNDEFINED",
 + "logic": ""
 + },
 + "stateFinalizerLogicMap": {
 + "entry": []
 + },
 + "defaultTask": {
 + "name": "CDSResponseTask",
 + "version": "0.0.1"
 + },
 + "taskReferences": {
 + "entry": [
 + {
 + "key": {
 + "name": "CDSResponseTask",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "parentKeyName": "CDSResponsePolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "CDSResponseState",
 + "localName": "CDSResponsePolicy"
 + },
 + "outputType": "DIRECT",
 + "output": {
 + "parentKeyName": "CDSResponsePolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "CDSResponseState",
 + "localName": "ResponseOutput"
 + }
 + }
 + }
 + ]
 }
 + }
 }
 + ]
 },
 - "policy_type_impl": {
 - "apexPolicyModel": {
 - "key": {
 - "name": "APEXgRPCPolicy",
 - "version": "0.0.1"
 + "firstState": "CDSResponseState"
 + }
 + },
 + {
 + "key": {
 + "name": "ReceiveEventPolicy",
 + "version": "0.0.1"
 + },
 + "value": {
 + "policyKey": {
 + "name": "ReceiveEventPolicy",
 + "version": "0.0.1"
 + },
 + "template": "Freestyle",
 + "state": {
 + "entry": [
 + {
 + "key": "CreateOrDeleteState",
 + "value": {
 + "stateKey": {
 + "parentKeyName": "ReceiveEventPolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "NULL",
 + "localName": "CreateOrDeleteState"
 },
 - "keyInformation": {
 - "key": {
 - "name": "APEXgRPCPolicy_KeyInfo",
 - "version": "0.0.1"
 + "trigger": {
 + "name": "PMSubscriptionOutputEvent",
 + "version": "0.0.1"
 + },
 + "stateOutputs": {
 + "entry": [
 + {
 + "key": "CreateSubscriptionPayload",
 + "value": {
 + "key": {
 + "parentKeyName": "ReceiveEventPolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "CreateOrDeleteState",
 + "localName": "CreateSubscriptionPayload"
 + },
 + "outgoingEvent": {
 + "name": "CreateSubscriptionPayloadEvent",
 + "version": "0.0.1"
 + },
 + "nextState": {
 + "parentKeyName": "ReceiveEventPolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "NULL",
 + "localName": "CreateSubscription"
 + }
 + }
 },
 - "keyInfoMap": {
 - "entry": [
 - {
 - "key": {
 - "name": "APEXgRPCPolicy",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "APEXgRPCPolicy",
 - "version": "0.0.1"
 - },
 - "UUID": "b8424cdb-29fb-3566-b77a-f4f847d81cc9",
 - "description": "Generated description for concept referred to by key \"APEXgRPCPolicy:0.0.1\""
 - }
 - },
 - {
 - "key": {
 - "name": "APEXgRPCPolicy_Albums",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "APEXgRPCPolicy_Albums",
 - "version": "0.0.1"
 - },
 - "UUID": "9922906c-ccaa-34f7-95e2-bcc36e77821b",
 - "description": "Generated description for concept referred to by key \"APEXgRPCPolicy_Albums:0.0.1\""
 - }
 - },
 - {
 - "key": {
 - "name": "APEXgRPCPolicy_Events",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "APEXgRPCPolicy_Events",
 - "version": "0.0.1"
 - },
 - "UUID": "5bf28afd-787c-3138-a3e1-b33ad94a038a",
 - "description": "Generated description for concept referred to by key \"APEXgRPCPolicy_Events:0.0.1\""
 - }
 - },
 - {
 - "key": {
 - "name": "APEXgRPCPolicy_KeyInfo",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "APEXgRPCPolicy_KeyInfo",
 - "version": "0.0.1"
 - },
 - "UUID": "68abaa6f-8d03-3a53-9590-007115817d5c",
 - "description": "Generated description for concept referred to by key \"APEXgRPCPolicy_KeyInfo:0.0.1\""
 - }
 - },
 - {
 - "key": {
 - "name": "APEXgRPCPolicy_Policies",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "APEXgRPCPolicy_Policies",
 - "version": "0.0.1"
 - },
 - "UUID": "819d06c3-33c2-3031-aa78-96281aa4270a",
 - "description": "Generated description for concept referred to by key \"APEXgRPCPolicy_Policies:0.0.1\""
 - }
 - },
 - {
 - "key": {
 - "name": "APEXgRPCPolicy_Schemas",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "APEXgRPCPolicy_Schemas",
 - "version": "0.0.1"
 - },
 - "UUID": "8e67d466-f990-3a39-9fd7-4490cac342dc",
 - "description": "Generated description for concept referred to by key \"APEXgRPCPolicy_Schemas:0.0.1\""
 - }
 - },
 - {
 - "key": {
 - "name": "APEXgRPCPolicy_Tasks",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "APEXgRPCPolicy_Tasks",
 - "version": "0.0.1"
 - },
 - "UUID": "4668db3d-6fe2-3885-8e47-f30cd0102f0a",
 - "description": "Generated description for concept referred to by key \"APEXgRPCPolicy_Tasks:0.0.1\""
 - }
 - },
 - {
 - "key": {
 - "name": "CDSActionIdentifiersType",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "CDSActionIdentifiersType",
 - "version": "0.0.1"
 - },
 - "UUID": "6e5fa19b-14df-37e3-a4ae-8c537e861a82",
 - "description": "Generated description for concept referred to by key \"CDSActionIdentifiersType:0.0.1\""
 - }
 - },
 - {
 - "key": {
 - "name": "CDSCreateSubscriptionPayloadType",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "CDSCreateSubscriptionPayloadType",
 - "version": "0.0.1"
 - },
 - "UUID": "8350ac5e-c157-38b9-9614-a0f93a830e60",
 - "description": "Generated description for concept referred to by key \"CDSCreateSubscriptionPayloadType:0.0.1\""
 - }
 - },
 - {
 - "key": {
 - "name": "CDSDeleteSubscriptionPayloadType",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "CDSDeleteSubscriptionPayloadType",
 - "version": "0.0.1"
 - },
 - "UUID": "12658406-9147-3c9d-a38c-5ad5e30b092b",
 - "description": "Generated description for concept referred to by key \"CDSDeleteSubscriptionPayloadType:0.0.1\""
 - }
 - },
 - {
 - "key": {
 - "name": "CDSRequestCommonHeaderType",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "CDSRequestCommonHeaderType",
 - "version": "0.0.1"
 - },
 - "UUID": "35590ac0-062c-39f1-8786-b4ff716e30b1",
 - "description": "Generated description for concept referred to by key \"CDSRequestCommonHeaderType:0.0.1\""
 - }
 - },
 - {
 - "key": {
 - "name": "CDSResponseCommonHeaderType",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "CDSResponseCommonHeaderType",
 - "version": "0.0.1"
 - },
 - "UUID": "dd7e1805-885a-350b-aaf9-ed541321ae3c",
 - "description": "Generated description for concept referred to by key \"CDSResponseCommonHeaderType:0.0.1\""
 - }
 - },
 - {
 - "key": {
 - "name": "CDSResponseEvent",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "CDSResponseEvent",
 - "version": "0.0.1"
 - },
 - "UUID": "15161037-9ac8-3223-820f-4e743562a345",
 - "description": "Generated description for concept referred to by key \"CDSResponseEvent:0.0.1\""
 - }
 - },
 - {
 - "key": {
 - "name": "CDSResponsePayloadType",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "CDSResponsePayloadType",
 - "version": "0.0.1"
 - },
 - "UUID": "97dc5f58-25bb-3c20-8d53-fdb70d7ca256",
 - "description": "Generated description for concept referred to by key \"CDSResponsePayloadType:0.0.1\""
 - }
 - },
 - {
 - "key": {
 - "name": "CDSResponsePolicy",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "CDSResponsePolicy",
 - "version": "0.0.1"
 - },
 - "UUID": "c28b05a8-7436-3ac0-82ca-6d5fc18c9584",
 - "description": "Generated description for concept referred to by key \"CDSResponsePolicy:0.0.1\""
 - }
 - },
 - {
 - "key": {
 - "name": "CDSResponseStatusEvent",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "CDSResponseStatusEvent",
 - "version": "0.0.1"
 - },
 - "UUID": "7986e21b-32f7-302e-9554-31f21b673493",
 - "description": "Generated description for concept referred to by key \"CDSResponseStatusEvent:0.0.1\""
 - }
 - },
 - {
 - "key": {
 - "name": "CDSResponseStatusType",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "CDSResponseStatusType",
 - "version": "0.0.1"
 - },
 - "UUID": "92b8a2cf-344e-3ce1-8cc0-2b7d3cb695fa",
 - "description": "Generated description for concept referred to by key \"CDSResponseStatusType:0.0.1\""
 - }
 - },
 - {
 - "key": {
 - "name": "CDSResponseTask",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "CDSResponseTask",
 - "version": "0.0.1"
 - },
 - "UUID": "d22c78a5-272c-391d-8083-28588280caf9",
 - "description": "Generated description for concept referred to by key \"CDSResponseTask:0.0.1\""
 - }
 - },
 - {
 - "key": {
 - "name": "CreateSubscriptionPayloadEvent",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "CreateSubscriptionPayloadEvent",
 - "version": "0.0.1"
 - },
 - "UUID": "92162397-1a8e-3a3f-a469-d2af7700af4a",
 - "description": "Generated description for concept referred to by key \"CreateSubscriptionPayloadEvent:0.0.1\""
 - }
 - },
 - {
 - "key": {
 - "name": "CreateSubscriptionPayloadTask",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "CreateSubscriptionPayloadTask",
 - "version": "0.0.1"
 - },
 - "UUID": "bc0c69f0-52ed-38ea-b468-ae4a6fd1730d",
 - "description": "Generated description for concept referred to by key \"CreateSubscriptionPayloadTask:0.0.1\""
 - }
 - },
 - {
 - "key": {
 - "name": "CreateSubscriptionRequestEvent",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "CreateSubscriptionRequestEvent",
 - "version": "0.0.1"
 - },
 - "UUID": "7cfcf843-337e-3f41-b755-5043cb0a08fc",
 - "description": "Generated description for concept referred to by key \"CreateSubscriptionRequestEvent:0.0.1\""
 - }
 - },
 - {
 - "key": {
 - "name": "CreateSubscriptionRequestTask",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "CreateSubscriptionRequestTask",
 - "version": "0.0.1"
 - },
 - "UUID": "89cb75e9-f06c-30d3-b4ff-698d45f63869",
 - "description": "Generated description for concept referred to by key \"CreateSubscriptionRequestTask:0.0.1\""
 - }
 - },
 - {
 - "key": {
 - "name": "DeleteSubscriptionPayloadEvent",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "DeleteSubscriptionPayloadEvent",
 - "version": "0.0.1"
 - },
 - "UUID": "994fa441-04ab-33bb-832d-1cd12ab5d074",
 - "description": "Generated description for concept referred to by key \"DeleteSubscriptionPayloadEvent:0.0.1\""
 - }
 - },
 - {
 - "key": {
 - "name": "DeleteSubscriptionPayloadTask",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "DeleteSubscriptionPayloadTask",
 - "version": "0.0.1"
 - },
 - "UUID": "0f519117-5fea-3e4b-941f-8f778100465f",
 - "description": "Generated description for concept referred to by key \"DeleteSubscriptionPayloadTask:0.0.1\""
 - }
 - },
 - {
 - "key": {
 - "name": "DeleteSubscriptionRequestEvent",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "DeleteSubscriptionRequestEvent",
 - "version": "0.0.1"
 - },
 - "UUID": "15d618d8-1689-3a05-89a5-05efa9388f65",
 - "description": "Generated description for concept referred to by key \"DeleteSubscriptionRequestEvent:0.0.1\""
 - }
 - },
 - {
 - "key": {
 - "name": "DeleteSubscriptionRequestTask",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "DeleteSubscriptionRequestTask",
 - "version": "0.0.1"
 - },
 - "UUID": "acb772fe-d442-39e3-98f9-b1080caf4150",
 - "description": "Generated description for concept referred to by key \"DeleteSubscriptionRequestTask:0.0.1\""
 - }
 - },
 - {
 - "key": {
 - "name": "PMSubscriptionAlbum",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "PMSubscriptionAlbum",
 - "version": "0.0.1"
 - },
 - "UUID": "c2bd6f0d-6854-317a-9be2-97c08338428c",
 - "description": "Generated description for concept referred to by key \"PMSubscriptionAlbum:0.0.1\""
 - }
 - },
 - {
 - "key": {
 - "name": "PMSubscriptionOutputEvent",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "PMSubscriptionOutputEvent",
 - "version": "0.0.1"
 - },
 - "UUID": "992b7819-9f69-3aa0-bb0f-6e45ea15ce05",
 - "description": "Generated description for concept referred to by key \"PMSubscriptionOutputEvent:0.0.1\""
 - }
 - },
 - {
 - "key": {
 - "name": "PMSubscriptionType",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "PMSubscriptionType",
 - "version": "0.0.1"
 - },
 - "UUID": "73c1c397-4fc3-357f-93b6-a8ad707fbaae",
 - "description": "Generated description for concept referred to by key \"PMSubscriptionType: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": "ReceivePMSubscriptionTask",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "ReceivePMSubscriptionTask",
 - "version": "0.0.1"
 - },
 - "UUID": "6c1c6c45-26e0-3591-94bf-679d20e283f4",
 - "description": "Generated description for concept referred to by key \"ReceivePMSubscriptionTask: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": "SubscriptionStatusType",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "SubscriptionStatusType",
 - "version": "0.0.1"
 - },
 - "UUID": "597643b1-9db1-31ce-85d0-e1c63c43b30b",
 - "description": "Generated description for concept referred to by key \"SubscriptionStatusType:0.0.1\""
 - }
 - },
 - {
 - "key": {
 - "name": "SubscriptionType",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "SubscriptionType",
 - "version": "0.0.1"
 - },
 - "UUID": "184547bb-7d64-3cb2-a273-d7185102c5ce",
 - "description": "Generated description for concept referred to by key \"SubscriptionType: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\""
 - }
 - },
 - {
 - "key": {
 - "name": "testPolicyB",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "testPolicyB",
 - "version": "0.0.1"
 - },
 - "UUID": "ead590a3-ba2e-3a01-b6e9-9329f5c8fee1",
 - "description": "Generated description for concept referred to by key \"testPolicyB:0.0.1\""
 - }
 - }
 - ]
 + {
 + "key": "DeleteSubscriptionPayload",
 + "value": {
 + "key": {
 + "parentKeyName": "ReceiveEventPolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "CreateOrDeleteState",
 + "localName": "DeleteSubscriptionPayload"
 + },
 + "outgoingEvent": {
 + "name": "DeleteSubscriptionPayloadEvent",
 + "version": "0.0.1"
 + },
 + "nextState": {
 + "parentKeyName": "ReceiveEventPolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "NULL",
 + "localName": "DeleteSubscription"
 + }
 + }
 }
 + ]
 + },
 + "contextAlbumReference": [
 + {
 + "name": "PMSubscriptionAlbum",
 + "version": "0.0.1"
 + }
 + ],
 + "taskSelectionLogic": {
 + "key": "TaskSelectionLogic",
 + "logicFlavour": "JAVASCRIPT",
 + "logic": "/*\n * ============LICENSE_START=======================================================\n * Copyright (C) 2020 Nordix Foundation.\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);\n\nvar pmSubscriptionInfo = executor.getContextAlbum(\"PMSubscriptionAlbum\").get(executor.inFields.get(\"albumID\").toString())\nvar changeType = pmSubscriptionInfo.get(\"changeType\").toString()\n\nif (\"CREATE\".equals(changeType)) {\n executor.subject.getTaskKey(\"CreateSubscriptionPayloadTask\").copyTo(executor.selectedTask);\n}\nelse if (\"DELETE\".equals(changeType)) {\n executor.subject.getTaskKey(\"DeleteSubscriptionPayloadTask\").copyTo(executor.selectedTask);\n}\n\ntrue;"
 + },
 + "stateFinalizerLogicMap": {
 + "entry": []
 + },
 + "defaultTask": {
 + "name": "CreateSubscriptionPayloadTask",
 + "version": "0.0.1"
 },
 - "policies": {
 - "key": {
 - "name": "APEXgRPCPolicy_Policies",
 + "taskReferences": {
 + "entry": [
 + {
 + "key": {
 + "name": "CreateSubscriptionPayloadTask",
 "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "parentKeyName": "ReceiveEventPolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "CreateOrDeleteState",
 + "localName": "ReceiveEventPolicy"
 + },
 + "outputType": "DIRECT",
 + "output": {
 + "parentKeyName": "ReceiveEventPolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "CreateOrDeleteState",
 + "localName": "CreateSubscriptionPayload"
 + }
 + }
 },
 - "policyMap": {
 - "entry": [
 - {
 - "key": {
 - "name": "CDSResponsePolicy",
 - "version": "0.0.1"
 - },
 - "value": {
 - "policyKey": {
 - "name": "CDSResponsePolicy",
 - "version": "0.0.1"
 - },
 - "template": "Freestyle",
 - "state": {
 - "entry": [
 - {
 - "key": "CDSResponseState",
 - "value": {
 - "stateKey": {
 - "parentKeyName": "CDSResponsePolicy",
 - "parentKeyVersion": "0.0.1",
 - "parentLocalName": "NULL",
 - "localName": "CDSResponseState"
 - },
 - "trigger": {
 - "name": "CDSResponseEvent",
 - "version": "0.0.1"
 - },
 - "stateOutputs": {
 - "entry": [
 - {
 - "key": "ResponseOutput",
 - "value": {
 - "key": {
 - "parentKeyName": "CDSResponsePolicy",
 - "parentKeyVersion": "0.0.1",
 - "parentLocalName": "CDSResponseState",
 - "localName": "ResponseOutput"
 - },
 - "outgoingEvent": {
 - "name": "CDSResponseStatusEvent",
 - "version": "0.0.1"
 - },
 - "nextState": {
 - "parentKeyName": "NULL",
 - "parentKeyVersion": "0.0.0",
 - "parentLocalName": "NULL",
 - "localName": "NULL"
 - }
 - }
 - }
 - ]
 - },
 - "contextAlbumReference": [],
 - "taskSelectionLogic": {
 - "key": "NULL",
 - "logicFlavour": "UNDEFINED",
 - "logic": ""
 - },
 - "stateFinalizerLogicMap": {
 - "entry": []
 - },
 - "defaultTask": {
 - "name": "CDSResponseTask",
 - "version": "0.0.1"
 - },
 - "taskReferences": {
 - "entry": [
 - {
 - "key": {
 - "name": "CDSResponseTask",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "parentKeyName": "CDSResponsePolicy",
 - "parentKeyVersion": "0.0.1",
 - "parentLocalName": "CDSResponseState",
 - "localName": "CDSResponsePolicy"
 - },
 - "outputType": "DIRECT",
 - "output": {
 - "parentKeyName": "CDSResponsePolicy",
 - "parentKeyVersion": "0.0.1",
 - "parentLocalName": "CDSResponseState",
 - "localName": "ResponseOutput"
 - }
 - }
 - }
 - ]
 - }
 - }
 - }
 - ]
 - },
 - "firstState": "CDSResponseState"
 - }
 - },
 - {
 - "key": {
 - "name": "ReceiveEventPolicy",
 - "version": "0.0.1"
 - },
 - "value": {
 - "policyKey": {
 - "name": "ReceiveEventPolicy",
 - "version": "0.0.1"
 - },
 - "template": "Freestyle",
 - "state": {
 - "entry": [
 - {
 - "key": "CreateOrDeleteState",
 - "value": {
 - "stateKey": {
 - "parentKeyName": "ReceiveEventPolicy",
 - "parentKeyVersion": "0.0.1",
 - "parentLocalName": "NULL",
 - "localName": "CreateOrDeleteState"
 - },
 - "trigger": {
 - "name": "PMSubscriptionOutputEvent",
 - "version": "0.0.1"
 - },
 - "stateOutputs": {
 - "entry": [
 - {
 - "key": "CreateSubscriptionPayload",
 - "value": {
 - "key": {
 - "parentKeyName": "ReceiveEventPolicy",
 - "parentKeyVersion": "0.0.1",
 - "parentLocalName": "CreateOrDeleteState",
 - "localName": "CreateSubscriptionPayload"
 - },
 - "outgoingEvent": {
 - "name": "CreateSubscriptionPayloadEvent",
 - "version": "0.0.1"
 - },
 - "nextState": {
 - "parentKeyName": "ReceiveEventPolicy",
 - "parentKeyVersion": "0.0.1",
 - "parentLocalName": "NULL",
 - "localName": "CreateSubscription"
 - }
 - }
 - },
 - {
 - "key": "DeleteSubscriptionPayload",
 - "value": {
 - "key": {
 - "parentKeyName": "ReceiveEventPolicy",
 - "parentKeyVersion": "0.0.1",
 - "parentLocalName": "CreateOrDeleteState",
 - "localName": "DeleteSubscriptionPayload"
 - },
 - "outgoingEvent": {
 - "name": "DeleteSubscriptionPayloadEvent",
 - "version": "0.0.1"
 - },
 - "nextState": {
 - "parentKeyName": "ReceiveEventPolicy",
 - "parentKeyVersion": "0.0.1",
 - "parentLocalName": "NULL",
 - "localName": "DeleteSubscription"
 - }
 - }
 - }
 - ]
 - },
 - "contextAlbumReference": [
 - {
 - "name": "PMSubscriptionAlbum",
 - "version": "0.0.1"
 - }
 - ],
 - "taskSelectionLogic": {
 - "key": "TaskSelectionLogic",
 - "logicFlavour": "JAVASCRIPT",
 - "logic": "/*\n * ============LICENSE_START=======================================================\n * Copyright (C) 2020 Nordix Foundation.\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);\n\nvar pmSubscriptionInfo = executor.getContextAlbum(\"PMSubscriptionAlbum\").get(executor.inFields.get(\"albumID\").toString())\nvar changeType = pmSubscriptionInfo.get(\"changeType\").toString()\n\nif (\"CREATE\".equals(changeType)) {\n executor.subject.getTaskKey(\"CreateSubscriptionPayloadTask\").copyTo(executor.selectedTask);\n}\nelse if (\"DELETE\".equals(changeType)) {\n executor.subject.getTaskKey(\"DeleteSubscriptionPayloadTask\").copyTo(executor.selectedTask);\n}\n\ntrue;"
 - },
 - "stateFinalizerLogicMap": {
 - "entry": []
 - },
 - "defaultTask": {
 - "name": "CreateSubscriptionPayloadTask",
 - "version": "0.0.1"
 - },
 - "taskReferences": {
 - "entry": [
 - {
 - "key": {
 - "name": "CreateSubscriptionPayloadTask",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "parentKeyName": "ReceiveEventPolicy",
 - "parentKeyVersion": "0.0.1",
 - "parentLocalName": "CreateOrDeleteState",
 - "localName": "ReceiveEventPolicy"
 - },
 - "outputType": "DIRECT",
 - "output": {
 - "parentKeyName": "ReceiveEventPolicy",
 - "parentKeyVersion": "0.0.1",
 - "parentLocalName": "CreateOrDeleteState",
 - "localName": "CreateSubscriptionPayload"
 - }
 - }
 - },
 - {
 - "key": {
 - "name": "DeleteSubscriptionPayloadTask",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "parentKeyName": "ReceiveEventPolicy",
 - "parentKeyVersion": "0.0.1",
 - "parentLocalName": "CreateOrDeleteState",
 - "localName": "ReceiveEventPolicy"
 - },
 - "outputType": "DIRECT",
 - "output": {
 - "parentKeyName": "ReceiveEventPolicy",
 - "parentKeyVersion": "0.0.1",
 - "parentLocalName": "CreateOrDeleteState",
 - "localName": "DeleteSubscriptionPayload"
 - }
 - }
 - }
 - ]
 - }
 - }
 - },
 - {
 - "key": "CreateSubscription",
 - "value": {
 - "stateKey": {
 - "parentKeyName": "ReceiveEventPolicy",
 - "parentKeyVersion": "0.0.1",
 - "parentLocalName": "NULL",
 - "localName": "CreateSubscription"
 - },
 - "trigger": {
 - "name": "CreateSubscriptionPayloadEvent",
 - "version": "0.0.1"
 - },
 - "stateOutputs": {
 - "entry": [
 - {
 - "key": "IssueCreateSubscriptionRequestOutput",
 - "value": {
 - "key": {
 - "parentKeyName": "ReceiveEventPolicy",
 - "parentKeyVersion": "0.0.1",
 - "parentLocalName": "CreateSubscription",
 - "localName": "IssueCreateSubscriptionRequestOutput"
 - },
 - "outgoingEvent": {
 - "name": "CreateSubscriptionRequestEvent",
 - "version": "0.0.1"
 - },
 - "nextState": {
 - "parentKeyName": "NULL",
 - "parentKeyVersion": "0.0.0",
 - "parentLocalName": "NULL",
 - "localName": "NULL"
 - }
 - }
 - }
 - ]
 - },
 - "contextAlbumReference": [
 - {
 - "name": "PMSubscriptionAlbum",
 - "version": "0.0.1"
 - }
 - ],
 - "taskSelectionLogic": {
 - "key": "NULL",
 - "logicFlavour": "UNDEFINED",
 - "logic": ""
 - },
 - "stateFinalizerLogicMap": {
 - "entry": []
 - },
 - "defaultTask": {
 - "name": "CreateSubscriptionRequestTask",
 - "version": "0.0.1"
 - },
 - "taskReferences": {
 - "entry": [
 - {
 - "key": {
 - "name": "CreateSubscriptionRequestTask",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "parentKeyName": "ReceiveEventPolicy",
 - "parentKeyVersion": "0.0.1",
 - "parentLocalName": "CreateSubscription",
 - "localName": "ReceiveEventPolicy"
 - },
 - "outputType": "DIRECT",
 - "output": {
 - "parentKeyName": "ReceiveEventPolicy",
 - "parentKeyVersion": "0.0.1",
 - "parentLocalName": "CreateSubscription",
 - "localName": "IssueCreateSubscriptionRequestOutput"
 - }
 - }
 - }
 - ]
 - }
 - }
 - },
 - {
 - "key": "DeleteSubscription",
 - "value": {
 - "stateKey": {
 - "parentKeyName": "ReceiveEventPolicy",
 - "parentKeyVersion": "0.0.1",
 - "parentLocalName": "NULL",
 - "localName": "DeleteSubscription"
 - },
 - "trigger": {
 - "name": "DeleteSubscriptionPayloadEvent",
 - "version": "0.0.1"
 - },
 - "stateOutputs": {
 - "entry": [
 - {
 - "key": "IssueDeleteSubscriptionRequestOutput",
 - "value": {
 - "key": {
 - "parentKeyName": "ReceiveEventPolicy",
 - "parentKeyVersion": "0.0.1",
 - "parentLocalName": "DeleteSubscription",
 - "localName": "IssueDeleteSubscriptionRequestOutput"
 - },
 - "outgoingEvent": {
 - "name": "DeleteSubscriptionRequestEvent",
 - "version": "0.0.1"
 - },
 - "nextState": {
 - "parentKeyName": "NULL",
 - "parentKeyVersion": "0.0.0",
 - "parentLocalName": "NULL",
 - "localName": "NULL"
 - }
 - }
 - }
 - ]
 - },
 - "contextAlbumReference": [
 - {
 - "name": "PMSubscriptionAlbum",
 - "version": "0.0.1"
 - }
 - ],
 - "taskSelectionLogic": {
 - "key": "NULL",
 - "logicFlavour": "UNDEFINED",
 - "logic": ""
 - },
 - "stateFinalizerLogicMap": {
 - "entry": []
 - },
 - "defaultTask": {
 - "name": "DeleteSubscriptionRequestTask",
 - "version": "0.0.1"
 - },
 - "taskReferences": {
 - "entry": [
 - {
 - "key": {
 - "name": "DeleteSubscriptionRequestTask",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "parentKeyName": "ReceiveEventPolicy",
 - "parentKeyVersion": "0.0.1",
 - "parentLocalName": "DeleteSubscription",
 - "localName": "ReceiveEventPolicy"
 - },
 - "outputType": "DIRECT",
 - "output": {
 - "parentKeyName": "ReceiveEventPolicy",
 - "parentKeyVersion": "0.0.1",
 - "parentLocalName": "DeleteSubscription",
 - "localName": "IssueDeleteSubscriptionRequestOutput"
 - }
 - }
 - }
 - ]
 - }
 - }
 - },
 - {
 - "key": "ReceiveSubscriptionState",
 - "value": {
 - "stateKey": {
 - "parentKeyName": "ReceiveEventPolicy",
 - "parentKeyVersion": "0.0.1",
 - "parentLocalName": "NULL",
 - "localName": "ReceiveSubscriptionState"
 - },
 - "trigger": {
 - "name": "testPolicyB",
 - "version": "0.0.1"
 - },
 - "stateOutputs": {
 - "entry": [
 - {
 - "key": "ReceivePMSubscriptionOutput",
 - "value": {
 - "key": {
 - "parentKeyName": "ReceiveEventPolicy",
 - "parentKeyVersion": "0.0.1",
 - "parentLocalName": "ReceiveSubscriptionState",
 - "localName": "ReceivePMSubscriptionOutput"
 - },
 - "outgoingEvent": {
 - "name": "PMSubscriptionOutputEvent",
 - "version": "0.0.1"
 - },
 - "nextState": {
 - "parentKeyName": "ReceiveEventPolicy",
 - "parentKeyVersion": "0.0.1",
 - "parentLocalName": "NULL",
 - "localName": "CreateOrDeleteState"
 - }
 - }
 - }
 - ]
 - },
 - "contextAlbumReference": [
 - {
 - "name": "PMSubscriptionAlbum",
 - "version": "0.0.1"
 - }
 - ],
 - "taskSelectionLogic": {
 - "key": "NULL",
 - "logicFlavour": "UNDEFINED",
 - "logic": ""
 - },
 - "stateFinalizerLogicMap": {
 - "entry": []
 - },
 - "defaultTask": {
 - "name": "ReceivePMSubscriptionTask",
 - "version": "0.0.1"
 - },
 - "taskReferences": {
 - "entry": [
 - {
 - "key": {
 - "name": "ReceivePMSubscriptionTask",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "parentKeyName": "ReceiveEventPolicy",
 - "parentKeyVersion": "0.0.1",
 - "parentLocalName": "ReceiveSubscriptionState",
 - "localName": "ReceiveEventPolicy"
 - },
 - "outputType": "DIRECT",
 - "output": {
 - "parentKeyName": "ReceiveEventPolicy",
 - "parentKeyVersion": "0.0.1",
 - "parentLocalName": "ReceiveSubscriptionState",
 - "localName": "ReceivePMSubscriptionOutput"
 - }
 - }
 - }
 - ]
 - }
 - }
 - }
 - ]
 - },
 - "firstState": "ReceiveSubscriptionState"
 - }
 - }
 - ]
 + {
 + "key": {
 + "name": "DeleteSubscriptionPayloadTask",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "parentKeyName": "ReceiveEventPolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "CreateOrDeleteState",
 + "localName": "ReceiveEventPolicy"
 + },
 + "outputType": "DIRECT",
 + "output": {
 + "parentKeyName": "ReceiveEventPolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "CreateOrDeleteState",
 + "localName": "DeleteSubscriptionPayload"
 + }
 + }
 }
 + ]
 + }
 + }
 + },
 + {
 + "key": "CreateSubscription",
 + "value": {
 + "stateKey": {
 + "parentKeyName": "ReceiveEventPolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "NULL",
 + "localName": "CreateSubscription"
 },
 - "tasks": {
 - "key": {
 - "name": "APEXgRPCPolicy_Tasks",
 - "version": "0.0.1"
 - },
 - "taskMap": {
 - "entry": [
 - {
 - "key": {
 - "name": "CDSResponseTask",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "CDSResponseTask",
 - "version": "0.0.1"
 - },
 - "inputFields": {
 - "entry": [
 - {
 - "key": "actionIdentifiers",
 - "value": {
 - "key": "actionIdentifiers",
 - "fieldSchemaKey": {
 - "name": "CDSActionIdentifiersType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - },
 - {
 - "key": "commonHeader",
 - "value": {
 - "key": "commonHeader",
 - "fieldSchemaKey": {
 - "name": "CDSResponseCommonHeaderType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - },
 - {
 - "key": "payload",
 - "value": {
 - "key": "payload",
 - "fieldSchemaKey": {
 - "name": "CDSResponsePayloadType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - },
 - {
 - "key": "status",
 - "value": {
 - "key": "status",
 - "fieldSchemaKey": {
 - "name": "CDSResponseStatusType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - }
 - ]
 - },
 - "outputFields": {
 - "entry": [
 - {
 - "key": "status",
 - "value": {
 - "key": "status",
 - "fieldSchemaKey": {
 - "name": "SubscriptionStatusType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - }
 - ]
 - },
 - "taskParameters": {
 - "entry": []
 - },
 - "contextAlbumReference": [
 - {
 - "name": "PMSubscriptionAlbum",
 - "version": "0.0.1"
 - }
 - ],
 - "taskLogic": {
 - "key": "TaskLogic",
 - "logicFlavour": "JAVASCRIPT",
 - "logic": "/*\n * ============LICENSE_START=======================================================\n * Copyright (C) 2020 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\n\nvar uuidType = java.util.UUID;\n\nvar albumID = uuidType.fromString(\"d0050623-18e5-46c9-9298-9a567990cd7c\");\n\nvar pmSubscriptionInfo = executor.getContextAlbum(\"PMSubscriptionAlbum\").get(albumID.toString());\n\nvar responseStatus = executor.subject.getOutFieldSchemaHelper(\"status\").createNewInstance();\n\nresponseStatus.put(\"subscriptionName\", pmSubscriptionInfo.get(\"subscription\").get(\"subscriptionName\"))\nresponseStatus.put(\"nfName\", pmSubscriptionInfo.get(\"nfName\"))\nresponseStatus.put(\"changeType\", pmSubscriptionInfo.get(\"changeType\"))\n\nvar response = executor.inFields.get(\"payload\")\n\nif (\"failure\".equals(response.get(\"create_DasH_subscription_DasH_response\").get(\"odl_DasH_response\").get(\"status\"))) {\n responseStatus.put(\"message\", \"failed\")\n} else {\n responseStatus.put(\"message\", \"success\")\n}\n\nexecutor.outFields.put(\"status\", responseStatus)\n\ntrue;"
 - }
 - }
 - },
 - {
 - "key": {
 - "name": "CreateSubscriptionPayloadTask",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "CreateSubscriptionPayloadTask",
 - "version": "0.0.1"
 - },
 - "inputFields": {
 - "entry": [
 - {
 - "key": "albumID",
 - "value": {
 - "key": "albumID",
 - "fieldSchemaKey": {
 - "name": "UUIDType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - }
 - ]
 - },
 - "outputFields": {
 - "entry": [
 - {
 - "key": "albumID",
 - "value": {
 - "key": "albumID",
 - "fieldSchemaKey": {
 - "name": "UUIDType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - },
 - {
 - "key": "payload",
 - "value": {
 - "key": "payload",
 - "fieldSchemaKey": {
 - "name": "CDSCreateSubscriptionPayloadType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - }
 - ]
 - },
 - "taskParameters": {
 - "entry": []
 - },
 - "contextAlbumReference": [
 - {
 - "name": "PMSubscriptionAlbum",
 - "version": "0.0.1"
 - }
 - ],
 - "taskLogic": {
 - "key": "TaskLogic",
 - "logicFlavour": "JAVASCRIPT",
 - "logic": "/*\n * ============LICENSE_START=======================================================\n * Copyright (C) 2020 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);\n\nvar pmSubscriptionInfo = executor.getContextAlbum(\"PMSubscriptionAlbum\").get(executor.inFields.get(\"albumID\").toString())\n\nvar payloadProperties = executor.subject.getOutFieldSchemaHelper(\"payload\").createNewSubInstance(\"create_DasH_subscription_DasH_properties_record\");\n\npayloadProperties.put(\"nfName\", pmSubscriptionInfo.get(\"nfName\"))\npayloadProperties.put(\"subscriptionName\", pmSubscriptionInfo.get(\"subscription\").get(\"subscriptionName\"))\npayloadProperties.put(\"administrativeState\", pmSubscriptionInfo.get(\"subscription\").get(\"administrativeState\"))\npayloadProperties.put(\"fileBasedGP\", pmSubscriptionInfo.get(\"subscription\").get(\"fileBasedGP\").toString())\npayloadProperties.put(\"fileLocation\", pmSubscriptionInfo.get(\"subscription\").get(\"fileLocation\"))\npayloadProperties.put(\"measurementGroups\", pmSubscriptionInfo.get(\"subscription\").get(\"measurementGroups\"))\n\nvar payloadEntry = executor.subject.getOutFieldSchemaHelper(\"payload\").createNewSubInstance(\"CDSRequestPayloadEntry\");\npayloadEntry.put(\"create_DasH_subscription_DasH_properties\", payloadProperties)\n\nvar payload = executor.subject.getOutFieldSchemaHelper(\"payload\").createNewInstance();\npayload.put(\"create_DasH_subscription_DasH_request\", payloadEntry);\n\nexecutor.outFields.put(\"albumID\", executor.inFields.get(\"albumID\"))\nexecutor.outFields.put(\"payload\", payload);\n\nexecutor.logger.info(\"Sending Create Subscription Event to CDS\")\n\ntrue;"
 - }
 - }
 - },
 - {
 - "key": {
 - "name": "CreateSubscriptionRequestTask",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "CreateSubscriptionRequestTask",
 - "version": "0.0.1"
 - },
 - "inputFields": {
 - "entry": [
 - {
 - "key": "albumID",
 - "value": {
 - "key": "albumID",
 - "fieldSchemaKey": {
 - "name": "UUIDType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - },
 - {
 - "key": "payload",
 - "value": {
 - "key": "payload",
 - "fieldSchemaKey": {
 - "name": "CDSCreateSubscriptionPayloadType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - }
 - ]
 - },
 - "outputFields": {
 - "entry": [
 - {
 - "key": "actionIdentifiers",
 - "value": {
 - "key": "actionIdentifiers",
 - "fieldSchemaKey": {
 - "name": "CDSActionIdentifiersType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - },
 - {
 - "key": "commonHeader",
 - "value": {
 - "key": "commonHeader",
 - "fieldSchemaKey": {
 - "name": "CDSRequestCommonHeaderType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - },
 - {
 - "key": "payload",
 - "value": {
 - "key": "payload",
 - "fieldSchemaKey": {
 - "name": "CDSCreateSubscriptionPayloadType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - }
 - ]
 - },
 - "taskParameters": {
 - "entry": []
 - },
 - "contextAlbumReference": [
 - {
 - "name": "PMSubscriptionAlbum",
 - "version": "0.0.1"
 - }
 - ],
 - "taskLogic": {
 - "key": "TaskLogic",
 - "logicFlavour": "JAVASCRIPT",
 - "logic": "/*\n * ============LICENSE_START=======================================================\n * Copyright (C) 2020 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);\n\nvar pmSubscriptionInfo = executor.getContextAlbum(\"PMSubscriptionAlbum\").get(executor.inFields.get(\"albumID\").toString())\nvar payload = executor.inFields.get(\"payload\")\nvar actionName = \"create-subscription\"\n\nvar commonHeader = executor.subject.getOutFieldSchemaHelper(\"commonHeader\").createNewInstance();\ncommonHeader.put(\"originatorId\", \"sdnc\");\ncommonHeader.put(\"requestId\", \"123456-1000\");\ncommonHeader.put(\"subRequestId\", \"sub-123456-1000\");\n\nvar actionIdentifiers = executor.subject.getOutFieldSchemaHelper(\"actionIdentifiers\").createNewInstance();\nactionIdentifiers.put(\"actionName\", actionName);\nactionIdentifiers.put(\"blueprintName\", \"pm_control\");\nactionIdentifiers.put(\"blueprintVersion\", \"1.0.0\");\nactionIdentifiers.put(\"mode\", \"sync\");\n\nexecutor.outFields.put(\"commonHeader\", commonHeader);\nexecutor.outFields.put(\"actionIdentifiers\", actionIdentifiers);\nexecutor.outFields.put(\"payload\", payload);\n\nexecutor.logger.info(\"Sending Activate Subscription Event to CDS\")\n\ntrue;"
 - }
 - }
 - },
 - {
 - "key": {
 - "name": "DeleteSubscriptionPayloadTask",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "DeleteSubscriptionPayloadTask",
 - "version": "0.0.1"
 - },
 - "inputFields": {
 - "entry": [
 - {
 - "key": "albumID",
 - "value": {
 - "key": "albumID",
 - "fieldSchemaKey": {
 - "name": "UUIDType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - }
 - ]
 - },
 - "outputFields": {
 - "entry": [
 - {
 - "key": "albumID",
 - "value": {
 - "key": "albumID",
 - "fieldSchemaKey": {
 - "name": "UUIDType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - },
 - {
 - "key": "payload",
 - "value": {
 - "key": "payload",
 - "fieldSchemaKey": {
 - "name": "CDSDeleteSubscriptionPayloadType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - }
 - ]
 - },
 - "taskParameters": {
 - "entry": []
 - },
 - "contextAlbumReference": [
 - {
 - "name": "PMSubscriptionAlbum",
 - "version": "0.0.1"
 - }
 - ],
 - "taskLogic": {
 - "key": "TaskLogic",
 - "logicFlavour": "JAVASCRIPT",
 - "logic": "/*\n * ============LICENSE_START=======================================================\n * Copyright (C) 2020 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);\n\nvar pmSubscriptionInfo = executor.getContextAlbum(\"PMSubscriptionAlbum\").get(executor.inFields.get(\"albumID\").toString())\n\nvar payloadProperties = executor.subject.getOutFieldSchemaHelper(\"payload\").createNewSubInstance(\"delete_DasH_subscription_DasH_properties_record\");\n\npayloadProperties.put(\"nfName\", pmSubscriptionInfo.get(\"nfName\"))\npayloadProperties.put(\"subscriptionName\", pmSubscriptionInfo.get(\"subscription\").get(\"subscriptionName\"))\npayloadProperties.put(\"administrativeState\", pmSubscriptionInfo.get(\"subscription\").get(\"administrativeState\"))\npayloadProperties.put(\"fileBasedGP\", pmSubscriptionInfo.get(\"subscription\").get(\"fileBasedGP\").toString())\npayloadProperties.put(\"fileLocation\", pmSubscriptionInfo.get(\"subscription\").get(\"fileLocation\"))\npayloadProperties.put(\"measurementGroups\", pmSubscriptionInfo.get(\"subscription\").get(\"measurementGroups\"))\n\nvar payloadEntry = executor.subject.getOutFieldSchemaHelper(\"payload\").createNewSubInstance(\"CDSRequestPayloadEntry\");\npayloadEntry.put(\"delete_DasH_subscription_DasH_properties\", payloadProperties)\n\nvar payload = executor.subject.getOutFieldSchemaHelper(\"payload\").createNewInstance();\npayload.put(\"delete_DasH_subscription_DasH_request\", payloadEntry);\n\nexecutor.outFields.put(\"albumID\", executor.inFields.get(\"albumID\"))\nexecutor.outFields.put(\"payload\", payload);\n\nexecutor.logger.info(\"Sending delete Subscription Event to CDS\")\n\ntrue;"
 - }
 - }
 - },
 - {
 - "key": {
 - "name": "DeleteSubscriptionRequestTask",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "DeleteSubscriptionRequestTask",
 - "version": "0.0.1"
 - },
 - "inputFields": {
 - "entry": [
 - {
 - "key": "albumID",
 - "value": {
 - "key": "albumID",
 - "fieldSchemaKey": {
 - "name": "UUIDType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - },
 - {
 - "key": "payload",
 - "value": {
 - "key": "payload",
 - "fieldSchemaKey": {
 - "name": "CDSDeleteSubscriptionPayloadType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - }
 - ]
 - },
 - "outputFields": {
 - "entry": [
 - {
 - "key": "actionIdentifiers",
 - "value": {
 - "key": "actionIdentifiers",
 - "fieldSchemaKey": {
 - "name": "CDSActionIdentifiersType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - },
 - {
 - "key": "commonHeader",
 - "value": {
 - "key": "commonHeader",
 - "fieldSchemaKey": {
 - "name": "CDSRequestCommonHeaderType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - },
 - {
 - "key": "payload",
 - "value": {
 - "key": "payload",
 - "fieldSchemaKey": {
 - "name": "CDSDeleteSubscriptionPayloadType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - }
 - ]
 - },
 - "taskParameters": {
 - "entry": []
 - },
 - "contextAlbumReference": [
 - {
 - "name": "PMSubscriptionAlbum",
 - "version": "0.0.1"
 - }
 - ],
 - "taskLogic": {
 - "key": "TaskLogic",
 - "logicFlavour": "JAVASCRIPT",
 - "logic": "/*\n * ============LICENSE_START=======================================================\n * Copyright (C) 2020 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);\n\nvar pmSubscriptionInfo = executor.getContextAlbum(\"PMSubscriptionAlbum\").get(executor.inFields.get(\"albumID\").toString())\nvar payload = executor.inFields.get(\"payload\")\nvar actionName = \"delete-subscription\"\n\nvar commonHeader = executor.subject.getOutFieldSchemaHelper(\"commonHeader\").createNewInstance();\ncommonHeader.put(\"originatorId\", \"sdnc\");\ncommonHeader.put(\"requestId\", \"123456-1000\");\ncommonHeader.put(\"subRequestId\", \"sub-123456-1000\");\n\nvar actionIdentifiers = executor.subject.getOutFieldSchemaHelper(\"actionIdentifiers\").createNewInstance();\nactionIdentifiers.put(\"actionName\", actionName);\nactionIdentifiers.put(\"blueprintName\", \"pm_control\");\nactionIdentifiers.put(\"blueprintVersion\", \"1.0.0\");\nactionIdentifiers.put(\"mode\", \"sync\");\n\nexecutor.outFields.put(\"commonHeader\", commonHeader);\nexecutor.outFields.put(\"actionIdentifiers\", actionIdentifiers);\nexecutor.outFields.put(\"payload\", payload);\n\nexecutor.logger.info(\"Sending Deactivate Subscription Event to CDS\")\n\ntrue;"
 - }
 - }
 - },
 - {
 - "key": {
 - "name": "ReceivePMSubscriptionTask",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "ReceivePMSubscriptionTask",
 - "version": "0.0.1"
 - },
 - "inputFields": {
 - "entry": [
 - {
 - "key": "changeType",
 - "value": {
 - "key": "changeType",
 - "fieldSchemaKey": {
 - "name": "SimpleStringType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - },
 - {
 - "key": "closedLoopControlName",
 - "value": {
 - "key": "closedLoopControlName",
 - "fieldSchemaKey": {
 - "name": "SimpleStringType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - },
 - {
 - "key": "nfName",
 - "value": {
 - "key": "nfName",
 - "fieldSchemaKey": {
 - "name": "SimpleStringType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - },
 - {
 - "key": "policyName",
 - "value": {
 - "key": "policyName",
 - "fieldSchemaKey": {
 - "name": "SimpleStringType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - },
 - {
 - "key": "subscription",
 - "value": {
 - "key": "subscription",
 - "fieldSchemaKey": {
 - "name": "SubscriptionType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - }
 - ]
 - },
 - "outputFields": {
 - "entry": [
 - {
 - "key": "albumID",
 - "value": {
 - "key": "albumID",
 - "fieldSchemaKey": {
 - "name": "UUIDType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - }
 - ]
 - },
 - "taskParameters": {
 - "entry": []
 - },
 - "contextAlbumReference": [
 - {
 - "name": "PMSubscriptionAlbum",
 - "version": "0.0.1"
 - }
 - ],
 - "taskLogic": {
 - "key": "TaskLogic",
 - "logicFlavour": "JAVASCRIPT",
 - "logic": "/*\n * ============LICENSE_START=======================================================\n * Copyright (C) 2020 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 */\nvar uuidType = java.util.UUID;\n\n\n//albumID will be used to fetch info from our album later\nvar albumID = uuidType.fromString(\"d0050623-18e5-46c9-9298-9a567990cd7c\");\nvar pmSubscriptionInfo = executor.getContextAlbum(\"PMSubscriptionAlbum\").getSchemaHelper().createNewInstance();\nvar returnValue = true;;\n\nif(executor.inFields.get(\"policyName\") != null) {\n var changeType = executor.inFields.get(\"changeType\")\n var nfName = executor.inFields.get(\"nfName\")\n var policyName = executor.inFields.get(\"policyName\")\n var closedLoopControlName = executor.inFields.get(\"closedLoopControlName\")\n var subscription = executor.inFields.get(\"subscription\")\n\n pmSubscriptionInfo.put(\"nfName\", executor.inFields.get(\"nfName\"));\n pmSubscriptionInfo.put(\"changeType\", executor.inFields.get(\"changeType\"))\n pmSubscriptionInfo.put(\"policyName\", executor.inFields.get(\"policyName\"))\n pmSubscriptionInfo.put(\"closedLoopControlName\", executor.inFields.get(\"closedLoopControlName\"))\n pmSubscriptionInfo.put(\"subscription\", subscription)\n\n executor.getContextAlbum(\"PMSubscriptionAlbum\").put(albumID.toString(), pmSubscriptionInfo);\n\n executor.outFields.put(\"albumID\", albumID)\n} else {\n executor.message = \"Received invalid event\"\n returnValue = false;\n}\nreturnValue;"
 - }
 - }
 - }
 - ]
 + "trigger": {
 + "name": "CreateSubscriptionPayloadEvent",
 + "version": "0.0.1"
 + },
 + "stateOutputs": {
 + "entry": [
 + {
 + "key": "IssueCreateSubscriptionRequestOutput",
 + "value": {
 + "key": {
 + "parentKeyName": "ReceiveEventPolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "CreateSubscription",
 + "localName": "IssueCreateSubscriptionRequestOutput"
 + },
 + "outgoingEvent": {
 + "name": "CreateSubscriptionRequestEvent",
 + "version": "0.0.1"
 + },
 + "nextState": {
 + "parentKeyName": "NULL",
 + "parentKeyVersion": "0.0.0",
 + "parentLocalName": "NULL",
 + "localName": "NULL"
 + }
 + }
 }
 + ]
 + },
 + "contextAlbumReference": [
 + {
 + "name": "PMSubscriptionAlbum",
 + "version": "0.0.1"
 + }
 + ],
 + "taskSelectionLogic": {
 + "key": "NULL",
 + "logicFlavour": "UNDEFINED",
 + "logic": ""
 + },
 + "stateFinalizerLogicMap": {
 + "entry": []
 + },
 + "defaultTask": {
 + "name": "CreateSubscriptionRequestTask",
 + "version": "0.0.1"
 },
 - "events": {
 - "key": {
 - "name": "APEXgRPCPolicy_Events",
 + "taskReferences": {
 + "entry": [
 + {
 + "key": {
 + "name": "CreateSubscriptionRequestTask",
 "version": "0.0.1"
 - },
 - "eventMap": {
 - "entry": [
 - {
 - "key": {
 - "name": "CDSResponseEvent",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "CDSResponseEvent",
 - "version": "0.0.1"
 - },
 - "nameSpace": "org.onap.policy.apex.onap.pmcontrol",
 - "source": "CDS",
 - "target": "APEX",
 - "parameter": {
 - "entry": [
 - {
 - "key": "actionIdentifiers",
 - "value": {
 - "key": "actionIdentifiers",
 - "fieldSchemaKey": {
 - "name": "CDSActionIdentifiersType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - },
 - {
 - "key": "commonHeader",
 - "value": {
 - "key": "commonHeader",
 - "fieldSchemaKey": {
 - "name": "CDSResponseCommonHeaderType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - },
 - {
 - "key": "payload",
 - "value": {
 - "key": "payload",
 - "fieldSchemaKey": {
 - "name": "CDSResponsePayloadType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - },
 - {
 - "key": "status",
 - "value": {
 - "key": "status",
 - "fieldSchemaKey": {
 - "name": "CDSResponseStatusType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - }
 - ]
 - }
 - }
 - },
 - {
 - "key": {
 - "name": "CDSResponseStatusEvent",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "CDSResponseStatusEvent",
 - "version": "0.0.1"
 - },
 - "nameSpace": "org.onap.policy.apex.onap.pmcontrol",
 - "source": "APEX",
 - "target": "DCAE",
 - "parameter": {
 - "entry": [
 - {
 - "key": "status",
 - "value": {
 - "key": "status",
 - "fieldSchemaKey": {
 - "name": "SubscriptionStatusType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - }
 - ]
 - }
 - }
 - },
 - {
 - "key": {
 - "name": "CreateSubscriptionPayloadEvent",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "CreateSubscriptionPayloadEvent",
 - "version": "0.0.1"
 - },
 - "nameSpace": "org.onap.policy.apex.onap.pmcontrol",
 - "source": "APEX",
 - "target": "APEX",
 - "parameter": {
 - "entry": [
 - {
 - "key": "albumID",
 - "value": {
 - "key": "albumID",
 - "fieldSchemaKey": {
 - "name": "UUIDType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - },
 - {
 - "key": "payload",
 - "value": {
 - "key": "payload",
 - "fieldSchemaKey": {
 - "name": "CDSCreateSubscriptionPayloadType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - }
 - ]
 - }
 - }
 - },
 - {
 - "key": {
 - "name": "CreateSubscriptionRequestEvent",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "CreateSubscriptionRequestEvent",
 - "version": "0.0.1"
 - },
 - "nameSpace": "org.onap.policy.apex.onap.pmcontrol",
 - "source": "APEX",
 - "target": "APEX",
 - "parameter": {
 - "entry": [
 - {
 - "key": "actionIdentifiers",
 - "value": {
 - "key": "actionIdentifiers",
 - "fieldSchemaKey": {
 - "name": "CDSActionIdentifiersType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - },
 - {
 - "key": "commonHeader",
 - "value": {
 - "key": "commonHeader",
 - "fieldSchemaKey": {
 - "name": "CDSRequestCommonHeaderType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - },
 - {
 - "key": "payload",
 - "value": {
 - "key": "payload",
 - "fieldSchemaKey": {
 - "name": "CDSCreateSubscriptionPayloadType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - }
 - ]
 - }
 - }
 - },
 - {
 - "key": {
 - "name": "DeleteSubscriptionPayloadEvent",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "DeleteSubscriptionPayloadEvent",
 - "version": "0.0.1"
 - },
 - "nameSpace": "org.onap.policy.apex.onap.pmcontrol",
 - "source": "APEX",
 - "target": "APEX",
 - "parameter": {
 - "entry": [
 - {
 - "key": "albumID",
 - "value": {
 - "key": "albumID",
 - "fieldSchemaKey": {
 - "name": "UUIDType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - },
 - {
 - "key": "payload",
 - "value": {
 - "key": "payload",
 - "fieldSchemaKey": {
 - "name": "CDSDeleteSubscriptionPayloadType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - }
 - ]
 - }
 - }
 - },
 - {
 - "key": {
 - "name": "DeleteSubscriptionRequestEvent",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "DeleteSubscriptionRequestEvent",
 - "version": "0.0.1"
 - },
 - "nameSpace": "org.onap.policy.apex.onap.pmcontrol",
 - "source": "APEX",
 - "target": "APEX",
 - "parameter": {
 - "entry": [
 - {
 - "key": "actionIdentifiers",
 - "value": {
 - "key": "actionIdentifiers",
 - "fieldSchemaKey": {
 - "name": "CDSActionIdentifiersType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - },
 - {
 - "key": "commonHeader",
 - "value": {
 - "key": "commonHeader",
 - "fieldSchemaKey": {
 - "name": "CDSRequestCommonHeaderType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - },
 - {
 - "key": "payload",
 - "value": {
 - "key": "payload",
 - "fieldSchemaKey": {
 - "name": "CDSDeleteSubscriptionPayloadType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - }
 - ]
 - }
 - }
 - },
 - {
 - "key": {
 - "name": "PMSubscriptionOutputEvent",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "PMSubscriptionOutputEvent",
 - "version": "0.0.1"
 - },
 - "nameSpace": "org.onap.policy.apex.onap.pmcontrol",
 - "source": "APEX",
 - "target": "APEX",
 - "parameter": {
 - "entry": [
 - {
 - "key": "albumID",
 - "value": {
 - "key": "albumID",
 - "fieldSchemaKey": {
 - "name": "UUIDType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - }
 - ]
 - }
 - }
 - },
 - {
 - "key": {
 - "name": "testPolicyB",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "testPolicyB",
 - "version": "0.0.1"
 - },
 - "nameSpace": "org.onap.policy.apex.onap.pmcontrol",
 - "source": "DCAE",
 - "target": "APEX",
 - "parameter": {
 - "entry": [
 - {
 - "key": "changeType",
 - "value": {
 - "key": "changeType",
 - "fieldSchemaKey": {
 - "name": "SimpleStringType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - },
 - {
 - "key": "closedLoopControlName",
 - "value": {
 - "key": "closedLoopControlName",
 - "fieldSchemaKey": {
 - "name": "SimpleStringType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - },
 - {
 - "key": "nfName",
 - "value": {
 - "key": "nfName",
 - "fieldSchemaKey": {
 - "name": "SimpleStringType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - },
 - {
 - "key": "policyName",
 - "value": {
 - "key": "policyName",
 - "fieldSchemaKey": {
 - "name": "SimpleStringType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - },
 - {
 - "key": "subscription",
 - "value": {
 - "key": "subscription",
 - "fieldSchemaKey": {
 - "name": "SubscriptionType",
 - "version": "0.0.1"
 - },
 - "optional": false
 - }
 - }
 - ]
 - }
 - }
 - }
 - ]
 + },
 + "value": {
 + "key": {
 + "parentKeyName": "ReceiveEventPolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "CreateSubscription",
 + "localName": "ReceiveEventPolicy"
 + },
 + "outputType": "DIRECT",
 + "output": {
 + "parentKeyName": "ReceiveEventPolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "CreateSubscription",
 + "localName": "IssueCreateSubscriptionRequestOutput"
 + }
 + }
 }
 + ]
 + }
 + }
 + },
 + {
 + "key": "DeleteSubscription",
 + "value": {
 + "stateKey": {
 + "parentKeyName": "ReceiveEventPolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "NULL",
 + "localName": "DeleteSubscription"
 + },
 + "trigger": {
 + "name": "DeleteSubscriptionPayloadEvent",
 + "version": "0.0.1"
 },
 - "albums": {
 - "key": {
 - "name": "APEXgRPCPolicy_Albums",
 + "stateOutputs": {
 + "entry": [
 + {
 + "key": "IssueDeleteSubscriptionRequestOutput",
 + "value": {
 + "key": {
 + "parentKeyName": "ReceiveEventPolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "DeleteSubscription",
 + "localName": "IssueDeleteSubscriptionRequestOutput"
 + },
 + "outgoingEvent": {
 + "name": "DeleteSubscriptionRequestEvent",
 + "version": "0.0.1"
 + },
 + "nextState": {
 + "parentKeyName": "NULL",
 + "parentKeyVersion": "0.0.0",
 + "parentLocalName": "NULL",
 + "localName": "NULL"
 + }
 + }
 + }
 + ]
 + },
 + "contextAlbumReference": [
 + {
 + "name": "PMSubscriptionAlbum",
 + "version": "0.0.1"
 + }
 + ],
 + "taskSelectionLogic": {
 + "key": "NULL",
 + "logicFlavour": "UNDEFINED",
 + "logic": ""
 + },
 + "stateFinalizerLogicMap": {
 + "entry": []
 + },
 + "defaultTask": {
 + "name": "DeleteSubscriptionRequestTask",
 + "version": "0.0.1"
 + },
 + "taskReferences": {
 + "entry": [
 + {
 + "key": {
 + "name": "DeleteSubscriptionRequestTask",
 "version": "0.0.1"
 - },
 - "albums": {
 - "entry": [
 - {
 - "key": {
 - "name": "PMSubscriptionAlbum",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "PMSubscriptionAlbum",
 - "version": "0.0.1"
 - },
 - "scope": "policy",
 - "isWritable": true,
 - "itemSchema": {
 - "name": "PMSubscriptionType",
 - "version": "0.0.1"
 - }
 - }
 - }
 - ]
 + },
 + "value": {
 + "key": {
 + "parentKeyName": "ReceiveEventPolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "DeleteSubscription",
 + "localName": "ReceiveEventPolicy"
 + },
 + "outputType": "DIRECT",
 + "output": {
 + "parentKeyName": "ReceiveEventPolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "DeleteSubscription",
 + "localName": "IssueDeleteSubscriptionRequestOutput"
 + }
 + }
 }
 + ]
 + }
 + }
 + },
 + {
 + "key": "ReceiveSubscriptionState",
 + "value": {
 + "stateKey": {
 + "parentKeyName": "ReceiveEventPolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "NULL",
 + "localName": "ReceiveSubscriptionState"
 + },
 + "trigger": {
 + "name": "testPolicyB",
 + "version": "0.0.1"
 },
 - "schemas": {
 - "key": {
 - "name": "APEXgRPCPolicy_Schemas",
 + "stateOutputs": {
 + "entry": [
 + {
 + "key": "ReceivePMSubscriptionOutput",
 + "value": {
 + "key": {
 + "parentKeyName": "ReceiveEventPolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "ReceiveSubscriptionState",
 + "localName": "ReceivePMSubscriptionOutput"
 + },
 + "outgoingEvent": {
 + "name": "PMSubscriptionOutputEvent",
 + "version": "0.0.1"
 + },
 + "nextState": {
 + "parentKeyName": "ReceiveEventPolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "NULL",
 + "localName": "CreateOrDeleteState"
 + }
 + }
 + }
 + ]
 + },
 + "contextAlbumReference": [
 + {
 + "name": "PMSubscriptionAlbum",
 + "version": "0.0.1"
 + }
 + ],
 + "taskSelectionLogic": {
 + "key": "NULL",
 + "logicFlavour": "UNDEFINED",
 + "logic": ""
 + },
 + "stateFinalizerLogicMap": {
 + "entry": []
 + },
 + "defaultTask": {
 + "name": "ReceivePMSubscriptionTask",
 + "version": "0.0.1"
 + },
 + "taskReferences": {
 + "entry": [
 + {
 + "key": {
 + "name": "ReceivePMSubscriptionTask",
 "version": "0.0.1"
 - },
 - "schemas": {
 - "entry": [
 - {
 - "key": {
 - "name": "CDSActionIdentifiersType",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "CDSActionIdentifiersType",
 - "version": "0.0.1"
 - },
 - "schemaFlavour": "Avro",
 - "schemaDefinition": "{\n \"type\": \"record\",\n \"name\": \"CDSActionIdentifiers_Type\",\n \"namespace\": \"org.onap.policy.apex.onap.helloworld\",\n \"fields\": [\n {\n \"name\": \"actionName\",\n \"type\": \"string\"\n },\n {\n \"name\": \"blueprintName\",\n \"type\": \"string\"\n },\n {\n \"name\": \"blueprintVersion\",\n \"type\": \"string\"\n },\n {\n \"name\": \"mode\",\n \"type\": \"string\"\n }\n ]\n}"
 - }
 - },
 - {
 - "key": {
 - "name": "CDSCreateSubscriptionPayloadType",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "CDSCreateSubscriptionPayloadType",
 - "version": "0.0.1"
 - },
 - "schemaFlavour": "Avro",
 - "schemaDefinition": "{\n \"type\": \"map\",\n \"values\": {\n \"type\": \"record\",\n \"name\": \"CDSRequestPayloadEntry\",\n \"fields\": [\n {\n \"name\": \"create_DasH_subscription_DasH_properties\",\n \"type\": {\n \"name\": \"create_DasH_subscription_DasH_properties_record\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"nfName\",\n \"type\": \"string\"\n },\n {\n \"name\": \"subscriptionName\",\n \"type\": \"string\"\n },\n {\n \"name\": \"administrativeState\",\n \"type\": \"string\"\n },\n {\n \"name\": \"fileBasedGP\",\n \"type\": \"string\"\n },\n {\n \"name\": \"fileLocation\",\n \"type\": \"string\"\n },\n {\n \"name\": \"measurementGroups\",\n \"type\": {\n \"type\": \"array\",\n \"items\": {\n \"name\": \"measurementGroups_record\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"measurementGroup\",\n \"type\": {\n \"name\": \"measurementGroup\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"measurementTypes\",\n \"type\": {\n \"type\": \"array\",\n \"items\": {\n \"name\": \"measurementTypes_record\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"measurementType\",\n \"type\": \"string\"\n }\n ]\n }\n }\n },\n {\n \"name\": \"managedObjectDNsBasic\",\n \"type\": {\n \"type\": \"array\",\n \"items\": {\n \"name\": \"managedObjectDNsBasic_record\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"DN\",\n \"type\": \"string\"\n }\n ]\n }\n }\n }\n ]\n }\n }\n ]\n }\n }\n }\n ]\n }\n }\n ]\n }\n}"
 - }
 - },
 - {
 - "key": {
 - "name": "CDSDeleteSubscriptionPayloadType",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "CDSDeleteSubscriptionPayloadType",
 - "version": "0.0.1"
 - },
 - "schemaFlavour": "Avro",
 - "schemaDefinition": "{\n \"type\": \"map\",\n \"values\": {\n \"type\": \"record\",\n \"name\": \"CDSRequestPayloadEntry\",\n \"fields\": [\n {\n \"name\": \"delete_DasH_subscription_DasH_properties\",\n \"type\": {\n \"name\": \"delete_DasH_subscription_DasH_properties_record\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"nfName\",\n \"type\": \"string\"\n },\n {\n \"name\": \"subscriptionName\",\n \"type\": \"string\"\n },\n {\n \"name\": \"administrativeState\",\n \"type\": \"string\"\n },\n {\n \"name\": \"fileBasedGP\",\n \"type\": \"string\"\n },\n {\n \"name\": \"fileLocation\",\n \"type\": \"string\"\n },\n {\n \"name\": \"measurementGroups\",\n \"type\": {\n \"type\": \"array\",\n \"items\": {\n \"name\": \"measurementGroups_record\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"measurementGroup\",\n \"type\": {\n \"name\": \"measurementGroup\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"measurementTypes\",\n \"type\": {\n \"type\": \"array\",\n \"items\": {\n \"name\": \"measurementTypes_record\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"measurementType\",\n \"type\": \"string\"\n }\n ]\n }\n }\n },\n {\n \"name\": \"managedObjectDNsBasic\",\n \"type\": {\n \"type\": \"array\",\n \"items\": {\n \"name\": \"managedObjectDNsBasic_record\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"DN\",\n \"type\": \"string\"\n }\n ]\n }\n }\n }\n ]\n }\n }\n ]\n }\n }\n }\n ]\n }\n }\n ]\n }\n}"
 - }
 - },
 - {
 - "key": {
 - "name": "CDSRequestCommonHeaderType",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "CDSRequestCommonHeaderType",
 - "version": "0.0.1"
 - },
 - "schemaFlavour": "Avro",
 - "schemaDefinition": "{\n \"type\": \"record\",\n \"name\": \"CDSRequestCommonHeader_Type\",\n \"namespace\": \"org.onap.policy.apex.onap.helloworld\",\n \"fields\": [\n {\n \"name\": \"originatorId\",\n \"type\": \"string\"\n },\n {\n \"name\": \"requestId\",\n \"type\": \"string\"\n },\n {\n \"name\": \"subRequestId\",\n \"type\": \"string\"\n }\n ]\n}"
 - }
 - },
 - {
 - "key": {
 - "name": "CDSResponseCommonHeaderType",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "CDSResponseCommonHeaderType",
 - "version": "0.0.1"
 - },
 - "schemaFlavour": "Avro",
 - "schemaDefinition": "{\n \"type\": \"record\",\n \"name\": \"CDSResponseCommonHeader_Type\",\n \"namespace\": \"org.onap.policy.apex.onap.helloworld\",\n \"fields\": [\n {\n \"name\": \"originatorId\",\n \"type\": \"string\"\n },\n {\n \"name\": \"requestId\",\n \"type\": \"string\"\n },\n {\n \"name\": \"subRequestId\",\n \"type\": \"string\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"string\"\n }\n ]\n}"
 - }
 - },
 - {
 - "key": {
 - "name": "CDSResponsePayloadType",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "CDSResponsePayloadType",
 - "version": "0.0.1"
 - },
 - "schemaFlavour": "Avro",
 - "schemaDefinition": "{\n \"name\": \"CDSResponsePayloadEntry\",\n \"type\": \"record\",\n \"namespace\": \"com.acme.avro\",\n \"fields\": [\n {\n \"name\": \"create_DasH_subscription_DasH_response\",\n \"type\": {\n \"name\": \"create_DasH_subscription_DasH_response\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"odl_DasH_response\",\n \"type\": {\n \"name\": \"odl_DasH_response\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"status\",\n \"type\": \"string\"\n }\n ]\n }\n }\n ]\n }\n }\n ]\n}"
 - }
 - },
 - {
 - "key": {
 - "name": "CDSResponseStatusType",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "CDSResponseStatusType",
 - "version": "0.0.1"
 - },
 - "schemaFlavour": "Avro",
 - "schemaDefinition": "{\n \"type\": \"record\",\n \"name\": \"CDSResponseStatus_Type\",\n \"namespace\": \"org.onap.policy.apex.onap.helloworld\",\n \"fields\": [\n {\n \"name\": \"code\",\n \"type\": \"int\"\n },\n {\n \"name\": \"eventType\",\n \"type\": \"string\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"string\"\n },\n {\n \"name\": \"message\",\n \"type\": \"string\"\n }\n ]\n}"
 - }
 - },
 - {
 - "key": {
 - "name": "PMSubscriptionType",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "PMSubscriptionType",
 - "version": "0.0.1"
 - },
 - "schemaFlavour": "Avro",
 - "schemaDefinition": "{\n \"name\": \"PMSubscription\",\n \"type\": \"record\",\n \"namespace\": \"org.onap.policy.apex.onap.pmcontrol\",\n \"fields\": [\n {\n \"name\": \"nfName\",\n \"type\": \"string\"\n },\n {\n \"name\": \"changeType\",\n \"type\": \"string\"\n },\n {\n \"name\": \"closedLoopControlName\",\n \"type\": \"string\"\n },\n {\n \"name\": \"policyName\",\n \"type\": \"string\"\n },\n {\n \"name\": \"subscription\",\n \"type\": {\n \"name\": \"subscription\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"subscriptionName\",\n \"type\": \"string\"\n },\n {\n \"name\": \"administrativeState\",\n \"type\": \"string\"\n },\n {\n \"name\": \"fileBasedGP\",\n \"type\": \"int\"\n },\n {\n \"name\": \"fileLocation\",\n \"type\": \"string\"\n },\n {\n \"name\": \"measurementGroups\",\n \"type\": {\n \"type\": \"array\",\n \"items\": {\n \"name\": \"Measurement_Groups_Type\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"measurementGroup\",\n \"type\": {\n \"name\": \"Measurement_Group_Type\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"measurementTypes\",\n \"type\": {\n \"type\": \"array\",\n \"items\": {\n \"name\": \"Measurement_Types_Type\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"measurementType\",\n \"type\": \"string\"\n }\n ]\n }\n }\n },\n {\n \"name\": \"managedObjectDNsBasic\",\n \"type\": {\n \"type\": \"array\",\n \"items\": {\n \"name\": \"Managed_Object_Dns_Basic_Type\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"DN\",\n \"type\": \"string\"\n }\n ]\n }\n }\n }\n ]\n }\n }\n ]\n }\n }\n }\n ]\n }\n }\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": "SubscriptionStatusType",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "SubscriptionStatusType",
 - "version": "0.0.1"
 - },
 - "schemaFlavour": "Avro",
 - "schemaDefinition": "{\n \"type\": \"record\",\n \"name\": \"ActivateSubscriptionStatus_Type\",\n \"namespace\": \"org.onap.policy.apex.onap.helloworld\",\n \"fields\": [\n {\n \"name\": \"subscriptionName\",\n \"type\": \"string\"\n },\n {\n \"name\": \"nfName\",\n \"type\": \"string\"\n },\n {\n \"name\": \"changeType\",\n \"type\": \"string\"\n },\n {\n \"name\": \"message\",\n \"type\": \"string\"\n }\n ]\n}"
 - }
 - },
 - {
 - "key": {
 - "name": "SubscriptionType",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "SubscriptionType",
 - "version": "0.0.1"
 - },
 - "schemaFlavour": "Avro",
 - "schemaDefinition": "{\n \"name\": \"subscription\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"subscriptionName\",\n \"type\": \"string\"\n },\n {\n \"name\": \"administrativeState\",\n \"type\": \"string\"\n },\n {\n \"name\": \"fileBasedGP\",\n \"type\": \"int\"\n },\n {\n \"name\": \"fileLocation\",\n \"type\": \"string\"\n },\n {\n \"name\": \"measurementGroups\",\n \"type\": {\n \"type\": \"array\",\n \"items\": {\n \"name\": \"Measurement_Groups_Type\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"measurementGroup\",\n \"type\": {\n \"name\": \"Measurement_Group_Type\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"measurementTypes\",\n \"type\": {\n \"type\": \"array\",\n \"items\": {\n \"name\": \"Measurement_Types_Type\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"measurementType\",\n \"type\": \"string\"\n }\n ]\n }\n }\n },\n {\n \"name\": \"managedObjectDNsBasic\",\n \"type\": {\n \"type\": \"array\",\n \"items\": {\n \"name\": \"Managed_Object_Dns_Basic_Type\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"DN\",\n \"type\": \"string\"\n }\n ]\n }\n }\n }\n ]\n }\n }\n ]\n }\n }\n }\n ]\n}"
 - }
 - },
 - {
 - "key": {
 - "name": "UUIDType",
 - "version": "0.0.1"
 - },
 - "value": {
 - "key": {
 - "name": "UUIDType",
 - "version": "0.0.1"
 - },
 - "schemaFlavour": "Java",
 - "schemaDefinition": "java.util.UUID"
 - }
 - }
 - ]
 + },
 + "value": {
 + "key": {
 + "parentKeyName": "ReceiveEventPolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "ReceiveSubscriptionState",
 + "localName": "ReceiveEventPolicy"
 + },
 + "outputType": "DIRECT",
 + "output": {
 + "parentKeyName": "ReceiveEventPolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "ReceiveSubscriptionState",
 + "localName": "ReceivePMSubscriptionOutput"
 + }
 + }
 }
 + ]
 }
 + }
 + }
 + ]
 + },
 + "firstState": "ReceiveSubscriptionState"
 + }
 + }
 + ]
 + }
 + },
 + "tasks": {
 + "key": {
 + "name": "APEXgRPCPolicy_Tasks",
 + "version": "0.0.1"
 + },
 + "taskMap": {
 + "entry": [
 + {
 + "key": {
 + "name": "CDSResponseTask",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CDSResponseTask",
 + "version": "0.0.1"
 + },
 + "inputFields": {
 + "entry": [
 + {
 + "key": "actionIdentifiers",
 + "value": {
 + "key": "actionIdentifiers",
 + "fieldSchemaKey": {
 + "name": "CDSActionIdentifiersType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "commonHeader",
 + "value": {
 + "key": "commonHeader",
 + "fieldSchemaKey": {
 + "name": "CDSResponseCommonHeaderType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "payload",
 + "value": {
 + "key": "payload",
 + "fieldSchemaKey": {
 + "name": "CDSResponsePayloadType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "status",
 + "value": {
 + "key": "status",
 + "fieldSchemaKey": {
 + "name": "CDSResponseStatusType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + }
 + ]
 + },
 + "outputFields": {
 + "entry": [
 + {
 + "key": "status",
 + "value": {
 + "key": "status",
 + "fieldSchemaKey": {
 + "name": "SubscriptionStatusType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 }
 + ]
 + },
 + "taskParameters": {
 + "entry": []
 + },
 + "contextAlbumReference": [
 + {
 + "name": "PMSubscriptionAlbum",
 + "version": "0.0.1"
 + }
 + ],
 + "taskLogic": {
 + "key": "TaskLogic",
 + "logicFlavour": "JAVASCRIPT",
 + "logic": "/*\n * ============LICENSE_START=======================================================\n * Copyright (C) 2020 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\n\nvar uuidType = java.util.UUID;\n\nvar albumID = uuidType.fromString(\"d0050623-18e5-46c9-9298-9a567990cd7c\");\n\nvar pmSubscriptionInfo = executor.getContextAlbum(\"PMSubscriptionAlbum\").get(albumID.toString());\n\nvar responseStatus = executor.subject.getOutFieldSchemaHelper(\"status\").createNewInstance();\n\nresponseStatus.put(\"subscriptionName\", pmSubscriptionInfo.get(\"subscription\").get(\"subscriptionName\"))\nresponseStatus.put(\"nfName\", pmSubscriptionInfo.get(\"nfName\"))\nresponseStatus.put(\"changeType\", pmSubscriptionInfo.get(\"changeType\"))\n\nvar response = executor.inFields.get(\"payload\")\n\nif (\"failure\".equals(response.get(\"create_DasH_subscription_DasH_response\").get(\"odl_DasH_response\").get(\"status\"))) {\n responseStatus.put(\"message\", \"failed\")\n} else {\n responseStatus.put(\"message\", \"success\")\n}\n\nexecutor.outFields.put(\"status\", responseStatus)\n\ntrue;"
 }
 + }
 },
 - "eventOutputParameters": {
 - "logOutputter": {
 - "carrierTechnologyParameters": {
 - "carrierTechnology": "FILE",
 - "parameters": {
 - "fileName": "outputevents.log"
 - }
 + {
 + "key": {
 + "name": "CreateSubscriptionPayloadTask",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CreateSubscriptionPayloadTask",
 + "version": "0.0.1"
 + },
 + "inputFields": {
 + "entry": [
 + {
 + "key": "albumID",
 + "value": {
 + "key": "albumID",
 + "fieldSchemaKey": {
 + "name": "UUIDType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + }
 + ]
 + },
 + "outputFields": {
 + "entry": [
 + {
 + "key": "albumID",
 + "value": {
 + "key": "albumID",
 + "fieldSchemaKey": {
 + "name": "UUIDType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 },
 - "eventProtocolParameters": {
 - "eventProtocol": "JSON"
 + {
 + "key": "payload",
 + "value": {
 + "key": "payload",
 + "fieldSchemaKey": {
 + "name": "CDSCreateSubscriptionPayloadType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 }
 + ]
 },
 - "CDSRequestProducer": {
 - "carrierTechnologyParameters": {
 - "carrierTechnology": "GRPC",
 - "parameterClassName": "org.onap.policy.apex.plugins.event.carrier.grpc.GrpcCarrierTechnologyParameters",
 - "parameters": {
 - "host": "10.2.0.97",
 - "port": 30386,
 - "username": "ccsdkapps",
 - "password": "ccsdkapps",
 - "timeout": 60
 - }
 + "taskParameters": {
 + "entry": []
 + },
 + "contextAlbumReference": [
 + {
 + "name": "PMSubscriptionAlbum",
 + "version": "0.0.1"
 + }
 + ],
 + "taskLogic": {
 + "key": "TaskLogic",
 + "logicFlavour": "JAVASCRIPT",
 + "logic": "/*\n * ============LICENSE_START=======================================================\n * Copyright (C) 2020 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);\n\nvar pmSubscriptionInfo = executor.getContextAlbum(\"PMSubscriptionAlbum\").get(executor.inFields.get(\"albumID\").toString())\n\nvar payloadProperties = executor.subject.getOutFieldSchemaHelper(\"payload\").createNewSubInstance(\"create_DasH_subscription_DasH_properties_record\");\n\npayloadProperties.put(\"nfName\", pmSubscriptionInfo.get(\"nfName\"))\npayloadProperties.put(\"subscriptionName\", pmSubscriptionInfo.get(\"subscription\").get(\"subscriptionName\"))\npayloadProperties.put(\"administrativeState\", pmSubscriptionInfo.get(\"subscription\").get(\"administrativeState\"))\npayloadProperties.put(\"fileBasedGP\", pmSubscriptionInfo.get(\"subscription\").get(\"fileBasedGP\").toString())\npayloadProperties.put(\"fileLocation\", pmSubscriptionInfo.get(\"subscription\").get(\"fileLocation\"))\npayloadProperties.put(\"measurementGroups\", pmSubscriptionInfo.get(\"subscription\").get(\"measurementGroups\"))\n\nvar payloadEntry = executor.subject.getOutFieldSchemaHelper(\"payload\").createNewSubInstance(\"CDSRequestPayloadEntry\");\npayloadEntry.put(\"create_DasH_subscription_DasH_properties\", payloadProperties)\n\nvar payload = executor.subject.getOutFieldSchemaHelper(\"payload\").createNewInstance();\npayload.put(\"create_DasH_subscription_DasH_request\", payloadEntry);\n\nexecutor.outFields.put(\"albumID\", executor.inFields.get(\"albumID\"))\nexecutor.outFields.put(\"payload\", payload);\n\nexecutor.logger.info(\"Sending Create Subscription Event to CDS\")\n\ntrue;"
 + }
 + }
 + },
 + {
 + "key": {
 + "name": "CreateSubscriptionRequestTask",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CreateSubscriptionRequestTask",
 + "version": "0.0.1"
 + },
 + "inputFields": {
 + "entry": [
 + {
 + "key": "albumID",
 + "value": {
 + "key": "albumID",
 + "fieldSchemaKey": {
 + "name": "UUIDType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 },
 - "eventProtocolParameters": {
 - "eventProtocol": "JSON"
 + {
 + "key": "payload",
 + "value": {
 + "key": "payload",
 + "fieldSchemaKey": {
 + "name": "CDSCreateSubscriptionPayloadType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + }
 + ]
 + },
 + "outputFields": {
 + "entry": [
 + {
 + "key": "actionIdentifiers",
 + "value": {
 + "key": "actionIdentifiers",
 + "fieldSchemaKey": {
 + "name": "CDSActionIdentifiersType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 },
 - "eventNameFilter": "(Create|Delete)SubscriptionRequestEvent",
 - "requestorMode": true,
 - "requestorPeer": "CDSRequestConsumer",
 - "requestorTimeout": 500
 - },
 - "CDSReplyProducer": {
 - "carrierTechnologyParameters": {
 - "carrierTechnology": "RESTCLIENT",
 - "parameterClassName": "org.onap.policy.apex.plugins.event.carrier.restclient.RestClientCarrierTechnologyParameters",
 - "parameters": {
 - "url": "https://message-router:3905/events/POLICY-PDP-PAP"
 - }
 + {
 + "key": "commonHeader",
 + "value": {
 + "key": "commonHeader",
 + "fieldSchemaKey": {
 + "name": "CDSRequestCommonHeaderType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 },
 - "eventProtocolParameters": {
 - "eventProtocol": "JSON"
 + {
 + "key": "payload",
 + "value": {
 + "key": "payload",
 + "fieldSchemaKey": {
 + "name": "CDSCreateSubscriptionPayloadType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + }
 + ]
 + },
 + "taskParameters": {
 + "entry": []
 + },
 + "contextAlbumReference": [
 + {
 + "name": "PMSubscriptionAlbum",
 + "version": "0.0.1"
 + }
 + ],
 + "taskLogic": {
 + "key": "TaskLogic",
 + "logicFlavour": "JAVASCRIPT",
 + "logic": "/*\n * ============LICENSE_START=======================================================\n * Copyright (C) 2020 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);\n\nvar pmSubscriptionInfo = executor.getContextAlbum(\"PMSubscriptionAlbum\").get(executor.inFields.get(\"albumID\").toString())\nvar payload = executor.inFields.get(\"payload\")\nvar actionName = \"create-subscription\"\n\nvar commonHeader = executor.subject.getOutFieldSchemaHelper(\"commonHeader\").createNewInstance();\ncommonHeader.put(\"originatorId\", \"sdnc\");\ncommonHeader.put(\"requestId\", \"123456-1000\");\ncommonHeader.put(\"subRequestId\", \"sub-123456-1000\");\n\nvar actionIdentifiers = executor.subject.getOutFieldSchemaHelper(\"actionIdentifiers\").createNewInstance();\nactionIdentifiers.put(\"actionName\", actionName);\nactionIdentifiers.put(\"blueprintName\", \"pm_control\");\nactionIdentifiers.put(\"blueprintVersion\", \"1.0.0\");\nactionIdentifiers.put(\"mode\", \"sync\");\n\nexecutor.outFields.put(\"commonHeader\", commonHeader);\nexecutor.outFields.put(\"actionIdentifiers\", actionIdentifiers);\nexecutor.outFields.put(\"payload\", payload);\n\nexecutor.logger.info(\"Sending Activate Subscription Event to CDS\")\n\ntrue;"
 + }
 + }
 + },
 + {
 + "key": {
 + "name": "DeleteSubscriptionPayloadTask",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "DeleteSubscriptionPayloadTask",
 + "version": "0.0.1"
 + },
 + "inputFields": {
 + "entry": [
 + {
 + "key": "albumID",
 + "value": {
 + "key": "albumID",
 + "fieldSchemaKey": {
 + "name": "UUIDType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + }
 + ]
 + },
 + "outputFields": {
 + "entry": [
 + {
 + "key": "albumID",
 + "value": {
 + "key": "albumID",
 + "fieldSchemaKey": {
 + "name": "UUIDType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 },
 - "eventNameFilter": "CDSResponseStatusEvent"
 + {
 + "key": "payload",
 + "value": {
 + "key": "payload",
 + "fieldSchemaKey": {
 + "name": "CDSDeleteSubscriptionPayloadType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + }
 + ]
 + },
 + "taskParameters": {
 + "entry": []
 + },
 + "contextAlbumReference": [
 + {
 + "name": "PMSubscriptionAlbum",
 + "version": "0.0.1"
 + }
 + ],
 + "taskLogic": {
 + "key": "TaskLogic",
 + "logicFlavour": "JAVASCRIPT",
 + "logic": "/*\n * ============LICENSE_START=======================================================\n * Copyright (C) 2020 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);\n\nvar pmSubscriptionInfo = executor.getContextAlbum(\"PMSubscriptionAlbum\").get(executor.inFields.get(\"albumID\").toString())\n\nvar payloadProperties = executor.subject.getOutFieldSchemaHelper(\"payload\").createNewSubInstance(\"delete_DasH_subscription_DasH_properties_record\");\n\npayloadProperties.put(\"nfName\", pmSubscriptionInfo.get(\"nfName\"))\npayloadProperties.put(\"subscriptionName\", pmSubscriptionInfo.get(\"subscription\").get(\"subscriptionName\"))\npayloadProperties.put(\"administrativeState\", pmSubscriptionInfo.get(\"subscription\").get(\"administrativeState\"))\npayloadProperties.put(\"fileBasedGP\", pmSubscriptionInfo.get(\"subscription\").get(\"fileBasedGP\").toString())\npayloadProperties.put(\"fileLocation\", pmSubscriptionInfo.get(\"subscription\").get(\"fileLocation\"))\npayloadProperties.put(\"measurementGroups\", pmSubscriptionInfo.get(\"subscription\").get(\"measurementGroups\"))\n\nvar payloadEntry = executor.subject.getOutFieldSchemaHelper(\"payload\").createNewSubInstance(\"CDSRequestPayloadEntry\");\npayloadEntry.put(\"delete_DasH_subscription_DasH_properties\", payloadProperties)\n\nvar payload = executor.subject.getOutFieldSchemaHelper(\"payload\").createNewInstance();\npayload.put(\"delete_DasH_subscription_DasH_request\", payloadEntry);\n\nexecutor.outFields.put(\"albumID\", executor.inFields.get(\"albumID\"))\nexecutor.outFields.put(\"payload\", payload);\n\nexecutor.logger.info(\"Sending delete Subscription Event to CDS\")\n\ntrue;"
 }
 + }
 },
 - "eventInputParameters": {
 - "DCAEConsumer": {
 - "carrierTechnologyParameters": {
 - "carrierTechnology": "RESTCLIENT",
 - "parameterClassName": "org.onap.policy.apex.plugins.event.carrier.restclient.RestClientCarrierTechnologyParameters",
 - "parameters": {
 - "url": "https://message-router:3905/events/unauthenticated.DCAE_CL_OUTPUT/cg1/c1?timeout=30000"
 - }
 + {
 + "key": {
 + "name": "DeleteSubscriptionRequestTask",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "DeleteSubscriptionRequestTask",
 + "version": "0.0.1"
 + },
 + "inputFields": {
 + "entry": [
 + {
 + "key": "albumID",
 + "value": {
 + "key": "albumID",
 + "fieldSchemaKey": {
 + "name": "UUIDType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 },
 - "eventProtocolParameters": {
 - "eventProtocol": "JSON",
 - "parameters": {
 - "nameAlias": "testPolicyB"
 - }
 + {
 + "key": "payload",
 + "value": {
 + "key": "payload",
 + "fieldSchemaKey": {
 + "name": "CDSDeleteSubscriptionPayloadType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + }
 + ]
 + },
 + "outputFields": {
 + "entry": [
 + {
 + "key": "actionIdentifiers",
 + "value": {
 + "key": "actionIdentifiers",
 + "fieldSchemaKey": {
 + "name": "CDSActionIdentifiersType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "commonHeader",
 + "value": {
 + "key": "commonHeader",
 + "fieldSchemaKey": {
 + "name": "CDSRequestCommonHeaderType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 },
 - "eventName": "testPolicyB",
 - "eventNameFilter": "testPolicyB"
 + {
 + "key": "payload",
 + "value": {
 + "key": "payload",
 + "fieldSchemaKey": {
 + "name": "CDSDeleteSubscriptionPayloadType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + }
 + ]
 + },
 + "taskParameters": {
 + "entry": []
 },
 - "CDSRequestConsumer": {
 - "carrierTechnologyParameters": {
 - "carrierTechnology": "GRPC",
 - "parameterClassName": "org.onap.policy.apex.plugins.event.carrier.grpc.GrpcCarrierTechnologyParameters"
 + "contextAlbumReference": [
 + {
 + "name": "PMSubscriptionAlbum",
 + "version": "0.0.1"
 + }
 + ],
 + "taskLogic": {
 + "key": "TaskLogic",
 + "logicFlavour": "JAVASCRIPT",
 + "logic": "/*\n * ============LICENSE_START=======================================================\n * Copyright (C) 2020 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);\n\nvar pmSubscriptionInfo = executor.getContextAlbum(\"PMSubscriptionAlbum\").get(executor.inFields.get(\"albumID\").toString())\nvar payload = executor.inFields.get(\"payload\")\nvar actionName = \"delete-subscription\"\n\nvar commonHeader = executor.subject.getOutFieldSchemaHelper(\"commonHeader\").createNewInstance();\ncommonHeader.put(\"originatorId\", \"sdnc\");\ncommonHeader.put(\"requestId\", \"123456-1000\");\ncommonHeader.put(\"subRequestId\", \"sub-123456-1000\");\n\nvar actionIdentifiers = executor.subject.getOutFieldSchemaHelper(\"actionIdentifiers\").createNewInstance();\nactionIdentifiers.put(\"actionName\", actionName);\nactionIdentifiers.put(\"blueprintName\", \"pm_control\");\nactionIdentifiers.put(\"blueprintVersion\", \"1.0.0\");\nactionIdentifiers.put(\"mode\", \"sync\");\n\nexecutor.outFields.put(\"commonHeader\", commonHeader);\nexecutor.outFields.put(\"actionIdentifiers\", actionIdentifiers);\nexecutor.outFields.put(\"payload\", payload);\n\nexecutor.logger.info(\"Sending Deactivate Subscription Event to CDS\")\n\ntrue;"
 + }
 + }
 + },
 + {
 + "key": {
 + "name": "ReceivePMSubscriptionTask",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "ReceivePMSubscriptionTask",
 + "version": "0.0.1"
 + },
 + "inputFields": {
 + "entry": [
 + {
 + "key": "changeType",
 + "value": {
 + "key": "changeType",
 + "fieldSchemaKey": {
 + "name": "SimpleStringType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "closedLoopControlName",
 + "value": {
 + "key": "closedLoopControlName",
 + "fieldSchemaKey": {
 + "name": "SimpleStringType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 },
 - "eventProtocolParameters": {
 - "eventProtocol": "JSON"
 + {
 + "key": "nfName",
 + "value": {
 + "key": "nfName",
 + "fieldSchemaKey": {
 + "name": "SimpleStringType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 },
 - "eventName": "CDSResponseEvent",
 - "eventNameFilter": "CDSResponseEvent",
 - "requestorMode": true,
 - "requestorPeer": "CDSRequestProducer",
 - "requestorTimeout": 500
 + {
 + "key": "policyName",
 + "value": {
 + "key": "policyName",
 + "fieldSchemaKey": {
 + "name": "SimpleStringType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "subscription",
 + "value": {
 + "key": "subscription",
 + "fieldSchemaKey": {
 + "name": "SubscriptionType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + }
 + ]
 + },
 + "outputFields": {
 + "entry": [
 + {
 + "key": "albumID",
 + "value": {
 + "key": "albumID",
 + "fieldSchemaKey": {
 + "name": "UUIDType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + }
 + ]
 + },
 + "taskParameters": {
 + "entry": []
 + },
 + "contextAlbumReference": [
 + {
 + "name": "PMSubscriptionAlbum",
 + "version": "0.0.1"
 + }
 + ],
 + "taskLogic": {
 + "key": "TaskLogic",
 + "logicFlavour": "JAVASCRIPT",
 + "logic": "/*\n * ============LICENSE_START=======================================================\n * Copyright (C) 2020 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 */\nvar uuidType = java.util.UUID;\n\n\n//albumID will be used to fetch info from our album later\nvar albumID = uuidType.fromString(\"d0050623-18e5-46c9-9298-9a567990cd7c\");\nvar pmSubscriptionInfo = executor.getContextAlbum(\"PMSubscriptionAlbum\").getSchemaHelper().createNewInstance();\nvar returnValue = true;;\n\nif(executor.inFields.get(\"policyName\") != null) {\n var changeType = executor.inFields.get(\"changeType\")\n var nfName = executor.inFields.get(\"nfName\")\n var policyName = executor.inFields.get(\"policyName\")\n var closedLoopControlName = executor.inFields.get(\"closedLoopControlName\")\n var subscription = executor.inFields.get(\"subscription\")\n\n pmSubscriptionInfo.put(\"nfName\", executor.inFields.get(\"nfName\"));\n pmSubscriptionInfo.put(\"changeType\", executor.inFields.get(\"changeType\"))\n pmSubscriptionInfo.put(\"policyName\", executor.inFields.get(\"policyName\"))\n pmSubscriptionInfo.put(\"closedLoopControlName\", executor.inFields.get(\"closedLoopControlName\"))\n pmSubscriptionInfo.put(\"subscription\", subscription)\n\n executor.getContextAlbum(\"PMSubscriptionAlbum\").put(albumID.toString(), pmSubscriptionInfo);\n\n executor.outFields.put(\"albumID\", albumID)\n} else {\n executor.message = \"Received invalid event\"\n returnValue = false;\n}\nreturnValue;"
 }
 + }
 }
 + ]
 + }
 + },
 + "events": {
 + "key": {
 + "name": "APEXgRPCPolicy_Events",
 + "version": "0.0.1"
 },
 - "name": "operational.apex.stabilityTestDefaultDomain",
 - "version": "1.0.0",
 - "metadata": {
 - "policy-id": "operational.apex.stabilityTestDefaultDomain",
 - "policy-version": "1.0.0"
 + "eventMap": {
 + "entry": [
 + {
 + "key": {
 + "name": "CDSResponseEvent",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CDSResponseEvent",
 + "version": "0.0.1"
 + },
 + "nameSpace": "org.onap.policy.apex.onap.pmcontrol",
 + "source": "CDS",
 + "target": "APEX",
 + "parameter": {
 + "entry": [
 + {
 + "key": "actionIdentifiers",
 + "value": {
 + "key": "actionIdentifiers",
 + "fieldSchemaKey": {
 + "name": "CDSActionIdentifiersType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "commonHeader",
 + "value": {
 + "key": "commonHeader",
 + "fieldSchemaKey": {
 + "name": "CDSResponseCommonHeaderType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "payload",
 + "value": {
 + "key": "payload",
 + "fieldSchemaKey": {
 + "name": "CDSResponsePayloadType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "status",
 + "value": {
 + "key": "status",
 + "fieldSchemaKey": {
 + "name": "CDSResponseStatusType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + }
 + ]
 + }
 + }
 + },
 + {
 + "key": {
 + "name": "CDSResponseStatusEvent",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CDSResponseStatusEvent",
 + "version": "0.0.1"
 + },
 + "nameSpace": "org.onap.policy.apex.onap.pmcontrol",
 + "source": "APEX",
 + "target": "DCAE",
 + "parameter": {
 + "entry": [
 + {
 + "key": "status",
 + "value": {
 + "key": "status",
 + "fieldSchemaKey": {
 + "name": "SubscriptionStatusType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + }
 + ]
 + }
 + }
 + },
 + {
 + "key": {
 + "name": "CreateSubscriptionPayloadEvent",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CreateSubscriptionPayloadEvent",
 + "version": "0.0.1"
 + },
 + "nameSpace": "org.onap.policy.apex.onap.pmcontrol",
 + "source": "APEX",
 + "target": "APEX",
 + "parameter": {
 + "entry": [
 + {
 + "key": "albumID",
 + "value": {
 + "key": "albumID",
 + "fieldSchemaKey": {
 + "name": "UUIDType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "payload",
 + "value": {
 + "key": "payload",
 + "fieldSchemaKey": {
 + "name": "CDSCreateSubscriptionPayloadType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + }
 + ]
 + }
 + }
 + },
 + {
 + "key": {
 + "name": "CreateSubscriptionRequestEvent",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CreateSubscriptionRequestEvent",
 + "version": "0.0.1"
 + },
 + "nameSpace": "org.onap.policy.apex.onap.pmcontrol",
 + "source": "APEX",
 + "target": "APEX",
 + "parameter": {
 + "entry": [
 + {
 + "key": "actionIdentifiers",
 + "value": {
 + "key": "actionIdentifiers",
 + "fieldSchemaKey": {
 + "name": "CDSActionIdentifiersType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "commonHeader",
 + "value": {
 + "key": "commonHeader",
 + "fieldSchemaKey": {
 + "name": "CDSRequestCommonHeaderType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "payload",
 + "value": {
 + "key": "payload",
 + "fieldSchemaKey": {
 + "name": "CDSCreateSubscriptionPayloadType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + }
 + ]
 + }
 + }
 + },
 + {
 + "key": {
 + "name": "DeleteSubscriptionPayloadEvent",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "DeleteSubscriptionPayloadEvent",
 + "version": "0.0.1"
 + },
 + "nameSpace": "org.onap.policy.apex.onap.pmcontrol",
 + "source": "APEX",
 + "target": "APEX",
 + "parameter": {
 + "entry": [
 + {
 + "key": "albumID",
 + "value": {
 + "key": "albumID",
 + "fieldSchemaKey": {
 + "name": "UUIDType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "payload",
 + "value": {
 + "key": "payload",
 + "fieldSchemaKey": {
 + "name": "CDSDeleteSubscriptionPayloadType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + }
 + ]
 + }
 + }
 + },
 + {
 + "key": {
 + "name": "DeleteSubscriptionRequestEvent",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "DeleteSubscriptionRequestEvent",
 + "version": "0.0.1"
 + },
 + "nameSpace": "org.onap.policy.apex.onap.pmcontrol",
 + "source": "APEX",
 + "target": "APEX",
 + "parameter": {
 + "entry": [
 + {
 + "key": "actionIdentifiers",
 + "value": {
 + "key": "actionIdentifiers",
 + "fieldSchemaKey": {
 + "name": "CDSActionIdentifiersType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "commonHeader",
 + "value": {
 + "key": "commonHeader",
 + "fieldSchemaKey": {
 + "name": "CDSRequestCommonHeaderType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "payload",
 + "value": {
 + "key": "payload",
 + "fieldSchemaKey": {
 + "name": "CDSDeleteSubscriptionPayloadType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + }
 + ]
 + }
 + }
 + },
 + {
 + "key": {
 + "name": "PMSubscriptionOutputEvent",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "PMSubscriptionOutputEvent",
 + "version": "0.0.1"
 + },
 + "nameSpace": "org.onap.policy.apex.onap.pmcontrol",
 + "source": "APEX",
 + "target": "APEX",
 + "parameter": {
 + "entry": [
 + {
 + "key": "albumID",
 + "value": {
 + "key": "albumID",
 + "fieldSchemaKey": {
 + "name": "UUIDType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + }
 + ]
 + }
 + }
 + },
 + {
 + "key": {
 + "name": "testPolicyB",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "testPolicyB",
 + "version": "0.0.1"
 + },
 + "nameSpace": "org.onap.policy.apex.onap.pmcontrol",
 + "source": "DCAE",
 + "target": "APEX",
 + "parameter": {
 + "entry": [
 + {
 + "key": "changeType",
 + "value": {
 + "key": "changeType",
 + "fieldSchemaKey": {
 + "name": "SimpleStringType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "closedLoopControlName",
 + "value": {
 + "key": "closedLoopControlName",
 + "fieldSchemaKey": {
 + "name": "SimpleStringType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "nfName",
 + "value": {
 + "key": "nfName",
 + "fieldSchemaKey": {
 + "name": "SimpleStringType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "policyName",
 + "value": {
 + "key": "policyName",
 + "fieldSchemaKey": {
 + "name": "SimpleStringType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "subscription",
 + "value": {
 + "key": "subscription",
 + "fieldSchemaKey": {
 + "name": "SubscriptionType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + }
 + ]
 + }
 + }
 + }
 + ]
 }
 + },
 + "albums": {
 + "key": {
 + "name": "APEXgRPCPolicy_Albums",
 + "version": "0.0.1"
 + },
 + "albums": {
 + "entry": [
 + {
 + "key": {
 + "name": "PMSubscriptionAlbum",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "PMSubscriptionAlbum",
 + "version": "0.0.1"
 + },
 + "scope": "policy",
 + "isWritable": true,
 + "itemSchema": {
 + "name": "PMSubscriptionType",
 + "version": "0.0.1"
 + }
 + }
 + }
 + ]
 + }
 + },
 + "schemas": {
 + "key": {
 + "name": "APEXgRPCPolicy_Schemas",
 + "version": "0.0.1"
 + },
 + "schemas": {
 + "entry": [
 + {
 + "key": {
 + "name": "CDSActionIdentifiersType",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CDSActionIdentifiersType",
 + "version": "0.0.1"
 + },
 + "schemaFlavour": "Avro",
 + "schemaDefinition": "{\n \"type\": \"record\",\n \"name\": \"CDSActionIdentifiers_Type\",\n \"namespace\": \"org.onap.policy.apex.onap.helloworld\",\n \"fields\": [\n {\n \"name\": \"actionName\",\n \"type\": \"string\"\n },\n {\n \"name\": \"blueprintName\",\n \"type\": \"string\"\n },\n {\n \"name\": \"blueprintVersion\",\n \"type\": \"string\"\n },\n {\n \"name\": \"mode\",\n \"type\": \"string\"\n }\n ]\n}"
 + }
 + },
 + {
 + "key": {
 + "name": "CDSCreateSubscriptionPayloadType",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CDSCreateSubscriptionPayloadType",
 + "version": "0.0.1"
 + },
 + "schemaFlavour": "Avro",
 + "schemaDefinition": "{\n \"type\": \"map\",\n \"values\": {\n \"type\": \"record\",\n \"name\": \"CDSRequestPayloadEntry\",\n \"fields\": [\n {\n \"name\": \"create_DasH_subscription_DasH_properties\",\n \"type\": {\n \"name\": \"create_DasH_subscription_DasH_properties_record\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"nfName\",\n \"type\": \"string\"\n },\n {\n \"name\": \"subscriptionName\",\n \"type\": \"string\"\n },\n {\n \"name\": \"administrativeState\",\n \"type\": \"string\"\n },\n {\n \"name\": \"fileBasedGP\",\n \"type\": \"string\"\n },\n {\n \"name\": \"fileLocation\",\n \"type\": \"string\"\n },\n {\n \"name\": \"measurementGroups\",\n \"type\": {\n \"type\": \"array\",\n \"items\": {\n \"name\": \"measurementGroups_record\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"measurementGroup\",\n \"type\": {\n \"name\": \"measurementGroup\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"measurementTypes\",\n \"type\": {\n \"type\": \"array\",\n \"items\": {\n \"name\": \"measurementTypes_record\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"measurementType\",\n \"type\": \"string\"\n }\n ]\n }\n }\n },\n {\n \"name\": \"managedObjectDNsBasic\",\n \"type\": {\n \"type\": \"array\",\n \"items\": {\n \"name\": \"managedObjectDNsBasic_record\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"DN\",\n \"type\": \"string\"\n }\n ]\n }\n }\n }\n ]\n }\n }\n ]\n }\n }\n }\n ]\n }\n }\n ]\n }\n}"
 + }
 + },
 + {
 + "key": {
 + "name": "CDSDeleteSubscriptionPayloadType",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CDSDeleteSubscriptionPayloadType",
 + "version": "0.0.1"
 + },
 + "schemaFlavour": "Avro",
 + "schemaDefinition": "{\n \"type\": \"map\",\n \"values\": {\n \"type\": \"record\",\n \"name\": \"CDSRequestPayloadEntry\",\n \"fields\": [\n {\n \"name\": \"delete_DasH_subscription_DasH_properties\",\n \"type\": {\n \"name\": \"delete_DasH_subscription_DasH_properties_record\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"nfName\",\n \"type\": \"string\"\n },\n {\n \"name\": \"subscriptionName\",\n \"type\": \"string\"\n },\n {\n \"name\": \"administrativeState\",\n \"type\": \"string\"\n },\n {\n \"name\": \"fileBasedGP\",\n \"type\": \"string\"\n },\n {\n \"name\": \"fileLocation\",\n \"type\": \"string\"\n },\n {\n \"name\": \"measurementGroups\",\n \"type\": {\n \"type\": \"array\",\n \"items\": {\n \"name\": \"measurementGroups_record\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"measurementGroup\",\n \"type\": {\n \"name\": \"measurementGroup\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"measurementTypes\",\n \"type\": {\n \"type\": \"array\",\n \"items\": {\n \"name\": \"measurementTypes_record\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"measurementType\",\n \"type\": \"string\"\n }\n ]\n }\n }\n },\n {\n \"name\": \"managedObjectDNsBasic\",\n \"type\": {\n \"type\": \"array\",\n \"items\": {\n \"name\": \"managedObjectDNsBasic_record\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"DN\",\n \"type\": \"string\"\n }\n ]\n }\n }\n }\n ]\n }\n }\n ]\n }\n }\n }\n ]\n }\n }\n ]\n }\n}"
 + }
 + },
 + {
 + "key": {
 + "name": "CDSRequestCommonHeaderType",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CDSRequestCommonHeaderType",
 + "version": "0.0.1"
 + },
 + "schemaFlavour": "Avro",
 + "schemaDefinition": "{\n \"type\": \"record\",\n \"name\": \"CDSRequestCommonHeader_Type\",\n \"namespace\": \"org.onap.policy.apex.onap.helloworld\",\n \"fields\": [\n {\n \"name\": \"originatorId\",\n \"type\": \"string\"\n },\n {\n \"name\": \"requestId\",\n \"type\": \"string\"\n },\n {\n \"name\": \"subRequestId\",\n \"type\": \"string\"\n }\n ]\n}"
 + }
 + },
 + {
 + "key": {
 + "name": "CDSResponseCommonHeaderType",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CDSResponseCommonHeaderType",
 + "version": "0.0.1"
 + },
 + "schemaFlavour": "Avro",
 + "schemaDefinition": "{\n \"type\": \"record\",\n \"name\": \"CDSResponseCommonHeader_Type\",\n \"namespace\": \"org.onap.policy.apex.onap.helloworld\",\n \"fields\": [\n {\n \"name\": \"originatorId\",\n \"type\": \"string\"\n },\n {\n \"name\": \"requestId\",\n \"type\": \"string\"\n },\n {\n \"name\": \"subRequestId\",\n \"type\": \"string\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"string\"\n }\n ]\n}"
 + }
 + },
 + {
 + "key": {
 + "name": "CDSResponsePayloadType",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CDSResponsePayloadType",
 + "version": "0.0.1"
 + },
 + "schemaFlavour": "Avro",
 + "schemaDefinition": "{\n \"name\": \"CDSResponsePayloadEntry\",\n \"type\": \"record\",\n \"namespace\": \"com.acme.avro\",\n \"fields\": [\n {\n \"name\": \"create_DasH_subscription_DasH_response\",\n \"type\": {\n \"name\": \"create_DasH_subscription_DasH_response\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"odl_DasH_response\",\n \"type\": {\n \"name\": \"odl_DasH_response\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"status\",\n \"type\": \"string\"\n }\n ]\n }\n }\n ]\n }\n }\n ]\n}"
 + }
 + },
 + {
 + "key": {
 + "name": "CDSResponseStatusType",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CDSResponseStatusType",
 + "version": "0.0.1"
 + },
 + "schemaFlavour": "Avro",
 + "schemaDefinition": "{\n \"type\": \"record\",\n \"name\": \"CDSResponseStatus_Type\",\n \"namespace\": \"org.onap.policy.apex.onap.helloworld\",\n \"fields\": [\n {\n \"name\": \"code\",\n \"type\": \"int\"\n },\n {\n \"name\": \"eventType\",\n \"type\": \"string\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"string\"\n },\n {\n \"name\": \"message\",\n \"type\": \"string\"\n }\n ]\n}"
 + }
 + },
 + {
 + "key": {
 + "name": "PMSubscriptionType",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "PMSubscriptionType",
 + "version": "0.0.1"
 + },
 + "schemaFlavour": "Avro",
 + "schemaDefinition": "{\n \"name\": \"PMSubscription\",\n \"type\": \"record\",\n \"namespace\": \"org.onap.policy.apex.onap.pmcontrol\",\n \"fields\": [\n {\n \"name\": \"nfName\",\n \"type\": \"string\"\n },\n {\n \"name\": \"changeType\",\n \"type\": \"string\"\n },\n {\n \"name\": \"closedLoopControlName\",\n \"type\": \"string\"\n },\n {\n \"name\": \"policyName\",\n \"type\": \"string\"\n },\n {\n \"name\": \"subscription\",\n \"type\": {\n \"name\": \"subscription\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"subscriptionName\",\n \"type\": \"string\"\n },\n {\n \"name\": \"administrativeState\",\n \"type\": \"string\"\n },\n {\n \"name\": \"fileBasedGP\",\n \"type\": \"int\"\n },\n {\n \"name\": \"fileLocation\",\n \"type\": \"string\"\n },\n {\n \"name\": \"measurementGroups\",\n \"type\": {\n \"type\": \"array\",\n \"items\": {\n \"name\": \"Measurement_Groups_Type\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"measurementGroup\",\n \"type\": {\n \"name\": \"Measurement_Group_Type\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"measurementTypes\",\n \"type\": {\n \"type\": \"array\",\n \"items\": {\n \"name\": \"Measurement_Types_Type\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"measurementType\",\n \"type\": \"string\"\n }\n ]\n }\n }\n },\n {\n \"name\": \"managedObjectDNsBasic\",\n \"type\": {\n \"type\": \"array\",\n \"items\": {\n \"name\": \"Managed_Object_Dns_Basic_Type\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"DN\",\n \"type\": \"string\"\n }\n ]\n }\n }\n }\n ]\n }\n }\n ]\n }\n }\n }\n ]\n }\n }\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": "SubscriptionStatusType",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "SubscriptionStatusType",
 + "version": "0.0.1"
 + },
 + "schemaFlavour": "Avro",
 + "schemaDefinition": "{\n \"type\": \"record\",\n \"name\": \"ActivateSubscriptionStatus_Type\",\n \"namespace\": \"org.onap.policy.apex.onap.helloworld\",\n \"fields\": [\n {\n \"name\": \"subscriptionName\",\n \"type\": \"string\"\n },\n {\n \"name\": \"nfName\",\n \"type\": \"string\"\n },\n {\n \"name\": \"changeType\",\n \"type\": \"string\"\n },\n {\n \"name\": \"message\",\n \"type\": \"string\"\n }\n ]\n}"
 + }
 + },
 + {
 + "key": {
 + "name": "SubscriptionType",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "SubscriptionType",
 + "version": "0.0.1"
 + },
 + "schemaFlavour": "Avro",
 + "schemaDefinition": "{\n \"name\": \"subscription\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"subscriptionName\",\n \"type\": \"string\"\n },\n {\n \"name\": \"administrativeState\",\n \"type\": \"string\"\n },\n {\n \"name\": \"fileBasedGP\",\n \"type\": \"int\"\n },\n {\n \"name\": \"fileLocation\",\n \"type\": \"string\"\n },\n {\n \"name\": \"measurementGroups\",\n \"type\": {\n \"type\": \"array\",\n \"items\": {\n \"name\": \"Measurement_Groups_Type\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"measurementGroup\",\n \"type\": {\n \"name\": \"Measurement_Group_Type\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"measurementTypes\",\n \"type\": {\n \"type\": \"array\",\n \"items\": {\n \"name\": \"Measurement_Types_Type\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"measurementType\",\n \"type\": \"string\"\n }\n ]\n }\n }\n },\n {\n \"name\": \"managedObjectDNsBasic\",\n \"type\": {\n \"type\": \"array\",\n \"items\": {\n \"name\": \"Managed_Object_Dns_Basic_Type\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"DN\",\n \"type\": \"string\"\n }\n ]\n }\n }\n }\n ]\n }\n }\n ]\n }\n }\n }\n ]\n}"
 + }
 + },
 + {
 + "key": {
 + "name": "UUIDType",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "UUIDType",
 + "version": "0.0.1"
 + },
 + "schemaFlavour": "Java",
 + "schemaDefinition": "java.util.UUID"
 + }
 + }
 + ]
 + }
 + }
 }
 + }
 + },
 + "eventOutputParameters": {
 + "logOutputter": {
 + "carrierTechnologyParameters": {
 + "carrierTechnology": "FILE",
 + "parameters": {
 + "fileName": "outputevents.log"
 + }
 + },
 + "eventProtocolParameters": {
 + "eventProtocol": "JSON"
 + }
 + },
 + "CDSRequestProducer": {
 + "carrierTechnologyParameters": {
 + "carrierTechnology": "GRPC",
 + "parameterClassName": "org.onap.policy.apex.plugins.event.carrier.grpc.GrpcCarrierTechnologyParameters",
 + "parameters": {
 + "host": "10.2.0.122",
 + "port": 54322,
 + "username": "ccsdkapps",
 + "password": "ccsdkapps",
 + "timeout": 60
 + }
 + },
 + "eventProtocolParameters": {
 + "eventProtocol": "JSON"
 + },
 + "eventNameFilter": "(Create|Delete)SubscriptionRequestEvent",
 + "requestorMode": true,
 + "requestorPeer": "CDSRequestConsumer",
 + "requestorTimeout": 500
 + },
 + "CDSReplyProducer": {
 + "carrierTechnologyParameters": {
 + "carrierTechnology": "RESTCLIENT",
 + "parameterClassName": "org.onap.policy.apex.plugins.event.carrier.restclient.RestClientCarrierTechnologyParameters",
 + "parameters": {
 + "url": "http://message-router:3904/events/POLICY-CL-MGT"
 + }
 + },
 + "eventProtocolParameters": {
 + "eventProtocol": "JSON"
 + },
 + "eventNameFilter": "CDSResponseStatusEvent"
 + }
 + },
 + "eventInputParameters": {
 + "DCAEConsumer": {
 + "carrierTechnologyParameters": {
 + "carrierTechnology": "RESTCLIENT",
 + "parameterClassName": "org.onap.policy.apex.plugins.event.carrier.restclient.RestClientCarrierTechnologyParameters",
 + "parameters": {
 + "url": "http://message-router:3904/events/unauthenticated.DCAE_CL_OUTPUT/cg1/c1?timeout=30000"
 + }
 + },
 + "eventProtocolParameters": {
 + "eventProtocol": "JSON",
 + "parameters": {
 + "nameAlias": "testPolicyB"
 + }
 + },
 + "eventName": "testPolicyB",
 + "eventNameFilter": "testPolicyB"
 + },
 + "CDSRequestConsumer": {
 + "carrierTechnologyParameters": {
 + "carrierTechnology": "GRPC",
 + "parameterClassName": "org.onap.policy.apex.plugins.event.carrier.grpc.GrpcCarrierTechnologyParameters"
 + },
 + "eventProtocolParameters": {
 + "eventProtocol": "JSON"
 + },
 + "eventName": "CDSResponseEvent",
 + "eventNameFilter": "CDSResponseEvent",
 + "requestorMode": true,
 + "requestorPeer": "CDSRequestProducer",
 + "requestorTimeout": 500
 + }
 }
 - ]
 - },
 - "name": "ToscaServiceTemplateSimple",
 - "version": "1.0.0",
 - "metadata": {}
 + },
 + "name": "operational.apex.stabilityTestDefaultDomain",
 + "version": "1.0.0",
 + "metadata": {
 + "policy-id": "operational.apex.stabilityTestDefaultDomain",
 + "policy-version": "1.0.0"
 + }
 + }
 + }
 + ]
 + },
 + "name": "ToscaServiceTemplateSimple",
 + "version": "1.0.0",
 + "metadata": {}
 }</stringProp> <stringProp name="Argument.metadata">=</stringProp> </elementProp> @@ -2589,7 +2580,7 @@ if (prev.getResponseCode() == '200') { </hashTree> <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="Test Controller" enabled="true"/> <hashTree> - <SyncTimer guiclass="TestBeanGUI" testclass="SyncTimer" testname="Synchronizing Timer" enabled="true"> + <SyncTimer guiclass="TestBeanGUI" testclass="SyncTimer" testname="Synchronizing Timer" enabled="false"> <stringProp name="groupSize">${threads}</stringProp> <stringProp name="timeoutInMs">${threadsTimeOutInMs}</stringProp> </SyncTimer> @@ -2660,7 +2651,7 @@ if (prev.getResponseCode() == '200') { </elementProp> <stringProp name="HTTPSampler.domain">${HOSTNAME}</stringProp> <stringProp name="HTTPSampler.port">${DMAAP_PORT}</stringProp> - <stringProp name="HTTPSampler.protocol">https</stringProp> + <stringProp name="HTTPSampler.protocol">http</stringProp> <stringProp name="HTTPSampler.contentEncoding"></stringProp> <stringProp name="HTTPSampler.path">/events/unauthenticated.DCAE_CL_OUTPUT</stringProp> <stringProp name="HTTPSampler.method">POST</stringProp> @@ -2697,9 +2688,9 @@ if (prev.getResponseCode() == '200') { </elementProp> <stringProp name="HTTPSampler.domain">${HOSTNAME}</stringProp> <stringProp name="HTTPSampler.port">${DMAAP_PORT}</stringProp> - <stringProp name="HTTPSampler.protocol">https</stringProp> + <stringProp name="HTTPSampler.protocol">http</stringProp> <stringProp name="HTTPSampler.contentEncoding"></stringProp> - <stringProp name="HTTPSampler.path">/events/POLICY-PDP-PAP/cg1/c1?timeout=30000</stringProp> + <stringProp name="HTTPSampler.path">/events/POLICY-CL-MGT/cg${__threadNum}/c1?timeout=30000</stringProp> <stringProp name="HTTPSampler.method">GET</stringProp> <boolProp name="HTTPSampler.follow_redirects">true</boolProp> <boolProp name="HTTPSampler.auto_redirects">false</boolProp> @@ -2723,7 +2714,7 @@ if (prev.getResponseCode() == '200') { <stringProp name="TestPlan.comments">Assert response code coming back from apex-pdp</stringProp> </ResponseAssertion> <hashTree/> - <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert Response Message" enabled="false"> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert Response Message" enabled="true"> <collectionProp name="Asserion.test_strings"> <stringProp name="1608759622">org.onap.policy.apex.onap.pmcontrol</stringProp> <stringProp name="1996002556">CREATE</stringProp> diff --git a/testsuites/integration/integration-context-test/src/test/resources/META-INF/persistence.xml b/testsuites/integration/integration-context-test/src/test/resources/META-INF/persistence.xml index b6a9a9d1e..341c33e89 100644 --- a/testsuites/integration/integration-context-test/src/test/resources/META-INF/persistence.xml +++ b/testsuites/integration/integration-context-test/src/test/resources/META-INF/persistence.xml @@ -2,20 +2,20 @@ <!-- ============LICENSE_START======================================================= Copyright (C) 2016-2018 Ericsson. All rights reserved. - Modifications Copyright (C) 2019 Nordix Foundation. + Modifications Copyright (C) 2019-2021 Nordix Foundation. ================================================================================ 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========================================================= --> @@ -40,7 +40,7 @@ <properties> <property name="javax.persistence.jdbc.url" value="jdbc:derby:memory:apex_test" /> - <property name="javax.persistence.target-database" value="Derby" /> + <property name="eclipselink.target-database" value="Derby" /> <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver" /> <property name="eclipselink.ddl-generation" value="drop-and-create-tables" /> diff --git a/testsuites/performance/performance-benchmark-test/src/main/resources/apexPdpPerformanceTestPlan.jmx b/testsuites/performance/performance-benchmark-test/src/main/resources/apexPdpPerformanceTestPlan.jmx new file mode 100644 index 000000000..5d6533e29 --- /dev/null +++ b/testsuites/performance/performance-benchmark-test/src/main/resources/apexPdpPerformanceTestPlan.jmx @@ -0,0 +1,2928 @@ +<?xml version="1.0" encoding="UTF-8"?> +<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.4.1"> + <hashTree> + <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="APEX PDP STABILITY TEST PLAN" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <boolProp name="TestPlan.functional_mode">false</boolProp> + <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp> + <boolProp name="TestPlan.serialize_threadgroups">true</boolProp> + <elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true"> + <collectionProp name="Arguments.arguments"/> + </elementProp> + <stringProp name="TestPlan.user_define_classpath"></stringProp> + </TestPlan> + <hashTree> + <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true"> + <collectionProp name="HeaderManager.headers"> + <elementProp name="" elementType="Header"> + <stringProp name="Header.name">Content-Type</stringProp> + <stringProp name="Header.value">application/json</stringProp> + </elementProp> + <elementProp name="" elementType="Header"> + <stringProp name="Header.name">Accept</stringProp> + <stringProp name="Header.value">application/json</stringProp> + </elementProp> + </collectionProp> + </HeaderManager> + <hashTree/> + <ConfigTestElement guiclass="HttpDefaultsGui" testclass="ConfigTestElement" testname="HTTP Request Defaults" enabled="false"> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true"> + <collectionProp name="Arguments.arguments"/> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port">23324</stringProp> + <stringProp name="HTTPSampler.protocol">http</stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path"></stringProp> + <stringProp name="HTTPSampler.concurrentPool">6</stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + </ConfigTestElement> + <hashTree/> + <Arguments guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true"> + <collectionProp name="Arguments.arguments"> + <elementProp name="threads" elementType="Argument"> + <stringProp name="Argument.name">threads</stringProp> + <stringProp name="Argument.value">${__P(threads,20)}</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="threadsTimeOutInMs" elementType="Argument"> + <stringProp name="Argument.name">threadsTimeOutInMs</stringProp> + <stringProp name="Argument.value">${__P(threadsTimeOutInMs,5000)}</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="wait" elementType="Argument"> + <stringProp name="Argument.name">wait</stringProp> + <stringProp name="Argument.value">${__P(wait,10000)}</stringProp> + <stringProp name="Argument.desc">Wait time between requests to apex-pdp</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="PAP_PORT" elementType="Argument"> + <stringProp name="Argument.name">PAP_PORT</stringProp> + <stringProp name="Argument.value">${__P(PAP_PORT,30211)}</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="API_PORT" elementType="Argument"> + <stringProp name="Argument.name">API_PORT</stringProp> + <stringProp name="Argument.value">${__P(API_PORT,30785)}</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="APEX_PORT" elementType="Argument"> + <stringProp name="Argument.name">APEX_PORT</stringProp> + <stringProp name="Argument.value">${__P(APEX_PORT,30687)}</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="DMAAP_PORT" elementType="Argument"> + <stringProp name="Argument.name">DMAAP_PORT</stringProp> + <stringProp name="Argument.value">${__P(DMAAP_PORT,31345)}</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="HOSTNAME" elementType="Argument"> + <stringProp name="Argument.name">HOSTNAME</stringProp> + <stringProp name="Argument.value">${__P(HOSTNAME,10.2.0.120)}</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="LOG_PATH" elementType="Argument"> + <stringProp name="Argument.name">LOG_PATH</stringProp> + <stringProp name="Argument.value">${__P(LOG_PATH,/home/arkadiusza/apex_stability)}</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </Arguments> + <hashTree/> + <AuthManager guiclass="AuthPanel" testclass="AuthManager" testname="HTTP Authorization Manager" enabled="true"> + <collectionProp name="AuthManager.auth_list"> + <elementProp name="" elementType="Authorization"> + <stringProp name="Authorization.url">https://${HOSTNAME}:${API_PORT}</stringProp> + <stringProp name="Authorization.username">healthcheck</stringProp> + <stringProp name="Authorization.password">zb!XztG34</stringProp> + <stringProp name="Authorization.domain"></stringProp> + <stringProp name="Authorization.realm"></stringProp> + </elementProp> + <elementProp name="" elementType="Authorization"> + <stringProp name="Authorization.url">https://${HOSTNAME}:${PAP_PORT}</stringProp> + <stringProp name="Authorization.username">healthcheck</stringProp> + <stringProp name="Authorization.password">zb!XztG34</stringProp> + <stringProp name="Authorization.domain"></stringProp> + <stringProp name="Authorization.realm"></stringProp> + </elementProp> + <elementProp name="" elementType="Authorization"> + <stringProp name="Authorization.url">https://${HOSTNAME}:${APEX_PORT}</stringProp> + <stringProp name="Authorization.username">healthcheck</stringProp> + <stringProp name="Authorization.password">zb!XztG34</stringProp> + <stringProp name="Authorization.domain"></stringProp> + <stringProp name="Authorization.realm"></stringProp> + </elementProp> + </collectionProp> + <boolProp name="AuthManager.controlledByThreadGroup">false</boolProp> + </AuthManager> + <hashTree/> + <SetupThreadGroup guiclass="SetupThreadGroupGui" testclass="SetupThreadGroup" testname="setUp Thread Group" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <stringProp name="LoopController.loops">1</stringProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">1</stringProp> + <stringProp name="ThreadGroup.ramp_time">1</stringProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <boolProp name="ThreadGroup.same_user_on_next_iteration">true</boolProp> + </SetupThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Create Policy" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value">{
 + "tosca_definitions_version": "tosca_simple_yaml_1_1_0",
 + "topology_template": {
 + "policies": [
 + {
 + "operational.apex.stabilityTestDefaultDomain": {
 + "type": "onap.policies.native.Apex",
 + "type_version": "1.0.0",
 + "properties": {
 + "engineServiceParameters": {
 + "name": "MyApexEngine",
 + "version": "0.0.1",
 + "id": 45,
 + "instanceCount": 4,
 + "deploymentPort": 12561,
 + "engineParameters": {
 + "executorParameters": {
 + "JAVASCRIPT": {
 + "parameterClassName": "org.onap.policy.apex.plugins.executor.javascript.JavascriptExecutorParameters"
 + }
 + },
 + "contextParameters": {
 + "parameterClassName": "org.onap.policy.apex.context.parameters.ContextParameters",
 + "schemaParameters": {
 + "Avro": {
 + "parameterClassName": "org.onap.policy.apex.plugins.context.schema.avro.AvroSchemaHelperParameters"
 + }
 + }
 + }
 + },
 + "policy_type_impl": {
 + "apexPolicyModel": {
 + "key": {
 + "name": "APEXgRPCPolicy",
 + "version": "0.0.1"
 + },
 + "keyInformation": {
 + "key": {
 + "name": "APEXgRPCPolicy_KeyInfo",
 + "version": "0.0.1"
 + },
 + "keyInfoMap": {
 + "entry": [
 + {
 + "key": {
 + "name": "APEXgRPCPolicy",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "APEXgRPCPolicy",
 + "version": "0.0.1"
 + },
 + "UUID": "b8424cdb-29fb-3566-b77a-f4f847d81cc9",
 + "description": "Generated description for concept referred to by key \"APEXgRPCPolicy:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "APEXgRPCPolicy_Albums",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "APEXgRPCPolicy_Albums",
 + "version": "0.0.1"
 + },
 + "UUID": "9922906c-ccaa-34f7-95e2-bcc36e77821b",
 + "description": "Generated description for concept referred to by key \"APEXgRPCPolicy_Albums:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "APEXgRPCPolicy_Events",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "APEXgRPCPolicy_Events",
 + "version": "0.0.1"
 + },
 + "UUID": "5bf28afd-787c-3138-a3e1-b33ad94a038a",
 + "description": "Generated description for concept referred to by key \"APEXgRPCPolicy_Events:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "APEXgRPCPolicy_KeyInfo",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "APEXgRPCPolicy_KeyInfo",
 + "version": "0.0.1"
 + },
 + "UUID": "68abaa6f-8d03-3a53-9590-007115817d5c",
 + "description": "Generated description for concept referred to by key \"APEXgRPCPolicy_KeyInfo:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "APEXgRPCPolicy_Policies",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "APEXgRPCPolicy_Policies",
 + "version": "0.0.1"
 + },
 + "UUID": "819d06c3-33c2-3031-aa78-96281aa4270a",
 + "description": "Generated description for concept referred to by key \"APEXgRPCPolicy_Policies:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "APEXgRPCPolicy_Schemas",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "APEXgRPCPolicy_Schemas",
 + "version": "0.0.1"
 + },
 + "UUID": "8e67d466-f990-3a39-9fd7-4490cac342dc",
 + "description": "Generated description for concept referred to by key \"APEXgRPCPolicy_Schemas:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "APEXgRPCPolicy_Tasks",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "APEXgRPCPolicy_Tasks",
 + "version": "0.0.1"
 + },
 + "UUID": "4668db3d-6fe2-3885-8e47-f30cd0102f0a",
 + "description": "Generated description for concept referred to by key \"APEXgRPCPolicy_Tasks:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "CDSActionIdentifiersType",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CDSActionIdentifiersType",
 + "version": "0.0.1"
 + },
 + "UUID": "6e5fa19b-14df-37e3-a4ae-8c537e861a82",
 + "description": "Generated description for concept referred to by key \"CDSActionIdentifiersType:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "CDSCreateSubscriptionPayloadType",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CDSCreateSubscriptionPayloadType",
 + "version": "0.0.1"
 + },
 + "UUID": "8350ac5e-c157-38b9-9614-a0f93a830e60",
 + "description": "Generated description for concept referred to by key \"CDSCreateSubscriptionPayloadType:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "CDSDeleteSubscriptionPayloadType",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CDSDeleteSubscriptionPayloadType",
 + "version": "0.0.1"
 + },
 + "UUID": "12658406-9147-3c9d-a38c-5ad5e30b092b",
 + "description": "Generated description for concept referred to by key \"CDSDeleteSubscriptionPayloadType:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "CDSRequestCommonHeaderType",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CDSRequestCommonHeaderType",
 + "version": "0.0.1"
 + },
 + "UUID": "35590ac0-062c-39f1-8786-b4ff716e30b1",
 + "description": "Generated description for concept referred to by key \"CDSRequestCommonHeaderType:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "CDSResponseCommonHeaderType",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CDSResponseCommonHeaderType",
 + "version": "0.0.1"
 + },
 + "UUID": "dd7e1805-885a-350b-aaf9-ed541321ae3c",
 + "description": "Generated description for concept referred to by key \"CDSResponseCommonHeaderType:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "CDSResponseEvent",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CDSResponseEvent",
 + "version": "0.0.1"
 + },
 + "UUID": "15161037-9ac8-3223-820f-4e743562a345",
 + "description": "Generated description for concept referred to by key \"CDSResponseEvent:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "CDSResponsePayloadType",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CDSResponsePayloadType",
 + "version": "0.0.1"
 + },
 + "UUID": "97dc5f58-25bb-3c20-8d53-fdb70d7ca256",
 + "description": "Generated description for concept referred to by key \"CDSResponsePayloadType:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "CDSResponsePolicy",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CDSResponsePolicy",
 + "version": "0.0.1"
 + },
 + "UUID": "c28b05a8-7436-3ac0-82ca-6d5fc18c9584",
 + "description": "Generated description for concept referred to by key \"CDSResponsePolicy:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "CDSResponseStatusEvent",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CDSResponseStatusEvent",
 + "version": "0.0.1"
 + },
 + "UUID": "7986e21b-32f7-302e-9554-31f21b673493",
 + "description": "Generated description for concept referred to by key \"CDSResponseStatusEvent:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "CDSResponseStatusType",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CDSResponseStatusType",
 + "version": "0.0.1"
 + },
 + "UUID": "92b8a2cf-344e-3ce1-8cc0-2b7d3cb695fa",
 + "description": "Generated description for concept referred to by key \"CDSResponseStatusType:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "CDSResponseTask",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CDSResponseTask",
 + "version": "0.0.1"
 + },
 + "UUID": "d22c78a5-272c-391d-8083-28588280caf9",
 + "description": "Generated description for concept referred to by key \"CDSResponseTask:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "CreateSubscriptionPayloadEvent",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CreateSubscriptionPayloadEvent",
 + "version": "0.0.1"
 + },
 + "UUID": "92162397-1a8e-3a3f-a469-d2af7700af4a",
 + "description": "Generated description for concept referred to by key \"CreateSubscriptionPayloadEvent:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "CreateSubscriptionPayloadTask",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CreateSubscriptionPayloadTask",
 + "version": "0.0.1"
 + },
 + "UUID": "bc0c69f0-52ed-38ea-b468-ae4a6fd1730d",
 + "description": "Generated description for concept referred to by key \"CreateSubscriptionPayloadTask:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "CreateSubscriptionRequestEvent",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CreateSubscriptionRequestEvent",
 + "version": "0.0.1"
 + },
 + "UUID": "7cfcf843-337e-3f41-b755-5043cb0a08fc",
 + "description": "Generated description for concept referred to by key \"CreateSubscriptionRequestEvent:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "CreateSubscriptionRequestTask",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CreateSubscriptionRequestTask",
 + "version": "0.0.1"
 + },
 + "UUID": "89cb75e9-f06c-30d3-b4ff-698d45f63869",
 + "description": "Generated description for concept referred to by key \"CreateSubscriptionRequestTask:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "DeleteSubscriptionPayloadEvent",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "DeleteSubscriptionPayloadEvent",
 + "version": "0.0.1"
 + },
 + "UUID": "994fa441-04ab-33bb-832d-1cd12ab5d074",
 + "description": "Generated description for concept referred to by key \"DeleteSubscriptionPayloadEvent:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "DeleteSubscriptionPayloadTask",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "DeleteSubscriptionPayloadTask",
 + "version": "0.0.1"
 + },
 + "UUID": "0f519117-5fea-3e4b-941f-8f778100465f",
 + "description": "Generated description for concept referred to by key \"DeleteSubscriptionPayloadTask:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "DeleteSubscriptionRequestEvent",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "DeleteSubscriptionRequestEvent",
 + "version": "0.0.1"
 + },
 + "UUID": "15d618d8-1689-3a05-89a5-05efa9388f65",
 + "description": "Generated description for concept referred to by key \"DeleteSubscriptionRequestEvent:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "DeleteSubscriptionRequestTask",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "DeleteSubscriptionRequestTask",
 + "version": "0.0.1"
 + },
 + "UUID": "acb772fe-d442-39e3-98f9-b1080caf4150",
 + "description": "Generated description for concept referred to by key \"DeleteSubscriptionRequestTask:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "PMSubscriptionAlbum",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "PMSubscriptionAlbum",
 + "version": "0.0.1"
 + },
 + "UUID": "c2bd6f0d-6854-317a-9be2-97c08338428c",
 + "description": "Generated description for concept referred to by key \"PMSubscriptionAlbum:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "PMSubscriptionOutputEvent",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "PMSubscriptionOutputEvent",
 + "version": "0.0.1"
 + },
 + "UUID": "992b7819-9f69-3aa0-bb0f-6e45ea15ce05",
 + "description": "Generated description for concept referred to by key \"PMSubscriptionOutputEvent:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "PMSubscriptionType",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "PMSubscriptionType",
 + "version": "0.0.1"
 + },
 + "UUID": "73c1c397-4fc3-357f-93b6-a8ad707fbaae",
 + "description": "Generated description for concept referred to by key \"PMSubscriptionType: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": "ReceivePMSubscriptionTask",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "ReceivePMSubscriptionTask",
 + "version": "0.0.1"
 + },
 + "UUID": "6c1c6c45-26e0-3591-94bf-679d20e283f4",
 + "description": "Generated description for concept referred to by key \"ReceivePMSubscriptionTask: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": "SubscriptionStatusType",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "SubscriptionStatusType",
 + "version": "0.0.1"
 + },
 + "UUID": "597643b1-9db1-31ce-85d0-e1c63c43b30b",
 + "description": "Generated description for concept referred to by key \"SubscriptionStatusType:0.0.1\""
 + }
 + },
 + {
 + "key": {
 + "name": "SubscriptionType",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "SubscriptionType",
 + "version": "0.0.1"
 + },
 + "UUID": "184547bb-7d64-3cb2-a273-d7185102c5ce",
 + "description": "Generated description for concept referred to by key \"SubscriptionType: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\""
 + }
 + },
 + {
 + "key": {
 + "name": "testPolicyB",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "testPolicyB",
 + "version": "0.0.1"
 + },
 + "UUID": "ead590a3-ba2e-3a01-b6e9-9329f5c8fee1",
 + "description": "Generated description for concept referred to by key \"testPolicyB:0.0.1\""
 + }
 + }
 + ]
 + }
 + },
 + "policies": {
 + "key": {
 + "name": "APEXgRPCPolicy_Policies",
 + "version": "0.0.1"
 + },
 + "policyMap": {
 + "entry": [
 + {
 + "key": {
 + "name": "CDSResponsePolicy",
 + "version": "0.0.1"
 + },
 + "value": {
 + "policyKey": {
 + "name": "CDSResponsePolicy",
 + "version": "0.0.1"
 + },
 + "template": "Freestyle",
 + "state": {
 + "entry": [
 + {
 + "key": "CDSResponseState",
 + "value": {
 + "stateKey": {
 + "parentKeyName": "CDSResponsePolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "NULL",
 + "localName": "CDSResponseState"
 + },
 + "trigger": {
 + "name": "CDSResponseEvent",
 + "version": "0.0.1"
 + },
 + "stateOutputs": {
 + "entry": [
 + {
 + "key": "ResponseOutput",
 + "value": {
 + "key": {
 + "parentKeyName": "CDSResponsePolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "CDSResponseState",
 + "localName": "ResponseOutput"
 + },
 + "outgoingEvent": {
 + "name": "CDSResponseStatusEvent",
 + "version": "0.0.1"
 + },
 + "nextState": {
 + "parentKeyName": "NULL",
 + "parentKeyVersion": "0.0.0",
 + "parentLocalName": "NULL",
 + "localName": "NULL"
 + }
 + }
 + }
 + ]
 + },
 + "contextAlbumReference": [],
 + "taskSelectionLogic": {
 + "key": "NULL",
 + "logicFlavour": "UNDEFINED",
 + "logic": ""
 + },
 + "stateFinalizerLogicMap": {
 + "entry": []
 + },
 + "defaultTask": {
 + "name": "CDSResponseTask",
 + "version": "0.0.1"
 + },
 + "taskReferences": {
 + "entry": [
 + {
 + "key": {
 + "name": "CDSResponseTask",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "parentKeyName": "CDSResponsePolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "CDSResponseState",
 + "localName": "CDSResponsePolicy"
 + },
 + "outputType": "DIRECT",
 + "output": {
 + "parentKeyName": "CDSResponsePolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "CDSResponseState",
 + "localName": "ResponseOutput"
 + }
 + }
 + }
 + ]
 + }
 + }
 + }
 + ]
 + },
 + "firstState": "CDSResponseState"
 + }
 + },
 + {
 + "key": {
 + "name": "ReceiveEventPolicy",
 + "version": "0.0.1"
 + },
 + "value": {
 + "policyKey": {
 + "name": "ReceiveEventPolicy",
 + "version": "0.0.1"
 + },
 + "template": "Freestyle",
 + "state": {
 + "entry": [
 + {
 + "key": "CreateOrDeleteState",
 + "value": {
 + "stateKey": {
 + "parentKeyName": "ReceiveEventPolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "NULL",
 + "localName": "CreateOrDeleteState"
 + },
 + "trigger": {
 + "name": "PMSubscriptionOutputEvent",
 + "version": "0.0.1"
 + },
 + "stateOutputs": {
 + "entry": [
 + {
 + "key": "CreateSubscriptionPayload",
 + "value": {
 + "key": {
 + "parentKeyName": "ReceiveEventPolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "CreateOrDeleteState",
 + "localName": "CreateSubscriptionPayload"
 + },
 + "outgoingEvent": {
 + "name": "CreateSubscriptionPayloadEvent",
 + "version": "0.0.1"
 + },
 + "nextState": {
 + "parentKeyName": "ReceiveEventPolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "NULL",
 + "localName": "CreateSubscription"
 + }
 + }
 + },
 + {
 + "key": "DeleteSubscriptionPayload",
 + "value": {
 + "key": {
 + "parentKeyName": "ReceiveEventPolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "CreateOrDeleteState",
 + "localName": "DeleteSubscriptionPayload"
 + },
 + "outgoingEvent": {
 + "name": "DeleteSubscriptionPayloadEvent",
 + "version": "0.0.1"
 + },
 + "nextState": {
 + "parentKeyName": "ReceiveEventPolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "NULL",
 + "localName": "DeleteSubscription"
 + }
 + }
 + }
 + ]
 + },
 + "contextAlbumReference": [
 + {
 + "name": "PMSubscriptionAlbum",
 + "version": "0.0.1"
 + }
 + ],
 + "taskSelectionLogic": {
 + "key": "TaskSelectionLogic",
 + "logicFlavour": "JAVASCRIPT",
 + "logic": "/*\n * ============LICENSE_START=======================================================\n * Copyright (C) 2020 Nordix Foundation.\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);\n\nvar pmSubscriptionInfo = executor.getContextAlbum(\"PMSubscriptionAlbum\").get(executor.inFields.get(\"albumID\").toString())\nvar changeType = pmSubscriptionInfo.get(\"changeType\").toString()\n\nif (\"CREATE\".equals(changeType)) {\n executor.subject.getTaskKey(\"CreateSubscriptionPayloadTask\").copyTo(executor.selectedTask);\n}\nelse if (\"DELETE\".equals(changeType)) {\n executor.subject.getTaskKey(\"DeleteSubscriptionPayloadTask\").copyTo(executor.selectedTask);\n}\n\ntrue;"
 + },
 + "stateFinalizerLogicMap": {
 + "entry": []
 + },
 + "defaultTask": {
 + "name": "CreateSubscriptionPayloadTask",
 + "version": "0.0.1"
 + },
 + "taskReferences": {
 + "entry": [
 + {
 + "key": {
 + "name": "CreateSubscriptionPayloadTask",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "parentKeyName": "ReceiveEventPolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "CreateOrDeleteState",
 + "localName": "ReceiveEventPolicy"
 + },
 + "outputType": "DIRECT",
 + "output": {
 + "parentKeyName": "ReceiveEventPolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "CreateOrDeleteState",
 + "localName": "CreateSubscriptionPayload"
 + }
 + }
 + },
 + {
 + "key": {
 + "name": "DeleteSubscriptionPayloadTask",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "parentKeyName": "ReceiveEventPolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "CreateOrDeleteState",
 + "localName": "ReceiveEventPolicy"
 + },
 + "outputType": "DIRECT",
 + "output": {
 + "parentKeyName": "ReceiveEventPolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "CreateOrDeleteState",
 + "localName": "DeleteSubscriptionPayload"
 + }
 + }
 + }
 + ]
 + }
 + }
 + },
 + {
 + "key": "CreateSubscription",
 + "value": {
 + "stateKey": {
 + "parentKeyName": "ReceiveEventPolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "NULL",
 + "localName": "CreateSubscription"
 + },
 + "trigger": {
 + "name": "CreateSubscriptionPayloadEvent",
 + "version": "0.0.1"
 + },
 + "stateOutputs": {
 + "entry": [
 + {
 + "key": "IssueCreateSubscriptionRequestOutput",
 + "value": {
 + "key": {
 + "parentKeyName": "ReceiveEventPolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "CreateSubscription",
 + "localName": "IssueCreateSubscriptionRequestOutput"
 + },
 + "outgoingEvent": {
 + "name": "CreateSubscriptionRequestEvent",
 + "version": "0.0.1"
 + },
 + "nextState": {
 + "parentKeyName": "NULL",
 + "parentKeyVersion": "0.0.0",
 + "parentLocalName": "NULL",
 + "localName": "NULL"
 + }
 + }
 + }
 + ]
 + },
 + "contextAlbumReference": [
 + {
 + "name": "PMSubscriptionAlbum",
 + "version": "0.0.1"
 + }
 + ],
 + "taskSelectionLogic": {
 + "key": "NULL",
 + "logicFlavour": "UNDEFINED",
 + "logic": ""
 + },
 + "stateFinalizerLogicMap": {
 + "entry": []
 + },
 + "defaultTask": {
 + "name": "CreateSubscriptionRequestTask",
 + "version": "0.0.1"
 + },
 + "taskReferences": {
 + "entry": [
 + {
 + "key": {
 + "name": "CreateSubscriptionRequestTask",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "parentKeyName": "ReceiveEventPolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "CreateSubscription",
 + "localName": "ReceiveEventPolicy"
 + },
 + "outputType": "DIRECT",
 + "output": {
 + "parentKeyName": "ReceiveEventPolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "CreateSubscription",
 + "localName": "IssueCreateSubscriptionRequestOutput"
 + }
 + }
 + }
 + ]
 + }
 + }
 + },
 + {
 + "key": "DeleteSubscription",
 + "value": {
 + "stateKey": {
 + "parentKeyName": "ReceiveEventPolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "NULL",
 + "localName": "DeleteSubscription"
 + },
 + "trigger": {
 + "name": "DeleteSubscriptionPayloadEvent",
 + "version": "0.0.1"
 + },
 + "stateOutputs": {
 + "entry": [
 + {
 + "key": "IssueDeleteSubscriptionRequestOutput",
 + "value": {
 + "key": {
 + "parentKeyName": "ReceiveEventPolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "DeleteSubscription",
 + "localName": "IssueDeleteSubscriptionRequestOutput"
 + },
 + "outgoingEvent": {
 + "name": "DeleteSubscriptionRequestEvent",
 + "version": "0.0.1"
 + },
 + "nextState": {
 + "parentKeyName": "NULL",
 + "parentKeyVersion": "0.0.0",
 + "parentLocalName": "NULL",
 + "localName": "NULL"
 + }
 + }
 + }
 + ]
 + },
 + "contextAlbumReference": [
 + {
 + "name": "PMSubscriptionAlbum",
 + "version": "0.0.1"
 + }
 + ],
 + "taskSelectionLogic": {
 + "key": "NULL",
 + "logicFlavour": "UNDEFINED",
 + "logic": ""
 + },
 + "stateFinalizerLogicMap": {
 + "entry": []
 + },
 + "defaultTask": {
 + "name": "DeleteSubscriptionRequestTask",
 + "version": "0.0.1"
 + },
 + "taskReferences": {
 + "entry": [
 + {
 + "key": {
 + "name": "DeleteSubscriptionRequestTask",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "parentKeyName": "ReceiveEventPolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "DeleteSubscription",
 + "localName": "ReceiveEventPolicy"
 + },
 + "outputType": "DIRECT",
 + "output": {
 + "parentKeyName": "ReceiveEventPolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "DeleteSubscription",
 + "localName": "IssueDeleteSubscriptionRequestOutput"
 + }
 + }
 + }
 + ]
 + }
 + }
 + },
 + {
 + "key": "ReceiveSubscriptionState",
 + "value": {
 + "stateKey": {
 + "parentKeyName": "ReceiveEventPolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "NULL",
 + "localName": "ReceiveSubscriptionState"
 + },
 + "trigger": {
 + "name": "testPolicyB",
 + "version": "0.0.1"
 + },
 + "stateOutputs": {
 + "entry": [
 + {
 + "key": "ReceivePMSubscriptionOutput",
 + "value": {
 + "key": {
 + "parentKeyName": "ReceiveEventPolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "ReceiveSubscriptionState",
 + "localName": "ReceivePMSubscriptionOutput"
 + },
 + "outgoingEvent": {
 + "name": "PMSubscriptionOutputEvent",
 + "version": "0.0.1"
 + },
 + "nextState": {
 + "parentKeyName": "ReceiveEventPolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "NULL",
 + "localName": "CreateOrDeleteState"
 + }
 + }
 + }
 + ]
 + },
 + "contextAlbumReference": [
 + {
 + "name": "PMSubscriptionAlbum",
 + "version": "0.0.1"
 + }
 + ],
 + "taskSelectionLogic": {
 + "key": "NULL",
 + "logicFlavour": "UNDEFINED",
 + "logic": ""
 + },
 + "stateFinalizerLogicMap": {
 + "entry": []
 + },
 + "defaultTask": {
 + "name": "ReceivePMSubscriptionTask",
 + "version": "0.0.1"
 + },
 + "taskReferences": {
 + "entry": [
 + {
 + "key": {
 + "name": "ReceivePMSubscriptionTask",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "parentKeyName": "ReceiveEventPolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "ReceiveSubscriptionState",
 + "localName": "ReceiveEventPolicy"
 + },
 + "outputType": "DIRECT",
 + "output": {
 + "parentKeyName": "ReceiveEventPolicy",
 + "parentKeyVersion": "0.0.1",
 + "parentLocalName": "ReceiveSubscriptionState",
 + "localName": "ReceivePMSubscriptionOutput"
 + }
 + }
 + }
 + ]
 + }
 + }
 + }
 + ]
 + },
 + "firstState": "ReceiveSubscriptionState"
 + }
 + }
 + ]
 + }
 + },
 + "tasks": {
 + "key": {
 + "name": "APEXgRPCPolicy_Tasks",
 + "version": "0.0.1"
 + },
 + "taskMap": {
 + "entry": [
 + {
 + "key": {
 + "name": "CDSResponseTask",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CDSResponseTask",
 + "version": "0.0.1"
 + },
 + "inputFields": {
 + "entry": [
 + {
 + "key": "actionIdentifiers",
 + "value": {
 + "key": "actionIdentifiers",
 + "fieldSchemaKey": {
 + "name": "CDSActionIdentifiersType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "commonHeader",
 + "value": {
 + "key": "commonHeader",
 + "fieldSchemaKey": {
 + "name": "CDSResponseCommonHeaderType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "payload",
 + "value": {
 + "key": "payload",
 + "fieldSchemaKey": {
 + "name": "CDSResponsePayloadType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "status",
 + "value": {
 + "key": "status",
 + "fieldSchemaKey": {
 + "name": "CDSResponseStatusType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + }
 + ]
 + },
 + "outputFields": {
 + "entry": [
 + {
 + "key": "status",
 + "value": {
 + "key": "status",
 + "fieldSchemaKey": {
 + "name": "SubscriptionStatusType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + }
 + ]
 + },
 + "taskParameters": {
 + "entry": []
 + },
 + "contextAlbumReference": [
 + {
 + "name": "PMSubscriptionAlbum",
 + "version": "0.0.1"
 + }
 + ],
 + "taskLogic": {
 + "key": "TaskLogic",
 + "logicFlavour": "JAVASCRIPT",
 + "logic": "/*\n * ============LICENSE_START=======================================================\n * Copyright (C) 2020 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\n\nvar uuidType = java.util.UUID;\n\nvar albumID = uuidType.fromString(\"d0050623-18e5-46c9-9298-9a567990cd7c\");\n\nvar pmSubscriptionInfo = executor.getContextAlbum(\"PMSubscriptionAlbum\").get(albumID.toString());\n\nvar responseStatus = executor.subject.getOutFieldSchemaHelper(\"status\").createNewInstance();\n\nresponseStatus.put(\"subscriptionName\", pmSubscriptionInfo.get(\"subscription\").get(\"subscriptionName\"))\nresponseStatus.put(\"nfName\", pmSubscriptionInfo.get(\"nfName\"))\nresponseStatus.put(\"changeType\", pmSubscriptionInfo.get(\"changeType\"))\n\nvar response = executor.inFields.get(\"payload\")\n\nif (\"failure\".equals(response.get(\"create_DasH_subscription_DasH_response\").get(\"odl_DasH_response\").get(\"status\"))) {\n responseStatus.put(\"message\", \"failed\")\n} else {\n responseStatus.put(\"message\", \"success\")\n}\n\nexecutor.outFields.put(\"status\", responseStatus)\n\ntrue;"
 + }
 + }
 + },
 + {
 + "key": {
 + "name": "CreateSubscriptionPayloadTask",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CreateSubscriptionPayloadTask",
 + "version": "0.0.1"
 + },
 + "inputFields": {
 + "entry": [
 + {
 + "key": "albumID",
 + "value": {
 + "key": "albumID",
 + "fieldSchemaKey": {
 + "name": "UUIDType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + }
 + ]
 + },
 + "outputFields": {
 + "entry": [
 + {
 + "key": "albumID",
 + "value": {
 + "key": "albumID",
 + "fieldSchemaKey": {
 + "name": "UUIDType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "payload",
 + "value": {
 + "key": "payload",
 + "fieldSchemaKey": {
 + "name": "CDSCreateSubscriptionPayloadType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + }
 + ]
 + },
 + "taskParameters": {
 + "entry": []
 + },
 + "contextAlbumReference": [
 + {
 + "name": "PMSubscriptionAlbum",
 + "version": "0.0.1"
 + }
 + ],
 + "taskLogic": {
 + "key": "TaskLogic",
 + "logicFlavour": "JAVASCRIPT",
 + "logic": "/*\n * ============LICENSE_START=======================================================\n * Copyright (C) 2020 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);\n\nvar pmSubscriptionInfo = executor.getContextAlbum(\"PMSubscriptionAlbum\").get(executor.inFields.get(\"albumID\").toString())\n\nvar payloadProperties = executor.subject.getOutFieldSchemaHelper(\"payload\").createNewSubInstance(\"create_DasH_subscription_DasH_properties_record\");\n\npayloadProperties.put(\"nfName\", pmSubscriptionInfo.get(\"nfName\"))\npayloadProperties.put(\"subscriptionName\", pmSubscriptionInfo.get(\"subscription\").get(\"subscriptionName\"))\npayloadProperties.put(\"administrativeState\", pmSubscriptionInfo.get(\"subscription\").get(\"administrativeState\"))\npayloadProperties.put(\"fileBasedGP\", pmSubscriptionInfo.get(\"subscription\").get(\"fileBasedGP\").toString())\npayloadProperties.put(\"fileLocation\", pmSubscriptionInfo.get(\"subscription\").get(\"fileLocation\"))\npayloadProperties.put(\"measurementGroups\", pmSubscriptionInfo.get(\"subscription\").get(\"measurementGroups\"))\n\nvar payloadEntry = executor.subject.getOutFieldSchemaHelper(\"payload\").createNewSubInstance(\"CDSRequestPayloadEntry\");\npayloadEntry.put(\"create_DasH_subscription_DasH_properties\", payloadProperties)\n\nvar payload = executor.subject.getOutFieldSchemaHelper(\"payload\").createNewInstance();\npayload.put(\"create_DasH_subscription_DasH_request\", payloadEntry);\n\nexecutor.outFields.put(\"albumID\", executor.inFields.get(\"albumID\"))\nexecutor.outFields.put(\"payload\", payload);\n\nexecutor.logger.info(\"Sending Create Subscription Event to CDS\")\n\ntrue;"
 + }
 + }
 + },
 + {
 + "key": {
 + "name": "CreateSubscriptionRequestTask",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CreateSubscriptionRequestTask",
 + "version": "0.0.1"
 + },
 + "inputFields": {
 + "entry": [
 + {
 + "key": "albumID",
 + "value": {
 + "key": "albumID",
 + "fieldSchemaKey": {
 + "name": "UUIDType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "payload",
 + "value": {
 + "key": "payload",
 + "fieldSchemaKey": {
 + "name": "CDSCreateSubscriptionPayloadType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + }
 + ]
 + },
 + "outputFields": {
 + "entry": [
 + {
 + "key": "actionIdentifiers",
 + "value": {
 + "key": "actionIdentifiers",
 + "fieldSchemaKey": {
 + "name": "CDSActionIdentifiersType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "commonHeader",
 + "value": {
 + "key": "commonHeader",
 + "fieldSchemaKey": {
 + "name": "CDSRequestCommonHeaderType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "payload",
 + "value": {
 + "key": "payload",
 + "fieldSchemaKey": {
 + "name": "CDSCreateSubscriptionPayloadType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + }
 + ]
 + },
 + "taskParameters": {
 + "entry": []
 + },
 + "contextAlbumReference": [
 + {
 + "name": "PMSubscriptionAlbum",
 + "version": "0.0.1"
 + }
 + ],
 + "taskLogic": {
 + "key": "TaskLogic",
 + "logicFlavour": "JAVASCRIPT",
 + "logic": "/*\n * ============LICENSE_START=======================================================\n * Copyright (C) 2020 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);\n\nvar pmSubscriptionInfo = executor.getContextAlbum(\"PMSubscriptionAlbum\").get(executor.inFields.get(\"albumID\").toString())\nvar payload = executor.inFields.get(\"payload\")\nvar actionName = \"create-subscription\"\n\nvar commonHeader = executor.subject.getOutFieldSchemaHelper(\"commonHeader\").createNewInstance();\ncommonHeader.put(\"originatorId\", \"sdnc\");\ncommonHeader.put(\"requestId\", \"123456-1000\");\ncommonHeader.put(\"subRequestId\", \"sub-123456-1000\");\n\nvar actionIdentifiers = executor.subject.getOutFieldSchemaHelper(\"actionIdentifiers\").createNewInstance();\nactionIdentifiers.put(\"actionName\", actionName);\nactionIdentifiers.put(\"blueprintName\", \"pm_control\");\nactionIdentifiers.put(\"blueprintVersion\", \"1.0.0\");\nactionIdentifiers.put(\"mode\", \"sync\");\n\nexecutor.outFields.put(\"commonHeader\", commonHeader);\nexecutor.outFields.put(\"actionIdentifiers\", actionIdentifiers);\nexecutor.outFields.put(\"payload\", payload);\n\nexecutor.logger.info(\"Sending Activate Subscription Event to CDS\")\n\ntrue;"
 + }
 + }
 + },
 + {
 + "key": {
 + "name": "DeleteSubscriptionPayloadTask",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "DeleteSubscriptionPayloadTask",
 + "version": "0.0.1"
 + },
 + "inputFields": {
 + "entry": [
 + {
 + "key": "albumID",
 + "value": {
 + "key": "albumID",
 + "fieldSchemaKey": {
 + "name": "UUIDType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + }
 + ]
 + },
 + "outputFields": {
 + "entry": [
 + {
 + "key": "albumID",
 + "value": {
 + "key": "albumID",
 + "fieldSchemaKey": {
 + "name": "UUIDType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "payload",
 + "value": {
 + "key": "payload",
 + "fieldSchemaKey": {
 + "name": "CDSDeleteSubscriptionPayloadType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + }
 + ]
 + },
 + "taskParameters": {
 + "entry": []
 + },
 + "contextAlbumReference": [
 + {
 + "name": "PMSubscriptionAlbum",
 + "version": "0.0.1"
 + }
 + ],
 + "taskLogic": {
 + "key": "TaskLogic",
 + "logicFlavour": "JAVASCRIPT",
 + "logic": "/*\n * ============LICENSE_START=======================================================\n * Copyright (C) 2020 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);\n\nvar pmSubscriptionInfo = executor.getContextAlbum(\"PMSubscriptionAlbum\").get(executor.inFields.get(\"albumID\").toString())\n\nvar payloadProperties = executor.subject.getOutFieldSchemaHelper(\"payload\").createNewSubInstance(\"delete_DasH_subscription_DasH_properties_record\");\n\npayloadProperties.put(\"nfName\", pmSubscriptionInfo.get(\"nfName\"))\npayloadProperties.put(\"subscriptionName\", pmSubscriptionInfo.get(\"subscription\").get(\"subscriptionName\"))\npayloadProperties.put(\"administrativeState\", pmSubscriptionInfo.get(\"subscription\").get(\"administrativeState\"))\npayloadProperties.put(\"fileBasedGP\", pmSubscriptionInfo.get(\"subscription\").get(\"fileBasedGP\").toString())\npayloadProperties.put(\"fileLocation\", pmSubscriptionInfo.get(\"subscription\").get(\"fileLocation\"))\npayloadProperties.put(\"measurementGroups\", pmSubscriptionInfo.get(\"subscription\").get(\"measurementGroups\"))\n\nvar payloadEntry = executor.subject.getOutFieldSchemaHelper(\"payload\").createNewSubInstance(\"CDSRequestPayloadEntry\");\npayloadEntry.put(\"delete_DasH_subscription_DasH_properties\", payloadProperties)\n\nvar payload = executor.subject.getOutFieldSchemaHelper(\"payload\").createNewInstance();\npayload.put(\"delete_DasH_subscription_DasH_request\", payloadEntry);\n\nexecutor.outFields.put(\"albumID\", executor.inFields.get(\"albumID\"))\nexecutor.outFields.put(\"payload\", payload);\n\nexecutor.logger.info(\"Sending delete Subscription Event to CDS\")\n\ntrue;"
 + }
 + }
 + },
 + {
 + "key": {
 + "name": "DeleteSubscriptionRequestTask",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "DeleteSubscriptionRequestTask",
 + "version": "0.0.1"
 + },
 + "inputFields": {
 + "entry": [
 + {
 + "key": "albumID",
 + "value": {
 + "key": "albumID",
 + "fieldSchemaKey": {
 + "name": "UUIDType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "payload",
 + "value": {
 + "key": "payload",
 + "fieldSchemaKey": {
 + "name": "CDSDeleteSubscriptionPayloadType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + }
 + ]
 + },
 + "outputFields": {
 + "entry": [
 + {
 + "key": "actionIdentifiers",
 + "value": {
 + "key": "actionIdentifiers",
 + "fieldSchemaKey": {
 + "name": "CDSActionIdentifiersType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "commonHeader",
 + "value": {
 + "key": "commonHeader",
 + "fieldSchemaKey": {
 + "name": "CDSRequestCommonHeaderType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "payload",
 + "value": {
 + "key": "payload",
 + "fieldSchemaKey": {
 + "name": "CDSDeleteSubscriptionPayloadType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + }
 + ]
 + },
 + "taskParameters": {
 + "entry": []
 + },
 + "contextAlbumReference": [
 + {
 + "name": "PMSubscriptionAlbum",
 + "version": "0.0.1"
 + }
 + ],
 + "taskLogic": {
 + "key": "TaskLogic",
 + "logicFlavour": "JAVASCRIPT",
 + "logic": "/*\n * ============LICENSE_START=======================================================\n * Copyright (C) 2020 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);\n\nvar pmSubscriptionInfo = executor.getContextAlbum(\"PMSubscriptionAlbum\").get(executor.inFields.get(\"albumID\").toString())\nvar payload = executor.inFields.get(\"payload\")\nvar actionName = \"delete-subscription\"\n\nvar commonHeader = executor.subject.getOutFieldSchemaHelper(\"commonHeader\").createNewInstance();\ncommonHeader.put(\"originatorId\", \"sdnc\");\ncommonHeader.put(\"requestId\", \"123456-1000\");\ncommonHeader.put(\"subRequestId\", \"sub-123456-1000\");\n\nvar actionIdentifiers = executor.subject.getOutFieldSchemaHelper(\"actionIdentifiers\").createNewInstance();\nactionIdentifiers.put(\"actionName\", actionName);\nactionIdentifiers.put(\"blueprintName\", \"pm_control\");\nactionIdentifiers.put(\"blueprintVersion\", \"1.0.0\");\nactionIdentifiers.put(\"mode\", \"sync\");\n\nexecutor.outFields.put(\"commonHeader\", commonHeader);\nexecutor.outFields.put(\"actionIdentifiers\", actionIdentifiers);\nexecutor.outFields.put(\"payload\", payload);\n\nexecutor.logger.info(\"Sending Deactivate Subscription Event to CDS\")\n\ntrue;"
 + }
 + }
 + },
 + {
 + "key": {
 + "name": "ReceivePMSubscriptionTask",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "ReceivePMSubscriptionTask",
 + "version": "0.0.1"
 + },
 + "inputFields": {
 + "entry": [
 + {
 + "key": "changeType",
 + "value": {
 + "key": "changeType",
 + "fieldSchemaKey": {
 + "name": "SimpleStringType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "closedLoopControlName",
 + "value": {
 + "key": "closedLoopControlName",
 + "fieldSchemaKey": {
 + "name": "SimpleStringType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "nfName",
 + "value": {
 + "key": "nfName",
 + "fieldSchemaKey": {
 + "name": "SimpleStringType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "policyName",
 + "value": {
 + "key": "policyName",
 + "fieldSchemaKey": {
 + "name": "SimpleStringType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "subscription",
 + "value": {
 + "key": "subscription",
 + "fieldSchemaKey": {
 + "name": "SubscriptionType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + }
 + ]
 + },
 + "outputFields": {
 + "entry": [
 + {
 + "key": "albumID",
 + "value": {
 + "key": "albumID",
 + "fieldSchemaKey": {
 + "name": "UUIDType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + }
 + ]
 + },
 + "taskParameters": {
 + "entry": []
 + },
 + "contextAlbumReference": [
 + {
 + "name": "PMSubscriptionAlbum",
 + "version": "0.0.1"
 + }
 + ],
 + "taskLogic": {
 + "key": "TaskLogic",
 + "logicFlavour": "JAVASCRIPT",
 + "logic": "/*\n * ============LICENSE_START=======================================================\n * Copyright (C) 2020 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 */\nvar uuidType = java.util.UUID;\n\n\n//albumID will be used to fetch info from our album later\nvar albumID = uuidType.fromString(\"d0050623-18e5-46c9-9298-9a567990cd7c\");\nvar pmSubscriptionInfo = executor.getContextAlbum(\"PMSubscriptionAlbum\").getSchemaHelper().createNewInstance();\nvar returnValue = true;;\n\nif(executor.inFields.get(\"policyName\") != null) {\n var changeType = executor.inFields.get(\"changeType\")\n var nfName = executor.inFields.get(\"nfName\")\n var policyName = executor.inFields.get(\"policyName\")\n var closedLoopControlName = executor.inFields.get(\"closedLoopControlName\")\n var subscription = executor.inFields.get(\"subscription\")\n\n pmSubscriptionInfo.put(\"nfName\", executor.inFields.get(\"nfName\"));\n pmSubscriptionInfo.put(\"changeType\", executor.inFields.get(\"changeType\"))\n pmSubscriptionInfo.put(\"policyName\", executor.inFields.get(\"policyName\"))\n pmSubscriptionInfo.put(\"closedLoopControlName\", executor.inFields.get(\"closedLoopControlName\"))\n pmSubscriptionInfo.put(\"subscription\", subscription)\n\n executor.getContextAlbum(\"PMSubscriptionAlbum\").put(albumID.toString(), pmSubscriptionInfo);\n\n executor.outFields.put(\"albumID\", albumID)\n} else {\n executor.message = \"Received invalid event\"\n returnValue = false;\n}\nreturnValue;"
 + }
 + }
 + }
 + ]
 + }
 + },
 + "events": {
 + "key": {
 + "name": "APEXgRPCPolicy_Events",
 + "version": "0.0.1"
 + },
 + "eventMap": {
 + "entry": [
 + {
 + "key": {
 + "name": "CDSResponseEvent",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CDSResponseEvent",
 + "version": "0.0.1"
 + },
 + "nameSpace": "org.onap.policy.apex.onap.pmcontrol",
 + "source": "CDS",
 + "target": "APEX",
 + "parameter": {
 + "entry": [
 + {
 + "key": "actionIdentifiers",
 + "value": {
 + "key": "actionIdentifiers",
 + "fieldSchemaKey": {
 + "name": "CDSActionIdentifiersType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "commonHeader",
 + "value": {
 + "key": "commonHeader",
 + "fieldSchemaKey": {
 + "name": "CDSResponseCommonHeaderType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "payload",
 + "value": {
 + "key": "payload",
 + "fieldSchemaKey": {
 + "name": "CDSResponsePayloadType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "status",
 + "value": {
 + "key": "status",
 + "fieldSchemaKey": {
 + "name": "CDSResponseStatusType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + }
 + ]
 + }
 + }
 + },
 + {
 + "key": {
 + "name": "CDSResponseStatusEvent",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CDSResponseStatusEvent",
 + "version": "0.0.1"
 + },
 + "nameSpace": "org.onap.policy.apex.onap.pmcontrol",
 + "source": "APEX",
 + "target": "DCAE",
 + "parameter": {
 + "entry": [
 + {
 + "key": "status",
 + "value": {
 + "key": "status",
 + "fieldSchemaKey": {
 + "name": "SubscriptionStatusType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + }
 + ]
 + }
 + }
 + },
 + {
 + "key": {
 + "name": "CreateSubscriptionPayloadEvent",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CreateSubscriptionPayloadEvent",
 + "version": "0.0.1"
 + },
 + "nameSpace": "org.onap.policy.apex.onap.pmcontrol",
 + "source": "APEX",
 + "target": "APEX",
 + "parameter": {
 + "entry": [
 + {
 + "key": "albumID",
 + "value": {
 + "key": "albumID",
 + "fieldSchemaKey": {
 + "name": "UUIDType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "payload",
 + "value": {
 + "key": "payload",
 + "fieldSchemaKey": {
 + "name": "CDSCreateSubscriptionPayloadType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + }
 + ]
 + }
 + }
 + },
 + {
 + "key": {
 + "name": "CreateSubscriptionRequestEvent",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CreateSubscriptionRequestEvent",
 + "version": "0.0.1"
 + },
 + "nameSpace": "org.onap.policy.apex.onap.pmcontrol",
 + "source": "APEX",
 + "target": "APEX",
 + "parameter": {
 + "entry": [
 + {
 + "key": "actionIdentifiers",
 + "value": {
 + "key": "actionIdentifiers",
 + "fieldSchemaKey": {
 + "name": "CDSActionIdentifiersType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "commonHeader",
 + "value": {
 + "key": "commonHeader",
 + "fieldSchemaKey": {
 + "name": "CDSRequestCommonHeaderType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "payload",
 + "value": {
 + "key": "payload",
 + "fieldSchemaKey": {
 + "name": "CDSCreateSubscriptionPayloadType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + }
 + ]
 + }
 + }
 + },
 + {
 + "key": {
 + "name": "DeleteSubscriptionPayloadEvent",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "DeleteSubscriptionPayloadEvent",
 + "version": "0.0.1"
 + },
 + "nameSpace": "org.onap.policy.apex.onap.pmcontrol",
 + "source": "APEX",
 + "target": "APEX",
 + "parameter": {
 + "entry": [
 + {
 + "key": "albumID",
 + "value": {
 + "key": "albumID",
 + "fieldSchemaKey": {
 + "name": "UUIDType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "payload",
 + "value": {
 + "key": "payload",
 + "fieldSchemaKey": {
 + "name": "CDSDeleteSubscriptionPayloadType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + }
 + ]
 + }
 + }
 + },
 + {
 + "key": {
 + "name": "DeleteSubscriptionRequestEvent",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "DeleteSubscriptionRequestEvent",
 + "version": "0.0.1"
 + },
 + "nameSpace": "org.onap.policy.apex.onap.pmcontrol",
 + "source": "APEX",
 + "target": "APEX",
 + "parameter": {
 + "entry": [
 + {
 + "key": "actionIdentifiers",
 + "value": {
 + "key": "actionIdentifiers",
 + "fieldSchemaKey": {
 + "name": "CDSActionIdentifiersType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "commonHeader",
 + "value": {
 + "key": "commonHeader",
 + "fieldSchemaKey": {
 + "name": "CDSRequestCommonHeaderType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "payload",
 + "value": {
 + "key": "payload",
 + "fieldSchemaKey": {
 + "name": "CDSDeleteSubscriptionPayloadType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + }
 + ]
 + }
 + }
 + },
 + {
 + "key": {
 + "name": "PMSubscriptionOutputEvent",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "PMSubscriptionOutputEvent",
 + "version": "0.0.1"
 + },
 + "nameSpace": "org.onap.policy.apex.onap.pmcontrol",
 + "source": "APEX",
 + "target": "APEX",
 + "parameter": {
 + "entry": [
 + {
 + "key": "albumID",
 + "value": {
 + "key": "albumID",
 + "fieldSchemaKey": {
 + "name": "UUIDType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + }
 + ]
 + }
 + }
 + },
 + {
 + "key": {
 + "name": "testPolicyB",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "testPolicyB",
 + "version": "0.0.1"
 + },
 + "nameSpace": "org.onap.policy.apex.onap.pmcontrol",
 + "source": "DCAE",
 + "target": "APEX",
 + "parameter": {
 + "entry": [
 + {
 + "key": "changeType",
 + "value": {
 + "key": "changeType",
 + "fieldSchemaKey": {
 + "name": "SimpleStringType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "closedLoopControlName",
 + "value": {
 + "key": "closedLoopControlName",
 + "fieldSchemaKey": {
 + "name": "SimpleStringType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "nfName",
 + "value": {
 + "key": "nfName",
 + "fieldSchemaKey": {
 + "name": "SimpleStringType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "policyName",
 + "value": {
 + "key": "policyName",
 + "fieldSchemaKey": {
 + "name": "SimpleStringType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + },
 + {
 + "key": "subscription",
 + "value": {
 + "key": "subscription",
 + "fieldSchemaKey": {
 + "name": "SubscriptionType",
 + "version": "0.0.1"
 + },
 + "optional": false
 + }
 + }
 + ]
 + }
 + }
 + }
 + ]
 + }
 + },
 + "albums": {
 + "key": {
 + "name": "APEXgRPCPolicy_Albums",
 + "version": "0.0.1"
 + },
 + "albums": {
 + "entry": [
 + {
 + "key": {
 + "name": "PMSubscriptionAlbum",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "PMSubscriptionAlbum",
 + "version": "0.0.1"
 + },
 + "scope": "policy",
 + "isWritable": true,
 + "itemSchema": {
 + "name": "PMSubscriptionType",
 + "version": "0.0.1"
 + }
 + }
 + }
 + ]
 + }
 + },
 + "schemas": {
 + "key": {
 + "name": "APEXgRPCPolicy_Schemas",
 + "version": "0.0.1"
 + },
 + "schemas": {
 + "entry": [
 + {
 + "key": {
 + "name": "CDSActionIdentifiersType",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CDSActionIdentifiersType",
 + "version": "0.0.1"
 + },
 + "schemaFlavour": "Avro",
 + "schemaDefinition": "{\n \"type\": \"record\",\n \"name\": \"CDSActionIdentifiers_Type\",\n \"namespace\": \"org.onap.policy.apex.onap.helloworld\",\n \"fields\": [\n {\n \"name\": \"actionName\",\n \"type\": \"string\"\n },\n {\n \"name\": \"blueprintName\",\n \"type\": \"string\"\n },\n {\n \"name\": \"blueprintVersion\",\n \"type\": \"string\"\n },\n {\n \"name\": \"mode\",\n \"type\": \"string\"\n }\n ]\n}"
 + }
 + },
 + {
 + "key": {
 + "name": "CDSCreateSubscriptionPayloadType",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CDSCreateSubscriptionPayloadType",
 + "version": "0.0.1"
 + },
 + "schemaFlavour": "Avro",
 + "schemaDefinition": "{\n \"type\": \"map\",\n \"values\": {\n \"type\": \"record\",\n \"name\": \"CDSRequestPayloadEntry\",\n \"fields\": [\n {\n \"name\": \"create_DasH_subscription_DasH_properties\",\n \"type\": {\n \"name\": \"create_DasH_subscription_DasH_properties_record\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"nfName\",\n \"type\": \"string\"\n },\n {\n \"name\": \"subscriptionName\",\n \"type\": \"string\"\n },\n {\n \"name\": \"administrativeState\",\n \"type\": \"string\"\n },\n {\n \"name\": \"fileBasedGP\",\n \"type\": \"string\"\n },\n {\n \"name\": \"fileLocation\",\n \"type\": \"string\"\n },\n {\n \"name\": \"measurementGroups\",\n \"type\": {\n \"type\": \"array\",\n \"items\": {\n \"name\": \"measurementGroups_record\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"measurementGroup\",\n \"type\": {\n \"name\": \"measurementGroup\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"measurementTypes\",\n \"type\": {\n \"type\": \"array\",\n \"items\": {\n \"name\": \"measurementTypes_record\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"measurementType\",\n \"type\": \"string\"\n }\n ]\n }\n }\n },\n {\n \"name\": \"managedObjectDNsBasic\",\n \"type\": {\n \"type\": \"array\",\n \"items\": {\n \"name\": \"managedObjectDNsBasic_record\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"DN\",\n \"type\": \"string\"\n }\n ]\n }\n }\n }\n ]\n }\n }\n ]\n }\n }\n }\n ]\n }\n }\n ]\n }\n}"
 + }
 + },
 + {
 + "key": {
 + "name": "CDSDeleteSubscriptionPayloadType",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CDSDeleteSubscriptionPayloadType",
 + "version": "0.0.1"
 + },
 + "schemaFlavour": "Avro",
 + "schemaDefinition": "{\n \"type\": \"map\",\n \"values\": {\n \"type\": \"record\",\n \"name\": \"CDSRequestPayloadEntry\",\n \"fields\": [\n {\n \"name\": \"delete_DasH_subscription_DasH_properties\",\n \"type\": {\n \"name\": \"delete_DasH_subscription_DasH_properties_record\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"nfName\",\n \"type\": \"string\"\n },\n {\n \"name\": \"subscriptionName\",\n \"type\": \"string\"\n },\n {\n \"name\": \"administrativeState\",\n \"type\": \"string\"\n },\n {\n \"name\": \"fileBasedGP\",\n \"type\": \"string\"\n },\n {\n \"name\": \"fileLocation\",\n \"type\": \"string\"\n },\n {\n \"name\": \"measurementGroups\",\n \"type\": {\n \"type\": \"array\",\n \"items\": {\n \"name\": \"measurementGroups_record\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"measurementGroup\",\n \"type\": {\n \"name\": \"measurementGroup\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"measurementTypes\",\n \"type\": {\n \"type\": \"array\",\n \"items\": {\n \"name\": \"measurementTypes_record\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"measurementType\",\n \"type\": \"string\"\n }\n ]\n }\n }\n },\n {\n \"name\": \"managedObjectDNsBasic\",\n \"type\": {\n \"type\": \"array\",\n \"items\": {\n \"name\": \"managedObjectDNsBasic_record\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"DN\",\n \"type\": \"string\"\n }\n ]\n }\n }\n }\n ]\n }\n }\n ]\n }\n }\n }\n ]\n }\n }\n ]\n }\n}"
 + }
 + },
 + {
 + "key": {
 + "name": "CDSRequestCommonHeaderType",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CDSRequestCommonHeaderType",
 + "version": "0.0.1"
 + },
 + "schemaFlavour": "Avro",
 + "schemaDefinition": "{\n \"type\": \"record\",\n \"name\": \"CDSRequestCommonHeader_Type\",\n \"namespace\": \"org.onap.policy.apex.onap.helloworld\",\n \"fields\": [\n {\n \"name\": \"originatorId\",\n \"type\": \"string\"\n },\n {\n \"name\": \"requestId\",\n \"type\": \"string\"\n },\n {\n \"name\": \"subRequestId\",\n \"type\": \"string\"\n }\n ]\n}"
 + }
 + },
 + {
 + "key": {
 + "name": "CDSResponseCommonHeaderType",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CDSResponseCommonHeaderType",
 + "version": "0.0.1"
 + },
 + "schemaFlavour": "Avro",
 + "schemaDefinition": "{\n \"type\": \"record\",\n \"name\": \"CDSResponseCommonHeader_Type\",\n \"namespace\": \"org.onap.policy.apex.onap.helloworld\",\n \"fields\": [\n {\n \"name\": \"originatorId\",\n \"type\": \"string\"\n },\n {\n \"name\": \"requestId\",\n \"type\": \"string\"\n },\n {\n \"name\": \"subRequestId\",\n \"type\": \"string\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"string\"\n }\n ]\n}"
 + }
 + },
 + {
 + "key": {
 + "name": "CDSResponsePayloadType",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CDSResponsePayloadType",
 + "version": "0.0.1"
 + },
 + "schemaFlavour": "Avro",
 + "schemaDefinition": "{\n \"name\": \"CDSResponsePayloadEntry\",\n \"type\": \"record\",\n \"namespace\": \"com.acme.avro\",\n \"fields\": [\n {\n \"name\": \"create_DasH_subscription_DasH_response\",\n \"type\": {\n \"name\": \"create_DasH_subscription_DasH_response\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"odl_DasH_response\",\n \"type\": {\n \"name\": \"odl_DasH_response\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"status\",\n \"type\": \"string\"\n }\n ]\n }\n }\n ]\n }\n }\n ]\n}"
 + }
 + },
 + {
 + "key": {
 + "name": "CDSResponseStatusType",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "CDSResponseStatusType",
 + "version": "0.0.1"
 + },
 + "schemaFlavour": "Avro",
 + "schemaDefinition": "{\n \"type\": \"record\",\n \"name\": \"CDSResponseStatus_Type\",\n \"namespace\": \"org.onap.policy.apex.onap.helloworld\",\n \"fields\": [\n {\n \"name\": \"code\",\n \"type\": \"int\"\n },\n {\n \"name\": \"eventType\",\n \"type\": \"string\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"string\"\n },\n {\n \"name\": \"message\",\n \"type\": \"string\"\n }\n ]\n}"
 + }
 + },
 + {
 + "key": {
 + "name": "PMSubscriptionType",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "PMSubscriptionType",
 + "version": "0.0.1"
 + },
 + "schemaFlavour": "Avro",
 + "schemaDefinition": "{\n \"name\": \"PMSubscription\",\n \"type\": \"record\",\n \"namespace\": \"org.onap.policy.apex.onap.pmcontrol\",\n \"fields\": [\n {\n \"name\": \"nfName\",\n \"type\": \"string\"\n },\n {\n \"name\": \"changeType\",\n \"type\": \"string\"\n },\n {\n \"name\": \"closedLoopControlName\",\n \"type\": \"string\"\n },\n {\n \"name\": \"policyName\",\n \"type\": \"string\"\n },\n {\n \"name\": \"subscription\",\n \"type\": {\n \"name\": \"subscription\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"subscriptionName\",\n \"type\": \"string\"\n },\n {\n \"name\": \"administrativeState\",\n \"type\": \"string\"\n },\n {\n \"name\": \"fileBasedGP\",\n \"type\": \"int\"\n },\n {\n \"name\": \"fileLocation\",\n \"type\": \"string\"\n },\n {\n \"name\": \"measurementGroups\",\n \"type\": {\n \"type\": \"array\",\n \"items\": {\n \"name\": \"Measurement_Groups_Type\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"measurementGroup\",\n \"type\": {\n \"name\": \"Measurement_Group_Type\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"measurementTypes\",\n \"type\": {\n \"type\": \"array\",\n \"items\": {\n \"name\": \"Measurement_Types_Type\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"measurementType\",\n \"type\": \"string\"\n }\n ]\n }\n }\n },\n {\n \"name\": \"managedObjectDNsBasic\",\n \"type\": {\n \"type\": \"array\",\n \"items\": {\n \"name\": \"Managed_Object_Dns_Basic_Type\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"DN\",\n \"type\": \"string\"\n }\n ]\n }\n }\n }\n ]\n }\n }\n ]\n }\n }\n }\n ]\n }\n }\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": "SubscriptionStatusType",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "SubscriptionStatusType",
 + "version": "0.0.1"
 + },
 + "schemaFlavour": "Avro",
 + "schemaDefinition": "{\n \"type\": \"record\",\n \"name\": \"ActivateSubscriptionStatus_Type\",\n \"namespace\": \"org.onap.policy.apex.onap.helloworld\",\n \"fields\": [\n {\n \"name\": \"subscriptionName\",\n \"type\": \"string\"\n },\n {\n \"name\": \"nfName\",\n \"type\": \"string\"\n },\n {\n \"name\": \"changeType\",\n \"type\": \"string\"\n },\n {\n \"name\": \"message\",\n \"type\": \"string\"\n }\n ]\n}"
 + }
 + },
 + {
 + "key": {
 + "name": "SubscriptionType",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "SubscriptionType",
 + "version": "0.0.1"
 + },
 + "schemaFlavour": "Avro",
 + "schemaDefinition": "{\n \"name\": \"subscription\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"subscriptionName\",\n \"type\": \"string\"\n },\n {\n \"name\": \"administrativeState\",\n \"type\": \"string\"\n },\n {\n \"name\": \"fileBasedGP\",\n \"type\": \"int\"\n },\n {\n \"name\": \"fileLocation\",\n \"type\": \"string\"\n },\n {\n \"name\": \"measurementGroups\",\n \"type\": {\n \"type\": \"array\",\n \"items\": {\n \"name\": \"Measurement_Groups_Type\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"measurementGroup\",\n \"type\": {\n \"name\": \"Measurement_Group_Type\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"measurementTypes\",\n \"type\": {\n \"type\": \"array\",\n \"items\": {\n \"name\": \"Measurement_Types_Type\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"measurementType\",\n \"type\": \"string\"\n }\n ]\n }\n }\n },\n {\n \"name\": \"managedObjectDNsBasic\",\n \"type\": {\n \"type\": \"array\",\n \"items\": {\n \"name\": \"Managed_Object_Dns_Basic_Type\",\n \"type\": \"record\",\n \"fields\": [\n {\n \"name\": \"DN\",\n \"type\": \"string\"\n }\n ]\n }\n }\n }\n ]\n }\n }\n ]\n }\n }\n }\n ]\n}"
 + }
 + },
 + {
 + "key": {
 + "name": "UUIDType",
 + "version": "0.0.1"
 + },
 + "value": {
 + "key": {
 + "name": "UUIDType",
 + "version": "0.0.1"
 + },
 + "schemaFlavour": "Java",
 + "schemaDefinition": "java.util.UUID"
 + }
 + }
 + ]
 + }
 + }
 + }
 + }
 + },
 + "eventOutputParameters": {
 + "logOutputter": {
 + "carrierTechnologyParameters": {
 + "carrierTechnology": "FILE",
 + "parameters": {
 + "fileName": "outputevents.log"
 + }
 + },
 + "eventProtocolParameters": {
 + "eventProtocol": "JSON"
 + }
 + },
 + "CDSRequestProducer": {
 + "carrierTechnologyParameters": {
 + "carrierTechnology": "GRPC",
 + "parameterClassName": "org.onap.policy.apex.plugins.event.carrier.grpc.GrpcCarrierTechnologyParameters",
 + "parameters": {
 + "host": "10.2.0.122",
 + "port": 54322,
 + "username": "ccsdkapps",
 + "password": "ccsdkapps",
 + "timeout": 60
 + }
 + },
 + "eventProtocolParameters": {
 + "eventProtocol": "JSON"
 + },
 + "eventNameFilter": "(Create|Delete)SubscriptionRequestEvent",
 + "requestorMode": true,
 + "requestorPeer": "CDSRequestConsumer",
 + "requestorTimeout": 500
 + },
 + "CDSReplyProducer": {
 + "carrierTechnologyParameters": {
 + "carrierTechnology": "RESTCLIENT",
 + "parameterClassName": "org.onap.policy.apex.plugins.event.carrier.restclient.RestClientCarrierTechnologyParameters",
 + "parameters": {
 + "url": "http://message-router:3904/events/POLICY-CL-MGT"
 + }
 + },
 + "eventProtocolParameters": {
 + "eventProtocol": "JSON"
 + },
 + "eventNameFilter": "CDSResponseStatusEvent"
 + }
 + },
 + "eventInputParameters": {
 + "DCAEConsumer": {
 + "carrierTechnologyParameters": {
 + "carrierTechnology": "RESTCLIENT",
 + "parameterClassName": "org.onap.policy.apex.plugins.event.carrier.restclient.RestClientCarrierTechnologyParameters",
 + "parameters": {
 + "url": "http://message-router:3904/events/unauthenticated.DCAE_CL_OUTPUT/cg1/c1?timeout=30000"
 + }
 + },
 + "eventProtocolParameters": {
 + "eventProtocol": "JSON",
 + "parameters": {
 + "nameAlias": "testPolicyB"
 + }
 + },
 + "eventName": "testPolicyB",
 + "eventNameFilter": "testPolicyB"
 + },
 + "CDSRequestConsumer": {
 + "carrierTechnologyParameters": {
 + "carrierTechnology": "GRPC",
 + "parameterClassName": "org.onap.policy.apex.plugins.event.carrier.grpc.GrpcCarrierTechnologyParameters"
 + },
 + "eventProtocolParameters": {
 + "eventProtocol": "JSON"
 + },
 + "eventName": "CDSResponseEvent",
 + "eventNameFilter": "CDSResponseEvent",
 + "requestorMode": true,
 + "requestorPeer": "CDSRequestProducer",
 + "requestorTimeout": 500
 + }
 + }
 + },
 + "name": "operational.apex.stabilityTestDefaultDomain",
 + "version": "1.0.0",
 + "metadata": {
 + "policy-id": "operational.apex.stabilityTestDefaultDomain",
 + "policy-version": "1.0.0"
 + }
 + }
 + }
 + ]
 + },
 + "name": "ToscaServiceTemplateSimple",
 + "version": "1.0.0",
 + "metadata": {}
 +}</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain">${HOSTNAME}</stringProp> + <stringProp name="HTTPSampler.port">${API_PORT}</stringProp> + <stringProp name="HTTPSampler.protocol">https</stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">/policy/api/v1/policies</stringProp> + <stringProp name="HTTPSampler.method">POST</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + </HTTPSamplerProxy> + <hashTree> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="49586">200</stringProp> + </collectionProp> + <stringProp name="Assertion.custom_message"></stringProp> + <stringProp name="Assertion.test_field">Assertion.response_code</stringProp> + <boolProp name="Assertion.assume_success">false</boolProp> + <intProp name="Assertion.test_type">1</intProp> + </ResponseAssertion> + <hashTree/> + </hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Deploy policy" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value">{
 + "groups": [
 + {
 + "name": "defaultGroup",
 + "deploymentSubgroups": [
 + {
 + "pdpType": "apex",
 + "action": "POST",
 + "policies": [
 + {
 + "name": "operational.apex.stabilityTestDefaultDomain",
 + "version": "1.0.0"
 + }
 + ]
 + }
 + ]
 + }
 + ]
 +}</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain">${HOSTNAME}</stringProp> + <stringProp name="HTTPSampler.port">${PAP_PORT}</stringProp> + <stringProp name="HTTPSampler.protocol">https</stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">/policy/pap/v1/pdps/deployments/batch</stringProp> + <stringProp name="HTTPSampler.method">POST</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + </HTTPSamplerProxy> + <hashTree> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="49588">202</stringProp> + </collectionProp> + <stringProp name="Assertion.custom_message"></stringProp> + <stringProp name="Assertion.test_field">Assertion.response_code</stringProp> + <boolProp name="Assertion.assume_success">false</boolProp> + <intProp name="Assertion.test_type">1</intProp> + </ResponseAssertion> + <hashTree/> + </hashTree> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">${threads}</stringProp> + <stringProp name="ThreadGroup.ramp_time">1</stringProp> + <boolProp name="ThreadGroup.scheduler">true</boolProp> + <stringProp name="ThreadGroup.duration">5400</stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <boolProp name="ThreadGroup.same_user_on_next_iteration">true</boolProp> + </ThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Health Check" enabled="true"> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true"> + <collectionProp name="Arguments.arguments"/> + </elementProp> + <stringProp name="HTTPSampler.domain">${HOSTNAME}</stringProp> + <stringProp name="HTTPSampler.port">${APEX_PORT}</stringProp> + <stringProp name="HTTPSampler.protocol">https</stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">/policy/apex-pdp/v1/healthcheck</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + </HTTPSamplerProxy> + <hashTree> + <JSR223Assertion guiclass="TestBeanGUI" testclass="JSR223Assertion" testname="JSR223 Assertion" enabled="true"> + <stringProp name="cacheKey">true</stringProp> + <stringProp name="filename"></stringProp> + <stringProp name="parameters"></stringProp> + <stringProp name="script">import groovy.json.JsonSlurper; + +def res = []; +if (prev.getResponseCode() == '200') { + def jsonSlurper = new JsonSlurper(); + res = jsonSlurper.parseText(prev.getResponseDataAsString()); + + assert res instanceof Map; + assert res.healthy == true; + assert res.message == 'alive'; +} +</stringProp> + <stringProp name="scriptLanguage">groovy</stringProp> + </JSR223Assertion> + <hashTree/> + </hashTree> + <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="Test Controller" enabled="true"/> + <hashTree> + <SyncTimer guiclass="TestBeanGUI" testclass="SyncTimer" testname="Synchronizing Timer" enabled="false"> + <stringProp name="groupSize">${threads}</stringProp> + <stringProp name="timeoutInMs">${threadsTimeOutInMs}</stringProp> + </SyncTimer> + <hashTree/> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Send Input Event" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value">{
 + "changeType": "CREATE",
 + "closedLoopControlName": "test",
 + "policyName": "test",
 + "nfName": "pnf300",
 + "subscription": {
 + "subscriptionName": "testPolicyB",
 + "administrativeState": "UNLOCKED",
 + "fileBasedGP": 15,
 + "fileLocation": "/pm/pm.xml",
 + "measurementGroups": [
 + {
 + "measurementGroup": {
 + "measurementTypes": [
 + {
 + "measurementType": "countera"
 + },
 + {
 + "measurementType": "counterb"
 + }
 + ],
 + "managedObjectDNsBasic": [
 + {
 + "DN": "dna"
 + },
 + {
 + "DN": "dnb"
 + }
 + ]
 + }
 + },
 + {
 + "measurementGroup": {
 + "measurementTypes": [
 + {
 + "measurementType": "counterc"
 + },
 + {
 + "measurementType": "counterd"
 + }
 + ],
 + "managedObjectDNsBasic": [
 + {
 + "DN": "dnc"
 + },
 + {
 + "DN": "dnd"
 + }
 + ]
 + }
 + }
 + ]
 + }
 +}</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain">${HOSTNAME}</stringProp> + <stringProp name="HTTPSampler.port">${DMAAP_PORT}</stringProp> + <stringProp name="HTTPSampler.protocol">http</stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">/events/unauthenticated.DCAE_CL_OUTPUT</stringProp> + <stringProp name="HTTPSampler.method">POST</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="TestPlan.comments">Send input event to apex-pdp</stringProp> + </HTTPSamplerProxy> + <hashTree> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert Response Code" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="49586">200</stringProp> + </collectionProp> + <stringProp name="Assertion.custom_message"></stringProp> + <stringProp name="Assertion.test_field">Assertion.response_code</stringProp> + <boolProp name="Assertion.assume_success">false</boolProp> + <intProp name="Assertion.test_type">8</intProp> + <stringProp name="Scope.variable">Response code</stringProp> + <stringProp name="TestPlan.comments">Assert response code coming back from apex-pdp</stringProp> + </ResponseAssertion> + <hashTree/> + <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="WAIT" enabled="true"> + <stringProp name="ConstantTimer.delay">${wait}</stringProp> + </ConstantTimer> + <hashTree/> + </hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Get the ouput event response" enabled="true"> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true"> + <collectionProp name="Arguments.arguments"/> + </elementProp> + <stringProp name="HTTPSampler.domain">${HOSTNAME}</stringProp> + <stringProp name="HTTPSampler.port">${DMAAP_PORT}</stringProp> + <stringProp name="HTTPSampler.protocol">http</stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">/events/POLICY-CL-MGT/cg${__threadNum}/c1?timeout=30000</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + <stringProp name="TestPlan.comments">Check output event </stringProp> + </HTTPSamplerProxy> + <hashTree> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert Response Code" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="49586">200</stringProp> + </collectionProp> + <stringProp name="Assertion.custom_message"></stringProp> + <stringProp name="Assertion.test_field">Assertion.response_code</stringProp> + <boolProp name="Assertion.assume_success">false</boolProp> + <intProp name="Assertion.test_type">8</intProp> + <stringProp name="Scope.variable">Response code</stringProp> + <stringProp name="TestPlan.comments">Assert response code coming back from apex-pdp</stringProp> + </ResponseAssertion> + <hashTree/> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert Response Message" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="1608759622">org.onap.policy.apex.onap.pmcontrol</stringProp> + <stringProp name="1996002556">CREATE</stringProp> + </collectionProp> + <stringProp name="Assertion.custom_message"></stringProp> + <stringProp name="Assertion.test_field">Assertion.response_data</stringProp> + <boolProp name="Assertion.assume_success">false</boolProp> + <intProp name="Assertion.test_type">2</intProp> + <stringProp name="Scope.variable">Response code</stringProp> + <stringProp name="TestPlan.comments">Assert response message coming back from apex-pdp</stringProp> + </ResponseAssertion> + <hashTree/> + <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="WAIT" enabled="false"> + <stringProp name="ConstantTimer.delay">${wait}</stringProp> + </ConstantTimer> + <hashTree/> + </hashTree> + </hashTree> + </hashTree> + <PostThreadGroup guiclass="PostThreadGroupGui" testclass="PostThreadGroup" testname="tearDown Thread Group" enabled="true"> + <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> + <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true"> + <boolProp name="LoopController.continue_forever">false</boolProp> + <stringProp name="LoopController.loops">1</stringProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">1</stringProp> + <stringProp name="ThreadGroup.ramp_time">1</stringProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + <boolProp name="ThreadGroup.same_user_on_next_iteration">true</boolProp> + </PostThreadGroup> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Un deploy policy" enabled="true"> + <boolProp name="HTTPSampler.postBodyRaw">true</boolProp> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments"> + <collectionProp name="Arguments.arguments"> + <elementProp name="" elementType="HTTPArgument"> + <boolProp name="HTTPArgument.always_encode">false</boolProp> + <stringProp name="Argument.value">{
 + "groups": [
 + {
 + "name": "defaultGroup",
 + "deploymentSubgroups": [
 + {
 + "pdpType": "apex",
 + "action": "DELETE",
 + "policies": [
 + {
 + "name": "operational.apex.stabilityTestDefaultDomain",
 + "version": "1.0.0"
 + }
 + ]
 + }
 + ]
 + }
 + ]
 +}</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain">${HOSTNAME}</stringProp> + <stringProp name="HTTPSampler.port">${PAP_PORT}</stringProp> + <stringProp name="HTTPSampler.protocol">https</stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">/policy/pap/v1/pdps/deployments/batch</stringProp> + <stringProp name="HTTPSampler.method">POST</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + </HTTPSamplerProxy> + <hashTree> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="49588">202</stringProp> + </collectionProp> + <stringProp name="Assertion.custom_message"></stringProp> + <stringProp name="Assertion.test_field">Assertion.response_code</stringProp> + <boolProp name="Assertion.assume_success">false</boolProp> + <intProp name="Assertion.test_type">1</intProp> + </ResponseAssertion> + <hashTree/> + </hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Delete Policy" enabled="true"> + <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true"> + <collectionProp name="Arguments.arguments"/> + </elementProp> + <stringProp name="HTTPSampler.domain">${HOSTNAME}</stringProp> + <stringProp name="HTTPSampler.port">${API_PORT}</stringProp> + <stringProp name="HTTPSampler.protocol">https</stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">/policy/api/v1/policytypes/onap.policies.native.Apex/versions/1.0.0/policies/operational.apex.stabilityTestDefaultDomain/versions/1.0.0</stringProp> + <stringProp name="HTTPSampler.method">DELETE</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + </HTTPSamplerProxy> + <hashTree> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="49586">200</stringProp> + </collectionProp> + <stringProp name="Assertion.custom_message"></stringProp> + <stringProp name="Assertion.test_field">Assertion.response_code</stringProp> + <boolProp name="Assertion.assume_success">false</boolProp> + <intProp name="Assertion.test_type">1</intProp> + </ResponseAssertion> + <hashTree/> + </hashTree> + </hashTree> + <ResultCollector guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report" enabled="true"> + <boolProp name="ResultCollector.error_logging">false</boolProp> + <objProp> + <name>saveConfig</name> + <value class="SampleSaveConfiguration"> + <time>true</time> + <latency>true</latency> + <timestamp>true</timestamp> + <success>true</success> + <label>true</label> + <code>true</code> + <message>true</message> + <threadName>true</threadName> + <dataType>true</dataType> + <encoding>false</encoding> + <assertions>true</assertions> + <subresults>true</subresults> + <responseData>false</responseData> + <samplerData>false</samplerData> + <xml>false</xml> + <fieldNames>true</fieldNames> + <responseHeaders>false</responseHeaders> + <requestHeaders>false</requestHeaders> + <responseDataOnError>false</responseDataOnError> + <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage> + <assertionsResultsToSave>0</assertionsResultsToSave> + <bytes>true</bytes> + <sentBytes>true</sentBytes> + <threadCounts>true</threadCounts> + <idleTime>true</idleTime> + <connectTime>true</connectTime> + </value> + </objProp> + <stringProp name="filename">/home/adityap/apex_stability/Stability.log</stringProp> + </ResultCollector> + <hashTree/> + <ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree" enabled="true"> + <boolProp name="ResultCollector.error_logging">false</boolProp> + <objProp> + <name>saveConfig</name> + <value class="SampleSaveConfiguration"> + <time>true</time> + <latency>true</latency> + <timestamp>true</timestamp> + <success>true</success> + <label>true</label> + <code>true</code> + <message>true</message> + <threadName>true</threadName> + <dataType>true</dataType> + <encoding>false</encoding> + <assertions>true</assertions> + <subresults>true</subresults> + <responseData>false</responseData> + <samplerData>false</samplerData> + <xml>false</xml> + <fieldNames>true</fieldNames> + <responseHeaders>false</responseHeaders> + <requestHeaders>false</requestHeaders> + <responseDataOnError>false</responseDataOnError> + <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage> + <assertionsResultsToSave>0</assertionsResultsToSave> + <bytes>true</bytes> + <sentBytes>true</sentBytes> + <threadCounts>true</threadCounts> + <idleTime>true</idleTime> + <connectTime>true</connectTime> + </value> + </objProp> + <stringProp name="filename">/mnt/c/Users/arek/Desktop/s3p_results/performance/6/testresults_1.jtl</stringProp> + </ResultCollector> + <hashTree/> + <ResultCollector guiclass="TableVisualizer" testclass="ResultCollector" testname="View Results in Table" enabled="true"> + <boolProp name="ResultCollector.error_logging">false</boolProp> + <objProp> + <name>saveConfig</name> + <value class="SampleSaveConfiguration"> + <time>true</time> + <latency>true</latency> + <timestamp>true</timestamp> + <success>true</success> + <label>true</label> + <code>true</code> + <message>true</message> + <threadName>true</threadName> + <dataType>true</dataType> + <encoding>false</encoding> + <assertions>true</assertions> + <subresults>true</subresults> + <responseData>false</responseData> + <samplerData>false</samplerData> + <xml>false</xml> + <fieldNames>true</fieldNames> + <responseHeaders>false</responseHeaders> + <requestHeaders>false</requestHeaders> + <responseDataOnError>false</responseDataOnError> + <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage> + <assertionsResultsToSave>0</assertionsResultsToSave> + <bytes>true</bytes> + <sentBytes>true</sentBytes> + <threadCounts>true</threadCounts> + <idleTime>true</idleTime> + <connectTime>true</connectTime> + </value> + </objProp> + <stringProp name="filename">/home/adityap/apex_stability/resultTable.log</stringProp> + </ResultCollector> + <hashTree/> + </hashTree> + </hashTree> +</jmeterTestPlan> |