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.resources;
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertTrue;
26 import java.util.ArrayList;
27 import java.util.HashMap;
28 import java.util.Iterator;
29 import java.util.List;
32 import javax.annotation.Resource;
34 import org.apache.commons.configuration.BaseConfiguration;
35 import org.apache.commons.lang3.tuple.ImmutablePair;
36 import org.apache.tinkerpop.gremlin.structure.Direction;
37 import org.apache.tinkerpop.gremlin.structure.Edge;
38 import org.apache.tinkerpop.gremlin.structure.Vertex;
39 import org.junit.BeforeClass;
40 import org.junit.Test;
41 import org.junit.runner.RunWith;
42 import org.openecomp.sdc.be.config.ConfigurationManager;
43 import org.openecomp.sdc.be.dao.neo4j.GraphEdgeLabels;
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.dao.utils.UserStatusEnum;
48 import org.openecomp.sdc.be.datatypes.components.ResourceMetadataDataDefinition;
49 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
50 import org.openecomp.sdc.be.resources.data.AdditionalInfoParameterData;
51 import org.openecomp.sdc.be.resources.data.ArtifactData;
52 import org.openecomp.sdc.be.resources.data.ComponentInstanceData;
53 import org.openecomp.sdc.be.resources.data.GraphNodeLock;
54 import org.openecomp.sdc.be.resources.data.ResourceMetadataData;
55 import org.openecomp.sdc.be.resources.data.UserData;
56 import org.openecomp.sdc.common.api.ConfigurationSource;
57 import org.openecomp.sdc.common.api.UserRoleEnum;
58 import org.openecomp.sdc.common.impl.ExternalConfiguration;
59 import org.openecomp.sdc.common.impl.FSConfigurationSource;
60 import org.slf4j.Logger;
61 import org.slf4j.LoggerFactory;
62 import org.springframework.test.context.ContextConfiguration;
63 import org.springframework.test.context.TestExecutionListeners;
64 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
65 import org.springframework.test.context.support.DependencyInjectionTestExecutionListener;
66 import org.springframework.test.context.support.DirtiesContextTestExecutionListener;
67 import org.springframework.test.context.transaction.TransactionalTestExecutionListener;
69 import com.google.gson.Gson;
70 import com.thinkaurelius.titan.core.PropertyKey;
71 import com.thinkaurelius.titan.core.TitanEdge;
72 import com.thinkaurelius.titan.core.TitanFactory;
73 import com.thinkaurelius.titan.core.TitanGraph;
74 import com.thinkaurelius.titan.core.TitanVertex;
75 import com.thinkaurelius.titan.core.attribute.Text;
76 import com.thinkaurelius.titan.core.schema.ConsistencyModifier;
77 import com.thinkaurelius.titan.core.schema.TitanGraphIndex;
78 import com.thinkaurelius.titan.core.schema.TitanManagement;
80 import fj.data.Either;
82 @RunWith(SpringJUnit4ClassRunner.class)
83 @ContextConfiguration("classpath:application-context-test.xml")
84 @TestExecutionListeners(listeners = { DependencyInjectionTestExecutionListener.class,
85 DirtiesContextTestExecutionListener.class, TransactionalTestExecutionListener.class })
86 public class TitanGenericDaoTest {
87 private static Logger log = LoggerFactory.getLogger(TitanGenericDaoTest.class.getName());
88 private static ConfigurationManager configurationManager;
90 @Resource(name = "titan-generic-dao")
91 private TitanGenericDao titanDao;
94 public static void setupBeforeClass() {
95 ExternalConfiguration.setAppName("catalog-dao");
96 String appConfigDir = "src/test/resources/config/catalog-dao";
97 ConfigurationSource configurationSource = new FSConfigurationSource(ExternalConfiguration.getChangeListener(),
99 configurationManager = new ConfigurationManager(configurationSource);
100 configurationManager.getConfiguration()
101 .setTitanCfgFile("../catalog-be/src/main/resources/config/titan.properties");
102 configurationManager.getConfiguration().setTitanInMemoryGraph(true);
106 public void testcheckEdgeProps() {
107 TitanGraph graph = titanDao.getGraph().left().value();
108 TitanVertex v1 = graph.addVertex();
109 v1.property("prop1", 123);
110 TitanVertex v2 = graph.addVertex();
111 v2.property("prop1", 456);
112 TitanEdge addEdge = v1.addEdge("label11", v2);
113 addEdge.property("edgeProp", "my prop edge");
116 Either<TitanVertex, TitanOperationStatus> v11 = titanDao.getVertexByProperty("prop1", 123);
117 Iterator<Edge> edges = v11.left().value().edges(Direction.OUT, "label11");
118 Edge edge = edges.next();
119 // String value = (String)edge.value("edgeProp");
120 String value = (String) titanDao.getProperty(edge, "edgeProp");
126 public void testCrudNode() {
128 String id = "userId12345abc";
129 UserData userData = new UserData("Myname123", "Mylastname", id, "email123", "Tester",
130 UserStatusEnum.ACTIVE.name(), null);
132 Either<UserData, TitanOperationStatus> newNode = titanDao.createNode(userData, UserData.class);
134 assertTrue(newNode.isLeft());
136 log.debug("{}", newNode.left().value());
140 ImmutablePair<String, Object> keyValueId = userData.getKeyValueId();
141 Either<UserData, TitanOperationStatus> node = titanDao.getNode(keyValueId.getKey(), keyValueId.getValue(),
144 assertTrue(node.isLeft());
145 log.debug("{}", node.left().value());
147 userData.setRole("Designer");
148 node = titanDao.updateNode(userData, UserData.class);
149 assertTrue(node.isLeft());
150 log.debug("{}", node.left().value());
151 assertEquals(null, "Designer", node.left().value().getRole());
154 node = titanDao.deleteNode(userData, UserData.class);
155 assertTrue(node.isLeft());
156 log.debug("{}", node.left().value());
159 node = titanDao.getNode(keyValueId.getKey(), keyValueId.getValue(), UserData.class);
160 assertTrue(node.isRight());
161 log.debug("{}", node.right().value());
166 public void testGetByCategoryAndAll() {
169 String id = "userId12345abc";
170 UserData userData1 = new UserData("Myname123", "Mylastname", id, "email123", "Tester",
171 UserStatusEnum.ACTIVE.name(), null);
173 Either<UserData, TitanOperationStatus> node1 = titanDao.createNode(userData1, UserData.class);
174 assertTrue(node1.isLeft());
175 log.debug("{}", node1.left().value());
177 id = "userIddfkoer45abc";
178 UserData userData2 = new UserData("Mynadyhme123", "Mylasghtname", id, "emaighdl123", "Designer",
179 UserStatusEnum.ACTIVE.name(), null);
180 Either<UserData, TitanOperationStatus> node2 = titanDao.createNode(userData2, UserData.class);
181 assertTrue(node2.isLeft());
182 log.debug("{}", node2.left().value());
186 ImmutablePair<String, Object> keyValueId1 = userData1.getKeyValueId();
188 Either<UserData, TitanOperationStatus> node = titanDao.getNode(keyValueId1.getKey(), keyValueId1.getValue(),
190 assertTrue(node.isLeft());
191 log.debug("{}", node.left().value());
194 // get all must be 2 + 1 default user = 3
195 Either<List<UserData>, TitanOperationStatus> all = titanDao.getAll(NodeTypeEnum.User, UserData.class);
196 assertTrue(all.isLeft());
197 assertTrue(all.left().value().size() > 0);
199 log.debug("{}", all.left().value());
201 Map<String, Object> props = new HashMap<String, Object>();
203 props.put(keyValueId1.getKey(), keyValueId1.getValue());
205 // get by criteria. must be 1
206 Either<List<UserData>, TitanOperationStatus> byCriteria = titanDao.getByCriteria(NodeTypeEnum.User, props,
208 assertTrue(byCriteria.isLeft());
209 assertEquals(1, byCriteria.left().value().size());
211 log.debug("{}", byCriteria.left().value());
214 node = titanDao.deleteNode(userData1, UserData.class);
215 assertTrue(node.isLeft());
216 node = titanDao.deleteNode(userData2, UserData.class);
217 assertTrue(node.isLeft());
221 public void testGetEdgesForNode() {
222 String id = "userId12345abc";
223 UserData userData = new UserData("Myname123", "Mylastname", id, "email123", UserRoleEnum.ADMIN.name(),
224 UserStatusEnum.ACTIVE.name(), null);
225 titanDao.createNode(userData, UserData.class);
226 ResourceMetadataData resourceData = new ResourceMetadataData();
227 resourceData.getMetadataDataDefinition().setName("resourceForLock");
228 resourceData.getMetadataDataDefinition().setVersion("0.1");
229 resourceData.getMetadataDataDefinition().setState("newState");
230 resourceData.getMetadataDataDefinition().setUniqueId(resourceData.getMetadataDataDefinition().getName() + "."
231 + resourceData.getMetadataDataDefinition().getVersion());
233 titanDao.createNode(resourceData, ResourceMetadataData.class);
234 titanDao.createRelation(userData, resourceData, GraphEdgeLabels.LAST_MODIFIER, null);
237 Either<List<Edge>, TitanOperationStatus> eitherEdges = titanDao.getEdgesForNode(userData, Direction.OUT);
238 assertTrue(eitherEdges.isLeft());
239 assertTrue(eitherEdges.left().value().size() == 1);
241 eitherEdges = titanDao.getEdgesForNode(userData, Direction.IN);
242 assertTrue(eitherEdges.isLeft());
243 assertTrue(eitherEdges.left().value().size() == 0);
245 eitherEdges = titanDao.getEdgesForNode(resourceData, Direction.OUT);
246 assertTrue(eitherEdges.isLeft());
247 assertTrue(eitherEdges.left().value().size() == 0);
249 eitherEdges = titanDao.getEdgesForNode(resourceData, Direction.IN);
250 assertTrue(eitherEdges.isLeft());
251 assertTrue(eitherEdges.left().value().size() == 1);
253 eitherEdges = titanDao.getEdgesForNode(resourceData, Direction.BOTH);
254 assertTrue(eitherEdges.isLeft());
255 assertTrue(eitherEdges.left().value().size() == 1);
257 eitherEdges = titanDao.getEdgesForNode(userData, Direction.BOTH);
258 assertTrue(eitherEdges.isLeft());
259 assertTrue(eitherEdges.left().value().size() == 1);
261 titanDao.deleteNode(userData, UserData.class);
262 titanDao.deleteNode(resourceData, ResourceMetadataData.class);
267 public void testLockElement() {
269 ResourceMetadataData resourceData = new ResourceMetadataData();
271 resourceData.getMetadataDataDefinition().setName("resourceForLock");
272 resourceData.getMetadataDataDefinition().setVersion("0.1");
273 resourceData.getMetadataDataDefinition().setState("newState");
274 resourceData.getMetadataDataDefinition().setUniqueId(resourceData.getMetadataDataDefinition().getName() + "."
275 + resourceData.getMetadataDataDefinition().getVersion());
277 Either<ResourceMetadataData, TitanOperationStatus> resource1 = titanDao.createNode(resourceData,
278 ResourceMetadataData.class);
279 assertTrue(resource1.isLeft());
281 String lockId = "lock_" + resourceData.getLabel() + "_" + resource1.left().value().getUniqueId();
283 Either<GraphNodeLock, TitanOperationStatus> nodeLock = titanDao
284 .getNode(GraphPropertiesDictionary.UNIQUE_ID.getProperty(), lockId, GraphNodeLock.class);
285 assertTrue(nodeLock.isRight());
286 assertEquals(TitanOperationStatus.NOT_FOUND, nodeLock.right().value());
288 TitanOperationStatus status = titanDao.lockElement(resourceData);
289 assertEquals(TitanOperationStatus.OK, status);
291 nodeLock = titanDao.getNode(GraphPropertiesDictionary.UNIQUE_ID.getProperty(), lockId, GraphNodeLock.class);
292 assertTrue(nodeLock.isLeft());
293 assertEquals(lockId, nodeLock.left().value().getUniqueId());
297 status = titanDao.lockElement(resourceData);
298 assertEquals(TitanOperationStatus.ALREADY_LOCKED, status);
300 status = titanDao.releaseElement(resourceData);
301 assertEquals(TitanOperationStatus.OK, status);
303 nodeLock = titanDao.getNode(GraphPropertiesDictionary.UNIQUE_ID.getProperty(), lockId, GraphNodeLock.class);
304 assertTrue(nodeLock.isRight());
305 assertEquals(TitanOperationStatus.NOT_FOUND, nodeLock.right().value());
306 titanDao.deleteNode(resourceData, ResourceMetadataData.class);
312 public void testReLockElement() throws InterruptedException {
314 ResourceMetadataData resourceData = new ResourceMetadataData();
316 resourceData.getMetadataDataDefinition().setName("resourceForReLock");
317 resourceData.getMetadataDataDefinition().setVersion("0.1");
318 resourceData.getMetadataDataDefinition().setState("newState");
319 resourceData.getMetadataDataDefinition().setUniqueId(resourceData.getMetadataDataDefinition().getName() + "."
320 + resourceData.getMetadataDataDefinition().getVersion());
322 Either<ResourceMetadataData, TitanOperationStatus> resource1 = titanDao.createNode(resourceData,
323 ResourceMetadataData.class);
324 assertTrue(resource1.isLeft());
326 String lockId = "lock_" + resourceData.getLabel() + "_" + resource1.left().value().getUniqueId();
328 Either<GraphNodeLock, TitanOperationStatus> nodeLock = titanDao
329 .getNode(GraphPropertiesDictionary.UNIQUE_ID.getProperty(), lockId, GraphNodeLock.class);
330 assertTrue(nodeLock.isRight());
331 assertEquals(TitanOperationStatus.NOT_FOUND, nodeLock.right().value());
334 TitanOperationStatus status = titanDao.lockElement(resourceData);
335 assertEquals(TitanOperationStatus.OK, status);
337 nodeLock = titanDao.getNode(GraphPropertiesDictionary.UNIQUE_ID.getProperty(), lockId, GraphNodeLock.class);
338 assertTrue(nodeLock.isLeft());
339 assertEquals(lockId, nodeLock.left().value().getUniqueId());
340 long time1 = nodeLock.left().value().getTime();
345 configurationManager.getConfiguration().setTitanLockTimeout(2L);
349 status = titanDao.lockElement(resourceData);
350 assertEquals(TitanOperationStatus.OK, status);
352 nodeLock = titanDao.getNode(GraphPropertiesDictionary.UNIQUE_ID.getProperty(), lockId, GraphNodeLock.class);
353 assertTrue(nodeLock.isLeft());
354 assertEquals(lockId, nodeLock.left().value().getUniqueId());
356 long time2 = nodeLock.left().value().getTime();
358 assertTrue(time2 > time1);
360 status = titanDao.releaseElement(resourceData);
361 assertEquals(TitanOperationStatus.OK, status);
363 nodeLock = titanDao.getNode(GraphPropertiesDictionary.UNIQUE_ID.getProperty(), lockId, GraphNodeLock.class);
364 assertTrue(nodeLock.isRight());
365 assertEquals(TitanOperationStatus.NOT_FOUND, nodeLock.right().value());
367 titanDao.deleteNode(resourceData, ResourceMetadataData.class);
373 public void testBoolean() {
374 ResourceMetadataData resourceData = new ResourceMetadataData();
376 resourceData.getMetadataDataDefinition().setName("resourceForLock");
377 resourceData.getMetadataDataDefinition().setVersion("0.1");
378 resourceData.getMetadataDataDefinition().setState("NOT_CERTIFIED_CHECKOUT");
379 resourceData.getMetadataDataDefinition().setHighestVersion(true);
380 resourceData.getMetadataDataDefinition().setUniqueId(resourceData.getMetadataDataDefinition().getName() + "."
381 + resourceData.getMetadataDataDefinition().getVersion());
383 Either<ResourceMetadataData, TitanOperationStatus> resource1 = titanDao.createNode(resourceData,
384 ResourceMetadataData.class);
385 assertTrue(resource1.isLeft());
387 resourceData = new ResourceMetadataData();
389 resourceData.getMetadataDataDefinition().setName("resourceForLock");
390 resourceData.getMetadataDataDefinition().setVersion("0.2");
391 resourceData.getMetadataDataDefinition().setState("NOT_CERTIFIED_CHECKOUT");
392 resourceData.getMetadataDataDefinition().setHighestVersion(false);
393 resourceData.getMetadataDataDefinition().setUniqueId(resourceData.getMetadataDataDefinition().getName() + "."
394 + resourceData.getMetadataDataDefinition().getVersion());
396 Either<ResourceMetadataData, TitanOperationStatus> resource2 = titanDao.createNode(resourceData,
397 ResourceMetadataData.class);
400 Map<String, Object> props = new HashMap<String, Object>();
402 props.put(GraphPropertiesDictionary.STATE.getProperty(), "NOT_CERTIFIED_CHECKOUT");
403 props.put("name", "resourceForLock");
404 props.put(GraphPropertiesDictionary.IS_HIGHEST_VERSION.getProperty(), false);
406 // get by criteria. must be 1
407 Either<List<ResourceMetadataData>, TitanOperationStatus> byCriteria = titanDao
408 .getByCriteria(NodeTypeEnum.Resource, props, ResourceMetadataData.class);
409 assertTrue(byCriteria.isLeft());
411 titanDao.deleteNode(resource1.left().value(), ResourceMetadataData.class);
413 titanDao.deleteNode(resource2.left().value(), ResourceMetadataData.class);
418 public void testStringSearch() {
421 BaseConfiguration conf = new BaseConfiguration();
422 conf.setProperty("storage.backend", "inmemory");
423 graph = TitanFactory.open(conf);
425 // TitanManagement graphMgt = graph.getManagementSystem();
426 TitanManagement graphMgt = graph.openManagement();
427 PropertyKey propKey = graphMgt.makePropertyKey("string1").dataType(String.class).make();
428 graphMgt.buildIndex("string1", Vertex.class).addKey(propKey).unique().buildCompositeIndex();
430 propKey = graphMgt.makePropertyKey("string2").dataType(String.class).make();
432 // graphMgt.buildIndex("string2", Vertex.class).addKey(propKey,
433 // Mapping.TEXT.getParameter()).buildMixedIndex("search");
434 graphMgt.buildIndex("string2", Vertex.class).addKey(propKey).unique().buildCompositeIndex();
437 // TitanVertex v = graph.addVertex();
438 // v.addProperty("string1", "My new String 1");
439 // v.addProperty("string2", "String11");
442 // v = graph.addVertex();
443 // v.addProperty("string1", "my new string 1");
444 // v.addProperty("string2", "string11");
447 // System.out.println("First index search - case");
449 // Iterable<Vertex> vertices = graph.getVertices("string1", "My new
451 // Iterator<Vertex> iter = vertices.iterator();
452 // while ( iter.hasNext() ){
453 // Vertex ver = iter.next();
454 // System.out.println(com.tinkerpop.blueprints.util.ElementHelper.getProperties(ver));
456 // System.out.println("First index search non case");
458 // vertices = graph.getVertices("string1", "my new string 1");
459 // iter = vertices.iterator();
460 // while ( iter.hasNext() ){
461 // Vertex ver = iter.next();
462 // System.out.println(com.tinkerpop.blueprints.util.ElementHelper.getProperties(ver));
464 // System.out.println("Second index search case");
466 // vertices = graph.getVertices("string2", "String11");
467 // iter = vertices.iterator();
468 // while ( iter.hasNext() ){
469 // Vertex ver = iter.next();
470 // System.out.println(com.tinkerpop.blueprints.util.ElementHelper.getProperties(ver));
472 // System.out.println("second index search non case");
474 // vertices = graph.getVertices("string2", "string11");
475 // iter = vertices.iterator();
476 // while ( iter.hasNext() ){
477 // Vertex ver = iter.next();
478 // System.out.println(com.tinkerpop.blueprints.util.ElementHelper.getProperties(ver));
480 // System.out.println("Query index search case");
481 // vertices = graph.query().has("string1", "My new String
483 // iter = vertices.iterator();
484 // while ( iter.hasNext() ){
485 // Vertex ver = iter.next();
486 // System.out.println(com.tinkerpop.blueprints.util.ElementHelper.getProperties(ver));
488 // System.out.println("Query index search non case");
489 // vertices = graph.query().has("string1", "my new string
491 // iter = vertices.iterator();
492 // while ( iter.hasNext() ){
493 // Vertex ver = iter.next();
494 // System.out.println(com.tinkerpop.blueprints.util.ElementHelper.getProperties(ver));
497 log.debug("**** predicat index search non case");
498 Iterable<TitanVertex> vertices = graph.query().has("string1", Text.REGEX, "my new string 1").vertices();
499 Iterator<TitanVertex> iter = vertices.iterator();
500 while (iter.hasNext()) {
501 Vertex ver = iter.next();
502 // System.out.println(com.tinkerpop.blueprints.util.ElementHelper.getProperties(ver));
503 log.debug("{}", titanDao.getProperties(ver));
509 public void testDuplicateResultDueToTitanBug() {
511 ResourceMetadataData resourceData1 = new ResourceMetadataData();
512 resourceData1.getMetadataDataDefinition().setUniqueId("A");
513 ((ResourceMetadataDataDefinition) resourceData1.getMetadataDataDefinition()).setAbstract(true);
514 resourceData1.getMetadataDataDefinition().setName("aaaa");
516 Either<ResourceMetadataData, TitanOperationStatus> newNode1 = titanDao.createNode(resourceData1,
517 ResourceMetadataData.class);
518 assertTrue(newNode1.isLeft());
519 log.debug("{}", newNode1.left().value());
520 // titanDao.commit();
522 Map<String, Object> props = new HashMap<>();
523 props.put(GraphPropertiesDictionary.IS_ABSTRACT.getProperty(), true);
524 Either<List<ResourceMetadataData>, TitanOperationStatus> byCriteria = titanDao
525 .getByCriteria(NodeTypeEnum.Resource, props, ResourceMetadataData.class);
526 assertTrue(byCriteria.isLeft());
527 assertEquals("check one result returned", 1, byCriteria.left().value().size());
528 // titanDao.commit();
530 ResourceMetadataData resourceToUpdate = new ResourceMetadataData();
531 ((ResourceMetadataDataDefinition) resourceToUpdate.getMetadataDataDefinition()).setAbstract(false);
532 resourceToUpdate.getMetadataDataDefinition().setUniqueId("A");
533 Either<ResourceMetadataData, TitanOperationStatus> updateNode = titanDao.updateNode(resourceToUpdate,
534 ResourceMetadataData.class);
535 assertTrue(updateNode.isLeft());
536 // titanDao.commit();
538 byCriteria = titanDao.getByCriteria(NodeTypeEnum.Resource, props, ResourceMetadataData.class);
539 assertTrue(byCriteria.isRight());
540 assertEquals("check one result returned due to titan bug", TitanOperationStatus.NOT_FOUND,
541 byCriteria.right().value());
543 AdditionalInfoParameterData infoParameterData = new AdditionalInfoParameterData();
544 infoParameterData.getAdditionalInfoParameterDataDefinition().setUniqueId("123");
545 Map<String, String> idToKey = new HashMap<>();
546 idToKey.put("key1", "value1");
547 infoParameterData.setIdToKey(idToKey);
549 Either<AdditionalInfoParameterData, TitanOperationStatus> newNode2 = titanDao.createNode(infoParameterData,
550 AdditionalInfoParameterData.class);
551 assertTrue(newNode2.isLeft());
552 log.debug("{}", newNode2.left().value());
553 // titanDao.commit();
555 Map<String, String> idToKey2 = new HashMap<>();
556 idToKey2.put("key1", "value2");
558 Map<String, Object> props2 = new HashMap<>();
559 props2.put(GraphPropertiesDictionary.UNIQUE_ID.getProperty(), "123");
560 Gson gson = new Gson();
561 props2.put(GraphPropertiesDictionary.ADDITIONAL_INFO_ID_TO_KEY.getProperty(), gson.toJson(idToKey2));
562 // props2.put(GraphPropertiesDictionary.ADDITIONAL_INFO_ID_TO_KEY.getProperty(),
565 Either<List<AdditionalInfoParameterData>, TitanOperationStatus> byCriteria2 = titanDao
566 .getByCriteria(NodeTypeEnum.AdditionalInfoParameters, props2, AdditionalInfoParameterData.class);
567 assertTrue(byCriteria2.isRight());
568 assertEquals("check one result returned due to titan bug", TitanOperationStatus.NOT_FOUND,
569 byCriteria2.right().value());
571 infoParameterData.setIdToKey(idToKey2);
573 Either<AdditionalInfoParameterData, TitanOperationStatus> updateNode2 = titanDao.updateNode(infoParameterData,
574 AdditionalInfoParameterData.class);
575 assertTrue(updateNode2.isLeft());
576 // titanDao.commit();
578 props2.put(GraphPropertiesDictionary.ADDITIONAL_INFO_ID_TO_KEY.getProperty(), idToKey);
579 byCriteria2 = titanDao.getByCriteria(NodeTypeEnum.AdditionalInfoParameters, props2,
580 AdditionalInfoParameterData.class);
581 assertTrue(byCriteria2.isRight());
582 assertEquals("check one result returned due to titan bug", TitanOperationStatus.NOT_FOUND,
583 byCriteria2.right().value());
585 ComponentInstanceData resourceInstanceData = new ComponentInstanceData();
586 resourceInstanceData.getComponentInstDataDefinition().setUniqueId("ri123");
587 resourceInstanceData.getComponentInstDataDefinition().setPosX("22");
588 resourceInstanceData.getComponentInstDataDefinition().setName("myresource_1");
590 Either<ComponentInstanceData, TitanOperationStatus> newNode3 = titanDao.createNode(resourceInstanceData,
591 ComponentInstanceData.class);
592 assertTrue(newNode3.isLeft());
593 log.debug("{}", newNode3.left().value());
594 // titanDao.commit();
596 resourceInstanceData.getComponentInstDataDefinition().setPosX("50");
597 Either<ComponentInstanceData, TitanOperationStatus> updateNode3 = titanDao.updateNode(resourceInstanceData,
598 ComponentInstanceData.class);
599 assertTrue(updateNode3.isLeft());
600 // titanDao.commit();
602 resourceInstanceData.getComponentInstDataDefinition().setName("myresource_2");
603 updateNode3 = titanDao.updateNode(resourceInstanceData, ComponentInstanceData.class);
604 assertTrue(updateNode3.isLeft());
605 // titanDao.commit();
607 Map<String, Object> props3 = new HashMap<>();
608 props3.put("positionX", "22");
609 Either<List<ComponentInstanceData>, TitanOperationStatus> byCriteria3 = titanDao
610 .getByCriteria(NodeTypeEnum.ResourceInstance, props3, ComponentInstanceData.class);
611 assertTrue(byCriteria3.isRight());
612 assertEquals("check one result returned due to titan bug", TitanOperationStatus.NOT_FOUND,
613 byCriteria3.right().value());
615 props3.put("positionX", "50");
616 byCriteria3 = titanDao.getByCriteria(NodeTypeEnum.ResourceInstance, props3, ComponentInstanceData.class);
617 assertTrue(byCriteria3.isLeft());
619 /////////////////////////// check integer ////////////////////////
621 ArtifactData artifactData = new ArtifactData();
622 artifactData.getArtifactDataDefinition().setUniqueId("ad234");
623 artifactData.getArtifactDataDefinition().setTimeout(100);
625 Either<ArtifactData, TitanOperationStatus> newNode4 = titanDao.createNode(artifactData, ArtifactData.class);
626 assertTrue(newNode4.isLeft());
627 log.debug("{}", newNode4.left().value());
628 // titanDao.commit();
630 artifactData.getArtifactDataDefinition().setTimeout(50);
631 Either<ArtifactData, TitanOperationStatus> updateNode4 = titanDao.updateNode(artifactData, ArtifactData.class);
632 assertTrue(updateNode4.isLeft());
633 // titanDao.commit();
635 Map<String, Object> props4 = new HashMap<>();
636 props4.put("timeout", 100);
637 Either<List<ArtifactData>, TitanOperationStatus> byCriteria4 = titanDao.getByCriteria(NodeTypeEnum.ArtifactRef,
638 props4, ArtifactData.class);
639 assertTrue(byCriteria4.isRight());
640 assertEquals("check one result returned due to titan bug", TitanOperationStatus.NOT_FOUND,
641 byCriteria4.right().value());
643 props4.put("timeout", 50);
644 byCriteria4 = titanDao.getByCriteria(NodeTypeEnum.ArtifactRef, props4, ArtifactData.class);
645 assertTrue(byCriteria4.isLeft());
651 public void testDuplicateResultUSeHasNotQueryDueToTitanBug() {
653 String name = "bbbb";
655 ResourceMetadataData resourceData1 = new ResourceMetadataData();
656 resourceData1.getMetadataDataDefinition().setUniqueId("A");
657 ((ResourceMetadataDataDefinition) resourceData1.getMetadataDataDefinition()).setAbstract(true);
658 resourceData1.getMetadataDataDefinition().setName(name);
660 Either<ResourceMetadataData, TitanOperationStatus> newNode1 = titanDao.createNode(resourceData1,
661 ResourceMetadataData.class);
662 assertTrue(newNode1.isLeft());
663 log.debug("{}", newNode1.left().value());
664 // titanDao.commit();
666 Map<String, Object> props = new HashMap<>();
667 props.put(GraphPropertiesDictionary.IS_ABSTRACT.getProperty(), true);
668 Either<List<ResourceMetadataData>, TitanOperationStatus> byCriteria = titanDao
669 .getByCriteria(NodeTypeEnum.Resource, props, ResourceMetadataData.class);
670 assertTrue(byCriteria.isLeft());
671 assertEquals("check one result returned", 1, byCriteria.left().value().size());
672 // titanDao.commit();
674 ResourceMetadataData resourceToUpdate = new ResourceMetadataData();
675 ((ResourceMetadataDataDefinition) resourceToUpdate.getMetadataDataDefinition()).setAbstract(false);
676 resourceToUpdate.getMetadataDataDefinition().setUniqueId("A");
677 Either<ResourceMetadataData, TitanOperationStatus> updateNode = titanDao.updateNode(resourceToUpdate,
678 ResourceMetadataData.class);
679 assertTrue(updateNode.isLeft());
680 // titanDao.commit();
682 // no result where isAbstract = true
683 byCriteria = titanDao.getByCriteria(NodeTypeEnum.Resource, props, ResourceMetadataData.class);
684 assertTrue(byCriteria.isRight());
685 assertEquals("check one result returned due to titan bug", TitanOperationStatus.NOT_FOUND,
686 byCriteria.right().value());
688 // one result where isAbstract != true
689 byCriteria = titanDao.getByCriteria(NodeTypeEnum.Resource, null, props, ResourceMetadataData.class);
690 assertTrue(byCriteria.isLeft());
691 assertEquals("check one result returned", 1, byCriteria.left().value().size());
693 props.put(GraphPropertiesDictionary.IS_ABSTRACT.getProperty(), false);
694 byCriteria = titanDao.getByCriteria(NodeTypeEnum.Resource, null, props, ResourceMetadataData.class);
695 assertTrue(byCriteria.isRight());
696 assertEquals("check one result returned due to titan bug", TitanOperationStatus.NOT_FOUND,
697 byCriteria.right().value());