diff options
Diffstat (limited to 'models')
10 files changed, 212 insertions, 94 deletions
diff --git a/models/src/main/java/org/onap/policy/clamp/models/acm/concepts/AutomationComposition.java b/models/src/main/java/org/onap/policy/clamp/models/acm/concepts/AutomationComposition.java index c3245d27c..b19f54c3b 100644 --- a/models/src/main/java/org/onap/policy/clamp/models/acm/concepts/AutomationComposition.java +++ b/models/src/main/java/org/onap/policy/clamp/models/acm/concepts/AutomationComposition.java @@ -38,6 +38,9 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaEntity; @EqualsAndHashCode(callSuper = true) public class AutomationComposition extends ToscaEntity implements Comparable<AutomationComposition> { @NonNull + private UUID instanceId; + + @NonNull private UUID compositionId; @NonNull @@ -58,6 +61,7 @@ public class AutomationComposition extends ToscaEntity implements Comparable<Aut */ public AutomationComposition(final AutomationComposition otherAutomationComposition) { super(otherAutomationComposition); + this.instanceId = otherAutomationComposition.instanceId; this.compositionId = otherAutomationComposition.compositionId; this.state = otherAutomationComposition.state; this.orderedState = otherAutomationComposition.orderedState; diff --git a/models/src/main/java/org/onap/policy/clamp/models/acm/messages/rest/instantiation/InstantiationResponse.java b/models/src/main/java/org/onap/policy/clamp/models/acm/messages/rest/instantiation/InstantiationResponse.java index 4ecb8ce32..534c909aa 100644 --- a/models/src/main/java/org/onap/policy/clamp/models/acm/messages/rest/instantiation/InstantiationResponse.java +++ b/models/src/main/java/org/onap/policy/clamp/models/acm/messages/rest/instantiation/InstantiationResponse.java @@ -20,6 +20,7 @@ package org.onap.policy.clamp.models.acm.messages.rest.instantiation; +import java.util.UUID; import lombok.Getter; import lombok.Setter; import lombok.ToString; @@ -33,5 +34,6 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier; @Setter @ToString(callSuper = true) public class InstantiationResponse extends SimpleResponse { + private UUID instanceId; ToscaConceptIdentifier affectedAutomationComposition; } diff --git a/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaAutomationComposition.java b/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaAutomationComposition.java index 8268e9066..b87bad4e0 100644 --- a/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaAutomationComposition.java +++ b/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaAutomationComposition.java @@ -23,7 +23,6 @@ package org.onap.policy.clamp.models.acm.persistence.concepts; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import java.util.UUID; import javax.persistence.CascadeType; import javax.persistence.Column; @@ -40,7 +39,6 @@ import lombok.EqualsAndHashCode; import lombok.NonNull; import org.apache.commons.lang3.ObjectUtils; import org.onap.policy.clamp.models.acm.concepts.AutomationComposition; -import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElement; import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionOrderedState; import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState; import org.onap.policy.common.parameters.annotations.NotNull; @@ -66,11 +64,16 @@ import org.onap.policy.models.base.validation.annotations.VerifyKey; public class JpaAutomationComposition extends PfConcept implements PfAuthorative<AutomationComposition> { private static final long serialVersionUID = -4725410933242154805L; + @Column + @NotNull + private String instanceId; + @EmbeddedId @VerifyKey @NotNull private PfConceptKey key; + @Column @NotNull private String compositionId; @@ -97,29 +100,23 @@ public class JpaAutomationComposition extends PfConcept implements PfAuthorative * The Default Constructor creates a {@link JpaAutomationComposition} object with a null key. */ public JpaAutomationComposition() { - this(new PfConceptKey()); - } - - /** - * The Key Constructor creates a {@link JpaAutomationComposition} object with the given concept key. - * - * @param key the key - */ - public JpaAutomationComposition(@NonNull final PfConceptKey key) { - this(key, UUID.randomUUID().toString(), AutomationCompositionState.UNINITIALISED, new LinkedHashMap<>()); + this(UUID.randomUUID().toString(), new PfConceptKey(), UUID.randomUUID().toString(), + AutomationCompositionState.UNINITIALISED, new LinkedHashMap<>()); } /** * The Key Constructor creates a {@link JpaAutomationComposition} object with all mandatory fields. * + * @param instanceId The UUID of the automation composition instance * @param key the key * @param compositionId the TOSCA compositionId of the automation composition definition * @param state the state of the automation composition * @param elements the elements of the automation composition in participants */ - public JpaAutomationComposition(@NonNull final PfConceptKey key, @NonNull final String compositionId, - @NonNull final AutomationCompositionState state, + public JpaAutomationComposition(@NonNull final String instanceId, @NonNull final PfConceptKey key, + @NonNull final String compositionId, @NonNull final AutomationCompositionState state, @NonNull final Map<UUID, JpaAutomationCompositionElement> elements) { + this.instanceId = instanceId; this.key = key; this.compositionId = compositionId; this.state = state; @@ -133,6 +130,7 @@ public class JpaAutomationComposition extends PfConcept implements PfAuthorative */ public JpaAutomationComposition(@NonNull final JpaAutomationComposition copyConcept) { super(copyConcept); + this.instanceId = copyConcept.instanceId; this.key = new PfConceptKey(copyConcept.key); this.compositionId = copyConcept.compositionId; this.state = copyConcept.state; @@ -156,6 +154,7 @@ public class JpaAutomationComposition extends PfConcept implements PfAuthorative public AutomationComposition toAuthorative() { var automationComposition = new AutomationComposition(); + automationComposition.setInstanceId(UUID.fromString(instanceId)); automationComposition.setName(getKey().getName()); automationComposition.setVersion(getKey().getVersion()); automationComposition.setCompositionId(UUID.fromString(compositionId)); @@ -171,6 +170,7 @@ public class JpaAutomationComposition extends PfConcept implements PfAuthorative @Override public void fromAuthorative(@NonNull final AutomationComposition automationComposition) { + this.instanceId = automationComposition.getInstanceId().toString(); if (this.key == null || this.getKey().isNullKey()) { this.setKey(new PfConceptKey(automationComposition.getName(), automationComposition.getVersion())); } @@ -182,7 +182,7 @@ public class JpaAutomationComposition extends PfConcept implements PfAuthorative this.primed = automationComposition.getPrimed(); this.elements = new LinkedHashMap<>(automationComposition.getElements().size()); - for (Entry<UUID, AutomationCompositionElement> elementEntry : automationComposition.getElements().entrySet()) { + for (var elementEntry : automationComposition.getElements().entrySet()) { var jpaAutomationCompositionElement = new JpaAutomationCompositionElement(); jpaAutomationCompositionElement .setKey(new PfReferenceKey(getKey(), elementEntry.getValue().getId().toString())); @@ -193,9 +193,9 @@ public class JpaAutomationComposition extends PfConcept implements PfAuthorative @Override public List<PfKey> getKeys() { - List<PfKey> keyList = getKey().getKeys(); + var keyList = getKey().getKeys(); - for (JpaAutomationCompositionElement element : elements.values()) { + for (var element : elements.values()) { keyList.addAll(element.getKeys()); } @@ -207,7 +207,7 @@ public class JpaAutomationComposition extends PfConcept implements PfAuthorative key.clean(); description = (description == null ? null : description.trim()); - for (JpaAutomationCompositionElement element : elements.values()) { + for (var element : elements.values()) { element.clean(); } } @@ -224,8 +224,13 @@ public class JpaAutomationComposition extends PfConcept implements PfAuthorative return this.getClass().getName().compareTo(otherConcept.getClass().getName()); } - final JpaAutomationComposition other = (JpaAutomationComposition) otherConcept; - int result = key.compareTo(other.key); + final var other = (JpaAutomationComposition) otherConcept; + var result = ObjectUtils.compare(instanceId, other.instanceId); + if (result != 0) { + return result; + } + + result = key.compareTo(other.key); if (result != 0) { return result; } diff --git a/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/AutomationCompositionProvider.java b/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/AutomationCompositionProvider.java index 5024785f8..3d2813eb2 100644 --- a/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/AutomationCompositionProvider.java +++ b/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/provider/AutomationCompositionProvider.java @@ -52,29 +52,31 @@ public class AutomationCompositionProvider { /** * Get automation composition. * - * @param automationCompositionId the ID of the automation composition to get + * @param instanceId the ID of the automation composition to get * @return the automation composition found */ @Transactional(readOnly = true) - public AutomationComposition getAutomationComposition(final ToscaConceptIdentifier automationCompositionId) { - try { - return automationCompositionRepository.getById(automationCompositionId.asConceptKey()).toAuthorative(); - } catch (EntityNotFoundException e) { - throw new PfModelRuntimeException(Status.NOT_FOUND, "AutomationComposition not found", e); + public AutomationComposition getAutomationComposition(final UUID instanceId) { + var result = automationCompositionRepository.findByInstanceId(instanceId.toString()); + if (result.isEmpty()) { + throw new PfModelRuntimeException(Status.NOT_FOUND, "AutomationComposition not found"); } + return result.get().toAuthorative(); } /** - * Find automation composition by automationCompositionId. + * Get automation composition. * - * @param name the name of the automation composition to get, null to get all automation compositions - * @param version the version of the automation composition to get, null to get all automation compositions + * @param automationCompositionId the ID of the automation composition to get * @return the automation composition found */ @Transactional(readOnly = true) - public Optional<AutomationComposition> findAutomationComposition(@NonNull final String name, - @NonNull final String version) { - return findAutomationComposition(new PfConceptKey(name, version)); + public AutomationComposition getAutomationComposition(final ToscaConceptIdentifier automationCompositionId) { + try { + return automationCompositionRepository.getById(automationCompositionId.asConceptKey()).toAuthorative(); + } catch (EntityNotFoundException e) { + throw new PfModelRuntimeException(Status.NOT_FOUND, "AutomationComposition not found", e); + } } /** @@ -94,12 +96,27 @@ public class AutomationCompositionProvider { } /** - * Save automation composition. + * Create automation composition. + * + * @param automationComposition the automation composition to create + * @return the create automation composition + */ + public AutomationComposition createAutomationComposition(final AutomationComposition automationComposition) { + automationComposition.setInstanceId(UUID.randomUUID()); + var result = automationCompositionRepository.save(ProviderUtils.getJpaAndValidate(automationComposition, + JpaAutomationComposition::new, "automation composition")); + + // Return the saved automation composition + return result.toAuthorative(); + } + + /** + * Update automation composition. * * @param automationComposition the automation composition to update * @return the updated automation composition */ - public AutomationComposition saveAutomationComposition(final AutomationComposition automationComposition) { + public AutomationComposition updateAutomationComposition(final AutomationComposition automationComposition) { var result = automationCompositionRepository.save(ProviderUtils.getJpaAndValidate(automationComposition, JpaAutomationComposition::new, "automation composition")); @@ -136,23 +153,18 @@ public class AutomationCompositionProvider { /** * Delete a automation composition. * - * @param name the name of the automation composition to delete - * @param version the version of the automation composition to delete + * @param instanceId the ID of the automation composition to get * @return the automation composition deleted */ - public AutomationComposition deleteAutomationComposition(@NonNull final String name, - @NonNull final String version) { - - var automationCompositionKey = new PfConceptKey(name, version); - var jpaDeleteAutomationComposition = automationCompositionRepository.findById(automationCompositionKey); - + public AutomationComposition deleteAutomationComposition(@NonNull final UUID instanceId) { + var jpaDeleteAutomationComposition = automationCompositionRepository.findByInstanceId(instanceId.toString()); if (jpaDeleteAutomationComposition.isEmpty()) { - String errorMessage = "delete of automation composition \"" + automationCompositionKey.getId() + var errorMessage = "delete of automation composition \"" + instanceId + "\" failed, automation composition does not exist"; throw new PfModelRuntimeException(Response.Status.NOT_FOUND, errorMessage); } - automationCompositionRepository.deleteById(automationCompositionKey); + automationCompositionRepository.deleteById(jpaDeleteAutomationComposition.get().getKey()); return jpaDeleteAutomationComposition.get().toAuthorative(); } diff --git a/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/repository/AutomationCompositionRepository.java b/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/repository/AutomationCompositionRepository.java index 273b99a63..aba752667 100644 --- a/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/repository/AutomationCompositionRepository.java +++ b/models/src/main/java/org/onap/policy/clamp/models/acm/persistence/repository/AutomationCompositionRepository.java @@ -21,6 +21,7 @@ package org.onap.policy.clamp.models.acm.persistence.repository; import java.util.List; +import java.util.Optional; import org.onap.policy.clamp.models.acm.persistence.concepts.JpaAutomationComposition; import org.onap.policy.models.base.PfConceptKey; import org.springframework.data.jpa.repository.JpaRepository; @@ -28,7 +29,9 @@ import org.springframework.stereotype.Repository; @Repository public interface AutomationCompositionRepository - extends JpaRepository<JpaAutomationComposition, PfConceptKey>, FilterRepository { + extends JpaRepository<JpaAutomationComposition, PfConceptKey>, FilterRepository { + + Optional<JpaAutomationComposition> findByInstanceId(String instanceId); List<JpaAutomationComposition> findByCompositionId(String compositionId); } diff --git a/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaAutomationCompositionTest.java b/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaAutomationCompositionTest.java index 733ba3807..f5a2149b4 100644 --- a/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaAutomationCompositionTest.java +++ b/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/concepts/JpaAutomationCompositionTest.java @@ -46,7 +46,8 @@ import org.onap.policy.models.base.PfConceptKey; */ class JpaAutomationCompositionTest { - private static final String NULL_KEY_ERROR = "key is marked .*ull but is null"; + private static final String NULL_KEY_ERROR = "instanceId is marked .*ull but is null"; + private static final UUID INSTANCE_ID = UUID.fromString("709c62b3-8918-41b9-a747-d21eb79c6c20"); private static final String COMPOSITION_ID = "709c62b3-8918-41b9-a747-e21eb79c6c41"; @Test @@ -56,74 +57,70 @@ class JpaAutomationCompositionTest { }).hasMessageMatching("copyConcept is marked .*ull but is null"); assertThatThrownBy(() -> { - new JpaAutomationComposition((PfConceptKey) null); + new JpaAutomationComposition(null, null, null, null, null); }).hasMessageMatching(NULL_KEY_ERROR); assertThatThrownBy(() -> { - new JpaAutomationComposition(null, null, null, null); + new JpaAutomationComposition(null, null, null, null, new LinkedHashMap<>()); }).hasMessageMatching(NULL_KEY_ERROR); assertThatThrownBy(() -> { - new JpaAutomationComposition(null, null, null, new LinkedHashMap<>()); + new JpaAutomationComposition(null, null, null, AutomationCompositionState.UNINITIALISED, null); }).hasMessageMatching(NULL_KEY_ERROR); assertThatThrownBy(() -> { - new JpaAutomationComposition(null, null, AutomationCompositionState.UNINITIALISED, null); - }).hasMessageMatching(NULL_KEY_ERROR); - - assertThatThrownBy(() -> { - new JpaAutomationComposition(null, null, AutomationCompositionState.UNINITIALISED, new LinkedHashMap<>()); - }).hasMessageMatching(NULL_KEY_ERROR); - - assertThatThrownBy(() -> { - new JpaAutomationComposition(null, "key", null, null); + new JpaAutomationComposition(null, null, null, AutomationCompositionState.UNINITIALISED, + new LinkedHashMap<>()); }).hasMessageMatching(NULL_KEY_ERROR); assertThatThrownBy(() -> { - new JpaAutomationComposition(null, "key", null, new LinkedHashMap<>()); + new JpaAutomationComposition(null, null, "key", null, new LinkedHashMap<>()); }).hasMessageMatching(NULL_KEY_ERROR); assertThatThrownBy(() -> { - new JpaAutomationComposition(null, "key", AutomationCompositionState.UNINITIALISED, null); + new JpaAutomationComposition(null, null, "key", AutomationCompositionState.UNINITIALISED, null); }).hasMessageMatching(NULL_KEY_ERROR); assertThatThrownBy(() -> { - new JpaAutomationComposition(null, "key", AutomationCompositionState.UNINITIALISED, new LinkedHashMap<>()); + new JpaAutomationComposition(null, null, "key", AutomationCompositionState.UNINITIALISED, + new LinkedHashMap<>()); }).hasMessageMatching(NULL_KEY_ERROR); assertThatThrownBy(() -> { - new JpaAutomationComposition(new PfConceptKey(), null, null, null); + new JpaAutomationComposition(INSTANCE_ID.toString(), new PfConceptKey(), null, null, null); }).hasMessageMatching("compositionId is marked .*ull but is null"); assertThatThrownBy(() -> { - new JpaAutomationComposition(new PfConceptKey(), null, null, new LinkedHashMap<>()); + new JpaAutomationComposition(INSTANCE_ID.toString(), new PfConceptKey(), null, null, new LinkedHashMap<>()); }).hasMessageMatching("compositionId is marked .*ull but is null"); assertThatThrownBy(() -> { - new JpaAutomationComposition(new PfConceptKey(), null, AutomationCompositionState.UNINITIALISED, null); + new JpaAutomationComposition(INSTANCE_ID.toString(), new PfConceptKey(), null, + AutomationCompositionState.UNINITIALISED, null); }).hasMessageMatching("compositionId is marked .*ull but is null"); assertThatThrownBy(() -> { - new JpaAutomationComposition(new PfConceptKey(), null, AutomationCompositionState.UNINITIALISED, - new LinkedHashMap<>()); + new JpaAutomationComposition(INSTANCE_ID.toString(), new PfConceptKey(), null, + AutomationCompositionState.UNINITIALISED, new LinkedHashMap<>()); }).hasMessageMatching("compositionId is marked .*ull but is null"); assertThatThrownBy(() -> { - new JpaAutomationComposition(new PfConceptKey(), "key", null, null); + new JpaAutomationComposition(INSTANCE_ID.toString(), new PfConceptKey(), "key", null, null); }).hasMessageMatching("state is marked .*ull but is null"); assertThatThrownBy(() -> { - new JpaAutomationComposition(new PfConceptKey(), "key", null, new LinkedHashMap<>()); + new JpaAutomationComposition(INSTANCE_ID.toString(), new PfConceptKey(), "key", null, + new LinkedHashMap<>()); }).hasMessageMatching("state is marked .*ull but is null"); assertThatThrownBy(() -> { - new JpaAutomationComposition(new PfConceptKey(), "key", AutomationCompositionState.UNINITIALISED, null); + new JpaAutomationComposition(INSTANCE_ID.toString(), new PfConceptKey(), "key", + AutomationCompositionState.UNINITIALISED, null); }).hasMessageMatching("elements is marked .*ull but is null"); assertNotNull(new JpaAutomationComposition()); - assertNotNull(new JpaAutomationComposition((new PfConceptKey()))); - assertNotNull(new JpaAutomationComposition(new PfConceptKey(), "key", AutomationCompositionState.UNINITIALISED, - new LinkedHashMap<>())); + assertNotNull(new JpaAutomationComposition(INSTANCE_ID.toString(), new PfConceptKey(), "key", + AutomationCompositionState.UNINITIALISED, new LinkedHashMap<>())); } @Test @@ -182,23 +179,24 @@ class JpaAutomationCompositionTest { new StandardCoder().decode(new File("src/test/resources/json/AutomationCompositionNoOrderedState.json"), AutomationComposition.class); + noOrderedStateAc.setInstanceId(INSTANCE_ID); var noOrderedStateJpaAc = new JpaAutomationComposition(noOrderedStateAc); assertNull(noOrderedStateJpaAc.getOrderedState()); noOrderedStateAc.setOrderedState(AutomationCompositionOrderedState.UNINITIALISED); noOrderedStateJpaAc = new JpaAutomationComposition(noOrderedStateAc); assertEquals(testJpaAutomationComposition, noOrderedStateJpaAc); - var automationCompositionsWithElements = new StandardCoder().decode( - new File("src/test/resources/providers/TestAutomationCompositions.json"), AutomationCompositions.class); + var acWithElements = + new StandardCoder().decode(new File("src/test/resources/providers/TestAutomationCompositions.json"), + AutomationCompositions.class).getAutomationCompositionList().get(0); - var jpaAutomationCompositionWithElements = - new JpaAutomationComposition(automationCompositionsWithElements.getAutomationCompositionList().get(0)); + acWithElements.setInstanceId(INSTANCE_ID); + var jpaAutomationCompositionWithElements = new JpaAutomationComposition(acWithElements); assertEquals(4, jpaAutomationCompositionWithElements.getElements().size()); assertEquals(17, jpaAutomationCompositionWithElements.getKeys().size()); assertThatCode(jpaAutomationCompositionWithElements::clean).doesNotThrowAnyException(); - assertEquals(automationCompositionsWithElements.getAutomationCompositionList().get(0), - jpaAutomationCompositionWithElements.toAuthorative()); + assertEquals(acWithElements, jpaAutomationCompositionWithElements.toAuthorative()); } @Test @@ -282,6 +280,7 @@ class JpaAutomationCompositionTest { var ac2 = new JpaAutomationComposition(); ac2.setCompositionId(COMPOSITION_ID); + ac2.setInstanceId(ac0.getInstanceId()); assertEquals(ac2, ac0); } @@ -299,6 +298,7 @@ class JpaAutomationCompositionTest { private AutomationComposition createAutomationCompositionInstance() { var testAutomationComposition = new AutomationComposition(); testAutomationComposition.setName("automation-composition"); + testAutomationComposition.setInstanceId(INSTANCE_ID); testAutomationComposition.setVersion("0.0.1"); testAutomationComposition.setCompositionId(UUID.fromString(COMPOSITION_ID)); testAutomationComposition.setElements(new LinkedHashMap<>()); diff --git a/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/provider/AcDefinitionProviderTest.java b/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/provider/AcDefinitionProviderTest.java index a2d6d69c2..50953d692 100644 --- a/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/provider/AcDefinitionProviderTest.java +++ b/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/provider/AcDefinitionProviderTest.java @@ -22,6 +22,7 @@ package org.onap.policy.clamp.models.acm.persistence.provider; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assertions.fail; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; @@ -46,6 +47,8 @@ import org.springframework.data.domain.Example; class AcDefinitionProviderTest { private static final String TOSCA_SERVICE_TEMPLATE_YAML = "clamp/acm/pmsh/funtional-pmsh-usecase.yaml"; + private static final String TOSCA_SERVICE_TEMPLATE_YAML_PROP = + "clamp/acm/test/tosca-template-additional-properties.yaml"; private static final StandardYamlCoder YAML_TRANSLATOR = new StandardYamlCoder(); @@ -57,6 +60,24 @@ class AcDefinitionProviderTest { } @Test + void testDocCopyCompare() { + + var inputServiceTemplateProperties = getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML_PROP); + var docServiceTemplate = new DocToscaServiceTemplate(inputServiceTemplateProperties); + var docServiceTemplateCopy = new DocToscaServiceTemplate(docServiceTemplate); + + assertTrue(docServiceTemplate.compareTo(docServiceTemplateCopy) < -1); + assertThat(docServiceTemplate.compareToWithoutEntities(docServiceTemplateCopy)).isZero(); + + var acmDefinition = getAcDefinition(docServiceTemplate); + var acmDefinitionCopy = getAcDefinition(docServiceTemplateCopy); + + assertThat(acmDefinition.getServiceTemplate().getName()).isEqualTo( + acmDefinitionCopy.getServiceTemplate().getName()); + + } + + @Test void testCreateServiceTemplate() { var docServiceTemplate = new DocToscaServiceTemplate(inputServiceTemplate); var acmDefinition = getAcDefinition(docServiceTemplate); diff --git a/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/provider/AutomationCompositionProviderTest.java b/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/provider/AutomationCompositionProviderTest.java index 5b12eee17..d7d96e9bd 100644 --- a/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/provider/AutomationCompositionProviderTest.java +++ b/models/src/test/java/org/onap/policy/clamp/models/acm/persistence/provider/AutomationCompositionProviderTest.java @@ -30,6 +30,7 @@ import static org.mockito.Mockito.when; import java.util.List; import java.util.Optional; +import java.util.UUID; import javax.persistence.EntityNotFoundException; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -40,7 +41,6 @@ import org.onap.policy.clamp.models.acm.persistence.repository.AutomationComposi import org.onap.policy.common.utils.coder.Coder; import org.onap.policy.common.utils.coder.StandardCoder; import org.onap.policy.common.utils.resources.ResourceUtils; -import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier; class AutomationCompositionProviderTest { @@ -68,18 +68,32 @@ class AutomationCompositionProviderTest { } @Test - void testAutomationCompositionSave() { + void testAutomationCompositionCreate() { var automationCompositionRepository = mock(AutomationCompositionRepository.class); var automationCompositionProvider = new AutomationCompositionProvider(automationCompositionRepository); - assertThatThrownBy(() -> automationCompositionProvider.saveAutomationComposition(null)) + when(automationCompositionRepository.save(any(JpaAutomationComposition.class))) + .thenReturn(inputAutomationCompositionsJpa.get(0)); + var inputAc = inputAutomationCompositions.getAutomationCompositionList().get(0); + + var createdAutomationComposition = automationCompositionProvider.createAutomationComposition(inputAc); + inputAc.setInstanceId(createdAutomationComposition.getInstanceId()); + assertEquals(inputAc, createdAutomationComposition); + } + + @Test + void testAutomationCompositionUpdate() { + var automationCompositionRepository = mock(AutomationCompositionRepository.class); + var automationCompositionProvider = new AutomationCompositionProvider(automationCompositionRepository); + + assertThatThrownBy(() -> automationCompositionProvider.updateAutomationComposition(null)) .hasMessageMatching(OBJECT_IS_NULL); when(automationCompositionRepository.save(inputAutomationCompositionsJpa.get(0))) .thenReturn(inputAutomationCompositionsJpa.get(0)); var createdAutomationComposition = automationCompositionProvider - .saveAutomationComposition(inputAutomationCompositions.getAutomationCompositionList().get(0)); + .updateAutomationComposition(inputAutomationCompositions.getAutomationCompositionList().get(0)); assertEquals(inputAutomationCompositions.getAutomationCompositionList().get(0), createdAutomationComposition); } @@ -121,31 +135,49 @@ class AutomationCompositionProviderTest { .getAutomationComposition(new ToscaConceptIdentifier(ID_NAME_NOT_EXTST, ID_VERSION))) .hasMessageMatching("AutomationComposition not found"); - ac = automationCompositionProvider.findAutomationComposition(ID_NAME, ID_VERSION) - .orElse(new AutomationComposition()); - assertEquals(inputAutomationCompositions.getAutomationCompositionList().get(1), ac); - assertThat(automationCompositionProvider .findAutomationComposition(new ToscaConceptIdentifier(ID_NAME_NOT_EXTST, ID_VERSION))).isEmpty(); } @Test - void testDeleteAutomationComposition() { + void testGetAutomationComposition() { var automationCompositionRepository = mock(AutomationCompositionRepository.class); var automationCompositionProvider = new AutomationCompositionProvider(automationCompositionRepository); - assertThatThrownBy( - () -> automationCompositionProvider.deleteAutomationComposition(ID_NAME_NOT_EXTST, ID_VERSION)) - .hasMessageMatching(".*.failed, automation composition does not exist"); + var automationComposition = inputAutomationCompositions.getAutomationCompositionList().get(0); + when(automationCompositionRepository.findByInstanceId(automationComposition.getInstanceId().toString())) + .thenReturn(Optional.of(inputAutomationCompositionsJpa.get(0))); + var ac = automationCompositionProvider.getAutomationComposition(automationComposition.getInstanceId()); + assertEquals(inputAutomationCompositions.getAutomationCompositionList().get(0), ac); + } + + @Test + void testGetAcInstancesByCompositionId() { + var automationCompositionRepository = mock(AutomationCompositionRepository.class); + var automationCompositionProvider = new AutomationCompositionProvider(automationCompositionRepository); var automationComposition = inputAutomationCompositions.getAutomationCompositionList().get(0); - var name = automationComposition.getName(); - var version = automationComposition.getVersion(); + when(automationCompositionRepository.findByCompositionId(automationComposition.getCompositionId().toString())) + .thenReturn(inputAutomationCompositionsJpa); + var acList = + automationCompositionProvider.getAcInstancesByCompositionId(automationComposition.getCompositionId()); + assertEquals(inputAutomationCompositions.getAutomationCompositionList(), acList); + } - when(automationCompositionRepository.findById(new PfConceptKey(name, version))) + @Test + void testDeleteAutomationComposition() { + var automationCompositionRepository = mock(AutomationCompositionRepository.class); + var automationCompositionProvider = new AutomationCompositionProvider(automationCompositionRepository); + + assertThatThrownBy(() -> automationCompositionProvider.deleteAutomationComposition(UUID.randomUUID())) + .hasMessageMatching(".*.failed, automation composition does not exist"); + + var automationComposition = inputAutomationCompositions.getAutomationCompositionList().get(0); + when(automationCompositionRepository.findByInstanceId(automationComposition.getInstanceId().toString())) .thenReturn(Optional.of(inputAutomationCompositionsJpa.get(0))); - AutomationComposition deletedAc = automationCompositionProvider.deleteAutomationComposition(name, version); + var deletedAc = + automationCompositionProvider.deleteAutomationComposition(automationComposition.getInstanceId()); assertEquals(automationComposition, deletedAc); } } diff --git a/models/src/test/java/org/onap/policy/clamp/models/acm/utils/AcmUtilsTest.java b/models/src/test/java/org/onap/policy/clamp/models/acm/utils/AcmUtilsTest.java index ccb4b8360..617b2459c 100644 --- a/models/src/test/java/org/onap/policy/clamp/models/acm/utils/AcmUtilsTest.java +++ b/models/src/test/java/org/onap/policy/clamp/models/acm/utils/AcmUtilsTest.java @@ -22,19 +22,26 @@ package org.onap.policy.clamp.models.acm.utils; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; +import java.io.File; import java.util.ArrayList; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.UUID; import org.junit.jupiter.api.Test; +import org.onap.policy.clamp.models.acm.concepts.AutomationComposition; import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElement; import org.onap.policy.clamp.models.acm.concepts.ParticipantDefinition; import org.onap.policy.clamp.models.acm.concepts.ParticipantUpdates; import org.onap.policy.clamp.models.acm.concepts.ParticipantUtils; +import org.onap.policy.common.utils.coder.CoderException; +import org.onap.policy.common.utils.coder.StandardCoder; import org.onap.policy.common.utils.coder.StandardYamlCoder; import org.onap.policy.common.utils.resources.ResourceUtils; import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier; @@ -115,6 +122,36 @@ class AcmUtilsTest { assertThat(result).hasSize(6); } + @Test + void testValidateAutomationComposition() throws Exception { + var automationComposition = getDummyAutomationComposition(); + var toscaServiceTemplate = getDummyToscaServiceTemplate(); + var result = AcmUtils.validateAutomationComposition(automationComposition, toscaServiceTemplate); + assertNotNull(result); + assertFalse(result.isValid()); + + Map<String, ToscaNodeTemplate> nodeTemplates = new HashMap<>(); + var nodeTemplate = new ToscaNodeTemplate(); + nodeTemplate.setType("org.onap.policy.clamp.acm.AutomationComposition"); + nodeTemplates.put("org.onap.dcae.acm.DCAEMicroserviceAutomationCompositionParticipant", nodeTemplate); + toscaServiceTemplate.getToscaTopologyTemplate().setNodeTemplates(nodeTemplates); + var result2 = AcmUtils.validateAutomationComposition(automationComposition, toscaServiceTemplate); + toscaServiceTemplate.setToscaTopologyTemplate(null); + assertFalse(result2.isValid()); + } + + private AutomationComposition getDummyAutomationComposition() throws CoderException { + var automationComposition = new AutomationComposition(); + var element = new StandardCoder().decode( + new File("src/test/resources/json/AutomationCompositionElementNoOrderedState.json"), + AutomationCompositionElement.class); + automationComposition.setCompositionId(UUID.randomUUID()); + Map<UUID, AutomationCompositionElement> map = new LinkedHashMap<>(); + map.put(UUID.randomUUID(), element); + automationComposition.setElements(map); + return automationComposition; + } + private ToscaServiceTemplate getDummyToscaServiceTemplate() { var toscaServiceTemplate = new ToscaServiceTemplate(); var policyTypes = getDummyPolicyTypesMap(); diff --git a/models/src/test/resources/providers/TestAutomationCompositions.json b/models/src/test/resources/providers/TestAutomationCompositions.json index 171ce07f6..286759988 100644 --- a/models/src/test/resources/providers/TestAutomationCompositions.json +++ b/models/src/test/resources/providers/TestAutomationCompositions.json @@ -2,6 +2,7 @@ "automationCompositionList": [ { "compositionId": "709c62b3-8918-41b9-a747-e21eb79c6c40", + "instanceId": "809c62b3-8918-41b9-a748-e21eb79c6c89", "state": "UNINITIALISED", "orderedState": "UNINITIALISED", "elements": { @@ -68,6 +69,7 @@ }, { "compositionId": "709c62b3-8918-41b9-a747-e21eb79c6c40", + "instanceId": "809c62b3-8918-41b9-a748-e21eb79c6c90", "state": "UNINITIALISED", "orderedState": "UNINITIALISED", "elements": { |