From db615d9fed370c7896a638704d00807c19b6f5d3 Mon Sep 17 00:00:00 2001 From: FrancescoFioraEst Date: Tue, 24 Jan 2023 16:27:21 +0000 Subject: Models for refactor Prime and Deprime in ACM Refactor Ac Definition to store Prime and Deprime status and refactor CommissioningController to show the status of the AC Definition and of all elements. Issue-ID: POLICY-4502 Change-Id: Ifd90fc8d5788ec2ddebc12ee2e78beef4c0254c8 Signed-off-by: FrancescoFioraEst --- .../AutomationCompositionDefinitionTest.java | 47 ++++++++++ .../models/acm/concepts/NodeTemplateStateTest.java | 41 +++++++++ .../clamp/models/acm/concepts/ParticipantTest.java | 23 ++++- .../ParticipantsSupportedElementTypesTest.java | 15 ++- .../provider/AcDefinitionProviderTest.java | 102 +++++++++++++++------ .../clamp/models/acm/utils/CommonTestData.java | 22 +++++ 6 files changed, 213 insertions(+), 37 deletions(-) create mode 100644 models/src/test/java/org/onap/policy/clamp/models/acm/concepts/AutomationCompositionDefinitionTest.java create mode 100644 models/src/test/java/org/onap/policy/clamp/models/acm/concepts/NodeTemplateStateTest.java (limited to 'models/src/test') diff --git a/models/src/test/java/org/onap/policy/clamp/models/acm/concepts/AutomationCompositionDefinitionTest.java b/models/src/test/java/org/onap/policy/clamp/models/acm/concepts/AutomationCompositionDefinitionTest.java new file mode 100644 index 000000000..aa084b4f2 --- /dev/null +++ b/models/src/test/java/org/onap/policy/clamp/models/acm/concepts/AutomationCompositionDefinitionTest.java @@ -0,0 +1,47 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2023 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.models.acm.concepts; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.Map; +import java.util.UUID; +import org.junit.jupiter.api.Test; +import org.onap.policy.clamp.models.acm.utils.CommonTestData; +import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier; + +class AutomationCompositionDefinitionTest { + + private static final String TOSCA_SERVICE_TEMPLATE_YAML = "clamp/acm/pmsh/funtional-pmsh-usecase.yaml"; + + @Test + void testCopyContructor() { + var acDefinition = new AutomationCompositionDefinition(); + acDefinition.setCompositionId(UUID.randomUUID()); + var nodeTemplateState = new NodeTemplateState(); + nodeTemplateState.setNodeTemplateId(new ToscaConceptIdentifier()); + acDefinition.setElementStateMap(Map.of("key", nodeTemplateState)); + acDefinition.setServiceTemplate(CommonTestData.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML)); + acDefinition.setState(AcTypeState.COMMISSIONED); + var result = new AutomationCompositionDefinition(acDefinition); + assertEquals(result, acDefinition); + } +} diff --git a/models/src/test/java/org/onap/policy/clamp/models/acm/concepts/NodeTemplateStateTest.java b/models/src/test/java/org/onap/policy/clamp/models/acm/concepts/NodeTemplateStateTest.java new file mode 100644 index 000000000..a850c88dc --- /dev/null +++ b/models/src/test/java/org/onap/policy/clamp/models/acm/concepts/NodeTemplateStateTest.java @@ -0,0 +1,41 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2023 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.models.acm.concepts; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.UUID; +import org.junit.jupiter.api.Test; +import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier; + +class NodeTemplateStateTest { + + @Test + void testCopyContructor() { + var nodeTemplateState = new NodeTemplateState(); + nodeTemplateState.setNodeTemplateId(new ToscaConceptIdentifier()); + nodeTemplateState.setNodeTemplateStateId(UUID.randomUUID()); + nodeTemplateState.setParticipantId(UUID.randomUUID()); + nodeTemplateState.setState(AcTypeState.COMMISSIONED); + var result = new NodeTemplateState(nodeTemplateState); + assertEquals(result, nodeTemplateState); + } +} diff --git a/models/src/test/java/org/onap/policy/clamp/models/acm/concepts/ParticipantTest.java b/models/src/test/java/org/onap/policy/clamp/models/acm/concepts/ParticipantTest.java index 0ae1a90e2..c6af96742 100644 --- a/models/src/test/java/org/onap/policy/clamp/models/acm/concepts/ParticipantTest.java +++ b/models/src/test/java/org/onap/policy/clamp/models/acm/concepts/ParticipantTest.java @@ -26,6 +26,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; +import java.util.Map; +import java.util.UUID; import org.junit.jupiter.api.Test; import org.onap.policy.clamp.models.acm.utils.CommonTestData; @@ -34,7 +36,7 @@ class ParticipantTest { @Test void testParticipantLombok() { assertNotNull(new Participant()); - Participant p0 = new Participant(); + var p0 = new Participant(); assertThat(p0.toString()).contains("Participant("); assertThat(p0.hashCode()).isNotZero(); @@ -42,7 +44,7 @@ class ParticipantTest { assertNotEquals(null, p0); - Participant p1 = new Participant(); + var p1 = new Participant(); p1.setParticipantId(CommonTestData.getParticipantId()); p1.setParticipantState(ParticipantState.ON_LINE); @@ -54,7 +56,7 @@ class ParticipantTest { assertNotEquals(p1, p0); - Participant p2 = new Participant(); + var p2 = new Participant(); // @formatter:off assertThatThrownBy(() -> p2.setParticipantState(null)).isInstanceOf(NullPointerException.class); @@ -62,4 +64,19 @@ class ParticipantTest { assertEquals(p2, p0); } + + @Test + void testCopyConstructor() { + var p0 = new Participant(); + p0.setParticipantId(UUID.randomUUID()); + p0.setParticipantState(ParticipantState.ON_LINE); + var supportedElementType = new ParticipantSupportedElementType(); + supportedElementType.setId(UUID.randomUUID()); + supportedElementType.setTypeName("type"); + supportedElementType.setTypeVersion("1.0.0"); + p0.setParticipantSupportedElementTypes(Map.of(supportedElementType.getId(), supportedElementType)); + + var p2 = new Participant(p0); + assertEquals(p2, p0); + } } diff --git a/models/src/test/java/org/onap/policy/clamp/models/acm/concepts/ParticipantsSupportedElementTypesTest.java b/models/src/test/java/org/onap/policy/clamp/models/acm/concepts/ParticipantsSupportedElementTypesTest.java index fac98043d..5a82466d6 100644 --- a/models/src/test/java/org/onap/policy/clamp/models/acm/concepts/ParticipantsSupportedElementTypesTest.java +++ b/models/src/test/java/org/onap/policy/clamp/models/acm/concepts/ParticipantsSupportedElementTypesTest.java @@ -31,16 +31,15 @@ import org.junit.jupiter.api.Test; public class ParticipantsSupportedElementTypesTest { private static final String ID = "a95757ba-b34a-4049-a2a8-46773abcbe5e"; - private static final String PARTICIPANT_ID = "a78757co-b34a-8949-a2a8-46773abcbe2a"; @Test void testParticipant() { - ParticipantSupportedElementType p0 = new ParticipantSupportedElementType(); + var p0 = new ParticipantSupportedElementType(); p0.setId(UUID.fromString(ID)); assertEquals(ID, p0.getId().toString()); - ParticipantSupportedElementType p1 = new ParticipantSupportedElementType(p0); + var p1 = new ParticipantSupportedElementType(p0); assertThat(p0).usingRecursiveComparison().isEqualTo(p1); } @@ -48,27 +47,27 @@ public class ParticipantsSupportedElementTypesTest { @Test void testParticipantLombok() { assertNotNull(new ParticipantSupportedElementType()); - ParticipantSupportedElementType p0 = new ParticipantSupportedElementType(); + var p0 = new ParticipantSupportedElementType(); - assertThat(p0.toString()).contains("org.onap.policy.clamp.models.acm.concepts.ParticipantSupportedElementType"); + assertThat(p0.toString()).contains("ParticipantSupportedElementType"); assertThat(p0.hashCode()).isNotZero(); assertThat(p0).usingRecursiveComparison().isEqualTo(new ParticipantSupportedElementType(p0)); assertNotEquals(null, p0); - ParticipantSupportedElementType p1 = new ParticipantSupportedElementType(); + var p1 = new ParticipantSupportedElementType(); p1.setId(UUID.fromString(ID)); p1.setTypeName("name"); p1.setTypeVersion("1.0.0"); - assertThat(p1.toString()).contains("org.onap.policy.clamp.models.acm.concepts.ParticipantSupportedElementType"); + assertThat(p1.toString()).contains("ParticipantSupportedElementType"); assertNotEquals(0, p1.hashCode()); assertNotEquals(p1, p0); assertNotEquals(null, p1); - ParticipantSupportedElementType p2 = new ParticipantSupportedElementType(); + var p2 = new ParticipantSupportedElementType(); p2.setId(p0.getId()); assertThat(p0).usingRecursiveComparison().isEqualTo(p2); 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 59e3767d1..a27a74be4 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 @@ -1,6 +1,6 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2021-2022 Nordix Foundation. + * Copyright (C) 2021-2023 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,24 +22,26 @@ 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.fail; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.util.List; +import java.util.Map; import java.util.Optional; import java.util.UUID; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.mockito.Mockito; +import org.onap.policy.clamp.models.acm.concepts.AcTypeState; import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionDefinition; +import org.onap.policy.clamp.models.acm.concepts.NodeTemplateState; import org.onap.policy.clamp.models.acm.document.concepts.DocToscaServiceTemplate; import org.onap.policy.clamp.models.acm.persistence.concepts.JpaAutomationCompositionDefinition; import org.onap.policy.clamp.models.acm.persistence.repository.AutomationCompositionDefinitionRepository; -import org.onap.policy.common.utils.coder.CoderException; -import org.onap.policy.common.utils.coder.StandardYamlCoder; -import org.onap.policy.common.utils.resources.ResourceUtils; +import org.onap.policy.clamp.models.acm.utils.CommonTestData; +import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier; import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate; import org.springframework.data.domain.Example; @@ -49,19 +51,17 @@ class AcDefinitionProviderTest { 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(); - private static ToscaServiceTemplate inputServiceTemplate; @BeforeAll static void loadServiceTemplate() { - inputServiceTemplate = getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML); + inputServiceTemplate = CommonTestData.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML); } @Test void testDocCopyCompare() { - var inputServiceTemplateProperties = getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML_PROP); + var inputServiceTemplateProperties = CommonTestData.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML_PROP); var docServiceTemplate = new DocToscaServiceTemplate(inputServiceTemplateProperties); var docServiceTemplateCopy = new DocToscaServiceTemplate(docServiceTemplate); @@ -71,8 +71,8 @@ class AcDefinitionProviderTest { var acmDefinition = getAcDefinition(docServiceTemplate); var acmDefinitionCopy = getAcDefinition(docServiceTemplateCopy); - assertThat(acmDefinition.getServiceTemplate().getName()).isEqualTo( - acmDefinitionCopy.getServiceTemplate().getName()); + assertThat(acmDefinition.getServiceTemplate().getName()) + .isEqualTo(acmDefinitionCopy.getServiceTemplate().getName()); } @@ -91,6 +91,65 @@ class AcDefinitionProviderTest { assertThat(result.getServiceTemplate()).isEqualTo(docServiceTemplate.toAuthorative()); } + @Test + void testUpdateServiceTemplate() { + var acmDefinitionRepository = mock(AutomationCompositionDefinitionRepository.class); + var acDefinitionProvider = new AcDefinitionProvider(acmDefinitionRepository); + acDefinitionProvider.updateServiceTemplate(UUID.randomUUID(), inputServiceTemplate); + verify(acmDefinitionRepository).save(any(JpaAutomationCompositionDefinition.class)); + } + + @Test + void testUpdateAcDefinition() { + var acmDefinitionRepository = mock(AutomationCompositionDefinitionRepository.class); + var acDefinitionProvider = new AcDefinitionProvider(acmDefinitionRepository); + var acmDefinition = getAcDefinition(new DocToscaServiceTemplate(inputServiceTemplate)); + acDefinitionProvider.updateAcDefinition(acmDefinition); + verify(acmDefinitionRepository).save(any(JpaAutomationCompositionDefinition.class)); + } + + @Test + void testGetAcDefinition() { + var jpa = new JpaAutomationCompositionDefinition(); + jpa.fromAuthorative(getAcDefinition(new DocToscaServiceTemplate(inputServiceTemplate))); + var acmDefinitionRepository = mock(AutomationCompositionDefinitionRepository.class); + when(acmDefinitionRepository.findById(jpa.getCompositionId())).thenReturn(Optional.of(jpa)); + var acDefinitionProvider = new AcDefinitionProvider(acmDefinitionRepository); + var result = acDefinitionProvider.getAcDefinition(UUID.fromString(jpa.getCompositionId())); + assertThat(result).isNotNull(); + } + + @Test + void testGetAcDefinitionNotFound() { + var acmDefinitionRepository = mock(AutomationCompositionDefinitionRepository.class); + var acDefinitionProvider = new AcDefinitionProvider(acmDefinitionRepository); + var compositionId = UUID.randomUUID(); + assertThatThrownBy(() -> acDefinitionProvider.getAcDefinition(compositionId)) + .hasMessage("Get serviceTemplate \"" + compositionId + "\" failed, serviceTemplate does not exist"); + } + + @Test + void testFindAcDefinition() { + var jpa = new JpaAutomationCompositionDefinition(); + jpa.fromAuthorative(getAcDefinition(new DocToscaServiceTemplate(inputServiceTemplate))); + var acmDefinitionRepository = mock(AutomationCompositionDefinitionRepository.class); + when(acmDefinitionRepository.findById(jpa.getCompositionId())).thenReturn(Optional.of(jpa)); + var acDefinitionProvider = new AcDefinitionProvider(acmDefinitionRepository); + var result = acDefinitionProvider.findAcDefinition(UUID.fromString(jpa.getCompositionId())); + assertThat(result).isNotNull(); + } + + @Test + void testGetAllAcDefinitions() { + var jpa = new JpaAutomationCompositionDefinition(); + jpa.fromAuthorative(getAcDefinition(new DocToscaServiceTemplate(inputServiceTemplate))); + var acmDefinitionRepository = mock(AutomationCompositionDefinitionRepository.class); + when(acmDefinitionRepository.findAll()).thenReturn(List.of(jpa)); + var acDefinitionProvider = new AcDefinitionProvider(acmDefinitionRepository); + var result = acDefinitionProvider.getAllAcDefinitions(); + assertThat(result).hasSize(1); + } + @Test void testDeleteAcDefintion() { var docServiceTemplate = new DocToscaServiceTemplate(inputServiceTemplate); @@ -135,22 +194,13 @@ class AcDefinitionProviderTest { private AutomationCompositionDefinition getAcDefinition(DocToscaServiceTemplate docServiceTemplate) { var acmDefinition = new AutomationCompositionDefinition(); acmDefinition.setCompositionId(UUID.randomUUID()); + acmDefinition.setState(AcTypeState.COMMISSIONED); acmDefinition.setServiceTemplate(docServiceTemplate.toAuthorative()); + var nodeTemplateState = new NodeTemplateState(); + nodeTemplateState.setNodeTemplateStateId(UUID.randomUUID()); + nodeTemplateState.setNodeTemplateId(new ToscaConceptIdentifier("name", "1.0.0")); + nodeTemplateState.setState(AcTypeState.COMMISSIONED); + acmDefinition.setElementStateMap(Map.of(nodeTemplateState.getNodeTemplateId().getName(), nodeTemplateState)); return acmDefinition; } - - /** - * Get ToscaServiceTemplate from resource. - * - * @param path path of the resource - */ - public static ToscaServiceTemplate getToscaServiceTemplate(String path) { - - try { - return YAML_TRANSLATOR.decode(ResourceUtils.getResourceAsStream(path), ToscaServiceTemplate.class); - } catch (CoderException e) { - fail("Cannot read or decode " + path); - return null; - } - } } diff --git a/models/src/test/java/org/onap/policy/clamp/models/acm/utils/CommonTestData.java b/models/src/test/java/org/onap/policy/clamp/models/acm/utils/CommonTestData.java index 88ace1706..21666e484 100644 --- a/models/src/test/java/org/onap/policy/clamp/models/acm/utils/CommonTestData.java +++ b/models/src/test/java/org/onap/policy/clamp/models/acm/utils/CommonTestData.java @@ -20,7 +20,13 @@ package org.onap.policy.clamp.models.acm.utils; +import static org.junit.jupiter.api.Assertions.fail; + import java.util.UUID; +import org.onap.policy.common.utils.coder.CoderException; +import org.onap.policy.common.utils.coder.StandardYamlCoder; +import org.onap.policy.common.utils.resources.ResourceUtils; +import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate; /** * Class to hold/create all parameters for test cases. @@ -29,6 +35,8 @@ import java.util.UUID; public class CommonTestData { public static final UUID PARTCICIPANT_ID = UUID.randomUUID(); + private static final StandardYamlCoder YAML_TRANSLATOR = new StandardYamlCoder(); + /** * Returns participantId for test cases. @@ -56,4 +64,18 @@ public class CommonTestData { public static UUID getRndParticipantId() { return UUID.randomUUID(); } + + /** + * Get ToscaServiceTemplate from resource. + * + * @param path path of the resource + */ + public static ToscaServiceTemplate getToscaServiceTemplate(String path) { + try { + return YAML_TRANSLATOR.decode(ResourceUtils.getResourceAsStream(path), ToscaServiceTemplate.class); + } catch (CoderException e) { + fail("Cannot read or decode " + path); + return null; + } + } } -- cgit 1.2.3-korg