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