re base code
[sdc.git] / catalog-model / src / test / java / org / openecomp / sdc / be / model / operations / impl / ToscaElementLifecycleOperationTest.java
index 8f8baea..506bec4 100644 (file)
@@ -23,11 +23,7 @@ package org.openecomp.sdc.be.model.operations.impl;
 import com.thinkaurelius.titan.core.TitanGraph;
 import com.thinkaurelius.titan.core.TitanVertex;
 import fj.data.Either;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.*;
 import org.junit.rules.TestName;
 import org.junit.runner.RunWith;
 import org.openecomp.sdc.be.dao.jsongraph.GraphVertex;
@@ -61,554 +57,555 @@ import org.openecomp.sdc.common.util.ValidationUtils;
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.OutputStream;
+import java.util.*;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 
 @RunWith(SpringJUnit4ClassRunner.class)
 @ContextConfiguration("classpath:application-context-test.xml")
 public class ToscaElementLifecycleOperationTest extends ModelTestBase {
 
-       @javax.annotation.Resource
-       protected TitanDao titanDao;
+    @javax.annotation.Resource
+    protected TitanDao titanDao;
 
-       @javax.annotation.Resource
-       private NodeTypeOperation nodeTypeOperation;
+    @javax.annotation.Resource
+    private NodeTypeOperation nodeTypeOperation;
 
-       @javax.annotation.Resource
-       private TopologyTemplateOperation topologyTemplateOperation;
+    @javax.annotation.Resource
+    private TopologyTemplateOperation topologyTemplateOperation;
 
-       @javax.annotation.Resource
-       private ToscaElementLifecycleOperation lifecycleOperation;
+    @javax.annotation.Resource
+    private ToscaElementLifecycleOperation lifecycleOperation;
 
-       String categoryName = "category";
-       String subcategory = "mycategory";
-       String outputDirectory = "C:\\Output";
+    String categoryName = "category";
+    String subcategory = "mycategory";
+    String outputDirectory = "C:\\Output";
 
-       @Rule
-       public TestName name = new TestName();
+    @Rule
+    public TestName name = new TestName();
 
-       @BeforeClass
-       public static void initLifecycleOperation() {
-               ModelTestBase.init();
-       }
-
-       private GraphVertex ownerVertex;
-       private GraphVertex modifierVertex;
-       private GraphVertex vfVertex;
-       private GraphVertex serviceVertex;
-       private GraphVertex rootVertex;
+    @BeforeClass
+    public static void initLifecycleOperation() {
+        ModelTestBase.init();
+    }
 
-       @Before
-       public void setupBefore() {
-               clearGraph();
-               createUsers();
-               createResourceCategory();
-               createServiceCategory();
-               GraphTestUtils.createRootCatalogVertex(titanDao);
-               rootVertex = createRootNodeType();
-               createNodeType("firstVf");
-               serviceVertex = createTopologyTemplate("firstService");
-       }
+    private GraphVertex ownerVertex;
+    private GraphVertex modifierVertex;
+    private GraphVertex vfVertex;
+    private GraphVertex serviceVertex;
+    private GraphVertex rootVertex;
 
-       @Test
-       public void lifecycleTest() {
-               Either<ToscaElement, StorageOperationStatus> res = lifecycleOperation.checkinToscaELement(LifecycleStateEnum.findState((String) vfVertex.getMetadataProperty(GraphPropertyEnum.STATE)), vfVertex.getUniqueId(), modifierVertex.getUniqueId(),
-                               ownerVertex.getUniqueId());
-               StorageOperationStatus status;
+    @Before
+    public void setupBefore() {
+        clearGraph();
+        createUsers();
+        createResourceCategory();
+        createServiceCategory();
+        GraphTestUtils.createRootCatalogVertex(titanDao);
+        rootVertex = createRootNodeType();
+        createNodeType("firstVf");
+        serviceVertex = createTopologyTemplate("firstService");
+    }
 
-               assertTrue(res.isLeft());
-               // 1-node type
-               // 2-vf
-               // 3- service
-               verifyInCatalogData(3, null);
+    @Test
+    public void lifecycleTest() {
+        Either<ToscaElement, StorageOperationStatus> res = lifecycleOperation.checkinToscaELement(LifecycleStateEnum.findState((String) vfVertex.getMetadataProperty(GraphPropertyEnum.STATE)), vfVertex.getUniqueId(), modifierVertex.getUniqueId(),
+                ownerVertex.getUniqueId());
+        StorageOperationStatus status;
 
-               String id = res.left().value().getUniqueId();
-
-               res = lifecycleOperation.checkoutToscaElement(id, ownerVertex.getUniqueId(), modifierVertex.getUniqueId());
-               assertTrue(res.isLeft());
-               id = res.left().value().getUniqueId();
-
-               verifyInCatalogData(3, null);
-
-               PropertyDataDefinition prop55 = new PropertyDataDefinition();
-               prop55.setName("prop55");
-               prop55.setDefaultValue("def55");
-
-               status = nodeTypeOperation.addToscaDataToToscaElement(id, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, prop55, JsonPresentationFields.NAME);
-               assertTrue(status == StorageOperationStatus.OK);
-
-               CapabilityDataDefinition cap1 = new CapabilityDataDefinition();
-               cap1.setName("cap1");
-               cap1.setDescription("create");
-               cap1.setUniqueId(UniqueIdBuilder.buildCapabilityUid(id, "cap1"));
-
-               status = nodeTypeOperation.addToscaDataToToscaElement(id, EdgeLabelEnum.CAPABILITIES, VertexTypeEnum.CAPABILTIES, cap1, JsonPresentationFields.NAME);
-               assertTrue(status == StorageOperationStatus.OK);
-
-               res = lifecycleOperation.checkinToscaELement(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT, id, ownerVertex.getUniqueId(), ownerVertex.getUniqueId());
-               assertTrue(res.isLeft());
-               id = res.left().value().getUniqueId();
-
-               res = lifecycleOperation.checkoutToscaElement(id, ownerVertex.getUniqueId(), ownerVertex.getUniqueId());
-               assertTrue(res.isLeft());
-               id = res.left().value().getUniqueId();
-
-               prop55.setDefaultValue("AAAAAAAA");
-               status = nodeTypeOperation.updateToscaDataOfToscaElement(id, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, prop55, JsonPresentationFields.NAME);
-               assertTrue(status == StorageOperationStatus.OK);
-
-               cap1.setDescription("update");
-
-               status = nodeTypeOperation.updateToscaDataOfToscaElement(id, EdgeLabelEnum.CAPABILITIES, VertexTypeEnum.CAPABILTIES, cap1, JsonPresentationFields.NAME);
-               assertTrue(status == StorageOperationStatus.OK);
-
-               PropertyDataDefinition prop66 = new PropertyDataDefinition();
-               prop66.setName("prop66");
-               prop66.setDefaultValue("def66");
-
-               status = nodeTypeOperation.addToscaDataToToscaElement(id, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, prop66, JsonPresentationFields.NAME);
-               assertTrue(status == StorageOperationStatus.OK);
-
-               res = lifecycleOperation.requestCertificationToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
-               assertTrue(res.isLeft());
-               id = res.left().value().getUniqueId();
-
-               res = lifecycleOperation.startCertificationToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
-               assertTrue(res.isLeft());
-               id = res.left().value().getUniqueId();
-
-               res = lifecycleOperation.certifyToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
-               assertTrue(res.isLeft());
-               id = res.left().value().getUniqueId();
-
-               verifyInCatalogData(3, null);
-               
-               res = lifecycleOperation.checkoutToscaElement(id, ownerVertex.getUniqueId(), modifierVertex.getUniqueId());
-               assertTrue(res.isLeft());
-               id = res.left().value().getUniqueId();
-
-               verifyInCatalogData(4, null);
-               
-               PropertyDataDefinition prop77 = new PropertyDataDefinition();
-               prop77.setName("prop77");
-               prop77.setDefaultValue("def77");
-
-               status = nodeTypeOperation.addToscaDataToToscaElement(id, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, prop77, JsonPresentationFields.NAME);
-               assertTrue(status == StorageOperationStatus.OK);
-
-               res = lifecycleOperation.checkinToscaELement(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT, id, ownerVertex.getUniqueId(), ownerVertex.getUniqueId());
-               assertTrue(res.isLeft());
-               id = res.left().value().getUniqueId();
-
-               res = lifecycleOperation.checkoutToscaElement(id, ownerVertex.getUniqueId(), ownerVertex.getUniqueId());
-               assertTrue(res.isLeft());
-               id = res.left().value().getUniqueId();
-
-               PropertyDataDefinition prop88 = new PropertyDataDefinition();
-               prop88.setName("prop88");
-               prop88.setDefaultValue("def88");
-
-               status = nodeTypeOperation.addToscaDataToToscaElement(id, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, prop88, JsonPresentationFields.NAME);
-               assertTrue(status == StorageOperationStatus.OK);
-
-               res = lifecycleOperation.requestCertificationToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
-               assertTrue(res.isLeft());
-               id = res.left().value().getUniqueId();
-
-               res = lifecycleOperation.startCertificationToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
-               assertTrue(res.isLeft());
-               id = res.left().value().getUniqueId();
-
-               res = lifecycleOperation.certifyToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
-               assertTrue(res.isLeft());
-               id = res.left().value().getUniqueId();
-               verifyInCatalogData(3, null);
-               
-               res = lifecycleOperation.checkoutToscaElement(id, ownerVertex.getUniqueId(), ownerVertex.getUniqueId());
-               assertTrue(res.isLeft());
-               id = res.left().value().getUniqueId();
-
-               verifyInCatalogData(4, null);
-               
-               PropertyDataDefinition prop99 = new PropertyDataDefinition();
-               prop99.setName("prop99");
-               prop99.setDefaultValue("def99");
-
-               status = nodeTypeOperation.addToscaDataToToscaElement(id, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, prop99, JsonPresentationFields.NAME);
-               assertTrue(status == StorageOperationStatus.OK);
-
-               res = lifecycleOperation.requestCertificationToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
-               assertTrue(res.isLeft());
-               id = res.left().value().getUniqueId();
-
-               res = lifecycleOperation.startCertificationToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
-               assertTrue(res.isLeft());
-               id = res.left().value().getUniqueId();
-
-               status = nodeTypeOperation.deleteToscaDataElement(id, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, "prop99", JsonPresentationFields.NAME);
-               assertTrue(status == StorageOperationStatus.OK);
-
-               // cancel certification
-               res = lifecycleOperation.cancelOrFailCertification(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId(), LifecycleStateEnum.READY_FOR_CERTIFICATION);
-               assertTrue(res.isLeft());
-               id = res.left().value().getUniqueId();
-
-               res = lifecycleOperation.startCertificationToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
-               assertTrue(res.isLeft());
-               id = res.left().value().getUniqueId();
-
-               // fail certification
-               res = lifecycleOperation.cancelOrFailCertification(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId(), LifecycleStateEnum.NOT_CERTIFIED_CHECKIN);
-               assertTrue(res.isLeft());
-               id = res.left().value().getUniqueId();
-               verifyInCatalogData(4, null);
-               // exportGraphMl(titanDao.getGraph().left().value());
-
-       }
-
-       @Test
-       public void serviceConformanceLevelTest() {
-               Either<ToscaElement, StorageOperationStatus> res = lifecycleOperation.checkinToscaELement(LifecycleStateEnum.findState((String) serviceVertex.getMetadataProperty(GraphPropertyEnum.STATE)), serviceVertex.getUniqueId(),
-                               modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
-
-               assertTrue(res.isLeft());
-               String id = res.left().value().getUniqueId();
-
-               res = lifecycleOperation.checkoutToscaElement(id, ownerVertex.getUniqueId(), modifierVertex.getUniqueId());
-               assertTrue(res.isLeft());
-
-               String conformanceLevel = res.left().value().getMetadataValue(JsonPresentationFields.CONFORMANCE_LEVEL).toString();
-               assertEquals(conformanceLevel, ModelTestBase.configurationManager.getConfiguration().getToscaConformanceLevel());
-       }
-
-       @Test
-       public void catalogTest() {
-               // start position - 3 in catalog
-               List<String> expectedIds = new ArrayList<String>();
-               expectedIds.add(rootVertex.getUniqueId());
-               expectedIds.add(vfVertex.getUniqueId());
-               expectedIds.add(serviceVertex.getUniqueId());
-
-               verifyInCatalogData(3, expectedIds);
-               
-               GraphVertex vertex4 = createTopologyTemplate("topTemp4");
-               expectedIds.add(vertex4.getUniqueId());
-               verifyInCatalogData(4, expectedIds);
-
-               Either<ToscaElement, StorageOperationStatus> res = lifecycleOperation.undoCheckout(vertex4.getUniqueId());
-               expectedIds.remove(vertex4.getUniqueId());
-               verifyInCatalogData(3, expectedIds);
-
-               vertex4 = createTopologyTemplate("topTemp4");
-               expectedIds.add(vertex4.getUniqueId());
-               verifyInCatalogData(4, expectedIds);
-
-               res = lifecycleOperation.checkinToscaELement(LifecycleStateEnum.findState((String) vertex4.getMetadataProperty(GraphPropertyEnum.STATE)), vertex4.getUniqueId(), modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
-               Either<ToscaElement, StorageOperationStatus> certifyToscaElement = lifecycleOperation.certifyToscaElement(vertex4.getUniqueId(), modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
-               assertTrue(certifyToscaElement.isLeft());
-               expectedIds.remove(vertex4.getUniqueId());
-               String certifiedId = certifyToscaElement.left().value().getUniqueId();
-               expectedIds.add(certifiedId);
-               verifyInCatalogData(4, expectedIds);
-               
-               res = lifecycleOperation.checkoutToscaElement(certifiedId, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
-               assertTrue(certifyToscaElement.isLeft());
-               expectedIds.add(res.left().value().getUniqueId());
-               verifyInCatalogData(5, expectedIds);
-       }
-
-       private void createResourceCategory() {
-
-               GraphVertex cat = new GraphVertex(VertexTypeEnum.RESOURCE_CATEGORY);
-               Map<GraphPropertyEnum, Object> metadataProperties = new HashMap<>();
-               String catId = UniqueIdBuilder.buildComponentCategoryUid(categoryName, VertexTypeEnum.RESOURCE_CATEGORY);
-               cat.setUniqueId(catId);
-               metadataProperties.put(GraphPropertyEnum.UNIQUE_ID, catId);
-               metadataProperties.put(GraphPropertyEnum.LABEL, VertexTypeEnum.RESOURCE_CATEGORY.getName());
-               metadataProperties.put(GraphPropertyEnum.NAME, categoryName);
-               metadataProperties.put(GraphPropertyEnum.NORMALIZED_NAME, ValidationUtils.normalizeCategoryName4Uniqueness(categoryName));
-               cat.setMetadataProperties(metadataProperties);
-               cat.updateMetadataJsonWithCurrentMetadataProperties();
-
-               GraphVertex subCat = new GraphVertex(VertexTypeEnum.RESOURCE_SUBCATEGORY);
-               metadataProperties = new HashMap<>();
-               String subCatId = UniqueIdBuilder.buildSubCategoryUid(cat.getUniqueId(), subcategory);
-               subCat.setUniqueId(subCatId);
-               metadataProperties.put(GraphPropertyEnum.UNIQUE_ID, subCatId);
-               metadataProperties.put(GraphPropertyEnum.LABEL, VertexTypeEnum.RESOURCE_SUBCATEGORY.getName());
-               metadataProperties.put(GraphPropertyEnum.NAME, subcategory);
-               metadataProperties.put(GraphPropertyEnum.NORMALIZED_NAME, ValidationUtils.normalizeCategoryName4Uniqueness(subcategory));
-               subCat.setMetadataProperties(metadataProperties);
-               subCat.updateMetadataJsonWithCurrentMetadataProperties();
-
-               Either<GraphVertex, TitanOperationStatus> catRes = titanDao.createVertex(cat);
-
-               Either<GraphVertex, TitanOperationStatus> subCatRes = titanDao.createVertex(subCat);
-
-               TitanOperationStatus status = titanDao.createEdge(catRes.left().value().getVertex(), subCatRes.left().value().getVertex(), EdgeLabelEnum.SUB_CATEGORY, new HashMap<>());
-               assertEquals(TitanOperationStatus.OK, status);
-       }
-
-       private void createServiceCategory() {
-
-               GraphVertex cat = new GraphVertex(VertexTypeEnum.SERVICE_CATEGORY);
-               Map<GraphPropertyEnum, Object> metadataProperties = new HashMap<>();
-               String catId = UniqueIdBuilder.buildComponentCategoryUid(categoryName, VertexTypeEnum.SERVICE_CATEGORY);
-               cat.setUniqueId(catId);
-               metadataProperties.put(GraphPropertyEnum.UNIQUE_ID, catId);
-               metadataProperties.put(GraphPropertyEnum.LABEL, VertexTypeEnum.SERVICE_CATEGORY.getName());
-               metadataProperties.put(GraphPropertyEnum.NAME, categoryName);
-               metadataProperties.put(GraphPropertyEnum.NORMALIZED_NAME, ValidationUtils.normalizeCategoryName4Uniqueness(categoryName));
-               cat.setMetadataProperties(metadataProperties);
-               cat.updateMetadataJsonWithCurrentMetadataProperties();
-
-               Either<GraphVertex, TitanOperationStatus> catRes = titanDao.createVertex(cat);
-
-               assertTrue(catRes.isLeft());
-       }
-
-       private GraphVertex createTopologyTemplate(String name) {
-
-               TopologyTemplate service = new TopologyTemplate();
-               String uniqueId = UniqueIdBuilder.buildResourceUniqueId();
-               service.setUniqueId(uniqueId);
-               service.setCreatorUserId((String) ownerVertex.getMetadataProperty(GraphPropertyEnum.USERID));
-               service.getMetadata().put(JsonPresentationFields.NAME.getPresentation(), name);
-               service.getMetadata().put(JsonPresentationFields.UNIQUE_ID.getPresentation(), uniqueId);
-               service.getMetadata().put(JsonPresentationFields.VERSION.getPresentation(), "0.1");
-               service.getMetadata().put(JsonPresentationFields.TYPE.getPresentation(), ResourceTypeEnum.VF.name());
-               service.getMetadata().put(JsonPresentationFields.COMPONENT_TYPE.getPresentation(), ComponentTypeEnum.RESOURCE);
-               List<CategoryDefinition> categories = new ArrayList<>();
-               CategoryDefinition cat = new CategoryDefinition();
-               categories.add(cat);
-               cat.setName(categoryName);
-               service.setCategories(categories);
-
-               service.setComponentType(ComponentTypeEnum.SERVICE);
-               Either<TopologyTemplate, StorageOperationStatus> createRes = topologyTemplateOperation.createTopologyTemplate(service);
-               assertTrue(createRes.isLeft());
-
-               Either<GraphVertex, TitanOperationStatus> getNodeTyeRes = titanDao.getVertexById(createRes.left().value().getUniqueId());
-               assertTrue(getNodeTyeRes.isLeft());
-
-               // serviceVertex = getNodeTyeRes.left().value();
-
-               return getNodeTyeRes.left().value();
-       }
-
-       private <T extends ToscaDataDefinition> NodeType createNodeType(String nodeTypeName) {
-
-               NodeType vf = new NodeType();
-               String uniqueId = UniqueIdBuilder.buildResourceUniqueId();
-               vf.setUniqueId(uniqueId);
-               vf.setCreatorUserId((String) ownerVertex.getMetadataProperty(GraphPropertyEnum.USERID));
-               vf.getMetadata().put(JsonPresentationFields.NAME.getPresentation(), nodeTypeName);
-               vf.getMetadata().put(JsonPresentationFields.UNIQUE_ID.getPresentation(), uniqueId);
-               vf.getMetadata().put(JsonPresentationFields.VERSION.getPresentation(), "0.1");
-               vf.getMetadata().put(JsonPresentationFields.TYPE.getPresentation(), ResourceTypeEnum.VF.name());
-               vf.getMetadata().put(JsonPresentationFields.COMPONENT_TYPE.getPresentation(), ComponentTypeEnum.RESOURCE);
-               List<CategoryDefinition> categories = new ArrayList<>();
-               CategoryDefinition cat = new CategoryDefinition();
-               categories.add(cat);
-               cat.setName(categoryName);
-               List<SubCategoryDefinition> subCategories = new ArrayList<>();
-               SubCategoryDefinition subCat = new SubCategoryDefinition();
-               subCat.setName(subcategory);
-               subCategories.add(subCat);
-               cat.setSubcategories(subCategories);
-               vf.setCategories(categories);
-
-               List<String> derivedFrom = new ArrayList<>();
-               derivedFrom.add("root");
-               vf.setDerivedFrom(derivedFrom);
-
-               vf.setComponentType(ComponentTypeEnum.RESOURCE);
-               Either<NodeType, StorageOperationStatus> createVFRes = nodeTypeOperation.createNodeType(vf);
-               assertTrue(createVFRes.isLeft());
-
-               Either<GraphVertex, TitanOperationStatus> getNodeTyeRes = titanDao.getVertexById(createVFRes.left().value().getUniqueId());
-               assertTrue(getNodeTyeRes.isLeft());
-
-               vfVertex = getNodeTyeRes.left().value();
-
-               List<PropertyDataDefinition> addProperties = new ArrayList<>();
-               PropertyDataDefinition prop11 = new PropertyDataDefinition();
-               prop11.setName("prop11");
-               prop11.setDefaultValue("def11");
-
-               addProperties.add(prop11);
-
-               PropertyDataDefinition prop22 = new PropertyDataDefinition();
-               prop22.setName("prop22");
-               prop22.setDefaultValue("def22");
-               addProperties.add(prop22);
-
-               StorageOperationStatus status = nodeTypeOperation.addToscaDataToToscaElement(vfVertex, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, addProperties, JsonPresentationFields.NAME);
-               assertTrue(status == StorageOperationStatus.OK);
-
-               PropertyDataDefinition prop33 = new PropertyDataDefinition();
-               prop33.setName("prop33");
-               prop33.setDefaultValue("def33");
-
-               status = nodeTypeOperation.addToscaDataToToscaElement(vfVertex, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, prop33, JsonPresentationFields.NAME);
-               assertTrue(status == StorageOperationStatus.OK);
-
-               PropertyDataDefinition prop44 = new PropertyDataDefinition();
-               prop44.setName("prop44");
-               prop44.setDefaultValue("def44");
-
-               status = nodeTypeOperation.addToscaDataToToscaElement(vfVertex.getUniqueId(), EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, prop44, JsonPresentationFields.NAME);
-               assertTrue(status == StorageOperationStatus.OK);
-
-               PropertyDataDefinition capProp = new PropertyDataDefinition();
-               capProp.setName("capProp");
-               capProp.setDefaultValue("capPropDef");
-
-               MapDataDefinition dataToCreate = new MapPropertiesDataDefinition();
-               dataToCreate.put("capProp", capProp);
-
-               Map<String, MapDataDefinition> capProps = new HashMap();
-               capProps.put("capName", dataToCreate);
-
-               Either<GraphVertex, StorageOperationStatus> res = nodeTypeOperation.assosiateElementToData(vfVertex, VertexTypeEnum.CAPABILITIES_PROPERTIES, EdgeLabelEnum.CAPABILITIES_PROPERTIES, capProps);
-
-               // exportGraphMl(titanDao.getGraph().left().value());
-
-               List<String> pathKeys = new ArrayList<>();
-               pathKeys.add("capName");
-               capProp.setDefaultValue("BBBB");
-               status = nodeTypeOperation.updateToscaDataDeepElementOfToscaElement(vfVertex, EdgeLabelEnum.CAPABILITIES_PROPERTIES, VertexTypeEnum.CAPABILITIES_PROPERTIES, capProp, pathKeys, JsonPresentationFields.NAME);
-               return vf;
-       }
-
-       private GraphVertex createRootNodeType() {
-
-               NodeType vf = new NodeType();
-               String uniqueId = UniqueIdBuilder.buildResourceUniqueId();
-               vf.setUniqueId(uniqueId);
-               vf.setComponentType(ComponentTypeEnum.RESOURCE);
-               vf.setCreatorUserId((String) ownerVertex.getMetadataProperty(GraphPropertyEnum.USERID));
-               vf.getMetadata().put(JsonPresentationFields.NAME.getPresentation(), "root");
-               vf.getMetadata().put(JsonPresentationFields.UNIQUE_ID.getPresentation(), uniqueId);
-               vf.getMetadata().put(JsonPresentationFields.VERSION.getPresentation(), "1.0");
-               vf.getMetadata().put(JsonPresentationFields.TYPE.getPresentation(), ResourceTypeEnum.VFC.name());
-               vf.getMetadata().put(JsonPresentationFields.LIFECYCLE_STATE.getPresentation(), LifecycleStateEnum.CERTIFIED.name());
-               vf.getMetadata().put(JsonPresentationFields.TOSCA_RESOURCE_NAME.getPresentation(), "root");
-               vf.getMetadata().put(JsonPresentationFields.HIGHEST_VERSION.getPresentation(), true);
-
-               List<CategoryDefinition> categories = new ArrayList<>();
-               CategoryDefinition cat = new CategoryDefinition();
-               categories.add(cat);
-               cat.setName(categoryName);
-               List<SubCategoryDefinition> subCategories = new ArrayList<>();
-               SubCategoryDefinition subCat = new SubCategoryDefinition();
-               subCat.setName(subcategory);
-               subCategories.add(subCat);
-               cat.setSubcategories(subCategories);
-               vf.setCategories(categories);
-
-               List<String> derivedFrom = new ArrayList<>();
-               vf.setDerivedFrom(derivedFrom);
-
-               Map<String, PropertyDataDefinition> properties = new HashMap<>();
-               PropertyDataDefinition prop1 = new PropertyDataDefinition();
-               prop1.setName("derived1");
-               prop1.setDefaultValue("deriveddef1");
-
-               properties.put("derived1", prop1);
-
-               PropertyDataDefinition prop2 = new PropertyDataDefinition();
-               prop2.setUniqueId("derived2");
-               prop2.setName("deriveddef2");
-               properties.put("derived2", prop2);
-
-               PropertyDataDefinition prop3 = new PropertyDataDefinition();
-               prop3.setName("derived3");
-               prop3.setDefaultValue("deriveddef3");
-               properties.put("derived3", prop3);
-
-               vf.setProperties(properties);
-               vf.setComponentType(ComponentTypeEnum.RESOURCE);
-               Either<NodeType, StorageOperationStatus> createVFRes = nodeTypeOperation.createNodeType(vf);
-               assertTrue(createVFRes.isLeft());
-
-               Either<GraphVertex, TitanOperationStatus> getNodeTyeRes = titanDao.getVertexById(createVFRes.left().value().getUniqueId());
-               assertTrue(getNodeTyeRes.isLeft());
-               return getNodeTyeRes.left().value();
-       }
-
-       private void createUsers() {
-
-               GraphVertex ownerV = new GraphVertex(VertexTypeEnum.USER);
-               ownerV.setUniqueId("user1");
-
-               Map<GraphPropertyEnum, Object> metadataProperties = new HashMap<>();
-               metadataProperties.put(GraphPropertyEnum.USERID, ownerV.getUniqueId());
-               metadataProperties.put(GraphPropertyEnum.LABEL, VertexTypeEnum.USER.getName());
-               metadataProperties.put(GraphPropertyEnum.NAME, "user1");
-               ownerV.setMetadataProperties(metadataProperties);
-               ownerV.updateMetadataJsonWithCurrentMetadataProperties();
-               ownerV.setJson(new HashMap<>());
-               Either<GraphVertex, TitanOperationStatus> createUserRes = titanDao.createVertex(ownerV);
-               assertTrue(createUserRes.isLeft());
-
-               ownerVertex = createUserRes.left().value();
-
-               GraphVertex modifierV = new GraphVertex(VertexTypeEnum.USER);
-               modifierV.setUniqueId("user2");
-
-               metadataProperties = new HashMap<>();
-               metadataProperties.put(GraphPropertyEnum.USERID, modifierV.getUniqueId());
-               metadataProperties.put(GraphPropertyEnum.LABEL, VertexTypeEnum.USER.getName());
-               metadataProperties.put(GraphPropertyEnum.NAME, "user2");
-               modifierV.setMetadataProperties(metadataProperties);
-               modifierV.updateMetadataJsonWithCurrentMetadataProperties();
-               modifierV.setJson(new HashMap<>());
-               createUserRes = titanDao.createVertex(modifierV);
-               assertTrue(createUserRes.isLeft());
-
-               modifierVertex = createUserRes.left().value();
-
-               Either<GraphVertex, TitanOperationStatus> getOwnerRes = lifecycleOperation.findUser(ownerVertex.getUniqueId());
-               assertTrue(getOwnerRes.isLeft());
-
-       }
-
-       public void verifyInCatalogData(int expected, List<String> expectedIds) {
-
-               Either<List<CatalogComponent>, StorageOperationStatus> highestResourcesRes = topologyTemplateOperation.getElementCatalogData();
-               assertTrue(highestResourcesRes.isLeft());
-               List<CatalogComponent> highestResources = highestResourcesRes.left().value();
-               // calculate expected count value
-               assertEquals(expected, highestResources.stream().count());
-               if (expectedIds != null) {
-                       highestResources.forEach(a -> assertTrue(expectedIds.contains(a.getUniqueId())));
-               }
-       }
-
-       @After
-       public void teardown() {
-               clearGraph();
-       }
-
-       private void clearGraph() {
-               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();
-       }
+        assertTrue(res.isLeft());
+        // 1-node type
+        // 2-vf
+        // 3- service
+        verifyInCatalogData(3, null);
+
+        String id = res.left().value().getUniqueId();
+
+        res = lifecycleOperation.checkoutToscaElement(id, ownerVertex.getUniqueId(), modifierVertex.getUniqueId());
+        assertTrue(res.isLeft());
+        id = res.left().value().getUniqueId();
+
+        verifyInCatalogData(3, null);
+
+        PropertyDataDefinition prop55 = new PropertyDataDefinition();
+        prop55.setName("prop55");
+        prop55.setDefaultValue("def55");
+
+        status = nodeTypeOperation.addToscaDataToToscaElement(id, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, prop55, JsonPresentationFields.NAME);
+        assertSame(status, StorageOperationStatus.OK);
+
+        CapabilityDataDefinition cap1 = new CapabilityDataDefinition();
+        cap1.setName("cap1");
+        cap1.setDescription("create");
+        cap1.setUniqueId(UniqueIdBuilder.buildCapabilityUid(id, "cap1"));
+
+        status = nodeTypeOperation.addToscaDataToToscaElement(id, EdgeLabelEnum.CAPABILITIES, VertexTypeEnum.CAPABILTIES, cap1, JsonPresentationFields.NAME);
+        assertSame(status, StorageOperationStatus.OK);
+
+        res = lifecycleOperation.checkinToscaELement(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT, id, ownerVertex.getUniqueId(), ownerVertex.getUniqueId());
+        assertTrue(res.isLeft());
+        id = res.left().value().getUniqueId();
+
+        res = lifecycleOperation.checkoutToscaElement(id, ownerVertex.getUniqueId(), ownerVertex.getUniqueId());
+        assertTrue(res.isLeft());
+        id = res.left().value().getUniqueId();
+
+        prop55.setDefaultValue("AAAAAAAA");
+        status = nodeTypeOperation.updateToscaDataOfToscaElement(id, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, prop55, JsonPresentationFields.NAME);
+        assertSame(status, StorageOperationStatus.OK);
+
+        cap1.setDescription("update");
+
+        status = nodeTypeOperation.updateToscaDataOfToscaElement(id, EdgeLabelEnum.CAPABILITIES, VertexTypeEnum.CAPABILTIES, cap1, JsonPresentationFields.NAME);
+        assertSame(status, StorageOperationStatus.OK);
+
+        PropertyDataDefinition prop66 = new PropertyDataDefinition();
+        prop66.setName("prop66");
+        prop66.setDefaultValue("def66");
+
+        status = nodeTypeOperation.addToscaDataToToscaElement(id, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, prop66, JsonPresentationFields.NAME);
+        assertSame(status, StorageOperationStatus.OK);
+
+        res = lifecycleOperation.requestCertificationToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
+        assertTrue(res.isLeft());
+        id = res.left().value().getUniqueId();
+
+        res = lifecycleOperation.startCertificationToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
+        assertTrue(res.isLeft());
+        id = res.left().value().getUniqueId();
+
+        res = lifecycleOperation.certifyToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
+        assertTrue(res.isLeft());
+        id = res.left().value().getUniqueId();
+
+        verifyInCatalogData(3, null);
+
+        res = lifecycleOperation.checkoutToscaElement(id, ownerVertex.getUniqueId(), modifierVertex.getUniqueId());
+        assertTrue(res.isLeft());
+        id = res.left().value().getUniqueId();
+
+        verifyInCatalogData(4, null);
+
+        PropertyDataDefinition prop77 = new PropertyDataDefinition();
+        prop77.setName("prop77");
+        prop77.setDefaultValue("def77");
+
+        status = nodeTypeOperation.addToscaDataToToscaElement(id, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, prop77, JsonPresentationFields.NAME);
+        assertSame(status, StorageOperationStatus.OK);
+
+        res = lifecycleOperation.checkinToscaELement(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT, id, ownerVertex.getUniqueId(), ownerVertex.getUniqueId());
+        assertTrue(res.isLeft());
+        id = res.left().value().getUniqueId();
+
+        res = lifecycleOperation.checkoutToscaElement(id, ownerVertex.getUniqueId(), ownerVertex.getUniqueId());
+        assertTrue(res.isLeft());
+        id = res.left().value().getUniqueId();
+
+        PropertyDataDefinition prop88 = new PropertyDataDefinition();
+        prop88.setName("prop88");
+        prop88.setDefaultValue("def88");
+
+        status = nodeTypeOperation.addToscaDataToToscaElement(id, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, prop88, JsonPresentationFields.NAME);
+        assertSame(status, StorageOperationStatus.OK);
+
+        res = lifecycleOperation.requestCertificationToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
+        assertTrue(res.isLeft());
+        id = res.left().value().getUniqueId();
+
+        res = lifecycleOperation.startCertificationToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
+        assertTrue(res.isLeft());
+        id = res.left().value().getUniqueId();
+
+        res = lifecycleOperation.certifyToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
+        assertTrue(res.isLeft());
+        id = res.left().value().getUniqueId();
+        verifyInCatalogData(3, null);
+
+        res = lifecycleOperation.checkoutToscaElement(id, ownerVertex.getUniqueId(), ownerVertex.getUniqueId());
+        assertTrue(res.isLeft());
+        id = res.left().value().getUniqueId();
+
+        verifyInCatalogData(4, null);
+
+        PropertyDataDefinition prop99 = new PropertyDataDefinition();
+        prop99.setName("prop99");
+        prop99.setDefaultValue("def99");
+
+        status = nodeTypeOperation.addToscaDataToToscaElement(id, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, prop99, JsonPresentationFields.NAME);
+        assertSame(status, StorageOperationStatus.OK);
+
+        res = lifecycleOperation.requestCertificationToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
+        assertTrue(res.isLeft());
+        id = res.left().value().getUniqueId();
+
+        res = lifecycleOperation.startCertificationToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
+        assertTrue(res.isLeft());
+        id = res.left().value().getUniqueId();
+
+        status = nodeTypeOperation.deleteToscaDataElement(id, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, "prop99", JsonPresentationFields.NAME);
+        assertSame(status, StorageOperationStatus.OK);
+
+        // cancel certification
+        res = lifecycleOperation.cancelOrFailCertification(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId(), LifecycleStateEnum.READY_FOR_CERTIFICATION);
+        assertTrue(res.isLeft());
+        id = res.left().value().getUniqueId();
+
+        res = lifecycleOperation.startCertificationToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
+        assertTrue(res.isLeft());
+        id = res.left().value().getUniqueId();
+
+        // fail certification
+        res = lifecycleOperation.cancelOrFailCertification(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId(), LifecycleStateEnum.NOT_CERTIFIED_CHECKIN);
+        assertTrue(res.isLeft());
+        id = res.left().value().getUniqueId();
+        verifyInCatalogData(4, null);
+        // exportGraphMl(titanDao.getGraph().left().value());
+
+    }
+
+    @Test
+    public void serviceConformanceLevelTest() {
+        Either<ToscaElement, StorageOperationStatus> res = lifecycleOperation.checkinToscaELement(LifecycleStateEnum.findState((String) serviceVertex.getMetadataProperty(GraphPropertyEnum.STATE)), serviceVertex.getUniqueId(),
+                modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
+
+        assertTrue(res.isLeft());
+        String id = res.left().value().getUniqueId();
+
+        res = lifecycleOperation.checkoutToscaElement(id, ownerVertex.getUniqueId(), modifierVertex.getUniqueId());
+        assertTrue(res.isLeft());
+
+        String conformanceLevel = res.left().value().getMetadataValue(JsonPresentationFields.CONFORMANCE_LEVEL).toString();
+        assertEquals(conformanceLevel, ModelTestBase.configurationManager.getConfiguration().getToscaConformanceLevel());
+    }
+
+    @Test
+    public void catalogTest() {
+        // start position - 3 in catalog
+        List<String> expectedIds = new ArrayList<>();
+        expectedIds.add(rootVertex.getUniqueId());
+        expectedIds.add(vfVertex.getUniqueId());
+        expectedIds.add(serviceVertex.getUniqueId());
+
+        verifyInCatalogData(3, expectedIds);
+
+        GraphVertex vertex4 = createTopologyTemplate("topTemp4");
+        expectedIds.add(vertex4.getUniqueId());
+        verifyInCatalogData(4, expectedIds);
+
+        Either<ToscaElement, StorageOperationStatus> res = lifecycleOperation.undoCheckout(vertex4.getUniqueId());
+        expectedIds.remove(vertex4.getUniqueId());
+        verifyInCatalogData(3, expectedIds);
+
+        vertex4 = createTopologyTemplate("topTemp4");
+        expectedIds.add(vertex4.getUniqueId());
+        verifyInCatalogData(4, expectedIds);
+
+        res = lifecycleOperation.checkinToscaELement(LifecycleStateEnum.findState((String) vertex4.getMetadataProperty(GraphPropertyEnum.STATE)), vertex4.getUniqueId(), modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
+        Either<ToscaElement, StorageOperationStatus> certifyToscaElement = lifecycleOperation.certifyToscaElement(vertex4.getUniqueId(), modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
+        assertTrue(certifyToscaElement.isLeft());
+        expectedIds.remove(vertex4.getUniqueId());
+        String certifiedId = certifyToscaElement.left().value().getUniqueId();
+        expectedIds.add(certifiedId);
+        verifyInCatalogData(4, expectedIds);
+
+        res = lifecycleOperation.checkoutToscaElement(certifiedId, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
+        assertTrue(certifyToscaElement.isLeft());
+        expectedIds.add(res.left().value().getUniqueId());
+        verifyInCatalogData(5, expectedIds);
+    }
+
+    private void createResourceCategory() {
+
+        GraphVertex cat = new GraphVertex(VertexTypeEnum.RESOURCE_CATEGORY);
+        Map<GraphPropertyEnum, Object> metadataProperties = new HashMap<>();
+        String catId = UniqueIdBuilder.buildComponentCategoryUid(categoryName, VertexTypeEnum.RESOURCE_CATEGORY);
+        cat.setUniqueId(catId);
+        metadataProperties.put(GraphPropertyEnum.UNIQUE_ID, catId);
+        metadataProperties.put(GraphPropertyEnum.LABEL, VertexTypeEnum.RESOURCE_CATEGORY.getName());
+        metadataProperties.put(GraphPropertyEnum.NAME, categoryName);
+        metadataProperties.put(GraphPropertyEnum.NORMALIZED_NAME, ValidationUtils.normalizeCategoryName4Uniqueness(categoryName));
+        cat.setMetadataProperties(metadataProperties);
+        cat.updateMetadataJsonWithCurrentMetadataProperties();
+
+        GraphVertex subCat = new GraphVertex(VertexTypeEnum.RESOURCE_SUBCATEGORY);
+        metadataProperties = new HashMap<>();
+        String subCatId = UniqueIdBuilder.buildSubCategoryUid(cat.getUniqueId(), subcategory);
+        subCat.setUniqueId(subCatId);
+        metadataProperties.put(GraphPropertyEnum.UNIQUE_ID, subCatId);
+        metadataProperties.put(GraphPropertyEnum.LABEL, VertexTypeEnum.RESOURCE_SUBCATEGORY.getName());
+        metadataProperties.put(GraphPropertyEnum.NAME, subcategory);
+        metadataProperties.put(GraphPropertyEnum.NORMALIZED_NAME, ValidationUtils.normalizeCategoryName4Uniqueness(subcategory));
+        subCat.setMetadataProperties(metadataProperties);
+        subCat.updateMetadataJsonWithCurrentMetadataProperties();
+
+        Either<GraphVertex, TitanOperationStatus> catRes = titanDao.createVertex(cat);
+
+        Either<GraphVertex, TitanOperationStatus> subCatRes = titanDao.createVertex(subCat);
+
+        TitanOperationStatus status = titanDao.createEdge(catRes.left().value().getVertex(), subCatRes.left().value().getVertex(), EdgeLabelEnum.SUB_CATEGORY, new HashMap<>());
+        assertEquals(TitanOperationStatus.OK, status);
+    }
+
+    private void createServiceCategory() {
+
+        GraphVertex cat = new GraphVertex(VertexTypeEnum.SERVICE_CATEGORY);
+        Map<GraphPropertyEnum, Object> metadataProperties = new HashMap<>();
+        String catId = UniqueIdBuilder.buildComponentCategoryUid(categoryName, VertexTypeEnum.SERVICE_CATEGORY);
+        cat.setUniqueId(catId);
+        metadataProperties.put(GraphPropertyEnum.UNIQUE_ID, catId);
+        metadataProperties.put(GraphPropertyEnum.LABEL, VertexTypeEnum.SERVICE_CATEGORY.getName());
+        metadataProperties.put(GraphPropertyEnum.NAME, categoryName);
+        metadataProperties.put(GraphPropertyEnum.NORMALIZED_NAME, ValidationUtils.normalizeCategoryName4Uniqueness(categoryName));
+        cat.setMetadataProperties(metadataProperties);
+        cat.updateMetadataJsonWithCurrentMetadataProperties();
+
+        Either<GraphVertex, TitanOperationStatus> catRes = titanDao.createVertex(cat);
+
+        assertTrue(catRes.isLeft());
+    }
+
+    private GraphVertex createTopologyTemplate(String name) {
+
+        TopologyTemplate service = new TopologyTemplate();
+        String uniqueId = UniqueIdBuilder.buildResourceUniqueId();
+        service.setUniqueId(uniqueId);
+        service.setCreatorUserId((String) ownerVertex.getMetadataProperty(GraphPropertyEnum.USERID));
+        service.getMetadata().put(JsonPresentationFields.NAME.getPresentation(), name);
+        service.getMetadata().put(JsonPresentationFields.UNIQUE_ID.getPresentation(), uniqueId);
+        service.getMetadata().put(JsonPresentationFields.VERSION.getPresentation(), "0.1");
+        service.getMetadata().put(JsonPresentationFields.TYPE.getPresentation(), ResourceTypeEnum.VF.name());
+        service.getMetadata().put(JsonPresentationFields.COMPONENT_TYPE.getPresentation(), ComponentTypeEnum.RESOURCE);
+        List<CategoryDefinition> categories = new ArrayList<>();
+        CategoryDefinition cat = new CategoryDefinition();
+        categories.add(cat);
+        cat.setName(categoryName);
+        service.setCategories(categories);
+
+        service.setComponentType(ComponentTypeEnum.SERVICE);
+        Either<TopologyTemplate, StorageOperationStatus> createRes = topologyTemplateOperation.createTopologyTemplate(service);
+        assertTrue(createRes.isLeft());
+
+        Either<GraphVertex, TitanOperationStatus> getNodeTyeRes = titanDao.getVertexById(createRes.left().value().getUniqueId());
+        assertTrue(getNodeTyeRes.isLeft());
+
+        // serviceVertex = getNodeTyeRes.left().value();
+
+        return getNodeTyeRes.left().value();
+    }
+
+    private <T extends ToscaDataDefinition> NodeType createNodeType(String nodeTypeName) {
+
+        NodeType vf = new NodeType();
+        String uniqueId = UniqueIdBuilder.buildResourceUniqueId();
+        vf.setUniqueId(uniqueId);
+        vf.setCreatorUserId((String) ownerVertex.getMetadataProperty(GraphPropertyEnum.USERID));
+        vf.getMetadata().put(JsonPresentationFields.NAME.getPresentation(), nodeTypeName);
+        vf.getMetadata().put(JsonPresentationFields.UNIQUE_ID.getPresentation(), uniqueId);
+        vf.getMetadata().put(JsonPresentationFields.VERSION.getPresentation(), "0.1");
+        vf.getMetadata().put(JsonPresentationFields.TYPE.getPresentation(), ResourceTypeEnum.VF.name());
+        vf.getMetadata().put(JsonPresentationFields.COMPONENT_TYPE.getPresentation(), ComponentTypeEnum.RESOURCE);
+        List<CategoryDefinition> categories = new ArrayList<>();
+        CategoryDefinition cat = new CategoryDefinition();
+        categories.add(cat);
+        cat.setName(categoryName);
+        List<SubCategoryDefinition> subCategories = new ArrayList<>();
+        SubCategoryDefinition subCat = new SubCategoryDefinition();
+        subCat.setName(subcategory);
+        subCategories.add(subCat);
+        cat.setSubcategories(subCategories);
+        vf.setCategories(categories);
+
+        List<String> derivedFrom = new ArrayList<>();
+        derivedFrom.add("root");
+        vf.setDerivedFrom(derivedFrom);
+
+        vf.setComponentType(ComponentTypeEnum.RESOURCE);
+        Either<NodeType, StorageOperationStatus> createVFRes = nodeTypeOperation.createNodeType(vf);
+        assertTrue(createVFRes.isLeft());
+
+        Either<GraphVertex, TitanOperationStatus> getNodeTyeRes = titanDao.getVertexById(createVFRes.left().value().getUniqueId());
+        assertTrue(getNodeTyeRes.isLeft());
+
+        vfVertex = getNodeTyeRes.left().value();
+
+        List<PropertyDataDefinition> addProperties = new ArrayList<>();
+        PropertyDataDefinition prop11 = new PropertyDataDefinition();
+        prop11.setName("prop11");
+        prop11.setDefaultValue("def11");
+
+        addProperties.add(prop11);
+
+        PropertyDataDefinition prop22 = new PropertyDataDefinition();
+        prop22.setName("prop22");
+        prop22.setDefaultValue("def22");
+        addProperties.add(prop22);
+
+        StorageOperationStatus status = nodeTypeOperation.addToscaDataToToscaElement(vfVertex, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, addProperties, JsonPresentationFields.NAME);
+        assertSame(status, StorageOperationStatus.OK);
+
+        PropertyDataDefinition prop33 = new PropertyDataDefinition();
+        prop33.setName("prop33");
+        prop33.setDefaultValue("def33");
+
+        status = nodeTypeOperation.addToscaDataToToscaElement(vfVertex, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, prop33, JsonPresentationFields.NAME);
+        assertSame(status, StorageOperationStatus.OK);
+
+        PropertyDataDefinition prop44 = new PropertyDataDefinition();
+        prop44.setName("prop44");
+        prop44.setDefaultValue("def44");
+
+        status = nodeTypeOperation.addToscaDataToToscaElement(vfVertex.getUniqueId(), EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, prop44, JsonPresentationFields.NAME);
+        assertSame(status, StorageOperationStatus.OK);
+
+        PropertyDataDefinition capProp = new PropertyDataDefinition();
+        capProp.setName("capProp");
+        capProp.setDefaultValue("capPropDef");
+
+        MapDataDefinition dataToCreate = new MapPropertiesDataDefinition();
+        dataToCreate.put("capProp", capProp);
+
+        Map<String, MapDataDefinition> capProps = new HashMap();
+        capProps.put("capName", dataToCreate);
+
+        Either<GraphVertex, StorageOperationStatus> res = nodeTypeOperation.associateElementToData(vfVertex, VertexTypeEnum.CAPABILITIES_PROPERTIES, EdgeLabelEnum.CAPABILITIES_PROPERTIES, capProps);
+
+        // exportGraphMl(titanDao.getGraph().left().value());
+
+        List<String> pathKeys = new ArrayList<>();
+        pathKeys.add("capName");
+        capProp.setDefaultValue("BBBB");
+        status = nodeTypeOperation.updateToscaDataDeepElementOfToscaElement(vfVertex, EdgeLabelEnum.CAPABILITIES_PROPERTIES, VertexTypeEnum.CAPABILITIES_PROPERTIES, capProp, pathKeys, JsonPresentationFields.NAME);
+        return vf;
+    }
+
+    private GraphVertex createRootNodeType() {
+
+        NodeType vf = new NodeType();
+        String uniqueId = UniqueIdBuilder.buildResourceUniqueId();
+        vf.setUniqueId(uniqueId);
+        vf.setComponentType(ComponentTypeEnum.RESOURCE);
+        vf.setCreatorUserId((String) ownerVertex.getMetadataProperty(GraphPropertyEnum.USERID));
+        vf.getMetadata().put(JsonPresentationFields.NAME.getPresentation(), "root");
+        vf.getMetadata().put(JsonPresentationFields.UNIQUE_ID.getPresentation(), uniqueId);
+        vf.getMetadata().put(JsonPresentationFields.VERSION.getPresentation(), "1.0");
+        vf.getMetadata().put(JsonPresentationFields.TYPE.getPresentation(), ResourceTypeEnum.VFC.name());
+        vf.getMetadata().put(JsonPresentationFields.LIFECYCLE_STATE.getPresentation(), LifecycleStateEnum.CERTIFIED.name());
+        vf.getMetadata().put(JsonPresentationFields.TOSCA_RESOURCE_NAME.getPresentation(), "root");
+        vf.getMetadata().put(JsonPresentationFields.HIGHEST_VERSION.getPresentation(), true);
+
+        List<CategoryDefinition> categories = new ArrayList<>();
+        CategoryDefinition cat = new CategoryDefinition();
+        categories.add(cat);
+        cat.setName(categoryName);
+        List<SubCategoryDefinition> subCategories = new ArrayList<>();
+        SubCategoryDefinition subCat = new SubCategoryDefinition();
+        subCat.setName(subcategory);
+        subCategories.add(subCat);
+        cat.setSubcategories(subCategories);
+        vf.setCategories(categories);
+
+        List<String> derivedFrom = new ArrayList<>();
+        vf.setDerivedFrom(derivedFrom);
+
+        Map<String, PropertyDataDefinition> properties = new HashMap<>();
+        PropertyDataDefinition prop1 = new PropertyDataDefinition();
+        prop1.setName("derived1");
+        prop1.setDefaultValue("deriveddef1");
+
+        properties.put("derived1", prop1);
+
+        PropertyDataDefinition prop2 = new PropertyDataDefinition();
+        prop2.setUniqueId("derived2");
+        prop2.setName("deriveddef2");
+        properties.put("derived2", prop2);
+
+        PropertyDataDefinition prop3 = new PropertyDataDefinition();
+        prop3.setName("derived3");
+        prop3.setDefaultValue("deriveddef3");
+        properties.put("derived3", prop3);
+
+        vf.setProperties(properties);
+        vf.setComponentType(ComponentTypeEnum.RESOURCE);
+        Either<NodeType, StorageOperationStatus> createVFRes = nodeTypeOperation.createNodeType(vf);
+        assertTrue(createVFRes.isLeft());
+
+        Either<GraphVertex, TitanOperationStatus> getNodeTyeRes = titanDao.getVertexById(createVFRes.left().value().getUniqueId());
+        assertTrue(getNodeTyeRes.isLeft());
+        return getNodeTyeRes.left().value();
+    }
+
+    private void createUsers() {
+
+        GraphVertex ownerV = new GraphVertex(VertexTypeEnum.USER);
+        ownerV.setUniqueId("user1");
+
+        Map<GraphPropertyEnum, Object> metadataProperties = new HashMap<>();
+        metadataProperties.put(GraphPropertyEnum.USERID, ownerV.getUniqueId());
+        metadataProperties.put(GraphPropertyEnum.LABEL, VertexTypeEnum.USER.getName());
+        metadataProperties.put(GraphPropertyEnum.NAME, "user1");
+        ownerV.setMetadataProperties(metadataProperties);
+        ownerV.updateMetadataJsonWithCurrentMetadataProperties();
+        ownerV.setJson(new HashMap<>());
+        Either<GraphVertex, TitanOperationStatus> createUserRes = titanDao.createVertex(ownerV);
+        assertTrue(createUserRes.isLeft());
+
+        ownerVertex = createUserRes.left().value();
+
+        GraphVertex modifierV = new GraphVertex(VertexTypeEnum.USER);
+        modifierV.setUniqueId("user2");
+
+        metadataProperties = new HashMap<>();
+        metadataProperties.put(GraphPropertyEnum.USERID, modifierV.getUniqueId());
+        metadataProperties.put(GraphPropertyEnum.LABEL, VertexTypeEnum.USER.getName());
+        metadataProperties.put(GraphPropertyEnum.NAME, "user2");
+        modifierV.setMetadataProperties(metadataProperties);
+        modifierV.updateMetadataJsonWithCurrentMetadataProperties();
+        modifierV.setJson(new HashMap<>());
+        createUserRes = titanDao.createVertex(modifierV);
+        assertTrue(createUserRes.isLeft());
+
+        modifierVertex = createUserRes.left().value();
+
+        Either<GraphVertex, TitanOperationStatus> getOwnerRes = lifecycleOperation.findUser(ownerVertex.getUniqueId());
+        assertTrue(getOwnerRes.isLeft());
+
+    }
+
+    public void verifyInCatalogData(int expected, List<String> expectedIds) {
+
+               Either<List<CatalogComponent>, StorageOperationStatus> highestResourcesRes = topologyTemplateOperation.getElementCatalogData(true, null);
+        assertTrue(highestResourcesRes.isLeft());
+        List<CatalogComponent> highestResources = highestResourcesRes.left().value();
+        // calculate expected count value
+        assertEquals(expected, highestResources.stream().count());
+        if (expectedIds != null) {
+            highestResources.forEach(a -> assertTrue(expectedIds.contains(a.getUniqueId())));
+        }
+    }
+
+    @After
+    public void teardown() {
+        clearGraph();
+    }
+
+    private void clearGraph() {
+        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();
+    }
 }