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.assertFalse;
25 import static org.junit.Assert.assertNotNull;
26 import static org.junit.Assert.assertTrue;
28 import java.util.ArrayList;
29 import java.util.HashMap;
30 import java.util.List;
33 import java.util.regex.Pattern;
35 import org.apache.commons.lang3.tuple.ImmutablePair;
36 import org.junit.Before;
37 import org.junit.BeforeClass;
38 import org.junit.Ignore;
39 import org.junit.Test;
40 import org.junit.runner.RunWith;
41 import org.openecomp.sdc.be.dao.graph.datatype.GraphRelation;
42 import org.openecomp.sdc.be.dao.neo4j.GraphEdgeLabels;
43 import org.openecomp.sdc.be.dao.neo4j.GraphEdgePropertiesDictionary;
44 import org.openecomp.sdc.be.dao.neo4j.GraphPropertiesDictionary;
45 import org.openecomp.sdc.be.dao.titan.TitanGenericDao;
46 import org.openecomp.sdc.be.dao.titan.TitanOperationStatus;
47 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
48 import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
49 import org.openecomp.sdc.be.model.ArtifactDefinition;
50 import org.openecomp.sdc.be.model.CapabilityDefinition;
51 import org.openecomp.sdc.be.model.CapabilityTypeDefinition;
52 import org.openecomp.sdc.be.model.ComponentInstance;
53 import org.openecomp.sdc.be.model.HeatParameterDefinition;
54 import org.openecomp.sdc.be.model.LifecycleStateEnum;
55 import org.openecomp.sdc.be.model.ModelTestBase;
56 import org.openecomp.sdc.be.model.RelationshipImpl;
57 import org.openecomp.sdc.be.model.RequirementAndRelationshipPair;
58 import org.openecomp.sdc.be.model.RequirementCapabilityRelDef;
59 import org.openecomp.sdc.be.model.RequirementDefinition;
60 import org.openecomp.sdc.be.model.Resource;
61 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
62 import org.openecomp.sdc.be.model.operations.impl.ArtifactOperation;
63 import org.openecomp.sdc.be.model.operations.impl.CapabilityOperation;
64 import org.openecomp.sdc.be.model.operations.impl.CapabilityTypeOperation;
65 import org.openecomp.sdc.be.model.operations.impl.ComponentInstanceOperation;
66 import org.openecomp.sdc.be.model.operations.impl.HeatParametersOperation;
67 import org.openecomp.sdc.be.model.operations.impl.PropertyOperation;
68 import org.openecomp.sdc.be.model.operations.impl.RequirementOperation;
69 import org.openecomp.sdc.be.model.operations.impl.ResourceOperation;
70 import org.openecomp.sdc.be.model.operations.impl.UniqueIdBuilder;
71 import org.openecomp.sdc.be.model.operations.impl.util.OperationTestsUtil;
72 import org.openecomp.sdc.be.model.operations.impl.util.PrintGraph;
73 import org.openecomp.sdc.be.resources.data.ArtifactData;
74 import org.openecomp.sdc.be.resources.data.HeatParameterData;
75 import org.openecomp.sdc.be.resources.data.HeatParameterValueData;
76 import org.openecomp.sdc.be.resources.data.RelationshipInstData;
77 import org.openecomp.sdc.be.resources.data.ResourceMetadataData;
78 import org.openecomp.sdc.be.resources.data.ServiceMetadataData;
79 import org.openecomp.sdc.be.resources.data.UniqueIdData;
80 import org.openecomp.sdc.be.resources.data.UserData;
81 import org.openecomp.sdc.common.api.ArtifactGroupTypeEnum;
82 import org.slf4j.Logger;
83 import org.slf4j.LoggerFactory;
84 import org.springframework.test.context.ContextConfiguration;
85 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
87 import com.google.gson.Gson;
88 import com.google.gson.GsonBuilder;
90 import fj.data.Either;
92 @RunWith(SpringJUnit4ClassRunner.class)
93 @ContextConfiguration("classpath:application-context-test.xml")
94 public class ResourceInstanceOperationTest extends ModelTestBase {
95 private static Logger log = LoggerFactory.getLogger(ResourceInstanceOperationTest.class.getName());
96 private Gson prettyGson = new GsonBuilder().setPrettyPrinting().create();
98 private static String USER_ID = "muUserId";
99 private static String CATEGORY_NAME = "category/mycategory";
101 @javax.annotation.Resource(name = "titan-generic-dao")
102 private TitanGenericDao titanDao;
104 @javax.annotation.Resource(name = "requirement-operation")
105 private RequirementOperation requirementOperation;
107 @javax.annotation.Resource(name = "resource-operation")
108 private ResourceOperation resourceOperation;
110 @javax.annotation.Resource(name = "property-operation")
111 private PropertyOperation propertyOperation;
113 @javax.annotation.Resource(name = "capability-operation")
114 private CapabilityOperation capabilityOperation;
116 @javax.annotation.Resource(name = "capability-type-operation")
117 private CapabilityTypeOperation capabilityTypeOperation;
119 @javax.annotation.Resource(name = "component-instance-operation")
120 private ComponentInstanceOperation resourceInstanceOperation;
122 @javax.annotation.Resource
123 private HeatParametersOperation heatParameterOperation;
125 @javax.annotation.Resource
126 private ArtifactOperation artifactOperation;
128 private String CAPABILITY_1 = "mycapability101";
129 private String CAPABILITY_2 = "mycapability102";
131 private Integer TEST_CLASS_NUMBER = 1;
133 public final static Pattern COMPONENT_NAME_DELIMETER_PATTERN = Pattern.compile("[\\.\\-\\_]+");
135 public final static Pattern COMPONENT_INCTANCE_NAME_DELIMETER_PATTERN = Pattern.compile("[\\.\\-\\_]+");
138 public static void setupBeforeClass() {
140 // configurationManager = new ConfigurationManager(
141 // new ConfigurationSource() {
144 // public <T> T getAndWatchConfiguration(Class<T> className,
145 // ConfigurationListener configurationListener) {
146 // // TODO Auto-generated method stub
151 // public <T> void addWatchConfiguration(Class<T> className,
152 // ConfigurationListener configurationListener) {
153 // // TODO Auto-generated method stub
158 // Configuration configuration = new Configuration();
161 // boolean useInMemory = true;
162 // if (useInMemory) {
163 // configuration.setTitanInMemoryGraph(true);
165 // configuration.setTitanInMemoryGraph(false);
166 // configuration.setTitanCfgFile("C:\\Git_work\\D2-SDnC\\catalog-be\\src\\main\\resources\\config\\titan.properties");
171 // configurationManager.setConfiguration(configuration);
172 ModelTestBase.init();
175 public void setOperations(TitanGenericDao titanDao, CapabilityTypeOperation capabilityTypeOperation, RequirementOperation requirementOperation, CapabilityOperation capabilityOperation, ResourceOperation resourceOperation,
176 PropertyOperation propertyOperation, ComponentInstanceOperation resourceInstanceOperation2) {
177 this.titanDao = titanDao;
178 this.capabilityTypeOperation = capabilityTypeOperation;
179 this.capabilityOperation = capabilityOperation;
180 this.requirementOperation = requirementOperation;
181 this.resourceOperation = resourceOperation;
182 this.propertyOperation = propertyOperation;
183 this.resourceInstanceOperation = resourceInstanceOperation2;
187 public void testDummy() {
189 assertTrue(requirementOperation != null);
194 public void testAddResourceInstanceInvalidServiceId() {
197 ComponentInstance instance = buildResourceInstance("tosca.nodes.Apache.2.0", "1", "tosca.nodes.Apache");
199 Either<ComponentInstance, TitanOperationStatus> status = resourceInstanceOperation.addComponentInstanceToContainerComponent("service1", NodeTypeEnum.Service, "1", true, instance, NodeTypeEnum.Resource, false);
200 assertEquals("check failed status - service is not in graph", true, status.isRight());
201 assertEquals("check failed status value - service is not in graph", TitanOperationStatus.INVALID_ID, status.right().value());
209 public void testAddResourceInstanceValidServiceIdInvalidResourceId() {
212 ServiceMetadataData serviceData1 = createService("myservice1.1.0");
214 ComponentInstance instance = buildResourceInstance("tosca.nodes.Apache.2.0", "1", "tosca.nodes.Apache");
216 Either<ComponentInstance, TitanOperationStatus> status = resourceInstanceOperation.addComponentInstanceToContainerComponent((String) serviceData1.getUniqueId(), NodeTypeEnum.Service, "1", true, instance, NodeTypeEnum.Resource, false);
218 assertEquals("check failed status - service is not in graph", true, status.isRight());
219 assertEquals("check failed status value - service is not in graph", TitanOperationStatus.INVALID_ID, status.right().value());
228 public void testAddResourceInstanceValidServiceId() {
230 String serviceName = "myservice1.1.0";
231 String resourceName = "tosca.nodes.Apache.2.0";
232 ServiceMetadataData serviceData1 = createService(serviceName);
233 ResourceMetadataData resourceData = createResource(resourceName);
235 ComponentInstance instance = buildResourceInstance(resourceData.getMetadataDataDefinition().getUniqueId(), "1", "tosca.nodes.Apache");
237 Either<ComponentInstance, TitanOperationStatus> status = resourceInstanceOperation.addComponentInstanceToContainerComponent((String) serviceData1.getUniqueId(), NodeTypeEnum.Service, "1", true, instance, NodeTypeEnum.Resource, false);
239 assertEquals("check success status - service is not in graph", true, status.isLeft());
241 ComponentInstance value = status.left().value();
242 assertEquals("check name exists", "tosca.nodes.Apache 1", value.getName());
244 ServiceMetadataData serviceData2 = deleteService(serviceName);
245 ResourceMetadataData resourceData2 = deleteResource(resourceName);
253 public void testUpdateResourceInstance() {
255 String serviceName = "myservice1.1.0";
256 String resourceName = "tosca.nodes.Apache.2.0";
257 ServiceMetadataData serviceData1 = createService(serviceName);
258 ResourceMetadataData resourceData = createResource(resourceName);
260 ComponentInstance instance = buildResourceInstance(resourceData.getMetadataDataDefinition().getUniqueId(), "1", "tosca.nodes.Apache");
262 Either<ComponentInstance, TitanOperationStatus> status = resourceInstanceOperation.addComponentInstanceToContainerComponent((String) serviceData1.getUniqueId(), NodeTypeEnum.Service, "1", true, instance, NodeTypeEnum.Resource, false);
264 ComponentInstance resourceInstance = status.left().value();
265 Long creationTime = resourceInstance.getCreationTime();
266 String name = resourceInstance.getName();
267 assertEquals("check success status - service is not in graph", true, status.isLeft());
269 ComponentInstance value = status.left().value();
270 assertEquals("check name exists", "tosca.nodes.Apache 1", value.getName());
272 Either<ComponentInstance, StorageOperationStatus> u1Res = resourceInstanceOperation.updateResourceInstance((String) serviceData1.getUniqueId(), NodeTypeEnum.Service, resourceInstance.getUniqueId(), value, true);
273 assertTrue("check update succeed", u1Res.isLeft());
275 Long lastModificationTimeNC = value.getModificationTime();
276 String desc = "AAAAA";
279 String updatedName = "Shlokshlik";
280 value.setDescription(desc);
282 Either<ComponentInstance, StorageOperationStatus> u2Res = resourceInstanceOperation.updateResourceInstance((String) serviceData1.getUniqueId(), NodeTypeEnum.Service, resourceInstance.getUniqueId(), value, true);
283 assertTrue("check update succeed", u2Res.isLeft());
284 assertEquals("check resource instance updated", desc, u2Res.left().value().getDescription());
285 assertEquals("check resource instance updated", posX, u2Res.left().value().getPosX());
286 assertEquals("check resource instance updated", resourceInstance.getPosY(), u2Res.left().value().getPosY());
287 assertEquals("check modification time was not updated since it was supplied", u2Res.left().value().getModificationTime(), lastModificationTimeNC);
289 Long lastModificationTime = value.getModificationTime();
291 value.setModificationTime(null);
292 value.setName(updatedName);
293 Either<ComponentInstance, StorageOperationStatus> u3Res = resourceInstanceOperation.updateResourceInstance((String) serviceData1.getUniqueId(), NodeTypeEnum.Service, resourceInstance.getUniqueId(), value, true);
294 assertTrue("check update succeed", u3Res.isLeft());
295 assertEquals("check resource instance updated", desc, u3Res.left().value().getDescription());
296 assertEquals("check resource pos x updated", posX, u3Res.left().value().getPosX());
297 assertEquals("check resource pos y updated", posY, u3Res.left().value().getPosY());
298 assertTrue("check modification time was updated", u3Res.left().value().getModificationTime() >= lastModificationTime);
299 assertEquals("check creation time was not updated", creationTime, u3Res.left().value().getCreationTime());
300 assertEquals("check name was updated", updatedName, u3Res.left().value().getName());
302 ServiceMetadataData serviceData2 = deleteService(serviceName);
303 ResourceMetadataData resourceData2 = deleteResource(resourceName);
311 public void testRemoveResourceInstance() {
313 String serviceName = "myservice1.1.0";
314 String resourceName = "tosca.nodes.Apache.2.0";
315 ServiceMetadataData serviceData1 = createService(serviceName);
316 ResourceMetadataData resourceData = createResource(resourceName);
318 ComponentInstance instance = buildResourceInstance(resourceData.getMetadataDataDefinition().getUniqueId(), "1", "tosca.nodes.Apache");
320 Either<ComponentInstance, TitanOperationStatus> status = resourceInstanceOperation.addComponentInstanceToContainerComponent((String) serviceData1.getUniqueId(), NodeTypeEnum.Service, "1", true, instance, NodeTypeEnum.Resource, false);
322 assertEquals("check success status - service is not in graph", true, status.isLeft());
324 ComponentInstance value = status.left().value();
325 assertEquals("check name exists", "tosca.nodes.Apache 1", value.getName());
327 Either<ComponentInstance, TitanOperationStatus> status1 = resourceInstanceOperation.removeComponentInstanceFromComponent(NodeTypeEnum.Service, serviceName, value.getUniqueId());
329 assertTrue("check resource service was deleted.", status1.isLeft());
330 assertEquals("check resource instance returned.", "tosca.nodes.Apache 1", status1.left().value().getName());
332 ServiceMetadataData serviceData2 = deleteService(serviceName);
333 ResourceMetadataData resourceData2 = deleteResource(resourceName);
341 public void testRemoveResourceInstanceNotFound() {
343 String serviceName = "myservice1.1.0";
344 ServiceMetadataData serviceData1 = createService(serviceName);
346 Either<ComponentInstance, TitanOperationStatus> status1 = resourceInstanceOperation.removeComponentInstanceFromComponent(NodeTypeEnum.Service, serviceName, "stam");
348 assertTrue("check resource service was not deleted.", status1.isRight());
349 assertEquals("check NOT_FOUND returned.", TitanOperationStatus.NOT_FOUND, status1.right().value());
351 ServiceMetadataData serviceData2 = deleteService(serviceName);
358 public ServiceMetadataData createService(String serviceName) {
360 ServiceMetadataData serviceData1 = new ServiceMetadataData();
361 serviceData1.getMetadataDataDefinition().setUniqueId(serviceName);
362 Either<ServiceMetadataData, TitanOperationStatus> createNode = titanDao.createNode(serviceData1, ServiceMetadataData.class);
364 assertTrue("check service created", createNode.isLeft());
365 return createNode.left().value();
368 public ServiceMetadataData deleteService(String serviceName) {
370 ServiceMetadataData serviceData1 = new ServiceMetadataData();
371 serviceData1.getMetadataDataDefinition().setUniqueId(serviceName);
372 Either<ServiceMetadataData, TitanOperationStatus> createNode = titanDao.deleteNode(serviceData1, ServiceMetadataData.class);
373 assertTrue("check service deleted", createNode.isLeft());
374 return createNode.left().value();
377 public ResourceMetadataData createResource(String resourceName) {
379 ResourceMetadataData serviceData1 = new ResourceMetadataData();
380 serviceData1.getMetadataDataDefinition().setUniqueId(resourceName);
381 Either<ResourceMetadataData, TitanOperationStatus> createNode = titanDao.createNode(serviceData1, ResourceMetadataData.class);
383 assertTrue("check service created", createNode.isLeft());
384 return createNode.left().value();
387 public ResourceMetadataData deleteResource(String resourceName) {
389 ResourceMetadataData serviceData1 = new ResourceMetadataData();
390 serviceData1.getMetadataDataDefinition().setUniqueId(resourceName);
391 Either<ResourceMetadataData, TitanOperationStatus> createNode = titanDao.deleteNode(serviceData1, ResourceMetadataData.class);
393 assertTrue("check service created", createNode.isLeft());
394 return createNode.left().value();
398 public void testAddResourceInstanceJson() {
399 addResourceInstanceJson();
402 public ComponentInstance addResourceInstanceJson() {
404 ComponentInstance resourceInstance = buildResourceInstance("tosca.nodes.Apache.2.0", "1", "tosca.nodes.Apache");
406 String json = prettyGson.toJson(resourceInstance);
409 return resourceInstance;
413 private ComponentInstance buildResourceInstance(String respurceUid, String instanceNumber, String name) {
414 ComponentInstance resourceInstance = new ComponentInstance();
416 // .setUniqueId("<SN>.tosca.nodes.Apache.2.0." + instanceNumber);
417 resourceInstance.setName(name);
418 resourceInstance.setDescription("desc1");
419 resourceInstance.setPosX("20");
420 resourceInstance.setPosY("40");
421 resourceInstance.setComponentUid(respurceUid);
422 resourceInstance.setCreationTime(System.currentTimeMillis());
423 resourceInstance.setModificationTime(System.currentTimeMillis());
424 resourceInstance.setNormalizedName(normaliseComponentInstanceName(name));
426 // Map<String, RequirementInstance> requirements = new HashMap<String,
427 // RequirementInstance>();
429 // RequirementInstance requirementInstance1 = new RequirementInstance();
430 // requirementInstance1.setNode("NA");
431 // RelationshipImpl relationshipImpl = new RelationshipImpl();
432 // relationshipImpl.setType("tosca.relationships.HostedOn");
433 // requirementInstance1.setRelationship(relationshipImpl);
435 // requirements.put("host", requirementInstance1);
437 // RequirementInstance requirementInstance2 = new RequirementInstance();
438 // requirementInstance2.setNode("NA");
439 // RelationshipImpl relationshipImpl2 = new RelationshipImpl();
440 // relationshipImpl2.setType("tosca.relationships.LinkTo");
441 // requirementInstance2.setRelationship(relationshipImpl2);
443 // requirements.put("link", requirementInstance2);
445 // resourceInstance.setRequirements(requirements);
446 return resourceInstance;
451 public void testConenctResourceInstancesJson() {
452 RequirementCapabilityRelDef addRelationship = addRelationship("apache_1", "compute_100");
453 String json = prettyGson.toJson(addRelationship);
456 RequirementCapabilityRelDef capabilityRelDef = prettyGson.fromJson(json, RequirementCapabilityRelDef.class);
457 log.debug("{}", capabilityRelDef);
461 public RequirementCapabilityRelDef addRelationship(String from, String to) {
462 RequirementCapabilityRelDef requirementCapabilityRelDef = new RequirementCapabilityRelDef();
463 requirementCapabilityRelDef.setFromNode(from);
464 requirementCapabilityRelDef.setToNode(to);
465 List<RequirementAndRelationshipPair> relationships = new ArrayList<RequirementAndRelationshipPair>();
468 RelationshipImpl relationshipImpl = new RelationshipImpl();
469 relationshipImpl.setType("tosca.nodes.HostedOn");
470 RequirementAndRelationshipPair rels = new RequirementAndRelationshipPair(req, relationshipImpl);
471 relationships.add(rels);
473 requirementCapabilityRelDef.setRelationships(relationships);
475 return requirementCapabilityRelDef;
479 public void createUserAndCategory() {
480 deleteAndCreateCategory(CATEGORY_NAME);
481 deleteAndCreateUser(USER_ID, "first_" + USER_ID, "last_" + USER_ID);
484 private UserData deleteAndCreateUser(String userId, String firstName, String lastName) {
485 UserData userData = new UserData();
486 userData.setUserId(userId);
487 userData.setFirstName(firstName);
488 userData.setLastName(lastName);
490 titanDao.deleteNode(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.User), userId, UserData.class);
491 titanDao.createNode(userData, UserData.class);
497 private void deleteAndCreateCategory(String category) {
498 String[] names = category.split("/");
499 OperationTestsUtil.deleteAndCreateResourceCategory(names[0], names[1], titanDao);
500 OperationTestsUtil.deleteAndCreateServiceCategory(category, titanDao);
503 * CategoryData categoryData = new CategoryData(); categoryData.setName(category);
505 * titanDao.deleteNode(categoryData, CategoryData.class); Either<CategoryData, TitanOperationStatus> createNode = titanDao .createNode(categoryData, CategoryData.class); System.out.println("after creating caetgory " + createNode);
511 public void testConnectResourceInstances() {
513 PrintGraph printGraph1 = new PrintGraph();
514 int numberOfVertices = printGraph1.getNumberOfVertices(titanDao.getGraph().left().value());
517 String capabilityTypeName = CAPABILITY_2;
518 String reqName = "host";
519 String reqNodeName = "tosca.nodes.Compute2" + TEST_CLASS_NUMBER;
520 String rootName = "Root2" + TEST_CLASS_NUMBER;
521 String softwareCompName = "tosca.nodes.SoftwareComponent2" + TEST_CLASS_NUMBER;
522 String computeNodeName = reqNodeName;
523 String myResourceVersion = "4.0" + TEST_CLASS_NUMBER;
524 String reqRelationship = "myrelationship";
526 // Create Capability type
527 CapabilityTypeOperationTest capabilityTypeOperationTest = new CapabilityTypeOperationTest();
528 capabilityTypeOperationTest.setOperations(titanDao, capabilityTypeOperation);
529 CapabilityTypeDefinition createCapabilityDef = capabilityTypeOperationTest.createCapability(capabilityTypeName);
530 ResourceOperationTest resourceOperationTest = new ResourceOperationTest();
531 resourceOperationTest.setOperations(titanDao, resourceOperation, propertyOperation);
533 // create root resource
534 Resource rootResource = resourceOperationTest.createResource(USER_ID, CATEGORY_NAME, rootName, "1.0", null, true, true);
535 ResourceMetadataData resourceData = new ResourceMetadataData();
536 resourceData.getMetadataDataDefinition().setUniqueId(rootResource.getUniqueId());
537 resourceData.getMetadataDataDefinition().setState(LifecycleStateEnum.CERTIFIED.name());
538 Either<ResourceMetadataData, TitanOperationStatus> updateNode = titanDao.updateNode(resourceData, ResourceMetadataData.class);
539 assertTrue(updateNode.isLeft());
541 Either<Resource, StorageOperationStatus> fetchRootResource = resourceOperation.getResource(rootResource.getUniqueId(), true);
543 String rootResourceJson = prettyGson.toJson(fetchRootResource.left().value());
544 log.debug(rootResourceJson);
546 // create software component
547 Resource softwareComponent = resourceOperationTest.createResource(USER_ID, CATEGORY_NAME, softwareCompName, "1.0", rootResource.getName(), true, true);
549 resourceData.getMetadataDataDefinition().setUniqueId(softwareComponent.getUniqueId());
550 resourceData.getMetadataDataDefinition().setState(LifecycleStateEnum.CERTIFIED.name());
551 updateNode = titanDao.updateNode(resourceData, ResourceMetadataData.class);
552 assertTrue(updateNode.isLeft());
554 // create compute component
555 Resource computeComponent = resourceOperationTest.createResource(USER_ID, CATEGORY_NAME, computeNodeName, "1.0", rootResource.getName(), true, true);
557 // rollbackAndPrint();
559 // Add capabilities to Compute Resource
560 CapabilityDefinition addCapability = addCapabilityToResource(capabilityTypeName, "host", computeComponent);
562 // create requirement definition
564 Either<RequirementDefinition, StorageOperationStatus> addRequirementToResource = addRequirementToResource(capabilityTypeName, reqName, reqNodeName, reqRelationship, softwareComponent);
566 String parentReqUniqId = addRequirementToResource.left().value().getUniqueId();
568 // create my resource derived from software component
569 Resource resource = resourceOperationTest.createResource(USER_ID, CATEGORY_NAME, "my-resource", myResourceVersion, softwareComponent.getName(), true, true);
571 String serviceName = "myservice.1.0";
572 List<ComponentInstance> resInstances = buildServiceAndConnectBetweenResourceInstances(serviceName, resource, computeComponent, "host", false, addCapability.getUniqueId(), addRequirementToResource.left().value().getUniqueId());
574 PrintGraph printGraph = new PrintGraph();
575 String webGraph = printGraph.buildGraphForWebgraphWiz(titanDao.getGraph().left().value());
578 Either<Resource, StorageOperationStatus> resourceFull = resourceOperation.getResource(resource.getUniqueId());
579 assertTrue(resourceFull.isLeft());
580 List<RequirementCapabilityRelDef> componentInstancesRelations = resourceFull.left().value().getComponentInstancesRelations();
582 RequirementCapabilityRelDef capabilityRelDef = componentInstancesRelations.get(0);
583 capabilityRelDef.getRelationships().get(0).setRequirement("host");
585 // disconnectResourcesInService(serviceName, resInstances.get(0),
587 disconnectResourcesInService(serviceName, capabilityRelDef);
590 rollbackAndPrint(false);
591 compareGraphSize(numberOfVertices);
598 public void testConnectResourceInstances1Requirement2Capabilities() {
600 PrintGraph printGraph1 = new PrintGraph();
601 int numberOfVertices = printGraph1.getNumberOfVertices(titanDao.getGraph().left().value());
605 String capabilityTypeName1 = CAPABILITY_1;
606 String capabilityTypeName2 = CAPABILITY_2;
607 String reqName1 = "host1";
608 String reqName2 = "host2";
609 String reqNodeName = "tosca.nodes.Compute2" + TEST_CLASS_NUMBER;
610 String rootName = "Root2" + TEST_CLASS_NUMBER;
611 String softwareCompName = "tosca.nodes.SoftwareComponent2" + TEST_CLASS_NUMBER;
612 String computeNodeName = reqNodeName;
613 String myResourceVersion = "4.0" + TEST_CLASS_NUMBER;
614 String reqRelationship = "myrelationship";
616 // Create Capability type
617 CapabilityTypeOperationTest capabilityTypeOperationTest = new CapabilityTypeOperationTest();
618 capabilityTypeOperationTest.setOperations(titanDao, capabilityTypeOperation);
619 CapabilityTypeDefinition createCapabilityDef1 = capabilityTypeOperationTest.createCapability(capabilityTypeName1);
620 CapabilityTypeDefinition createCapabilityDef2 = capabilityTypeOperationTest.createCapability(capabilityTypeName2);
622 ResourceOperationTest resourceOperationTest = new ResourceOperationTest();
623 resourceOperationTest.setOperations(titanDao, resourceOperation, propertyOperation);
625 // create root resource
626 Resource rootResource = resourceOperationTest.createResource(USER_ID, CATEGORY_NAME, rootName, "1.0", null, true, true);
628 ResourceMetadataData resourceData = new ResourceMetadataData();
629 resourceData.getMetadataDataDefinition().setUniqueId(rootResource.getUniqueId());
630 resourceData.getMetadataDataDefinition().setState(LifecycleStateEnum.CERTIFIED.name());
631 Either<ResourceMetadataData, TitanOperationStatus> updateNode = titanDao.updateNode(resourceData, ResourceMetadataData.class);
632 assertTrue(updateNode.isLeft());
634 Either<Resource, StorageOperationStatus> fetchRootResource = resourceOperation.getResource(rootResource.getUniqueId(), true);
636 String rootResourceJson = prettyGson.toJson(fetchRootResource.left().value());
637 log.debug(rootResourceJson);
639 // create software component
640 Resource softwareComponent = resourceOperationTest.createResource(USER_ID, CATEGORY_NAME, softwareCompName, "1.0", rootResource.getName(), true, true);
642 resourceData.getMetadataDataDefinition().setUniqueId(softwareComponent.getUniqueId());
643 resourceData.getMetadataDataDefinition().setState(LifecycleStateEnum.CERTIFIED.name());
644 updateNode = titanDao.updateNode(resourceData, ResourceMetadataData.class);
645 assertTrue(updateNode.isLeft());
647 // create compute component
648 Resource computeComponent = resourceOperationTest.createResource(USER_ID, CATEGORY_NAME, computeNodeName, "1.0", rootResource.getName(), true, true);
650 // Add capabilities to Compute Resource
651 CapabilityDefinition capabilty1 = addCapabilityToResource(capabilityTypeName1, reqName1, computeComponent);
652 CapabilityDefinition capabilty2 = addCapabilityToResource(capabilityTypeName2, reqName2, computeComponent);
654 // rollbackAndPrint();
656 // create requirement definition
658 Either<RequirementDefinition, StorageOperationStatus> addRequirementToResource = addRequirementToResource(capabilityTypeName1, reqName1, reqNodeName, reqRelationship, softwareComponent);
660 String requirementId = addRequirementToResource.left().value().getUniqueId();
661 String parentReqUniqId = requirementId;
663 // create my resource derived from software component
664 Resource resource = resourceOperationTest.createResource(USER_ID, CATEGORY_NAME, "my-resource", myResourceVersion, softwareComponent.getName(), true, true);
666 String serviceName = "myservice.1.0";
667 List<ComponentInstance> resInstances = buildServiceAndConnectBetweenResourceInstances(serviceName, resource, computeComponent, reqName1, false, capabilty1.getUniqueId(), requirementId);
669 PrintGraph printGraph = new PrintGraph();
670 String webGraph = printGraph.buildGraphForWebgraphWiz(titanDao.getGraph().left().value());
673 RequirementAndRelationshipPair relationPair = new RequirementAndRelationshipPair();
674 relationPair.setRequirement(reqName2);
676 relationPair.setCapabilityUid(capabilty1.getUniqueId());
677 relationPair.setRequirementUid(requirementId);
679 Either<RelationshipInstData, TitanOperationStatus> connectResourcesInService1 = resourceInstanceOperation.connectResourcesInService(serviceName, NodeTypeEnum.Service, resInstances.get(0).getUniqueId(), resInstances.get(1).getUniqueId(),
681 assertEquals("check cannot associate resource instances", TitanOperationStatus.ILLEGAL_ARGUMENT, connectResourcesInService1.right().value());
682 relationPair.setRequirement(reqName1);
683 Either<RelationshipInstData, TitanOperationStatus> connectResourcesInService2 = resourceInstanceOperation.connectResourcesInService(serviceName, NodeTypeEnum.Service, resInstances.get(0).getUniqueId(), resInstances.get(1).getUniqueId(),
685 assertEquals("check cannot associate resource instances", TitanOperationStatus.TITAN_SCHEMA_VIOLATION, connectResourcesInService2.right().value());
687 relationPair.setRequirement(reqName1);
689 RequirementCapabilityRelDef capabilityRelDef = new RequirementCapabilityRelDef();
690 capabilityRelDef.setFromNode(resInstances.get(0).getUniqueId());
691 capabilityRelDef.setToNode(resInstances.get(1).getUniqueId());
692 List<RequirementAndRelationshipPair> list = new ArrayList<>();
693 list.add(relationPair);
695 disconnectResourcesInService(serviceName, capabilityRelDef);
699 compareGraphSize(numberOfVertices);
704 private void rollbackAndPrint() {
705 rollbackAndPrint(false);
708 private void rollbackAndPrint(boolean print) {
709 TitanOperationStatus rollback = titanDao.rollback();
711 log.debug("rollback status={}", rollback);
712 PrintGraph printGraph = new PrintGraph();
713 printGraph.printGraphVertices(titanDao.getGraph().left().value());
719 public void testConnectResourceInstances2Requirement2Capabilities() {
721 PrintGraph printGraph1 = new PrintGraph();
722 int numberOfVertices = printGraph1.getNumberOfVertices(titanDao.getGraph().left().value());
726 String capabilityTypeName1 = CAPABILITY_1;
727 String capabilityTypeName2 = CAPABILITY_2;
728 String reqName1 = "host1";
729 String reqName2 = "host2";
730 String reqNodeName = "tosca.nodes.Compute2" + TEST_CLASS_NUMBER;
731 String rootName = "Root2" + TEST_CLASS_NUMBER;
732 String softwareCompName = "tosca.nodes.SoftwareComponent2" + TEST_CLASS_NUMBER;
733 String computeNodeName = reqNodeName;
734 String myResourceVersion = "4.0" + TEST_CLASS_NUMBER;
735 String reqRelationship = "myrelationship";
737 // Create Capability type
738 CapabilityTypeOperationTest capabilityTypeOperationTest = new CapabilityTypeOperationTest();
739 capabilityTypeOperationTest.setOperations(titanDao, capabilityTypeOperation);
740 CapabilityTypeDefinition createCapabilityDef1 = capabilityTypeOperationTest.createCapability(capabilityTypeName1);
741 CapabilityTypeDefinition createCapabilityDef2 = capabilityTypeOperationTest.createCapability(capabilityTypeName2);
743 ResourceOperationTest resourceOperationTest = new ResourceOperationTest();
744 resourceOperationTest.setOperations(titanDao, resourceOperation, propertyOperation);
746 // create root resource
747 Resource rootResource = resourceOperationTest.createResource(USER_ID, CATEGORY_NAME, rootName, "1.0", null, true, true);
748 ResourceMetadataData resourceData = new ResourceMetadataData();
749 resourceData.getMetadataDataDefinition().setUniqueId(rootResource.getUniqueId());
750 resourceData.getMetadataDataDefinition().setState(LifecycleStateEnum.CERTIFIED.name());
751 Either<ResourceMetadataData, TitanOperationStatus> updateNode = titanDao.updateNode(resourceData, ResourceMetadataData.class);
752 assertTrue(updateNode.isLeft());
754 Either<Resource, StorageOperationStatus> fetchRootResource = resourceOperation.getResource(rootResource.getUniqueId(), true);
756 String rootResourceJson = prettyGson.toJson(fetchRootResource.left().value());
757 log.debug(rootResourceJson);
759 // rollbackAndPrint();
762 // create software component
763 Resource softwareComponent = resourceOperationTest.createResource(USER_ID, CATEGORY_NAME, softwareCompName, "1.0", rootResource.getName(), true, true);
765 resourceData.getMetadataDataDefinition().setUniqueId(softwareComponent.getUniqueId());
766 resourceData.getMetadataDataDefinition().setState(LifecycleStateEnum.CERTIFIED.name());
767 updateNode = titanDao.updateNode(resourceData, ResourceMetadataData.class);
768 assertTrue(updateNode.isLeft());
770 // create compute component
771 Resource computeComponent = resourceOperationTest.createResource(USER_ID, CATEGORY_NAME, computeNodeName, "1.0", rootResource.getName(), true, true);
773 // rollbackAndPrint();
776 // Add capabilities to Compute Resource
777 CapabilityDefinition capabilty1 = addCapabilityToResource(capabilityTypeName1, reqName1, computeComponent);
778 CapabilityDefinition capabilty2 = addCapabilityToResource(capabilityTypeName2, reqName2, computeComponent);
780 // rollbackAndPrint();
782 // create requirement definition
784 Either<RequirementDefinition, StorageOperationStatus> addRequirementToResource1 = addRequirementToResource(capabilityTypeName1, reqName1, reqNodeName, reqRelationship, softwareComponent);
786 Either<RequirementDefinition, StorageOperationStatus> addRequirementToResource2 = addRequirementToResource(capabilityTypeName2, reqName2, reqNodeName, reqRelationship, softwareComponent);
788 // create my resource derived from software component
789 String MY_RESOURCE = "my-resource";
790 Resource resource = resourceOperationTest.createResource(USER_ID, CATEGORY_NAME, MY_RESOURCE, myResourceVersion, softwareComponent.getName(), true, true);
792 String serviceName = "myservice.1.0";
793 String requirementId1 = addRequirementToResource1.left().value().getUniqueId();
794 String requirementId2 = addRequirementToResource2.left().value().getUniqueId();
795 List<ComponentInstance> resInstances = buildServiceAndConnectBetweenResourceInstances(serviceName, resource, computeComponent, reqName1, false, capabilty1.getUniqueId(), requirementId1);
797 RequirementAndRelationshipPair relationPair = new RequirementAndRelationshipPair();
798 relationPair.setRequirement(reqName2);
799 relationPair.setCapabilityUid(capabilty2.getUniqueId());
800 relationPair.setRequirementUid(requirementId2);
801 relationPair.setCapabilityOwnerId(resInstances.get(1).getUniqueId());
802 relationPair.setRequirementOwnerId(resInstances.get(0).getUniqueId());
803 Either<RelationshipInstData, TitanOperationStatus> connectResourcesInService1 = resourceInstanceOperation.connectResourcesInService(serviceName, NodeTypeEnum.Service, resInstances.get(0).getUniqueId(), resInstances.get(1).getUniqueId(),
805 assertTrue("check associate resource instances succeed " + reqName2, connectResourcesInService1.isLeft());
807 // rollbackAndPrint();
809 PrintGraph printGraph = new PrintGraph();
810 String webGraph = printGraph.buildGraphForWebgraphWiz(titanDao.getGraph().left().value());
813 RequirementCapabilityRelDef reqCapDef = new RequirementCapabilityRelDef();
814 reqCapDef.setFromNode(resInstances.get(0).getUniqueId());
815 reqCapDef.setToNode(resInstances.get(1).getUniqueId());
817 relationPair.setRequirement(reqName1);
818 relationPair.setCapabilityUid(capabilty1.getUniqueId());
819 relationPair.setRequirementUid(requirementId1);
820 RelationshipImpl relationship = new RelationshipImpl();
821 relationship.setType(reqName1);
822 relationPair.setRelationships(relationship);
824 List<RequirementAndRelationshipPair> list = new ArrayList<>();
825 list.add(relationPair);
826 reqCapDef.setRelationships(list);
828 disconnectResourcesInService(serviceName, reqCapDef);
830 reqCapDef.getRelationships().clear();
832 RequirementAndRelationshipPair relationPair1 = new RequirementAndRelationshipPair();
833 relationPair1.setRequirement(reqName2);
834 relationPair1.setCapabilityUid(capabilty2.getUniqueId());
835 relationPair1.setRequirementUid(requirementId2);
836 relationPair1.setCapabilityOwnerId(resInstances.get(1).getUniqueId());
837 relationPair1.setRequirementOwnerId(resInstances.get(0).getUniqueId());
838 relationship.setType(reqName2);
839 relationPair1.setRelationships(relationship);
840 reqCapDef.getRelationships().add(relationPair1);
842 disconnectResourcesInService(serviceName, reqCapDef);
844 RequirementCapabilityRelDef relation = new RequirementCapabilityRelDef();
845 String fromResUid = resInstances.get(0).getUniqueId();
846 String toResUid = resInstances.get(1).getUniqueId();
847 relation.setFromNode(fromResUid);
848 relation.setToNode(toResUid);
849 List<RequirementAndRelationshipPair> relationships = new ArrayList<RequirementAndRelationshipPair>();
850 RequirementAndRelationshipPair immutablePair1 = new RequirementAndRelationshipPair(reqName1, null);
851 RequirementAndRelationshipPair immutablePair2 = new RequirementAndRelationshipPair(reqName2, null);
852 immutablePair1.setCapabilityUid(capabilty1.getUniqueId());
853 immutablePair1.setRequirementUid(addRequirementToResource1.left().value().getUniqueId());
854 immutablePair1.setRequirementOwnerId(resInstances.get(0).getUniqueId());
855 immutablePair1.setCapabilityOwnerId(resInstances.get(1).getUniqueId());
857 immutablePair2.setCapabilityUid(capabilty2.getUniqueId());
858 immutablePair2.setRequirementUid(addRequirementToResource2.left().value().getUniqueId());
859 immutablePair2.setRequirementOwnerId(resInstances.get(0).getUniqueId());
860 immutablePair2.setCapabilityOwnerId(resInstances.get(1).getUniqueId());
862 relationships.add(immutablePair1);
863 relationships.add(immutablePair2);
864 relation.setRelationships(relationships);
866 Either<RequirementCapabilityRelDef, StorageOperationStatus> associateResourceInstances = resourceInstanceOperation.associateResourceInstances(serviceName, NodeTypeEnum.Service, relation, true, false);
867 assertTrue("check return code after associating 2 requirements in one request", associateResourceInstances.isLeft());
868 RequirementCapabilityRelDef capabilityRelDef = associateResourceInstances.left().value();
869 String fromNode = capabilityRelDef.getFromNode();
870 assertEquals("check from node", resInstances.get(0).getUniqueId(), fromNode);
871 String toNode = capabilityRelDef.getToNode();
872 assertEquals("check to node", resInstances.get(1).getUniqueId(), toNode);
873 List<RequirementAndRelationshipPair> relationships2 = capabilityRelDef.getRelationships();
874 assertEquals("check number of relations", 2, relationships2.size());
876 for (RequirementAndRelationshipPair pair : relationships2) {
877 String key = pair.getRequirement();
878 RelationshipImpl relationshipImpl = pair.getRelationship();
879 if (key.equals(reqName1)) {
880 String type = relationshipImpl.getType();
881 assertEquals("Check relationship type name", reqRelationship, type);
882 } else if (key.equals(reqName2)) {
883 String type = relationshipImpl.getType();
884 assertEquals("Check relationship type name", reqRelationship, type);
886 assertTrue("requirement " + key + " was not found in the original request", false);
890 verifyGetAllResourceInstanceFromService(reqName1, reqName2, serviceName, fromResUid, toResUid);
892 List<ResourceMetadataData> resourcesPathList = new ArrayList<ResourceMetadataData>();
893 TitanOperationStatus findResourcesPathRecursively = resourceOperation.findResourcesPathRecursively(resource.getUniqueId(), resourcesPathList);
894 assertEquals("check returned status", TitanOperationStatus.OK, findResourcesPathRecursively);
895 assertEquals("check list size", 3, resourcesPathList.size());
897 TitanOperationStatus validateTheTargetResourceInstance = resourceInstanceOperation.validateTheTargetResourceInstance(MY_RESOURCE, resource.getUniqueId());
898 assertEquals("check resource name in the path", TitanOperationStatus.OK, validateTheTargetResourceInstance);
899 validateTheTargetResourceInstance = resourceInstanceOperation.validateTheTargetResourceInstance(softwareCompName, resource.getUniqueId());
900 assertEquals("check resource name in the path", TitanOperationStatus.OK, validateTheTargetResourceInstance);
902 validateTheTargetResourceInstance = resourceInstanceOperation.validateTheTargetResourceInstance(softwareCompName + "STAM", resource.getUniqueId());
903 assertEquals("check resource name not in the path", TitanOperationStatus.MATCH_NOT_FOUND, validateTheTargetResourceInstance);
905 Either<ComponentInstance, StorageOperationStatus> deleteResourceInstance = resourceInstanceOperation.deleteComponentInstance(NodeTypeEnum.Service, serviceName, toResUid, true);
906 assertTrue("check resource instance was deleted.", deleteResourceInstance.isLeft());
909 rollbackAndPrint(false);
910 compareGraphSize(numberOfVertices);
915 private void verifyGetAllResourceInstanceFromService(String reqName1, String reqName2, String serviceName, String fromResUid, String toResUid) {
917 Either<ImmutablePair<List<ComponentInstance>, List<RequirementCapabilityRelDef>>, StorageOperationStatus> allResourceInstances = resourceInstanceOperation.getAllComponentInstances(serviceName, NodeTypeEnum.Service, NodeTypeEnum.Resource,
919 // assertTrue("check return code after get all resource instances",
920 // associateResourceInstances.isLeft());
921 ImmutablePair<List<ComponentInstance>, List<RequirementCapabilityRelDef>> immutablePair = allResourceInstances.left().value();
922 List<ComponentInstance> nodes = immutablePair.getKey();
923 List<RequirementCapabilityRelDef> edges = immutablePair.getValue();
924 assertEquals("check 2 nodes returned", 2, nodes.size());
925 assertEquals("check one relation returned", 1, edges.size());
926 RequirementCapabilityRelDef requirementCapabilityRelDef = edges.get(0);
927 assertEquals("check from node", requirementCapabilityRelDef.getFromNode(), fromResUid);
928 requirementCapabilityRelDef.getToNode();
929 assertEquals("check to node", requirementCapabilityRelDef.getToNode(), toResUid);
930 int size = requirementCapabilityRelDef.getRelationships().size();
931 assertEquals("check number of relations", 2, size);
932 String req1 = requirementCapabilityRelDef.getRelationships().get(0).getRequirement();
933 String req2 = requirementCapabilityRelDef.getRelationships().get(1).getRequirement();
935 List<String> requirements = new ArrayList<String>();
936 requirements.add(req1);
937 requirements.add(req2);
939 assertTrue("check requirement returned " + reqName1, requirements.contains(reqName1));
940 assertTrue("check requirement returned " + reqName2, requirements.contains(reqName2));
942 String nodesStr = prettyGson.toJson(nodes);
943 String edgesStr = prettyGson.toJson(edges);
949 private Either<RequirementDefinition, StorageOperationStatus> addRequirementToResource(String capabilityTypeName1, String reqName1, String reqNodeName, String reqRelationship, Resource softwareComponent) {
950 RequirementDefinition reqDefinition1 = new RequirementDefinition();
951 reqDefinition1.setNode(reqNodeName);
952 reqDefinition1.setRelationship(reqRelationship);
953 reqDefinition1.setCapability(capabilityTypeName1);
954 // add requirement to software component
955 Either<RequirementDefinition, StorageOperationStatus> addRequirementToResource = requirementOperation.addRequirementToResource(reqName1, reqDefinition1, softwareComponent.getUniqueId(), true);
956 assertEquals("check requirement was added", true, addRequirementToResource.isLeft());
957 return addRequirementToResource;
960 private CapabilityDefinition addCapabilityToResource(String capabilityTypeName1, String reqName1, Resource computeComponent) {
961 CapabilityDefinition capabilityDefinition1 = new CapabilityDefinition();
962 capabilityDefinition1.setDescription("my capability");
963 capabilityDefinition1.setType(capabilityTypeName1);
964 List<String> validSourceTypes = new ArrayList<String>();
965 validSourceTypes.add("tosca.nodes.SC");
966 capabilityDefinition1.setValidSourceTypes(validSourceTypes);
967 Either<CapabilityDefinition, StorageOperationStatus> addCapability = capabilityOperation.addCapability(computeComponent.getUniqueId(), reqName1, capabilityDefinition1, true);
968 assertTrue("check capability created ", addCapability.isLeft());
969 return addCapability.left().value();
974 public void testConnectResourceInstancesCapabilityNameDiffFromReqName() {
976 PrintGraph printGraph1 = new PrintGraph();
977 int numberOfVertices = printGraph1.getNumberOfVertices(titanDao.getGraph().left().value());
981 String capabilityTypeName = CAPABILITY_2;
982 String reqName = "host";
983 String reqNodeName = "tosca.nodes.Compute2" + TEST_CLASS_NUMBER;
984 String rootName = "Root2" + TEST_CLASS_NUMBER;
985 String softwareCompName = "tosca.nodes.SoftwareComponent2" + TEST_CLASS_NUMBER;
986 String computeNodeName = reqNodeName;
987 String myResourceVersion = "4.0" + TEST_CLASS_NUMBER;
988 String reqRelationship = "myrelationship";
990 String DIFFERENT_CAPABILITY = "hostDiffernet";
992 // Create Capability type
993 CapabilityTypeOperationTest capabilityTypeOperationTest = new CapabilityTypeOperationTest();
994 capabilityTypeOperationTest.setOperations(titanDao, capabilityTypeOperation);
995 CapabilityTypeDefinition createCapabilityDef = capabilityTypeOperationTest.createCapability(capabilityTypeName);
997 ResourceOperationTest resourceOperationTest = new ResourceOperationTest();
998 resourceOperationTest.setOperations(titanDao, resourceOperation, propertyOperation);
1000 // create root resource
1001 Resource rootResource = resourceOperationTest.createResource(USER_ID, CATEGORY_NAME, rootName, "1.0", null, true, true);
1002 ResourceMetadataData resourceData = new ResourceMetadataData();
1003 resourceData.getMetadataDataDefinition().setUniqueId(rootResource.getUniqueId());
1004 resourceData.getMetadataDataDefinition().setState(LifecycleStateEnum.CERTIFIED.name());
1005 Either<ResourceMetadataData, TitanOperationStatus> updateNode = titanDao.updateNode(resourceData, ResourceMetadataData.class);
1006 assertTrue(updateNode.isLeft());
1008 Either<Resource, StorageOperationStatus> fetchRootResource = resourceOperation.getResource(rootResource.getUniqueId(), true);
1010 String rootResourceJson = prettyGson.toJson(fetchRootResource.left().value());
1011 log.debug(rootResourceJson);
1013 // create software component
1014 Resource softwareComponent = resourceOperationTest.createResource(USER_ID, CATEGORY_NAME, softwareCompName, "1.0", rootResource.getName(), true, true);
1016 resourceData.getMetadataDataDefinition().setUniqueId(softwareComponent.getUniqueId());
1017 resourceData.getMetadataDataDefinition().setState(LifecycleStateEnum.CERTIFIED.name());
1018 updateNode = titanDao.updateNode(resourceData, ResourceMetadataData.class);
1019 assertTrue(updateNode.isLeft());
1021 // create compute component
1022 Resource computeComponent = resourceOperationTest.createResource(USER_ID, CATEGORY_NAME, computeNodeName, "1.0", rootResource.getName(), true, true);
1024 CapabilityDefinition capabilty = addCapabilityToResource(capabilityTypeName, DIFFERENT_CAPABILITY, computeComponent);
1026 // create requirement definition
1028 Either<RequirementDefinition, StorageOperationStatus> addRequirementToResource = addRequirementToResource(capabilityTypeName, reqName, reqNodeName, reqRelationship, softwareComponent);
1030 String parentReqUniqId = addRequirementToResource.left().value().getUniqueId();
1032 // create my resource derived from software component
1033 Resource resource = resourceOperationTest.createResource(USER_ID, CATEGORY_NAME, "my-resource", myResourceVersion, softwareComponent.getName(), true, true);
1035 String serviceName = "myservice.1.0";
1036 List<ComponentInstance> resInstances = buildServiceAndConnectBetweenResourceInstances(serviceName, resource, computeComponent, "host", false, capabilty.getUniqueId(), parentReqUniqId);
1038 PrintGraph printGraph = new PrintGraph();
1039 String webGraph = printGraph.buildGraphForWebgraphWiz(titanDao.getGraph().left().value());
1043 compareGraphSize(numberOfVertices);
1050 public void testConnectResourceInstancesInvalidCapability() {
1052 PrintGraph printGraph1 = new PrintGraph();
1053 int numberOfVertices = printGraph1.getNumberOfVertices(titanDao.getGraph().left().value());
1057 String capabilityTypeName = CAPABILITY_2;
1058 String reqName = "host";
1059 String reqNodeName = "tosca.nodes.Compute2" + TEST_CLASS_NUMBER;
1060 String rootName = "Root2" + TEST_CLASS_NUMBER;
1061 String softwareCompName = "tosca.nodes.SoftwareComponent2" + TEST_CLASS_NUMBER;
1062 String computeNodeName = reqNodeName;
1063 String myResourceVersion = "4.0" + TEST_CLASS_NUMBER;
1064 String reqRelationship = "myrelationship";
1066 String capabilityTypeNameOther = CAPABILITY_2 + "othertype";
1068 String DIFFERENT_CAPABILITY = "hostDiffernet";
1070 // Create Capability type
1071 CapabilityTypeOperationTest capabilityTypeOperationTest = new CapabilityTypeOperationTest();
1072 capabilityTypeOperationTest.setOperations(titanDao, capabilityTypeOperation);
1073 CapabilityTypeDefinition createCapabilityDef = capabilityTypeOperationTest.createCapability(capabilityTypeName);
1075 CapabilityTypeDefinition createCapabilityDef2 = capabilityTypeOperationTest.createCapability(capabilityTypeNameOther);
1077 ResourceOperationTest resourceOperationTest = new ResourceOperationTest();
1078 resourceOperationTest.setOperations(titanDao, resourceOperation, propertyOperation);
1080 // create root resource
1081 Resource rootResource = resourceOperationTest.createResource(USER_ID, CATEGORY_NAME, rootName, "1.0", null, true, true);
1082 ResourceMetadataData resourceData = new ResourceMetadataData();
1083 resourceData.getMetadataDataDefinition().setUniqueId(rootResource.getUniqueId());
1084 resourceData.getMetadataDataDefinition().setState(LifecycleStateEnum.CERTIFIED.name());
1085 Either<ResourceMetadataData, TitanOperationStatus> updateNode = titanDao.updateNode(resourceData, ResourceMetadataData.class);
1086 assertTrue(updateNode.isLeft());
1088 Either<Resource, StorageOperationStatus> fetchRootResource = resourceOperation.getResource(rootResource.getUniqueId(), true);
1090 String rootResourceJson = prettyGson.toJson(fetchRootResource.left().value());
1091 log.debug(rootResourceJson);
1093 // create software component
1094 Resource softwareComponent = resourceOperationTest.createResource(USER_ID, CATEGORY_NAME, softwareCompName, "1.0", rootResource.getName(), true, true);
1096 resourceData.getMetadataDataDefinition().setUniqueId(softwareComponent.getUniqueId());
1097 resourceData.getMetadataDataDefinition().setState(LifecycleStateEnum.CERTIFIED.name());
1098 updateNode = titanDao.updateNode(resourceData, ResourceMetadataData.class);
1099 assertTrue(updateNode.isLeft());
1101 // create compute component
1102 Resource computeComponent = resourceOperationTest.createResource(USER_ID, CATEGORY_NAME, computeNodeName, "1.0", rootResource.getName(), true, true);
1104 addCapabilityToResource(capabilityTypeName, DIFFERENT_CAPABILITY, computeComponent);
1106 // create requirement definition
1108 Either<RequirementDefinition, StorageOperationStatus> addRequirementToResource = addRequirementToResource(capabilityTypeNameOther, reqName, reqNodeName, reqRelationship, softwareComponent);
1110 String parentReqUniqId = addRequirementToResource.left().value().getUniqueId();
1112 // create my resource derived from software component
1113 Resource resource = resourceOperationTest.createResource(USER_ID, CATEGORY_NAME, "my-resource", myResourceVersion, softwareComponent.getName(), true, true);
1115 String serviceName = "myservice.1.0";
1116 List<ComponentInstance> resInstances = buildServiceAndConnectBetweenResourceInstancesWithError(serviceName, resource, computeComponent, "host", false, TitanOperationStatus.ILLEGAL_ARGUMENT);
1118 PrintGraph printGraph = new PrintGraph();
1119 String webGraph = printGraph.buildGraphForWebgraphWiz(titanDao.getGraph().left().value());
1120 log.debug(webGraph);
1125 compareGraphSize(numberOfVertices);
1130 private void compareGraphSize(int numberOfVertices, Set<String> toRemoveFromSet) {
1131 PrintGraph printGraph2 = new PrintGraph();
1132 int numberOfVerticesCurr = printGraph2.getNumberOfVertices(titanDao.getGraph().left().value());
1134 Set<String> set = printGraph2.getVerticesSet(titanDao.getGraph().left().value());
1135 if (toRemoveFromSet != null) {
1136 set.removeAll(toRemoveFromSet);
1139 assertEquals("check all data deleted from graph " + set, numberOfVertices, numberOfVerticesCurr);
1142 private void compareGraphSize(int numberOfVertices) {
1143 PrintGraph printGraph2 = new PrintGraph();
1144 int numberOfVerticesCurr = printGraph2.getNumberOfVertices(titanDao.getGraph().left().value());
1146 assertEquals("check all data deleted from graph " + printGraph2.getVerticesSet(titanDao.getGraph().left().value()), numberOfVertices, numberOfVerticesCurr);
1151 public void testConnectResourceInstancesRequirementNotFound() {
1153 PrintGraph printGraph1 = new PrintGraph();
1154 int numberOfVertices = printGraph1.getNumberOfVertices(titanDao.getGraph().left().value());
1157 String capabilityTypeName = CAPABILITY_2;
1158 String reqName = "host";
1159 String reqNodeName = "tosca.nodes.Compute2" + TEST_CLASS_NUMBER;
1160 String rootName = "Root2" + TEST_CLASS_NUMBER;
1161 String softwareCompName = "tosca.nodes.SoftwareComponent2" + TEST_CLASS_NUMBER;
1162 String computeNodeName = reqNodeName;
1163 String myResourceVersion = "4.0" + TEST_CLASS_NUMBER;
1164 String reqRelationship = "myrelationship";
1166 String DIFFERENT_CAPABILITY = "hostDiffernet";
1168 // Create Capability type
1169 CapabilityTypeOperationTest capabilityTypeOperationTest = new CapabilityTypeOperationTest();
1170 capabilityTypeOperationTest.setOperations(titanDao, capabilityTypeOperation);
1171 CapabilityTypeDefinition createCapabilityDef = capabilityTypeOperationTest.createCapability(capabilityTypeName);
1173 ResourceOperationTest resourceOperationTest = new ResourceOperationTest();
1174 resourceOperationTest.setOperations(titanDao, resourceOperation, propertyOperation);
1176 // create root resource
1177 Resource rootResource = resourceOperationTest.createResource(USER_ID, CATEGORY_NAME, rootName, "1.0", null, true, true);
1178 ResourceMetadataData resourceData = new ResourceMetadataData();
1179 resourceData.getMetadataDataDefinition().setUniqueId(rootResource.getUniqueId());
1180 resourceData.getMetadataDataDefinition().setState(LifecycleStateEnum.CERTIFIED.name());
1181 Either<ResourceMetadataData, TitanOperationStatus> updateNode = titanDao.updateNode(resourceData, ResourceMetadataData.class);
1182 assertTrue(updateNode.isLeft());
1184 Either<Resource, StorageOperationStatus> fetchRootResource = resourceOperation.getResource(rootResource.getUniqueId(), true);
1186 String rootResourceJson = prettyGson.toJson(fetchRootResource.left().value());
1187 log.debug(rootResourceJson);
1189 // create software component
1190 Resource softwareComponent = resourceOperationTest.createResource(USER_ID, CATEGORY_NAME, softwareCompName, "1.0", rootResource.getName(), true, true);
1192 resourceData.getMetadataDataDefinition().setUniqueId(softwareComponent.getUniqueId());
1193 resourceData.getMetadataDataDefinition().setState(LifecycleStateEnum.CERTIFIED.name());
1194 updateNode = titanDao.updateNode(resourceData, ResourceMetadataData.class);
1195 assertTrue(updateNode.isLeft());
1197 // create compute component
1198 Resource computeComponent = resourceOperationTest.createResource(USER_ID, CATEGORY_NAME, computeNodeName, "1.0", rootResource.getName(), true, true);
1200 addCapabilityToResource(capabilityTypeName, reqName, computeComponent);
1202 // create requirement definition
1204 RequirementDefinition reqDefinition = new RequirementDefinition();
1205 reqDefinition.setNode(reqNodeName);
1206 reqDefinition.setRelationship(reqRelationship);
1207 reqDefinition.setCapability(capabilityTypeName);
1208 // add requirement to software component
1209 Either<RequirementDefinition, StorageOperationStatus> addRequirementToResource = requirementOperation.addRequirementToResource(reqName + "ssssssss", reqDefinition, softwareComponent.getUniqueId(), true);
1210 assertEquals("check requirement was added", true, addRequirementToResource.isLeft());
1212 String parentReqUniqId = addRequirementToResource.left().value().getUniqueId();
1214 // create my resource derived from software component
1215 Resource resource = resourceOperationTest.createResource(USER_ID, CATEGORY_NAME, "my-resource", myResourceVersion, softwareComponent.getName(), true, true);
1217 String serviceName = "myservice.1.0";
1218 List<ComponentInstance> resInstances = buildServiceAndConnectBetweenResourceInstancesWithError(serviceName, resource, computeComponent, "host", false, TitanOperationStatus.ILLEGAL_ARGUMENT);
1220 PrintGraph printGraph = new PrintGraph();
1221 String webGraph = printGraph.buildGraphForWebgraphWiz(titanDao.getGraph().left().value());
1222 log.debug(webGraph);
1225 titanDao.rollback();
1227 compareGraphSize(numberOfVertices);
1232 private void disconnectResourcesInService(String serviceName, RequirementCapabilityRelDef reqCapDef) {
1234 Either<List<RelationshipInstData>, TitanOperationStatus> disconnectResourcesInService = resourceInstanceOperation.disconnectResourcesInService(serviceName, NodeTypeEnum.Service, reqCapDef);
1235 assertTrue("check relatioship instance was deleted", disconnectResourcesInService.isLeft());
1237 disconnectResourcesInService = resourceInstanceOperation.disconnectResourcesInService(serviceName, NodeTypeEnum.Service, reqCapDef);
1238 assertTrue("check relatioship instance already was deleted", disconnectResourcesInService.isRight());
1239 assertEquals("check relatioship instance already was deleted. status NOT_FOUND", TitanOperationStatus.NOT_FOUND, disconnectResourcesInService.right().value());
1242 private List<ComponentInstance> buildServiceAndConnectBetweenResourceInstancesWithError(String serviceName, Resource resource, Resource computeComponent, String requirement, boolean ignoreCreatingService,
1243 TitanOperationStatus titanOperationStatus) {
1245 String serviceId = "myservice.1.0";
1247 if (false == ignoreCreatingService) {
1248 ServiceMetadataData createService = createService(serviceId);
1250 ComponentInstance myresourceInstance = buildResourceInstance(resource.getUniqueId(), "1", resource.getName());
1252 ComponentInstance computeInstance = buildResourceInstance(computeComponent.getUniqueId(), "2", computeComponent.getName());
1254 Either<ComponentInstance, TitanOperationStatus> myinstanceRes = resourceInstanceOperation.addComponentInstanceToContainerComponent(serviceId, NodeTypeEnum.Service, "1", true, myresourceInstance, NodeTypeEnum.Resource, false);
1255 assertTrue("check instance added to service", myinstanceRes.isLeft());
1256 ComponentInstance value1 = myinstanceRes.left().value();
1257 Either<ComponentInstance, TitanOperationStatus> computeInstTes = resourceInstanceOperation.addComponentInstanceToContainerComponent(serviceId, NodeTypeEnum.Service, "2", true, computeInstance, NodeTypeEnum.Resource, false);
1258 assertTrue("check instance added to service", computeInstTes.isLeft());
1259 ComponentInstance value2 = computeInstTes.left().value();
1261 RequirementAndRelationshipPair relationPair = new RequirementAndRelationshipPair();
1262 relationPair.setRequirement(requirement);
1264 Either<RelationshipInstData, TitanOperationStatus> connectResourcesInService = resourceInstanceOperation.connectResourcesInService(serviceId, NodeTypeEnum.Service, value1.getUniqueId(), value2.getUniqueId(), relationPair);
1266 assertTrue("check relation was not created", connectResourcesInService.isRight());
1267 assertEquals("check error code after connect resource instances failed", titanOperationStatus, connectResourcesInService.right().value());
1269 List<ComponentInstance> resInstances = new ArrayList<ComponentInstance>();
1270 resInstances.add(value1);
1272 return resInstances;
1276 private List<ComponentInstance> buildServiceAndConnectBetweenResourceInstances(String serviceName, Resource resource, Resource computeComponent, String requirement, boolean ignoreCreatingService, String capabilityId, String requirementId) {
1278 String serviceId = "myservice.1.0";
1280 if (false == ignoreCreatingService) {
1281 ServiceMetadataData createService = createService(serviceId);
1283 ComponentInstance myresourceInstance = buildResourceInstance(resource.getUniqueId(), "1", resource.getName());
1285 ComponentInstance computeInstance = buildResourceInstance(computeComponent.getUniqueId(), "2", computeComponent.getName());
1287 Either<ComponentInstance, TitanOperationStatus> myinstanceRes = resourceInstanceOperation.addComponentInstanceToContainerComponent(serviceId, NodeTypeEnum.Service, "1", true, myresourceInstance, NodeTypeEnum.Resource, false);
1288 assertTrue("check instance added to service", myinstanceRes.isLeft());
1289 ComponentInstance value1 = myinstanceRes.left().value();
1290 Either<ComponentInstance, TitanOperationStatus> computeInstTes = resourceInstanceOperation.addComponentInstanceToContainerComponent(serviceId, NodeTypeEnum.Service, "2", true, computeInstance, NodeTypeEnum.Resource, false);
1291 assertTrue("check instance added to service", computeInstTes.isLeft());
1292 ComponentInstance value2 = computeInstTes.left().value();
1293 RequirementAndRelationshipPair relationPair = new RequirementAndRelationshipPair();
1294 relationPair.setRequirement(requirement);
1296 relationPair.setCapabilityUid(capabilityId);
1297 relationPair.setRequirementUid(requirementId);
1298 relationPair.setRequirementOwnerId(value1.getUniqueId());
1299 relationPair.setCapabilityOwnerId(value2.getUniqueId());
1301 Either<RelationshipInstData, TitanOperationStatus> connectResourcesInService = resourceInstanceOperation.connectResourcesInService(serviceId, NodeTypeEnum.Service, value1.getUniqueId(), value2.getUniqueId(), relationPair);
1303 assertTrue("check relation created", connectResourcesInService.isLeft());
1305 List<ComponentInstance> resInstances = new ArrayList<ComponentInstance>();
1306 resInstances.add(value1);
1307 resInstances.add(value2);
1309 return resInstances;
1315 public void getAllResourceInstancesThree() {
1317 PrintGraph printGraph1 = new PrintGraph();
1318 int numberOfVertices = printGraph1.getNumberOfVertices(titanDao.getGraph().left().value());
1321 Set<String> vertexSetBeforeMethod = printGraph1.getVerticesSet(titanDao.getGraph().left().value());
1323 String capabilityTypeName = CAPABILITY_2;
1324 String reqName = "host";
1325 String reqNodeName = "tosca.nodes.Compute2" + TEST_CLASS_NUMBER;
1326 String rootName = "Root2" + TEST_CLASS_NUMBER;
1327 String softwareCompName = "tosca.nodes.SoftwareComponent2" + TEST_CLASS_NUMBER;
1328 String computeNodeName = reqNodeName;
1329 String myResourceVersion = "4.0" + TEST_CLASS_NUMBER;
1330 String reqRelationship = "myrelationship";
1332 // Create Capability type
1333 CapabilityTypeOperationTest capabilityTypeOperationTest = new CapabilityTypeOperationTest();
1334 capabilityTypeOperationTest.setOperations(titanDao, capabilityTypeOperation);
1335 CapabilityTypeDefinition createCapabilityDef = capabilityTypeOperationTest.createCapability(capabilityTypeName);
1337 ResourceOperationTest resourceOperationTest = new ResourceOperationTest();
1338 resourceOperationTest.setOperations(titanDao, resourceOperation, propertyOperation);
1340 // create root resource
1341 Resource rootResource = resourceOperationTest.createResource(USER_ID, CATEGORY_NAME, rootName, "1.0", null, true, true);
1342 ResourceMetadataData resourceData = new ResourceMetadataData();
1343 resourceData.getMetadataDataDefinition().setUniqueId(rootResource.getUniqueId());
1344 resourceData.getMetadataDataDefinition().setState(LifecycleStateEnum.CERTIFIED.name());
1345 Either<ResourceMetadataData, TitanOperationStatus> updateNode = titanDao.updateNode(resourceData, ResourceMetadataData.class);
1346 assertTrue(updateNode.isLeft());
1348 Either<Resource, StorageOperationStatus> fetchRootResource = resourceOperation.getResource(rootResource.getUniqueId(), true);
1350 String rootResourceJson = prettyGson.toJson(fetchRootResource.left().value());
1351 log.debug(rootResourceJson);
1353 // create software component
1354 Resource softwareComponent = resourceOperationTest.createResource(USER_ID, CATEGORY_NAME, softwareCompName, "1.0", rootResource.getName(), true, true);
1356 resourceData.getMetadataDataDefinition().setUniqueId(softwareComponent.getUniqueId());
1357 resourceData.getMetadataDataDefinition().setState(LifecycleStateEnum.CERTIFIED.name());
1358 updateNode = titanDao.updateNode(resourceData, ResourceMetadataData.class);
1359 assertTrue(updateNode.isLeft());
1361 // create compute component
1362 Resource computeComponent = resourceOperationTest.createResource(USER_ID, CATEGORY_NAME, computeNodeName, "1.0", rootResource.getName(), true, true);
1364 // rollbackAndPrint();
1366 // Add capabilities to Compute Resource
1367 CapabilityDefinition capability = addCapabilityToResource(capabilityTypeName, "host", computeComponent);
1369 // create requirement definition
1371 Either<RequirementDefinition, StorageOperationStatus> addRequirementToResource = addRequirementToResource(capabilityTypeName, reqName, reqNodeName, reqRelationship, softwareComponent);
1373 String parentReqUniqId = addRequirementToResource.left().value().getUniqueId();
1375 // create my resource derived from software component
1376 Resource resource = resourceOperationTest.createResource(USER_ID, CATEGORY_NAME, "my-resource", myResourceVersion, softwareComponent.getName(), true, true);
1378 String serviceId = "myservice.1.0";
1380 ServiceMetadataData createService = createService(serviceId);
1382 Either<ImmutablePair<List<ComponentInstance>, List<RequirementCapabilityRelDef>>, StorageOperationStatus> allResourceInstances = resourceInstanceOperation.getAllComponentInstances(serviceId, NodeTypeEnum.Service, NodeTypeEnum.Resource,
1384 assertTrue("check NOT_FOUND is returned", allResourceInstances.isRight());
1385 assertEquals("check NOT_FOUND is returned", allResourceInstances.right().value(), StorageOperationStatus.NOT_FOUND);
1387 ComponentInstance myresourceInstance = buildResourceInstance(resource.getUniqueId(), "1", "my-resource");
1388 myresourceInstance.setName("my-resource");
1390 ComponentInstance computeInstance1 = buildResourceInstance(computeComponent.getUniqueId(), "2", "tosca.nodes.Compute2");
1392 Either<ComponentInstance, TitanOperationStatus> myinstanceRes = resourceInstanceOperation.addComponentInstanceToContainerComponent(serviceId, NodeTypeEnum.Service, "1", true, myresourceInstance, NodeTypeEnum.Resource, false);
1393 assertTrue("check instance added to service", myinstanceRes.isLeft());
1394 ComponentInstance value1 = myinstanceRes.left().value();
1396 allResourceInstances = resourceInstanceOperation.getAllComponentInstances(serviceId, NodeTypeEnum.Service, NodeTypeEnum.Resource, true);
1397 assertTrue("check resource instances found", allResourceInstances.isLeft());
1398 ImmutablePair<List<ComponentInstance>, List<RequirementCapabilityRelDef>> immutablePair = allResourceInstances.left().value();
1399 List<ComponentInstance> nodes = immutablePair.getKey();
1400 List<RequirementCapabilityRelDef> edges = immutablePair.getValue();
1402 assertEquals("check resource instances size", 1, nodes.size());
1403 assertEquals("check resource instances size", 0, edges.size());
1405 Either<ComponentInstance, TitanOperationStatus> computeInstTes = resourceInstanceOperation.addComponentInstanceToContainerComponent(serviceId, NodeTypeEnum.Service, "2", true, computeInstance1, NodeTypeEnum.Resource, false);
1406 assertTrue("check instance added to service", computeInstTes.isLeft());
1407 ComponentInstance value2 = computeInstTes.left().value();
1409 allResourceInstances = resourceInstanceOperation.getAllComponentInstances(serviceId, NodeTypeEnum.Service, NodeTypeEnum.Resource, true);
1410 assertTrue("check resource instances found", allResourceInstances.isLeft());
1411 immutablePair = allResourceInstances.left().value();
1412 nodes = immutablePair.getKey();
1413 edges = immutablePair.getValue();
1415 assertEquals("check resource instances size", 2, nodes.size());
1416 assertEquals("check resource instances size", 0, edges.size());
1418 String requirement = "host";
1419 RequirementAndRelationshipPair relationPair = new RequirementAndRelationshipPair();
1420 relationPair.setRequirement(requirement);
1421 relationPair.setCapabilityUid(capability.getUniqueId());
1422 relationPair.setRequirementUid(addRequirementToResource.left().value().getUniqueId());
1423 relationPair.setRequirementOwnerId(value1.getUniqueId());
1424 relationPair.setCapabilityOwnerId(value2.getUniqueId());
1426 Either<RelationshipInstData, TitanOperationStatus> connectResourcesInService = resourceInstanceOperation.connectResourcesInService(serviceId, NodeTypeEnum.Service, value1.getUniqueId(), value2.getUniqueId(), relationPair);
1428 assertTrue("check relation created", connectResourcesInService.isLeft());
1430 allResourceInstances = resourceInstanceOperation.getAllComponentInstances(serviceId, NodeTypeEnum.Service, NodeTypeEnum.Resource, true);
1431 assertTrue("check resource instances found", allResourceInstances.isLeft());
1432 immutablePair = allResourceInstances.left().value();
1433 nodes = immutablePair.getKey();
1434 edges = immutablePair.getValue();
1436 assertEquals("check resource instances size", 2, nodes.size());
1437 assertEquals("check resource instances size", 1, edges.size());
1439 List<ComponentInstance> resInstances2 = new ArrayList<ComponentInstance>();
1440 resInstances2.add(value1);
1441 resInstances2.add(value2);
1443 ComponentInstance myresourceInstance2 = buildResourceInstance(resource.getUniqueId(), "1", "myresource2");
1445 Either<ComponentInstance, TitanOperationStatus> newResource = resourceInstanceOperation.addComponentInstanceToContainerComponent(serviceId, NodeTypeEnum.Service, "3", true, myresourceInstance2, NodeTypeEnum.Resource, false);
1447 assertTrue("added resource instance successfully", newResource.isLeft());
1449 relationPair.setRequirement(requirement);
1450 relationPair.setRequirementOwnerId(newResource.left().value().getUniqueId());
1452 Either<RelationshipInstData, TitanOperationStatus> connectResourcesInService2 = resourceInstanceOperation.connectResourcesInService(serviceId, NodeTypeEnum.Service, newResource.left().value().getUniqueId(), value2.getUniqueId(),
1454 assertTrue("check resource instance was added to service", connectResourcesInService2.isLeft());
1456 allResourceInstances = resourceInstanceOperation.getAllComponentInstances(serviceId, NodeTypeEnum.Service, NodeTypeEnum.Resource, true);
1457 assertTrue("check resource instances found", allResourceInstances.isLeft());
1458 immutablePair = allResourceInstances.left().value();
1459 nodes = immutablePair.getKey();
1460 edges = immutablePair.getValue();
1462 assertEquals("check resource instances size", 3, nodes.size());
1463 assertEquals("check resource instances size", 2, edges.size());
1465 Either<List<ComponentInstance>, TitanOperationStatus> deleteAllResourceInstancesOfService = resourceInstanceOperation.deleteAllComponentInstancesInternal(serviceId, NodeTypeEnum.Service);
1466 assertTrue("check resource instances was deleted.", deleteAllResourceInstancesOfService.isLeft());
1467 assertEquals("check number of deleted resource instances.", 3, deleteAllResourceInstancesOfService.left().value().size());
1469 Either<List<RelationshipInstData>, TitanOperationStatus> allRelatinshipInst = titanDao.getAll(NodeTypeEnum.RelationshipInst, RelationshipInstData.class);
1470 assertTrue("allRelatinshipInst is empty", allRelatinshipInst.isRight());
1471 assertEquals("allRelatinshipInst result is NOT_FOUND", TitanOperationStatus.NOT_FOUND, allRelatinshipInst.right().value());
1473 Either<Resource, StorageOperationStatus> deleteComputeResource = resourceOperation.deleteResource(computeComponent.getUniqueId(), true);
1474 assertTrue("delete compute resource succeed", deleteComputeResource.isLeft());
1476 Either<Resource, StorageOperationStatus> deleteSCResource = resourceOperation.deleteResource(softwareComponent.getUniqueId(), true);
1477 assertTrue("delete software component resource succeed", deleteSCResource.isLeft());
1479 Either<Resource, StorageOperationStatus> deleteMyResource = resourceOperation.deleteResource(resource.getUniqueId(), true);
1480 assertTrue("delete my resource succeed", deleteMyResource.isLeft());
1482 Either<Resource, StorageOperationStatus> rootResourceDeleted = resourceOperation.deleteResource(rootResource.getUniqueId(), true);
1483 assertTrue("delete root resource succeed", rootResourceDeleted.isLeft());
1485 Set<String> vertexSetAfterDelete = printGraph1.getVerticesSet(titanDao.getGraph().left().value());
1487 vertexSetAfterDelete.removeAll(vertexSetBeforeMethod);
1489 log.debug("vertexSetAfterDelete={}", vertexSetAfterDelete);
1490 log.debug("vertexSetAfterDelete size={}", vertexSetAfterDelete.size());
1492 // int numberOfVerticesAfterOperation =
1493 // printGraph1.getNumberOfVertices(titanDao.getGraph().left().value());
1494 // System.out.println(numberOfVerticesAfterOperation);
1495 // 6 - service, 2 tags, capability + 2 parameters
1496 // compareGraphSize(numberOfVertices + 6, vertexSetBeforeMethod);
1499 rollbackAndPrint(false);
1500 compareGraphSize(numberOfVertices);
1501 // printGraph1.printGraphVertices(titanDao.getGraph().left().value());
1506 public void testCreateRootResource() {
1508 String name = "tosca.nodes.Root";
1510 String state = LifecycleStateEnum.CERTIFIED.name();
1512 ResourceMetadataData resourceData1 = new ResourceMetadataData();
1513 resourceData1.getMetadataDataDefinition().setUniqueId(UniqueIdBuilder.buildResourceUniqueId());
1514 resourceData1.getMetadataDataDefinition().setName(name);
1515 resourceData1.getMetadataDataDefinition().setState(state);
1516 resourceData1.getMetadataDataDefinition().setHighestVersion(true);
1517 resourceData1.getMetadataDataDefinition().setContactId("contactId");
1518 Either<ResourceMetadataData, TitanOperationStatus> createNode1 = titanDao.createNode(resourceData1, ResourceMetadataData.class);
1520 log.debug("{}", createNode1);
1525 public void testMultiResourceCertified() {
1526 boolean create = true;
1527 String name = "myresource7";
1530 String state = LifecycleStateEnum.CERTIFIED.name();
1531 boolean isHighestVersion = true;
1533 ResourceMetadataData resourceData1 = new ResourceMetadataData();
1534 resourceData1.getMetadataDataDefinition().setUniqueId(name + "." + "1.0");
1535 resourceData1.getMetadataDataDefinition().setName(name);
1536 resourceData1.getMetadataDataDefinition().setState(state);
1537 resourceData1.getMetadataDataDefinition().setHighestVersion(true);
1538 resourceData1.getMetadataDataDefinition().setContactId("contactId");
1539 Either<ResourceMetadataData, TitanOperationStatus> createNode1 = titanDao.createNode(resourceData1, ResourceMetadataData.class);
1541 log.debug("{}", createNode1);
1545 // resourceData1.setUniqueId(name + "." + "2.0");
1546 // resourceData1.setHighestVersion(true);
1547 // resourceData1.setContactId("contactId");
1549 // Either<ResourceData, TitanOperationStatus> createNode2 = titanDao
1550 // .createNode(resourceData1, ResourceData.class);
1551 // System.out.println(createNode2);
1553 // titanDao.commit();
1555 // resourceData1.setHighestVersion(false);
1556 resourceData1.getMetadataDataDefinition().setContactId("222contactId222");
1557 Either<ResourceMetadataData, TitanOperationStatus> updateNode = titanDao.updateNode(resourceData1, ResourceMetadataData.class);
1561 // TitanGraph titanGraph = titanDao.getGraph().left().value();
1562 // Iterable<Result<Vertex>> vertices =
1563 // titanGraph.indexQuery("highestVersion",
1564 // "v.highestVersion:true").vertices();
1565 // for (Result<Vertex> vertex : vertices) {
1566 // Vertex element = vertex.getElement();
1567 // System.out.println( ElementHelper.getProperties(element));
1572 Either<List<ResourceMetadataData>, TitanOperationStatus> byCriteria = searchForResource(name);
1574 log.debug("{}", byCriteria.left().value().size());
1576 byCriteria = searchForResource(name);
1578 log.debug("{}", byCriteria.left().value().size());
1582 private Either<List<ResourceMetadataData>, TitanOperationStatus> searchForResource(String name) {
1583 Map<String, Object> propertiesToMatch = new HashMap<String, Object>();
1584 propertiesToMatch.put(GraphPropertiesDictionary.STATE.getProperty(), LifecycleStateEnum.CERTIFIED.name());
1585 // propertiesToMatch.put(GraphPropertiesDictionary.IS_ABSTRACT.getProperty(),
1587 propertiesToMatch.put(GraphPropertiesDictionary.NAME.getProperty(), name);
1588 propertiesToMatch.put(GraphPropertiesDictionary.CONTACT_ID.getProperty(), "contactId");
1589 // propertiesToMatch.put(GraphPropertiesDictionary.IS_HIGHEST_VERSION.getProperty(),
1591 Either<List<ResourceMetadataData>, TitanOperationStatus> byCriteria = titanDao.getByCriteria(NodeTypeEnum.Resource, propertiesToMatch, ResourceMetadataData.class);
1596 public void testCreateResourceInstanceTwice() {
1598 PrintGraph printGraph1 = new PrintGraph();
1599 int numberOfVertices = printGraph1.getNumberOfVertices(titanDao.getGraph().left().value());
1602 String capabilityTypeName = CAPABILITY_2;
1603 String reqName = "host";
1604 String reqNodeName = "tosca.nodes.Compute2" + TEST_CLASS_NUMBER;
1605 String rootName = "Root2" + TEST_CLASS_NUMBER;
1606 String softwareCompName = "tosca.nodes.SoftwareComponent2" + TEST_CLASS_NUMBER;
1607 String computeNodeName = reqNodeName;
1608 String myResourceVersion = "4.0" + TEST_CLASS_NUMBER;
1609 String reqRelationship = "myrelationship";
1611 ResourceOperationTest resourceOperationTest = new ResourceOperationTest();
1612 resourceOperationTest.setOperations(titanDao, resourceOperation, propertyOperation);
1614 // create root resource
1615 Resource rootResource = resourceOperationTest.createResource(USER_ID, CATEGORY_NAME, rootName, "1.0", null, true, true);
1616 ResourceMetadataData resourceData = new ResourceMetadataData();
1617 resourceData.getMetadataDataDefinition().setUniqueId(rootResource.getUniqueId());
1618 resourceData.getMetadataDataDefinition().setState(LifecycleStateEnum.CERTIFIED.name());
1619 Either<ResourceMetadataData, TitanOperationStatus> updateNode = titanDao.updateNode(resourceData, ResourceMetadataData.class);
1620 assertTrue(updateNode.isLeft());
1622 Either<Resource, StorageOperationStatus> fetchRootResource = resourceOperation.getResource(rootResource.getUniqueId(), true);
1624 // create software component
1625 Resource softwareComponent = resourceOperationTest.createResource(USER_ID, CATEGORY_NAME, softwareCompName, "1.0", rootResource.getName(), true, true);
1627 resourceData.getMetadataDataDefinition().setUniqueId(softwareComponent.getUniqueId());
1628 resourceData.getMetadataDataDefinition().setState(LifecycleStateEnum.CERTIFIED.name());
1629 updateNode = titanDao.updateNode(resourceData, ResourceMetadataData.class);
1630 assertTrue(updateNode.isLeft());
1632 ComponentInstance myresourceInstance = buildResourceInstance(softwareComponent.getUniqueId(), "1", softwareCompName);
1634 String serviceName = "myservice.1.0";
1635 ServiceMetadataData createService = createService(serviceName);
1636 Either<ComponentInstance, StorageOperationStatus> myinstanceRes1 = resourceInstanceOperation.createComponentInstance(serviceName, NodeTypeEnum.Service, "1", myresourceInstance, NodeTypeEnum.Resource, true);
1637 assertTrue("check resource instance was created", myinstanceRes1.isLeft());
1639 Either<ComponentInstance, StorageOperationStatus> myinstanceRes2 = resourceInstanceOperation.createComponentInstance(serviceName, NodeTypeEnum.Service, "1", myresourceInstance, NodeTypeEnum.Resource, true);
1640 assertTrue("check resource instance was not created", myinstanceRes2.isRight());
1641 assertEquals("check error code", StorageOperationStatus.SCHEMA_VIOLATION, myinstanceRes2.right().value());
1643 Either<ComponentInstance, StorageOperationStatus> deleteResourceInstance = resourceInstanceOperation.deleteComponentInstance(NodeTypeEnum.Service, serviceName, myinstanceRes1.left().value().getUniqueId(), true);
1644 assertTrue("check resource instance was deleted", deleteResourceInstance.isLeft());
1646 deleteResourceInstance = resourceInstanceOperation.deleteComponentInstance(NodeTypeEnum.Service, serviceName, myinstanceRes1.left().value().getUniqueId(), true);
1647 assertTrue("check resource instance was not deleted", deleteResourceInstance.isRight());
1648 assertEquals("check resource instance was not deleted", StorageOperationStatus.NOT_FOUND, deleteResourceInstance.right().value());
1651 rollbackAndPrint(false);
1652 compareGraphSize(numberOfVertices);
1659 public void testConnectResourceInstancesTwice() {
1661 PrintGraph printGraph1 = new PrintGraph();
1662 int numberOfVertices = printGraph1.getNumberOfVertices(titanDao.getGraph().left().value());
1666 String capabilityTypeName1 = CAPABILITY_1;
1667 String capabilityTypeName2 = CAPABILITY_2;
1668 String reqName1 = "host1";
1669 String reqName2 = "host2";
1670 String reqNodeName = "tosca.nodes.Compute2" + TEST_CLASS_NUMBER;
1671 String rootName = "Root2" + TEST_CLASS_NUMBER;
1672 String softwareCompName = "tosca.nodes.SoftwareComponent2" + TEST_CLASS_NUMBER;
1673 String computeNodeName = reqNodeName;
1674 String myResourceVersion = "4.0" + TEST_CLASS_NUMBER;
1675 String reqRelationship = "myrelationship";
1677 // Create Capability type
1678 CapabilityTypeOperationTest capabilityTypeOperationTest = new CapabilityTypeOperationTest();
1679 capabilityTypeOperationTest.setOperations(titanDao, capabilityTypeOperation);
1680 CapabilityTypeDefinition createCapabilityDef1 = capabilityTypeOperationTest.createCapability(capabilityTypeName1);
1681 CapabilityTypeDefinition createCapabilityDef2 = capabilityTypeOperationTest.createCapability(capabilityTypeName2);
1683 ResourceOperationTest resourceOperationTest = new ResourceOperationTest();
1684 resourceOperationTest.setOperations(titanDao, resourceOperation, propertyOperation);
1686 // create root resource
1687 Resource rootResource = resourceOperationTest.createResource(USER_ID, CATEGORY_NAME, rootName, "1.0", null, true, true);
1689 ResourceMetadataData resourceData = new ResourceMetadataData();
1690 resourceData.getMetadataDataDefinition().setUniqueId(rootResource.getUniqueId());
1691 resourceData.getMetadataDataDefinition().setState(LifecycleStateEnum.CERTIFIED.name());
1692 Either<ResourceMetadataData, TitanOperationStatus> updateNode = titanDao.updateNode(resourceData, ResourceMetadataData.class);
1693 assertTrue(updateNode.isLeft());
1695 Either<Resource, StorageOperationStatus> fetchRootResource = resourceOperation.getResource(rootResource.getUniqueId(), true);
1697 String rootResourceJson = prettyGson.toJson(fetchRootResource.left().value());
1698 log.debug(rootResourceJson);
1700 // create software component
1701 Resource softwareComponent = resourceOperationTest.createResource(USER_ID, CATEGORY_NAME, softwareCompName, "1.0", rootResource.getName(), true, true);
1703 resourceData.getMetadataDataDefinition().setUniqueId(softwareComponent.getUniqueId());
1704 resourceData.getMetadataDataDefinition().setState(LifecycleStateEnum.CERTIFIED.name());
1705 updateNode = titanDao.updateNode(resourceData, ResourceMetadataData.class);
1706 assertTrue(updateNode.isLeft());
1708 // create compute component
1709 Resource computeComponent = resourceOperationTest.createResource(USER_ID, CATEGORY_NAME, computeNodeName, "1.0", rootResource.getName(), true, true);
1711 // Add capabilities to Compute Resource
1712 CapabilityDefinition capabilty1 = addCapabilityToResource(capabilityTypeName1, reqName1, computeComponent);
1713 CapabilityDefinition capabilty2 = addCapabilityToResource(capabilityTypeName2, reqName2, computeComponent);
1715 // rollbackAndPrint();
1717 // create requirement definition
1719 Either<RequirementDefinition, StorageOperationStatus> addRequirementToResource = addRequirementToResource(capabilityTypeName1, reqName1, reqNodeName, reqRelationship, softwareComponent);
1721 String parentReqUniqId = addRequirementToResource.left().value().getUniqueId();
1723 // create my resource derived from software component
1724 Resource resource = resourceOperationTest.createResource(USER_ID, CATEGORY_NAME, "my-resource", myResourceVersion, softwareComponent.getName(), true, true);
1726 String serviceId = "myservice.1.0";
1728 ServiceMetadataData createService = createService(serviceId);
1729 ComponentInstance myresourceInstance = buildResourceInstance(resource.getUniqueId(), "1", "my-resource");
1731 ComponentInstance computeInstance = buildResourceInstance(computeComponent.getUniqueId(), "2", computeNodeName);
1733 Either<ComponentInstance, TitanOperationStatus> myinstanceRes = resourceInstanceOperation.addComponentInstanceToContainerComponent(serviceId, NodeTypeEnum.Service, "1", true, myresourceInstance, NodeTypeEnum.Resource, false);
1734 assertTrue("check instance added to service", myinstanceRes.isLeft());
1735 ComponentInstance value1 = myinstanceRes.left().value();
1736 Either<ComponentInstance, TitanOperationStatus> computeInstTes = resourceInstanceOperation.addComponentInstanceToContainerComponent(serviceId, NodeTypeEnum.Service, "2", true, computeInstance, NodeTypeEnum.Resource, false);
1737 assertTrue("check instance added to service", computeInstTes.isLeft());
1738 ComponentInstance value2 = computeInstTes.left().value();
1740 RequirementCapabilityRelDef relation = new RequirementCapabilityRelDef();
1741 String fromResUid = value1.getUniqueId();
1742 String toResUid = value2.getUniqueId();
1743 relation.setFromNode(fromResUid);
1744 relation.setToNode(toResUid);
1745 List<RequirementAndRelationshipPair> relationships = new ArrayList<RequirementAndRelationshipPair>();
1746 RequirementAndRelationshipPair immutablePair1 = new RequirementAndRelationshipPair(reqName1, null);
1747 immutablePair1.setCapabilityUid(capabilty1.getUniqueId());
1748 immutablePair1.setRequirementUid(parentReqUniqId);
1749 immutablePair1.setRequirementOwnerId(fromResUid);
1750 immutablePair1.setCapabilityOwnerId(toResUid);
1751 relationships.add(immutablePair1);
1753 relation.setRelationships(relationships);
1755 Either<RequirementCapabilityRelDef, StorageOperationStatus> connectResourcesInService = resourceInstanceOperation.associateResourceInstances(serviceId, NodeTypeEnum.Service, relation, true, false);
1756 assertTrue("check association succeed", connectResourcesInService.isLeft());
1758 relationships.clear();
1759 RequirementAndRelationshipPair immutablePair2 = new RequirementAndRelationshipPair(reqName2, null);
1760 immutablePair2.setCapabilityUid(capabilty2.getUniqueId());
1761 immutablePair2.setRequirementUid(parentReqUniqId);
1762 relationships.add(immutablePair2);
1764 RequirementCapabilityRelDef firstRelation = connectResourcesInService.left().value();
1765 connectResourcesInService = resourceInstanceOperation.associateResourceInstances(serviceId, NodeTypeEnum.Service, relation, true, false);
1766 assertTrue("check association succeed", connectResourcesInService.isRight());
1767 assertEquals("check association failed", StorageOperationStatus.MATCH_NOT_FOUND, connectResourcesInService.right().value());
1769 Either<RequirementCapabilityRelDef, StorageOperationStatus> disconnectResourcesInService = resourceInstanceOperation.dissociateResourceInstances(serviceId, NodeTypeEnum.Service, firstRelation, true);
1771 assertTrue("check dissociation succeed", disconnectResourcesInService.isLeft());
1773 disconnectResourcesInService = resourceInstanceOperation.dissociateResourceInstances(serviceId, NodeTypeEnum.Service, relation, true);
1775 assertTrue("check dissociation failed", disconnectResourcesInService.isRight());
1776 assertEquals("check association failed", StorageOperationStatus.NOT_FOUND, disconnectResourcesInService.right().value());
1779 compareGraphSize(numberOfVertices);
1784 private Resource createComputeWithCapability(String capabilityTypeName, String computeNodeName, ResourceOperationTest resourceOperationTest, Resource rootResource) {
1785 // create compute component
1786 // String id = UniqueIdBuilder.buildResourceUniqueId(computeNodeName,
1788 // if (resourceOperation.getResource(id).isLeft()){
1789 // resourceOperation.deleteResource(id);
1791 Either<List<Resource>, StorageOperationStatus> oldResource = resourceOperation.getResourceByNameAndVersion(computeNodeName, "1.0", false);
1792 if (oldResource.isLeft()) {
1793 for (Resource old : oldResource.left().value()) {
1794 if (old.getResourceType().equals(ResourceTypeEnum.VFC)) {
1795 resourceOperation.deleteResource(old.getUniqueId());
1801 Resource computeComponent = resourceOperationTest.createResource(USER_ID, CATEGORY_NAME, computeNodeName, "1.0", rootResource.getName(), true, true);
1803 // rollbackAndPrint();
1805 // Add capabilities to Compute Resource
1806 addCapabilityToResource(capabilityTypeName, "host", computeComponent);
1807 return resourceOperation.getResource(computeComponent.getUniqueId()).left().value();
1810 private Resource createSoftwareComponentWithReq(String softwareCompName, ResourceOperationTest resourceOperationTest, Resource rootResource, String capabilityTypeName, String reqName, String reqRelationship, String reqNodeName) {
1811 Either<ResourceMetadataData, TitanOperationStatus> updateNode;
1812 ResourceMetadataData resourceData = new ResourceMetadataData();
1813 // create software component
1814 // String id = UniqueIdBuilder.buildResourceUniqueId(softwareCompName,
1816 // if (resourceOperation.getResource(id).isLeft()){
1817 // resourceOperation.deleteResource(id);
1819 Either<List<Resource>, StorageOperationStatus> oldResource = resourceOperation.getResourceByNameAndVersion(softwareCompName, "1.0", false);
1820 if (oldResource.isLeft()) {
1821 if (oldResource.isLeft()) {
1822 for (Resource old : oldResource.left().value()) {
1823 if (old.getResourceType().equals(ResourceTypeEnum.VFC)) {
1824 resourceOperation.deleteResource(old.getUniqueId());
1831 Resource softwareComponent = resourceOperationTest.createResource(USER_ID, CATEGORY_NAME, softwareCompName, "1.0", rootResource.getName(), true, true);
1833 resourceData.getMetadataDataDefinition().setUniqueId(softwareComponent.getUniqueId());
1834 resourceData.getMetadataDataDefinition().setState(LifecycleStateEnum.CERTIFIED.name());
1835 updateNode = titanDao.updateNode(resourceData, ResourceMetadataData.class);
1836 assertTrue(updateNode.isLeft());
1838 Either<RequirementDefinition, StorageOperationStatus> addRequirementToResource = addRequirementToResource(capabilityTypeName, reqName, reqNodeName, reqRelationship, softwareComponent);
1840 String parentReqUniqId = addRequirementToResource.left().value().getUniqueId();
1842 return resourceOperation.getResource(softwareComponent.getUniqueId()).left().value();
1845 private Resource createRootResource(String rootName, ResourceOperationTest resourceOperationTest) {
1846 // create root resource
1847 // String rootId = UniqueIdBuilder.buildResourceUniqueId(rootName,
1849 Either<List<Resource>, StorageOperationStatus> oldResource = resourceOperation.getResourceByNameAndVersion(rootName, "1.0", false);
1850 if (oldResource.isLeft()) {
1851 for (Resource old : oldResource.left().value()) {
1852 if (old.getResourceType().equals(ResourceTypeEnum.VFC)) {
1853 resourceOperation.deleteResource(old.getUniqueId());
1858 Resource rootResource = resourceOperationTest.createResource(USER_ID, CATEGORY_NAME, rootName, "1.0", null, true, true);
1859 ResourceMetadataData rootResourceData = new ResourceMetadataData();
1860 rootResourceData.getMetadataDataDefinition().setUniqueId(rootResource.getUniqueId());
1861 rootResourceData.getMetadataDataDefinition().setState(LifecycleStateEnum.CERTIFIED.name());
1862 Either<ResourceMetadataData, TitanOperationStatus> updateNode = titanDao.updateNode(rootResourceData, ResourceMetadataData.class);
1863 assertTrue(updateNode.isLeft());
1865 Either<Resource, StorageOperationStatus> fetchRootResource = resourceOperation.getResource(rootResource.getUniqueId(), true);
1867 String rootResourceJson = prettyGson.toJson(fetchRootResource.left().value());
1868 log.debug(rootResourceJson);
1869 return rootResource;
1872 public void addResourceInstancesAndRelation(String serviceId) {
1874 String rootName = "tosca.nodes.test.root";
1875 String softwareCompName = "tosca.nodes.test.softwarecomponent";
1876 String capabilityTypeName = "myCapability";
1877 String reqName = "host";
1878 String computeNodeName = "tosca.nodes.test.compute";
1879 String reqRelationship = "myRelationship";
1881 ResourceOperationTest resourceOperationTest = new ResourceOperationTest();
1882 resourceOperationTest.setOperations(titanDao, resourceOperation, propertyOperation);
1884 Resource rootResource = createRootResource(rootName, resourceOperationTest);
1885 // Create Capability type
1886 CapabilityTypeOperationTest capabilityTypeOperationTest = new CapabilityTypeOperationTest();
1887 capabilityTypeOperationTest.setOperations(titanDao, capabilityTypeOperation);
1888 CapabilityTypeDefinition createCapabilityDef = capabilityTypeOperationTest.createCapability(capabilityTypeName);
1890 Resource softwareComponentResource = createSoftwareComponentWithReq(softwareCompName, resourceOperationTest, rootResource, capabilityTypeName, reqName, reqRelationship, computeNodeName);
1891 Resource compute = createComputeWithCapability(capabilityTypeName, computeNodeName, resourceOperationTest, rootResource);
1894 ComponentInstance myresourceInstance = buildResourceInstance(softwareComponentResource.getUniqueId(), "1", "tosca.nodes.test.root");
1896 Either<ComponentInstance, TitanOperationStatus> myinstanceRes = resourceInstanceOperation.addComponentInstanceToContainerComponent(serviceId, NodeTypeEnum.Service, "1", true, myresourceInstance, NodeTypeEnum.Resource, false);
1898 assertTrue("check instance added to service", myinstanceRes.isLeft());
1901 ComponentInstance computeInstance = buildResourceInstance(compute.getUniqueId(), "2", "tosca.nodes.test.compute");
1902 ComponentInstance value1 = myinstanceRes.left().value();
1904 Either<ComponentInstance, TitanOperationStatus> computeInstTes = resourceInstanceOperation.addComponentInstanceToContainerComponent(serviceId, NodeTypeEnum.Service, "2", true, computeInstance, NodeTypeEnum.Resource, false);
1905 assertTrue("check instance added to service", computeInstTes.isLeft());
1906 ComponentInstance value2 = computeInstTes.left().value();
1908 RequirementAndRelationshipPair relationPair = new RequirementAndRelationshipPair();
1909 relationPair.setRequirement(reqName);
1910 relationPair.setCapability(capabilityTypeName);
1913 Map<String, List<CapabilityDefinition>> capabilities = compute.getCapabilities();
1914 for (Map.Entry<String, List<CapabilityDefinition>> entry : capabilities.entrySet()) {
1915 capId = entry.getValue().get(0).getUniqueId();
1917 relationPair.setCapabilityUid(capId);
1918 Map<String, List<RequirementDefinition>> requirements = softwareComponentResource.getRequirements();
1920 for (Map.Entry<String, List<RequirementDefinition>> entry : requirements.entrySet()) {
1921 reqId = entry.getValue().get(0).getUniqueId();
1923 relationPair.setRequirementUid(reqId);
1924 relationPair.setRequirementOwnerId(value1.getUniqueId());
1925 relationPair.setCapabilityOwnerId(value2.getUniqueId());
1926 relationPair.setCapabilityUid(capId);
1928 Either<RelationshipInstData, TitanOperationStatus> connectResourcesInService = resourceInstanceOperation.connectResourcesInService(serviceId, NodeTypeEnum.Service, value1.getUniqueId(), value2.getUniqueId(), relationPair);
1930 assertTrue("check relation created", connectResourcesInService.isLeft());
1936 public void addResourceInstancesResourceDeleted() {
1938 String rootName = "tosca.nodes.test.root";
1939 String softwareCompName = "tosca.nodes.test.softwarecomponent";
1940 String capabilityTypeName = "myCapability";
1941 String reqName = "host";
1942 String computeNodeName = "tosca.nodes.test.compute";
1943 String reqRelationship = "myRelationship";
1945 ServiceMetadataData origService = createService("myService");
1946 String serviceId = (String) origService.getUniqueId();
1948 ResourceOperationTest resourceOperationTest = new ResourceOperationTest();
1949 resourceOperationTest.setOperations(titanDao, resourceOperation, propertyOperation);
1951 Resource rootResource = createRootResource(rootName, resourceOperationTest);
1952 // Create Capability type
1953 CapabilityTypeOperationTest capabilityTypeOperationTest = new CapabilityTypeOperationTest();
1954 capabilityTypeOperationTest.setOperations(titanDao, capabilityTypeOperation);
1955 capabilityTypeOperationTest.createCapability(capabilityTypeName);
1957 Resource softwareComponentResource = createSoftwareComponentWithReq(softwareCompName, resourceOperationTest, rootResource, capabilityTypeName, reqName, reqRelationship, computeNodeName);
1959 deleteResource(softwareComponentResource.getUniqueId());
1962 ComponentInstance myresourceInstance = buildResourceInstance(softwareComponentResource.getUniqueId(), "1", "tosca.nodes.test.root");
1964 Either<ComponentInstance, TitanOperationStatus> myinstanceRes = resourceInstanceOperation.addComponentInstanceToContainerComponent(serviceId, NodeTypeEnum.Service, "1", true, myresourceInstance, NodeTypeEnum.Resource, false);
1966 assertTrue("check instance not added to service", myinstanceRes.isRight());
1972 public void testDeploymentArtifactsOnRI() {
1974 String rootName = "tosca.nodes.test.root";
1976 ServiceMetadataData origService = createService("testDeploymentArtifactsOnRI");
1977 String serviceId = (String) origService.getUniqueId();
1979 ResourceOperationTest resourceOperationTest = new ResourceOperationTest();
1980 resourceOperationTest.setOperations(titanDao, resourceOperation, propertyOperation);
1982 Resource rootResource = createRootResource(rootName, resourceOperationTest);
1983 ArtifactDefinition addArtifactToResource = addArtifactToResource(USER_ID, rootResource.getUniqueId(), "myArtifact");
1986 ComponentInstance myresourceInstance = buildResourceInstance(rootResource.getUniqueId(), "1", rootName);
1988 Either<ComponentInstance, TitanOperationStatus> myinstanceRes = resourceInstanceOperation.addComponentInstanceToContainerComponent(serviceId, NodeTypeEnum.Service, "1", true, myresourceInstance, NodeTypeEnum.Resource, false);
1990 assertTrue("check instance added to service", myinstanceRes.isLeft());
1992 Either<ImmutablePair<List<ComponentInstance>, List<RequirementCapabilityRelDef>>, TitanOperationStatus> resourceInstancesOfService = resourceInstanceOperation.getComponentInstancesOfComponent(serviceId, NodeTypeEnum.Service,
1993 NodeTypeEnum.Resource);
1994 assertTrue(resourceInstancesOfService.isLeft());
1995 List<ComponentInstance> resourceInstanceList = resourceInstancesOfService.left().value().left;
1996 assertTrue(resourceInstanceList.size() == 1);
1997 ComponentInstance resourceInstance = resourceInstanceList.get(0);
1998 assertTrue(resourceInstance.getDeploymentArtifacts().size() == 1);
1999 Map<String, ArtifactDefinition> artifacts = resourceInstance.getDeploymentArtifacts();
2000 assertNotNull(artifacts.get(addArtifactToResource.getArtifactLabel()));
2002 ArtifactDefinition heatEnvArtifact = new ArtifactDefinition(addArtifactToResource);
2003 heatEnvArtifact.setArtifactType("HEAT_ENV");
2004 heatEnvArtifact.setArtifactLabel(addArtifactToResource.getArtifactLabel() + "env");
2005 heatEnvArtifact.setUniqueId(null);
2007 Either<ArtifactDefinition, StorageOperationStatus> either = artifactOperation.addHeatEnvArtifact(heatEnvArtifact, addArtifactToResource, resourceInstance.getUniqueId(), NodeTypeEnum.ResourceInstance, true);
2008 assertTrue(either.isLeft());
2010 resourceInstancesOfService = resourceInstanceOperation.getComponentInstancesOfComponent(serviceId, NodeTypeEnum.Service, NodeTypeEnum.Resource);
2011 assertTrue(resourceInstancesOfService.isLeft());
2012 resourceInstanceList = resourceInstancesOfService.left().value().left;
2013 assertTrue(resourceInstanceList.size() == 1);
2014 resourceInstance = resourceInstanceList.get(0);
2015 assertTrue(resourceInstance.getDeploymentArtifacts().size() == 2);
2016 artifacts = resourceInstance.getDeploymentArtifacts();
2017 assertNotNull(artifacts.get(addArtifactToResource.getArtifactLabel()));
2018 assertNotNull(artifacts.get(addArtifactToResource.getArtifactLabel() + "env"));
2019 ArtifactDefinition heatEnvFromRI = artifacts.get(addArtifactToResource.getArtifactLabel() + "env");
2020 assertEquals(addArtifactToResource.getUniqueId(), heatEnvFromRI.getGeneratedFromId());
2022 List<HeatParameterDefinition> heatParameters = artifacts.get(addArtifactToResource.getArtifactLabel()).getListHeatParameters();
2023 assertNotNull(heatParameters);
2024 assertTrue(heatParameters.size() == 1);
2026 List<HeatParameterDefinition> heatEnvParameters = heatEnvFromRI.getListHeatParameters();
2027 assertNotNull(heatEnvParameters);
2028 assertTrue(heatEnvParameters.size() == 1);
2030 resourceOperation.deleteResource(rootResource.getUniqueId());
2036 public void deleteResourceInstanceWithArtifacts() {
2037 String rootName = "tosca.nodes.test.root";
2039 ServiceMetadataData origService = createService("deleteResourceInstanceWithArtifacts");
2040 String serviceId = (String) origService.getUniqueId();
2042 ResourceOperationTest resourceOperationTest = new ResourceOperationTest();
2043 resourceOperationTest.setOperations(titanDao, resourceOperation, propertyOperation);
2045 Resource rootResource = createRootResource(rootName, resourceOperationTest);
2046 ArtifactDefinition addArtifactToResource = addArtifactToResource(USER_ID, rootResource.getUniqueId(), "myArtifact");
2049 ComponentInstance myresourceInstance = buildResourceInstance(rootResource.getUniqueId(), "1", rootName);
2051 Either<ComponentInstance, TitanOperationStatus> myinstanceRes = resourceInstanceOperation.addComponentInstanceToContainerComponent(serviceId, NodeTypeEnum.Service, "1", true, myresourceInstance, NodeTypeEnum.Resource, false);
2053 ArtifactDefinition heatEnvArtifact = new ArtifactDefinition(addArtifactToResource);
2054 heatEnvArtifact.setArtifactType("HEAT_ENV");
2055 heatEnvArtifact.setArtifactLabel(addArtifactToResource.getArtifactLabel() + "env");
2056 heatEnvArtifact.setUniqueId(null);
2058 assertTrue("check instance added to service", myinstanceRes.isLeft());
2060 Either<ImmutablePair<List<ComponentInstance>, List<RequirementCapabilityRelDef>>, TitanOperationStatus> resourceInstancesOfService = resourceInstanceOperation.getComponentInstancesOfComponent(serviceId, NodeTypeEnum.Service,
2061 NodeTypeEnum.Resource);
2062 assertTrue(resourceInstancesOfService.isLeft());
2063 List<ComponentInstance> resourceInstanceList = resourceInstancesOfService.left().value().left;
2064 assertTrue(resourceInstanceList.size() == 1);
2065 ComponentInstance resourceInstance = resourceInstanceList.get(0);
2067 Either<ArtifactDefinition, StorageOperationStatus> either = artifactOperation.addHeatEnvArtifact(heatEnvArtifact, addArtifactToResource, resourceInstance.getUniqueId(), NodeTypeEnum.ResourceInstance, true);
2068 assertTrue(either.isLeft());
2069 ArtifactDefinition heatEnvDefinition = either.left().value();
2071 // delete resource instance
2072 Either<ComponentInstance, StorageOperationStatus> deleteResourceInstance = resourceInstanceOperation.deleteComponentInstance(NodeTypeEnum.Service, serviceId, resourceInstance.getUniqueId());
2073 assertTrue(deleteResourceInstance.isLeft());
2075 // check heat env deleted
2076 ArtifactData artifactData = new ArtifactData();
2077 Either<ArtifactData, TitanOperationStatus> getDeletedArtifact = titanDao.getNode(artifactData.getUniqueIdKey(), heatEnvDefinition.getUniqueId(), ArtifactData.class);
2078 assertTrue(getDeletedArtifact.isRight());
2080 // check heat is not deleted
2081 getDeletedArtifact = titanDao.getNode(artifactData.getUniqueIdKey(), addArtifactToResource.getUniqueId(), ArtifactData.class);
2082 assertTrue(getDeletedArtifact.isLeft());
2084 HeatParameterData heatParamData = new HeatParameterData();
2085 Either<HeatParameterData, TitanOperationStatus> heatParamNode = titanDao.getNode(heatParamData.getUniqueIdKey(), addArtifactToResource.getHeatParameters().get(0).getUniqueId(), HeatParameterData.class);
2086 assertTrue(heatParamNode.isLeft());
2088 resourceOperation.deleteResource(rootResource.getUniqueId());
2094 public void getHeatEnvParams() {
2095 String rootName = "tosca.nodes.test.root";
2097 ServiceMetadataData origService = createService("getHeatEnvParams");
2098 String serviceId = (String) origService.getUniqueId();
2100 ResourceOperationTest resourceOperationTest = new ResourceOperationTest();
2101 resourceOperationTest.setOperations(titanDao, resourceOperation, propertyOperation);
2103 Resource rootResource = createRootResource(rootName, resourceOperationTest);
2104 ArtifactDefinition addArtifactToResource = addArtifactToResource(USER_ID, rootResource.getUniqueId(), "myArtifact");
2107 ComponentInstance myresourceInstance = buildResourceInstance(rootResource.getUniqueId(), "1", rootName);
2109 Either<ComponentInstance, TitanOperationStatus> myinstanceRes = resourceInstanceOperation.addComponentInstanceToContainerComponent(serviceId, NodeTypeEnum.Service, "1", true, myresourceInstance, NodeTypeEnum.Resource, false);
2111 ArtifactDefinition heatEnvArtifact = new ArtifactDefinition(addArtifactToResource);
2112 heatEnvArtifact.setArtifactType("HEAT_ENV");
2113 heatEnvArtifact.setArtifactLabel(addArtifactToResource.getArtifactLabel() + "env");
2114 heatEnvArtifact.setUniqueId(null);
2116 assertTrue("check instance added to service", myinstanceRes.isLeft());
2118 Either<ImmutablePair<List<ComponentInstance>, List<RequirementCapabilityRelDef>>, TitanOperationStatus> resourceInstancesOfService = resourceInstanceOperation.getComponentInstancesOfComponent(serviceId, NodeTypeEnum.Service,
2119 NodeTypeEnum.Resource);
2120 assertTrue(resourceInstancesOfService.isLeft());
2121 List<ComponentInstance> resourceInstanceList = resourceInstancesOfService.left().value().left;
2122 assertTrue(resourceInstanceList.size() == 1);
2123 ComponentInstance resourceInstance = resourceInstanceList.get(0);
2125 Either<ArtifactDefinition, StorageOperationStatus> either = artifactOperation.addHeatEnvArtifact(heatEnvArtifact, addArtifactToResource, resourceInstance.getUniqueId(), NodeTypeEnum.ResourceInstance, true);
2126 assertTrue(either.isLeft());
2127 ArtifactDefinition heatEnvDefinition = either.left().value();
2130 String newHeatValue = "123";
2131 addHeatValueToEnv(heatEnvDefinition.getUniqueId(), addArtifactToResource.getListHeatParameters().get(0), newHeatValue);
2133 // check values received
2135 resourceInstancesOfService = resourceInstanceOperation.getComponentInstancesOfComponent(serviceId, NodeTypeEnum.Service, NodeTypeEnum.Resource);
2136 assertTrue(resourceInstancesOfService.isLeft());
2137 resourceInstanceList = resourceInstancesOfService.left().value().left;
2138 assertTrue(resourceInstanceList.size() == 1);
2139 resourceInstance = resourceInstanceList.get(0);
2140 assertTrue(resourceInstance.getDeploymentArtifacts().size() == 2);
2141 Map<String, ArtifactDefinition> artifacts = resourceInstance.getDeploymentArtifacts();
2142 assertNotNull(artifacts.get(addArtifactToResource.getArtifactLabel()));
2143 assertNotNull(artifacts.get(addArtifactToResource.getArtifactLabel() + "env"));
2145 List<HeatParameterDefinition> heatParameters = artifacts.get(addArtifactToResource.getArtifactLabel()).getListHeatParameters();
2146 assertNotNull(heatParameters);
2147 assertTrue(heatParameters.size() == 1);
2148 HeatParameterDefinition heatParameterTemplate = heatParameters.get(0);
2150 List<HeatParameterDefinition> heatEnvParameters = artifacts.get(addArtifactToResource.getArtifactLabel() + "env").getListHeatParameters();
2151 assertNotNull(heatEnvParameters);
2152 assertTrue(heatEnvParameters.size() == 1);
2153 HeatParameterDefinition heatParameterEnv = heatEnvParameters.get(0);
2155 assertEquals(heatParameterEnv.getDefaultValue(), heatParameterTemplate.getCurrentValue());
2156 assertEquals(newHeatValue, heatParameterEnv.getCurrentValue());
2157 assertFalse(newHeatValue.equals(heatParameterTemplate.getCurrentValue()));
2159 resourceOperation.deleteResource(rootResource.getUniqueId());
2163 public void addHeatValueToEnv(String artifactId, HeatParameterDefinition heatDefinition, String value) {
2164 HeatParameterValueData heatValueData = new HeatParameterValueData();
2165 heatValueData.setValue(value);
2166 heatValueData.setUniqueId(artifactId + "." + heatDefinition.getName());
2167 Either<HeatParameterValueData, TitanOperationStatus> createValue = titanDao.createNode(heatValueData, HeatParameterValueData.class);
2168 assertTrue(createValue.isLeft());
2169 HeatParameterValueData value2 = createValue.left().value();
2170 HeatParameterData heatParamData = new HeatParameterData(heatDefinition);
2171 Either<GraphRelation, TitanOperationStatus> createRelation = titanDao.createRelation(value2, heatParamData, GraphEdgeLabels.PROPERTY_IMPL, null);
2172 assertTrue(createRelation.isLeft());
2173 Map<String, Object> props = new HashMap<String, Object>();
2174 props.put(GraphEdgePropertiesDictionary.NAME.getProperty(), heatDefinition.getName());
2175 Either<GraphRelation, TitanOperationStatus> createRelation2 = titanDao.createRelation(new UniqueIdData(NodeTypeEnum.ArtifactRef, artifactId), value2, GraphEdgeLabels.PARAMETER_VALUE, props);
2176 assertTrue(createRelation2.isLeft());
2181 public static String normaliseComponentName(String name) {
2182 String[] split = splitComponentName(name);
2183 StringBuffer sb = new StringBuffer();
2184 for (String splitElement : split) {
2185 sb.append(splitElement);
2187 return sb.toString();
2191 private static String[] splitComponentName(String name) {
2192 String normalizedName = name.toLowerCase();
2193 normalizedName = COMPONENT_NAME_DELIMETER_PATTERN.matcher(normalizedName).replaceAll(" ");
2194 String[] split = normalizedName.split(" ");
2198 public static String normaliseComponentInstanceName(String name) {
2199 String[] split = splitComponentInstanceName(name);
2200 StringBuffer sb = new StringBuffer();
2201 for (String splitElement : split) {
2202 sb.append(splitElement);
2204 return sb.toString();
2208 private static String[] splitComponentInstanceName(String name) {
2209 String normalizedName = name.toLowerCase();
2210 normalizedName = COMPONENT_INCTANCE_NAME_DELIMETER_PATTERN.matcher(normalizedName).replaceAll(" ");
2211 String[] split = normalizedName.split(" ");
2215 private ArtifactDefinition addArtifactToResource(String userId, String resourceId, String artifactName) {
2216 ArtifactDefinition artifactInfo = new ArtifactDefinition();
2218 artifactInfo.setArtifactName(artifactName + ".yml");
2219 artifactInfo.setArtifactType("HEAT");
2220 artifactInfo.setDescription("hdkfhskdfgh");
2221 artifactInfo.setArtifactChecksum("UEsDBAoAAAAIAAeLb0bDQz");
2222 artifactInfo.setArtifactGroupType(ArtifactGroupTypeEnum.DEPLOYMENT);
2224 artifactInfo.setUserIdCreator(userId);
2225 String fullName = "Jim H";
2226 artifactInfo.setUpdaterFullName(fullName);
2227 long time = System.currentTimeMillis();
2228 artifactInfo.setCreatorFullName(fullName);
2229 artifactInfo.setCreationDate(time);
2230 artifactInfo.setLastUpdateDate(time);
2231 artifactInfo.setUserIdLastUpdater(userId);
2232 artifactInfo.setArtifactLabel(artifactName);
2233 artifactInfo.setUniqueId(UniqueIdBuilder.buildPropertyUniqueId(resourceId, artifactInfo.getArtifactLabel()));
2234 artifactInfo.setEsId(artifactInfo.getUniqueId());
2236 List<HeatParameterDefinition> heatParams = new ArrayList<HeatParameterDefinition>();
2237 HeatParameterDefinition heatParam = new HeatParameterDefinition();
2238 heatParam.setCurrentValue("11");
2239 heatParam.setDefaultValue("22");
2240 heatParam.setDescription("desc");
2241 heatParam.setName("myParam");
2242 heatParam.setType("number");
2243 heatParams.add(heatParam);
2244 artifactInfo.setListHeatParameters(heatParams);
2246 Either<ArtifactDefinition, StorageOperationStatus> artifact = artifactOperation.addArifactToComponent(artifactInfo, resourceId, NodeTypeEnum.Resource, true, true);
2247 assertTrue(artifact.isLeft());
2248 return artifact.left().value();