From aea5fd0812915d824887c9c304253859853d568b Mon Sep 17 00:00:00 2001 From: FrancescoFioraEst Date: Thu, 28 Sep 2023 14:52:56 +0100 Subject: Add migration support in ACM participant simulator Issue-ID: POLICY-4826 Change-Id: Idf492cc8941ce6b2800d1ea88789cca103a33b2c Signed-off-by: FrancescoFioraEst --- .../participant-impl-simulator/pom.xml | 1 + .../AutomationCompositionElementHandler.java | 24 ++++++++-- .../clamp/acm/participant/sim/model/SimConfig.java | 4 ++ .../participant/sim/rest/SimulatorController.java | 7 +++ .../src/main/resources/openapi/openapi.yaml | 51 ++++++++++++++++++++++ .../AutomationCompositionElementHandlerTest.java | 33 +++++++++++++- 6 files changed, 116 insertions(+), 4 deletions(-) mode change 100644 => 100755 participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/acm/participant/sim/model/SimConfig.java diff --git a/participant/participant-impl/participant-impl-simulator/pom.xml b/participant/participant-impl/participant-impl-simulator/pom.xml index 13b8ec302..912c1a7b3 100755 --- a/participant/participant-impl/participant-impl-simulator/pom.xml +++ b/participant/participant-impl/participant-impl-simulator/pom.xml @@ -51,6 +51,7 @@ false AutomationCompositions=org.onap.policy.clamp.models.acm.concepts.AutomationCompositions, + AutomationComposition=org.onap.policy.clamp.models.acm.concepts.AutomationComposition, InternalDatas=org.onap.policy.clamp.acm.participant.sim.model.InternalDatas, InternalData=org.onap.policy.clamp.acm.participant.sim.model.InternalData, SimConfig=org.onap.policy.clamp.acm.participant.sim.model.SimConfig diff --git a/participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/acm/participant/sim/main/handler/AutomationCompositionElementHandler.java b/participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/acm/participant/sim/main/handler/AutomationCompositionElementHandler.java index a1564b2f7..7409c1137 100755 --- a/participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/acm/participant/sim/main/handler/AutomationCompositionElementHandler.java +++ b/participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/acm/participant/sim/main/handler/AutomationCompositionElementHandler.java @@ -35,6 +35,7 @@ import org.onap.policy.clamp.acm.participant.sim.model.InternalDatas; import org.onap.policy.clamp.acm.participant.sim.model.SimConfig; 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.AutomationComposition; import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElementDefinition; import org.onap.policy.clamp.models.acm.concepts.AutomationCompositions; import org.onap.policy.clamp.models.acm.concepts.DeployState; @@ -217,6 +218,10 @@ public class AutomationCompositionElementHandler implements AutomationCompositio return result; } + public AutomationComposition getAutomationComposition(UUID instanceId) { + return intermediaryApi.getAutomationComposition(instanceId); + } + /** * Set OutProperties. * @@ -280,6 +285,7 @@ public class AutomationCompositionElementHandler implements AutomationCompositio for (var instance : map.values()) { for (var element : instance.getElements().values()) { var data = new InternalData(); + data.setCompositionId(instance.getCompositionId()); data.setAutomationCompositionId(instance.getInstanceId()); data.setAutomationCompositionElementId(element.getId()); data.setIntProperties(element.getProperties()); @@ -375,8 +381,20 @@ public class AutomationCompositionElementHandler implements AutomationCompositio @Override public void migrate(UUID automationCompositionId, AcElementDeploy element, UUID compositionTargetId, - Map properties) throws PfModelException { - intermediaryApi.updateAutomationCompositionElementState(automationCompositionId, element.getId(), - DeployState.DEPLOYED, null, StateChangeResult.NO_ERROR, "Migrated"); + Map properties) throws PfModelException { + LOGGER.debug("migrate call"); + + if (!execution(config.getMigrateTimerMs(), "Current Thread migrate is Interrupted during execution {}", + element.getId())) { + return; + } + + if (config.isMigrateSuccess()) { + intermediaryApi.updateAutomationCompositionElementState(automationCompositionId, element.getId(), + DeployState.DEPLOYED, null, StateChangeResult.NO_ERROR, "Migrated"); + } else { + intermediaryApi.updateAutomationCompositionElementState(automationCompositionId, element.getId(), + DeployState.DEPLOYED, null, StateChangeResult.FAILED, "Migrate failed!"); + } } } diff --git a/participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/acm/participant/sim/model/SimConfig.java b/participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/acm/participant/sim/model/SimConfig.java old mode 100644 new mode 100755 index cf216c1e8..f4d4c6e2e --- a/participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/acm/participant/sim/model/SimConfig.java +++ b/participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/acm/participant/sim/model/SimConfig.java @@ -36,6 +36,8 @@ public class SimConfig { private boolean updateSuccess = true; + private boolean migrateSuccess = true; + private boolean primeSuccess = true; private boolean deprimeSuccess = true; @@ -50,6 +52,8 @@ public class SimConfig { private int updateTimerMs = 100; + private int migrateTimerMs = 100; + private int deleteTimerMs = 100; private int primeTimerMs = 100; diff --git a/participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/acm/participant/sim/rest/SimulatorController.java b/participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/acm/participant/sim/rest/SimulatorController.java index 445a2a111..cf4ac8eb7 100755 --- a/participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/acm/participant/sim/rest/SimulatorController.java +++ b/participant/participant-impl/participant-impl-simulator/src/main/java/org/onap/policy/clamp/acm/participant/sim/rest/SimulatorController.java @@ -29,6 +29,7 @@ import org.onap.policy.clamp.acm.participant.sim.main.handler.AutomationComposit import org.onap.policy.clamp.acm.participant.sim.model.InternalData; import org.onap.policy.clamp.acm.participant.sim.model.InternalDatas; import org.onap.policy.clamp.acm.participant.sim.model.SimConfig; +import org.onap.policy.clamp.models.acm.concepts.AutomationComposition; import org.onap.policy.clamp.models.acm.concepts.AutomationCompositions; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -59,6 +60,12 @@ public class SimulatorController implements SimulatorParticipantControllerApi { return new ResponseEntity<>(automationCompositionElementHandler.getAutomationCompositions(), HttpStatus.OK); } + @Override + public ResponseEntity getAutomationComposition(UUID instanceId, UUID xonapRequestId) { + return new ResponseEntity<>(automationCompositionElementHandler.getAutomationComposition(instanceId), + HttpStatus.OK); + } + @Override public ResponseEntity getDatas(UUID xonapRequestId) { return new ResponseEntity<>(automationCompositionElementHandler.getDataList(), HttpStatus.OK); diff --git a/participant/participant-impl/participant-impl-simulator/src/main/resources/openapi/openapi.yaml b/participant/participant-impl/participant-impl-simulator/src/main/resources/openapi/openapi.yaml index c3b02e412..197e3cbca 100755 --- a/participant/participant-impl/participant-impl-simulator/src/main/resources/openapi/openapi.yaml +++ b/participant/participant-impl/participant-impl-simulator/src/main/resources/openapi/openapi.yaml @@ -170,6 +170,54 @@ paths: description: Internal Server Error security: - basicAuth: [] + /instances/{instanceId}: + get: + tags: + - Simulator-participant-controller + summary: Get automation composition instance details. + description: Get details of the requested automation composition instance. + operationId: getAutomationComposition + parameters: + - name : instanceId + in: path + description: The UUID of the automation composition instance to get + required: true + schema: + type: string + format: uuid + - name: X-onap-RequestId + in: header + description: RequestID for http transaction + schema: + type: string + format: uuid + responses: + 200: + description: Serialised instance of + [AutomationComposition](https://github.com/onap/policy-clamp/blob/master/models/src/main/java/org/onap/policy/clamp/models/acm/concepts/AutomationComposition.java) + containing the automation composition instance + headers: + X-LatestVersion: + $ref: '#/components/headers/X-LatestVersion' + X-PatchVersion: + $ref: '#/components/headers/X-PatchVersion' + X-MinorVersion: + $ref: '#/components/headers/X-MinorVersion' + X-onap-RequestId: + $ref: '#/components/headers/X-onap-RequestId' + content: + application/json: + schema: + $ref: '#/components/schemas/AutomationComposition' + application/yaml: + schema: + $ref: '#/components/schemas/AutomationComposition' + 401: + description: Authorization Error + 500: + description: Internal Server Error + security: + - basicAuth: [] /datas: get: tags: @@ -353,6 +401,9 @@ components: AutomationCompositions: title: AutomationCompositions type: object + AutomationComposition: + title: AutomationComposition + type: object InternalDatas: title: InternalDatas type: object diff --git a/participant/participant-impl/participant-impl-simulator/src/test/java/org/onap/policy/clamp/acm/participant/sim/main/handler/AutomationCompositionElementHandlerTest.java b/participant/participant-impl/participant-impl-simulator/src/test/java/org/onap/policy/clamp/acm/participant/sim/main/handler/AutomationCompositionElementHandlerTest.java index ed3f0745b..d7c9e17ad 100755 --- a/participant/participant-impl/participant-impl-simulator/src/test/java/org/onap/policy/clamp/acm/participant/sim/main/handler/AutomationCompositionElementHandlerTest.java +++ b/participant/participant-impl/participant-impl-simulator/src/test/java/org/onap/policy/clamp/acm/participant/sim/main/handler/AutomationCompositionElementHandlerTest.java @@ -162,7 +162,7 @@ class AutomationCompositionElementHandlerTest { } @Test - void testgetAutomationComposition() throws PfModelException { + void testgetAutomationCompositions() throws PfModelException { var intermediaryApi = mock(ParticipantIntermediaryApi.class); var acElementHandler = new AutomationCompositionElementHandler(intermediaryApi); @@ -172,6 +172,17 @@ class AutomationCompositionElementHandlerTest { assertEquals(map.values().iterator().next(), result.getAutomationCompositionList().get(0)); } + @Test + void testgetAutomationComposition() throws PfModelException { + var intermediaryApi = mock(ParticipantIntermediaryApi.class); + var acElementHandler = new AutomationCompositionElementHandler(intermediaryApi); + + var instance = CommonTestData.getTestAutomationCompositionMap().values().iterator().next(); + when(intermediaryApi.getAutomationComposition(instance.getInstanceId())).thenReturn(instance); + var result = acElementHandler.getAutomationComposition(instance.getInstanceId()); + assertEquals(instance, result); + } + @Test void testsetOutProperties() { var intermediaryApi = mock(ParticipantIntermediaryApi.class); @@ -334,4 +345,24 @@ class AutomationCompositionElementHandlerTest { acElementHandler.setCompositionOutProperties(compositionId, null, Map.of()); verify(intermediaryApi).sendAcDefinitionInfo(compositionId, null, Map.of()); } + + @Test + void testMigrate() throws PfModelException { + var config = new SimConfig(); + config.setUpdateTimerMs(1); + var intermediaryApi = mock(ParticipantIntermediaryApi.class); + var acElementHandler = new AutomationCompositionElementHandler(intermediaryApi); + acElementHandler.setConfig(config); + var instanceId = UUID.randomUUID(); + var element = new AcElementDeploy(); + element.setId(UUID.randomUUID()); + acElementHandler.migrate(instanceId, element, UUID.randomUUID(), Map.of()); + verify(intermediaryApi).updateAutomationCompositionElementState(instanceId, element.getId(), + DeployState.DEPLOYED, null, StateChangeResult.NO_ERROR, "Migrated"); + + config.setMigrateSuccess(false); + acElementHandler.migrate(instanceId, element, UUID.randomUUID(), Map.of()); + verify(intermediaryApi).updateAutomationCompositionElementState(instanceId, element.getId(), + DeployState.DEPLOYED, null, StateChangeResult.FAILED, "Migrate failed!"); + } } -- cgit 1.2.3-korg