diff options
author | FrancescoFioraEst <francesco.fiora@est.tech> | 2023-10-16 12:57:37 +0100 |
---|---|---|
committer | Francesco Fiora <francesco.fiora@est.tech> | 2023-10-16 15:08:36 +0000 |
commit | 7f7d2bfe1673f3334e43029bb81408d3305fa2e2 (patch) | |
tree | 70aa8b88ac15517ff34a481dca04a7dacbafd123 | |
parent | 9bd7cd21ab1b8afa935f0c1d7f8ef422bf86b19f (diff) |
Fix messages in ACM
Fix TIMEOUT support in MIGRATING.
Avoid conflicts updating AC instance Element instead
of a full AC instance.
Using ExecutorService to send messages to the participant,
the transaction will completed before the message is sent.
Issue-ID: POLICY-4811
Change-Id: I2730ae694c8a5c9edfe500b1fa93cfb3787f32c5
Signed-off-by: FrancescoFioraEst <francesco.fiora@est.tech>
10 files changed, 108 insertions, 35 deletions
diff --git a/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/AcInstanceStateResolver.java b/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/AcInstanceStateResolver.java index 7fed8a756..ace246c5d 100755 --- a/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/AcInstanceStateResolver.java +++ b/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/AcInstanceStateResolver.java @@ -95,10 +95,11 @@ public class AcInstanceStateResolver { // timeout this.graph.put(new String[] {DEPLOY, LOCK_NONE, UNDEPLOYING, STATE_LOCKED_NONE, TIMEOUT}, DEPLOY); - this.graph.put(new String[] {UNDEPLOY, LOCK_NONE, UNDEPLOYING, STATE_LOCKED_NONE, TIMEOUT}, UNDEPLOY); - this.graph.put(new String[] {UNDEPLOY, LOCK_NONE, UPDATING, STATE_LOCKED_NONE, TIMEOUT}, UNDEPLOY); - this.graph.put(new String[] {DEPLOY, LOCK_NONE, DEPLOYING, STATE_LOCKED_NONE, TIMEOUT}, DEPLOY); + + this.graph.put(new String[] {UNDEPLOY, LOCK_NONE, UNDEPLOYING, STATE_LOCKED_NONE, TIMEOUT}, UNDEPLOY); + this.graph.put(new String[] {UNDEPLOY, LOCK_NONE, UPDATING, LOCKED, TIMEOUT}, UNDEPLOY); + this.graph.put(new String[] {UNDEPLOY, LOCK_NONE, MIGRATING, LOCKED, TIMEOUT}, UNDEPLOY); this.graph.put(new String[] {UNDEPLOY, LOCK_NONE, DEPLOYING, STATE_LOCKED_NONE, TIMEOUT}, UNDEPLOY); this.graph.put(new String[] {DELETE, LOCK_NONE, DELETING, LOCK_NONE, TIMEOUT}, DELETE); diff --git a/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/AutomationCompositionProvider.java b/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/AutomationCompositionProvider.java index 6ff8d8432..6b90619c9 100755 --- a/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/AutomationCompositionProvider.java +++ b/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/AutomationCompositionProvider.java @@ -31,6 +31,7 @@ import java.util.UUID; import lombok.AllArgsConstructor; import lombok.NonNull; import org.onap.policy.clamp.models.acm.concepts.AutomationComposition; +import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElement; import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionInfo; import org.onap.policy.clamp.models.acm.concepts.DeployState; import org.onap.policy.clamp.models.acm.concepts.LockState; @@ -43,6 +44,7 @@ import org.onap.policy.models.base.PfModelRuntimeException; import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier; import org.springframework.data.domain.Example; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; /** @@ -77,7 +79,7 @@ public class AutomationCompositionProvider { * @param instanceId the ID of the automation composition to get * @return the automation composition found */ - @Transactional(readOnly = true) + @Transactional(readOnly = true, isolation = Isolation.READ_UNCOMMITTED) public Optional<AutomationComposition> findAutomationComposition(final UUID instanceId) { var result = automationCompositionRepository.findById(instanceId.toString()); return result.stream().map(JpaAutomationComposition::toAuthorative).findFirst(); @@ -209,4 +211,18 @@ public class AutomationCompositionProvider { } acElementRepository.saveAll(jpaList); } + + /** + * Update AutomationCompositionElement. + * + * @param element the AutomationCompositionElement + * @param instanceId the instance Id + */ + public void updateAutomationCompositionElement(@NonNull final AutomationCompositionElement element, + @NonNull final UUID instanceId) { + var jpaAcElement = new JpaAutomationCompositionElement(element.getId().toString(), instanceId.toString()); + jpaAcElement.fromAuthorative(element); + ProviderUtils.validate(element, jpaAcElement, "AutomationCompositionElement"); + acElementRepository.save(jpaAcElement); + } } diff --git a/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/ProviderUtils.java b/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/ProviderUtils.java index 6ba6ac016..6feb2b719 100755 --- a/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/ProviderUtils.java +++ b/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/ProviderUtils.java @@ -72,17 +72,28 @@ public final class ProviderUtils { */ public static <A, J extends Validated & PfAuthorative<A>> J getJpaAndValidate(A authorativeConcept, Supplier<J> jpaSupplier, String conceptDescription) { - var validationResult = new BeanValidationResult(conceptDescription, authorativeConcept); - var jpaConcept = jpaSupplier.get(); jpaConcept.fromAuthorative(authorativeConcept); + validate(authorativeConcept, jpaConcept, conceptDescription); + return jpaConcept; + } + + /** + * Validate a Jpa object. + * + * @param authorativeConcept the concept + * @param jpaConcept the Jpa of the concept + * @param conceptDescription the description used for validation result + */ + public static <A, J extends Validated & PfAuthorative<A>> void validate(A authorativeConcept, + J jpaConcept, String conceptDescription) { + var validationResult = new BeanValidationResult(conceptDescription, authorativeConcept); validationResult.addResult(jpaConcept.validate(conceptDescription)); if (!validationResult.isValid()) { throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, validationResult.getResult()); } - return jpaConcept; } /** diff --git a/models/src/main/java/org/onap/policy/clamp/models/acm/utils/AcmUtils.java b/models/src/main/java/org/onap/policy/clamp/models/acm/utils/AcmUtils.java index c3d8fc4a4..0fd7ab95c 100755 --- a/models/src/main/java/org/onap/policy/clamp/models/acm/utils/AcmUtils.java +++ b/models/src/main/java/org/onap/policy/clamp/models/acm/utils/AcmUtils.java @@ -381,6 +381,7 @@ public final class AcmUtils { for (var element : automationComposition.getElements().values()) { element.setDeployState(deployState); element.setLockState(lockState); + element.setMessage(null); } } diff --git a/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/provider/AutomationCompositionProviderTest.java b/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/provider/AutomationCompositionProviderTest.java index 0991c1bd0..e7ceab830 100644 --- a/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/provider/AutomationCompositionProviderTest.java +++ b/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/provider/AutomationCompositionProviderTest.java @@ -25,6 +25,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.util.List; @@ -44,7 +45,8 @@ import org.springframework.data.domain.Example; class AutomationCompositionProviderTest { - private static final String OBJECT_IS_NULL = "automationComposition is marked non-null but is null"; + private static final String AC_IS_NULL = "automationComposition is marked non-null but is null"; + private static final String ACELEMENT_IS_NULL = "element is marked non-null but is null"; private static final Coder CODER = new StandardCoder(); private static final String AUTOMATION_COMPOSITION_JSON = @@ -84,7 +86,7 @@ class AutomationCompositionProviderTest { mock(AutomationCompositionElementRepository.class)); assertThatThrownBy(() -> automationCompositionProvider.updateAutomationComposition(null)) - .hasMessageMatching(OBJECT_IS_NULL); + .hasMessageMatching(AC_IS_NULL); when(automationCompositionRepository.save(inputAutomationCompositionsJpa.get(0))) .thenReturn(inputAutomationCompositionsJpa.get(0)); @@ -185,4 +187,19 @@ class AutomationCompositionProviderTest { automationCompositionProvider.deleteAutomationComposition(automationComposition.getInstanceId()); assertEquals(automationComposition, deletedAc); } + + @Test + void testAutomationCompositionElementUpdate() { + var acElementRepository = mock(AutomationCompositionElementRepository.class); + var automationCompositionProvider = new AutomationCompositionProvider( + mock(AutomationCompositionRepository.class), acElementRepository); + + assertThatThrownBy(() -> automationCompositionProvider.updateAutomationCompositionElement(null, null)) + .hasMessageMatching(ACELEMENT_IS_NULL); + + var acElement = inputAutomationCompositions.getAutomationCompositionList().get(0).getElements().values() + .iterator().next(); + automationCompositionProvider.updateAutomationCompositionElement(acElement, UUID.randomUUID()); + verify(acElementRepository).save(any()); + } } diff --git a/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/handler/AutomationCompositionHandler.java b/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/handler/AutomationCompositionHandler.java index 02fce5548..79fef3def 100755 --- a/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/handler/AutomationCompositionHandler.java +++ b/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/handler/AutomationCompositionHandler.java @@ -267,6 +267,7 @@ public class AutomationCompositionHandler { */ private void handleUndeployState(UUID messageId, final AutomationComposition automationComposition, Integer startPhaseMsg) { + automationComposition.setCompositionTargetId(null); for (var acElement : automationComposition.getElements().values()) { int startPhase = ParticipantUtils.findStartPhase( cacheProvider.getCommonProperties(automationComposition.getInstanceId(), acElement.getId())); diff --git a/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/handler/AutomationCompositionOutHandler.java b/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/handler/AutomationCompositionOutHandler.java index e2e93dabb..927eaa61d 100755 --- a/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/handler/AutomationCompositionOutHandler.java +++ b/participant/participant-intermediary/src/main/java/org/onap/policy/clamp/acm/participant/intermediary/handler/AutomationCompositionOutHandler.java @@ -123,7 +123,8 @@ public class AutomationCompositionOutHandler { var checkOpt = automationComposition.getElements().values().stream() .filter(acElement -> !deployState.equals(acElement.getDeployState())).findAny(); if (checkOpt.isEmpty()) { - if (DeployState.MIGRATING.equals(automationComposition.getDeployState())) { + if (DeployState.DEPLOYED.equals(automationComposition.getDeployState()) + && automationComposition.getCompositionTargetId() != null) { // migration scenario automationComposition.setCompositionId(automationComposition.getCompositionTargetId()); automationComposition.setCompositionTargetId(null); diff --git a/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/AutomationCompositionOutHandlerTest.java b/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/AutomationCompositionOutHandlerTest.java index cbd236efe..a04f9079c 100755 --- a/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/AutomationCompositionOutHandlerTest.java +++ b/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/AutomationCompositionOutHandlerTest.java @@ -231,7 +231,7 @@ class AutomationCompositionOutHandlerTest { var compositionTarget = UUID.randomUUID(); automationComposition.setCompositionTargetId(compositionTarget); - automationComposition.setDeployState(DeployState.MIGRATING); + automationComposition.setDeployState(DeployState.DEPLOYED); when(cacheProvider.getAcElementsDefinitions()).thenReturn(Map.of(compositionTarget, Map.of())); for (var element : automationComposition.getElements().values()) { diff --git a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionAcHandler.java b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionAcHandler.java index dbed7f790..d7a00f237 100755 --- a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionAcHandler.java +++ b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionAcHandler.java @@ -25,6 +25,8 @@ import java.util.Map; import java.util.Objects; import java.util.Set; import java.util.UUID; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; import lombok.AllArgsConstructor; import org.onap.policy.clamp.acm.runtime.supervision.comm.AcElementPropertiesPublisher; import org.onap.policy.clamp.acm.runtime.supervision.comm.AutomationCompositionDeployPublisher; @@ -62,6 +64,8 @@ public class SupervisionAcHandler { private final AcElementPropertiesPublisher acElementPropertiesPublisher; private final AutomationCompositionMigrationPublisher acCompositionMigrationPublisher; + private final ExecutorService executor = Executors.newFixedThreadPool(1); + /** * Handle Deploy an AutomationComposition instance. * @@ -74,6 +78,7 @@ public class SupervisionAcHandler { for (var element : automationComposition.getElements().values()) { if (!DeployState.DEPLOYED.equals(element.getDeployState())) { element.setDeployState(DeployState.DEPLOYING); + element.setMessage(null); } } } else { @@ -82,8 +87,9 @@ public class SupervisionAcHandler { automationComposition.setStateChangeResult(StateChangeResult.NO_ERROR); automationCompositionProvider.updateAutomationComposition(automationComposition); var startPhase = ParticipantUtils.getFirstStartPhase(automationComposition, acDefinition.getServiceTemplate()); - automationCompositionDeployPublisher.send(automationComposition, acDefinition.getServiceTemplate(), startPhase, - true); + executor.execute( + () -> automationCompositionDeployPublisher.send(automationComposition, acDefinition.getServiceTemplate(), + startPhase, true)); } /** @@ -104,9 +110,11 @@ public class SupervisionAcHandler { AcmUtils.setCascadedState(automationComposition, DeployState.UNDEPLOYING, LockState.NONE); } automationComposition.setStateChangeResult(StateChangeResult.NO_ERROR); + automationComposition.setCompositionTargetId(null); automationCompositionProvider.updateAutomationComposition(automationComposition); var startPhase = ParticipantUtils.getFirstStartPhase(automationComposition, acDefinition.getServiceTemplate()); - automationCompositionStateChangePublisher.send(automationComposition, startPhase, true); + executor.execute( + () -> automationCompositionStateChangePublisher.send(automationComposition, startPhase, true)); } /** @@ -129,7 +137,8 @@ public class SupervisionAcHandler { automationComposition.setStateChangeResult(StateChangeResult.NO_ERROR); automationCompositionProvider.updateAutomationComposition(automationComposition); var startPhase = ParticipantUtils.getFirstStartPhase(automationComposition, acDefinition.getServiceTemplate()); - automationCompositionStateChangePublisher.send(automationComposition, startPhase, true); + executor.execute( + () -> automationCompositionStateChangePublisher.send(automationComposition, startPhase, true)); } /** @@ -152,7 +161,8 @@ public class SupervisionAcHandler { automationComposition.setStateChangeResult(StateChangeResult.NO_ERROR); automationCompositionProvider.updateAutomationComposition(automationComposition); var startPhase = ParticipantUtils.getFirstStartPhase(automationComposition, acDefinition.getServiceTemplate()); - automationCompositionStateChangePublisher.send(automationComposition, startPhase, true); + executor.execute( + () -> automationCompositionStateChangePublisher.send(automationComposition, startPhase, true)); } /** @@ -163,7 +173,8 @@ public class SupervisionAcHandler { public void update(AutomationComposition automationComposition) { AcmUtils.setCascadedState(automationComposition, DeployState.UPDATING, automationComposition.getLockState()); automationComposition.setStateChangeResult(StateChangeResult.NO_ERROR); - acElementPropertiesPublisher.send(automationComposition); + executor.execute( + () -> acElementPropertiesPublisher.send(automationComposition)); } /** @@ -177,7 +188,8 @@ public class SupervisionAcHandler { automationComposition.setStateChangeResult(StateChangeResult.NO_ERROR); automationCompositionProvider.updateAutomationComposition(automationComposition); var startPhase = ParticipantUtils.getFirstStartPhase(automationComposition, acDefinition.getServiceTemplate()); - automationCompositionStateChangePublisher.send(automationComposition, startPhase, true); + executor.execute( + () -> automationCompositionStateChangePublisher.send(automationComposition, startPhase, true)); } /** @@ -227,9 +239,10 @@ public class SupervisionAcHandler { for (var element : automationComposition.getElements().values()) { if (element.getParticipantId().equals(automationCompositionAckMessage.getParticipantId())) { element.setDeployState(DeployState.DELETED); + automationCompositionProvider.updateAutomationCompositionElement(element, + automationComposition.getInstanceId()); } } - automationCompositionProvider.updateAutomationComposition(automationComposition); } else { LOGGER.warn("Empty AutomationCompositionResultMap {} {}", automationCompositionAckMessage.getAutomationCompositionId(), @@ -251,8 +264,9 @@ public class SupervisionAcHandler { StateChangeResult stateChangeResult) { var updated = false; boolean inProgress = !StateChangeResult.FAILED.equals(automationComposition.getStateChangeResult()); - if (inProgress) { + if (inProgress && !stateChangeResult.equals(automationComposition.getStateChangeResult())) { automationComposition.setStateChangeResult(stateChangeResult); + updated = true; } for (var acElementAck : automationCompositionResultSet) { @@ -265,7 +279,8 @@ public class SupervisionAcHandler { element.setDeployState(acElementAck.getValue().getDeployState()); element.setLockState(acElementAck.getValue().getLockState()); element.setRestarting(null); - updated = true; + automationCompositionProvider.updateAutomationCompositionElement(element, + automationComposition.getInstanceId()); } } @@ -274,6 +289,7 @@ public class SupervisionAcHandler { .map(AutomationCompositionElement::getRestarting).filter(Objects::nonNull).findAny(); if (restarting.isEmpty()) { automationComposition.setRestarting(null); + updated = true; } } @@ -289,6 +305,7 @@ public class SupervisionAcHandler { public void migrate(AutomationComposition automationComposition, UUID compositionTargetId) { AcmUtils.setCascadedState(automationComposition, DeployState.MIGRATING, LockState.LOCKED); automationComposition.setStateChangeResult(StateChangeResult.NO_ERROR); - acCompositionMigrationPublisher.send(automationComposition, compositionTargetId); + executor.execute( + () -> acCompositionMigrationPublisher.send(automationComposition, compositionTargetId)); } } diff --git a/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionAcHandlerTest.java b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionAcHandlerTest.java index d3f859843..f39970f32 100755 --- a/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionAcHandlerTest.java +++ b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/supervision/SupervisionAcHandlerTest.java @@ -24,6 +24,8 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.timeout; +import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.onap.policy.clamp.acm.runtime.util.CommonTestData.TOSCA_SERVICE_TEMPLATE_YAML; @@ -41,6 +43,7 @@ import org.onap.policy.clamp.acm.runtime.util.CommonTestData; import org.onap.policy.clamp.models.acm.concepts.AcElementDeployAck; import org.onap.policy.clamp.models.acm.concepts.AcTypeState; import org.onap.policy.clamp.models.acm.concepts.AutomationComposition; +import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElement; import org.onap.policy.clamp.models.acm.concepts.DeployState; import org.onap.policy.clamp.models.acm.concepts.LockState; import org.onap.policy.clamp.models.acm.concepts.StateChangeResult; @@ -70,7 +73,8 @@ class SupervisionAcHandlerTest { automationComposition, DeployState.DEPLOYED, LockState.UNLOCKED); handler.handleAutomationCompositionStateChangeAckMessage(automationCompositionAckMessage); - verify(automationCompositionProvider).updateAutomationComposition(any(AutomationComposition.class)); + verify(automationCompositionProvider, times(3)) + .updateAutomationCompositionElement(any(AutomationCompositionElement.class), any()); } private AutomationCompositionDeployAck getAutomationCompositionDeployAck(ParticipantMessageType messageType, @@ -83,6 +87,7 @@ class SupervisionAcHandlerTest { } automationCompositionAckMessage.setAutomationCompositionId(automationComposition.getInstanceId()); automationCompositionAckMessage.setParticipantId(CommonTestData.getParticipantId()); + automationCompositionAckMessage.setStateChangeResult(StateChangeResult.NO_ERROR); return automationCompositionAckMessage; } @@ -121,6 +126,7 @@ class SupervisionAcHandlerTest { var automationCompositionAckMessage = new AutomationCompositionDeployAck(ParticipantMessageType.AUTOMATION_COMPOSITION_DEPLOY_ACK); + automationCompositionAckMessage.setStateChangeResult(StateChangeResult.NO_ERROR); for (var element : automationComposition.getElements().values()) { element.setDeployState(DeployState.DEPLOYED); } @@ -142,7 +148,8 @@ class SupervisionAcHandlerTest { handler.handleAutomationCompositionUpdateAckMessage(automationCompositionAckMessage); - verify(automationCompositionProvider).updateAutomationComposition(any(AutomationComposition.class)); + verify(automationCompositionProvider) + .updateAutomationCompositionElement(any(AutomationCompositionElement.class), any()); } @Test @@ -159,8 +166,8 @@ class SupervisionAcHandlerTest { automationComposition.setStateChangeResult(StateChangeResult.FAILED); handler.deploy(automationComposition, acDefinition); verify(automationCompositionProvider).updateAutomationComposition(automationComposition); - verify(automationCompositionDeployPublisher).send(automationComposition, acDefinition.getServiceTemplate(), 0, - true); + verify(automationCompositionDeployPublisher, timeout(1000)) + .send(automationComposition, acDefinition.getServiceTemplate(), 0, true); } @Test @@ -177,7 +184,7 @@ class SupervisionAcHandlerTest { handler.undeploy(automationComposition, acDefinition); verify(automationCompositionProvider).updateAutomationComposition(any(AutomationComposition.class)); - verify(acStateChangePublisher).send(any(AutomationComposition.class), anyInt(), anyBoolean()); + verify(acStateChangePublisher, timeout(1000)).send(any(AutomationComposition.class), anyInt(), anyBoolean()); } @Test @@ -197,7 +204,7 @@ class SupervisionAcHandlerTest { .forEach(element -> element.setDeployState(DeployState.UNDEPLOYING)); handler.undeploy(automationComposition, acDefinition); verify(automationCompositionProvider).updateAutomationComposition(automationComposition); - verify(acStateChangePublisher).send(any(AutomationComposition.class), anyInt(), anyBoolean()); + verify(acStateChangePublisher, timeout(1000)).send(any(AutomationComposition.class), anyInt(), anyBoolean()); } @Test @@ -214,7 +221,7 @@ class SupervisionAcHandlerTest { handler.unlock(automationComposition, acDefinition); verify(automationCompositionProvider).updateAutomationComposition(any(AutomationComposition.class)); - verify(acStateChangePublisher).send(any(AutomationComposition.class), anyInt(), anyBoolean()); + verify(acStateChangePublisher, timeout(1000)).send(any(AutomationComposition.class), anyInt(), anyBoolean()); } @Test @@ -233,7 +240,7 @@ class SupervisionAcHandlerTest { handler.unlock(automationComposition, acDefinition); verify(automationCompositionProvider).updateAutomationComposition(any(AutomationComposition.class)); - verify(acStateChangePublisher).send(any(AutomationComposition.class), anyInt(), anyBoolean()); + verify(acStateChangePublisher, timeout(1000)).send(any(AutomationComposition.class), anyInt(), anyBoolean()); } @Test @@ -250,7 +257,7 @@ class SupervisionAcHandlerTest { handler.lock(automationComposition, acDefinition); verify(automationCompositionProvider).updateAutomationComposition(any(AutomationComposition.class)); - verify(acStateChangePublisher).send(any(AutomationComposition.class), anyInt(), anyBoolean()); + verify(acStateChangePublisher, timeout(1000)).send(any(AutomationComposition.class), anyInt(), anyBoolean()); } @Test @@ -269,7 +276,7 @@ class SupervisionAcHandlerTest { handler.lock(automationComposition, acDefinition); verify(automationCompositionProvider).updateAutomationComposition(any(AutomationComposition.class)); - verify(acStateChangePublisher).send(any(AutomationComposition.class), anyInt(), anyBoolean()); + verify(acStateChangePublisher, timeout(1000)).send(any(AutomationComposition.class), anyInt(), anyBoolean()); } @Test @@ -293,7 +300,8 @@ class SupervisionAcHandlerTest { handler.handleAutomationCompositionUpdateAckMessage(automationCompositionAckMessage); - verify(automationCompositionProvider).updateAutomationComposition(any(AutomationComposition.class)); + verify(automationCompositionProvider) + .updateAutomationCompositionElement(any(AutomationCompositionElement.class), any()); } @Test @@ -305,7 +313,7 @@ class SupervisionAcHandlerTest { var automationComposition = InstantiationUtils.getAutomationCompositionFromResource(AC_INSTANTIATION_CREATE_JSON, "Lock"); handler.update(automationComposition); - verify(acElementPropertiesPublisher).send(any(AutomationComposition.class)); + verify(acElementPropertiesPublisher, timeout(1000)).send(any(AutomationComposition.class)); } @Test @@ -317,6 +325,6 @@ class SupervisionAcHandlerTest { var automationComposition = InstantiationUtils.getAutomationCompositionFromResource(AC_INSTANTIATION_CREATE_JSON, "Migrate"); handler.migrate(automationComposition, UUID.randomUUID()); - verify(acCompositionMigrationPublisher).send(any(AutomationComposition.class), any()); + verify(acCompositionMigrationPublisher, timeout(1000)).send(any(AutomationComposition.class), any()); } } |