2 * ============LICENSE_START=======================================================
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
21 package org.openecomp.sdc.be.model.operations.impl;
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertTrue;
26 import java.io.BufferedOutputStream;
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;
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;
75 import com.thinkaurelius.titan.core.TitanGraph;
76 import com.thinkaurelius.titan.core.TitanVertex;
78 import fj.data.Either;
80 @RunWith(SpringJUnit4ClassRunner.class)
81 @ContextConfiguration("classpath:application-context-test.xml")
82 public class ToscaElementLifecycleOperationTest extends ModelTestBase {
84 @javax.annotation.Resource
85 protected TitanDao titanDao;
87 @javax.annotation.Resource
88 private NodeTypeOperation nodeTypeOperation;
90 @javax.annotation.Resource
91 private TopologyTemplateOperation topologyTemplateOperation;
93 @javax.annotation.Resource
94 private ToscaElementLifecycleOperation lifecycleOperation;
96 String categoryName = "category";
97 String subcategory = "mycategory";
98 String outputDirectory = "C:\\Output";
101 public TestName name = new TestName();
104 public static void initLifecycleOperation() {
105 ModelTestBase.init();
108 private GraphVertex ownerVertex;
109 private GraphVertex modifierVertex;
110 private GraphVertex vfVertex;
111 private GraphVertex serviceVertex;
112 private GraphVertex rootVertex;
115 public void setupBefore() {
118 createResourceCategory();
119 createServiceCategory();
120 GraphTestUtils.createRootCatalogVertex(titanDao);
121 rootVertex = createRootNodeType();
122 createNodeType("firstVf");
123 serviceVertex = createTopologyTemplate("firstService");
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;
132 assertTrue(res.isLeft());
136 verifyInCatalogData(3, null);
138 String id = res.left().value().getUniqueId();
140 res = lifecycleOperation.checkoutToscaElement(id, ownerVertex.getUniqueId(), modifierVertex.getUniqueId());
141 assertTrue(res.isLeft());
142 id = res.left().value().getUniqueId();
144 verifyInCatalogData(3, null);
146 PropertyDataDefinition prop55 = new PropertyDataDefinition();
147 prop55.setName("prop55");
148 prop55.setDefaultValue("def55");
150 status = nodeTypeOperation.addToscaDataToToscaElement(id, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, prop55, JsonPresentationFields.NAME);
151 assertTrue(status == StorageOperationStatus.OK);
153 CapabilityDataDefinition cap1 = new CapabilityDataDefinition();
154 cap1.setName("cap1");
155 cap1.setDescription("create");
156 cap1.setUniqueId(UniqueIdBuilder.buildCapabilityUid(id, "cap1"));
158 status = nodeTypeOperation.addToscaDataToToscaElement(id, EdgeLabelEnum.CAPABILITIES, VertexTypeEnum.CAPABILTIES, cap1, JsonPresentationFields.NAME);
159 assertTrue(status == StorageOperationStatus.OK);
161 res = lifecycleOperation.checkinToscaELement(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT, id, ownerVertex.getUniqueId(), ownerVertex.getUniqueId());
162 assertTrue(res.isLeft());
163 id = res.left().value().getUniqueId();
165 res = lifecycleOperation.checkoutToscaElement(id, ownerVertex.getUniqueId(), ownerVertex.getUniqueId());
166 assertTrue(res.isLeft());
167 id = res.left().value().getUniqueId();
169 prop55.setDefaultValue("AAAAAAAA");
170 status = nodeTypeOperation.updateToscaDataOfToscaElement(id, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, prop55, JsonPresentationFields.NAME);
171 assertTrue(status == StorageOperationStatus.OK);
173 cap1.setDescription("update");
175 status = nodeTypeOperation.updateToscaDataOfToscaElement(id, EdgeLabelEnum.CAPABILITIES, VertexTypeEnum.CAPABILTIES, cap1, JsonPresentationFields.NAME);
176 assertTrue(status == StorageOperationStatus.OK);
178 PropertyDataDefinition prop66 = new PropertyDataDefinition();
179 prop66.setName("prop66");
180 prop66.setDefaultValue("def66");
182 status = nodeTypeOperation.addToscaDataToToscaElement(id, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, prop66, JsonPresentationFields.NAME);
183 assertTrue(status == StorageOperationStatus.OK);
185 res = lifecycleOperation.requestCertificationToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
186 assertTrue(res.isLeft());
187 id = res.left().value().getUniqueId();
189 res = lifecycleOperation.startCertificationToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
190 assertTrue(res.isLeft());
191 id = res.left().value().getUniqueId();
193 res = lifecycleOperation.certifyToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
194 assertTrue(res.isLeft());
195 id = res.left().value().getUniqueId();
197 verifyInCatalogData(3, null);
199 res = lifecycleOperation.checkoutToscaElement(id, ownerVertex.getUniqueId(), modifierVertex.getUniqueId());
200 assertTrue(res.isLeft());
201 id = res.left().value().getUniqueId();
203 verifyInCatalogData(4, null);
205 PropertyDataDefinition prop77 = new PropertyDataDefinition();
206 prop77.setName("prop77");
207 prop77.setDefaultValue("def77");
209 status = nodeTypeOperation.addToscaDataToToscaElement(id, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, prop77, JsonPresentationFields.NAME);
210 assertTrue(status == StorageOperationStatus.OK);
212 res = lifecycleOperation.checkinToscaELement(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT, id, ownerVertex.getUniqueId(), ownerVertex.getUniqueId());
213 assertTrue(res.isLeft());
214 id = res.left().value().getUniqueId();
216 res = lifecycleOperation.checkoutToscaElement(id, ownerVertex.getUniqueId(), ownerVertex.getUniqueId());
217 assertTrue(res.isLeft());
218 id = res.left().value().getUniqueId();
220 PropertyDataDefinition prop88 = new PropertyDataDefinition();
221 prop88.setName("prop88");
222 prop88.setDefaultValue("def88");
224 status = nodeTypeOperation.addToscaDataToToscaElement(id, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, prop88, JsonPresentationFields.NAME);
225 assertTrue(status == StorageOperationStatus.OK);
227 res = lifecycleOperation.requestCertificationToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
228 assertTrue(res.isLeft());
229 id = res.left().value().getUniqueId();
231 res = lifecycleOperation.startCertificationToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
232 assertTrue(res.isLeft());
233 id = res.left().value().getUniqueId();
235 res = lifecycleOperation.certifyToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
236 assertTrue(res.isLeft());
237 id = res.left().value().getUniqueId();
238 verifyInCatalogData(3, null);
240 res = lifecycleOperation.checkoutToscaElement(id, ownerVertex.getUniqueId(), ownerVertex.getUniqueId());
241 assertTrue(res.isLeft());
242 id = res.left().value().getUniqueId();
244 verifyInCatalogData(4, null);
246 PropertyDataDefinition prop99 = new PropertyDataDefinition();
247 prop99.setName("prop99");
248 prop99.setDefaultValue("def99");
250 status = nodeTypeOperation.addToscaDataToToscaElement(id, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, prop99, JsonPresentationFields.NAME);
251 assertTrue(status == StorageOperationStatus.OK);
253 res = lifecycleOperation.requestCertificationToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
254 assertTrue(res.isLeft());
255 id = res.left().value().getUniqueId();
257 res = lifecycleOperation.startCertificationToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
258 assertTrue(res.isLeft());
259 id = res.left().value().getUniqueId();
261 status = nodeTypeOperation.deleteToscaDataElement(id, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, "prop99", JsonPresentationFields.NAME);
262 assertTrue(status == StorageOperationStatus.OK);
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();
269 res = lifecycleOperation.startCertificationToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
270 assertTrue(res.isLeft());
271 id = res.left().value().getUniqueId();
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());
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());
287 assertTrue(res.isLeft());
288 String id = res.left().value().getUniqueId();
290 res = lifecycleOperation.checkoutToscaElement(id, ownerVertex.getUniqueId(), modifierVertex.getUniqueId());
291 assertTrue(res.isLeft());
293 String conformanceLevel = res.left().value().getMetadataValue(JsonPresentationFields.CONFORMANCE_LEVEL).toString();
294 assertEquals(conformanceLevel, ModelTestBase.configurationManager.getConfiguration().getToscaConformanceLevel());
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());
305 verifyInCatalogData(3, expectedIds);
307 GraphVertex vertex4 = createTopologyTemplate("topTemp4");
308 expectedIds.add(vertex4.getUniqueId());
309 verifyInCatalogData(4, expectedIds);
311 Either<ToscaElement, StorageOperationStatus> res = lifecycleOperation.undoCheckout(vertex4.getUniqueId());
312 expectedIds.remove(vertex4.getUniqueId());
313 verifyInCatalogData(3, expectedIds);
315 vertex4 = createTopologyTemplate("topTemp4");
316 expectedIds.add(vertex4.getUniqueId());
317 verifyInCatalogData(4, expectedIds);
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);
327 res = lifecycleOperation.checkoutToscaElement(certifiedId, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
328 assertTrue(certifyToscaElement.isLeft());
329 expectedIds.add(res.left().value().getUniqueId());
330 verifyInCatalogData(5, expectedIds);
333 private void createResourceCategory() {
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();
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();
357 Either<GraphVertex, TitanOperationStatus> catRes = titanDao.createVertex(cat);
359 Either<GraphVertex, TitanOperationStatus> subCatRes = titanDao.createVertex(subCat);
361 TitanOperationStatus status = titanDao.createEdge(catRes.left().value().getVertex(), subCatRes.left().value().getVertex(), EdgeLabelEnum.SUB_CATEGORY, new HashMap<>());
362 assertEquals(TitanOperationStatus.OK, status);
365 private void createServiceCategory() {
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();
378 Either<GraphVertex, TitanOperationStatus> catRes = titanDao.createVertex(cat);
380 assertTrue(catRes.isLeft());
383 private GraphVertex createTopologyTemplate(String name) {
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();
397 cat.setName(categoryName);
398 service.setCategories(categories);
400 service.setComponentType(ComponentTypeEnum.SERVICE);
401 Either<TopologyTemplate, StorageOperationStatus> createRes = topologyTemplateOperation.createTopologyTemplate(service);
402 assertTrue(createRes.isLeft());
404 Either<GraphVertex, TitanOperationStatus> getNodeTyeRes = titanDao.getVertexById(createRes.left().value().getUniqueId());
405 assertTrue(getNodeTyeRes.isLeft());
407 // serviceVertex = getNodeTyeRes.left().value();
409 return getNodeTyeRes.left().value();
412 private <T extends ToscaDataDefinition> NodeType createNodeType(String nodeTypeName) {
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();
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);
434 List<String> derivedFrom = new ArrayList<>();
435 derivedFrom.add("root");
436 vf.setDerivedFrom(derivedFrom);
438 // Map<String, PropertyDataDefinition> properties = new HashMap<>();
439 // PropertyDataDefinition prop1 = new PropertyDataDefinition();
440 // prop1.setName("prop1");
441 // prop1.setDefaultValue("def1");
443 // properties.put("prop1", prop1);
445 // PropertyDataDefinition prop2 = new PropertyDataDefinition();
446 // prop2.setName("prop2");
447 // prop2.setDefaultValue("def2");
448 // properties.put("prop2", prop2);
450 // PropertyDataDefinition prop3 = new PropertyDataDefinition();
451 // prop3.setName("prop3");
452 // prop3.setDefaultValue("def3");
453 // properties.put("prop3", prop3);
455 // vf.setProperties(properties);
456 vf.setComponentType(ComponentTypeEnum.RESOURCE);
457 Either<NodeType, StorageOperationStatus> createVFRes = nodeTypeOperation.createNodeType(vf);
458 assertTrue(createVFRes.isLeft());
460 Either<GraphVertex, TitanOperationStatus> getNodeTyeRes = titanDao.getVertexById(createVFRes.left().value().getUniqueId());
461 assertTrue(getNodeTyeRes.isLeft());
463 vfVertex = getNodeTyeRes.left().value();
465 List<PropertyDataDefinition> addProperties = new ArrayList<>();
466 PropertyDataDefinition prop11 = new PropertyDataDefinition();
467 prop11.setName("prop11");
468 prop11.setDefaultValue("def11");
470 addProperties.add(prop11);
472 PropertyDataDefinition prop22 = new PropertyDataDefinition();
473 prop22.setName("prop22");
474 prop22.setDefaultValue("def22");
475 addProperties.add(prop22);
477 StorageOperationStatus status = nodeTypeOperation.addToscaDataToToscaElement(vfVertex, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, addProperties, JsonPresentationFields.NAME);
478 assertTrue(status == StorageOperationStatus.OK);
480 PropertyDataDefinition prop33 = new PropertyDataDefinition();
481 prop33.setName("prop33");
482 prop33.setDefaultValue("def33");
484 status = nodeTypeOperation.addToscaDataToToscaElement(vfVertex, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, prop33, JsonPresentationFields.NAME);
485 assertTrue(status == StorageOperationStatus.OK);
487 PropertyDataDefinition prop44 = new PropertyDataDefinition();
488 prop44.setName("prop44");
489 prop44.setDefaultValue("def44");
491 status = nodeTypeOperation.addToscaDataToToscaElement(vfVertex.getUniqueId(), EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, prop44, JsonPresentationFields.NAME);
492 assertTrue(status == StorageOperationStatus.OK);
494 PropertyDataDefinition capProp = new PropertyDataDefinition();
495 capProp.setName("capProp");
496 capProp.setDefaultValue("capPropDef");
498 MapDataDefinition dataToCreate = new MapPropertiesDataDefinition();
499 dataToCreate.put("capProp", capProp);
501 Map<String, MapDataDefinition> capProps = new HashMap();
502 capProps.put("capName", dataToCreate);
504 Either<GraphVertex, StorageOperationStatus> res = nodeTypeOperation.assosiateElementToData(vfVertex, VertexTypeEnum.CAPABILITIES_PROPERTIES, EdgeLabelEnum.CAPABILITIES_PROPERTIES, capProps);
506 // exportGraphMl(titanDao.getGraph().left().value());
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);
515 private GraphVertex createRootNodeType() {
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);
530 List<CategoryDefinition> categories = new ArrayList<>();
531 CategoryDefinition cat = new CategoryDefinition();
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);
541 List<String> derivedFrom = new ArrayList<>();
542 vf.setDerivedFrom(derivedFrom);
544 Map<String, PropertyDataDefinition> properties = new HashMap<>();
545 PropertyDataDefinition prop1 = new PropertyDataDefinition();
546 prop1.setName("derived1");
547 prop1.setDefaultValue("deriveddef1");
549 properties.put("derived1", prop1);
551 PropertyDataDefinition prop2 = new PropertyDataDefinition();
552 prop2.setUniqueId("derived2");
553 prop2.setName("deriveddef2");
554 properties.put("derived2", prop2);
556 PropertyDataDefinition prop3 = new PropertyDataDefinition();
557 prop3.setName("derived3");
558 prop3.setDefaultValue("deriveddef3");
559 properties.put("derived3", prop3);
561 vf.setProperties(properties);
562 vf.setComponentType(ComponentTypeEnum.RESOURCE);
563 Either<NodeType, StorageOperationStatus> createVFRes = nodeTypeOperation.createNodeType(vf);
564 assertTrue(createVFRes.isLeft());
566 Either<GraphVertex, TitanOperationStatus> getNodeTyeRes = titanDao.getVertexById(createVFRes.left().value().getUniqueId());
567 assertTrue(getNodeTyeRes.isLeft());
568 return getNodeTyeRes.left().value();
571 private void createUsers() {
573 GraphVertex ownerV = new GraphVertex(VertexTypeEnum.USER);
574 ownerV.setUniqueId("user1");
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());
586 ownerVertex = createUserRes.left().value();
588 GraphVertex modifierV = new GraphVertex(VertexTypeEnum.USER);
589 modifierV.setUniqueId("user2");
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());
601 modifierVertex = createUserRes.left().value();
603 Either<GraphVertex, TitanOperationStatus> getOwnerRes = lifecycleOperation.findUser(ownerVertex.getUniqueId());
604 assertTrue(getOwnerRes.isLeft());
608 public void verifyInCatalogData(int expected, List<String> expectedIds) {
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())));
621 public void teardown() {
625 private void clearGraph() {
626 Either<TitanGraph, TitanOperationStatus> graphResult = titanDao.getGraph();
627 TitanGraph graph = graphResult.left().value();
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();
640 private String exportGraphMl(TitanGraph graph) {
641 String result = null;
642 String outputFile = outputDirectory + File.separator + "exportGraph." + System.currentTimeMillis() + ".graphml";
644 try (final OutputStream os = new BufferedOutputStream(new FileOutputStream(outputFile))) {
645 graph.io(IoCore.graphml()).writer().normalize(true).create().writeGraph(os, graph);
649 } catch (Exception e) {
650 graph.tx().rollback();