diff options
author | 2024-03-20 16:17:46 +0000 | |
---|---|---|
committer | 2024-08-06 10:33:25 +0000 | |
commit | a2477d552ad3993989a4f8b7a7adac6686719cf3 (patch) | |
tree | a7acc256cd3967e85ea091bd3646272def3d3d3d /participant/participant-intermediary/src/test/java | |
parent | e1589aa82ddfb58b0d4bcabe1c63cdda29939e6a (diff) |
Allow migration to be performed in stages in ACM intermediary
Allow migration to be performed in stages,
and replace newElement and removedElement with an Enum
in CompositionElementDto and InstanceElementDto.
Issue-ID: POLICY-5091
Change-Id: I2d66abc453776fd708fc18fd9019ca248f8d2eee
Signed-off-by: FrancescoFioraEst <francesco.fiora@est.tech>
Diffstat (limited to 'participant/participant-intermediary/src/test/java')
5 files changed, 159 insertions, 73 deletions
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 index be8275ca6..a6cb7b005 100644 --- 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 @@ -134,7 +134,7 @@ class AcElementListenerV2Test { 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); + acElementListenerV2.migrate(compositionElement, compositionElement, instanceElement, instanceElement, 0); verify(intermediaryApi).updateAutomationCompositionElementState(instanceElement.instanceId(), instanceElement.elementId(), DeployState.DEPLOYED, null, StateChangeResult.NO_ERROR, "Migrated"); diff --git a/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/AcSubStateHandlerTest.java b/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/AcSubStateHandlerTest.java index 293a4415b..8fad1d22b 100644 --- a/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/AcSubStateHandlerTest.java +++ b/participant/participant-intermediary/src/test/java/org/onap/policy/clamp/acm/participant/intermediary/handler/AcSubStateHandlerTest.java @@ -28,11 +28,13 @@ 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.onap.policy.clamp.acm.participant.intermediary.main.parameters.CommonTestData; import org.onap.policy.clamp.models.acm.concepts.AcElementDeploy; +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.ParticipantDeploy; import org.onap.policy.clamp.models.acm.messages.kafka.participant.AutomationCompositionMigration; @@ -64,37 +66,70 @@ class AcSubStateHandlerTest { @Test void handleAcMigrationPrecheckTest() { - var listener = mock(ThreadHandler.class); - var cacheProvider = mock(CacheProvider.class); - var ach = new AcSubStateHandler(cacheProvider, listener); + var automationComposition = CommonTestData.getTestAutomationCompositionMap().values().iterator().next(); + automationComposition.setCompositionId(UUID.randomUUID()); + automationComposition.setInstanceId(UUID.randomUUID()); + automationComposition.setCompositionTargetId(UUID.randomUUID()); + var cacheProvider = new CacheProvider(CommonTestData.getParticipantParameters()); + var definitions = + CommonTestData.createAutomationCompositionElementDefinitionList(automationComposition); + cacheProvider.addElementDefinition(automationComposition.getCompositionId(), definitions); + cacheProvider.addElementDefinition(automationComposition.getCompositionTargetId(), definitions); + var participantDeploy = + CommonTestData.createparticipantDeploy(cacheProvider.getParticipantId(), automationComposition); + cacheProvider.initializeAutomationComposition(automationComposition.getCompositionId(), + automationComposition.getInstanceId(), participantDeploy); var migrationMsg = new AutomationCompositionMigration(); + migrationMsg.setStage(0); + migrationMsg.setCompositionId(automationComposition.getCompositionId()); + migrationMsg.setAutomationCompositionId(automationComposition.getInstanceId()); + migrationMsg.setCompositionTargetId(automationComposition.getCompositionTargetId()); + migrationMsg.setParticipantUpdatesList(List.of(participantDeploy)); migrationMsg.setPrecheck(true); - assertDoesNotThrow(() -> ach.handleAcMigrationPrecheck(migrationMsg)); + var listener = mock(ThreadHandler.class); + var ach = new AcSubStateHandler(cacheProvider, listener); + ach.handleAcMigrationPrecheck(migrationMsg); + verify(listener, times(automationComposition.getElements().size())) + .migratePrecheck(any(), any(), any(), any(), any()); + } + + @Test + void handleAcMigrationPrecheckAddRemoveTest() { var automationComposition = CommonTestData.getTestAutomationCompositionMap().values().iterator().next(); - migrationMsg.setCompositionTargetId(UUID.randomUUID()); - migrationMsg.setAutomationCompositionId(automationComposition.getInstanceId()); - assertDoesNotThrow(() -> ach.handleAcMigrationPrecheck(migrationMsg)); - when(cacheProvider.getAutomationComposition(automationComposition.getInstanceId())) - .thenReturn(automationComposition); - var participantDeploy = new ParticipantDeploy(); - 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)); + automationComposition.setCompositionId(UUID.randomUUID()); + automationComposition.setInstanceId(UUID.randomUUID()); + var cacheProvider = new CacheProvider(CommonTestData.getParticipantParameters()); + var definitions = + CommonTestData.createAutomationCompositionElementDefinitionList(automationComposition); + cacheProvider.addElementDefinition(automationComposition.getCompositionId(), definitions); + var participantDeploy = + CommonTestData.createparticipantDeploy(cacheProvider.getParticipantId(), automationComposition); + cacheProvider.initializeAutomationComposition(automationComposition.getCompositionId(), + automationComposition.getInstanceId(), participantDeploy); + + var acMigrate = new AutomationComposition(automationComposition); + acMigrate.setCompositionTargetId(UUID.randomUUID()); + + // replacing first element with new one + var element = acMigrate.getElements().values().iterator().next(); + element.setDefinition(new ToscaConceptIdentifier("policy.clamp.new.element", "1.0.0")); + element.setId(UUID.randomUUID()); + + var migrateDefinitions = + CommonTestData.createAutomationCompositionElementDefinitionList(acMigrate); + cacheProvider.addElementDefinition(acMigrate.getCompositionTargetId(), migrateDefinitions); + var migrationMsg = new AutomationCompositionMigration(); + migrationMsg.setStage(0); + migrationMsg.setCompositionId(acMigrate.getCompositionId()); + migrationMsg.setAutomationCompositionId(acMigrate.getInstanceId()); + migrationMsg.setCompositionTargetId(acMigrate.getCompositionTargetId()); + var participantMigrate = CommonTestData.createparticipantDeploy(cacheProvider.getParticipantId(), acMigrate); + migrationMsg.setParticipantUpdatesList(List.of(participantMigrate)); + var listener = mock(ThreadHandler.class); + var ach = new AcSubStateHandler(cacheProvider, listener); ach.handleAcMigrationPrecheck(migrationMsg); - verify(listener, times(automationComposition.getElements().size())) + verify(listener, times(acMigrate.getElements().size() + 1)) .migratePrecheck(any(), any(), any(), any(), any()); } 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 5973508a8..7f21264b2 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 @@ -23,12 +23,14 @@ package org.onap.policy.clamp.acm.participant.intermediary.handler; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.mock; 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; @@ -197,57 +199,82 @@ class AutomationCompositionHandlerTest { } @Test - void handleAutomationCompositionMigrationTest() { - var listener = mock(ThreadHandler.class); - var cacheProvider = mock(CacheProvider.class); - var ach = new AutomationCompositionHandler(cacheProvider, mock(ParticipantMessagePublisher.class), listener); + void handleMigrationNullTest() { + var ach = new AutomationCompositionHandler( + mock(CacheProvider.class), mock(ParticipantMessagePublisher.class), mock(ThreadHandler.class)); var migrationMsg = new AutomationCompositionMigration(); + migrationMsg.setStage(0); assertDoesNotThrow(() -> ach.handleAutomationCompositionMigration(migrationMsg)); - var automationComposition = CommonTestData.getTestAutomationCompositionMap().values().iterator().next(); - + migrationMsg.setAutomationCompositionId(UUID.randomUUID()); + migrationMsg.setCompositionTargetId(UUID.randomUUID()); assertDoesNotThrow(() -> ach.handleAutomationCompositionMigration(migrationMsg)); - when(cacheProvider.getAutomationComposition(automationComposition.getInstanceId())) - .thenReturn(automationComposition); - when(cacheProvider.getParticipantId()).thenReturn(CommonTestData.getParticipantId()); - - Map<ToscaConceptIdentifier, AutomationCompositionElementDefinition> map = new HashMap<>(); - var participantDeploy = new ParticipantDeploy(); - populateMigrationMsg(automationComposition, migrationMsg, map, participantDeploy); - when(cacheProvider.getAcElementsDefinitions()) - .thenReturn(Map.of(automationComposition.getCompositionId(), map, - migrationMsg.getCompositionTargetId(), map)); + } + @Test + void handleAutomationCompositionMigrationTest() { + var automationComposition = CommonTestData.getTestAutomationCompositionMap().values().iterator().next(); + automationComposition.setCompositionId(UUID.randomUUID()); + automationComposition.setInstanceId(UUID.randomUUID()); + automationComposition.setCompositionTargetId(UUID.randomUUID()); + var cacheProvider = new CacheProvider(CommonTestData.getParticipantParameters()); + var definitions = + CommonTestData.createAutomationCompositionElementDefinitionList(automationComposition); + cacheProvider.addElementDefinition(automationComposition.getCompositionId(), definitions); + cacheProvider.addElementDefinition(automationComposition.getCompositionTargetId(), definitions); + var participantDeploy = + CommonTestData.createparticipantDeploy(cacheProvider.getParticipantId(), automationComposition); + cacheProvider.initializeAutomationComposition(automationComposition.getCompositionId(), + automationComposition.getInstanceId(), participantDeploy); + var migrationMsg = new AutomationCompositionMigration(); + migrationMsg.setStage(0); + migrationMsg.setCompositionId(automationComposition.getCompositionId()); + migrationMsg.setAutomationCompositionId(automationComposition.getInstanceId()); + migrationMsg.setCompositionTargetId(automationComposition.getCompositionTargetId()); + migrationMsg.setParticipantUpdatesList(List.of(participantDeploy)); + var listener = mock(ThreadHandler.class); + var ach = new AutomationCompositionHandler(cacheProvider, mock(ParticipantMessagePublisher.class), listener); ach.handleAutomationCompositionMigration(migrationMsg); - verify(listener, times(automationComposition.getElements().size() + 1)) - .migrate(any(), any(), any(), any(), any()); + verify(listener, times(automationComposition.getElements().size())) + .migrate(any(), any(), any(), any(), any(), anyInt()); } - private void populateMigrationMsg(AutomationComposition automationComposition, - AutomationCompositionMigration migrationMsg, - Map<ToscaConceptIdentifier, - AutomationCompositionElementDefinition> map, - ParticipantDeploy participantDeploy) { + @Test + void handleMigrationAddRemoveTest() { + var automationComposition = CommonTestData.getTestAutomationCompositionMap().values().iterator().next(); + automationComposition.setCompositionId(UUID.randomUUID()); + automationComposition.setInstanceId(UUID.randomUUID()); + var cacheProvider = new CacheProvider(CommonTestData.getParticipantParameters()); + var definitions = + CommonTestData.createAutomationCompositionElementDefinitionList(automationComposition); + cacheProvider.addElementDefinition(automationComposition.getCompositionId(), definitions); + var participantDeploy = + CommonTestData.createparticipantDeploy(cacheProvider.getParticipantId(), automationComposition); + cacheProvider.initializeAutomationComposition(automationComposition.getCompositionId(), + automationComposition.getInstanceId(), participantDeploy); - participantDeploy.setParticipantId(CommonTestData.getParticipantId()); - migrationMsg.setCompositionTargetId(UUID.randomUUID()); - migrationMsg.setAutomationCompositionId(automationComposition.getInstanceId()); - migrationMsg.getParticipantUpdatesList().add(participantDeploy); - 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()); - } - // remove an element - participantDeploy.getAcElementList().remove(0); - // Add a new element - var acElementDeploy = new AcElementDeploy(); - acElementDeploy.setProperties(Map.of()); - acElementDeploy.setId(UUID.randomUUID()); - acElementDeploy.setDefinition(new ToscaConceptIdentifier("1.2.3", "policy.clamp.new.element")); - participantDeploy.getAcElementList().add(acElementDeploy); + var acMigrate = new AutomationComposition(automationComposition); + acMigrate.setCompositionTargetId(UUID.randomUUID()); + + // replacing first element with new one + var element = acMigrate.getElements().values().iterator().next(); + element.setDefinition(new ToscaConceptIdentifier("policy.clamp.new.element", "1.0.0")); + element.setId(UUID.randomUUID()); + var migrateDefinitions = + CommonTestData.createAutomationCompositionElementDefinitionList(acMigrate); + cacheProvider.addElementDefinition(acMigrate.getCompositionTargetId(), migrateDefinitions); + + var migrationMsg = new AutomationCompositionMigration(); + migrationMsg.setStage(0); + migrationMsg.setCompositionId(acMigrate.getCompositionId()); + migrationMsg.setAutomationCompositionId(acMigrate.getInstanceId()); + migrationMsg.setCompositionTargetId(acMigrate.getCompositionTargetId()); + var participantMigrate = CommonTestData.createparticipantDeploy(cacheProvider.getParticipantId(), acMigrate); + migrationMsg.setParticipantUpdatesList(List.of(participantMigrate)); + var listener = mock(ThreadHandler.class); + var ach = new AutomationCompositionHandler(cacheProvider, mock(ParticipantMessagePublisher.class), listener); + ach.handleAutomationCompositionMigration(migrationMsg); + verify(listener, times(acMigrate.getElements().size() + 1)) + .migrate(any(), any(), any(), any(), any(), anyInt()); } } 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 27813988d..dd8747ff4 100644 --- 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 @@ -65,11 +65,35 @@ class AutomationCompositionOutHandlerTest { when(cacheProvider.getAutomationComposition(automationComposition.getInstanceId())) .thenReturn(automationComposition); assertDoesNotThrow(() -> acOutHandler.updateAutomationCompositionElementState( - automationComposition.getInstanceId(), UUID.randomUUID(), DeployState.DEPLOYED, null, null, null)); + automationComposition.getInstanceId(), UUID.randomUUID(), DeployState.DEPLOYED, + null, null, null)); var elementId = automationComposition.getElements().values().iterator().next().getId(); assertDoesNotThrow(() -> acOutHandler.updateAutomationCompositionElementState( automationComposition.getInstanceId(), elementId, null, null, null, null)); + + assertDoesNotThrow(() -> acOutHandler.updateAutomationCompositionElementStage( + elementId, null, null, 0, null)); + assertDoesNotThrow(() -> acOutHandler.updateAutomationCompositionElementStage( + null, elementId, null, 0, null)); + assertDoesNotThrow(() -> acOutHandler.updateAutomationCompositionElementStage( + UUID.randomUUID(), elementId, null, 0, null)); + assertDoesNotThrow(() -> acOutHandler.updateAutomationCompositionElementStage( + automationComposition.getInstanceId(), UUID.randomUUID(), null, 0, null)); + } + + @Test + void updateAutomationCompositionElementStageTest() { + var publisher = mock(ParticipantMessagePublisher.class); + var cacheProvider = mock(CacheProvider.class); + var acOutHandler = new AutomationCompositionOutHandler(publisher, cacheProvider); + var automationComposition = CommonTestData.getTestAutomationCompositionMap().values().iterator().next(); + when(cacheProvider.getAutomationComposition(automationComposition.getInstanceId())) + .thenReturn(automationComposition); + var elementId = automationComposition.getElements().values().iterator().next().getId(); + acOutHandler.updateAutomationCompositionElementStage( + automationComposition.getInstanceId(), elementId, StateChangeResult.NO_ERROR, 0, "OK"); + verify(publisher).sendAutomationCompositionAck(any(AutomationCompositionDeployAck.class)); } @Test 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 90d011fac..d05471901 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 @@ -117,7 +117,7 @@ class ThreadHandlerTest { var compositionElementTarget = new CompositionElementDto(compositionTargetId, new ToscaConceptIdentifier(), properties, properties); threadHandler.migrate(messageId, compositionElement, compositionElementTarget, - instanceElement, instanceElementUpdated); + instanceElement, instanceElementUpdated, 0); verify(listener, timeout(TIMEOUT)).migrate(compositionElement, compositionElementTarget, instanceElement, instanceElementUpdated, 0); @@ -170,7 +170,7 @@ class ThreadHandlerTest { doThrow(new PfModelException(Status.INTERNAL_SERVER_ERROR, "Error")).when(listener) .migrate(compositionElement, compositionElementTarget, instanceElement, instanceElementUpdated, 0); threadHandler.migrate(messageId, compositionElement, compositionElementTarget, - instanceElement, instanceElementUpdated); + instanceElement, instanceElementUpdated, 0); verify(intermediaryApi, timeout(TIMEOUT)).updateAutomationCompositionElementState(instanceId, elementId, DeployState.DEPLOYED, null, StateChangeResult.FAILED, "Automation composition element migrate failed"); |