f7072b2868ee6a08f53ad37001e7098273c83d3b
[sdc.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.openecomp.sdc.be.model.operations.impl;
22
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertTrue;
25 import java.io.BufferedOutputStream;
26 import java.io.File;
27 import java.io.FileOutputStream;
28 import java.io.OutputStream;
29 import java.util.ArrayList;
30 import java.util.HashMap;
31 import java.util.Iterator;
32 import java.util.List;
33 import java.util.Map;
34
35 import org.apache.tinkerpop.gremlin.structure.io.IoCore;
36 import org.junit.After;
37 import org.junit.Before;
38 import org.junit.BeforeClass;
39 import org.junit.Rule;
40 import org.junit.Test;
41 import org.junit.rules.TestName;
42 import org.junit.runner.RunWith;
43 import org.openecomp.sdc.be.dao.jsongraph.GraphVertex;
44 import org.openecomp.sdc.be.dao.jsongraph.TitanDao;
45
46 import org.openecomp.sdc.be.dao.jsongraph.types.EdgeLabelEnum;
47 import org.openecomp.sdc.be.dao.jsongraph.types.VertexTypeEnum;
48 import org.openecomp.sdc.be.dao.titan.TitanOperationStatus;
49 import org.openecomp.sdc.be.datatypes.elements.MapPropertiesDataDefinition;
50 import org.openecomp.sdc.be.datatypes.elements.CapabilityDataDefinition;
51 import org.openecomp.sdc.be.datatypes.elements.MapDataDefinition;
52 import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition;
53 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
54 import org.openecomp.sdc.be.datatypes.enums.GraphPropertyEnum;
55 import org.openecomp.sdc.be.datatypes.enums.JsonPresentationFields;
56 import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
57 import org.openecomp.sdc.be.datatypes.tosca.ToscaDataDefinition;
58 import org.openecomp.sdc.be.model.LifecycleStateEnum;
59 import org.openecomp.sdc.be.model.ModelTestBase;
60 import org.openecomp.sdc.be.model.category.CategoryDefinition;
61 import org.openecomp.sdc.be.model.category.SubCategoryDefinition;
62
63 import org.openecomp.sdc.be.model.jsontitan.datamodel.NodeType;
64 import org.openecomp.sdc.be.model.jsontitan.datamodel.TopologyTemplate;
65 import org.openecomp.sdc.be.model.jsontitan.datamodel.ToscaElement;
66 import org.openecomp.sdc.be.model.jsontitan.operations.NodeTypeOperation;
67 import org.openecomp.sdc.be.model.jsontitan.operations.TopologyTemplateOperation;
68 import org.openecomp.sdc.be.model.jsontitan.operations.ToscaElementLifecycleOperation;
69 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
70 import org.openecomp.sdc.common.util.ValidationUtils;
71 import org.springframework.test.context.ContextConfiguration;
72 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
73
74 import com.thinkaurelius.titan.core.TitanGraph;
75 import com.thinkaurelius.titan.core.TitanVertex;
76
77 import fj.data.Either;
78
79 @RunWith(SpringJUnit4ClassRunner.class)
80 @ContextConfiguration("classpath:application-context-test.xml")
81 public class ToscaElementLifecycleOperationTest extends ModelTestBase {
82         
83         @javax.annotation.Resource
84         protected TitanDao titanDao;
85
86         @javax.annotation.Resource
87         private NodeTypeOperation nodeTypeOperation;
88         
89         @javax.annotation.Resource
90         private TopologyTemplateOperation topologyTemplateOperation;
91         
92         @javax.annotation.Resource
93         private ToscaElementLifecycleOperation lifecycleOperation;
94         
95         String categoryName = "category";
96         String subcategory = "mycategory";
97         String outputDirectory = "C:\\Output";
98         
99         @Rule
100         public TestName name = new TestName();
101
102         @BeforeClass
103         public static void initLifecycleOperation() {
104                 ModelTestBase.init();
105         }
106         
107         private GraphVertex ownerVertex;
108         private GraphVertex modifierVertex;
109         private GraphVertex vfVertex;
110         private GraphVertex serviceVertex;
111
112         @Before
113         public void setupBefore() {
114                 clearGraph();
115                 createUsers();
116                 createResourceCategory();
117                 createServiceCategory();
118                 createRootNodeType();
119                 createNodeType("firstVf");
120                 createTopologyTemplate("firstService");
121         }
122
123         
124         @Test
125         public void lifecycleTest() {
126                 Either<ToscaElement, StorageOperationStatus> res = lifecycleOperation
127                                 .checkinToscaELement(LifecycleStateEnum.findState((String) vfVertex.getMetadataProperty(GraphPropertyEnum.STATE)), 
128                                                 vfVertex.getUniqueId(), modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
129                 StorageOperationStatus status;
130                 
131                 assertTrue(res.isLeft());
132                 String id = res.left().value().getUniqueId();
133                 
134                 res = lifecycleOperation.checkoutToscaElement(id, ownerVertex.getUniqueId(), modifierVertex.getUniqueId());
135                 assertTrue(res.isLeft());
136                 id = res.left().value().getUniqueId();
137                 
138                 PropertyDataDefinition prop55 = new PropertyDataDefinition();
139                 prop55.setName("prop55");
140                 prop55.setDefaultValue("def55");
141                  
142                 status = nodeTypeOperation.addToscaDataToToscaElement(id, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, prop55, JsonPresentationFields.NAME);
143                 assertTrue(status == StorageOperationStatus.OK);
144                 
145                 CapabilityDataDefinition cap1 = new CapabilityDataDefinition();
146                 cap1.setName("cap1");
147                 cap1.setDescription("create");
148                 cap1.setUniqueId(UniqueIdBuilder.buildCapabilityUid(id, "cap1"));
149                  
150                 status = nodeTypeOperation.addToscaDataToToscaElement(id, EdgeLabelEnum.CAPABILITIES, VertexTypeEnum.CAPABILTIES, cap1, JsonPresentationFields.NAME);
151                 assertTrue(status == StorageOperationStatus.OK);
152                  
153                 res = lifecycleOperation.checkinToscaELement(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT, id, ownerVertex.getUniqueId(), ownerVertex.getUniqueId());
154                 assertTrue(res.isLeft());
155                 id = res.left().value().getUniqueId();
156                 
157                 res = lifecycleOperation.checkoutToscaElement(id, ownerVertex.getUniqueId(), ownerVertex.getUniqueId());
158                 assertTrue(res.isLeft());
159                 id = res.left().value().getUniqueId();
160                 
161                 prop55.setDefaultValue("AAAAAAAA");
162                 status = nodeTypeOperation.updateToscaDataOfToscaElement(id, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, prop55, JsonPresentationFields.NAME);
163                 assertTrue(status == StorageOperationStatus.OK);
164                 
165                 cap1.setDescription("update");
166                  
167                 status = nodeTypeOperation.updateToscaDataOfToscaElement(id, EdgeLabelEnum.CAPABILITIES, VertexTypeEnum.CAPABILTIES, cap1, JsonPresentationFields.NAME);
168                 assertTrue(status == StorageOperationStatus.OK);
169                 
170                 PropertyDataDefinition prop66 = new PropertyDataDefinition();
171                 prop66.setName("prop66");
172                 prop66.setDefaultValue("def66");
173                  
174                 status = nodeTypeOperation.addToscaDataToToscaElement(id, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, prop66, JsonPresentationFields.NAME);
175                 assertTrue(status == StorageOperationStatus.OK);
176                 
177                 res = lifecycleOperation.requestCertificationToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
178                 assertTrue(res.isLeft());
179                 id = res.left().value().getUniqueId();
180                 
181                 res = lifecycleOperation.startCertificationToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
182                 assertTrue(res.isLeft());
183                 id = res.left().value().getUniqueId();
184                 
185                 res = lifecycleOperation.certifyToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
186                 assertTrue(res.isLeft());
187                 id = res.left().value().getUniqueId();
188                 
189                 res = lifecycleOperation.checkoutToscaElement(id, ownerVertex.getUniqueId(), modifierVertex.getUniqueId());
190                 assertTrue(res.isLeft());
191                 id = res.left().value().getUniqueId();
192                 
193                 PropertyDataDefinition prop77 = new PropertyDataDefinition();
194                 prop77.setName("prop77");
195                 prop77.setDefaultValue("def77");
196                  
197                 status = nodeTypeOperation.addToscaDataToToscaElement(id, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, prop77, JsonPresentationFields.NAME);
198                 assertTrue(status == StorageOperationStatus.OK);
199                 
200                 res = lifecycleOperation.checkinToscaELement(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT, id, ownerVertex.getUniqueId(), ownerVertex.getUniqueId());
201                 assertTrue(res.isLeft());
202                 id = res.left().value().getUniqueId();
203                 
204                 res = lifecycleOperation.checkoutToscaElement(id, ownerVertex.getUniqueId(), ownerVertex.getUniqueId());
205                 assertTrue(res.isLeft());
206                 id = res.left().value().getUniqueId();
207                 
208                 PropertyDataDefinition prop88 = new PropertyDataDefinition();
209                 prop88.setName("prop88");
210                 prop88.setDefaultValue("def88");
211                  
212                 status = nodeTypeOperation.addToscaDataToToscaElement(id, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, prop88, JsonPresentationFields.NAME);
213                 assertTrue(status == StorageOperationStatus.OK);
214                 
215                 res = lifecycleOperation.requestCertificationToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
216                 assertTrue(res.isLeft());
217                 id = res.left().value().getUniqueId();
218                 
219                 res = lifecycleOperation.startCertificationToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
220                 assertTrue(res.isLeft());
221                 id = res.left().value().getUniqueId();
222                 
223                 res = lifecycleOperation.certifyToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
224                 assertTrue(res.isLeft());
225                 id = res.left().value().getUniqueId();
226                 
227                 res = lifecycleOperation.checkoutToscaElement(id, ownerVertex.getUniqueId(), ownerVertex.getUniqueId());
228                 assertTrue(res.isLeft());
229                 id = res.left().value().getUniqueId();
230                 
231                 PropertyDataDefinition prop99 = new PropertyDataDefinition();
232                 prop99.setName("prop99");
233                 prop99.setDefaultValue("def99");
234                  
235                 status = nodeTypeOperation.addToscaDataToToscaElement(id, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, prop99, JsonPresentationFields.NAME);
236                 assertTrue(status == StorageOperationStatus.OK);
237                 
238                 res = lifecycleOperation.requestCertificationToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
239                 assertTrue(res.isLeft());
240                 id = res.left().value().getUniqueId();
241                 
242                 res = lifecycleOperation.startCertificationToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
243                 assertTrue(res.isLeft());
244                 id = res.left().value().getUniqueId();
245                 
246                 status = nodeTypeOperation.deleteToscaDataElement(id, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, "prop99", JsonPresentationFields.NAME);
247                 assertTrue(status == StorageOperationStatus.OK);
248                 
249                 //cancel certification
250                 res = lifecycleOperation.cancelOrFailCertification(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId(), LifecycleStateEnum.READY_FOR_CERTIFICATION);
251                 assertTrue(res.isLeft());
252                 id = res.left().value().getUniqueId();
253                 
254                 res = lifecycleOperation.startCertificationToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
255                 assertTrue(res.isLeft());
256                 id = res.left().value().getUniqueId();
257                 
258                 //fail certification
259                 res = lifecycleOperation.cancelOrFailCertification(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId(), LifecycleStateEnum.NOT_CERTIFIED_CHECKIN);
260                 assertTrue(res.isLeft());
261                 id = res.left().value().getUniqueId();
262                 
263                 //exportGraphMl(titanDao.getGraph().left().value());
264                 
265         }
266
267         @Test
268         public void serviceConformanceLevelTest() {
269                 Either<ToscaElement, StorageOperationStatus> res = lifecycleOperation
270                                 .checkinToscaELement(LifecycleStateEnum.findState((String) serviceVertex.getMetadataProperty(GraphPropertyEnum.STATE)), 
271                                                 serviceVertex.getUniqueId(), modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
272                 
273                 assertTrue(res.isLeft());
274                 String id = res.left().value().getUniqueId();
275                 
276                 res = lifecycleOperation.checkoutToscaElement(id, ownerVertex.getUniqueId(), modifierVertex.getUniqueId());
277                 assertTrue(res.isLeft());
278                 
279                 String conformanceLevel = res.left().value().getMetadataValue(JsonPresentationFields.CONFORMANCE_LEVEL).toString();
280                 assertEquals(conformanceLevel, ModelTestBase.configurationManager.getConfiguration().getToscaConformanceLevel());
281         }
282         
283         private void createResourceCategory() {
284                 
285                 GraphVertex cat = new GraphVertex(VertexTypeEnum.RESOURCE_CATEGORY);
286                 Map<GraphPropertyEnum, Object> metadataProperties = new HashMap<>();
287                 String catId = UniqueIdBuilder.buildComponentCategoryUid(categoryName, VertexTypeEnum.RESOURCE_CATEGORY);
288                 cat.setUniqueId(catId);
289                 metadataProperties.put(GraphPropertyEnum.UNIQUE_ID,catId);
290                 metadataProperties.put(GraphPropertyEnum.LABEL, VertexTypeEnum.RESOURCE_CATEGORY.getName());
291                 metadataProperties.put(GraphPropertyEnum.NAME,categoryName);
292                 metadataProperties.put(GraphPropertyEnum.NORMALIZED_NAME, ValidationUtils.normalizeCategoryName4Uniqueness(categoryName));
293                 cat.setMetadataProperties(metadataProperties);
294                 cat.updateMetadataJsonWithCurrentMetadataProperties();
295                 
296                 GraphVertex subCat = new GraphVertex(VertexTypeEnum.RESOURCE_SUBCATEGORY);
297                 metadataProperties = new HashMap<>();
298                 String subCatId = UniqueIdBuilder.buildSubCategoryUid(cat.getUniqueId(), subcategory);
299                 subCat.setUniqueId(subCatId);
300                 metadataProperties.put(GraphPropertyEnum.UNIQUE_ID,subCatId);
301                 metadataProperties.put(GraphPropertyEnum.LABEL, VertexTypeEnum.RESOURCE_SUBCATEGORY.getName());
302                 metadataProperties.put(GraphPropertyEnum.NAME,subcategory);
303                 subCat.setMetadataProperties(metadataProperties);
304                 subCat.updateMetadataJsonWithCurrentMetadataProperties();
305                 
306                 Either<GraphVertex, TitanOperationStatus> catRes = titanDao.createVertex(cat);
307                 
308                 Either<GraphVertex, TitanOperationStatus> subCatRes = titanDao.createVertex(subCat);
309                 
310                 TitanOperationStatus status = titanDao.createEdge(catRes.left().value().getVertex(), subCatRes.left().value().getVertex(), EdgeLabelEnum.SUB_CATEGORY, new HashMap<>());
311                 assertEquals(TitanOperationStatus.OK, status);
312         }
313         
314         private void createServiceCategory() {
315                 
316                 GraphVertex cat = new GraphVertex(VertexTypeEnum.SERVICE_CATEGORY);
317                 Map<GraphPropertyEnum, Object> metadataProperties = new HashMap<>();
318                 String catId = UniqueIdBuilder.buildComponentCategoryUid(categoryName, VertexTypeEnum.SERVICE_CATEGORY);
319                 cat.setUniqueId(catId);
320                 metadataProperties.put(GraphPropertyEnum.UNIQUE_ID,catId);
321                 metadataProperties.put(GraphPropertyEnum.LABEL, VertexTypeEnum.SERVICE_CATEGORY.getName());
322                 metadataProperties.put(GraphPropertyEnum.NAME,categoryName);
323                 metadataProperties.put(GraphPropertyEnum.NORMALIZED_NAME, ValidationUtils.normalizeCategoryName4Uniqueness(categoryName));
324                 cat.setMetadataProperties(metadataProperties);
325                 cat.updateMetadataJsonWithCurrentMetadataProperties();
326                                 
327                 Either<GraphVertex, TitanOperationStatus> catRes = titanDao.createVertex(cat);
328                         
329                 assertTrue(catRes.isLeft());
330         }
331         
332         private TopologyTemplate createTopologyTemplate(String name) {
333                 
334                 TopologyTemplate service = new TopologyTemplate();
335                 String uniqueId = UniqueIdBuilder.buildResourceUniqueId();
336                 service.setUniqueId(uniqueId);
337                 service.setCreatorUserId((String) ownerVertex.getMetadataProperty(GraphPropertyEnum.USERID));
338                 service.getMetadata().put(JsonPresentationFields.NAME.getPresentation(), name);
339                 service.getMetadata().put(JsonPresentationFields.UNIQUE_ID.getPresentation(), uniqueId);
340                 service.getMetadata().put(JsonPresentationFields.VERSION.getPresentation(), "0.1");
341                 service.getMetadata().put(JsonPresentationFields.TYPE.getPresentation(),ResourceTypeEnum.VF.name());
342                 service.getMetadata().put(JsonPresentationFields.COMPONENT_TYPE.getPresentation(),ComponentTypeEnum.RESOURCE);
343                 List<CategoryDefinition> categories = new ArrayList<>();
344                 CategoryDefinition cat = new CategoryDefinition();
345                 categories.add(cat);
346                 cat.setName(categoryName);
347                 service.setCategories(categories);
348                 
349                 service.setComponentType(ComponentTypeEnum.SERVICE);
350                 Either<TopologyTemplate, StorageOperationStatus> createRes = topologyTemplateOperation.createTopologyTemplate(service);
351                 assertTrue(createRes.isLeft());
352                 
353                 Either<GraphVertex, TitanOperationStatus> getNodeTyeRes= titanDao.getVertexById(createRes.left().value().getUniqueId());
354                 assertTrue(getNodeTyeRes.isLeft());
355                 
356                 serviceVertex = getNodeTyeRes.left().value();
357                  
358                 return service;
359         }
360         
361         private <T extends ToscaDataDefinition> NodeType createNodeType(String nodeTypeName) {
362                 
363                 NodeType vf = new NodeType();
364                 String uniqueId = UniqueIdBuilder.buildResourceUniqueId();
365                 vf.setUniqueId(uniqueId);
366                 vf.setCreatorUserId((String) ownerVertex.getMetadataProperty(GraphPropertyEnum.USERID));
367                 vf.getMetadata().put(JsonPresentationFields.NAME.getPresentation(), nodeTypeName);
368                 vf.getMetadata().put(JsonPresentationFields.UNIQUE_ID.getPresentation(), uniqueId);
369                 vf.getMetadata().put(JsonPresentationFields.VERSION.getPresentation(), "0.1");
370                 vf.getMetadata().put(JsonPresentationFields.TYPE.getPresentation(),ResourceTypeEnum.VF.name());
371                 vf.getMetadata().put(JsonPresentationFields.COMPONENT_TYPE.getPresentation(),ComponentTypeEnum.RESOURCE);
372                 List<CategoryDefinition> categories = new ArrayList<>();
373                 CategoryDefinition cat = new CategoryDefinition();
374                 categories.add(cat);
375                 cat.setName(categoryName);
376                 List<SubCategoryDefinition> subCategories = new ArrayList<>();
377                 SubCategoryDefinition subCat = new SubCategoryDefinition();
378                 subCat.setName(subcategory);
379                 subCategories.add(subCat);
380                 cat.setSubcategories(subCategories);
381                 vf.setCategories(categories);
382                 
383                 
384                 List<String> derivedFrom = new ArrayList<>();
385                 derivedFrom.add("root");
386                 vf.setDerivedFrom(derivedFrom);
387                 
388 //               Map<String, PropertyDataDefinition> properties = new HashMap<>();
389 //               PropertyDataDefinition prop1 = new PropertyDataDefinition();
390 //               prop1.setName("prop1");
391 //               prop1.setDefaultValue("def1");
392 //               
393 //               properties.put("prop1", prop1);
394 //               
395 //               PropertyDataDefinition prop2 = new PropertyDataDefinition();
396 //               prop2.setName("prop2");
397 //               prop2.setDefaultValue("def2");
398 //               properties.put("prop2", prop2);
399 //               
400 //               PropertyDataDefinition prop3 = new PropertyDataDefinition();
401 //               prop3.setName("prop3");
402 //               prop3.setDefaultValue("def3");
403 //               properties.put("prop3", prop3);
404 //               
405 //               vf.setProperties(properties);
406                  vf.setComponentType(ComponentTypeEnum.RESOURCE);
407                 Either<NodeType, StorageOperationStatus> createVFRes = nodeTypeOperation.createNodeType(vf);
408                 assertTrue(createVFRes.isLeft());
409                 
410                 Either<GraphVertex, TitanOperationStatus> getNodeTyeRes= titanDao.getVertexById(createVFRes.left().value().getUniqueId());
411                 assertTrue(getNodeTyeRes.isLeft());
412                 
413                 vfVertex = getNodeTyeRes.left().value();
414                 
415                 
416                 
417                  List<PropertyDataDefinition> addProperties = new ArrayList<>();
418                  PropertyDataDefinition prop11 = new PropertyDataDefinition();
419                  prop11.setName("prop11");
420                  prop11.setDefaultValue("def11");
421                  
422                  addProperties.add(prop11);
423                  
424                  PropertyDataDefinition prop22 = new PropertyDataDefinition();
425                  prop22.setName("prop22");
426                  prop22.setDefaultValue("def22");
427                  addProperties.add(prop22);
428                  
429                  StorageOperationStatus status = nodeTypeOperation.addToscaDataToToscaElement(vfVertex, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, addProperties, JsonPresentationFields.NAME);
430                  assertTrue(status == StorageOperationStatus.OK);
431                  
432                  PropertyDataDefinition prop33 = new PropertyDataDefinition();
433                  prop33.setName("prop33");
434                  prop33.setDefaultValue("def33");
435                  
436                  status = nodeTypeOperation.addToscaDataToToscaElement(vfVertex, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, prop33, JsonPresentationFields.NAME);
437                  assertTrue(status == StorageOperationStatus.OK);
438                  
439                  PropertyDataDefinition prop44 = new PropertyDataDefinition();
440                  prop44.setName("prop44");
441                  prop44.setDefaultValue("def44");
442                  
443                  status = nodeTypeOperation.addToscaDataToToscaElement(vfVertex.getUniqueId(), EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, prop44, JsonPresentationFields.NAME);
444                  assertTrue(status == StorageOperationStatus.OK);
445                         
446                  
447                  PropertyDataDefinition capProp = new PropertyDataDefinition();
448                  capProp.setName( "capProp");
449                  capProp.setDefaultValue( "capPropDef");
450                  
451                  MapDataDefinition dataToCreate = new MapPropertiesDataDefinition();             
452                  dataToCreate.put("capProp", capProp);
453                  
454                  Map<String, MapDataDefinition> capProps = new HashMap();
455                  capProps.put("capName", dataToCreate); 
456                 
457                  Either<GraphVertex, StorageOperationStatus> res = nodeTypeOperation.assosiateElementToData(vfVertex,  VertexTypeEnum.CAPABILITIES_PROPERTIES, EdgeLabelEnum.CAPABILITIES_PROPERTIES, capProps);
458                  
459                 // exportGraphMl(titanDao.getGraph().left().value());
460                  
461                  List<String> pathKeys = new ArrayList<>();
462                  pathKeys.add("capName");
463                  capProp.setDefaultValue( "BBBB");
464                  status = nodeTypeOperation.updateToscaDataDeepElementOfToscaElement(vfVertex, EdgeLabelEnum.CAPABILITIES_PROPERTIES, VertexTypeEnum.CAPABILITIES_PROPERTIES,
465                                  capProp, pathKeys, JsonPresentationFields.NAME);
466                 return vf;
467         }
468         
469         private void createRootNodeType() {
470                 
471                 NodeType vf = new NodeType();
472                 String uniqueId = UniqueIdBuilder.buildResourceUniqueId();
473                 vf.setUniqueId(uniqueId);
474                 vf.setComponentType(ComponentTypeEnum.RESOURCE);
475                 vf.setCreatorUserId((String) ownerVertex.getMetadataProperty(GraphPropertyEnum.USERID));
476                 vf.getMetadata().put(JsonPresentationFields.NAME.getPresentation(), "root");
477                 vf.getMetadata().put(JsonPresentationFields.UNIQUE_ID.getPresentation(), uniqueId);
478                 vf.getMetadata().put(JsonPresentationFields.VERSION.getPresentation(), "1.0");
479                 vf.getMetadata().put(JsonPresentationFields.TYPE.getPresentation(),ResourceTypeEnum.VFC.name());
480                 vf.getMetadata().put(JsonPresentationFields.LIFECYCLE_STATE.getPresentation(), LifecycleStateEnum.CERTIFIED.name());
481                 vf.getMetadata().put(JsonPresentationFields.TOSCA_RESOURCE_NAME.getPresentation(), "root");
482                 vf.getMetadata().put(JsonPresentationFields.HIGHEST_VERSION.getPresentation(), true);
483                 
484                 List<CategoryDefinition> categories = new ArrayList<>();
485                 CategoryDefinition cat = new CategoryDefinition();
486                 categories.add(cat);
487                 cat.setName(categoryName);
488                 List<SubCategoryDefinition> subCategories = new ArrayList<>();
489                 SubCategoryDefinition subCat = new SubCategoryDefinition();
490                 subCat.setName(subcategory);
491                 subCategories.add(subCat);
492                 cat.setSubcategories(subCategories);
493                 vf.setCategories(categories);
494                 
495                 
496                 List<String> derivedFrom = new ArrayList<>();
497                 vf.setDerivedFrom(derivedFrom);
498                 
499                  Map<String, PropertyDataDefinition> properties = new HashMap<>();
500                  PropertyDataDefinition prop1 = new PropertyDataDefinition();
501                  prop1.setName("derived1");
502                  prop1.setDefaultValue("deriveddef1");
503                  
504                  properties.put("derived1", prop1);
505                  
506                  PropertyDataDefinition prop2 = new PropertyDataDefinition();
507                  prop2.setUniqueId("derived2");
508                  prop2.setName("deriveddef2");
509                  properties.put("derived2", prop2);
510                  
511                  PropertyDataDefinition prop3 = new PropertyDataDefinition();
512                  prop3.setName("derived3");
513                  prop3.setDefaultValue("deriveddef3");
514                  properties.put("derived3", prop3);
515                  
516                  vf.setProperties(properties);
517                  vf.setComponentType(ComponentTypeEnum.RESOURCE);
518                 Either<NodeType, StorageOperationStatus> createVFRes = nodeTypeOperation.createNodeType(vf);
519                 assertTrue(createVFRes.isLeft());
520                 
521                 Either<GraphVertex, TitanOperationStatus> getNodeTyeRes= titanDao.getVertexById(createVFRes.left().value().getUniqueId());
522                 assertTrue(getNodeTyeRes.isLeft());
523         }
524
525         private void createUsers() {
526                 
527                 GraphVertex ownerV = new GraphVertex(VertexTypeEnum.USER);
528                 ownerV.setUniqueId("user1");
529                                 
530                 Map<GraphPropertyEnum, Object> metadataProperties = new HashMap<>();
531                 metadataProperties.put(GraphPropertyEnum.USERID, ownerV.getUniqueId());
532                 metadataProperties.put(GraphPropertyEnum.LABEL, VertexTypeEnum.USER.getName());
533                 metadataProperties.put(GraphPropertyEnum.NAME, "user1");
534                 ownerV.setMetadataProperties(metadataProperties);
535                 ownerV.updateMetadataJsonWithCurrentMetadataProperties();
536                 ownerV.setJson(new HashMap<>());
537                 Either<GraphVertex, TitanOperationStatus> createUserRes = titanDao.createVertex(ownerV);
538                 assertTrue(createUserRes.isLeft());
539                 
540                 ownerVertex = createUserRes.left().value();
541                 
542                 GraphVertex modifierV = new GraphVertex(VertexTypeEnum.USER);
543                 modifierV.setUniqueId("user2");
544                                 
545                 metadataProperties = new HashMap<>();
546                 metadataProperties.put(GraphPropertyEnum.USERID, modifierV.getUniqueId());
547                 metadataProperties.put(GraphPropertyEnum.LABEL, VertexTypeEnum.USER.getName());
548                 metadataProperties.put(GraphPropertyEnum.NAME, "user2");
549                 modifierV.setMetadataProperties(metadataProperties);
550                 modifierV.updateMetadataJsonWithCurrentMetadataProperties();
551                 modifierV.setJson(new HashMap<>());
552                 createUserRes = titanDao.createVertex(modifierV);
553                 assertTrue(createUserRes.isLeft());
554                                 
555                 modifierVertex = createUserRes.left().value();
556                         
557                 Either<GraphVertex, TitanOperationStatus> getOwnerRes = lifecycleOperation.findUser(ownerVertex.getUniqueId());
558                 assertTrue(getOwnerRes.isLeft());
559         
560         }
561
562         @After
563         public void teardown() {
564                 clearGraph();
565         }
566
567         private void clearGraph() {
568                 Either<TitanGraph, TitanOperationStatus> graphResult = titanDao.getGraph();
569                 TitanGraph graph = graphResult.left().value();
570
571                 Iterable<TitanVertex> vertices = graph.query().vertices();
572                 if (vertices != null) {
573                         Iterator<TitanVertex> iterator = vertices.iterator();
574                         while (iterator.hasNext()) {
575                                 TitanVertex vertex = iterator.next();
576                                 vertex.remove();
577                         }
578                 }
579                 titanDao.commit();
580         }
581
582         private String exportGraphMl(TitanGraph graph) {
583                 String result = null;
584                 String outputFile = outputDirectory + File.separator + "exportGraph." + System.currentTimeMillis() + ".graphml";
585                 try {
586                         try (final OutputStream os = new BufferedOutputStream(new FileOutputStream(outputFile))) {
587                                 graph.io(IoCore.graphml()).writer().normalize(true).create().writeGraph(os, graph);
588                         }
589                         result = outputFile;
590                         graph.tx().commit();
591                 } catch (Exception e) {
592                         graph.tx().rollback();
593                         e.printStackTrace();
594                 }
595                 return result;
596
597         }
598         
599 }