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 com.google.gson.Gson;
24 import com.thinkaurelius.titan.core.*;
25 import com.thinkaurelius.titan.core.attribute.Text;
26 import com.thinkaurelius.titan.core.schema.TitanManagement;
27 import fj.data.Either;
28 import org.apache.commons.configuration.BaseConfiguration;
29 import org.apache.commons.lang3.tuple.ImmutablePair;
30 import org.apache.tinkerpop.gremlin.structure.Direction;
31 import org.apache.tinkerpop.gremlin.structure.Edge;
32 import org.apache.tinkerpop.gremlin.structure.Vertex;
33 import org.junit.BeforeClass;
34 import org.junit.Test;
35 import org.junit.runner.RunWith;
36 import org.openecomp.sdc.be.config.ConfigurationManager;
37 import org.openecomp.sdc.be.dao.neo4j.GraphEdgeLabels;
38 import org.openecomp.sdc.be.dao.neo4j.GraphPropertiesDictionary;
39 import org.openecomp.sdc.be.dao.titan.TitanGenericDao;
40 import org.openecomp.sdc.be.dao.titan.TitanOperationStatus;
41 import org.openecomp.sdc.be.dao.utils.UserStatusEnum;
42 import org.openecomp.sdc.be.datatypes.components.ResourceMetadataDataDefinition;
43 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
44 import org.openecomp.sdc.be.resources.data.*;
45 import org.openecomp.sdc.common.api.ConfigurationSource;
46 import org.openecomp.sdc.common.api.UserRoleEnum;
47 import org.openecomp.sdc.common.impl.ExternalConfiguration;
48 import org.openecomp.sdc.common.impl.FSConfigurationSource;
49 import org.slf4j.Logger;
50 import org.slf4j.LoggerFactory;
51 import org.springframework.test.context.ContextConfiguration;
52 import org.springframework.test.context.TestExecutionListeners;
53 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
54 import org.springframework.test.context.support.DependencyInjectionTestExecutionListener;
55 import org.springframework.test.context.support.DirtiesContextTestExecutionListener;
56 import org.springframework.test.context.transaction.TransactionalTestExecutionListener;
58 import javax.annotation.Resource;
59 import java.util.HashMap;
60 import java.util.Iterator;
61 import java.util.List;
64 import static org.junit.Assert.assertEquals;
65 import static org.junit.Assert.assertTrue;
67 @RunWith(SpringJUnit4ClassRunner.class)
68 @ContextConfiguration("classpath:application-context-test.xml")
69 @TestExecutionListeners(listeners = { DependencyInjectionTestExecutionListener.class,
70 DirtiesContextTestExecutionListener.class, TransactionalTestExecutionListener.class })
71 public class TitanGenericDaoTest {
72 private static Logger log = LoggerFactory.getLogger(TitanGenericDaoTest.class.getName());
73 private static ConfigurationManager configurationManager;
75 @Resource(name = "titan-generic-dao")
76 private TitanGenericDao titanDao;
79 public static void setupBeforeClass() {
80 ExternalConfiguration.setAppName("catalog-dao");
81 String appConfigDir = "src/test/resources/config/catalog-dao";
82 ConfigurationSource configurationSource = new FSConfigurationSource(ExternalConfiguration.getChangeListener(),
84 configurationManager = new ConfigurationManager(configurationSource);
85 configurationManager.getConfiguration()
86 .setTitanCfgFile("../catalog-be/src/main/resources/config/titan.properties");
87 configurationManager.getConfiguration().setTitanInMemoryGraph(true);
91 public void testcheckEdgeProps() {
92 TitanGraph graph = titanDao.getGraph().left().value();
93 TitanVertex v1 = graph.addVertex();
94 v1.property("prop1", 123);
95 TitanVertex v2 = graph.addVertex();
96 v2.property("prop1", 456);
97 TitanEdge addEdge = v1.addEdge("label11", v2);
98 addEdge.property("edgeProp", "my prop edge");
101 Either<TitanVertex, TitanOperationStatus> v11 = titanDao.getVertexByProperty("prop1", 123);
102 Iterator<Edge> edges = v11.left().value().edges(Direction.OUT, "label11");
103 Edge edge = edges.next();
104 // String value = (String)edge.value("edgeProp");
105 String value = (String) titanDao.getProperty(edge, "edgeProp");
111 public void testCrudNode() {
113 String id = "userId12345abc";
114 UserData userData = new UserData("Myname123", "Mylastname", id, "email123", "Tester",
115 UserStatusEnum.ACTIVE.name(), null);
117 Either<UserData, TitanOperationStatus> newNode = titanDao.createNode(userData, UserData.class);
119 assertTrue(newNode.isLeft());
121 log.debug("{}", newNode.left().value());
125 ImmutablePair<String, Object> keyValueId = userData.getKeyValueId();
126 Either<UserData, TitanOperationStatus> node = titanDao.getNode(keyValueId.getKey(), keyValueId.getValue(),
129 assertTrue(node.isLeft());
130 log.debug("{}", node.left().value());
132 userData.setRole("Designer");
133 node = titanDao.updateNode(userData, UserData.class);
134 assertTrue(node.isLeft());
135 log.debug("{}", node.left().value());
136 assertEquals(null, "Designer", node.left().value().getRole());
139 node = titanDao.deleteNode(userData, UserData.class);
140 assertTrue(node.isLeft());
141 log.debug("{}", node.left().value());
144 node = titanDao.getNode(keyValueId.getKey(), keyValueId.getValue(), UserData.class);
145 assertTrue(node.isRight());
146 log.debug("{}", node.right().value());
151 public void testGetByCategoryAndAll() {
154 String id = "userId12345abc";
155 UserData userData1 = new UserData("Myname123", "Mylastname", id, "email123", "Tester",
156 UserStatusEnum.ACTIVE.name(), null);
158 Either<UserData, TitanOperationStatus> node1 = titanDao.createNode(userData1, UserData.class);
159 assertTrue(node1.isLeft());
160 log.debug("{}", node1.left().value());
162 id = "userIddfkoer45abc";
163 UserData userData2 = new UserData("Mynadyhme123", "Mylasghtname", id, "emaighdl123", "Designer",
164 UserStatusEnum.ACTIVE.name(), null);
165 Either<UserData, TitanOperationStatus> node2 = titanDao.createNode(userData2, UserData.class);
166 assertTrue(node2.isLeft());
167 log.debug("{}", node2.left().value());
171 ImmutablePair<String, Object> keyValueId1 = userData1.getKeyValueId();
173 Either<UserData, TitanOperationStatus> node = titanDao.getNode(keyValueId1.getKey(), keyValueId1.getValue(),
175 assertTrue(node.isLeft());
176 log.debug("{}", node.left().value());
179 // get all must be 2 + 1 default user = 3
180 Either<List<UserData>, TitanOperationStatus> all = titanDao.getAll(NodeTypeEnum.User, UserData.class);
181 assertTrue(all.isLeft());
182 assertTrue(all.left().value().size() > 0);
184 log.debug("{}", all.left().value());
186 Map<String, Object> props = new HashMap<>();
188 props.put(keyValueId1.getKey(), keyValueId1.getValue());
190 // get by criteria. must be 1
191 Either<List<UserData>, TitanOperationStatus> byCriteria = titanDao.getByCriteria(NodeTypeEnum.User, props,
193 assertTrue(byCriteria.isLeft());
194 assertEquals(1, byCriteria.left().value().size());
196 log.debug("{}", byCriteria.left().value());
199 node = titanDao.deleteNode(userData1, UserData.class);
200 assertTrue(node.isLeft());
201 node = titanDao.deleteNode(userData2, UserData.class);
202 assertTrue(node.isLeft());
206 public void testGetEdgesForNode() {
207 String id = "userId12345abc";
208 UserData userData = new UserData("Myname123", "Mylastname", id, "email123", UserRoleEnum.ADMIN.name(),
209 UserStatusEnum.ACTIVE.name(), null);
210 titanDao.createNode(userData, UserData.class);
211 ResourceMetadataData resourceData = new ResourceMetadataData();
212 resourceData.getMetadataDataDefinition().setName("resourceForLock");
213 resourceData.getMetadataDataDefinition().setVersion("0.1");
214 resourceData.getMetadataDataDefinition().setState("newState");
215 resourceData.getMetadataDataDefinition().setUniqueId(resourceData.getMetadataDataDefinition().getName() + "."
216 + resourceData.getMetadataDataDefinition().getVersion());
218 titanDao.createNode(resourceData, ResourceMetadataData.class);
219 titanDao.createRelation(userData, resourceData, GraphEdgeLabels.LAST_MODIFIER, null);
222 Either<List<Edge>, TitanOperationStatus> eitherEdges = titanDao.getEdgesForNode(userData, Direction.OUT);
223 assertTrue(eitherEdges.isLeft());
224 assertEquals(1, eitherEdges.left().value().size());
226 eitherEdges = titanDao.getEdgesForNode(userData, Direction.IN);
227 assertTrue(eitherEdges.isLeft());
228 assertEquals(0, eitherEdges.left().value().size());
230 eitherEdges = titanDao.getEdgesForNode(resourceData, Direction.OUT);
231 assertTrue(eitherEdges.isLeft());
232 assertEquals(0, eitherEdges.left().value().size());
234 eitherEdges = titanDao.getEdgesForNode(resourceData, Direction.IN);
235 assertTrue(eitherEdges.isLeft());
236 assertEquals(1, eitherEdges.left().value().size());
238 eitherEdges = titanDao.getEdgesForNode(resourceData, Direction.BOTH);
239 assertTrue(eitherEdges.isLeft());
240 assertEquals(1, eitherEdges.left().value().size());
242 eitherEdges = titanDao.getEdgesForNode(userData, Direction.BOTH);
243 assertTrue(eitherEdges.isLeft());
244 assertEquals(1, eitherEdges.left().value().size());
246 titanDao.deleteNode(userData, UserData.class);
247 titanDao.deleteNode(resourceData, ResourceMetadataData.class);
252 public void testLockElement() {
254 ResourceMetadataData resourceData = new ResourceMetadataData();
256 resourceData.getMetadataDataDefinition().setName("resourceForLock");
257 resourceData.getMetadataDataDefinition().setVersion("0.1");
258 resourceData.getMetadataDataDefinition().setState("newState");
259 resourceData.getMetadataDataDefinition().setUniqueId(resourceData.getMetadataDataDefinition().getName() + "."
260 + resourceData.getMetadataDataDefinition().getVersion());
262 Either<ResourceMetadataData, TitanOperationStatus> resource1 = titanDao.createNode(resourceData,
263 ResourceMetadataData.class);
264 assertTrue(resource1.isLeft());
266 String lockId = "lock_" + resourceData.getLabel() + "_" + resource1.left().value().getUniqueId();
268 Either<GraphNodeLock, TitanOperationStatus> nodeLock = titanDao
269 .getNode(GraphPropertiesDictionary.UNIQUE_ID.getProperty(), lockId, GraphNodeLock.class);
270 assertTrue(nodeLock.isRight());
271 assertEquals(TitanOperationStatus.NOT_FOUND, nodeLock.right().value());
273 TitanOperationStatus status = titanDao.lockElement(resourceData);
274 assertEquals(TitanOperationStatus.OK, status);
276 nodeLock = titanDao.getNode(GraphPropertiesDictionary.UNIQUE_ID.getProperty(), lockId, GraphNodeLock.class);
277 assertTrue(nodeLock.isLeft());
278 assertEquals(lockId, nodeLock.left().value().getUniqueId());
282 status = titanDao.lockElement(resourceData);
283 assertEquals(TitanOperationStatus.ALREADY_LOCKED, status);
285 status = titanDao.releaseElement(resourceData);
286 assertEquals(TitanOperationStatus.OK, status);
288 nodeLock = titanDao.getNode(GraphPropertiesDictionary.UNIQUE_ID.getProperty(), lockId, GraphNodeLock.class);
289 assertTrue(nodeLock.isRight());
290 assertEquals(TitanOperationStatus.NOT_FOUND, nodeLock.right().value());
291 titanDao.deleteNode(resourceData, ResourceMetadataData.class);
297 public void testReLockElement() throws InterruptedException {
299 ResourceMetadataData resourceData = new ResourceMetadataData();
301 resourceData.getMetadataDataDefinition().setName("resourceForReLock");
302 resourceData.getMetadataDataDefinition().setVersion("0.1");
303 resourceData.getMetadataDataDefinition().setState("newState");
304 resourceData.getMetadataDataDefinition().setUniqueId(resourceData.getMetadataDataDefinition().getName() + "."
305 + resourceData.getMetadataDataDefinition().getVersion());
307 Either<ResourceMetadataData, TitanOperationStatus> resource1 = titanDao.createNode(resourceData,
308 ResourceMetadataData.class);
309 assertTrue(resource1.isLeft());
311 String lockId = "lock_" + resourceData.getLabel() + "_" + resource1.left().value().getUniqueId();
313 Either<GraphNodeLock, TitanOperationStatus> nodeLock = titanDao
314 .getNode(GraphPropertiesDictionary.UNIQUE_ID.getProperty(), lockId, GraphNodeLock.class);
315 assertTrue(nodeLock.isRight());
316 assertEquals(TitanOperationStatus.NOT_FOUND, nodeLock.right().value());
319 TitanOperationStatus status = titanDao.lockElement(resourceData);
320 assertEquals(TitanOperationStatus.OK, status);
322 nodeLock = titanDao.getNode(GraphPropertiesDictionary.UNIQUE_ID.getProperty(), lockId, GraphNodeLock.class);
323 assertTrue(nodeLock.isLeft());
324 assertEquals(lockId, nodeLock.left().value().getUniqueId());
325 long time1 = nodeLock.left().value().getTime();
330 configurationManager.getConfiguration().setTitanLockTimeout(2L);
334 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());
341 long time2 = nodeLock.left().value().getTime();
343 assertTrue(time2 > time1);
345 status = titanDao.releaseElement(resourceData);
346 assertEquals(TitanOperationStatus.OK, status);
348 nodeLock = titanDao.getNode(GraphPropertiesDictionary.UNIQUE_ID.getProperty(), lockId, GraphNodeLock.class);
349 assertTrue(nodeLock.isRight());
350 assertEquals(TitanOperationStatus.NOT_FOUND, nodeLock.right().value());
352 titanDao.deleteNode(resourceData, ResourceMetadataData.class);
358 public void testBoolean() {
359 ResourceMetadataData resourceData = new ResourceMetadataData();
361 resourceData.getMetadataDataDefinition().setName("resourceForLock");
362 resourceData.getMetadataDataDefinition().setVersion("0.1");
363 resourceData.getMetadataDataDefinition().setState("NOT_CERTIFIED_CHECKOUT");
364 resourceData.getMetadataDataDefinition().setHighestVersion(true);
365 resourceData.getMetadataDataDefinition().setUniqueId(resourceData.getMetadataDataDefinition().getName() + "."
366 + resourceData.getMetadataDataDefinition().getVersion());
368 Either<ResourceMetadataData, TitanOperationStatus> resource1 = titanDao.createNode(resourceData,
369 ResourceMetadataData.class);
370 assertTrue(resource1.isLeft());
372 resourceData = new ResourceMetadataData();
374 resourceData.getMetadataDataDefinition().setName("resourceForLock");
375 resourceData.getMetadataDataDefinition().setVersion("0.2");
376 resourceData.getMetadataDataDefinition().setState("NOT_CERTIFIED_CHECKOUT");
377 resourceData.getMetadataDataDefinition().setHighestVersion(false);
378 resourceData.getMetadataDataDefinition().setUniqueId(resourceData.getMetadataDataDefinition().getName() + "."
379 + resourceData.getMetadataDataDefinition().getVersion());
381 Either<ResourceMetadataData, TitanOperationStatus> resource2 = titanDao.createNode(resourceData,
382 ResourceMetadataData.class);
385 Map<String, Object> props = new HashMap<>();
387 props.put(GraphPropertiesDictionary.STATE.getProperty(), "NOT_CERTIFIED_CHECKOUT");
388 props.put("name", "resourceForLock");
389 props.put(GraphPropertiesDictionary.IS_HIGHEST_VERSION.getProperty(), false);
391 // get by criteria. must be 1
392 Either<List<ResourceMetadataData>, TitanOperationStatus> byCriteria = titanDao
393 .getByCriteria(NodeTypeEnum.Resource, props, ResourceMetadataData.class);
394 assertTrue(byCriteria.isLeft());
396 titanDao.deleteNode(resource1.left().value(), ResourceMetadataData.class);
398 titanDao.deleteNode(resource2.left().value(), ResourceMetadataData.class);
403 public void testStringSearch() {
406 BaseConfiguration conf = new BaseConfiguration();
407 conf.setProperty("storage.backend", "inmemory");
408 graph = TitanFactory.open(conf);
410 // TitanManagement graphMgt = graph.getManagementSystem();
411 TitanManagement graphMgt = graph.openManagement();
412 PropertyKey propKey = graphMgt.makePropertyKey("string1").dataType(String.class).make();
413 graphMgt.buildIndex("string1", Vertex.class).addKey(propKey).unique().buildCompositeIndex();
415 propKey = graphMgt.makePropertyKey("string2").dataType(String.class).make();
417 // graphMgt.buildIndex("string2", Vertex.class).addKey(propKey,
418 // Mapping.TEXT.getParameter()).buildMixedIndex("search");
419 graphMgt.buildIndex("string2", Vertex.class).addKey(propKey).unique().buildCompositeIndex();
422 // TitanVertex v = graph.addVertex();
423 // v.addProperty("string1", "My new String 1");
424 // v.addProperty("string2", "String11");
427 // v = graph.addVertex();
428 // v.addProperty("string1", "my new string 1");
429 // v.addProperty("string2", "string11");
432 // System.out.println("First index search - case");
434 // Iterable<Vertex> vertices = graph.getVertices("string1", "My new
436 // Iterator<Vertex> iter = vertices.iterator();
437 // while ( iter.hasNext() ){
438 // Vertex ver = iter.next();
439 // System.out.println(com.tinkerpop.blueprints.util.ElementHelper.getProperties(ver));
441 // System.out.println("First index search non case");
443 // vertices = graph.getVertices("string1", "my new string 1");
444 // iter = vertices.iterator();
445 // while ( iter.hasNext() ){
446 // Vertex ver = iter.next();
447 // System.out.println(com.tinkerpop.blueprints.util.ElementHelper.getProperties(ver));
449 // System.out.println("Second index search case");
451 // vertices = graph.getVertices("string2", "String11");
452 // iter = vertices.iterator();
453 // while ( iter.hasNext() ){
454 // Vertex ver = iter.next();
455 // System.out.println(com.tinkerpop.blueprints.util.ElementHelper.getProperties(ver));
457 // System.out.println("second index search non case");
459 // vertices = graph.getVertices("string2", "string11");
460 // iter = vertices.iterator();
461 // while ( iter.hasNext() ){
462 // Vertex ver = iter.next();
463 // System.out.println(com.tinkerpop.blueprints.util.ElementHelper.getProperties(ver));
465 // System.out.println("Query index search case");
466 // vertices = graph.query().has("string1", "My new String
468 // iter = vertices.iterator();
469 // while ( iter.hasNext() ){
470 // Vertex ver = iter.next();
471 // System.out.println(com.tinkerpop.blueprints.util.ElementHelper.getProperties(ver));
473 // System.out.println("Query index search non case");
474 // vertices = graph.query().has("string1", "my new string
476 // iter = vertices.iterator();
477 // while ( iter.hasNext() ){
478 // Vertex ver = iter.next();
479 // System.out.println(com.tinkerpop.blueprints.util.ElementHelper.getProperties(ver));
482 log.debug("**** predicat index search non case");
483 Iterable<TitanVertex> vertices = graph.query().has("string1", Text.REGEX, "my new string 1").vertices();
484 Iterator<TitanVertex> iter = vertices.iterator();
485 while (iter.hasNext()) {
486 Vertex ver = iter.next();
487 // System.out.println(com.tinkerpop.blueprints.util.ElementHelper.getProperties(ver));
488 log.debug("{}", titanDao.getProperties(ver));
494 public void testDuplicateResultDueToTitanBug() {
496 ResourceMetadataData resourceData1 = new ResourceMetadataData();
497 resourceData1.getMetadataDataDefinition().setUniqueId("A");
498 ((ResourceMetadataDataDefinition) resourceData1.getMetadataDataDefinition()).setAbstract(true);
499 resourceData1.getMetadataDataDefinition().setName("aaaa");
501 Either<ResourceMetadataData, TitanOperationStatus> newNode1 = titanDao.createNode(resourceData1,
502 ResourceMetadataData.class);
503 assertTrue(newNode1.isLeft());
504 log.debug("{}", newNode1.left().value());
505 // titanDao.commit();
507 Map<String, Object> props = new HashMap<>();
508 props.put(GraphPropertiesDictionary.IS_ABSTRACT.getProperty(), true);
509 Either<List<ResourceMetadataData>, TitanOperationStatus> byCriteria = titanDao
510 .getByCriteria(NodeTypeEnum.Resource, props, ResourceMetadataData.class);
511 assertTrue(byCriteria.isLeft());
512 assertEquals("check one result returned", 1, byCriteria.left().value().size());
513 // titanDao.commit();
515 ResourceMetadataData resourceToUpdate = new ResourceMetadataData();
516 ((ResourceMetadataDataDefinition) resourceToUpdate.getMetadataDataDefinition()).setAbstract(false);
517 resourceToUpdate.getMetadataDataDefinition().setUniqueId("A");
518 Either<ResourceMetadataData, TitanOperationStatus> updateNode = titanDao.updateNode(resourceToUpdate,
519 ResourceMetadataData.class);
520 assertTrue(updateNode.isLeft());
521 // titanDao.commit();
523 byCriteria = titanDao.getByCriteria(NodeTypeEnum.Resource, props, ResourceMetadataData.class);
524 assertTrue(byCriteria.isRight());
525 assertEquals("check one result returned due to titan bug", TitanOperationStatus.NOT_FOUND,
526 byCriteria.right().value());
528 AdditionalInfoParameterData infoParameterData = new AdditionalInfoParameterData();
529 infoParameterData.getAdditionalInfoParameterDataDefinition().setUniqueId("123");
530 Map<String, String> idToKey = new HashMap<>();
531 idToKey.put("key1", "value1");
532 infoParameterData.setIdToKey(idToKey);
534 Either<AdditionalInfoParameterData, TitanOperationStatus> newNode2 = titanDao.createNode(infoParameterData,
535 AdditionalInfoParameterData.class);
536 assertTrue(newNode2.isLeft());
537 log.debug("{}", newNode2.left().value());
538 // titanDao.commit();
540 Map<String, String> idToKey2 = new HashMap<>();
541 idToKey2.put("key1", "value2");
543 Map<String, Object> props2 = new HashMap<>();
544 props2.put(GraphPropertiesDictionary.UNIQUE_ID.getProperty(), "123");
545 Gson gson = new Gson();
546 props2.put(GraphPropertiesDictionary.ADDITIONAL_INFO_ID_TO_KEY.getProperty(), gson.toJson(idToKey2));
547 // props2.put(GraphPropertiesDictionary.ADDITIONAL_INFO_ID_TO_KEY.getProperty(),
550 Either<List<AdditionalInfoParameterData>, TitanOperationStatus> byCriteria2 = titanDao
551 .getByCriteria(NodeTypeEnum.AdditionalInfoParameters, props2, AdditionalInfoParameterData.class);
552 assertTrue(byCriteria2.isRight());
553 assertEquals("check one result returned due to titan bug", TitanOperationStatus.NOT_FOUND,
554 byCriteria2.right().value());
556 infoParameterData.setIdToKey(idToKey2);
558 Either<AdditionalInfoParameterData, TitanOperationStatus> updateNode2 = titanDao.updateNode(infoParameterData,
559 AdditionalInfoParameterData.class);
560 assertTrue(updateNode2.isLeft());
561 // titanDao.commit();
563 props2.put(GraphPropertiesDictionary.ADDITIONAL_INFO_ID_TO_KEY.getProperty(), idToKey);
564 byCriteria2 = titanDao.getByCriteria(NodeTypeEnum.AdditionalInfoParameters, props2,
565 AdditionalInfoParameterData.class);
566 assertTrue(byCriteria2.isRight());
567 assertEquals("check one result returned due to titan bug", TitanOperationStatus.NOT_FOUND,
568 byCriteria2.right().value());
570 ComponentInstanceData resourceInstanceData = new ComponentInstanceData();
571 resourceInstanceData.getComponentInstDataDefinition().setUniqueId("ri123");
572 resourceInstanceData.getComponentInstDataDefinition().setPosX("22");
573 resourceInstanceData.getComponentInstDataDefinition().setName("myresource_1");
575 Either<ComponentInstanceData, TitanOperationStatus> newNode3 = titanDao.createNode(resourceInstanceData,
576 ComponentInstanceData.class);
577 assertTrue(newNode3.isLeft());
578 log.debug("{}", newNode3.left().value());
579 // titanDao.commit();
581 resourceInstanceData.getComponentInstDataDefinition().setPosX("50");
582 Either<ComponentInstanceData, TitanOperationStatus> updateNode3 = titanDao.updateNode(resourceInstanceData,
583 ComponentInstanceData.class);
584 assertTrue(updateNode3.isLeft());
585 // titanDao.commit();
587 resourceInstanceData.getComponentInstDataDefinition().setName("myresource_2");
588 updateNode3 = titanDao.updateNode(resourceInstanceData, ComponentInstanceData.class);
589 assertTrue(updateNode3.isLeft());
590 // titanDao.commit();
592 Map<String, Object> props3 = new HashMap<>();
593 props3.put("positionX", "22");
594 Either<List<ComponentInstanceData>, TitanOperationStatus> byCriteria3 = titanDao
595 .getByCriteria(NodeTypeEnum.ResourceInstance, props3, ComponentInstanceData.class);
596 assertTrue(byCriteria3.isRight());
597 assertEquals("check one result returned due to titan bug", TitanOperationStatus.NOT_FOUND,
598 byCriteria3.right().value());
600 props3.put("positionX", "50");
601 byCriteria3 = titanDao.getByCriteria(NodeTypeEnum.ResourceInstance, props3, ComponentInstanceData.class);
602 assertTrue(byCriteria3.isLeft());
604 /////////////////////////// check integer ////////////////////////
606 ArtifactData artifactData = new ArtifactData();
607 artifactData.getArtifactDataDefinition().setUniqueId("ad234");
608 artifactData.getArtifactDataDefinition().setTimeout(100);
610 Either<ArtifactData, TitanOperationStatus> newNode4 = titanDao.createNode(artifactData, ArtifactData.class);
611 assertTrue(newNode4.isLeft());
612 log.debug("{}", newNode4.left().value());
613 // titanDao.commit();
615 artifactData.getArtifactDataDefinition().setTimeout(50);
616 Either<ArtifactData, TitanOperationStatus> updateNode4 = titanDao.updateNode(artifactData, ArtifactData.class);
617 assertTrue(updateNode4.isLeft());
618 // titanDao.commit();
620 Map<String, Object> props4 = new HashMap<>();
621 props4.put("timeout", 100);
622 Either<List<ArtifactData>, TitanOperationStatus> byCriteria4 = titanDao.getByCriteria(NodeTypeEnum.ArtifactRef,
623 props4, ArtifactData.class);
624 assertTrue(byCriteria4.isRight());
625 assertEquals("check one result returned due to titan bug", TitanOperationStatus.NOT_FOUND,
626 byCriteria4.right().value());
628 props4.put("timeout", 50);
629 byCriteria4 = titanDao.getByCriteria(NodeTypeEnum.ArtifactRef, props4, ArtifactData.class);
630 assertTrue(byCriteria4.isLeft());
636 public void testDuplicateResultUSeHasNotQueryDueToTitanBug() {
638 String name = "bbbb";
640 ResourceMetadataData resourceData1 = new ResourceMetadataData();
641 resourceData1.getMetadataDataDefinition().setUniqueId("A");
642 ((ResourceMetadataDataDefinition) resourceData1.getMetadataDataDefinition()).setAbstract(true);
643 resourceData1.getMetadataDataDefinition().setName(name);
645 Either<ResourceMetadataData, TitanOperationStatus> newNode1 = titanDao.createNode(resourceData1,
646 ResourceMetadataData.class);
647 assertTrue(newNode1.isLeft());
648 log.debug("{}", newNode1.left().value());
649 // titanDao.commit();
651 Map<String, Object> props = new HashMap<>();
652 props.put(GraphPropertiesDictionary.IS_ABSTRACT.getProperty(), true);
653 Either<List<ResourceMetadataData>, TitanOperationStatus> byCriteria = titanDao
654 .getByCriteria(NodeTypeEnum.Resource, props, ResourceMetadataData.class);
655 assertTrue(byCriteria.isLeft());
656 assertEquals("check one result returned", 1, byCriteria.left().value().size());
657 // titanDao.commit();
659 ResourceMetadataData resourceToUpdate = new ResourceMetadataData();
660 ((ResourceMetadataDataDefinition) resourceToUpdate.getMetadataDataDefinition()).setAbstract(false);
661 resourceToUpdate.getMetadataDataDefinition().setUniqueId("A");
662 Either<ResourceMetadataData, TitanOperationStatus> updateNode = titanDao.updateNode(resourceToUpdate,
663 ResourceMetadataData.class);
664 assertTrue(updateNode.isLeft());
665 // titanDao.commit();
667 // no result where isAbstract = true
668 byCriteria = titanDao.getByCriteria(NodeTypeEnum.Resource, props, ResourceMetadataData.class);
669 assertTrue(byCriteria.isRight());
670 assertEquals("check one result returned due to titan bug", TitanOperationStatus.NOT_FOUND,
671 byCriteria.right().value());
673 // one result where isAbstract != true
674 byCriteria = titanDao.getByCriteria(NodeTypeEnum.Resource, null, props, ResourceMetadataData.class);
675 assertTrue(byCriteria.isLeft());
676 assertEquals("check one result returned", 1, byCriteria.left().value().size());
678 props.put(GraphPropertiesDictionary.IS_ABSTRACT.getProperty(), false);
679 byCriteria = titanDao.getByCriteria(NodeTypeEnum.Resource, null, props, ResourceMetadataData.class);
680 assertTrue(byCriteria.isRight());
681 assertEquals("check one result returned due to titan bug", TitanOperationStatus.NOT_FOUND,
682 byCriteria.right().value());