From 0b027e2bd2a1d7a533e4bf439f0d9e2d67dddc2c Mon Sep 17 00:00:00 2001 From: biniek Date: Thu, 19 Apr 2018 15:02:18 +0200 Subject: [PATCH] Added canceling subsription to pnf-pnp workflow Change-Id: I0997943668b29a89565bbf83a40462a690d4a414 Issue-ID: SO-506 Signed-off-by: biniek --- .../pnf/delegate/CancelDmaapSubscription.java | 42 +++++ .../pnf/delegate/ExecutionVariableNames.java | 3 +- .../bpmn/infrastructure/pnf/dmaap/DmaapClient.java | 2 + .../pnf/dmaap/PnfEventReadyConsumer.java | 15 +- .../process/CreateAndActivatePnfResource.bpmn | 188 +++++++++++---------- .../src/main/webapp/WEB-INF/applicationContext.xml | 4 + .../src/main/webapp/WEB-INF/web.xml | 2 + .../pnf/delegate/CancelDmaapSubscriptionTest.java | 57 +++++++ .../pnf/delegate/DmaapClientTestImpl.java | 17 ++ 9 files changed, 230 insertions(+), 100 deletions(-) create mode 100644 bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/pnf/delegate/CancelDmaapSubscription.java create mode 100644 bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/pnf/delegate/CancelDmaapSubscriptionTest.java diff --git a/bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/pnf/delegate/CancelDmaapSubscription.java b/bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/pnf/delegate/CancelDmaapSubscription.java new file mode 100644 index 0000000000..92169b202b --- /dev/null +++ b/bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/pnf/delegate/CancelDmaapSubscription.java @@ -0,0 +1,42 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.mso.bpmn.infrastructure.pnf.delegate; + +import org.camunda.bpm.engine.delegate.DelegateExecution; +import org.camunda.bpm.engine.delegate.JavaDelegate; +import org.openecomp.mso.bpmn.infrastructure.pnf.dmaap.DmaapClient; +import org.springframework.beans.factory.annotation.Autowired; + +public class CancelDmaapSubscription implements JavaDelegate { + + private DmaapClient dmaapClient; + + @Override + public void execute(DelegateExecution execution) throws Exception { + String correlationId = (String) execution.getVariable(ExecutionVariableNames.CORRELATION_ID); + dmaapClient.unregister(correlationId); + } + + @Autowired + public void setDmaapClient(DmaapClient dmaapClient) { + this.dmaapClient = dmaapClient; + } +} diff --git a/bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/pnf/delegate/ExecutionVariableNames.java b/bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/pnf/delegate/ExecutionVariableNames.java index 0d64f2c8b7..94d221a054 100644 --- a/bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/pnf/delegate/ExecutionVariableNames.java +++ b/bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/pnf/delegate/ExecutionVariableNames.java @@ -23,8 +23,7 @@ package org.openecomp.mso.bpmn.infrastructure.pnf.delegate; @SuppressWarnings("ALL") public class ExecutionVariableNames { - private ExecutionVariableNames() { - } + private ExecutionVariableNames() {} public final static String CORRELATION_ID = "correlationId"; public final static String AAI_CONTAINS_INFO_ABOUT_PNF = "aaiContainsInfoAboutPnf"; diff --git a/bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/pnf/dmaap/DmaapClient.java b/bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/pnf/dmaap/DmaapClient.java index c6b6be6842..12a6c7c51f 100644 --- a/bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/pnf/dmaap/DmaapClient.java +++ b/bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/pnf/dmaap/DmaapClient.java @@ -23,4 +23,6 @@ package org.openecomp.mso.bpmn.infrastructure.pnf.dmaap; public interface DmaapClient { void registerForUpdate(String correlationId, Runnable informConsumer); + + Runnable unregister(String correlationId); } diff --git a/bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/pnf/dmaap/PnfEventReadyConsumer.java b/bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/pnf/dmaap/PnfEventReadyConsumer.java index 8c9903e87a..1fd2de97f2 100644 --- a/bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/pnf/dmaap/PnfEventReadyConsumer.java +++ b/bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/pnf/dmaap/PnfEventReadyConsumer.java @@ -86,6 +86,15 @@ public class PnfEventReadyConsumer implements DmaapClient { } } + @Override + public synchronized Runnable unregister(String correlationId) { + Runnable runnable = pnfCorrelationIdToThreadMap.remove(correlationId); + if (pnfCorrelationIdToThreadMap.isEmpty()) { + stopDmaapThreadListener(); + } + return runnable; + } + private synchronized void startDmaapThreadListener() { if (!dmaapThreadListenerIsRunning) { executor = Executors.newScheduledThreadPool(1); @@ -123,13 +132,9 @@ public class PnfEventReadyConsumer implements DmaapClient { private synchronized void informAboutPnfReadyIfCorrelationIdFound(String correlationId) { - Runnable runnable = pnfCorrelationIdToThreadMap.remove(correlationId); + Runnable runnable = unregister(correlationId); if (runnable != null) { runnable.run(); - - if (pnfCorrelationIdToThreadMap.isEmpty()) { - stopDmaapThreadListener(); - } } } diff --git a/bpmn/MSOInfrastructureBPMN/src/main/resources/process/CreateAndActivatePnfResource.bpmn b/bpmn/MSOInfrastructureBPMN/src/main/resources/process/CreateAndActivatePnfResource.bpmn index 177bd98b44..c118105e35 100644 --- a/bpmn/MSOInfrastructureBPMN/src/main/resources/process/CreateAndActivatePnfResource.bpmn +++ b/bpmn/MSOInfrastructureBPMN/src/main/resources/process/CreateAndActivatePnfResource.bpmn @@ -9,10 +9,10 @@ - + - + @@ -31,24 +31,34 @@ #{aaiContainsInfoAboutIp} - - SequenceFlow_0j5ksz1 - - - SequenceFlow_0p09qgm - SequenceFlow_1h6yz62 - + + SequenceFlow_1l1t6ak + SequenceFlow_1h6yz62 + SequenceFlow_1ls8pua + SequenceFlow_1miyzfe + SequenceFlow_0j5ksz1 SequenceFlow_1j4r3zt + + SequenceFlow_0j5ksz1 + + + SequenceFlow_1qr6cmf + SequenceFlow_1ls8pua + SequenceFlow_17s9025 + + + SequenceFlow_0p09qgm + SequenceFlow_1j4r3zt SequenceFlow_1l1t6ak @@ -58,16 +68,6 @@ SequenceFlow_0v5ffpe SequenceFlow_1qr6cmf - - SequenceFlow_1l1t6ak - SequenceFlow_1h6yz62 - SequenceFlow_1ls8pua - - - SequenceFlow_1qr6cmf - SequenceFlow_1ls8pua - SequenceFlow_17s9025 - SequenceFlow_17s9025 SequenceFlow_1o8od8e @@ -82,10 +82,10 @@ #{timeoutForPnfEntryNotification} - + SequenceFlow_1kc34bc SequenceFlow_1miyzfe - + - + - + - + @@ -114,43 +114,43 @@ - + - + - + - + - + - + - - + + - + - + - + - - + + - + @@ -164,56 +164,58 @@ - + - - + + - + - - + + + + - + - + - - + + - + - - + + - + - - + + - + - + - + - + @@ -223,90 +225,90 @@ - + - + - + - - + + - + - - + + - + - + - + - - - + + + - + - + - - + + - + - - + + - + - - + + - + - - - - + - - + + - + - - + + - + + + + diff --git a/bpmn/MSOInfrastructureBPMN/src/main/webapp/WEB-INF/applicationContext.xml b/bpmn/MSOInfrastructureBPMN/src/main/webapp/WEB-INF/applicationContext.xml index 03fff4f974..4ddeba16be 100644 --- a/bpmn/MSOInfrastructureBPMN/src/main/webapp/WEB-INF/applicationContext.xml +++ b/bpmn/MSOInfrastructureBPMN/src/main/webapp/WEB-INF/applicationContext.xml @@ -18,6 +18,10 @@ + + + + diff --git a/bpmn/MSOInfrastructureBPMN/src/main/webapp/WEB-INF/web.xml b/bpmn/MSOInfrastructureBPMN/src/main/webapp/WEB-INF/web.xml index e262495537..fb5fc66309 100644 --- a/bpmn/MSOInfrastructureBPMN/src/main/webapp/WEB-INF/web.xml +++ b/bpmn/MSOInfrastructureBPMN/src/main/webapp/WEB-INF/web.xml @@ -50,6 +50,8 @@ org.springframework.web.context.ContextLoaderListener + + org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap diff --git a/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/pnf/delegate/CancelDmaapSubscriptionTest.java b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/pnf/delegate/CancelDmaapSubscriptionTest.java new file mode 100644 index 0000000000..d27cf44342 --- /dev/null +++ b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/pnf/delegate/CancelDmaapSubscriptionTest.java @@ -0,0 +1,57 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.mso.bpmn.infrastructure.pnf.delegate; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import org.camunda.bpm.engine.delegate.DelegateExecution; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = {CancelDmaapSubscription.class, DmaapClientTestImpl.class}) +public class CancelDmaapSubscriptionTest { + + @Autowired + public CancelDmaapSubscription delegate; + + @Autowired + private DmaapClientTestImpl dmaapClientTest; + + @Test + public void shouldCancelSubscription() throws Exception { + // given + DelegateExecution delegateExecution = mock(DelegateExecution.class); + when(delegateExecution.getVariable(eq(ExecutionVariableNames.CORRELATION_ID))).thenReturn("testCorrelationId"); + when(delegateExecution.getProcessBusinessKey()).thenReturn("testBusinessKey"); + dmaapClientTest.registerForUpdate("testCorrelationId", () -> {}); + // when + delegate.execute(delegateExecution); + // then + assertThat(dmaapClientTest.haveRegisteredConsumer()).isFalse(); + } +} \ No newline at end of file diff --git a/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/pnf/delegate/DmaapClientTestImpl.java b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/pnf/delegate/DmaapClientTestImpl.java index 55dd3a968f..8d35f9f8e0 100644 --- a/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/pnf/delegate/DmaapClientTestImpl.java +++ b/bpmn/MSOInfrastructureBPMN/src/test/java/org/openecomp/mso/bpmn/infrastructure/pnf/delegate/DmaapClientTestImpl.java @@ -21,8 +21,10 @@ package org.openecomp.mso.bpmn.infrastructure.pnf.delegate; import org.openecomp.mso.bpmn.infrastructure.pnf.dmaap.DmaapClient; +import java.util.Objects; public class DmaapClientTestImpl implements DmaapClient { + private String correlationId; private Runnable informConsumer; @@ -32,6 +34,17 @@ public class DmaapClientTestImpl implements DmaapClient { this.informConsumer = informConsumer; } + @Override + public Runnable unregister(String correlationId) { + if (Objects.equals(this.correlationId, correlationId)) { + this.correlationId = null; + Runnable informConsumer = this.informConsumer; + this.informConsumer = null; + return informConsumer; + } + return null; + } + public String getCorrelationId() { return correlationId; } @@ -39,4 +52,8 @@ public class DmaapClientTestImpl implements DmaapClient { public Runnable getInformConsumer() { return informConsumer; } + + public boolean haveRegisteredConsumer() { + return correlationId != null; + } } -- 2.16.6