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