diff options
23 files changed, 7524 insertions, 2324 deletions
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-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/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/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/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> |