diff options
Diffstat (limited to 'catalog-model/src/test/java/org/openecomp/sdc/be/model/operations/impl/GroupTypeOperationTest.java')
-rw-r--r-- | catalog-model/src/test/java/org/openecomp/sdc/be/model/operations/impl/GroupTypeOperationTest.java | 577 |
1 files changed, 520 insertions, 57 deletions
diff --git a/catalog-model/src/test/java/org/openecomp/sdc/be/model/operations/impl/GroupTypeOperationTest.java b/catalog-model/src/test/java/org/openecomp/sdc/be/model/operations/impl/GroupTypeOperationTest.java index 15c5e6497f..94e22e651f 100644 --- a/catalog-model/src/test/java/org/openecomp/sdc/be/model/operations/impl/GroupTypeOperationTest.java +++ b/catalog-model/src/test/java/org/openecomp/sdc/be/model/operations/impl/GroupTypeOperationTest.java @@ -1,32 +1,22 @@ package org.openecomp.sdc.be.model.operations.impl; -import static com.google.common.collect.Sets.newHashSet; -import static java.util.Arrays.asList; -import static java.util.Collections.singletonList; -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.assertTrue; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.annotation.Resource; - +import com.thinkaurelius.titan.core.TitanGraph; +import com.thinkaurelius.titan.core.TitanVertex; +import fj.data.Either; +import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.tinkerpop.gremlin.structure.Edge; import org.junit.After; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; +import org.openecomp.sdc.be.dao.graph.datatype.GraphEdge; import org.openecomp.sdc.be.dao.neo4j.GraphEdgeLabels; import org.openecomp.sdc.be.dao.neo4j.GraphPropertiesDictionary; import org.openecomp.sdc.be.dao.titan.TitanGenericDao; import org.openecomp.sdc.be.dao.titan.TitanOperationStatus; -import org.openecomp.sdc.be.model.CapabilityTypeDefinition; -import org.openecomp.sdc.be.model.GroupTypeDefinition; -import org.openecomp.sdc.be.model.ModelTestBase; -import org.openecomp.sdc.be.model.PropertyDefinition; +import org.openecomp.sdc.be.datatypes.elements.GroupTypeDataDefinition; +import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum; +import org.openecomp.sdc.be.model.*; import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus; import org.openecomp.sdc.be.model.tosca.ToscaType; import org.openecomp.sdc.be.resources.data.CapabilityTypeData; @@ -34,12 +24,24 @@ import org.openecomp.sdc.be.resources.data.GroupTypeData; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import fj.data.Either; +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import static com.google.common.collect.Sets.newHashSet; +import static java.util.Arrays.asList; +import static java.util.Collections.singletonList; +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.Assert.*; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:application-context-test.xml") public class GroupTypeOperationTest extends ModelTestBase { + private static final String TOSCA_GROUPS_ROOT = "tosca.groups.Root"; + private static final String NULL_STRING = null; @Resource(name = "titan-generic-dao") private TitanGenericDao titanDao; @@ -58,6 +60,7 @@ public class GroupTypeOperationTest extends ModelTestBase { @After public void tearDown() { titanDao.rollback(); + cleanUp(); } @Test @@ -71,7 +74,7 @@ public class GroupTypeOperationTest extends ModelTestBase { List<GroupTypeDefinition> allGroupTypesNoExclusion = groupTypeOperation.getAllGroupTypes(null); assertThat(allGroupTypesNoExclusion) - .usingElementComparatorOnFields("type") + .usingElementComparatorOnFields("type", "icon", "name") .containsExactlyInAnyOrder(rootGroupDefinition, type1, type2); } @@ -91,7 +94,7 @@ public class GroupTypeOperationTest extends ModelTestBase { } @Test - public void groupTypeWithoutCapabilityTypeCreated() { + public void groupTypeWithoutCapabilityCreated() { GroupTypeData rootNode = getOrCreateRootGroupTypeNode(); GroupTypeDefinition groupTypeDefinition = new GroupTypeDefinition(); @@ -108,12 +111,12 @@ public class GroupTypeOperationTest extends ModelTestBase { groupTypeDefinition.setProperties(properties ); - Either<GroupTypeDefinition, StorageOperationStatus> addGroupTypeResult = groupTypeOperation.addGroupType(groupTypeDefinition, false); - assertEquals("check group type added", true, addGroupTypeResult.isLeft()); + Either<GroupTypeDefinition, StorageOperationStatus> addGroupTypeResult = groupTypeOperation.addGroupType(groupTypeDefinition, true); + assertTrue("check group type added", addGroupTypeResult.isLeft()); compareBetweenCreatedToSent(groupTypeDefinition, addGroupTypeResult.left().value()); addGroupTypeResult = groupTypeOperation.getGroupTypeByTypeAndVersion("org.openecomp.groups.NetworkCollection", "1.0"); - assertEquals("check group type added", true, addGroupTypeResult.isLeft()); + assertTrue("check group type added", addGroupTypeResult.isLeft()); compareBetweenCreatedToSent(groupTypeDefinition, addGroupTypeResult.left().value()); Either<GroupTypeData, TitanOperationStatus> groupTypeResult = titanDao.getNode(GraphPropertiesDictionary.TYPE.getProperty(), groupTypeDefinition.getType(), GroupTypeData.class); @@ -124,18 +127,64 @@ public class GroupTypeOperationTest extends ModelTestBase { } @Test + public void groupTypeWithCapabilityAndPropsButCapTypeWithoutProps() { + getOrCreateRootGroupTypeNode(); + + CapabilityTypeDefinition capabilityTypeDef = createCapabilityType(null); + Either<CapabilityTypeData, TitanOperationStatus> capabilityTypeResult = titanDao.getNode(GraphPropertiesDictionary.TYPE.getProperty(), capabilityTypeDef.getType(), CapabilityTypeData.class); + extractVal(capabilityTypeResult); + + GroupTypeDefinition groupTypeDefinition = new GroupTypeDefinition(); + groupTypeDefinition.setDerivedFrom(TOSCA_GROUPS_ROOT); + groupTypeDefinition.setDescription("groups l3-networks in network collection"); + groupTypeDefinition.setType("org.openecomp.groups.NetworkCollection"); + + Map<String, CapabilityDefinition> mapCapabilities = new HashMap<>(); + + ComponentInstanceProperty property = new ComponentInstanceProperty( + buildProperty("vfc_instance_group_reference", null, "Ability to recognize capability per vfc instance group on vnf instance")); + CapabilityDefinition capabilityDef = buildCapabilityDefintion(asList(property)); + mapCapabilities.put("vlan_assignment", capabilityDef); + groupTypeDefinition.setCapabilities(mapCapabilities); + + + List<PropertyDefinition> properties = asList( + buildProperty("vfc_instance_group_role", null, "role of this VFC group"), + buildProperty("vfc_parent_port_role", null, "common role of parent ports of VFCs in this group"), + buildProperty("network_collection_role", null, "network collection role assigned to this group"), + buildProperty("subinterface_role", null, "common role of subinterfaces of VFCs in this group, criteria the group is created")); + + groupTypeDefinition.setProperties(properties ); + + Either<GroupTypeDefinition, StorageOperationStatus> addGroupTypeResult = groupTypeOperation.addGroupType(groupTypeDefinition, true); + assertTrue(addGroupTypeResult.isRight()); + assertEquals(StorageOperationStatus.MATCH_NOT_FOUND, addGroupTypeResult.right().value()); + } + + @Test public void groupTypeWithCapabilityTypeAndEdgeCreated() { GroupTypeData rootNode = getOrCreateRootGroupTypeNode(); - CapabilityTypeDefinition capabilityTypeDef = createCapabilityType(); + Map<String, PropertyDefinition> capTypeProperties = new HashMap<>(); + capTypeProperties.put("vfc_instance_group_reference", + buildProperty("vfc_instance_group_reference", null, "Ability to recognize capability per vfc instance group on vnf instance")); + + CapabilityTypeDefinition capabilityTypeDef = createCapabilityType(capTypeProperties); Either<CapabilityTypeData, TitanOperationStatus> capabilityTypeResult = titanDao.getNode(GraphPropertiesDictionary.TYPE.getProperty(), capabilityTypeDef.getType(), CapabilityTypeData.class); - CapabilityTypeData capabilityTypeNode = extractVal(capabilityTypeResult); + extractVal(capabilityTypeResult); GroupTypeDefinition groupTypeDefinition = new GroupTypeDefinition(); groupTypeDefinition.setDerivedFrom(TOSCA_GROUPS_ROOT); groupTypeDefinition.setDescription("groups l3-networks in network collection"); groupTypeDefinition.setType("org.openecomp.groups.NetworkCollection"); - groupTypeDefinition.setCapabilityTypes(asList(capabilityTypeDef)); + + Map<String, CapabilityDefinition> mapCapabilities = new HashMap<>(); + ComponentInstanceProperty property = new ComponentInstanceProperty( + buildProperty("vfc_instance_group_reference", null, "Ability to recognize capability per vfc instance group on vnf instance")); + CapabilityDefinition capabilityDef = buildCapabilityDefintion(asList(property)); + mapCapabilities.put("vlan_assignment", capabilityDef); + groupTypeDefinition.setCapabilities(mapCapabilities); + List<PropertyDefinition> properties = asList( buildProperty("vfc_instance_group_role", null, "role of this VFC group"), @@ -146,88 +195,276 @@ public class GroupTypeOperationTest extends ModelTestBase { groupTypeDefinition.setProperties(properties ); Either<GroupTypeDefinition, StorageOperationStatus> addGroupTypeResult = groupTypeOperation.addGroupType(groupTypeDefinition, true); - assertEquals("check group type added", true, addGroupTypeResult.isLeft()); + assertTrue("check group type added", addGroupTypeResult.isLeft()); compareBetweenCreatedToSent(groupTypeDefinition, addGroupTypeResult.left().value()); Either<GroupTypeData, TitanOperationStatus> groupTypeResult = titanDao.getNode(GraphPropertiesDictionary.TYPE.getProperty(), groupTypeDefinition.getType(), GroupTypeData.class); GroupTypeData groupTypeNode = extractVal(groupTypeResult); - Either<Edge, TitanOperationStatus> edgeCapTypeResult = titanDao.getEdgeByNodes(groupTypeNode, capabilityTypeNode, GraphEdgeLabels.GROUP_TYPE_CAPABILITY_TYPE); - validate(edgeCapTypeResult); + Either<GroupTypeDefinition, StorageOperationStatus> groupTypeDefResult = groupTypeOperation.getGroupTypeByUid(groupTypeNode.getUniqueId()); + assertTrue(groupTypeDefResult.isLeft()); + GroupTypeDefinition groupTypeDefinitionRetrieved = groupTypeDefResult.left().value(); + assertNotNull(groupTypeDefinitionRetrieved); + Map<String, CapabilityDefinition> capabilityDefs = groupTypeDefinitionRetrieved.getCapabilities(); + assertNotNull(capabilityDefs); + assertEquals(1, capabilityDefs.size()); + assertTrue(capabilityDefs.containsKey("vlan_assignment")); + CapabilityDefinition updatedCapabilityDef = capabilityDefs.get("vlan_assignment"); + assertEquals(2, updatedCapabilityDef.getProperties().size()); Either<Edge, TitanOperationStatus> edgeDerivedFromResult = titanDao.getEdgeByNodes(groupTypeNode, rootNode, GraphEdgeLabels.DERIVED_FROM); validate(edgeDerivedFromResult); } @Test - public void testUpgradeGroupTypeWithDerrivedFromEdge() { + public void groupTypeWithCapabilityTypeAndEdgeCreated_OverrideDefaultCapabilityTypeValue() { + getOrCreateRootGroupTypeNode(); + + PropertyDefinition property = buildProperty("vfc_instance_group_reference", null, "Ability to recognize capability per vfc instance group on vnf instance"); + + Map<String, PropertyDefinition> capTypeProperties = new HashMap<>(); + capTypeProperties.put("vfc_instance_group_reference", property); + CapabilityTypeDefinition capabilityTypeDef = createCapabilityType(capTypeProperties); + Either<CapabilityTypeData, TitanOperationStatus> capabilityTypeResult = titanDao.getNode(GraphPropertiesDictionary.TYPE.getProperty(), capabilityTypeDef.getType(), CapabilityTypeData.class); + extractVal(capabilityTypeResult); + + GroupTypeDefinition groupTypeDefinition = new GroupTypeDefinition(); + groupTypeDefinition.setDerivedFrom(TOSCA_GROUPS_ROOT); + groupTypeDefinition.setDescription("groups l3-networks in network collection"); + groupTypeDefinition.setType("org.openecomp.groups.NetworkCollection"); + + Map<String, CapabilityDefinition> mapCapabilities = new HashMap<>(); + property.setValue("new_value"); + ComponentInstanceProperty capDefProperty = new ComponentInstanceProperty(property); + CapabilityDefinition capabilityDef = buildCapabilityDefintion(asList(capDefProperty)); + mapCapabilities.put("vlan_assignment", capabilityDef); + groupTypeDefinition.setCapabilities(mapCapabilities); + + + List<PropertyDefinition> properties = asList( + buildProperty("vfc_instance_group_role", null, "role of this VFC group"), + buildProperty("vfc_parent_port_role", null, "common role of parent ports of VFCs in this group"), + buildProperty("network_collection_role", null, "network collection role assigned to this group"), + buildProperty("subinterface_role", null, "common role of subinterfaces of VFCs in this group, criteria the group is created")); + + groupTypeDefinition.setProperties(properties ); + + Either<GroupTypeDefinition, StorageOperationStatus> addGroupTypeResult = groupTypeOperation.addGroupType(groupTypeDefinition, true); + assertTrue("check group type added", addGroupTypeResult.isLeft()); + compareBetweenCreatedToSent(groupTypeDefinition, addGroupTypeResult.left().value()); + + Either<GroupTypeData, TitanOperationStatus> groupTypeResult = titanDao.getNode(GraphPropertiesDictionary.TYPE.getProperty(), groupTypeDefinition.getType(), GroupTypeData.class); + GroupTypeData groupTypeNode = extractVal(groupTypeResult); + + Either<GroupTypeDefinition, StorageOperationStatus> groupTypeDefResult = groupTypeOperation.getGroupTypeByUid(groupTypeNode.getUniqueId()); + assertTrue(groupTypeDefResult.isLeft()); + GroupTypeDefinition groupTypeDefinitionRetrieved = groupTypeDefResult.left().value(); + assertNotNull(groupTypeDefinitionRetrieved); + Map<String, CapabilityDefinition> capabilityDefs = groupTypeDefinitionRetrieved.getCapabilities(); + assertNotNull(capabilityDefs); + assertEquals(1, capabilityDefs.size()); + assertTrue(capabilityDefs.containsKey("vlan_assignment")); + + CapabilityDefinition capDefinition = capabilityDefs.get("vlan_assignment"); + assertEquals("new_value", capDefinition.getProperties().get(0).getValue()); + assertEquals(2, capDefinition.getProperties().size()); + } + + + @Test + public void updateGroupTypeWithCapability_FailedDueToCapabilityDeleteAttempt() { + createRootGroupTypeNode(); + + PropertyDefinition property = buildProperty("vfc_instance_group_reference", null, "Ability to recognize capability per vfc instance group on vnf instance"); + + Map<String, PropertyDefinition> capTypeProperties = new HashMap<>(); + capTypeProperties.put("vfc_instance_group_reference", property); + CapabilityTypeDefinition capabilityTypeDef = createCapabilityType(capTypeProperties); + Either<CapabilityTypeData, TitanOperationStatus> capabilityTypeResult = titanDao.getNode(GraphPropertiesDictionary.TYPE.getProperty(), capabilityTypeDef.getType(), CapabilityTypeData.class); + extractVal(capabilityTypeResult); + + GroupTypeDefinition groupTypeDefinition = new GroupTypeDefinition(); + groupTypeDefinition.setDerivedFrom(TOSCA_GROUPS_ROOT); + groupTypeDefinition.setDescription("groups l3-networks in network collection"); + groupTypeDefinition.setType("org.openecomp.groups.NetworkCollection"); + + Map<String, CapabilityDefinition> mapCapabilities = new HashMap<>(); + property.setValue("new_value"); + ComponentInstanceProperty capDefProperty = new ComponentInstanceProperty(property); + CapabilityDefinition capabilityDef = buildCapabilityDefintion(asList(capDefProperty)); + mapCapabilities.put("vlan_assignment", capabilityDef); + groupTypeDefinition.setCapabilities(mapCapabilities); + + Either<GroupTypeDefinition, StorageOperationStatus> addGroupTypeResult = groupTypeOperation.addGroupType(groupTypeDefinition); + assertTrue(addGroupTypeResult.isLeft()); + + GroupTypeDefinition newGroupTypeDefinition = new GroupTypeDefinition(); + newGroupTypeDefinition.setDerivedFrom(TOSCA_GROUPS_ROOT); + newGroupTypeDefinition.setDescription("groups l3-networks in network collection"); + newGroupTypeDefinition.setType("org.openecomp.groups.NetworkCollection"); + Either<GroupTypeDefinition, StorageOperationStatus> updateGroupTypeResult = groupTypeOperation.updateGroupType(newGroupTypeDefinition, addGroupTypeResult.left().value()); + assertTrue(updateGroupTypeResult.isRight()); + assertEquals(StorageOperationStatus.MATCH_NOT_FOUND, updateGroupTypeResult.right().value()); + } + + @Test + public void updateGroupTypeWithCapability_FailedDueToCapabilityChangeTypeAttempt() { + createRootGroupTypeNode(); + + PropertyDefinition property = buildProperty("vfc_instance_group_reference", null, "Ability to recognize capability per vfc instance group on vnf instance"); + + Map<String, PropertyDefinition> capTypeProperties = new HashMap<>(); + capTypeProperties.put("vfc_instance_group_reference", property); + CapabilityTypeDefinition capabilityTypeDef = createCapabilityType(capTypeProperties); + Either<CapabilityTypeData, TitanOperationStatus> capabilityTypeResult = titanDao.getNode(GraphPropertiesDictionary.TYPE.getProperty(), capabilityTypeDef.getType(), CapabilityTypeData.class); + extractVal(capabilityTypeResult); + GroupTypeDefinition groupTypeDefinition = new GroupTypeDefinition(); groupTypeDefinition.setDerivedFrom(TOSCA_GROUPS_ROOT); + groupTypeDefinition.setDescription("groups l3-networks in network collection"); + groupTypeDefinition.setType("org.openecomp.groups.NetworkCollection"); + + Map<String, CapabilityDefinition> mapCapabilities = new HashMap<>(); + property.setValue("new_value"); + ComponentInstanceProperty capDefProperty = new ComponentInstanceProperty(property); + CapabilityDefinition capabilityDef = buildCapabilityDefintion(asList(capDefProperty)); + mapCapabilities.put("vlan_assignment", capabilityDef); + groupTypeDefinition.setCapabilities(mapCapabilities); + + Either<GroupTypeDefinition, StorageOperationStatus> addGroupTypeResult = groupTypeOperation.addGroupType(groupTypeDefinition); + assertTrue(addGroupTypeResult.isLeft()); + + GroupTypeDefinition newGroupTypeDefinition = new GroupTypeDefinition(); + newGroupTypeDefinition.setDerivedFrom(TOSCA_GROUPS_ROOT); + newGroupTypeDefinition.setDescription("groups l3-networks in network collection"); + newGroupTypeDefinition.setType("org.openecomp.groups.NetworkCollection"); + + Map<String, CapabilityDefinition> updatedMapCapabilities = new HashMap<>(); + property.setValue("new_value"); + ComponentInstanceProperty newCapDefProperty = new ComponentInstanceProperty(property); + CapabilityDefinition updatedCapabilityDef = buildCapabilityDefintion(asList(newCapDefProperty)); + updatedCapabilityDef.setType("Another type"); + updatedMapCapabilities.put("vlan_assignment", updatedCapabilityDef); + newGroupTypeDefinition.setCapabilities(updatedMapCapabilities); + + Either<GroupTypeDefinition, StorageOperationStatus> updateGroupTypeResult = groupTypeOperation.updateGroupType(newGroupTypeDefinition, addGroupTypeResult.left().value()); + assertTrue(updateGroupTypeResult.isRight()); + assertEquals(StorageOperationStatus.MATCH_NOT_FOUND, updateGroupTypeResult.right().value()); + } + + @Test + public void updateGroupTypeWithCapability_Success() { + createRootGroupTypeNode(); + + PropertyDefinition property = buildProperty("vfc_instance_group_reference", null, "Ability to recognize capability per vfc instance group on vnf instance"); + + Map<String, PropertyDefinition> capTypeProperties = new HashMap<>(); + capTypeProperties.put("vfc_instance_group_reference", property); + CapabilityTypeDefinition capabilityTypeDef = createCapabilityType(capTypeProperties); + Either<CapabilityTypeData, TitanOperationStatus> capabilityTypeResult = titanDao.getNode(GraphPropertiesDictionary.TYPE.getProperty(), capabilityTypeDef.getType(), CapabilityTypeData.class); + extractVal(capabilityTypeResult); + + GroupTypeDefinition groupTypeDefinition = new GroupTypeDefinition(); + groupTypeDefinition.setDerivedFrom(TOSCA_GROUPS_ROOT); + groupTypeDefinition.setDescription("groups l3-networks in network collection"); + groupTypeDefinition.setType("org.openecomp.groups.NetworkCollection"); + + Map<String, CapabilityDefinition> mapCapabilities = new HashMap<>(); + property.setValue("new_value"); + ComponentInstanceProperty capDefProperty = new ComponentInstanceProperty(property); + CapabilityDefinition capabilityDef = buildCapabilityDefintion(asList(capDefProperty)); + mapCapabilities.put("vlan_assignment", capabilityDef); + groupTypeDefinition.setCapabilities(mapCapabilities); + + Either<GroupTypeDefinition, StorageOperationStatus> addGroupTypeResult = groupTypeOperation.addGroupType(groupTypeDefinition); + assertTrue(addGroupTypeResult.isLeft()); + + GroupTypeDefinition newGroupTypeDefinition = new GroupTypeDefinition(); + newGroupTypeDefinition.setDerivedFrom(TOSCA_GROUPS_ROOT); + newGroupTypeDefinition.setDescription("groups l3-networks in network collection"); + newGroupTypeDefinition.setType("org.openecomp.groups.NetworkCollection"); + + Map<String, CapabilityDefinition> updatedMapCapabilities = new HashMap<>(); + property.setValue("another_value"); + ComponentInstanceProperty newCapDefProperty = new ComponentInstanceProperty(property); + CapabilityDefinition updatedCapabilityDef = buildCapabilityDefintion(asList(newCapDefProperty)); + updatedMapCapabilities.put("vlan_assignment", updatedCapabilityDef); + newGroupTypeDefinition.setCapabilities(updatedMapCapabilities); + + Either<GroupTypeDefinition, StorageOperationStatus> updateGroupTypeResult = groupTypeOperation.updateGroupType(newGroupTypeDefinition, addGroupTypeResult.left().value()); + assertTrue(updateGroupTypeResult.isLeft()); + } + + @Test + public void testUpdateGroupTypeWithDerivedFromEdge() { + createRootGroupTypeNode(); + + GroupTypeDefinition groupTypeDefinition = new GroupTypeDefinition(); groupTypeDefinition.setDescription("groups l2-networks in network collection"); groupTypeDefinition.setType("org.openecomp.groups.PrivateCollection"); groupTypeDefinition.setVersion("1.0"); - + List<PropertyDefinition> properties = singletonList( buildProperty("network_collection_type", "l2-network", "network collection type, defined with default value")); groupTypeDefinition.setProperties(properties ); Either<GroupTypeDefinition, StorageOperationStatus> addGroupTypeResult = groupTypeOperation.addGroupType(groupTypeDefinition, true); - assertEquals("check group type added", true, addGroupTypeResult.isLeft()); + assertTrue("check group type added", addGroupTypeResult.isLeft()); compareBetweenCreatedToSent(groupTypeDefinition, addGroupTypeResult.left().value()); addGroupTypeResult = groupTypeOperation.getGroupTypeByTypeAndVersion("org.openecomp.groups.PrivateCollection", "1.0"); - assertEquals("check group type added", true, addGroupTypeResult.isLeft()); + assertTrue("check group type added", addGroupTypeResult.isLeft()); compareBetweenCreatedToSent(groupTypeDefinition, addGroupTypeResult.left().value()); - Either<GroupTypeDefinition, StorageOperationStatus> upgradeResult = groupTypeOperation.upgradeGroupType(groupTypeDefinition, groupTypeDefinition, true); + Either<GroupTypeDefinition, StorageOperationStatus> upgradeResult = groupTypeOperation.updateGroupType(groupTypeDefinition, groupTypeDefinition); assertNotNull(upgradeResult); assertTrue(upgradeResult.isLeft()); } @Test - public void testUpgradeNonExistingGroupType() { + public void testUpdateNonExistingGroupType() { GroupTypeDefinition groupTypeDefinition = new GroupTypeDefinition(); groupTypeDefinition.setDerivedFrom(TOSCA_GROUPS_ROOT); groupTypeDefinition.setDescription("groups l2-networks in network collection"); groupTypeDefinition.setType("org.openecomp.groups.MyCollection"); groupTypeDefinition.setVersion("1.0"); - Either<GroupTypeDefinition, StorageOperationStatus> upgradeResult = groupTypeOperation.upgradeGroupType(groupTypeDefinition, groupTypeDefinition, true); + Either<GroupTypeDefinition, StorageOperationStatus> upgradeResult = groupTypeOperation.updateGroupType(groupTypeDefinition, groupTypeDefinition); assertNotNull(upgradeResult); assertTrue(upgradeResult.isRight()); } @Test - public void testUpgradeNotDerivedGroupType() { + public void testUpdateNotDerivedGroupType() { GroupTypeDefinition groupTypeDefinition = new GroupTypeDefinition(); groupTypeDefinition.setDescription("groups social-networks in school"); groupTypeDefinition.setType("org.openecomp.groups.Teachers"); groupTypeDefinition.setVersion("1.0"); Either<GroupTypeDefinition, StorageOperationStatus> addGroupTypeResult = groupTypeOperation.addGroupType(groupTypeDefinition, true); - assertEquals("check group type added", true, addGroupTypeResult.isLeft()); + assertTrue("check group type added", addGroupTypeResult.isLeft()); compareBetweenCreatedToSent(groupTypeDefinition, addGroupTypeResult.left().value()); - Either<GroupTypeDefinition, StorageOperationStatus> upgradeResult = groupTypeOperation.upgradeGroupType(groupTypeDefinition, groupTypeDefinition, true); + Either<GroupTypeDefinition, StorageOperationStatus> upgradeResult = groupTypeOperation.updateGroupType(groupTypeDefinition, groupTypeDefinition); assertNotNull(upgradeResult); assertTrue(upgradeResult.isLeft()); - assertEquals(groupTypeDefinition, upgradeResult.left().value()); + assertThat(groupTypeDefinition).isEqualToIgnoringGivenFields(upgradeResult.left().value(), "properties", "capabilities"); } @Test - public void testUpgradeGroupTypeWithNonExistingParent() { + public void testUpdateGroupTypeWithNonExistingParent() { GroupTypeDefinition groupTypeDefinition = new GroupTypeDefinition(); groupTypeDefinition.setDescription("groups social-networks in work"); groupTypeDefinition.setType("org.openecomp.groups.Cowokers"); groupTypeDefinition.setVersion("1.0"); Either<GroupTypeDefinition, StorageOperationStatus> addGroupTypeResult = groupTypeOperation.addGroupType(groupTypeDefinition, true); - assertEquals("check group type added", true, addGroupTypeResult.isLeft()); + assertTrue("check group type added", addGroupTypeResult.isLeft()); compareBetweenCreatedToSent(groupTypeDefinition, addGroupTypeResult.left().value()); groupTypeDefinition.setDerivedFrom("Non.existing.parent"); - Either<GroupTypeDefinition, StorageOperationStatus> upgradeResult = groupTypeOperation.upgradeGroupType(groupTypeDefinition, groupTypeDefinition, true); + Either<GroupTypeDefinition, StorageOperationStatus> upgradeResult = groupTypeOperation.updateGroupType(groupTypeDefinition, groupTypeDefinition); assertNotNull(upgradeResult); assertTrue(upgradeResult.isRight()); } @@ -240,23 +477,25 @@ public class GroupTypeOperationTest extends ModelTestBase { groupTypeDefinition.setVersion("1.0"); Either<GroupTypeDefinition, StorageOperationStatus> addGroupTypeResult = groupTypeOperation.addGroupType(groupTypeDefinition, true); - assertEquals("check group type added", true, addGroupTypeResult.isLeft()); + assertTrue("check group type added", addGroupTypeResult.isLeft()); compareBetweenCreatedToSent(groupTypeDefinition, addGroupTypeResult.left().value()); GroupTypeDefinition parentGroupTypeDefinition = new GroupTypeDefinition(); parentGroupTypeDefinition.setDescription("groups social-networks in university"); parentGroupTypeDefinition.setType("org.openecomp.groups.Parents"); parentGroupTypeDefinition.setVersion("1.0"); + parentGroupTypeDefinition.setHighestVersion(true); + Either<GroupTypeDefinition, StorageOperationStatus> addParentGroupTypeResult = groupTypeOperation.addGroupType(parentGroupTypeDefinition, true); - assertEquals("check group type added", true, addParentGroupTypeResult.isLeft()); + assertTrue("check group type added", addParentGroupTypeResult.isLeft()); compareBetweenCreatedToSent(parentGroupTypeDefinition, addParentGroupTypeResult.left().value()); groupTypeDefinition.setDerivedFrom("org.openecomp.groups.Parents"); - Either<GroupTypeDefinition, StorageOperationStatus> upgradeResult = groupTypeOperation.upgradeGroupType(groupTypeDefinition, groupTypeDefinition, true); + Either<GroupTypeDefinition, StorageOperationStatus> upgradeResult = groupTypeOperation.updateGroupType(groupTypeDefinition, addGroupTypeResult.left().value()); assertNotNull(upgradeResult); assertTrue(upgradeResult.isLeft()); - assertEquals(groupTypeDefinition, upgradeResult.left().value()); + assertThat(groupTypeDefinition).isEqualToIgnoringGivenFields(upgradeResult.left().value(), "properties", "capabilities"); } @@ -271,8 +510,8 @@ public class GroupTypeOperationTest extends ModelTestBase { private GroupTypeData createRootGroupTypeNode() { GroupTypeDefinition rootGroupDefinition = createRootGroupDefinition(); - Either<GroupTypeDefinition, StorageOperationStatus> addGroupTypeResult = groupTypeOperation.addGroupType(rootGroupDefinition, true); - assertEquals("check group type added", true, addGroupTypeResult.isLeft()); + Either<GroupTypeDefinition, StorageOperationStatus> addGroupTypeResult = groupTypeOperation.addGroupType(rootGroupDefinition, false); + assertTrue("check group type added", addGroupTypeResult.isLeft()); Either<GroupTypeData, TitanOperationStatus> groupTypeResult = titanDao.getNode(GraphPropertiesDictionary.TYPE.getProperty(), rootGroupDefinition.getType(), GroupTypeData.class); return extractVal(groupTypeResult); @@ -282,6 +521,7 @@ public class GroupTypeOperationTest extends ModelTestBase { GroupTypeDefinition groupTypeDefinition = new GroupTypeDefinition(); groupTypeDefinition.setDescription("The TOSCA Group Type all other TOSCA Group Types derive from"); groupTypeDefinition.setType(TOSCA_GROUPS_ROOT); + groupTypeDefinition.setHighestVersion(true); return groupTypeDefinition; } @@ -289,23 +529,41 @@ public class GroupTypeOperationTest extends ModelTestBase { GroupTypeDefinition groupTypeDefinition = new GroupTypeDefinition(); groupTypeDefinition.setDescription("description for type " + type); groupTypeDefinition.setType(type); + groupTypeDefinition.setName(type + "name"); + groupTypeDefinition.setIcon(type + "icon"); return groupTypeDefinition; } - private CapabilityTypeDefinition createCapabilityType() { + private CapabilityTypeDefinition createCapabilityType(Map<String, PropertyDefinition> properties) { + CapabilityTypeDefinition rootCapabilityTypeDefinition = new CapabilityTypeDefinition(); + rootCapabilityTypeDefinition.setType("tosca.capabilities.Root"); + rootCapabilityTypeDefinition.setDescription("Dummy root type"); + rootCapabilityTypeDefinition.setVersion("1.0"); + capabilityTypeOperation.addCapabilityType(rootCapabilityTypeDefinition, true); + + + CapabilityTypeDefinition parentCapabilityTypeDefinition = new CapabilityTypeDefinition(); + parentCapabilityTypeDefinition.setType("tosca.capabilities.Parent"); + parentCapabilityTypeDefinition.setDescription("Dummy parent type"); + parentCapabilityTypeDefinition.setDerivedFrom("tosca.capabilities.Root"); + parentCapabilityTypeDefinition.setVersion("1.0"); + PropertyDefinition property = buildProperty("parentProp", "any", "Description"); + Map<String, PropertyDefinition> capTypeProperties = new HashMap<>(); + capTypeProperties.put("parent_prop", property); + parentCapabilityTypeDefinition.setProperties(capTypeProperties); + capabilityTypeOperation.addCapabilityType(parentCapabilityTypeDefinition, true); + + CapabilityTypeDefinition capabilityTypeDefinition = new CapabilityTypeDefinition(); capabilityTypeDefinition.setDescription("ability to expose routing information of the internal network"); capabilityTypeDefinition.setType("org.openecomp.capabilities.VLANAssignment"); capabilityTypeDefinition.setVersion("1.0"); - - Map<String, PropertyDefinition> properties = new HashMap<>(); - properties.put("vfc_instance_group_reference", - buildProperty("vfc_instance_group_reference", null, "Ability to recognize capability per vfc instance group on vnf instance")); - + capabilityTypeDefinition.setDerivedFrom("tosca.capabilities.Parent"); + capabilityTypeDefinition.setProperties(properties); Either<CapabilityTypeDefinition, StorageOperationStatus> addCapabilityTypeResult = capabilityTypeOperation.addCapabilityType(capabilityTypeDefinition, true); - assertEquals("check capability type added", true, addCapabilityTypeResult.isLeft()); + assertTrue("check capability type added", addCapabilityTypeResult.isLeft()); CapabilityTypeDefinition capabilityTypeAdded = addCapabilityTypeResult.left().value(); compareBetweenCreatedToSent(capabilityTypeDefinition, capabilityTypeAdded); @@ -313,6 +571,15 @@ public class GroupTypeOperationTest extends ModelTestBase { return capabilityTypeDefinition; } + private CapabilityDefinition buildCapabilityDefintion(List<ComponentInstanceProperty> properties) { + CapabilityDefinition capabilityDefinition = new CapabilityDefinition(); + capabilityDefinition.setName("vlan_assignment"); + capabilityDefinition.setDescription("ability to expose routing information of the internal network"); + capabilityDefinition.setType("org.openecomp.capabilities.VLANAssignment"); + capabilityDefinition.setProperties(properties); + return capabilityDefinition; + } + private PropertyDefinition buildProperty(String name, String defaultValue, String description) { PropertyDefinition property = new PropertyDefinition(); property.setName(name); @@ -346,5 +613,201 @@ public class GroupTypeOperationTest extends ModelTestBase { return t; } + + private void cleanUp() { + Either<TitanGraph, TitanOperationStatus> graphResult = titanDao.getGraph(); + TitanGraph graph = graphResult.left().value(); + + Iterable<TitanVertex> vertices = graph.query().vertices(); + if (vertices != null) { + Iterator<TitanVertex> iterator = vertices.iterator(); + while (iterator.hasNext()) { + TitanVertex vertex = iterator.next(); + vertex.remove(); + } + + } + titanDao.commit(); + } + + + @Test + public void updateGroupType_returnNotFoundErrorIfTryingToUpdateANonExistingType() { + GroupTypeDefinition currType = createGroupTypeDef(); + GroupTypeDefinition updatedType = createGroupTypeDef(); + Either<GroupTypeDefinition, StorageOperationStatus> updatedGroupTypeRes = groupTypeOperation.updateGroupType(updatedType, currType); + assertThat(updatedGroupTypeRes.right().value()).isEqualTo(StorageOperationStatus.NOT_FOUND); + } + + @Test + public void updateGroupType_basicFields() { + GroupTypeDefinition createdType = createGroupTypeDef("type1", "description1", NULL_STRING); + Either<GroupTypeDefinition, StorageOperationStatus> currGroupType = groupTypeOperation.addGroupType(createdType); + + GroupTypeDefinition updatedType = createGroupTypeDef("type1", "description2", NULL_STRING); + updatedType.setName("newName"); + updatedType.setIcon("icon"); + groupTypeOperation.updateGroupType(updatedType, currGroupType.left().value()); + + Either<GroupTypeDefinition, StorageOperationStatus> fetchedUpdatedType = groupTypeOperation.getLatestGroupTypeByType(createdType.getType()); + GroupTypeDefinition fetchedGroupType = fetchedUpdatedType.left().value(); + assertThat(fetchedGroupType.getProperties()).isEmpty(); + assertThat(fetchedGroupType) + .isEqualToIgnoringGivenFields(updatedType, "properties", "capabilities"); + + } + + @Test + public void updateGroupType_updatePropertiesType_FailedDueAttemptToChangePropertyType() { + PropertyDefinition prop1 = createSimpleProperty("val1", "prop1", "string"); + GroupTypeDefinition groupType = createGroupTypeDef(prop1); + Either<GroupTypeDefinition, StorageOperationStatus> currGroupType = groupTypeOperation.addGroupType(groupType); + + PropertyDefinition updatedProp1 = duplicateProperty(prop1, "newVal1", "int"); + PropertyDefinition prop3 = createSimpleProperty("val3", "prop3", "string"); + GroupTypeDefinition updatedGroupType = createGroupTypeDef(updatedProp1, prop3); + + Either<GroupTypeDefinition, StorageOperationStatus> updatedGroupTypeRetrieved = groupTypeOperation.updateGroupType(updatedGroupType, currGroupType.left().value()); + assertEquals(StorageOperationStatus.MATCH_NOT_FOUND, updatedGroupTypeRetrieved.right().value()); + } + + @Test + public void validateGroupType_FailedDueAttempToCreateGroupTypeWithPropertyWhichTypeIsDifferentFromTypeOfParentPropertyWithTheSameName() { + GroupTypeDefinition rootGroupType = createGroupTypeDef(); + Either<GroupTypeDefinition, StorageOperationStatus> rootGroupTypeRes = groupTypeOperation.addGroupType(rootGroupType); + assertTrue(rootGroupTypeRes.isLeft()); + + PropertyDefinition prop = createSimpleProperty("val1", "prop", "string"); + GroupTypeDefinition groupType1 = createGroupTypeDef("type1", "descr1", rootGroupType.getType(), prop); + Either<GroupTypeDefinition, StorageOperationStatus> groupType1Res = groupTypeOperation.addGroupType(groupType1); + assertTrue(groupType1Res.isLeft()); + + PropertyDefinition prop1 = createSimpleProperty("33", "prop", "int"); + PropertyDefinition prop2 = createSimpleProperty("val2", "prop2", "string"); + GroupTypeDefinition groupType2 = createGroupTypeDef("type2", "descr", groupType1.getType(), prop1, prop2); + + Either<GroupTypeDefinition, StorageOperationStatus> updatedGroupTypeRetrieved = groupTypeOperation.validateUpdateProperties(groupType2); + assertEquals(StorageOperationStatus.PROPERTY_NAME_ALREADY_EXISTS, updatedGroupTypeRetrieved.right().value()); + } + + @Test + public void updateGroupType_derivedFrom_whenNoPrevDerivedFrom_updateToNewDerivedFrom() { + GroupTypeDefinition rootGroupType = createGroupTypeDef(); + GroupTypeDefinition groupType1 = createGroupTypeDef("type1", "descr", NULL_STRING); + GroupTypeDefinition updatedGroupType = createGroupTypeDef("type1", "descr", rootGroupType.getType()); + groupTypeOperation.addGroupType(rootGroupType); + Either<GroupTypeDefinition, StorageOperationStatus> currGroupType = groupTypeOperation.addGroupType(groupType1); + groupTypeOperation.updateGroupType(updatedGroupType, currGroupType.left().value()); + + Either<GroupTypeDefinition, StorageOperationStatus> latestGroupType = groupTypeOperation.getLatestGroupTypeByType(groupType1.getType()); + assertThat(latestGroupType.left().value().getDerivedFrom()).isEqualTo(rootGroupType.getType()); + verifyDerivedFromNodeEqualsToRootGroupType(rootGroupType, latestGroupType.left().value().getUniqueId()); + } + + @Test + public void updateGroupType_derivedFrom_updateToNullDerivedFrom_derivedFromDeleted_Failed() { + GroupTypeDefinition rootGroupType = createGroupTypeDef(); + GroupTypeDefinition groupType1 = createGroupTypeDef("type1", "descr", rootGroupType.getType()); + GroupTypeDefinition updatedGroupType = createGroupTypeDef("type1", "descr", null, new PropertyDefinition[]{}); + groupTypeOperation.addGroupType(rootGroupType); + Either<GroupTypeDefinition, StorageOperationStatus> currGroupType = groupTypeOperation.addGroupType(groupType1); + + Either<GroupTypeDefinition, StorageOperationStatus> updateGroupTypeRes = groupTypeOperation.updateGroupType(updatedGroupType, currGroupType.left().value()); + assertThat(updateGroupTypeRes.right().value()).isEqualTo(StorageOperationStatus.NOT_FOUND); + + Either<GroupTypeDefinition, StorageOperationStatus> latestGroupType = groupTypeOperation.getLatestGroupTypeByType(groupType1.getType()); + assertThat(latestGroupType.left().value().getDerivedFrom()).isEqualTo(rootGroupType.getType()); + } + + @Test + public void updateGroupType_updateDerivedFrom() { + GroupTypeDefinition rootGroupType = createGroupTypeDef(); + GroupTypeDefinition derivedType1 = createGroupTypeDef("derivedType1", "descr", rootGroupType.getType()); + GroupTypeDefinition groupType1 = createGroupTypeDef("type1", "descr", rootGroupType.getType()); + GroupTypeDefinition updatedGroupType = createGroupTypeDef("type1", "descr", derivedType1.getType()); + + groupTypeOperation.addGroupType(rootGroupType); + groupTypeOperation.addGroupType(derivedType1); + Either<GroupTypeDefinition, StorageOperationStatus> currGroupType = groupTypeOperation.addGroupType(groupType1); + + groupTypeOperation.updateGroupType(updatedGroupType, currGroupType.left().value()); + + Either<GroupTypeDefinition, StorageOperationStatus> latestGroupType = groupTypeOperation.getLatestGroupTypeByType(groupType1.getType()); + assertThat(latestGroupType.left().value().getDerivedFrom()).isEqualTo(derivedType1.getType()); + } + @Test + public void updateGroupType_updateDerivedFrom_CauseEndlessRecursion() { + GroupTypeDefinition rootGroupType = createGroupTypeDef(); + GroupTypeDefinition derivedType1 = createGroupTypeDef("derivedType1", "descr", rootGroupType.getType()); + GroupTypeDefinition groupType1 = createGroupTypeDef("type1", "descr", derivedType1.getType()); + GroupTypeDefinition updatedGroupType = createGroupTypeDef("derivedType1", "descr", groupType1.getType()); + + groupTypeOperation.addGroupType(rootGroupType); + Either<GroupTypeDefinition, StorageOperationStatus> currGroupType = groupTypeOperation.addGroupType(derivedType1); + groupTypeOperation.addGroupType(groupType1); + + Either<GroupTypeDefinition, StorageOperationStatus> updateResult = groupTypeOperation.updateGroupType(updatedGroupType, currGroupType.left().value()); + assertThat(updateResult.right().value()).isEqualTo(StorageOperationStatus.GENERAL_ERROR); + + Either<GroupTypeDefinition, StorageOperationStatus> latestGroupType = groupTypeOperation.getLatestGroupTypeByType(updatedGroupType.getType()); + assertThat(latestGroupType.left().value().getDerivedFrom()).isEqualTo(rootGroupType.getType()); + } + + private PropertyDefinition duplicateProperty(PropertyDefinition prop1, String updatedValue, String updatedType) { + PropertyDefinition updatedProp1 = new PropertyDefinition(prop1); + updatedProp1.setUniqueId(null); + updatedProp1.setDefaultValue(updatedValue); + updatedProp1.setType(updatedType); + return updatedProp1; + } + + private void verifyDerivedFromNodeEqualsToRootGroupType(GroupTypeDefinition rootGroupType, String parentGroupId) { + Either<ImmutablePair<GroupTypeData, GraphEdge>, TitanOperationStatus> derivedFromRelation = titanDao.getChild(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.GroupType), parentGroupId, GraphEdgeLabels.DERIVED_FROM, + NodeTypeEnum.GroupType, GroupTypeData.class); + assertThat(derivedFromRelation.left().value().getLeft().getGroupTypeDataDefinition()) + .isEqualToComparingFieldByField(rootGroupType); + } + + private void verifyDerivedFromRelationDoesntExist(String parentGroupId) { + Either<ImmutablePair<GroupTypeData, GraphEdge>, TitanOperationStatus> derivedFromRelation = titanDao.getChild(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.GroupType), parentGroupId, GraphEdgeLabels.DERIVED_FROM, + NodeTypeEnum.GroupType, GroupTypeData.class); + assertThat(derivedFromRelation.right().value()) + .isEqualTo(TitanOperationStatus.NOT_FOUND); + } + + private GroupTypeDefinition createGroupTypeDef() { + return createGroupTypeDef("tosca.groups.Root", "description: The TOSCA Group Type all other TOSCA Group Types derive from", null, new PropertyDefinition[]{}); + } + + private GroupTypeDefinition createGroupTypeDef(PropertyDefinition ... props) { + return createGroupTypeDef("tosca.groups.Root", null, props); + } + + private GroupTypeDefinition createGroupTypeDef(String type, String derivedFrom, PropertyDefinition ... props) { + GroupTypeDefinition groupType = createGroupTypeDef(type, "description: The TOSCA Group Type all other TOSCA Group Types derive from", derivedFrom); + groupType.setProperties(asList(props)); + return groupType; + } + + private GroupTypeDefinition createGroupTypeDef(String type, String description, String derivedFrom) { + return createGroupTypeDef(type, description, derivedFrom, null); + } + + private GroupTypeDefinition createGroupTypeDef(String type, String description, String derivedFrom, PropertyDefinition ... props) { + GroupTypeDataDefinition groupTypeDataDefinition = new GroupTypeDataDefinition(); + groupTypeDataDefinition.setDescription(description); + groupTypeDataDefinition.setType(type); + groupTypeDataDefinition.setName(type + "name"); + groupTypeDataDefinition.setIcon(type + "icon"); + groupTypeDataDefinition.setDerivedFrom(derivedFrom); + GroupTypeDefinition groupTypeDefinition = new GroupTypeDefinition(groupTypeDataDefinition); + groupTypeDefinition.setHighestVersion(true); + groupTypeDefinition.setVersion("1.0"); + if (props != null) { + groupTypeDefinition.setProperties(asList(props)); + } + return groupTypeDefinition; + } + } |