diff options
author | Satoshi Fujii <fujii-satoshi@jp.fujitsu.com> | 2020-04-08 18:11:41 +0900 |
---|---|---|
committer | Ofir Sonsino <ofir.sonsino@intl.att.com> | 2020-06-15 12:27:54 +0000 |
commit | c74aa44beabc303a5cf709625ee802dcd1bb9f5d (patch) | |
tree | 658ff057f42a6e07bd6c7c457f80025819b62d2a /catalog-be/src/test | |
parent | 0b3c65c18977212bc74b1f01cefe5ebecc2586f3 (diff) |
Add some unit tests
This change added some unit tests for ComponentInstanceBusinessLogic
to increase test coverage and removed unused variables for better
readability.
Also the test class was rewritten to use JUnit 5.
Change-Id: I519976d00d8eccc194f8f1168d45f95392808652
Signed-off-by: Satoshi Fujii <fujii-satoshi@jp.fujitsu.com>
Issue-ID: SDC-2885
Diffstat (limited to 'catalog-be/src/test')
-rw-r--r-- | catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/ComponentInstanceBusinessLogicTest.java | 554 |
1 files changed, 403 insertions, 151 deletions
diff --git a/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/ComponentInstanceBusinessLogicTest.java b/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/ComponentInstanceBusinessLogicTest.java index 9fc6b5493c..8a005ff9aa 100644 --- a/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/ComponentInstanceBusinessLogicTest.java +++ b/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/ComponentInstanceBusinessLogicTest.java @@ -21,13 +21,16 @@ package org.openecomp.sdc.be.components.impl; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertSame; -import static org.junit.Assert.fail; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertSame; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.DynamicTest.dynamicTest; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anySet; import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import fj.data.Either; @@ -42,16 +45,20 @@ import java.util.Optional; import java.util.Set; import mockit.Deencapsulation; import org.apache.commons.lang3.tuple.ImmutablePair; +import org.apache.commons.lang3.tuple.Pair; import org.assertj.core.util.Lists; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DynamicTest; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestFactory; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; -import org.mockito.junit.MockitoJUnitRunner; +import org.mockito.junit.jupiter.MockitoExtension; import org.openecomp.sdc.be.components.impl.exceptions.ByActionStatusComponentException; +import org.openecomp.sdc.be.components.impl.exceptions.ByResponseFormatComponentException; import org.openecomp.sdc.be.components.impl.exceptions.ComponentException; import org.openecomp.sdc.be.components.validation.UserValidations; import org.openecomp.sdc.be.config.ConfigurationManager; @@ -59,9 +66,11 @@ import org.openecomp.sdc.be.dao.api.ActionStatus; import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus; import org.openecomp.sdc.be.dao.jsongraph.JanusGraphDao; import org.openecomp.sdc.be.dao.jsongraph.types.JsonParseFlagEnum; +import org.openecomp.sdc.be.datamodel.utils.ContainerInstanceTypesData; import org.openecomp.sdc.be.datatypes.elements.CapabilityDataDefinition; import org.openecomp.sdc.be.datatypes.elements.ForwardingPathDataDefinition; import org.openecomp.sdc.be.datatypes.elements.ForwardingPathElementDataDefinition; +import org.openecomp.sdc.be.datatypes.elements.GetInputValueDataDefinition; import org.openecomp.sdc.be.datatypes.elements.GetPolicyValueDataDefinition; import org.openecomp.sdc.be.datatypes.elements.ListDataDefinition; import org.openecomp.sdc.be.datatypes.elements.RequirementDataDefinition; @@ -69,8 +78,9 @@ import org.openecomp.sdc.be.datatypes.elements.SchemaDefinition; import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum; import org.openecomp.sdc.be.datatypes.enums.JsonPresentationFields; import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum; +import org.openecomp.sdc.be.datatypes.enums.OriginTypeEnum; +import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum; import org.openecomp.sdc.be.impl.ComponentsUtils; -import org.openecomp.sdc.be.impl.ServletUtils; import org.openecomp.sdc.be.model.ArtifactDefinition; import org.openecomp.sdc.be.model.CapabilityDefinition; import org.openecomp.sdc.be.model.CapabilityRequirementRelationship; @@ -97,28 +107,29 @@ import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus; import org.openecomp.sdc.be.model.operations.impl.GraphLockOperation; import org.openecomp.sdc.be.model.operations.impl.PropertyOperation; -import org.openecomp.sdc.be.user.UserBusinessLogic; import org.openecomp.sdc.common.api.ArtifactGroupTypeEnum; import org.openecomp.sdc.common.api.ArtifactTypeEnum; import org.openecomp.sdc.common.api.ConfigurationSource; import org.openecomp.sdc.common.impl.ExternalConfiguration; import org.openecomp.sdc.common.impl.FSConfigurationSource; +import org.openecomp.sdc.common.util.ValidationUtils; import org.openecomp.sdc.exception.ResponseFormat; /** * The test suite designed for test functionality of ComponentInstanceBusinessLogic class */ -@RunWith(MockitoJUnitRunner.class) -public class ComponentInstanceBusinessLogicTest { +@ExtendWith(MockitoExtension.class) +class ComponentInstanceBusinessLogicTest { private final static String USER_ID = "jh0003"; private final static String COMPONENT_ID = "componentId"; private final static String ORIGIN_COMPONENT_ID = "originComponentId"; - private final static String COMPONENT_INST_ID = "componentInstId"; + private final static String ORIGIN_COMPONENT_VERSION = "1.0"; private final static String TO_INSTANCE_ID = "toInstanceId"; private final static String TO_INSTANCE_NAME = "toInstanceName"; private final static String COMPONENT_INSTANCE_ID = "componentInstanceId"; + private final static String COMPONENT_INSTANCE_NAME = "componentInstanceName"; private final static String FROM_INSTANCE_ID = "fromInstanceId"; private final static String RELATION_ID = "relationId"; private final static String CAPABILITY_OWNER_ID = "capabilityOwnerId"; @@ -135,85 +146,83 @@ public class ComponentInstanceBusinessLogicTest { private final static String ARTIFACT_5 = "cloudtech_openstack_configtemplate.zip"; private final static String PROP_NAME = "propName"; private final static String NON_EXIST_NAME = "nonExistName"; + private final static String INPUT_ID = "inputId"; + private final static String ICON_NAME = "icon"; - static ConfigurationSource configurationSource = new FSConfigurationSource( + private static ConfigurationSource configurationSource = new FSConfigurationSource( ExternalConfiguration.getChangeListener(), "src/test/resources/config/catalog-be"); - static ConfigurationManager configurationManager = new ConfigurationManager(configurationSource); + private static ConfigurationManager configurationManager = new ConfigurationManager(configurationSource); @InjectMocks private static ComponentInstanceBusinessLogic componentInstanceBusinessLogic; @Mock private ComponentInstancePropInput componentInstancePropInput; @Mock - ArtifactsBusinessLogic artifactsBusinessLogic; + private ArtifactsBusinessLogic artifactsBusinessLogic; @Mock private ComponentsUtils componentsUtils; @Mock - private ServletUtils servletUtils; - @Mock - private ResponseFormat responseFormat; - @Mock private ToscaOperationFacade toscaOperationFacade; @Mock - private UserBusinessLogic userAdmin; - @Mock private ForwardingPathOperation forwardingPathOperation; @Mock private User user; @Mock private UserValidations userValidations; @Mock - GraphLockOperation graphLockOperation; + private GraphLockOperation graphLockOperation; @Mock private JanusGraphDao janusGraphDao; @Mock - ApplicationDataTypeCache dataTypeCache; + private ApplicationDataTypeCache dataTypeCache; + @Mock + private PropertyOperation propertyOperation; @Mock - PropertyOperation propertyOperation; + private ContainerInstanceTypesData containerInstanceTypeData; @Mock - ApplicationDataTypeCache applicationDataTypeCache; + private CompositionBusinessLogic compositionBusinessLogic; private Component service; private Component resource; private ComponentInstance toInstance; private ComponentInstance fromInstance; - private CapabilityDataDefinition capability; - private RequirementDataDefinition requirement; private RequirementCapabilityRelDef relation; + private List<ComponentInstanceProperty> ciPropertyList; + private List<ComponentInstanceInput> ciInputList; - @Before - public void init() { - MockitoAnnotations.initMocks(componentInstanceBusinessLogic); + @BeforeEach + void init() { + MockitoAnnotations.initMocks(this); stubMethods(); createComponents(); } @Test - public void testGetRelationByIdSuccess() { + void testGetRelationByIdSuccess() { getServiceRelationByIdSuccess(service); getServiceRelationByIdSuccess(resource); } @Test - public void testGetRelationByIdUserValidationFailure() { + void testGetRelationByIdUserValidationFailure() { getServiceRelationByIdUserValidationFailure(service); getServiceRelationByIdUserValidationFailure(resource); } @Test - public void testGetRelationByIdComponentNotFoundFailure() { + void testGetRelationByIdComponentNotFoundFailure() { getRelationByIdComponentNotFoundFailure(service); getRelationByIdComponentNotFoundFailure(resource); } @Test - public void testForwardingPathOnVersionChange() { + void testForwardingPathOnVersionChange() { getforwardingPathOnVersionChange(); } @Test - public void testIsCloudSpecificArtifact() { + void testIsCloudSpecificArtifact() { assertThat(componentInstanceBusinessLogic.isCloudSpecificArtifact(ARTIFACT_1)).isTrue(); assertThat(componentInstanceBusinessLogic.isCloudSpecificArtifact(ARTIFACT_2)).isTrue(); assertThat(componentInstanceBusinessLogic.isCloudSpecificArtifact(ARTIFACT_3)).isTrue(); @@ -264,7 +273,7 @@ public class ComponentInstanceBusinessLogicTest { } @Test - public void testCreateOrUpdatePropertiesValues2() { + void testCreateOrUpdatePropertiesValues2() { String containerComponentID = "containerId"; String resourceInstanceId = "resourceId"; String componentInstanceID = "componentInstance"; @@ -296,12 +305,7 @@ public class ComponentInstanceBusinessLogicTest { ci.setUniqueId("resourceId"); component.setComponentInstances(Arrays.asList(ci, createComponentInstance("ci2"), createComponentInstance(componentInstanceID))); - HashMap<String, DataTypeDefinition> dataTypeDefinitionHashMap = new HashMap<>(); - DataTypeDefinition dataTypeDefinition = new DataTypeDefinition(); - dataTypeDefinition.setName("string"); - dataTypeDefinitionHashMap.put("string", dataTypeDefinition); - //when(userValidations.validateUserExists(user.getUserId(), false)).thenReturn(user); when(toscaOperationFacade.getToscaElement(containerComponentID, JsonParseFlagEnum.ParseAll)) .thenReturn(Either.left(component)); when(graphLockOperation.lockComponent(containerComponentID, NodeTypeEnum.ResourceInstance)) @@ -327,7 +331,7 @@ public class ComponentInstanceBusinessLogicTest { } @Test - public void testCreateOrUpdatePropertiesValuesPropertyNotExists() { + void testCreateOrUpdatePropertiesValuesPropertyNotExists() { String containerComponentID = "containerId"; String resourceInstanceId = "resourceId"; String componentInstanceID = "componentInstance"; @@ -340,10 +344,6 @@ public class ComponentInstanceBusinessLogicTest { List<ComponentInstanceProperty> origProperties = new ArrayList<>(); - Map<String, DataTypeDefinition> types = new HashMap<>(); - DataTypeDefinition dataTypeDef = new DataTypeDefinition(); - types.put("string", dataTypeDef); - Component component = new Service(); component.setLastUpdaterUserId("userId"); component.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT); @@ -354,18 +354,11 @@ public class ComponentInstanceBusinessLogicTest { ci.setUniqueId("resourceId"); component.setComponentInstances(Arrays.asList(ci, createComponentInstance("ci2"), createComponentInstance(componentInstanceID))); - HashMap<String, DataTypeDefinition> dataTypeDefinitionHashMap = new HashMap<>(); - DataTypeDefinition dataTypeDefinition = new DataTypeDefinition(); - dataTypeDefinition.setName("string"); - dataTypeDefinitionHashMap.put("string", dataTypeDefinition); - //when(userValidations.validateUserExists(user.getUserId(), false)).thenReturn(user); when(toscaOperationFacade.getToscaElement(containerComponentID, JsonParseFlagEnum.ParseAll)) .thenReturn(Either.left(component)); when(graphLockOperation.lockComponent(containerComponentID, NodeTypeEnum.ResourceInstance)) .thenReturn(StorageOperationStatus.OK); - //when(dataTypeCache.getAll()).thenReturn(Either.left(types)); - //when (janusGraphDao.commit()).thenReturn(JanusGraphOperationStatus.OK); when(graphLockOperation.unlockComponent(containerComponentID, NodeTypeEnum.ResourceInstance)) .thenReturn(StorageOperationStatus.OK); @@ -379,7 +372,7 @@ public class ComponentInstanceBusinessLogicTest { } @Test - public void testCreateOrUpdatePropertiesValuesValidationFailure() { + void testCreateOrUpdatePropertiesValuesValidationFailure() { String containerComponentID = "containerId"; String resourceInstanceId = "resourceId"; String componentInstanceID = "componentInstance"; @@ -411,12 +404,7 @@ public class ComponentInstanceBusinessLogicTest { ci.setUniqueId("resourceId"); component.setComponentInstances(Arrays.asList(ci, createComponentInstance("ci2"), createComponentInstance(componentInstanceID))); - HashMap<String, DataTypeDefinition> dataTypeDefinitionHashMap = new HashMap<>(); - DataTypeDefinition dataTypeDefinition = new DataTypeDefinition(); - dataTypeDefinition.setName("string"); - dataTypeDefinitionHashMap.put("string", dataTypeDefinition); - //when(userValidations.validateUserExists(user.getUserId(), false)).thenReturn(user); when(toscaOperationFacade.getToscaElement(containerComponentID, JsonParseFlagEnum.ParseAll)) .thenReturn(Either.left(component)); when(graphLockOperation.lockComponent(containerComponentID, NodeTypeEnum.ResourceInstance)) @@ -427,18 +415,14 @@ public class ComponentInstanceBusinessLogicTest { when(componentsUtils.convertFromStorageResponse(StorageOperationStatus.BAD_REQUEST)) .thenReturn(ActionStatus.INVALID_CONTENT); - try { - componentInstanceBusinessLogic.createOrUpdatePropertiesValues( - ComponentTypeEnum.RESOURCE_INSTANCE, containerComponentID, resourceInstanceId, properties, "userId"); - } catch (ComponentException e) { - assertThat(e.getActionStatus()).isEqualTo(ActionStatus.INVALID_CONTENT); - return; - } - fail(); + ComponentException e = assertThrows(ComponentException.class, + () -> componentInstanceBusinessLogic.createOrUpdatePropertiesValues( + ComponentTypeEnum.RESOURCE_INSTANCE, containerComponentID, resourceInstanceId, properties, "userId")); + assertThat(e.getActionStatus()).isEqualTo(ActionStatus.INVALID_CONTENT); } @Test - public void testCreateOrUpdatePropertiesValuesMissingFieldFailure() { + void testCreateOrUpdatePropertiesValuesMissingFieldFailure() { String containerComponentID = "containerId"; String resourceInstanceId = "resourceId"; String componentInstanceID = "componentInstance"; @@ -466,12 +450,6 @@ public class ComponentInstanceBusinessLogicTest { component.setComponentInstances(Arrays.asList(ci, createComponentInstance("ci2"), createComponentInstance(componentInstanceID))); - HashMap<String, DataTypeDefinition> dataTypeDefinitionHashMap = new HashMap<>(); - DataTypeDefinition dataTypeDefinition = new DataTypeDefinition(); - dataTypeDefinition.setName("string"); - dataTypeDefinitionHashMap.put("string", dataTypeDefinition); - - //when(userValidations.validateUserExists(user.getUserId(), false)).thenReturn(user); when(toscaOperationFacade.getToscaElement(containerComponentID, JsonParseFlagEnum.ParseAll)) .thenReturn(Either.left(component)); when(graphLockOperation.lockComponent(containerComponentID, NodeTypeEnum.ResourceInstance)) @@ -486,7 +464,7 @@ public class ComponentInstanceBusinessLogicTest { } @Test - public void testDeleteForwardingPathsWhenComponentinstanceDeleted() { + void testDeleteForwardingPathsWhenComponentinstanceDeleted() { ComponentTypeEnum containerComponentType = ComponentTypeEnum.findByParamName("services"); String containerComponentID = "Service-comp"; @@ -513,7 +491,7 @@ public class ComponentInstanceBusinessLogicTest { } @Test - public void testAddComponentInstanceDeploymentArtifacts() { + void testAddComponentInstanceDeploymentArtifacts() { Component containerComponent = new Service(); ComponentInstance componentInstance = new ComponentInstance(); @@ -557,7 +535,8 @@ public class ComponentInstanceBusinessLogicTest { when(toscaOperationFacade.addDeploymentArtifactsToInstance(containerComponent.getUniqueId(), componentInstance, finalDeploymentArtifacts)).thenReturn(StorageOperationStatus.OK); when(toscaOperationFacade - .addGroupInstancesToComponentInstance(containerComponent, componentInstance, new ArrayList<>(), new HashMap<>())) + .addGroupInstancesToComponentInstance(containerComponent, componentInstance, new ArrayList<>(), + new HashMap<>())) .thenReturn(StorageOperationStatus.OK); when(toscaOperationFacade .addInformationalArtifactsToInstance(containerComponent.getUniqueId(), componentInstance, null)) @@ -627,7 +606,6 @@ public class ComponentInstanceBusinessLogicTest { return forwardingPaths; } - @SuppressWarnings("unchecked") private void getServiceRelationByIdSuccess(Component component) { Either<Component, StorageOperationStatus> getComponentRes = Either.left(component); when(toscaOperationFacade.getToscaElement(eq(COMPONENT_ID), any(ComponentParametersView.class))) @@ -651,7 +629,6 @@ public class ComponentInstanceBusinessLogicTest { } private void getRelationByIdComponentNotFoundFailure(Component component) { - Either<User, ActionStatus> eitherCreator = Either.left(user); Either<Component, StorageOperationStatus> getComponentRes = Either.right(StorageOperationStatus.NOT_FOUND); when(toscaOperationFacade.getToscaElement(eq(COMPONENT_ID), any(ComponentParametersView.class))) .thenReturn(getComponentRes); @@ -664,8 +641,8 @@ public class ComponentInstanceBusinessLogicTest { } private void stubMethods() { - when(userValidations.validateUserExists(eq(USER_ID))).thenReturn(user); - when(componentsUtils + Mockito.lenient().when(userValidations.validateUserExists(eq(USER_ID))).thenReturn(user); + Mockito.lenient().when(componentsUtils .convertFromStorageResponse(eq(StorageOperationStatus.GENERAL_ERROR), any(ComponentTypeEnum.class))) .thenReturn(ActionStatus.GENERAL_ERROR); } @@ -673,6 +650,8 @@ public class ComponentInstanceBusinessLogicTest { private void createComponents() { createRelation(); createInstances(); + createProperties(); + createInputs(); createService(); createResource(); } @@ -697,6 +676,15 @@ public class ComponentInstanceBusinessLogicTest { service.setRequirements(fromInstance.getRequirements()); service.setComponentType(ComponentTypeEnum.SERVICE); service.setState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT); + service.setLastUpdaterUserId(USER_ID); + + Map<String, List<ComponentInstanceProperty>> ciPropertyMap = new HashMap<>(); + ciPropertyMap.put(TO_INSTANCE_ID, ciPropertyList); + service.setComponentInstancesProperties(ciPropertyMap); + + Map<String, List<ComponentInstanceInput>> ciInputMap = new HashMap<>(); + ciInputMap.put(TO_INSTANCE_ID, ciInputList); + service.setComponentInstancesInputs(ciInputMap); } private void createInstances() { @@ -707,7 +695,7 @@ public class ComponentInstanceBusinessLogicTest { fromInstance = new ComponentInstance(); fromInstance.setUniqueId(FROM_INSTANCE_ID); - capability = new CapabilityDataDefinition(); + CapabilityDataDefinition capability = new CapabilityDataDefinition(); capability.setOwnerId(CAPABILITY_OWNER_ID); capability.setUniqueId(CAPABILITY_UID); capability.setName(CAPABILITY_NAME); @@ -719,7 +707,7 @@ public class ComponentInstanceBusinessLogicTest { capabilityDefinition.setProperties(properties); capabilities.put(capability.getName(), Lists.newArrayList(capabilityDefinition)); - requirement = new RequirementDataDefinition(); + RequirementDataDefinition requirement = new RequirementDataDefinition(); requirement.setOwnerId(REQUIREMENT_OWNER_ID); requirement.setUniqueId(REQUIREMENT_UID); requirement.setName(REQUIREMENT_NAME); @@ -730,6 +718,7 @@ public class ComponentInstanceBusinessLogicTest { toInstance.setCapabilities(capabilities); fromInstance.setRequirements(requirements); + } private void createRelation() { @@ -755,12 +744,43 @@ public class ComponentInstanceBusinessLogicTest { relationInfo.setRelationships(relationshipImpl); } + private void createProperties() { + // Create GetInputValueData + GetInputValueDataDefinition inputValueDef = new GetInputValueDataDefinition(); + inputValueDef.setInputId(INPUT_ID); + List<GetInputValueDataDefinition> inputValueDefList = new ArrayList<>(); + inputValueDefList.add(inputValueDef); + // Create ComponentInstanceProperty + ComponentInstanceProperty ciProperty = new ComponentInstanceProperty(); + ciProperty.setGetInputValues(inputValueDefList); + ciProperty.setName(PROP_NAME); + // Create ComponentInstanceProperty list + ciPropertyList = new ArrayList<>(); + ciPropertyList.add(ciProperty); + } + + private void createInputs() { + // Create GetInputValueData + GetInputValueDataDefinition inputValueDef = new GetInputValueDataDefinition(); + inputValueDef.setInputId(INPUT_ID); + List<GetInputValueDataDefinition> inputValueDefList = new ArrayList<>(); + inputValueDefList.add(inputValueDef); + // Create ComponentInstanceInput + ComponentInstanceInput ciInput = new ComponentInstanceInput(); + ciInput.setUniqueId(INPUT_ID); + ciInput.setName(PROP_NAME); + ciInput.setGetInputValues(inputValueDefList); + // Create ComponentInstanceInput list + ciInputList = new ArrayList<>(); + ciInputList.add(ciInput); + } + private ComponentInstanceBusinessLogic createTestSubject() { return componentInstanceBusinessLogic; } @Test - public void testChangeServiceProxyVersion() { + void testChangeServiceProxyVersion() { ComponentInstanceBusinessLogic componentInstanceBusinessLogic; Either<ComponentInstance, ResponseFormat> result; @@ -772,7 +792,7 @@ public class ComponentInstanceBusinessLogicTest { } @Test - public void testCreateServiceProxy() { + void testCreateServiceProxy() { ComponentInstanceBusinessLogic testSubject; Either<ComponentInstance, ResponseFormat> result; @@ -783,7 +803,7 @@ public class ComponentInstanceBusinessLogicTest { } @Test - public void testDeleteServiceProxy() { + void testDeleteServiceProxy() { ComponentInstanceBusinessLogic testSubject; Either<ComponentInstance, ResponseFormat> result; @@ -795,33 +815,54 @@ public class ComponentInstanceBusinessLogicTest { } @Test - public void testGetComponentInstanceInputsByInputId() { - ComponentInstanceBusinessLogic testSubject; + void testGetComponentInstanceInputsByInputIdEmpty() { Component component = new Service(); String inputId = ""; List<ComponentInstanceInput> result; - // default test - testSubject = createTestSubject(); - result = testSubject.getComponentInstanceInputsByInputId(component, inputId); + result = componentInstanceBusinessLogic.getComponentInstanceInputsByInputId(component, inputId); assertNotNull(result); + assertThat(result.isEmpty()).isTrue(); } @Test - public void testGetComponentInstancePropertiesByInputId() { - ComponentInstanceBusinessLogic testSubject; + void testGetComponentInstanceInputsByInputIdPresent() { + List<ComponentInstanceInput> result; + + result = componentInstanceBusinessLogic.getComponentInstanceInputsByInputId(service, INPUT_ID); + assertNotNull(result); + assertThat(result.isEmpty()).isFalse(); + assertThat(result.size()).isOne(); + ComponentInstanceInput resultInput = result.get(0); + assertThat(resultInput.getComponentInstanceId()).isEqualTo(TO_INSTANCE_ID); + assertThat(resultInput.getComponentInstanceName()).isEqualTo(TO_INSTANCE_NAME); + } + + @Test + void testGetComponentInstancePropertiesByInputIdEmpty() { Component component = new Service(); String inputId = ""; List<ComponentInstanceProperty> result; - // default test - testSubject = createTestSubject(); - result = testSubject.getComponentInstancePropertiesByInputId(component, inputId); + result = componentInstanceBusinessLogic.getComponentInstancePropertiesByInputId(component, inputId); + assertNotNull(result); + assertThat(result.isEmpty()).isTrue(); + } + + @Test + void testGetComponentInstancePropertiesByInputIdPresent() { + List<ComponentInstanceProperty> result; + + result = componentInstanceBusinessLogic.getComponentInstancePropertiesByInputId(service, INPUT_ID); assertNotNull(result); + assertThat(result.size()).isOne(); + ComponentInstanceProperty resultProperty = result.get(0); + assertThat(resultProperty.getComponentInstanceId()).isEqualTo(TO_INSTANCE_ID); + assertThat(resultProperty.getComponentInstanceName()).isEqualTo(TO_INSTANCE_NAME); } @Test - public void testGetRelationById() { + void testGetRelationById() { ComponentInstanceBusinessLogic testSubject; String componentId = ""; String relationId = ""; @@ -836,7 +877,7 @@ public class ComponentInstanceBusinessLogicTest { } @Test - public void testValidateParent() { + void testValidateParent() { ComponentInstanceBusinessLogic testSubject; createResource(); String nodeTemplateId = ""; @@ -849,7 +890,7 @@ public class ComponentInstanceBusinessLogicTest { } @Test - public void testGetComponentType() { + void testGetComponentType() { ComponentInstanceBusinessLogic testSubject; ComponentTypeEnum result; @@ -860,7 +901,7 @@ public class ComponentInstanceBusinessLogicTest { } @Test - public void testGetNewGroupName() { + void testGetNewGroupName() { ComponentInstanceBusinessLogic testSubject; String oldPrefix = ""; String newNormailzedPrefix = ""; @@ -875,10 +916,9 @@ public class ComponentInstanceBusinessLogicTest { } @Test - public void testUpdateComponentInstanceMetadata_3() { + void testUpdateComponentInstanceMetadata_3() { ComponentInstanceBusinessLogic testSubject; createInstances(); - ComponentInstance newComponentInstance = null; ComponentInstance result; // default test @@ -889,7 +929,7 @@ public class ComponentInstanceBusinessLogicTest { } @Test - public void testFindRelation() throws Exception { + void testFindRelation() { ComponentInstanceBusinessLogic testSubject; String relationId = ""; List<RequirementCapabilityRelDef> requirementCapabilityRelations = new ArrayList<>(); @@ -902,7 +942,7 @@ public class ComponentInstanceBusinessLogicTest { } @Test - public void testCreateOrUpdatePropertiesValues() throws Exception { + void testCreateOrUpdatePropertiesValues() { ComponentInstanceBusinessLogic testSubject; ComponentTypeEnum componentTypeEnum = ComponentTypeEnum.RESOURCE; createResource(); @@ -935,7 +975,7 @@ public class ComponentInstanceBusinessLogicTest { } @Test - public void testUpdateCapabilityPropertyOnContainerComponent() throws Exception { + void testUpdateCapabilityPropertyOnContainerComponent() { ComponentInstanceBusinessLogic testSubject; ComponentInstanceProperty property = new ComponentInstanceProperty(); String newValue = ""; @@ -952,7 +992,7 @@ public class ComponentInstanceBusinessLogicTest { } @Test - public void testCreateOrUpdateInstanceInputValues() throws Exception { + void testCreateOrUpdateInstanceInputValues() { ComponentInstanceBusinessLogic testSubject; ComponentTypeEnum componentTypeEnum = ComponentTypeEnum.RESOURCE; createResource(); @@ -984,7 +1024,7 @@ public class ComponentInstanceBusinessLogicTest { } @Test - public void testCreateOrUpdateGroupInstancePropertyValue() throws Exception { + void testCreateOrUpdateGroupInstancePropertyValue() { ComponentInstanceBusinessLogic testSubject; ComponentTypeEnum componentTypeEnum = ComponentTypeEnum.RESOURCE; createResource(); @@ -1017,7 +1057,7 @@ public class ComponentInstanceBusinessLogicTest { } @Test - public void testDeletePropertyValue() throws Exception { + void testDeletePropertyValue() { ComponentInstanceBusinessLogic testSubject; ComponentTypeEnum componentTypeEnum = ComponentTypeEnum.RESOURCE; createService(); @@ -1046,7 +1086,7 @@ public class ComponentInstanceBusinessLogicTest { } @Test - public void testGetComponentParametersViewForForwardingPath() throws Exception { + void testGetComponentParametersViewForForwardingPath() { ComponentInstanceBusinessLogic testSubject; ComponentParametersView result; @@ -1057,7 +1097,7 @@ public class ComponentInstanceBusinessLogicTest { } @Test - public void testGetResourceInstanceById() throws Exception { + void testGetResourceInstanceById() { ComponentInstanceBusinessLogic testSubject; createResource(); String instanceId = ""; @@ -1070,7 +1110,7 @@ public class ComponentInstanceBusinessLogicTest { } @Test - public void testUpdateInstanceCapabilityProperties_1() throws Exception { + void testUpdateInstanceCapabilityProperties_1() { ComponentInstanceBusinessLogic testSubject; ComponentTypeEnum componentTypeEnum = ComponentTypeEnum.RESOURCE; createResource(); @@ -1096,7 +1136,7 @@ public class ComponentInstanceBusinessLogicTest { } @Test - public void testCopyComponentInstanceWrongUserId() { + void testCopyComponentInstanceWrongUserId() { Either<Map<String, ComponentInstance>, ResponseFormat> result; ComponentInstance inputComponentInstance = createComponetInstanceFromComponent(resource); @@ -1125,7 +1165,7 @@ public class ComponentInstanceBusinessLogicTest { } @Test - public void testCopyComponentInstanceComponentWrongState() { + void testCopyComponentInstanceComponentWrongState() { Either<Map<String, ComponentInstance>, ResponseFormat> result; ComponentInstance inputComponentInstance = createComponetInstanceFromComponent(resource); String containerComponentId = service.getUniqueId(); @@ -1142,7 +1182,6 @@ public class ComponentInstanceBusinessLogicTest { .thenReturn(StorageOperationStatus.OK); when(graphLockOperation.lockComponent(Mockito.anyString(), eq(NodeTypeEnum.Service))) .thenReturn(StorageOperationStatus.OK); - Either<Component, StorageOperationStatus> getComponentRes = Either.left(resource); result = componentInstanceBusinessLogic .copyComponentInstance(inputComponentInstance, containerComponentId, componentInstanceId, USER_ID); assertNotNull(result); @@ -1151,7 +1190,7 @@ public class ComponentInstanceBusinessLogicTest { } @Test - public void testCopyComponentInstance() { + void testCopyComponentInstance() { Either<Map<String, ComponentInstance>, ResponseFormat> result; ComponentInstance inputComponentInstance = createComponetInstanceFromComponent(resource); String containerComponentId = service.getUniqueId(); @@ -1169,12 +1208,6 @@ public class ComponentInstanceBusinessLogicTest { .thenReturn(StorageOperationStatus.OK); when(graphLockOperation.lockComponent(Mockito.anyString(), eq(NodeTypeEnum.Service))) .thenReturn(StorageOperationStatus.OK); - Either<Component, StorageOperationStatus> getComponentRes = Either.left(resource); - ImmutablePair<Component, String> pair = new ImmutablePair<>(resource, TO_INSTANCE_ID); - Either<ImmutablePair<Component, String>, StorageOperationStatus> result2 = Either.left(pair); - Either<Map<String, ArtifactDefinition>, StorageOperationStatus> getResourceDeploymentArtifacts = Either - .left(new HashMap<String, ArtifactDefinition>()); - StorageOperationStatus artStatus = StorageOperationStatus.OK; result = componentInstanceBusinessLogic .copyComponentInstance(inputComponentInstance, containerComponentId, componentInstanceId, @@ -1188,7 +1221,7 @@ public class ComponentInstanceBusinessLogicTest { } @Test - public void testCreateOrUpdateAttributeValueForCopyPaste() { + void testCreateOrUpdateAttributeValueForCopyPaste() { ComponentInstance serviceComponentInstance = createComponetInstanceFromComponent(service); ComponentInstanceProperty attribute = new ComponentInstanceProperty(); attribute.setType("string"); @@ -1200,9 +1233,8 @@ public class ComponentInstanceBusinessLogicTest { service.setLastUpdaterUserId(USER_ID); service.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT); - Map<String, List<ComponentInstanceProperty>> instAttrsMap = - new HashMap<String, List<ComponentInstanceProperty>>(); - List<ComponentInstanceProperty> instAttrsList = new ArrayList<ComponentInstanceProperty>(); + Map<String, List<ComponentInstanceProperty>> instAttrsMap = new HashMap<>(); + List<ComponentInstanceProperty> instAttrsList = new ArrayList<>(); ComponentInstanceProperty prop = new ComponentInstanceProperty(); prop.setUniqueId(attribute.getUniqueId()); instAttrsList.add(prop); @@ -1237,7 +1269,7 @@ public class ComponentInstanceBusinessLogicTest { } @Test - public void testUpdateComponentInstanceProperty() { + void testUpdateComponentInstanceProperty() { String containerComponentId = service.getUniqueId(); String componentInstanceId = "dummy_id"; @@ -1259,11 +1291,11 @@ public class ComponentInstanceBusinessLogicTest { } @Test - public void testGetInputListDefaultValue() { + void testGetInputListDefaultValue() { Component component = service; String inputId = "dummy_id"; String defaultValue = "dummy_default_value"; - List<InputDefinition> newInputs = new ArrayList<InputDefinition>(); + List<InputDefinition> newInputs = new ArrayList<>(); InputDefinition in = new InputDefinition(); in.setUniqueId(inputId); in.setDefaultValue(defaultValue); @@ -1280,14 +1312,13 @@ public class ComponentInstanceBusinessLogicTest { } @Test - public void testBatchDeleteComponentInstanceFailureWrongType() { + void testBatchDeleteComponentInstanceFailureWrongType() { Map<String, List<String>> result; List<String> componentInstanceIdList = new ArrayList<>(); String containerComponentParam = "WRONG_TYPE"; String containerComponentId = "containerComponentId"; String componentInstanceId = "componentInstanceId"; componentInstanceIdList.add(componentInstanceId); - String userId = USER_ID; Map<String, List<String>> deleteErrorMap = new HashMap<>(); List<String> deleteErrorIds = new ArrayList<>(); deleteErrorIds.add(componentInstanceId); @@ -1301,7 +1332,7 @@ public class ComponentInstanceBusinessLogicTest { try { result = componentInstanceBusinessLogic .batchDeleteComponentInstance(containerComponentParam, containerComponentId, componentInstanceIdList, - userId); + USER_ID); assertNotNull(result); assertEquals(deleteErrorMap, result); } catch (ComponentException e) { @@ -1310,14 +1341,12 @@ public class ComponentInstanceBusinessLogicTest { } @Test - public void testBatchDeleteComponentInstanceFailureCompIds() { - Map<String, List<String>> result = new HashMap<>(); + void testBatchDeleteComponentInstanceFailureCompIds() { String containerComponentParam = ComponentTypeEnum.SERVICE_PARAM_NAME; String containerComponentId = "containerComponentId"; String componentInstanceId = "componentInstanceId"; List<String> componentInstanceIdList = new ArrayList<>(); componentInstanceIdList.add(componentInstanceId); - String userId = USER_ID; Map<String, List<String>> deleteErrorMap = new HashMap<>(); List<String> deleteErrorIds = new ArrayList<>(); deleteErrorIds.add(componentInstanceId); @@ -1328,9 +1357,8 @@ public class ComponentInstanceBusinessLogicTest { .thenReturn(err); try { - result = componentInstanceBusinessLogic - .batchDeleteComponentInstance(containerComponentParam, containerComponentId, componentInstanceIdList, - userId); + Map<String, List<String>> result = componentInstanceBusinessLogic.batchDeleteComponentInstance( + containerComponentParam, containerComponentId, componentInstanceIdList, USER_ID); assertNotNull(result); assertEquals(deleteErrorMap, result); } catch (ComponentException e) { @@ -1339,7 +1367,7 @@ public class ComponentInstanceBusinessLogicTest { } @Test - public void testBatchDeleteComponentInstanceSuccess() { + void testBatchDeleteComponentInstanceSuccess() { Map<String, List<String>> result; String containerComponentParam = ComponentTypeEnum.SERVICE_PARAM_NAME; LifecycleStateEnum oldLifeCycleState = service.getLifecycleState(); @@ -1348,7 +1376,6 @@ public class ComponentInstanceBusinessLogicTest { service.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT); String containerComponentId = service.getUniqueId(); String componentInstanceId = TO_INSTANCE_ID; - String userId = USER_ID; List<String> componentInstanceIdList = new ArrayList<>(); componentInstanceIdList.add(componentInstanceId); Map<String, List<String>> deleteErrorMap = new HashMap<>(); @@ -1370,7 +1397,7 @@ public class ComponentInstanceBusinessLogicTest { result = componentInstanceBusinessLogic .batchDeleteComponentInstance(containerComponentParam, containerComponentId, - componentInstanceIdList, userId); + componentInstanceIdList, USER_ID); assertNotNull(result); service.setLastUpdaterUserId(oldLastUpdatedUserId); @@ -1379,7 +1406,7 @@ public class ComponentInstanceBusinessLogicTest { } @Test - public void testDissociateRIFromRIFailDissociate() { + void testDissociateRIFromRIFailDissociate() { List<RequirementCapabilityRelDef> result; RequirementCapabilityRelDef ref = new RequirementCapabilityRelDef(); @@ -1396,7 +1423,6 @@ public class ComponentInstanceBusinessLogicTest { requirementDefList.add(ref); ComponentTypeEnum componentTypeEnum = service.getComponentType(); String componentId = service.getUniqueId(); - String userId = USER_ID; LifecycleStateEnum oldLifeCycleState = service.getLifecycleState(); String oldLastUpdatedUserId = service.getLastUpdaterUserId(); service.setLastUpdaterUserId(USER_ID); @@ -1417,7 +1443,7 @@ public class ComponentInstanceBusinessLogicTest { try { result = componentInstanceBusinessLogic - .batchDissociateRIFromRI(componentId, userId, requirementDefList, componentTypeEnum); + .batchDissociateRIFromRI(componentId, USER_ID, requirementDefList, componentTypeEnum); assertNotNull(result); assertEquals(new ArrayList<>(), result); } catch (ComponentException e) { @@ -1430,7 +1456,7 @@ public class ComponentInstanceBusinessLogicTest { } @Test - public void testDissociateRIFromRISuccess() { + void testDissociateRIFromRISuccess() { List<RequirementCapabilityRelDef> result; RequirementCapabilityRelDef ref = new RequirementCapabilityRelDef(); @@ -1438,7 +1464,6 @@ public class ComponentInstanceBusinessLogicTest { requirementDefList.add(ref); ComponentTypeEnum componentTypeEnum = service.getComponentType(); String componentId = service.getUniqueId(); - String userId = USER_ID; LifecycleStateEnum oldLifeCycleState = service.getLifecycleState(); String oldLastUpdatedUserId = service.getLastUpdaterUserId(); service.setLastUpdaterUserId(USER_ID); @@ -1456,7 +1481,7 @@ public class ComponentInstanceBusinessLogicTest { when(toscaOperationFacade.dissociateResourceInstances(componentId, ref)).thenReturn(resultEither); result = componentInstanceBusinessLogic - .batchDissociateRIFromRI(componentId, userId, requirementDefList, componentTypeEnum); + .batchDissociateRIFromRI(componentId, USER_ID, requirementDefList, componentTypeEnum); assertNotNull(result); service.setLastUpdaterUserId(oldLastUpdatedUserId); @@ -1466,7 +1491,7 @@ public class ComponentInstanceBusinessLogicTest { } @Test - public void testGetComponentInstancePropertyByPolicyId_success() { + void testGetComponentInstancePropertyByPolicyId_success() { Optional<ComponentInstanceProperty> propertyCandidate = getComponentInstanceProperty(PROP_NAME); @@ -1475,7 +1500,7 @@ public class ComponentInstanceBusinessLogicTest { } @Test - public void testGetComponentInstancePropertyByPolicyId_failure() { + void testGetComponentInstancePropertyByPolicyId_failure() { Optional<ComponentInstanceProperty> propertyCandidate = getComponentInstanceProperty(NON_EXIST_NAME); @@ -1490,14 +1515,14 @@ public class ComponentInstanceBusinessLogicTest { componentInstanceProperty.setGetPolicyValues(policyDefinition.getGetPolicyValues()); service.setComponentInstancesProperties( - Collections.singletonMap(COMPONENT_INST_ID, Collections.singletonList(componentInstanceProperty))); + Collections.singletonMap(COMPONENT_INSTANCE_ID, Collections.singletonList(componentInstanceProperty))); return componentInstanceBusinessLogic.getComponentInstancePropertyByPolicyId(service, policyDefinition); } private PolicyDefinition getPolicyDefinition() { PolicyDefinition policyDefinition = new PolicyDefinition(); - policyDefinition.setInstanceUniqueId(COMPONENT_INST_ID); + policyDefinition.setInstanceUniqueId(COMPONENT_INSTANCE_ID); policyDefinition.setName(PROP_NAME); GetPolicyValueDataDefinition getPolicy = new GetPolicyValueDataDefinition(); @@ -1522,4 +1547,231 @@ public class ComponentInstanceBusinessLogicTest { componentInst.setDeploymentArtifacts(component.getDeploymentArtifacts()); return componentInst; } + + // Prepare ComponentInstance & Resource objects used in createComponentInstance() tests + private Pair<ComponentInstance, Resource> prepareResourcesForCreateComponentInstanceTest() { + ComponentInstance instanceToBeCreated = new ComponentInstance(); + instanceToBeCreated.setName(COMPONENT_INSTANCE_NAME); + instanceToBeCreated.setUniqueId(COMPONENT_INSTANCE_ID); + instanceToBeCreated.setComponentUid(ORIGIN_COMPONENT_ID); + instanceToBeCreated.setOriginType(OriginTypeEnum.VF); + + Resource originComponent = new Resource(); + originComponent.setLifecycleState(LifecycleStateEnum.CERTIFIED); + originComponent.setResourceType(ResourceTypeEnum.VF); + originComponent.setVersion(ORIGIN_COMPONENT_VERSION); + originComponent.setIcon(ICON_NAME); + + return Pair.of(instanceToBeCreated, originComponent); + } + + // Common part for testing component instance name validation + private void testCreateComponentInstanceNameValidationFailure(String ciName) { + ComponentInstance ci = new ComponentInstance(); + ci.setName(ciName); + + // Stub for getting component + when(toscaOperationFacade.getToscaElement(eq(COMPONENT_ID), any(ComponentParametersView.class))) + .thenReturn(Either.left(service)); + + // Expecting ByActionStatusComponentException + ByActionStatusComponentException e = assertThrows(ByActionStatusComponentException.class, () -> { + componentInstanceBusinessLogic.createComponentInstance(ComponentTypeEnum.SERVICE_PARAM_NAME, COMPONENT_ID, USER_ID, ci); + }); + assertEquals(ActionStatus.INVALID_COMPONENT_NAME, e.getActionStatus()); + } + + @TestFactory + Iterable<DynamicTest> testCreateComponentInstanceNameValidationFailureFactory() { + String longName = String.join("", Collections.nCopies(ValidationUtils.COMPONENT_NAME_MAX_LENGTH + 1, "x")); + String invalidName = "componentInstance#name"; + return Arrays.asList( + dynamicTest("instance name is empty", () -> + testCreateComponentInstanceNameValidationFailure("")), + dynamicTest("instance name is too long", () -> + testCreateComponentInstanceNameValidationFailure(longName)), + dynamicTest("instance name includes invalid character", () -> + testCreateComponentInstanceNameValidationFailure(invalidName)) + ); + } + + @Test + void testCreateComponentInstanceFailToGetComponent() { + ComponentInstance ci = prepareResourcesForCreateComponentInstanceTest().getLeft(); + + // Stub for getting component + when(toscaOperationFacade.getToscaElement(eq(COMPONENT_ID), any(ComponentParametersView.class))) + .thenReturn(Either.left(service)); + when(toscaOperationFacade.getToscaFullElement(eq(ORIGIN_COMPONENT_ID))) + .thenReturn(Either.right(StorageOperationStatus.NOT_FOUND)); + when(componentsUtils.convertFromStorageResponse(StorageOperationStatus.NOT_FOUND, ComponentTypeEnum.RESOURCE)) + .thenReturn(ActionStatus.RESOURCE_NOT_FOUND); + + ByActionStatusComponentException e = assertThrows(ByActionStatusComponentException.class, () -> { + componentInstanceBusinessLogic.createComponentInstance(ComponentTypeEnum.SERVICE_PARAM_NAME, COMPONENT_ID, USER_ID, ci); + }); + assertThat(e.getActionStatus()).isEqualTo(ActionStatus.RESOURCE_NOT_FOUND); + } + + @Test + void testCreateComponentInstanceFailureInvalidState() { + Pair<ComponentInstance, Resource> p = prepareResourcesForCreateComponentInstanceTest(); + ComponentInstance ci = p.getLeft(); + Resource originComponent = p.getRight(); + originComponent.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT); + + // Stub for getting component + when(toscaOperationFacade.getToscaElement(eq(COMPONENT_ID), any(ComponentParametersView.class))) + .thenReturn(Either.left(service)); + when(toscaOperationFacade.getToscaFullElement(eq(ORIGIN_COMPONENT_ID))) + .thenReturn(Either.left(originComponent)); + + ByActionStatusComponentException e = assertThrows(ByActionStatusComponentException.class, () -> { + componentInstanceBusinessLogic.createComponentInstance(ComponentTypeEnum.SERVICE_PARAM_NAME, COMPONENT_ID, USER_ID, ci); + }); + assertThat(e.getActionStatus()).isEqualTo(ActionStatus.CONTAINER_CANNOT_CONTAIN_COMPONENT_IN_STATE); + } + + @Test + void testCreateComponentInstanceFailureArchived() { + Pair<ComponentInstance, Resource> p = prepareResourcesForCreateComponentInstanceTest(); + ComponentInstance ci = p.getLeft(); + Resource originComponent = p.getRight(); + originComponent.setArchived(Boolean.TRUE); + + // Stub for getting component + when(toscaOperationFacade.getToscaElement(eq(COMPONENT_ID), any(ComponentParametersView.class))) + .thenReturn(Either.left(service)); + when(toscaOperationFacade.getToscaFullElement(eq(ORIGIN_COMPONENT_ID))) + .thenReturn(Either.left(originComponent)); + + ByActionStatusComponentException e = assertThrows(ByActionStatusComponentException.class, () -> { + componentInstanceBusinessLogic.createComponentInstance(ComponentTypeEnum.SERVICE_PARAM_NAME, COMPONENT_ID, USER_ID, ci); + }); + assertThat(e.getActionStatus()).isEqualTo(ActionStatus.COMPONENT_IS_ARCHIVED); + } + + @Test + void testCreateComponentInstanceFailureInvalidOriginType() { + Pair<ComponentInstance, Resource> p = prepareResourcesForCreateComponentInstanceTest(); + ComponentInstance ci = p.getLeft(); + Resource originComponent = p.getRight(); + ci.setOriginType(OriginTypeEnum.VFC); // Set different type from origin + + // Stub for getting component + when(toscaOperationFacade.getToscaElement(eq(COMPONENT_ID), any(ComponentParametersView.class))) + .thenReturn(Either.left(service)); + when(toscaOperationFacade.getToscaFullElement(eq(ORIGIN_COMPONENT_ID))) + .thenReturn(Either.left(originComponent)); + + ByActionStatusComponentException e = assertThrows(ByActionStatusComponentException.class, () -> { + componentInstanceBusinessLogic.createComponentInstance(ComponentTypeEnum.SERVICE_PARAM_NAME, COMPONENT_ID, USER_ID, ci); + }); + assertThat(e.getActionStatus()).isEqualTo(ActionStatus.INVALID_CONTENT); + } + + @Test + void testCreateComponentInstanceFailureCannotContainInstance() { + Pair<ComponentInstance, Resource> p = prepareResourcesForCreateComponentInstanceTest(); + ComponentInstance ci = p.getLeft(); + Resource originComponent = p.getRight(); + + // Stub for getting component + when(toscaOperationFacade.getToscaElement(eq(COMPONENT_ID), any(ComponentParametersView.class))) + .thenReturn(Either.left(service)); + when(toscaOperationFacade.getToscaFullElement(eq(ORIGIN_COMPONENT_ID))) + .thenReturn(Either.left(originComponent)); + // Assume services cannot contain VF resource + when(containerInstanceTypeData.getServiceContainerList()) + .thenReturn(Collections.singletonList(ResourceTypeEnum.VL)); + + ByActionStatusComponentException e = assertThrows(ByActionStatusComponentException.class, () -> { + componentInstanceBusinessLogic.createComponentInstance(ComponentTypeEnum.SERVICE_PARAM_NAME, COMPONENT_ID, USER_ID, ci); + }); + assertThat(e.getActionStatus()).isEqualTo(ActionStatus.CONTAINER_CANNOT_CONTAIN_INSTANCE); + verify(containerInstanceTypeData, times(1)).getServiceContainerList(); + } + + @Test + void testCreateComponentInstanceFailureAddToGraph() { + Pair<ComponentInstance, Resource> p = prepareResourcesForCreateComponentInstanceTest(); + ComponentInstance ci = p.getLeft(); + Resource originComponent = p.getRight(); + + // TODO Refactor createComponentInstance() method and reduce these mocks + // not to target the internal details too much + when(toscaOperationFacade.getToscaElement(eq(COMPONENT_ID), any(ComponentParametersView.class))) + .thenReturn(Either.left(service)); + when(toscaOperationFacade.getToscaFullElement(eq(ORIGIN_COMPONENT_ID))) + .thenReturn(Either.left(originComponent)); + when(containerInstanceTypeData.getServiceContainerList()) + .thenReturn(Collections.singletonList(ResourceTypeEnum.VF)); + Mockito.doNothing().when(compositionBusinessLogic).validateAndSetDefaultCoordinates(ci); + when(graphLockOperation.lockComponent(COMPONENT_ID, NodeTypeEnum.Service)) + .thenReturn(StorageOperationStatus.OK); + when(toscaOperationFacade.addComponentInstanceToTopologyTemplate(service, originComponent, ci, false, user)) + .thenReturn(Either.right(StorageOperationStatus.BAD_REQUEST)); + when(componentsUtils.convertFromStorageResponseForResourceInstance(StorageOperationStatus.BAD_REQUEST, true)) + .thenReturn(ActionStatus.INVALID_CONTENT); + when(componentsUtils.getResponseFormatForResourceInstance(ActionStatus.INVALID_CONTENT, "", null)) + .thenReturn(new ResponseFormat()); + when(janusGraphDao.rollback()).thenReturn(JanusGraphOperationStatus.OK); + when(graphLockOperation.unlockComponent(COMPONENT_ID, NodeTypeEnum.Service)) + .thenReturn(StorageOperationStatus.OK); + + assertThrows(ByResponseFormatComponentException.class, () -> { + componentInstanceBusinessLogic.createComponentInstance(ComponentTypeEnum.SERVICE_PARAM_NAME, COMPONENT_ID, USER_ID, ci); + }); + verify(containerInstanceTypeData, times(1)).getServiceContainerList(); + verify(compositionBusinessLogic, times(1)).validateAndSetDefaultCoordinates(ci); + verify(toscaOperationFacade, times(1)) + .addComponentInstanceToTopologyTemplate(service, originComponent, ci, false, user); + verify(graphLockOperation, times(1)).unlockComponent(COMPONENT_ID, NodeTypeEnum.Service); + } + + @Test + void testCreateComponentInstanceSuccess() { + Pair<ComponentInstance, Resource> p = prepareResourcesForCreateComponentInstanceTest(); + ComponentInstance instanceToBeCreated = p.getLeft(); + Resource originComponent = p.getRight(); + + Service updatedService = new Service(); + updatedService.setComponentInstances(Collections.singletonList(instanceToBeCreated)); + updatedService.setUniqueId(service.getUniqueId()); + + // TODO Refactor createComponentInstance() method and reduce these mocks + // not to target the internal details too much + when(toscaOperationFacade.getToscaElement(eq(COMPONENT_ID), any(ComponentParametersView.class))) + .thenReturn(Either.left(service)); + when(toscaOperationFacade.getToscaFullElement(eq(ORIGIN_COMPONENT_ID))) + .thenReturn(Either.left(originComponent)); + when(containerInstanceTypeData.getServiceContainerList()) + .thenReturn(Collections.singletonList(ResourceTypeEnum.VF)); + Mockito.doNothing().when(compositionBusinessLogic).validateAndSetDefaultCoordinates(instanceToBeCreated); + when(graphLockOperation.lockComponent(COMPONENT_ID, NodeTypeEnum.Service)) + .thenReturn(StorageOperationStatus.OK); + when(toscaOperationFacade.addComponentInstanceToTopologyTemplate(service, originComponent, instanceToBeCreated, false, user)) + .thenReturn(Either.left(new ImmutablePair<>(updatedService, COMPONENT_INSTANCE_ID))); + when(artifactsBusinessLogic.getArtifacts( + ORIGIN_COMPONENT_ID, NodeTypeEnum.Resource, ArtifactGroupTypeEnum.DEPLOYMENT, null)) + .thenReturn(Either.left(new HashMap<>())); + when(toscaOperationFacade + .addInformationalArtifactsToInstance(service.getUniqueId(), instanceToBeCreated, originComponent.getArtifacts())) + .thenReturn(StorageOperationStatus.OK); + when(janusGraphDao.commit()).thenReturn(JanusGraphOperationStatus.OK); + when(graphLockOperation.unlockComponent(COMPONENT_ID, NodeTypeEnum.Service)) + .thenReturn(StorageOperationStatus.OK); + + ComponentInstance result = componentInstanceBusinessLogic.createComponentInstance( + ComponentTypeEnum.SERVICE_PARAM_NAME, COMPONENT_ID, USER_ID, instanceToBeCreated); + assertThat(result).isEqualTo(instanceToBeCreated); + assertThat(instanceToBeCreated.getComponentVersion()).isEqualTo(originComponent.getVersion()); + assertThat(instanceToBeCreated.getIcon()).isEqualTo(originComponent.getIcon()); + verify(containerInstanceTypeData, times(1)).getServiceContainerList(); + verify(compositionBusinessLogic, times(1)).validateAndSetDefaultCoordinates(instanceToBeCreated); + verify(toscaOperationFacade, times(1)) + .addComponentInstanceToTopologyTemplate(service, originComponent, instanceToBeCreated, false, user); + // Check graph db change was committed + verify(janusGraphDao, times(1)).commit(); + } } |