summaryrefslogtreecommitdiffstats
path: root/participant/participant-intermediary/src/test/java
diff options
context:
space:
mode:
authorFrancescoFioraEst <francesco.fiora@est.tech>2024-02-14 16:30:56 +0000
committerFrancescoFioraEst <francesco.fiora@est.tech>2024-02-15 15:29:53 +0000
commite0a13196ebb34c84931df27ba00cd1778adbceb9 (patch)
tree64f1af69d7802ee41a08278ec1e84b21241c1fb5 /participant/participant-intermediary/src/test/java
parent665815fc5c91c3437a0b0459448994789464a391 (diff)
Add old properties and new properties support
Add old/new properties support in migrate and update, and add Java code backward compatibility. Issue-ID: POLICY-4930 Change-Id: I640bc2a858969168b13fe6cdbb557ebf920bafd5 Signed-off-by: FrancescoFioraEst <francesco.fiora@est.tech>
Diffstat (limited to 'participant/participant-intermediary/src/test/java')
-rwxr-xr-xparticipant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/api/impl/AcElementListenerV1Test.java239
-rwxr-xr-xparticipant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/api/impl/AcElementListenerV2Test.java228
-rw-r--r--participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/api/impl/AutomationCompositionElementListenerTest.java17
-rw-r--r--participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/AutomationCompositionHandlerTest.java111
-rw-r--r--participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/CacheProviderTest.java6
-rw-r--r--participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/DummyAcElementListener.java49
-rw-r--r--participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/ParticipantHandlerTest.java2
-rw-r--r--participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/ThreadHandlerTest.java131
8 files changed, 672 insertions, 111 deletions
diff --git a/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/api/impl/AcElementListenerV1Test.java b/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/api/impl/AcElementListenerV1Test.java
new file mode 100755
index 000000000..a60e1b8cd
--- /dev/null
+++ b/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/api/impl/AcElementListenerV1Test.java
@@ -0,0 +1,239 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2024 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.clamp.acm.participant.intermediary.api.impl;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.clearInvocations;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+
+import java.util.Map;
+import java.util.UUID;
+import org.junit.jupiter.api.Test;
+import org.mockito.Answers;
+import org.onap.policy.clamp.acm.participant.intermediary.api.CompositionDto;
+import org.onap.policy.clamp.acm.participant.intermediary.api.CompositionElementDto;
+import org.onap.policy.clamp.acm.participant.intermediary.api.InstanceElementDto;
+import org.onap.policy.clamp.acm.participant.intermediary.api.ParticipantIntermediaryApi;
+import org.onap.policy.clamp.models.acm.concepts.AcElementDeploy;
+import org.onap.policy.clamp.models.acm.concepts.AcTypeState;
+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;
+import org.onap.policy.models.base.PfModelException;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
+
+class AcElementListenerV1Test {
+
+ @Test
+ void deployTest() throws PfModelException {
+ var acElementListenerV1 = mock(AcElementListenerV1.class, Answers.CALLS_REAL_METHODS);
+ var compositionElement = new CompositionElementDto(UUID.randomUUID(), new ToscaConceptIdentifier(),
+ Map.of(), Map.of());
+ var instanceElement = new InstanceElementDto(UUID.randomUUID(), UUID.randomUUID(), null, Map.of(), Map.of());
+ acElementListenerV1.deploy(compositionElement, instanceElement);
+ verify(acElementListenerV1).deploy(any(), any(), any());
+
+ clearInvocations(acElementListenerV1);
+ acElementListenerV1.handleRestartInstance(compositionElement, instanceElement,
+ DeployState.DEPLOYING, LockState.NONE);
+ verify(acElementListenerV1).deploy(any(), any(), any());
+ }
+
+ @Test
+ void undeployTest() throws PfModelException {
+ var acElementListenerV1 = mock(AcElementListenerV1.class, Answers.CALLS_REAL_METHODS);
+ var compositionElement = new CompositionElementDto(UUID.randomUUID(), new ToscaConceptIdentifier(),
+ Map.of(), Map.of());
+ var instanceElement = new InstanceElementDto(UUID.randomUUID(), UUID.randomUUID(), null, Map.of(), Map.of());
+ acElementListenerV1.undeploy(compositionElement, instanceElement);
+ verify(acElementListenerV1).undeploy(instanceElement.instanceId(), instanceElement.elementId());
+
+ clearInvocations(acElementListenerV1);
+ acElementListenerV1.handleRestartInstance(compositionElement, instanceElement,
+ DeployState.UNDEPLOYING, LockState.NONE);
+ verify(acElementListenerV1).undeploy(instanceElement.instanceId(), instanceElement.elementId());
+ }
+
+ @Test
+ void lockTest() throws PfModelException {
+ var intermediaryApi = mock(ParticipantIntermediaryApi.class);
+ var acElementListenerV1 = createAcElementListenerV1(intermediaryApi);
+ var compositionElement = new CompositionElementDto(UUID.randomUUID(), new ToscaConceptIdentifier(),
+ Map.of(), Map.of());
+ var instanceElement = new InstanceElementDto(UUID.randomUUID(), UUID.randomUUID(), null, Map.of(), Map.of());
+ acElementListenerV1.lock(compositionElement, instanceElement);
+ verify(intermediaryApi).updateAutomationCompositionElementState(instanceElement.instanceId(),
+ instanceElement.elementId(), null, LockState.LOCKED, StateChangeResult.NO_ERROR, "Locked");
+ }
+
+ @Test
+ void deleteTest() throws PfModelException {
+ var intermediaryApi = mock(ParticipantIntermediaryApi.class);
+ var acElementListenerV1 = createAcElementListenerV1(intermediaryApi);
+ var compositionElement = new CompositionElementDto(UUID.randomUUID(), new ToscaConceptIdentifier(),
+ Map.of(), Map.of());
+ var instanceElement = new InstanceElementDto(UUID.randomUUID(), UUID.randomUUID(), null, Map.of(), Map.of());
+ acElementListenerV1.delete(compositionElement, instanceElement);
+ verify(intermediaryApi).updateAutomationCompositionElementState(instanceElement.instanceId(),
+ instanceElement.elementId(), DeployState.DELETED, null, StateChangeResult.NO_ERROR, "Deleted");
+ }
+
+ @Test
+ void updateTest() throws PfModelException {
+ var intermediaryApi = mock(ParticipantIntermediaryApi.class);
+ var acElementListenerV1 = createAcElementListenerV1(intermediaryApi);
+ var compositionElement = new CompositionElementDto(UUID.randomUUID(), new ToscaConceptIdentifier(),
+ Map.of(), Map.of());
+ var instanceElement = new InstanceElementDto(UUID.randomUUID(), UUID.randomUUID(), null, Map.of(), Map.of());
+ acElementListenerV1.update(compositionElement, instanceElement, instanceElement);
+ verify(intermediaryApi).updateAutomationCompositionElementState(instanceElement.instanceId(),
+ instanceElement.elementId(), DeployState.DEPLOYED, null,
+ StateChangeResult.NO_ERROR, "Update not supported");
+ }
+
+ @Test
+ void unlockTest() throws PfModelException {
+ var intermediaryApi = mock(ParticipantIntermediaryApi.class);
+ var acElementListenerV1 = createAcElementListenerV1(intermediaryApi);
+ var compositionElement = new CompositionElementDto(UUID.randomUUID(), new ToscaConceptIdentifier(),
+ Map.of(), Map.of());
+ var instanceElement = new InstanceElementDto(UUID.randomUUID(), UUID.randomUUID(), null, Map.of(), Map.of());
+ acElementListenerV1.unlock(compositionElement, instanceElement);
+ verify(intermediaryApi).updateAutomationCompositionElementState(instanceElement.instanceId(),
+ instanceElement.elementId(), null, LockState.UNLOCKED, StateChangeResult.NO_ERROR, "Unlocked");
+ }
+
+ @Test
+ void primeTest() throws PfModelException {
+ var intermediaryApi = mock(ParticipantIntermediaryApi.class);
+ var acElementListenerV1 = createAcElementListenerV1(intermediaryApi);
+ var compositionId = UUID.randomUUID();
+ var toscaConceptIdentifier = new ToscaConceptIdentifier();
+ var composition = new CompositionDto(compositionId, Map.of(toscaConceptIdentifier, Map.of()), Map.of());
+ acElementListenerV1.prime(composition);
+ verify(intermediaryApi)
+ .updateCompositionState(compositionId, AcTypeState.PRIMED, StateChangeResult.NO_ERROR, "Primed");
+ }
+
+ @Test
+ void deprimeTest() throws PfModelException {
+ var intermediaryApi = mock(ParticipantIntermediaryApi.class);
+ var acElementListenerV1 = createAcElementListenerV1(intermediaryApi);
+ var compositionId = UUID.randomUUID();
+ var toscaConceptIdentifier = new ToscaConceptIdentifier();
+ var composition = new CompositionDto(compositionId, Map.of(toscaConceptIdentifier, Map.of()), Map.of());
+ acElementListenerV1.deprime(composition);
+ verify(intermediaryApi)
+ .updateCompositionState(compositionId, AcTypeState.COMMISSIONED, StateChangeResult.NO_ERROR, "Deprimed");
+ }
+
+ @Test
+ void handleRestartComposition() throws PfModelException {
+ var intermediaryApi = mock(ParticipantIntermediaryApi.class);
+ var acElementListenerV1 = createAcElementListenerV1(intermediaryApi);
+ var compositionId = UUID.randomUUID();
+ var toscaConceptIdentifier = new ToscaConceptIdentifier();
+ var composition = new CompositionDto(compositionId, Map.of(toscaConceptIdentifier, Map.of()), Map.of());
+
+ acElementListenerV1.handleRestartComposition(composition, AcTypeState.PRIMED);
+ verify(intermediaryApi)
+ .updateCompositionState(compositionId, AcTypeState.PRIMED, StateChangeResult.NO_ERROR, "Restarted");
+
+ clearInvocations(intermediaryApi);
+ acElementListenerV1.handleRestartComposition(composition, AcTypeState.PRIMING);
+ verify(intermediaryApi)
+ .updateCompositionState(compositionId, AcTypeState.PRIMED, StateChangeResult.NO_ERROR, "Primed");
+
+ clearInvocations(intermediaryApi);
+ acElementListenerV1.handleRestartComposition(composition, AcTypeState.DEPRIMING);
+ verify(intermediaryApi)
+ .updateCompositionState(compositionId, AcTypeState.COMMISSIONED, StateChangeResult.NO_ERROR, "Deprimed");
+ }
+
+ @Test
+ void handleRestartInstance() throws PfModelException {
+ var intermediaryApi = mock(ParticipantIntermediaryApi.class);
+ var acElementListenerV1 = createAcElementListenerV1(intermediaryApi);
+ var compositionElement = new CompositionElementDto(UUID.randomUUID(), new ToscaConceptIdentifier(),
+ Map.of(), Map.of());
+ var instanceElement = new InstanceElementDto(UUID.randomUUID(), UUID.randomUUID(), null, Map.of(), Map.of());
+
+ acElementListenerV1.handleRestartInstance(compositionElement, instanceElement,
+ DeployState.DEPLOYED, LockState.LOCKED);
+ verify(intermediaryApi).updateAutomationCompositionElementState(instanceElement.instanceId(),
+ instanceElement.elementId(), DeployState.DEPLOYED, LockState.LOCKED,
+ StateChangeResult.NO_ERROR, "Restarted");
+
+ clearInvocations(intermediaryApi);
+ acElementListenerV1.handleRestartInstance(compositionElement, instanceElement,
+ DeployState.DEPLOYED, LockState.LOCKING);
+ verify(intermediaryApi).updateAutomationCompositionElementState(instanceElement.instanceId(),
+ instanceElement.elementId(), null, LockState.LOCKED, StateChangeResult.NO_ERROR, "Locked");
+
+ clearInvocations(intermediaryApi);
+ acElementListenerV1.handleRestartInstance(compositionElement, instanceElement,
+ DeployState.DEPLOYED, LockState.UNLOCKING);
+ verify(intermediaryApi).updateAutomationCompositionElementState(instanceElement.instanceId(),
+ instanceElement.elementId(), null, LockState.UNLOCKED, StateChangeResult.NO_ERROR, "Unlocked");
+
+ clearInvocations(intermediaryApi);
+ acElementListenerV1.handleRestartInstance(compositionElement, instanceElement,
+ DeployState.UPDATING, LockState.LOCKED);
+ verify(intermediaryApi).updateAutomationCompositionElementState(instanceElement.instanceId(),
+ instanceElement.elementId(), DeployState.DEPLOYED, null,
+ StateChangeResult.NO_ERROR, "Update not supported");
+
+ clearInvocations(intermediaryApi);
+ acElementListenerV1.handleRestartInstance(compositionElement, instanceElement,
+ DeployState.DELETING, LockState.NONE);
+ verify(intermediaryApi).updateAutomationCompositionElementState(instanceElement.instanceId(),
+ instanceElement.elementId(), DeployState.DELETED, null, StateChangeResult.NO_ERROR, "Deleted");
+ }
+
+ @Test
+ void migrateTest() throws PfModelException {
+ var intermediaryApi = mock(ParticipantIntermediaryApi.class);
+ var acElementListenerV1 = createAcElementListenerV1(intermediaryApi);
+ var compositionElement = new CompositionElementDto(UUID.randomUUID(), new ToscaConceptIdentifier(),
+ Map.of(), Map.of());
+ var instanceElement = new InstanceElementDto(UUID.randomUUID(), UUID.randomUUID(), null, Map.of(), Map.of());
+ acElementListenerV1.migrate(compositionElement, compositionElement, instanceElement, instanceElement);
+ verify(intermediaryApi).updateAutomationCompositionElementState(instanceElement.instanceId(),
+ instanceElement.elementId(), DeployState.DEPLOYED, null,
+ StateChangeResult.NO_ERROR, "Migrated");
+ }
+
+ private AcElementListenerV1 createAcElementListenerV1(ParticipantIntermediaryApi intermediaryApi) {
+ return new AcElementListenerV1(intermediaryApi) {
+ @Override
+ public void deploy(UUID instanceId, AcElementDeploy element, Map<String, Object> properties)
+ throws PfModelException {
+
+ }
+
+ @Override
+ public void undeploy(UUID instanceId, UUID elementId) throws PfModelException {
+
+ }
+ };
+ }
+}
diff --git a/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/api/impl/AcElementListenerV2Test.java b/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/api/impl/AcElementListenerV2Test.java
new file mode 100755
index 000000000..c36e11dbc
--- /dev/null
+++ b/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/api/impl/AcElementListenerV2Test.java
@@ -0,0 +1,228 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2024 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.clamp.acm.participant.intermediary.api.impl;
+
+import static org.mockito.Mockito.clearInvocations;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+
+import java.util.Map;
+import java.util.UUID;
+import org.junit.jupiter.api.Test;
+import org.mockito.Answers;
+import org.onap.policy.clamp.acm.participant.intermediary.api.CompositionDto;
+import org.onap.policy.clamp.acm.participant.intermediary.api.CompositionElementDto;
+import org.onap.policy.clamp.acm.participant.intermediary.api.InstanceElementDto;
+import org.onap.policy.clamp.acm.participant.intermediary.api.ParticipantIntermediaryApi;
+import org.onap.policy.clamp.models.acm.concepts.AcTypeState;
+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;
+import org.onap.policy.models.base.PfModelException;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
+
+class AcElementListenerV2Test {
+
+ @Test
+ void deployTest() throws PfModelException {
+ var acElementListenerV2 = mock(AcElementListenerV2.class, Answers.CALLS_REAL_METHODS);
+ var compositionElement = new CompositionElementDto(UUID.randomUUID(), new ToscaConceptIdentifier(),
+ Map.of(), Map.of());
+ var instanceElement = new InstanceElementDto(UUID.randomUUID(), UUID.randomUUID(), null, Map.of(), Map.of());
+ acElementListenerV2.handleRestartInstance(compositionElement, instanceElement,
+ DeployState.DEPLOYING, LockState.NONE);
+ verify(acElementListenerV2).deploy(compositionElement, instanceElement);
+ }
+
+ @Test
+ void undeployTest() throws PfModelException {
+ var acElementListenerV2 = mock(AcElementListenerV2.class, Answers.CALLS_REAL_METHODS);
+ var compositionElement = new CompositionElementDto(UUID.randomUUID(), new ToscaConceptIdentifier(),
+ Map.of(), Map.of());
+ var instanceElement = new InstanceElementDto(UUID.randomUUID(), UUID.randomUUID(), null, Map.of(), Map.of());
+ acElementListenerV2.handleRestartInstance(compositionElement, instanceElement,
+ DeployState.UNDEPLOYING, LockState.NONE);
+ verify(acElementListenerV2).undeploy(compositionElement, instanceElement);
+ }
+
+ @Test
+ void lockTest() throws PfModelException {
+ var intermediaryApi = mock(ParticipantIntermediaryApi.class);
+ var acElementListenerV2 = createAcElementListenerV2(intermediaryApi);
+ var compositionElement = new CompositionElementDto(UUID.randomUUID(), new ToscaConceptIdentifier(),
+ Map.of(), Map.of());
+ var instanceElement = new InstanceElementDto(UUID.randomUUID(), UUID.randomUUID(), null, Map.of(), Map.of());
+ acElementListenerV2.lock(compositionElement, instanceElement);
+ verify(intermediaryApi).updateAutomationCompositionElementState(instanceElement.instanceId(),
+ instanceElement.elementId(), null, LockState.LOCKED, StateChangeResult.NO_ERROR, "Locked");
+ }
+
+ @Test
+ void deleteTest() throws PfModelException {
+ var intermediaryApi = mock(ParticipantIntermediaryApi.class);
+ var acElementListenerV2 = createAcElementListenerV2(intermediaryApi);
+ var compositionElement = new CompositionElementDto(UUID.randomUUID(), new ToscaConceptIdentifier(),
+ Map.of(), Map.of());
+ var instanceElement = new InstanceElementDto(UUID.randomUUID(), UUID.randomUUID(), null, Map.of(), Map.of());
+ acElementListenerV2.delete(compositionElement, instanceElement);
+ verify(intermediaryApi).updateAutomationCompositionElementState(instanceElement.instanceId(),
+ instanceElement.elementId(), DeployState.DELETED, null, StateChangeResult.NO_ERROR, "Deleted");
+ }
+
+ @Test
+ void updateTest() throws PfModelException {
+ var intermediaryApi = mock(ParticipantIntermediaryApi.class);
+ var acElementListenerV2 = createAcElementListenerV2(intermediaryApi);
+ var compositionElement = new CompositionElementDto(UUID.randomUUID(), new ToscaConceptIdentifier(),
+ Map.of(), Map.of());
+ var instanceElement = new InstanceElementDto(UUID.randomUUID(), UUID.randomUUID(), null, Map.of(), Map.of());
+ acElementListenerV2.update(compositionElement, instanceElement, instanceElement);
+ verify(intermediaryApi).updateAutomationCompositionElementState(instanceElement.instanceId(),
+ instanceElement.elementId(), DeployState.DEPLOYED, null,
+ StateChangeResult.NO_ERROR, "Update not supported");
+ }
+
+ @Test
+ void unlockTest() throws PfModelException {
+ var intermediaryApi = mock(ParticipantIntermediaryApi.class);
+ var acElementListenerV2 = createAcElementListenerV2(intermediaryApi);
+ var compositionElement = new CompositionElementDto(UUID.randomUUID(), new ToscaConceptIdentifier(),
+ Map.of(), Map.of());
+ var instanceElement = new InstanceElementDto(UUID.randomUUID(), UUID.randomUUID(), null, Map.of(), Map.of());
+ acElementListenerV2.unlock(compositionElement, instanceElement);
+ verify(intermediaryApi).updateAutomationCompositionElementState(instanceElement.instanceId(),
+ instanceElement.elementId(), null, LockState.UNLOCKED, StateChangeResult.NO_ERROR, "Unlocked");
+ }
+
+ @Test
+ void primeTest() throws PfModelException {
+ var intermediaryApi = mock(ParticipantIntermediaryApi.class);
+ var acElementListenerV2 = createAcElementListenerV2(intermediaryApi);
+ var compositionId = UUID.randomUUID();
+ var toscaConceptIdentifier = new ToscaConceptIdentifier();
+ var composition = new CompositionDto(compositionId, Map.of(toscaConceptIdentifier, Map.of()), Map.of());
+ acElementListenerV2.prime(composition);
+ verify(intermediaryApi)
+ .updateCompositionState(compositionId, AcTypeState.PRIMED, StateChangeResult.NO_ERROR, "Primed");
+ }
+
+ @Test
+ void deprimeTest() throws PfModelException {
+ var intermediaryApi = mock(ParticipantIntermediaryApi.class);
+ var acElementListenerV2 = createAcElementListenerV2(intermediaryApi);
+ var compositionId = UUID.randomUUID();
+ var toscaConceptIdentifier = new ToscaConceptIdentifier();
+ var composition = new CompositionDto(compositionId, Map.of(toscaConceptIdentifier, Map.of()), Map.of());
+ acElementListenerV2.deprime(composition);
+ verify(intermediaryApi)
+ .updateCompositionState(compositionId, AcTypeState.COMMISSIONED, StateChangeResult.NO_ERROR, "Deprimed");
+ }
+
+ @Test
+ void handleRestartComposition() throws PfModelException {
+ var intermediaryApi = mock(ParticipantIntermediaryApi.class);
+ var acElementListenerV2 = createAcElementListenerV2(intermediaryApi);
+ var compositionId = UUID.randomUUID();
+ var toscaConceptIdentifier = new ToscaConceptIdentifier();
+ var composition = new CompositionDto(compositionId, Map.of(toscaConceptIdentifier, Map.of()), Map.of());
+
+ acElementListenerV2.handleRestartComposition(composition, AcTypeState.PRIMED);
+ verify(intermediaryApi)
+ .updateCompositionState(compositionId, AcTypeState.PRIMED, StateChangeResult.NO_ERROR, "Restarted");
+
+ clearInvocations(intermediaryApi);
+ acElementListenerV2.handleRestartComposition(composition, AcTypeState.PRIMING);
+ verify(intermediaryApi)
+ .updateCompositionState(compositionId, AcTypeState.PRIMED, StateChangeResult.NO_ERROR, "Primed");
+
+ clearInvocations(intermediaryApi);
+ acElementListenerV2.handleRestartComposition(composition, AcTypeState.DEPRIMING);
+ verify(intermediaryApi)
+ .updateCompositionState(compositionId, AcTypeState.COMMISSIONED, StateChangeResult.NO_ERROR, "Deprimed");
+ }
+
+ @Test
+ void handleRestartInstance() throws PfModelException {
+ var intermediaryApi = mock(ParticipantIntermediaryApi.class);
+ var acElementListenerV2 = createAcElementListenerV2(intermediaryApi);
+ var compositionElement = new CompositionElementDto(UUID.randomUUID(), new ToscaConceptIdentifier(),
+ Map.of(), Map.of());
+ var instanceElement = new InstanceElementDto(UUID.randomUUID(), UUID.randomUUID(), null, Map.of(), Map.of());
+
+ acElementListenerV2.handleRestartInstance(compositionElement, instanceElement,
+ DeployState.DEPLOYED, LockState.LOCKED);
+ verify(intermediaryApi).updateAutomationCompositionElementState(instanceElement.instanceId(),
+ instanceElement.elementId(), DeployState.DEPLOYED, LockState.LOCKED,
+ StateChangeResult.NO_ERROR, "Restarted");
+
+ clearInvocations(intermediaryApi);
+ acElementListenerV2.handleRestartInstance(compositionElement, instanceElement,
+ DeployState.DEPLOYED, LockState.LOCKING);
+ verify(intermediaryApi).updateAutomationCompositionElementState(instanceElement.instanceId(),
+ instanceElement.elementId(), null, LockState.LOCKED, StateChangeResult.NO_ERROR, "Locked");
+
+ clearInvocations(intermediaryApi);
+ acElementListenerV2.handleRestartInstance(compositionElement, instanceElement,
+ DeployState.DEPLOYED, LockState.UNLOCKING);
+ verify(intermediaryApi).updateAutomationCompositionElementState(instanceElement.instanceId(),
+ instanceElement.elementId(), null, LockState.UNLOCKED, StateChangeResult.NO_ERROR, "Unlocked");
+
+ clearInvocations(intermediaryApi);
+ acElementListenerV2.handleRestartInstance(compositionElement, instanceElement,
+ DeployState.UPDATING, LockState.LOCKED);
+ verify(intermediaryApi).updateAutomationCompositionElementState(instanceElement.instanceId(),
+ instanceElement.elementId(), DeployState.DEPLOYED, null,
+ StateChangeResult.NO_ERROR, "Update not supported");
+
+ clearInvocations(intermediaryApi);
+ acElementListenerV2.handleRestartInstance(compositionElement, instanceElement,
+ DeployState.DELETING, LockState.NONE);
+ verify(intermediaryApi).updateAutomationCompositionElementState(instanceElement.instanceId(),
+ instanceElement.elementId(), DeployState.DELETED, null, StateChangeResult.NO_ERROR, "Deleted");
+ }
+
+ @Test
+ void migrateTest() throws PfModelException {
+ var intermediaryApi = mock(ParticipantIntermediaryApi.class);
+ var acElementListenerV2 = createAcElementListenerV2(intermediaryApi);
+ var compositionElement = new CompositionElementDto(UUID.randomUUID(), new ToscaConceptIdentifier(),
+ Map.of(), Map.of());
+ var instanceElement = new InstanceElementDto(UUID.randomUUID(), UUID.randomUUID(), null, Map.of(), Map.of());
+ acElementListenerV2.migrate(compositionElement, compositionElement, instanceElement, instanceElement);
+ verify(intermediaryApi).updateAutomationCompositionElementState(instanceElement.instanceId(),
+ instanceElement.elementId(), DeployState.DEPLOYED, null,
+ StateChangeResult.NO_ERROR, "Migrated");
+ }
+
+ private AcElementListenerV2 createAcElementListenerV2(ParticipantIntermediaryApi intermediaryApi) {
+ return new AcElementListenerV2(intermediaryApi) {
+ @Override
+ public void deploy(CompositionElementDto compositionElement, InstanceElementDto instanceElement)
+ throws PfModelException {
+ }
+
+ @Override
+ public void undeploy(CompositionElementDto compositionElement, InstanceElementDto instanceElement)
+ throws PfModelException {
+ }
+ };
+ }
+}
diff --git a/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/api/impl/AutomationCompositionElementListenerTest.java b/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/api/impl/AutomationCompositionElementListenerTest.java
index 93809ab96..b01065d09 100644
--- a/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/api/impl/AutomationCompositionElementListenerTest.java
+++ b/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/api/impl/AutomationCompositionElementListenerTest.java
@@ -1,6 +1,6 @@
/*-
* ============LICENSE_START=======================================================
- * Copyright (C) 2023 Nordix Foundation.
+ * Copyright (C) 2023-2024 Nordix Foundation.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -22,17 +22,24 @@ package org.onap.policy.clamp.acm.participant.intermediary.api.impl;
import static org.assertj.core.api.Assertions.assertThatCode;
+import java.util.Map;
import java.util.UUID;
import org.junit.jupiter.api.Test;
+import org.onap.policy.clamp.acm.participant.intermediary.api.CompositionElementDto;
+import org.onap.policy.clamp.acm.participant.intermediary.api.InstanceElementDto;
import org.onap.policy.clamp.acm.participant.intermediary.handler.DummyAcElementListener;
-import org.onap.policy.models.base.PfModelException;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
class AutomationCompositionElementListenerTest {
@Test
- void defaultTest() throws PfModelException {
+ void defaultTest() {
var listener = new DummyAcElementListener();
- assertThatCode(() -> listener.lock(UUID.randomUUID(), UUID.randomUUID())).doesNotThrowAnyException();
- assertThatCode(() -> listener.unlock(UUID.randomUUID(), UUID.randomUUID())).doesNotThrowAnyException();
+ var compositionElementDto = new CompositionElementDto(UUID.randomUUID(), new ToscaConceptIdentifier(),
+ Map.of(), Map.of());
+ var instanceElementDto = new InstanceElementDto(UUID.randomUUID(), UUID.randomUUID(), null,
+ Map.of(), Map.of());
+ assertThatCode(() -> listener.lock(compositionElementDto, instanceElementDto)).doesNotThrowAnyException();
+ assertThatCode(() -> listener.unlock(compositionElementDto, instanceElementDto)).doesNotThrowAnyException();
}
}
diff --git a/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/AutomationCompositionHandlerTest.java b/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/AutomationCompositionHandlerTest.java
index 6a00d8cf6..661c009f6 100644
--- a/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/AutomationCompositionHandlerTest.java
+++ b/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/AutomationCompositionHandlerTest.java
@@ -28,11 +28,13 @@ import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
+import org.onap.policy.clamp.acm.participant.intermediary.api.CompositionDto;
import org.onap.policy.clamp.acm.participant.intermediary.comm.ParticipantMessagePublisher;
import org.onap.policy.clamp.acm.participant.intermediary.main.parameters.CommonTestData;
import org.onap.policy.clamp.models.acm.concepts.AcElementDeploy;
@@ -48,6 +50,8 @@ import org.onap.policy.clamp.models.acm.messages.kafka.participant.AutomationCom
import org.onap.policy.clamp.models.acm.messages.kafka.participant.PropertiesUpdate;
import org.onap.policy.clamp.models.acm.messages.rest.instantiation.DeployOrder;
import org.onap.policy.clamp.models.acm.messages.rest.instantiation.LockOrder;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
import org.springframework.test.context.junit.jupiter.SpringExtension;
@ExtendWith(SpringExtension.class)
@@ -79,8 +83,6 @@ class AutomationCompositionHandlerTest {
@Test
void handleAutomationCompositionStateChangeUndeployTest() {
var automationComposition = CommonTestData.getTestAutomationCompositionMap().values().iterator().next();
- var automationCompositionStateChange = CommonTestData.getStateChange(CommonTestData.getParticipantId(),
- automationComposition.getInstanceId(), DeployOrder.UNDEPLOY, LockOrder.NONE);
var cacheProvider = mock(CacheProvider.class);
when(cacheProvider.getAutomationComposition(automationComposition.getInstanceId()))
.thenReturn(automationComposition);
@@ -89,6 +91,15 @@ class AutomationCompositionHandlerTest {
var participantMessagePublisher = mock(ParticipantMessagePublisher.class);
var listener = mock(ThreadHandler.class);
var ach = new AutomationCompositionHandler(cacheProvider, participantMessagePublisher, listener);
+ Map<ToscaConceptIdentifier, AutomationCompositionElementDefinition> map = new HashMap<>();
+ for (var element : automationComposition.getElements().values()) {
+ map.put(element.getDefinition(), new AutomationCompositionElementDefinition());
+ }
+ when(cacheProvider.getAcElementsDefinitions())
+ .thenReturn(Map.of(automationComposition.getCompositionId(), map));
+ var automationCompositionStateChange = CommonTestData.getStateChange(CommonTestData.getParticipantId(),
+ automationComposition.getInstanceId(), DeployOrder.UNDEPLOY, LockOrder.NONE);
+
ach.handleAutomationCompositionStateChange(automationCompositionStateChange);
verify(listener, times(automationComposition.getElements().size())).undeploy(any(), any(), any());
for (var element : automationComposition.getElements().values()) {
@@ -99,8 +110,6 @@ class AutomationCompositionHandlerTest {
@Test
void handleAutomationCompositionStateChangeLockTest() {
var automationComposition = CommonTestData.getTestAutomationCompositionMap().values().iterator().next();
- var automationCompositionStateChange = CommonTestData.getStateChange(CommonTestData.getParticipantId(),
- automationComposition.getInstanceId(), DeployOrder.NONE, LockOrder.LOCK);
var cacheProvider = mock(CacheProvider.class);
when(cacheProvider.getAutomationComposition(automationComposition.getInstanceId()))
.thenReturn(automationComposition);
@@ -109,6 +118,14 @@ class AutomationCompositionHandlerTest {
var participantMessagePublisher = mock(ParticipantMessagePublisher.class);
var listener = mock(ThreadHandler.class);
var ach = new AutomationCompositionHandler(cacheProvider, participantMessagePublisher, listener);
+ Map<ToscaConceptIdentifier, AutomationCompositionElementDefinition> map = new HashMap<>();
+ for (var element : automationComposition.getElements().values()) {
+ map.put(element.getDefinition(), new AutomationCompositionElementDefinition());
+ }
+ when(cacheProvider.getAcElementsDefinitions())
+ .thenReturn(Map.of(automationComposition.getCompositionId(), map));
+ var automationCompositionStateChange = CommonTestData.getStateChange(CommonTestData.getParticipantId(),
+ automationComposition.getInstanceId(), DeployOrder.NONE, LockOrder.LOCK);
ach.handleAutomationCompositionStateChange(automationCompositionStateChange);
verify(listener, times(automationComposition.getElements().size())).lock(any(), any(), any());
for (var element : automationComposition.getElements().values()) {
@@ -119,8 +136,6 @@ class AutomationCompositionHandlerTest {
@Test
void handleAutomationCompositionStateChangeUnlockTest() {
var automationComposition = CommonTestData.getTestAutomationCompositionMap().values().iterator().next();
- var automationCompositionStateChange = CommonTestData.getStateChange(CommonTestData.getParticipantId(),
- automationComposition.getInstanceId(), DeployOrder.NONE, LockOrder.UNLOCK);
var cacheProvider = mock(CacheProvider.class);
when(cacheProvider.getAutomationComposition(automationComposition.getInstanceId()))
.thenReturn(automationComposition);
@@ -129,6 +144,14 @@ class AutomationCompositionHandlerTest {
var participantMessagePublisher = mock(ParticipantMessagePublisher.class);
var listener = mock(ThreadHandler.class);
var ach = new AutomationCompositionHandler(cacheProvider, participantMessagePublisher, listener);
+ Map<ToscaConceptIdentifier, AutomationCompositionElementDefinition> map = new HashMap<>();
+ for (var element : automationComposition.getElements().values()) {
+ map.put(element.getDefinition(), new AutomationCompositionElementDefinition());
+ }
+ when(cacheProvider.getAcElementsDefinitions())
+ .thenReturn(Map.of(automationComposition.getCompositionId(), map));
+ var automationCompositionStateChange = CommonTestData.getStateChange(CommonTestData.getParticipantId(),
+ automationComposition.getInstanceId(), DeployOrder.NONE, LockOrder.UNLOCK);
ach.handleAutomationCompositionStateChange(automationCompositionStateChange);
verify(listener, times(automationComposition.getElements().size())).unlock(any(), any(), any());
for (var element : automationComposition.getElements().values()) {
@@ -139,8 +162,6 @@ class AutomationCompositionHandlerTest {
@Test
void handleAutomationCompositionStateChangeDeleteTest() {
var automationComposition = CommonTestData.getTestAutomationCompositionMap().values().iterator().next();
- var automationCompositionStateChange = CommonTestData.getStateChange(CommonTestData.getParticipantId(),
- automationComposition.getInstanceId(), DeployOrder.DELETE, LockOrder.NONE);
var cacheProvider = mock(CacheProvider.class);
when(cacheProvider.getAutomationComposition(automationComposition.getInstanceId()))
.thenReturn(automationComposition);
@@ -149,6 +170,14 @@ class AutomationCompositionHandlerTest {
var participantMessagePublisher = mock(ParticipantMessagePublisher.class);
var listener = mock(ThreadHandler.class);
var ach = new AutomationCompositionHandler(cacheProvider, participantMessagePublisher, listener);
+ Map<ToscaConceptIdentifier, AutomationCompositionElementDefinition> map = new HashMap<>();
+ for (var element : automationComposition.getElements().values()) {
+ map.put(element.getDefinition(), new AutomationCompositionElementDefinition());
+ }
+ when(cacheProvider.getAcElementsDefinitions())
+ .thenReturn(Map.of(automationComposition.getCompositionId(), map));
+ var automationCompositionStateChange = CommonTestData.getStateChange(CommonTestData.getParticipantId(),
+ automationComposition.getInstanceId(), DeployOrder.DELETE, LockOrder.NONE);
ach.handleAutomationCompositionStateChange(automationCompositionStateChange);
verify(listener, times(automationComposition.getElements().size())).delete(any(), any(), any());
for (var element : automationComposition.getElements().values()) {
@@ -181,6 +210,12 @@ class AutomationCompositionHandlerTest {
acElementDeploy.setId(automationComposition.getElements().values().iterator().next().getId());
participantDeploy.getAcElementList().add(acElementDeploy);
+ Map<ToscaConceptIdentifier, AutomationCompositionElementDefinition> map = new HashMap<>();
+ for (var element : automationComposition.getElements().values()) {
+ map.put(element.getDefinition(), new AutomationCompositionElementDefinition());
+ }
+ when(cacheProvider.getAcElementsDefinitions())
+ .thenReturn(Map.of(automationComposition.getCompositionId(), map));
ach.handleAcPropertyUpdate(updateMsg);
verify(listener).update(any(), any(), any(), any());
}
@@ -205,54 +240,76 @@ class AutomationCompositionHandlerTest {
deployMsg.setAutomationCompositionId(automationComposition.getInstanceId());
when(cacheProvider.getAutomationComposition(automationComposition.getInstanceId()))
.thenReturn(automationComposition);
+ Map<ToscaConceptIdentifier, AutomationCompositionElementDefinition> map = new HashMap<>();
for (var element : automationComposition.getElements().values()) {
var acElementDeploy = new AcElementDeploy();
acElementDeploy.setProperties(Map.of());
acElementDeploy.setId(element.getId());
participantDeploy.getAcElementList().add(acElementDeploy);
+ map.put(element.getDefinition(), new AutomationCompositionElementDefinition());
}
+ when(cacheProvider.getAcElementsDefinitions())
+ .thenReturn(Map.of(automationComposition.getCompositionId(), map));
+
ach.handleAutomationCompositionDeploy(deployMsg);
- verify(listener, times(automationComposition.getElements().size())).deploy(any(), any(), any(), any());
+ verify(listener, times(automationComposition.getElements().size())).deploy(any(), any(), any());
}
@Test
void handleComposiotPrimeTest() {
- var listener = mock(ThreadHandler.class);
- var ach = new AutomationCompositionHandler(mock(CacheProvider.class), mock(ParticipantMessagePublisher.class),
- listener);
+ var acElementDefinition = new AutomationCompositionElementDefinition();
+ acElementDefinition.setAcElementDefinitionId(new ToscaConceptIdentifier("key", "1.0.0"));
+ var toscaNodeTemplate = new ToscaNodeTemplate();
+ toscaNodeTemplate.setProperties(Map.of());
+ acElementDefinition.setAutomationCompositionElementToscaNodeTemplate(toscaNodeTemplate);
+ var list = List.of(acElementDefinition);
var compositionId = UUID.randomUUID();
- var list = List.of(new AutomationCompositionElementDefinition());
var messageId = UUID.randomUUID();
+ var listener = mock(ThreadHandler.class);
+ var ach = new AutomationCompositionHandler(mock(CacheProvider.class), mock(ParticipantMessagePublisher.class),
+ listener);
ach.prime(messageId, compositionId, list);
- verify(listener).prime(messageId, compositionId, list);
+ verify(listener).prime(any(UUID.class), any(CompositionDto.class));
}
@Test
void handleComposiotDeprimeTest() {
- var listener = mock(ThreadHandler.class);
- var ach = new AutomationCompositionHandler(mock(CacheProvider.class), mock(ParticipantMessagePublisher.class),
- listener);
+ var acElementDefinition = new AutomationCompositionElementDefinition();
+ acElementDefinition.setAcElementDefinitionId(new ToscaConceptIdentifier("key", "1.0.0"));
+ var toscaNodeTemplate = new ToscaNodeTemplate();
+ toscaNodeTemplate.setProperties(Map.of());
+ acElementDefinition.setAutomationCompositionElementToscaNodeTemplate(toscaNodeTemplate);
var compositionId = UUID.randomUUID();
+ var listener = mock(ThreadHandler.class);
+ var cacheProvider = mock(CacheProvider.class);
+ var ach = new AutomationCompositionHandler(cacheProvider, mock(ParticipantMessagePublisher.class),
+ listener);
+ when(cacheProvider.getAcElementsDefinitions())
+ .thenReturn(Map.of(compositionId, Map.of(new ToscaConceptIdentifier(), acElementDefinition)));
var messageId = UUID.randomUUID();
ach.deprime(messageId, compositionId);
- verify(listener).deprime(messageId, compositionId);
+ verify(listener).deprime(any(UUID.class), any(CompositionDto.class));
}
@Test
void restartedTest() {
+ var acElementDefinition = new AutomationCompositionElementDefinition();
+ acElementDefinition.setAcElementDefinitionId(new ToscaConceptIdentifier("key", "1.0.0"));
+ var toscaNodeTemplate = new ToscaNodeTemplate();
+ toscaNodeTemplate.setProperties(Map.of());
+ acElementDefinition.setAutomationCompositionElementToscaNodeTemplate(toscaNodeTemplate);
+ var list = List.of(acElementDefinition);
+ var state = AcTypeState.PRIMED;
+ var participantRestartAc = CommonTestData.createParticipantRestartAc();
+ var automationCompositionList = List.of(participantRestartAc);
var listener = mock(ThreadHandler.class);
var cacheProvider = mock(CacheProvider.class);
var ach = new AutomationCompositionHandler(cacheProvider, mock(ParticipantMessagePublisher.class), listener);
-
var compositionId = UUID.randomUUID();
var messageId = UUID.randomUUID();
- var list = List.of(new AutomationCompositionElementDefinition());
- var state = AcTypeState.PRIMED;
- var participantRestartAc = CommonTestData.createParticipantRestartAc();
- var automationCompositionList = List.of(participantRestartAc);
ach.restarted(messageId, compositionId, list, state, automationCompositionList);
verify(cacheProvider).initializeAutomationComposition(compositionId, participantRestartAc);
- verify(listener).restarted(messageId, compositionId, list, state, automationCompositionList);
+ verify(listener).restarted(any(), any(), any(), any());
}
@Test
@@ -272,12 +329,18 @@ class AutomationCompositionHandlerTest {
participantDeploy.setParticipantId(CommonTestData.getParticipantId());
when(cacheProvider.getParticipantId()).thenReturn(CommonTestData.getParticipantId());
migrationMsg.getParticipantUpdatesList().add(participantDeploy);
+ Map<ToscaConceptIdentifier, AutomationCompositionElementDefinition> map = new HashMap<>();
for (var element : automationComposition.getElements().values()) {
var acElementDeploy = new AcElementDeploy();
acElementDeploy.setProperties(Map.of());
acElementDeploy.setId(element.getId());
+ acElementDeploy.setDefinition(element.getDefinition());
participantDeploy.getAcElementList().add(acElementDeploy);
+ map.put(element.getDefinition(), new AutomationCompositionElementDefinition());
}
+ when(cacheProvider.getAcElementsDefinitions())
+ .thenReturn(Map.of(automationComposition.getCompositionId(), map,
+ migrationMsg.getCompositionTargetId(), map));
ach.handleAutomationCompositionMigration(migrationMsg);
verify(listener, times(automationComposition.getElements().size())).migrate(any(), any(), any(), any(), any());
diff --git a/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/CacheProviderTest.java b/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/CacheProviderTest.java
index 33bd93fb2..d5fe5785b 100644
--- a/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/CacheProviderTest.java
+++ b/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/CacheProviderTest.java
@@ -28,6 +28,7 @@ import java.util.Map;
import java.util.UUID;
import org.junit.jupiter.api.Test;
import org.onap.policy.clamp.acm.participant.intermediary.main.parameters.CommonTestData;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
class CacheProviderTest {
@@ -59,9 +60,10 @@ class CacheProviderTest {
assertThatThrownBy(() -> cacheProvider.getAutomationComposition(null)).isInstanceOf(NullPointerException.class);
- assertThatThrownBy(() -> cacheProvider.getCommonProperties(null, null))
+ var definition = new ToscaConceptIdentifier();
+ assertThatThrownBy(() -> cacheProvider.getCommonProperties(null, definition))
.isInstanceOf(NullPointerException.class);
- assertThatThrownBy(() -> cacheProvider.getCommonProperties(instanceId, null))
+ assertThatThrownBy(() -> cacheProvider.getCommonProperties(instanceId, (UUID) null))
.isInstanceOf(NullPointerException.class);
assertThatThrownBy(() -> cacheProvider.removeAutomationComposition(null))
diff --git a/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/DummyAcElementListener.java b/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/DummyAcElementListener.java
index e7b4b676d..24935c1c9 100644
--- a/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/DummyAcElementListener.java
+++ b/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/DummyAcElementListener.java
@@ -1,6 +1,6 @@
/*-
* ============LICENSE_START=======================================================
- * Copyright (C) 2023 Nordix Foundation.
+ * Copyright (C) 2023-2024 Nordix Foundation.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -20,68 +20,71 @@
package org.onap.policy.clamp.acm.participant.intermediary.handler;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
import org.onap.policy.clamp.acm.participant.intermediary.api.AutomationCompositionElementListener;
-import org.onap.policy.clamp.models.acm.concepts.AcElementDeploy;
+import org.onap.policy.clamp.acm.participant.intermediary.api.CompositionDto;
+import org.onap.policy.clamp.acm.participant.intermediary.api.CompositionElementDto;
+import org.onap.policy.clamp.acm.participant.intermediary.api.InstanceElementDto;
import org.onap.policy.clamp.models.acm.concepts.AcTypeState;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElementDefinition;
import org.onap.policy.clamp.models.acm.concepts.DeployState;
import org.onap.policy.clamp.models.acm.concepts.LockState;
import org.onap.policy.models.base.PfModelException;
public class DummyAcElementListener implements AutomationCompositionElementListener {
@Override
- public void undeploy(UUID automationCompositionId, UUID automationCompositionElementId) throws PfModelException {
+ public void deploy(CompositionElementDto compositionElement, InstanceElementDto instanceElement)
+ throws PfModelException {
}
@Override
- public void deploy(UUID automationCompositionId, AcElementDeploy element, Map<String, Object> properties)
- throws PfModelException {
+ public void undeploy(CompositionElementDto compositionElement, InstanceElementDto instanceElement)
+ throws PfModelException {
}
@Override
- public void lock(UUID automationCompositionId, UUID automationCompositionElementId) throws PfModelException {
+ public void lock(CompositionElementDto compositionElement, InstanceElementDto instanceElement)
+ throws PfModelException {
+
}
@Override
- public void unlock(UUID automationCompositionId, UUID automationCompositionElementId) throws PfModelException {
+ public void unlock(CompositionElementDto compositionElement, InstanceElementDto instanceElement)
+ throws PfModelException {
+
}
@Override
- public void delete(UUID automationCompositionId, UUID automationCompositionElementId) throws PfModelException {
+ public void delete(CompositionElementDto compositionElement, InstanceElementDto instanceElement)
+ throws PfModelException {
}
@Override
- public void update(UUID automationCompositionId, AcElementDeploy element, Map<String, Object> properties)
+ public void update(CompositionElementDto compositionElement, InstanceElementDto instanceElement,
+ InstanceElementDto instanceElementUpdated)
throws PfModelException {
}
@Override
- public void prime(UUID compositionId, List<AutomationCompositionElementDefinition> elementDefinitionList)
- throws PfModelException {
+ public void prime(CompositionDto composition) throws PfModelException {
}
@Override
- public void deprime(UUID compositionId) throws PfModelException {
+ public void deprime(CompositionDto composition) throws PfModelException {
}
@Override
- public void handleRestartComposition(UUID compositionId,
- List<AutomationCompositionElementDefinition> elementDefinitionList, AcTypeState state)
- throws PfModelException {
+ public void handleRestartComposition(CompositionDto composition, AcTypeState state) throws PfModelException {
}
@Override
- public void handleRestartInstance(UUID automationCompositionId, AcElementDeploy element,
- Map<String, Object> properties, DeployState deployState, LockState lockState) throws PfModelException {
+ public void handleRestartInstance(CompositionElementDto compositionElement, InstanceElementDto instanceElement,
+ DeployState deployState, LockState lockState) throws PfModelException {
}
@Override
- public void migrate(UUID instanceId, AcElementDeploy element, UUID compositionTargetId,
- Map<String, Object> properties) throws PfModelException {
+ public void migrate(CompositionElementDto compositionElement, CompositionElementDto compositionElementTarget,
+ InstanceElementDto instanceElement, InstanceElementDto instanceElementMigrate)
+ throws PfModelException {
}
}
diff --git a/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/ParticipantHandlerTest.java b/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/ParticipantHandlerTest.java
index 8be19f749..4b58ae177 100644
--- a/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/ParticipantHandlerTest.java
+++ b/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/ParticipantHandlerTest.java
@@ -34,6 +34,7 @@ import org.junit.jupiter.api.Test;
import org.onap.policy.clamp.acm.participant.intermediary.comm.ParticipantMessagePublisher;
import org.onap.policy.clamp.acm.participant.intermediary.main.parameters.CommonTestData;
import org.onap.policy.clamp.models.acm.concepts.AcTypeState;
+import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElementDefinition;
import org.onap.policy.clamp.models.acm.concepts.ParticipantDefinition;
import org.onap.policy.clamp.models.acm.concepts.ParticipantSupportedElementType;
import org.onap.policy.clamp.models.acm.messages.kafka.participant.AutomationCompositionDeploy;
@@ -234,6 +235,7 @@ class ParticipantHandlerTest {
private ParticipantDefinition createParticipantDefinition() {
var def = new ParticipantDefinition();
def.setParticipantId(CommonTestData.getParticipantId());
+ def.setAutomationCompositionElementDefinitionList(List.of(new AutomationCompositionElementDefinition()));
return def;
}
}
diff --git a/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/ThreadHandlerTest.java b/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/ThreadHandlerTest.java
index 2ac3c8df2..e4c34845e 100644
--- a/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/ThreadHandlerTest.java
+++ b/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/ThreadHandlerTest.java
@@ -1,6 +1,6 @@
/*-
* ============LICENSE_START=======================================================
- * Copyright (C) 2023 Nordix Foundation.
+ * Copyright (C) 2023-2024 Nordix Foundation.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -34,16 +34,19 @@ import java.util.Map;
import java.util.UUID;
import org.junit.jupiter.api.Test;
import org.onap.policy.clamp.acm.participant.intermediary.api.AutomationCompositionElementListener;
+import org.onap.policy.clamp.acm.participant.intermediary.api.CompositionDto;
+import org.onap.policy.clamp.acm.participant.intermediary.api.CompositionElementDto;
+import org.onap.policy.clamp.acm.participant.intermediary.api.InstanceElementDto;
import org.onap.policy.clamp.acm.participant.intermediary.api.ParticipantIntermediaryApi;
import org.onap.policy.clamp.models.acm.concepts.AcElementDeploy;
import org.onap.policy.clamp.models.acm.concepts.AcElementRestart;
import org.onap.policy.clamp.models.acm.concepts.AcTypeState;
-import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElementDefinition;
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.ParticipantRestartAc;
import org.onap.policy.clamp.models.acm.concepts.StateChangeResult;
import org.onap.policy.models.base.PfModelException;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
class ThreadHandlerTest {
@@ -56,48 +59,57 @@ class ThreadHandlerTest {
try (var threadHandler = new ThreadHandler(listener, intermediaryApi, mock(CacheProvider.class))) {
var compositionId = UUID.randomUUID();
- var list = List.of(new AutomationCompositionElementDefinition());
var messageId = UUID.randomUUID();
- threadHandler.prime(messageId, compositionId, list);
- verify(listener, timeout(TIMEOUT)).prime(compositionId, list);
+ var composition = new CompositionDto(compositionId, Map.of(), Map.of());
+ threadHandler.prime(messageId, composition);
+ verify(listener, timeout(TIMEOUT)).prime(composition);
clearInvocations(listener);
- var element = new AcElementDeploy();
- var elementId = UUID.randomUUID();
- element.setId(elementId);
Map<String, Object> properties = Map.of("key", "value");
- var instanceId = UUID.randomUUID();
- threadHandler.deploy(messageId, instanceId, element, properties);
- verify(listener, timeout(TIMEOUT)).deploy(instanceId, element, properties);
+ var compositionElement = new CompositionElementDto(UUID.randomUUID(), new ToscaConceptIdentifier(),
+ properties, properties);
+ var instanceElement = new InstanceElementDto(UUID.randomUUID(), UUID.randomUUID(),
+ null, properties, properties);
+ threadHandler.deploy(messageId, compositionElement, instanceElement);
+ verify(listener, timeout(TIMEOUT)).deploy(compositionElement, instanceElement);
clearInvocations(listener);
- threadHandler.update(messageId, instanceId, element, properties);
- verify(listener, timeout(TIMEOUT)).update(instanceId, element, properties);
+ var element = new AcElementDeploy();
+ var elementId = UUID.randomUUID();
+ element.setId(elementId);
+ var instanceElementUpdated = new InstanceElementDto(instanceElement.instanceId(),
+ instanceElement.elementId(), null, properties, properties);
+ threadHandler.update(messageId, compositionElement, instanceElement, instanceElementUpdated);
+ verify(listener, timeout(TIMEOUT)).update(compositionElement, instanceElement, instanceElementUpdated);
clearInvocations(listener);
var compositionTargetId = UUID.randomUUID();
- threadHandler.migrate(messageId, instanceId, element, compositionTargetId, properties);
- verify(listener, timeout(TIMEOUT)).migrate(instanceId, element, compositionTargetId, properties);
+ var compositionElementTarget = new CompositionElementDto(compositionTargetId, new ToscaConceptIdentifier(),
+ properties, properties);
+ threadHandler.migrate(messageId, compositionElement, compositionElementTarget,
+ instanceElement, instanceElementUpdated);
+ verify(listener, timeout(TIMEOUT)).migrate(compositionElement, compositionElementTarget,
+ instanceElement, instanceElementUpdated);
clearInvocations(listener);
- threadHandler.lock(messageId, instanceId, elementId);
- verify(listener, timeout(TIMEOUT)).lock(instanceId, elementId);
+ threadHandler.lock(messageId, compositionElement, instanceElement);
+ verify(listener, timeout(TIMEOUT)).lock(compositionElement, instanceElement);
clearInvocations(listener);
- threadHandler.unlock(messageId, instanceId, elementId);
- verify(listener, timeout(TIMEOUT)).unlock(instanceId, elementId);
+ threadHandler.unlock(messageId, compositionElement, instanceElement);
+ verify(listener, timeout(TIMEOUT)).unlock(compositionElement, instanceElement);
clearInvocations(listener);
- threadHandler.undeploy(messageId, instanceId, elementId);
- verify(listener, timeout(TIMEOUT)).undeploy(instanceId, elementId);
+ threadHandler.undeploy(messageId, compositionElement, instanceElement);
+ verify(listener, timeout(TIMEOUT)).undeploy(compositionElement, instanceElement);
clearInvocations(listener);
- threadHandler.delete(messageId, instanceId, elementId);
- verify(listener, timeout(TIMEOUT)).delete(instanceId, elementId);
+ threadHandler.delete(messageId, compositionElement, instanceElement);
+ verify(listener, timeout(TIMEOUT)).delete(compositionElement, instanceElement);
clearInvocations(listener);
- threadHandler.deprime(messageId, compositionId);
- verify(listener, timeout(TIMEOUT)).deprime(compositionId);
+ threadHandler.deprime(messageId, composition);
+ verify(listener, timeout(TIMEOUT)).deprime(composition);
}
}
@@ -108,75 +120,80 @@ class ThreadHandlerTest {
try (var threadHandler = new ThreadHandler(listener, intermediaryApi, mock(CacheProvider.class))) {
var compositionId = UUID.randomUUID();
- var list = List.of(new AutomationCompositionElementDefinition());
- doThrow(new PfModelException(Status.INTERNAL_SERVER_ERROR, "Error")).when(listener).prime(compositionId,
- list);
+ var composition = new CompositionDto(compositionId, Map.of(), Map.of());
+ doThrow(new PfModelException(Status.INTERNAL_SERVER_ERROR, "Error")).when(listener)
+ .prime(composition);
var messageId = UUID.randomUUID();
- threadHandler.prime(messageId, compositionId, list);
+ threadHandler.prime(messageId, composition);
verify(intermediaryApi, timeout(TIMEOUT)).updateCompositionState(compositionId, AcTypeState.COMMISSIONED,
StateChangeResult.FAILED, "Composition Defintion prime failed");
clearInvocations(intermediaryApi);
- var element = new AcElementDeploy();
- var elementId = UUID.randomUUID();
- element.setId(elementId);
Map<String, Object> properties = Map.of("key", "value");
+ var compositionElement = new CompositionElementDto(UUID.randomUUID(), new ToscaConceptIdentifier(),
+ properties, properties);
var instanceId = UUID.randomUUID();
- doThrow(new PfModelException(Status.INTERNAL_SERVER_ERROR, "Error")).when(listener).deploy(instanceId,
- element, properties);
- threadHandler.deploy(messageId, instanceId, element, properties);
+ var elementId = UUID.randomUUID();
+ var instanceElement = new InstanceElementDto(instanceId, elementId, null, properties, properties);
+ var element = new AcElementDeploy();
+ element.setId(elementId);
+ doThrow(new PfModelException(Status.INTERNAL_SERVER_ERROR, "Error")).when(listener)
+ .deploy(compositionElement, instanceElement);
+ threadHandler.deploy(messageId, compositionElement, instanceElement);
verify(intermediaryApi, timeout(TIMEOUT)).updateAutomationCompositionElementState(instanceId, elementId,
DeployState.UNDEPLOYED, null, StateChangeResult.FAILED,
"Automation composition element deploy failed");
clearInvocations(listener);
- doThrow(new PfModelException(Status.INTERNAL_SERVER_ERROR, "Error")).when(listener).update(instanceId,
- element, properties);
- threadHandler.update(messageId, instanceId, element, properties);
+ var instanceElementUpdated = new InstanceElementDto(instanceElement.instanceId(),
+ instanceElement.elementId(), null, properties, properties);
+ doThrow(new PfModelException(Status.INTERNAL_SERVER_ERROR, "Error")).when(listener)
+ .update(compositionElement, instanceElement, instanceElementUpdated);
+ threadHandler.update(messageId, compositionElement, instanceElement, instanceElementUpdated);
verify(intermediaryApi, timeout(TIMEOUT)).updateAutomationCompositionElementState(instanceId, elementId,
DeployState.DEPLOYED, null, StateChangeResult.FAILED,
"Automation composition element update failed");
clearInvocations(listener);
- doThrow(new PfModelException(Status.INTERNAL_SERVER_ERROR, "Error")).when(listener).lock(instanceId,
- elementId);
- threadHandler.lock(messageId, instanceId, elementId);
+ doThrow(new PfModelException(Status.INTERNAL_SERVER_ERROR, "Error")).when(listener)
+ .lock(compositionElement, instanceElement);
+ threadHandler.lock(messageId, compositionElement, instanceElement);
verify(intermediaryApi, timeout(TIMEOUT)).updateAutomationCompositionElementState(instanceId, elementId,
null, LockState.UNLOCKED, StateChangeResult.FAILED, "Automation composition element lock failed");
clearInvocations(listener);
- doThrow(new PfModelException(Status.INTERNAL_SERVER_ERROR, "Error")).when(listener).unlock(instanceId,
- elementId);
- threadHandler.unlock(messageId, instanceId, elementId);
+ doThrow(new PfModelException(Status.INTERNAL_SERVER_ERROR, "Error")).when(listener)
+ .unlock(compositionElement, instanceElement);
+ threadHandler.unlock(messageId, compositionElement, instanceElement);
verify(intermediaryApi, timeout(TIMEOUT)).updateAutomationCompositionElementState(instanceId, elementId,
null, LockState.LOCKED, StateChangeResult.FAILED, "Automation composition element unlock failed");
clearInvocations(listener);
- doThrow(new PfModelException(Status.INTERNAL_SERVER_ERROR, "Error")).when(listener).undeploy(instanceId,
- elementId);
- threadHandler.undeploy(messageId, instanceId, elementId);
+ doThrow(new PfModelException(Status.INTERNAL_SERVER_ERROR, "Error")).when(listener)
+ .undeploy(compositionElement, instanceElement);
+ threadHandler.undeploy(messageId, compositionElement, instanceElement);
verify(intermediaryApi, timeout(TIMEOUT)).updateAutomationCompositionElementState(instanceId, elementId,
DeployState.DEPLOYED, null, StateChangeResult.FAILED,
"Automation composition element undeploy failed");
clearInvocations(listener);
- doThrow(new PfModelException(Status.INTERNAL_SERVER_ERROR, "Error")).when(listener).delete(instanceId,
- elementId);
- threadHandler.delete(messageId, instanceId, elementId);
+ doThrow(new PfModelException(Status.INTERNAL_SERVER_ERROR, "Error")).when(listener)
+ .delete(compositionElement, instanceElement);
+ threadHandler.delete(messageId, compositionElement, instanceElement);
verify(intermediaryApi, timeout(TIMEOUT)).updateAutomationCompositionElementState(instanceId, elementId,
DeployState.UNDEPLOYED, null, StateChangeResult.FAILED,
"Automation composition element delete failed");
clearInvocations(listener);
- doThrow(new PfModelException(Status.INTERNAL_SERVER_ERROR, "Error")).when(listener).deprime(compositionId);
- threadHandler.deprime(messageId, compositionId);
+ doThrow(new PfModelException(Status.INTERNAL_SERVER_ERROR, "Error")).when(listener).deprime(composition);
+ threadHandler.deprime(messageId, composition);
verify(intermediaryApi, timeout(TIMEOUT)).updateCompositionState(compositionId, AcTypeState.PRIMED,
StateChangeResult.FAILED, "Composition Defintion deprime failed");
clearInvocations(listener);
doThrow(new PfModelException(Status.INTERNAL_SERVER_ERROR, "Error")).when(listener)
- .handleRestartComposition(compositionId, List.of(), AcTypeState.PRIMING);
- threadHandler.restarted(messageId, compositionId, List.of(), AcTypeState.PRIMING, List.of());
+ .handleRestartComposition(composition, AcTypeState.PRIMING);
+ threadHandler.restarted(messageId, composition, AcTypeState.PRIMING, List.of());
verify(intermediaryApi).updateCompositionState(compositionId, AcTypeState.PRIMED, StateChangeResult.FAILED,
"Composition Defintion deprime failed");
}
@@ -193,9 +210,9 @@ class ThreadHandlerTest {
var participantRestartAc = new ParticipantRestartAc();
participantRestartAc.setAutomationCompositionId(UUID.randomUUID());
participantRestartAc.getAcElementList().add(new AcElementRestart());
- threadHandler.restarted(messageId, compositionId, List.of(new AutomationCompositionElementDefinition()),
- AcTypeState.PRIMED, List.of(participantRestartAc));
- verify(listener, timeout(TIMEOUT)).handleRestartInstance(any(), any(), any(), any(), any());
+ var composition = new CompositionDto(compositionId, Map.of(), Map.of());
+ threadHandler.restarted(messageId, composition, AcTypeState.PRIMED, List.of(participantRestartAc));
+ verify(listener, timeout(TIMEOUT)).handleRestartInstance(any(), any(), any(), any());
}
}
}