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 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;
64 import java.util.ArrayList;
65 import java.util.HashMap;
66 import java.util.Iterator;
67 import java.util.List;
70 import static org.junit.Assert.assertEquals;
71 import static org.junit.Assert.assertTrue;
73 @RunWith(SpringJUnit4ClassRunner.class)
74 @ContextConfiguration("classpath:application-context-test.xml")
75 public class ToscaElementLifecycleOperationTest extends ModelTestBase {
77 @javax.annotation.Resource
78 protected TitanDao titanDao;
80 @javax.annotation.Resource
81 private NodeTypeOperation nodeTypeOperation;
83 @javax.annotation.Resource
84 private TopologyTemplateOperation topologyTemplateOperation;
86 @javax.annotation.Resource
87 private ToscaElementLifecycleOperation lifecycleOperation;
89 String categoryName = "category";
90 String subcategory = "mycategory";
91 String outputDirectory = "C:\\Output";
94 public TestName name = new TestName();
97 public static void initLifecycleOperation() {
101 private GraphVertex ownerVertex;
102 private GraphVertex modifierVertex;
103 private GraphVertex vfVertex;
104 private GraphVertex serviceVertex;
105 private GraphVertex rootVertex;
108 public void setupBefore() {
111 createResourceCategory();
112 createServiceCategory();
113 GraphTestUtils.createRootCatalogVertex(titanDao);
114 rootVertex = createRootNodeType();
115 createNodeType("firstVf");
116 serviceVertex = createTopologyTemplate("firstService");
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;
125 assertTrue(res.isLeft());
129 verifyInCatalogData(3, null);
131 String id = res.left().value().getUniqueId();
133 res = lifecycleOperation.checkoutToscaElement(id, ownerVertex.getUniqueId(), modifierVertex.getUniqueId());
134 assertTrue(res.isLeft());
135 id = res.left().value().getUniqueId();
137 verifyInCatalogData(3, null);
139 PropertyDataDefinition prop55 = new PropertyDataDefinition();
140 prop55.setName("prop55");
141 prop55.setDefaultValue("def55");
143 status = nodeTypeOperation.addToscaDataToToscaElement(id, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, prop55, JsonPresentationFields.NAME);
144 assertTrue(status == StorageOperationStatus.OK);
146 CapabilityDataDefinition cap1 = new CapabilityDataDefinition();
147 cap1.setName("cap1");
148 cap1.setDescription("create");
149 cap1.setUniqueId(UniqueIdBuilder.buildCapabilityUid(id, "cap1"));
151 status = nodeTypeOperation.addToscaDataToToscaElement(id, EdgeLabelEnum.CAPABILITIES, VertexTypeEnum.CAPABILTIES, cap1, JsonPresentationFields.NAME);
152 assertTrue(status == StorageOperationStatus.OK);
154 res = lifecycleOperation.checkinToscaELement(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT, id, ownerVertex.getUniqueId(), ownerVertex.getUniqueId());
155 assertTrue(res.isLeft());
156 id = res.left().value().getUniqueId();
158 res = lifecycleOperation.checkoutToscaElement(id, ownerVertex.getUniqueId(), ownerVertex.getUniqueId());
159 assertTrue(res.isLeft());
160 id = res.left().value().getUniqueId();
162 prop55.setDefaultValue("AAAAAAAA");
163 status = nodeTypeOperation.updateToscaDataOfToscaElement(id, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, prop55, JsonPresentationFields.NAME);
164 assertTrue(status == StorageOperationStatus.OK);
166 cap1.setDescription("update");
168 status = nodeTypeOperation.updateToscaDataOfToscaElement(id, EdgeLabelEnum.CAPABILITIES, VertexTypeEnum.CAPABILTIES, cap1, JsonPresentationFields.NAME);
169 assertTrue(status == StorageOperationStatus.OK);
171 PropertyDataDefinition prop66 = new PropertyDataDefinition();
172 prop66.setName("prop66");
173 prop66.setDefaultValue("def66");
175 status = nodeTypeOperation.addToscaDataToToscaElement(id, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, prop66, JsonPresentationFields.NAME);
176 assertTrue(status == StorageOperationStatus.OK);
178 res = lifecycleOperation.requestCertificationToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
179 assertTrue(res.isLeft());
180 id = res.left().value().getUniqueId();
182 res = lifecycleOperation.startCertificationToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
183 assertTrue(res.isLeft());
184 id = res.left().value().getUniqueId();
186 res = lifecycleOperation.certifyToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
187 assertTrue(res.isLeft());
188 id = res.left().value().getUniqueId();
190 verifyInCatalogData(3, null);
192 res = lifecycleOperation.checkoutToscaElement(id, ownerVertex.getUniqueId(), modifierVertex.getUniqueId());
193 assertTrue(res.isLeft());
194 id = res.left().value().getUniqueId();
196 verifyInCatalogData(4, null);
198 PropertyDataDefinition prop77 = new PropertyDataDefinition();
199 prop77.setName("prop77");
200 prop77.setDefaultValue("def77");
202 status = nodeTypeOperation.addToscaDataToToscaElement(id, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, prop77, JsonPresentationFields.NAME);
203 assertTrue(status == StorageOperationStatus.OK);
205 res = lifecycleOperation.checkinToscaELement(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT, id, ownerVertex.getUniqueId(), ownerVertex.getUniqueId());
206 assertTrue(res.isLeft());
207 id = res.left().value().getUniqueId();
209 res = lifecycleOperation.checkoutToscaElement(id, ownerVertex.getUniqueId(), ownerVertex.getUniqueId());
210 assertTrue(res.isLeft());
211 id = res.left().value().getUniqueId();
213 PropertyDataDefinition prop88 = new PropertyDataDefinition();
214 prop88.setName("prop88");
215 prop88.setDefaultValue("def88");
217 status = nodeTypeOperation.addToscaDataToToscaElement(id, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, prop88, JsonPresentationFields.NAME);
218 assertTrue(status == StorageOperationStatus.OK);
220 res = lifecycleOperation.requestCertificationToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
221 assertTrue(res.isLeft());
222 id = res.left().value().getUniqueId();
224 res = lifecycleOperation.startCertificationToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
225 assertTrue(res.isLeft());
226 id = res.left().value().getUniqueId();
228 res = lifecycleOperation.certifyToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
229 assertTrue(res.isLeft());
230 id = res.left().value().getUniqueId();
231 verifyInCatalogData(3, null);
233 res = lifecycleOperation.checkoutToscaElement(id, ownerVertex.getUniqueId(), ownerVertex.getUniqueId());
234 assertTrue(res.isLeft());
235 id = res.left().value().getUniqueId();
237 verifyInCatalogData(4, null);
239 PropertyDataDefinition prop99 = new PropertyDataDefinition();
240 prop99.setName("prop99");
241 prop99.setDefaultValue("def99");
243 status = nodeTypeOperation.addToscaDataToToscaElement(id, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, prop99, JsonPresentationFields.NAME);
244 assertTrue(status == StorageOperationStatus.OK);
246 res = lifecycleOperation.requestCertificationToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
247 assertTrue(res.isLeft());
248 id = res.left().value().getUniqueId();
250 res = lifecycleOperation.startCertificationToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
251 assertTrue(res.isLeft());
252 id = res.left().value().getUniqueId();
254 status = nodeTypeOperation.deleteToscaDataElement(id, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, "prop99", JsonPresentationFields.NAME);
255 assertTrue(status == StorageOperationStatus.OK);
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();
262 res = lifecycleOperation.startCertificationToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
263 assertTrue(res.isLeft());
264 id = res.left().value().getUniqueId();
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());
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());
280 assertTrue(res.isLeft());
281 String id = res.left().value().getUniqueId();
283 res = lifecycleOperation.checkoutToscaElement(id, ownerVertex.getUniqueId(), modifierVertex.getUniqueId());
284 assertTrue(res.isLeft());
286 String conformanceLevel = res.left().value().getMetadataValue(JsonPresentationFields.CONFORMANCE_LEVEL).toString();
287 assertEquals(conformanceLevel, ModelTestBase.configurationManager.getConfiguration().getToscaConformanceLevel());
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());
298 verifyInCatalogData(3, expectedIds);
300 GraphVertex vertex4 = createTopologyTemplate("topTemp4");
301 expectedIds.add(vertex4.getUniqueId());
302 verifyInCatalogData(4, expectedIds);
304 Either<ToscaElement, StorageOperationStatus> res = lifecycleOperation.undoCheckout(vertex4.getUniqueId());
305 expectedIds.remove(vertex4.getUniqueId());
306 verifyInCatalogData(3, expectedIds);
308 vertex4 = createTopologyTemplate("topTemp4");
309 expectedIds.add(vertex4.getUniqueId());
310 verifyInCatalogData(4, expectedIds);
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);
320 res = lifecycleOperation.checkoutToscaElement(certifiedId, modifierVertex.getUniqueId(), ownerVertex.getUniqueId());
321 assertTrue(certifyToscaElement.isLeft());
322 expectedIds.add(res.left().value().getUniqueId());
323 verifyInCatalogData(5, expectedIds);
326 private void createResourceCategory() {
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();
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();
350 Either<GraphVertex, TitanOperationStatus> catRes = titanDao.createVertex(cat);
352 Either<GraphVertex, TitanOperationStatus> subCatRes = titanDao.createVertex(subCat);
354 TitanOperationStatus status = titanDao.createEdge(catRes.left().value().getVertex(), subCatRes.left().value().getVertex(), EdgeLabelEnum.SUB_CATEGORY, new HashMap<>());
355 assertEquals(TitanOperationStatus.OK, status);
358 private void createServiceCategory() {
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();
371 Either<GraphVertex, TitanOperationStatus> catRes = titanDao.createVertex(cat);
373 assertTrue(catRes.isLeft());
376 private GraphVertex createTopologyTemplate(String name) {
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();
390 cat.setName(categoryName);
391 service.setCategories(categories);
393 service.setComponentType(ComponentTypeEnum.SERVICE);
394 Either<TopologyTemplate, StorageOperationStatus> createRes = topologyTemplateOperation.createTopologyTemplate(service);
395 assertTrue(createRes.isLeft());
397 Either<GraphVertex, TitanOperationStatus> getNodeTyeRes = titanDao.getVertexById(createRes.left().value().getUniqueId());
398 assertTrue(getNodeTyeRes.isLeft());
400 // serviceVertex = getNodeTyeRes.left().value();
402 return getNodeTyeRes.left().value();
405 private <T extends ToscaDataDefinition> NodeType createNodeType(String nodeTypeName) {
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();
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);
427 List<String> derivedFrom = new ArrayList<>();
428 derivedFrom.add("root");
429 vf.setDerivedFrom(derivedFrom);
431 vf.setComponentType(ComponentTypeEnum.RESOURCE);
432 Either<NodeType, StorageOperationStatus> createVFRes = nodeTypeOperation.createNodeType(vf);
433 assertTrue(createVFRes.isLeft());
435 Either<GraphVertex, TitanOperationStatus> getNodeTyeRes = titanDao.getVertexById(createVFRes.left().value().getUniqueId());
436 assertTrue(getNodeTyeRes.isLeft());
438 vfVertex = getNodeTyeRes.left().value();
440 List<PropertyDataDefinition> addProperties = new ArrayList<>();
441 PropertyDataDefinition prop11 = new PropertyDataDefinition();
442 prop11.setName("prop11");
443 prop11.setDefaultValue("def11");
445 addProperties.add(prop11);
447 PropertyDataDefinition prop22 = new PropertyDataDefinition();
448 prop22.setName("prop22");
449 prop22.setDefaultValue("def22");
450 addProperties.add(prop22);
452 StorageOperationStatus status = nodeTypeOperation.addToscaDataToToscaElement(vfVertex, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, addProperties, JsonPresentationFields.NAME);
453 assertTrue(status == StorageOperationStatus.OK);
455 PropertyDataDefinition prop33 = new PropertyDataDefinition();
456 prop33.setName("prop33");
457 prop33.setDefaultValue("def33");
459 status = nodeTypeOperation.addToscaDataToToscaElement(vfVertex, EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, prop33, JsonPresentationFields.NAME);
460 assertTrue(status == StorageOperationStatus.OK);
462 PropertyDataDefinition prop44 = new PropertyDataDefinition();
463 prop44.setName("prop44");
464 prop44.setDefaultValue("def44");
466 status = nodeTypeOperation.addToscaDataToToscaElement(vfVertex.getUniqueId(), EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, prop44, JsonPresentationFields.NAME);
467 assertTrue(status == StorageOperationStatus.OK);
469 PropertyDataDefinition capProp = new PropertyDataDefinition();
470 capProp.setName("capProp");
471 capProp.setDefaultValue("capPropDef");
473 MapDataDefinition dataToCreate = new MapPropertiesDataDefinition();
474 dataToCreate.put("capProp", capProp);
476 Map<String, MapDataDefinition> capProps = new HashMap();
477 capProps.put("capName", dataToCreate);
479 Either<GraphVertex, StorageOperationStatus> res = nodeTypeOperation.assosiateElementToData(vfVertex, VertexTypeEnum.CAPABILITIES_PROPERTIES, EdgeLabelEnum.CAPABILITIES_PROPERTIES, capProps);
481 // exportGraphMl(titanDao.getGraph().left().value());
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);
490 private GraphVertex createRootNodeType() {
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);
505 List<CategoryDefinition> categories = new ArrayList<>();
506 CategoryDefinition cat = new CategoryDefinition();
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);
516 List<String> derivedFrom = new ArrayList<>();
517 vf.setDerivedFrom(derivedFrom);
519 Map<String, PropertyDataDefinition> properties = new HashMap<>();
520 PropertyDataDefinition prop1 = new PropertyDataDefinition();
521 prop1.setName("derived1");
522 prop1.setDefaultValue("deriveddef1");
524 properties.put("derived1", prop1);
526 PropertyDataDefinition prop2 = new PropertyDataDefinition();
527 prop2.setUniqueId("derived2");
528 prop2.setName("deriveddef2");
529 properties.put("derived2", prop2);
531 PropertyDataDefinition prop3 = new PropertyDataDefinition();
532 prop3.setName("derived3");
533 prop3.setDefaultValue("deriveddef3");
534 properties.put("derived3", prop3);
536 vf.setProperties(properties);
537 vf.setComponentType(ComponentTypeEnum.RESOURCE);
538 Either<NodeType, StorageOperationStatus> createVFRes = nodeTypeOperation.createNodeType(vf);
539 assertTrue(createVFRes.isLeft());
541 Either<GraphVertex, TitanOperationStatus> getNodeTyeRes = titanDao.getVertexById(createVFRes.left().value().getUniqueId());
542 assertTrue(getNodeTyeRes.isLeft());
543 return getNodeTyeRes.left().value();
546 private void createUsers() {
548 GraphVertex ownerV = new GraphVertex(VertexTypeEnum.USER);
549 ownerV.setUniqueId("user1");
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());
561 ownerVertex = createUserRes.left().value();
563 GraphVertex modifierV = new GraphVertex(VertexTypeEnum.USER);
564 modifierV.setUniqueId("user2");
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());
576 modifierVertex = createUserRes.left().value();
578 Either<GraphVertex, TitanOperationStatus> getOwnerRes = lifecycleOperation.findUser(ownerVertex.getUniqueId());
579 assertTrue(getOwnerRes.isLeft());
583 public void verifyInCatalogData(int expected, List<String> expectedIds) {
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())));
596 public void teardown() {
600 private void clearGraph() {
601 Either<TitanGraph, TitanOperationStatus> graphResult = titanDao.getGraph();
602 TitanGraph graph = graphResult.left().value();
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();