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 com.google.gson.Gson;
27 import fj.data.Either;
28 import java.util.HashMap;
29 import java.util.Iterator;
30 import java.util.List;
32 import javax.annotation.Resource;
33 import org.apache.commons.configuration.BaseConfiguration;
34 import org.apache.commons.lang3.tuple.ImmutablePair;
35 import org.apache.tinkerpop.gremlin.structure.Direction;
36 import org.apache.tinkerpop.gremlin.structure.Edge;
37 import org.apache.tinkerpop.gremlin.structure.Vertex;
38 import org.janusgraph.core.JanusGraph;
39 import org.janusgraph.core.JanusGraphEdge;
40 import org.janusgraph.core.JanusGraphFactory;
41 import org.janusgraph.core.JanusGraphVertex;
42 import org.janusgraph.core.PropertyKey;
43 import org.janusgraph.core.attribute.Text;
44 import org.janusgraph.core.schema.JanusGraphManagement;
45 import org.junit.jupiter.api.BeforeAll;
46 import org.junit.jupiter.api.Test;
47 import org.openecomp.sdc.be.config.ConfigurationManager;
48 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphGenericDao;
49 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus;
50 import org.openecomp.sdc.be.dao.neo4j.GraphEdgeLabels;
51 import org.openecomp.sdc.be.dao.neo4j.GraphPropertiesDictionary;
52 import org.openecomp.sdc.be.dao.utils.UserStatusEnum;
53 import org.openecomp.sdc.be.datatypes.components.ResourceMetadataDataDefinition;
54 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
55 import org.openecomp.sdc.be.resources.data.AdditionalInfoParameterData;
56 import org.openecomp.sdc.be.resources.data.ArtifactData;
57 import org.openecomp.sdc.be.resources.data.ComponentInstanceData;
58 import org.openecomp.sdc.be.resources.data.GraphNodeLock;
59 import org.openecomp.sdc.be.resources.data.ResourceMetadataData;
60 import org.openecomp.sdc.be.resources.data.UserData;
61 import org.openecomp.sdc.common.api.ConfigurationSource;
62 import org.openecomp.sdc.common.api.UserRoleEnum;
63 import org.openecomp.sdc.common.impl.ExternalConfiguration;
64 import org.openecomp.sdc.common.impl.FSConfigurationSource;
65 import org.slf4j.Logger;
66 import org.slf4j.LoggerFactory;
67 import org.springframework.test.context.TestExecutionListeners;
68 import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
69 import org.springframework.test.context.support.DependencyInjectionTestExecutionListener;
70 import org.springframework.test.context.support.DirtiesContextTestExecutionListener;
71 import org.springframework.test.context.transaction.TransactionalTestExecutionListener;
73 @SpringJUnitConfig(locations = "classpath:application-context-test.xml")
74 @TestExecutionListeners(listeners = {DependencyInjectionTestExecutionListener.class,
75 DirtiesContextTestExecutionListener.class, TransactionalTestExecutionListener.class})
76 public class JanusGraphGenericDaoTest {
78 private static Logger log = LoggerFactory.getLogger(JanusGraphGenericDaoTest.class.getName());
79 private static ConfigurationManager configurationManager;
81 @Resource(name = "janusgraph-generic-dao")
82 private JanusGraphGenericDao janusGraphDao;
85 public static void setupBeforeClass() {
86 ExternalConfiguration.setAppName("catalog-dao");
87 String appConfigDir = "src/test/resources/config/catalog-dao";
88 ConfigurationSource configurationSource = new FSConfigurationSource(ExternalConfiguration.getChangeListener(),
90 configurationManager = new ConfigurationManager(configurationSource);
91 configurationManager.getConfiguration().setJanusGraphCfgFile("../catalog-be/src/main/resources/config/janusgraph.properties");
92 configurationManager.getConfiguration().setJanusGraphInMemoryGraph(true);
96 public void testcheckEdgeProps() {
97 JanusGraph graph = janusGraphDao.getGraph().left().value();
98 JanusGraphVertex v1 = graph.addVertex();
99 v1.property("prop1", 123);
100 JanusGraphVertex v2 = graph.addVertex();
101 v2.property("prop1", 456);
102 JanusGraphEdge addEdge = v1.addEdge("label11", v2);
103 addEdge.property("edgeProp", "my prop edge");
106 Either<JanusGraphVertex, JanusGraphOperationStatus> v11 = janusGraphDao.getVertexByProperty("prop1", 123);
107 Iterator<Edge> edges = v11.left().value().edges(Direction.OUT, "label11");
108 Edge edge = edges.next();
109 // String value = (String)edge.value("edgeProp");
110 String value = (String) janusGraphDao.getProperty(edge, "edgeProp");
116 public void testCrudNode() {
118 String id = "userId12345abc";
119 UserData userData = new UserData("Myname123", "Mylastname", id, "email123", "Tester",
120 UserStatusEnum.ACTIVE.name(), null);
122 Either<UserData, JanusGraphOperationStatus> newNode = janusGraphDao.createNode(userData, UserData.class);
124 assertTrue(newNode.isLeft());
126 log.debug("{}", newNode.left().value());
128 janusGraphDao.commit();
130 ImmutablePair<String, Object> keyValueId = userData.getKeyValueId();
131 Either<UserData, JanusGraphOperationStatus> node = janusGraphDao.getNode(keyValueId.getKey(), keyValueId.getValue(),
133 janusGraphDao.commit();
134 assertTrue(node.isLeft());
135 log.debug("{}", node.left().value());
137 userData.setRole("Designer");
138 node = janusGraphDao.updateNode(userData, UserData.class);
139 assertTrue(node.isLeft());
140 log.debug("{}", node.left().value());
141 assertEquals(null, "Designer", node.left().value().getRole());
142 janusGraphDao.commit();
144 node = janusGraphDao.deleteNode(userData, UserData.class);
145 assertTrue(node.isLeft());
146 log.debug("{}", node.left().value());
147 janusGraphDao.commit();
149 node = janusGraphDao.getNode(keyValueId.getKey(), keyValueId.getValue(), UserData.class);
150 assertTrue(node.isRight());
151 log.debug("{}", node.right().value());
156 public void testGetByCategoryAndAll() {
159 String id = "userId12345abc";
160 UserData userData1 = new UserData("Myname123", "Mylastname", id, "email123", "Tester",
161 UserStatusEnum.ACTIVE.name(), null);
163 Either<UserData, JanusGraphOperationStatus> node1 = janusGraphDao.createNode(userData1, UserData.class);
164 assertTrue(node1.isLeft());
165 log.debug("{}", node1.left().value());
167 id = "userIddfkoer45abc";
168 UserData userData2 = new UserData("Mynadyhme123", "Mylasghtname", id, "emaighdl123", "Designer",
169 UserStatusEnum.ACTIVE.name(), null);
170 Either<UserData, JanusGraphOperationStatus> node2 = janusGraphDao.createNode(userData2, UserData.class);
171 assertTrue(node2.isLeft());
172 log.debug("{}", node2.left().value());
174 janusGraphDao.commit();
176 ImmutablePair<String, Object> keyValueId1 = userData1.getKeyValueId();
178 Either<UserData, JanusGraphOperationStatus> node = janusGraphDao.getNode(keyValueId1.getKey(), keyValueId1.getValue(),
180 assertTrue(node.isLeft());
181 log.debug("{}", node.left().value());
182 janusGraphDao.commit();
184 // get all must be 2 + 1 default user = 3
185 Either<List<UserData>, JanusGraphOperationStatus> all = janusGraphDao.getAll(NodeTypeEnum.User, UserData.class);
186 assertTrue(all.isLeft());
187 assertTrue(all.left().value().size() > 0);
189 log.debug("{}", all.left().value());
191 Map<String, Object> props = new HashMap<>();
193 props.put(keyValueId1.getKey(), keyValueId1.getValue());
195 // get by criteria. must be 1
196 Either<List<UserData>, JanusGraphOperationStatus> byCriteria = janusGraphDao.getByCriteria(NodeTypeEnum.User, props,
198 assertTrue(byCriteria.isLeft());
199 assertEquals(1, byCriteria.left().value().size());
201 log.debug("{}", byCriteria.left().value());
204 node = janusGraphDao.deleteNode(userData1, UserData.class);
205 assertTrue(node.isLeft());
206 node = janusGraphDao.deleteNode(userData2, UserData.class);
207 assertTrue(node.isLeft());
211 public void testGetEdgesForNode() {
212 String id = "userId12345abc";
213 UserData userData = new UserData("Myname123", "Mylastname", id, "email123", UserRoleEnum.ADMIN.name(),
214 UserStatusEnum.ACTIVE.name(), null);
215 janusGraphDao.createNode(userData, UserData.class);
216 ResourceMetadataData resourceData = new ResourceMetadataData();
217 resourceData.getMetadataDataDefinition().setName("resourceForLock");
218 resourceData.getMetadataDataDefinition().setVersion("0.1");
219 resourceData.getMetadataDataDefinition().setState("newState");
220 resourceData.getMetadataDataDefinition().setUniqueId(resourceData.getMetadataDataDefinition().getName() + "."
221 + resourceData.getMetadataDataDefinition().getVersion());
223 janusGraphDao.createNode(resourceData, ResourceMetadataData.class);
224 janusGraphDao.createRelation(userData, resourceData, GraphEdgeLabels.LAST_MODIFIER, null);
225 janusGraphDao.commit();
227 Either<List<Edge>, JanusGraphOperationStatus> eitherEdges = janusGraphDao.getEdgesForNode(userData, Direction.OUT);
228 assertTrue(eitherEdges.isLeft());
229 assertEquals(1, eitherEdges.left().value().size());
231 eitherEdges = janusGraphDao.getEdgesForNode(userData, Direction.IN);
232 assertTrue(eitherEdges.isLeft());
233 assertEquals(0, eitherEdges.left().value().size());
235 eitherEdges = janusGraphDao.getEdgesForNode(resourceData, Direction.OUT);
236 assertTrue(eitherEdges.isLeft());
237 assertEquals(0, eitherEdges.left().value().size());
239 eitherEdges = janusGraphDao.getEdgesForNode(resourceData, Direction.IN);
240 assertTrue(eitherEdges.isLeft());
241 assertEquals(1, eitherEdges.left().value().size());
243 eitherEdges = janusGraphDao.getEdgesForNode(resourceData, Direction.BOTH);
244 assertTrue(eitherEdges.isLeft());
245 assertEquals(1, eitherEdges.left().value().size());
247 eitherEdges = janusGraphDao.getEdgesForNode(userData, Direction.BOTH);
248 assertTrue(eitherEdges.isLeft());
249 assertEquals(1, eitherEdges.left().value().size());
251 janusGraphDao.deleteNode(userData, UserData.class);
252 janusGraphDao.deleteNode(resourceData, ResourceMetadataData.class);
253 janusGraphDao.commit();
257 public void testLockElement() {
259 ResourceMetadataData resourceData = new ResourceMetadataData();
261 resourceData.getMetadataDataDefinition().setName("resourceForLock");
262 resourceData.getMetadataDataDefinition().setVersion("0.1");
263 resourceData.getMetadataDataDefinition().setState("newState");
264 resourceData.getMetadataDataDefinition().setUniqueId(resourceData.getMetadataDataDefinition().getName() + "."
265 + resourceData.getMetadataDataDefinition().getVersion());
267 Either<ResourceMetadataData, JanusGraphOperationStatus> resource1 = janusGraphDao.createNode(resourceData,
268 ResourceMetadataData.class);
269 assertTrue(resource1.isLeft());
270 janusGraphDao.commit();
271 String lockId = "lock_" + resourceData.getLabel() + "_" + resource1.left().value().getUniqueId();
273 Either<GraphNodeLock, JanusGraphOperationStatus> nodeLock = janusGraphDao
274 .getNode(GraphPropertiesDictionary.UNIQUE_ID.getProperty(), lockId, GraphNodeLock.class);
275 assertTrue(nodeLock.isRight());
276 assertEquals(JanusGraphOperationStatus.NOT_FOUND, nodeLock.right().value());
278 JanusGraphOperationStatus status = janusGraphDao.lockElement(resourceData);
279 assertEquals(JanusGraphOperationStatus.OK, status);
281 nodeLock = janusGraphDao.getNode(GraphPropertiesDictionary.UNIQUE_ID.getProperty(), lockId, GraphNodeLock.class);
282 assertTrue(nodeLock.isLeft());
283 assertEquals(lockId, nodeLock.left().value().getUniqueId());
285 janusGraphDao.commit();
287 status = janusGraphDao.lockElement(resourceData);
288 assertEquals(JanusGraphOperationStatus.ALREADY_LOCKED, status);
290 status = janusGraphDao.releaseElement(resourceData);
291 assertEquals(JanusGraphOperationStatus.OK, status);
293 nodeLock = janusGraphDao.getNode(GraphPropertiesDictionary.UNIQUE_ID.getProperty(), lockId, GraphNodeLock.class);
294 assertTrue(nodeLock.isRight());
295 assertEquals(JanusGraphOperationStatus.NOT_FOUND, nodeLock.right().value());
296 janusGraphDao.deleteNode(resourceData, ResourceMetadataData.class);
297 janusGraphDao.commit();
302 public void testReLockElement() throws InterruptedException {
304 ResourceMetadataData resourceData = new ResourceMetadataData();
306 resourceData.getMetadataDataDefinition().setName("resourceForReLock");
307 resourceData.getMetadataDataDefinition().setVersion("0.1");
308 resourceData.getMetadataDataDefinition().setState("newState");
309 resourceData.getMetadataDataDefinition().setUniqueId(resourceData.getMetadataDataDefinition().getName() + "."
310 + resourceData.getMetadataDataDefinition().getVersion());
312 Either<ResourceMetadataData, JanusGraphOperationStatus> resource1 = janusGraphDao.createNode(resourceData,
313 ResourceMetadataData.class);
314 assertTrue(resource1.isLeft());
315 janusGraphDao.commit();
316 String lockId = "lock_" + resourceData.getLabel() + "_" + resource1.left().value().getUniqueId();
318 Either<GraphNodeLock, JanusGraphOperationStatus> nodeLock = janusGraphDao
319 .getNode(GraphPropertiesDictionary.UNIQUE_ID.getProperty(), lockId, GraphNodeLock.class);
320 assertTrue(nodeLock.isRight());
321 assertEquals(JanusGraphOperationStatus.NOT_FOUND, nodeLock.right().value());
324 JanusGraphOperationStatus status = janusGraphDao.lockElement(resourceData);
325 assertEquals(JanusGraphOperationStatus.OK, status);
327 nodeLock = janusGraphDao.getNode(GraphPropertiesDictionary.UNIQUE_ID.getProperty(), lockId, GraphNodeLock.class);
328 assertTrue(nodeLock.isLeft());
329 assertEquals(lockId, nodeLock.left().value().getUniqueId());
330 long time1 = nodeLock.left().value().getTime();
332 janusGraphDao.commit();
335 configurationManager.getConfiguration().setJanusGraphLockTimeout(2L);
339 status = janusGraphDao.lockElement(resourceData);
340 assertEquals(JanusGraphOperationStatus.OK, status);
342 nodeLock = janusGraphDao.getNode(GraphPropertiesDictionary.UNIQUE_ID.getProperty(), lockId, GraphNodeLock.class);
343 assertTrue(nodeLock.isLeft());
344 assertEquals(lockId, nodeLock.left().value().getUniqueId());
346 long time2 = nodeLock.left().value().getTime();
348 assertTrue(time2 > time1);
350 status = janusGraphDao.releaseElement(resourceData);
351 assertEquals(JanusGraphOperationStatus.OK, status);
353 nodeLock = janusGraphDao.getNode(GraphPropertiesDictionary.UNIQUE_ID.getProperty(), lockId, GraphNodeLock.class);
354 assertTrue(nodeLock.isRight());
355 assertEquals(JanusGraphOperationStatus.NOT_FOUND, nodeLock.right().value());
357 janusGraphDao.deleteNode(resourceData, ResourceMetadataData.class);
358 janusGraphDao.commit();
363 public void testBoolean() {
364 ResourceMetadataData resourceData = new ResourceMetadataData();
366 resourceData.getMetadataDataDefinition().setName("resourceForLock");
367 resourceData.getMetadataDataDefinition().setVersion("0.1");
368 resourceData.getMetadataDataDefinition().setState("NOT_CERTIFIED_CHECKOUT");
369 resourceData.getMetadataDataDefinition().setHighestVersion(true);
370 resourceData.getMetadataDataDefinition().setUniqueId(resourceData.getMetadataDataDefinition().getName() + "."
371 + resourceData.getMetadataDataDefinition().getVersion());
373 Either<ResourceMetadataData, JanusGraphOperationStatus> resource1 = janusGraphDao.createNode(resourceData,
374 ResourceMetadataData.class);
375 assertTrue(resource1.isLeft());
377 resourceData = new ResourceMetadataData();
379 resourceData.getMetadataDataDefinition().setName("resourceForLock");
380 resourceData.getMetadataDataDefinition().setVersion("0.2");
381 resourceData.getMetadataDataDefinition().setState("NOT_CERTIFIED_CHECKOUT");
382 resourceData.getMetadataDataDefinition().setHighestVersion(false);
383 resourceData.getMetadataDataDefinition().setUniqueId(resourceData.getMetadataDataDefinition().getName() + "."
384 + resourceData.getMetadataDataDefinition().getVersion());
386 Either<ResourceMetadataData, JanusGraphOperationStatus> resource2 = janusGraphDao.createNode(resourceData,
387 ResourceMetadataData.class);
388 janusGraphDao.commit();
390 Map<String, Object> props = new HashMap<>();
392 props.put(GraphPropertiesDictionary.STATE.getProperty(), "NOT_CERTIFIED_CHECKOUT");
393 props.put("name", "resourceForLock");
394 props.put(GraphPropertiesDictionary.IS_HIGHEST_VERSION.getProperty(), false);
396 // get by criteria. must be 1
397 Either<List<ResourceMetadataData>, JanusGraphOperationStatus> byCriteria = janusGraphDao
398 .getByCriteria(NodeTypeEnum.Resource, props, ResourceMetadataData.class);
399 assertTrue(byCriteria.isLeft());
401 janusGraphDao.deleteNode(resource1.left().value(), ResourceMetadataData.class);
403 janusGraphDao.deleteNode(resource2.left().value(), ResourceMetadataData.class);
404 janusGraphDao.commit();
408 public void testStringSearch() {
411 BaseConfiguration conf = new BaseConfiguration();
412 conf.setProperty("storage.backend", "inmemory");
413 graph = JanusGraphFactory.open(conf);
415 // JanusGraphManagement graphMgt = graph.getManagementSystem();
416 JanusGraphManagement graphMgt = graph.openManagement();
417 PropertyKey propKey = graphMgt.makePropertyKey("string1").dataType(String.class).make();
418 graphMgt.buildIndex("string1", Vertex.class).addKey(propKey).unique().buildCompositeIndex();
420 propKey = graphMgt.makePropertyKey("string2").dataType(String.class).make();
422 graphMgt.buildIndex("string2", Vertex.class).addKey(propKey).unique().buildCompositeIndex();
425 log.debug("**** predicat index search non case");
426 Iterable<JanusGraphVertex> vertices = graph.query().has("string1", Text.REGEX, "my new string 1").vertices();
427 Iterator<JanusGraphVertex> iter = vertices.iterator();
428 while (iter.hasNext()) {
429 Vertex ver = iter.next();
430 // System.out.println(com.tinkerpop.blueprints.util.ElementHelper.getProperties(ver));
431 log.debug("{}", janusGraphDao.getProperties(ver));
437 public void testDuplicateResultDueToJanusGraphBug() {
439 ResourceMetadataData resourceData1 = new ResourceMetadataData();
440 resourceData1.getMetadataDataDefinition().setUniqueId("A");
441 ((ResourceMetadataDataDefinition) resourceData1.getMetadataDataDefinition()).setAbstract(true);
442 resourceData1.getMetadataDataDefinition().setName("aaaa");
444 Either<ResourceMetadataData, JanusGraphOperationStatus> newNode1 = janusGraphDao.createNode(resourceData1,
445 ResourceMetadataData.class);
446 assertTrue(newNode1.isLeft());
447 log.debug("{}", newNode1.left().value());
448 // janusGraphDao.commit();
450 Map<String, Object> props = new HashMap<>();
451 props.put(GraphPropertiesDictionary.IS_ABSTRACT.getProperty(), true);
452 Either<List<ResourceMetadataData>, JanusGraphOperationStatus> byCriteria = janusGraphDao
453 .getByCriteria(NodeTypeEnum.Resource, props, ResourceMetadataData.class);
454 assertTrue(byCriteria.isLeft());
455 assertEquals("check one result returned", 1, byCriteria.left().value().size());
456 // janusGraphDao.commit();
458 ResourceMetadataData resourceToUpdate = new ResourceMetadataData();
459 ((ResourceMetadataDataDefinition) resourceToUpdate.getMetadataDataDefinition()).setAbstract(false);
460 resourceToUpdate.getMetadataDataDefinition().setUniqueId("A");
461 Either<ResourceMetadataData, JanusGraphOperationStatus> updateNode = janusGraphDao.updateNode(resourceToUpdate,
462 ResourceMetadataData.class);
463 assertTrue(updateNode.isLeft());
464 // janusGraphDao.commit();
466 byCriteria = janusGraphDao.getByCriteria(NodeTypeEnum.Resource, props, ResourceMetadataData.class);
467 assertTrue(byCriteria.isRight());
468 assertEquals("check one result returned due to janusgraph bug", JanusGraphOperationStatus.NOT_FOUND,
469 byCriteria.right().value());
471 AdditionalInfoParameterData infoParameterData = new AdditionalInfoParameterData();
472 infoParameterData.getAdditionalInfoParameterDataDefinition().setUniqueId("123");
473 Map<String, String> idToKey = new HashMap<>();
474 idToKey.put("key1", "value1");
475 infoParameterData.setIdToKey(idToKey);
477 Either<AdditionalInfoParameterData, JanusGraphOperationStatus> newNode2 = janusGraphDao.createNode(infoParameterData,
478 AdditionalInfoParameterData.class);
479 assertTrue(newNode2.isLeft());
480 log.debug("{}", newNode2.left().value());
481 // janusGraphDao.commit();
483 Map<String, String> idToKey2 = new HashMap<>();
484 idToKey2.put("key1", "value2");
486 Map<String, Object> props2 = new HashMap<>();
487 props2.put(GraphPropertiesDictionary.UNIQUE_ID.getProperty(), "123");
488 Gson gson = new Gson();
489 props2.put(GraphPropertiesDictionary.ADDITIONAL_INFO_ID_TO_KEY.getProperty(), gson.toJson(idToKey2));
490 // props2.put(GraphPropertiesDictionary.ADDITIONAL_INFO_ID_TO_KEY.getProperty(),
493 Either<List<AdditionalInfoParameterData>, JanusGraphOperationStatus> byCriteria2 = janusGraphDao
494 .getByCriteria(NodeTypeEnum.AdditionalInfoParameters, props2, AdditionalInfoParameterData.class);
495 assertTrue(byCriteria2.isRight());
496 assertEquals("check one result returned due to janusgraph bug", JanusGraphOperationStatus.NOT_FOUND,
497 byCriteria2.right().value());
499 infoParameterData.setIdToKey(idToKey2);
501 Either<AdditionalInfoParameterData, JanusGraphOperationStatus> updateNode2 = janusGraphDao.updateNode(infoParameterData,
502 AdditionalInfoParameterData.class);
503 assertTrue(updateNode2.isLeft());
504 // janusGraphDao.commit();
506 props2.put(GraphPropertiesDictionary.ADDITIONAL_INFO_ID_TO_KEY.getProperty(), idToKey);
507 byCriteria2 = janusGraphDao.getByCriteria(NodeTypeEnum.AdditionalInfoParameters, props2,
508 AdditionalInfoParameterData.class);
509 assertTrue(byCriteria2.isRight());
510 assertEquals("check one result returned due to janusgraph bug", JanusGraphOperationStatus.NOT_FOUND,
511 byCriteria2.right().value());
513 ComponentInstanceData resourceInstanceData = new ComponentInstanceData();
514 resourceInstanceData.getComponentInstDataDefinition().setUniqueId("ri123");
515 resourceInstanceData.getComponentInstDataDefinition().setPosX("22");
516 resourceInstanceData.getComponentInstDataDefinition().setName("myresource_1");
518 Either<ComponentInstanceData, JanusGraphOperationStatus> newNode3 = janusGraphDao.createNode(resourceInstanceData,
519 ComponentInstanceData.class);
520 assertTrue(newNode3.isLeft());
521 log.debug("{}", newNode3.left().value());
522 // janusGraphDao.commit();
524 resourceInstanceData.getComponentInstDataDefinition().setPosX("50");
525 Either<ComponentInstanceData, JanusGraphOperationStatus> updateNode3 = janusGraphDao.updateNode(resourceInstanceData,
526 ComponentInstanceData.class);
527 assertTrue(updateNode3.isLeft());
528 // janusGraphDao.commit();
530 resourceInstanceData.getComponentInstDataDefinition().setName("myresource_2");
531 updateNode3 = janusGraphDao.updateNode(resourceInstanceData, ComponentInstanceData.class);
532 assertTrue(updateNode3.isLeft());
533 // janusGraphDao.commit();
535 Map<String, Object> props3 = new HashMap<>();
536 props3.put("positionX", "22");
537 Either<List<ComponentInstanceData>, JanusGraphOperationStatus> byCriteria3 = janusGraphDao
538 .getByCriteria(NodeTypeEnum.ResourceInstance, props3, ComponentInstanceData.class);
539 assertTrue(byCriteria3.isRight());
540 assertEquals("check one result returned due to janusgraph bug", JanusGraphOperationStatus.NOT_FOUND,
541 byCriteria3.right().value());
543 props3.put("positionX", "50");
544 byCriteria3 = janusGraphDao.getByCriteria(NodeTypeEnum.ResourceInstance, props3, ComponentInstanceData.class);
545 assertTrue(byCriteria3.isLeft());
547 /////////////////////////// check integer ////////////////////////
549 ArtifactData artifactData = new ArtifactData();
550 artifactData.getArtifactDataDefinition().setUniqueId("ad234");
551 artifactData.getArtifactDataDefinition().setTimeout(100);
553 Either<ArtifactData, JanusGraphOperationStatus> newNode4 = janusGraphDao.createNode(artifactData, ArtifactData.class);
554 assertTrue(newNode4.isLeft());
555 log.debug("{}", newNode4.left().value());
556 // janusGraphDao.commit();
558 artifactData.getArtifactDataDefinition().setTimeout(50);
559 Either<ArtifactData, JanusGraphOperationStatus> updateNode4 = janusGraphDao.updateNode(artifactData, ArtifactData.class);
560 assertTrue(updateNode4.isLeft());
561 // janusGraphDao.commit();
563 Map<String, Object> props4 = new HashMap<>();
564 props4.put("timeout", 100);
565 Either<List<ArtifactData>, JanusGraphOperationStatus> byCriteria4 = janusGraphDao.getByCriteria(NodeTypeEnum.ArtifactRef,
566 props4, ArtifactData.class);
567 assertTrue(byCriteria4.isRight());
568 assertEquals("check one result returned due to janusgraph bug", JanusGraphOperationStatus.NOT_FOUND,
569 byCriteria4.right().value());
571 props4.put("timeout", 50);
572 byCriteria4 = janusGraphDao.getByCriteria(NodeTypeEnum.ArtifactRef, props4, ArtifactData.class);
573 assertTrue(byCriteria4.isLeft());
575 janusGraphDao.rollback();
579 public void testDuplicateResultUSeHasNotQueryDueToJanusGraphBug() {
581 String name = "bbbb";
583 ResourceMetadataData resourceData1 = new ResourceMetadataData();
584 resourceData1.getMetadataDataDefinition().setUniqueId("A");
585 ((ResourceMetadataDataDefinition) resourceData1.getMetadataDataDefinition()).setAbstract(true);
586 resourceData1.getMetadataDataDefinition().setName(name);
588 Either<ResourceMetadataData, JanusGraphOperationStatus> newNode1 = janusGraphDao.createNode(resourceData1,
589 ResourceMetadataData.class);
590 assertTrue(newNode1.isLeft());
591 log.debug("{}", newNode1.left().value());
592 // janusGraphDao.commit();
594 Map<String, Object> props = new HashMap<>();
595 props.put(GraphPropertiesDictionary.IS_ABSTRACT.getProperty(), true);
596 Either<List<ResourceMetadataData>, JanusGraphOperationStatus> byCriteria = janusGraphDao
597 .getByCriteria(NodeTypeEnum.Resource, props, ResourceMetadataData.class);
598 assertTrue(byCriteria.isLeft());
599 assertEquals("check one result returned", 1, byCriteria.left().value().size());
600 // janusGraphDao.commit();
602 ResourceMetadataData resourceToUpdate = new ResourceMetadataData();
603 ((ResourceMetadataDataDefinition) resourceToUpdate.getMetadataDataDefinition()).setAbstract(false);
604 resourceToUpdate.getMetadataDataDefinition().setUniqueId("A");
605 Either<ResourceMetadataData, JanusGraphOperationStatus> updateNode = janusGraphDao.updateNode(resourceToUpdate,
606 ResourceMetadataData.class);
607 assertTrue(updateNode.isLeft());
608 // janusGraphDao.commit();
610 // no result where isAbstract = true
611 byCriteria = janusGraphDao.getByCriteria(NodeTypeEnum.Resource, props, ResourceMetadataData.class);
612 assertTrue(byCriteria.isRight());
613 assertEquals("check one result returned due to janusgraph bug", JanusGraphOperationStatus.NOT_FOUND,
614 byCriteria.right().value());
616 // one result where isAbstract != true
617 byCriteria = janusGraphDao.getByCriteria(NodeTypeEnum.Resource, null, props, ResourceMetadataData.class);
618 assertTrue(byCriteria.isLeft());
619 assertEquals("check one result returned", 1, byCriteria.left().value().size());
621 props.put(GraphPropertiesDictionary.IS_ABSTRACT.getProperty(), false);
622 byCriteria = janusGraphDao.getByCriteria(NodeTypeEnum.Resource, null, props, ResourceMetadataData.class);
623 assertTrue(byCriteria.isRight());
624 assertEquals("check one result returned due to janusgraph bug", JanusGraphOperationStatus.NOT_FOUND,
625 byCriteria.right().value());
627 janusGraphDao.rollback();