2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright © 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=========================================================
20 * ECOMP is a trademark and service mark of AT&T Intellectual Property.
22 package org.onap.aai.query.builder;
24 import static org.junit.Assert.assertEquals;
25 import static org.junit.Assert.assertFalse;
26 import static org.junit.Assert.assertTrue;
28 import java.util.ArrayList;
29 import java.util.Arrays;
30 import java.util.Collections;
31 import java.util.List;
33 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
34 import org.apache.tinkerpop.gremlin.process.traversal.step.util.BulkSet;
35 import org.apache.tinkerpop.gremlin.structure.Edge;
36 import org.apache.tinkerpop.gremlin.structure.Graph;
37 import org.apache.tinkerpop.gremlin.structure.Vertex;
39 import org.onap.aai.AAISetup;
40 import org.onap.aai.db.props.AAIProperties;
41 import org.onap.aai.exceptions.AAIException;
42 import org.onap.aai.introspection.Loader;
43 import org.onap.aai.introspection.LoaderFactory;
44 import org.onap.aai.introspection.ModelType;
45 import org.onap.aai.serialization.db.EdgeRules;
46 import org.onap.aai.serialization.db.EdgeType;
48 import com.thinkaurelius.titan.core.TitanFactory;
49 import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException;
51 public abstract class QueryBuilderTestAbstraction extends AAISetup {
53 protected static Loader loader;
54 protected static Graph graph;
55 protected GraphTraversalSource g;
57 protected EdgeRules testEdgeRules = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_TraversalQueryTest.json");
61 public static void setup() throws Exception {
62 loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, AAIProperties.LATEST);
63 graph = TitanFactory.build().set("storage.backend", "inmemory").open();
67 public void configure() throws Exception {
68 g = graph.traversal();
72 public void deConfigure() throws Exception {
77 public static void teardown() throws Exception {
82 public void createEdgeGVnfToVnfcTraversal() throws AAIException {
84 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","myvnf").next();
85 Vertex vnfc = g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
86 testEdgeRules.addEdge(g, gvnf, vnfc, "uses");
88 QueryBuilder<Vertex> tQ = getNewVertexTraversal(gvnf);
89 tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "vnfc");
91 assertEquals(vnfc, tQ.next());
97 public void createEdgeLinterfaceToLogicalLinkTraversal() throws AAIException {
99 Vertex lInterface = g.addV("aai-node-type","l-interface","interface-name","l-interface-a").next();
100 Vertex logicalLink = g.addV("aai-node-type","logical-link","link-name","logical-link-a").next();
101 testEdgeRules.addEdge(g, lInterface, logicalLink, "sourceLInterface");
103 QueryBuilder<Vertex> tQ = getNewVertexTraversal(lInterface);
104 tQ.createEdgeTraversal(EdgeType.COUSIN, "l-interface", "logical-link");
106 Vertex next = tQ.next();
108 assertEquals(logicalLink, next);
114 public void createEdgeLinterfaceToLogicalLinkIntrospectorTraversal() throws AAIException {
116 Vertex lInterface = g.addV("aai-node-type","l-interface","interface-name","l-interface-a").next();
117 Vertex logicalLink = g.addV("aai-node-type","logical-link","link-name","logical-link-a").next();
118 testEdgeRules.addEdge(g, lInterface, logicalLink, "sourceLInterface");
120 QueryBuilder<Vertex> tQ = getNewVertexTraversal(lInterface);
121 tQ.createEdgeTraversal(EdgeType.COUSIN, loader.introspectorFromName("l-interface"), loader.introspectorFromName("logical-link"));
123 Vertex next = tQ.next();
125 assertEquals(logicalLink, next);
131 public void createEdgeLinterfaceToLogicalLinkVertexToIntrospectorTraversal() throws AAIException {
133 Vertex lInterface = g.addV("aai-node-type","l-interface","interface-name","l-interface-a").next();
134 Vertex logicalLink = g.addV("aai-node-type","logical-link","link-name","logical-link-a").next();
135 testEdgeRules.addEdge(g, lInterface, logicalLink, "sourceLInterface");
137 QueryBuilder<Vertex> tQ = getNewVertexTraversal(lInterface);
138 tQ.createEdgeTraversal(EdgeType.COUSIN, lInterface, loader.introspectorFromName("logical-link"));
140 Vertex next = tQ.next();
142 assertEquals(logicalLink, next);
148 public void edgeToVertexTraversalTest() throws AAIException {
150 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
151 Vertex vnfc1 = g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
153 testEdgeRules.addEdge(g, gvnf, vnfc1);
155 QueryBuilder<Vertex> tQ = getNewVertexTraversal(gvnf);
156 tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "vnfc");
158 List<Vertex> list = tQ.toList();
160 assertEquals("Has 1 vertexes ", 1, list.size());
161 assertTrue("Has vertex on the default edge ", list.contains(vnfc1));
167 public void edgeToVertexTraversalSingleOutRuleTest() throws AAIException {
169 Vertex vce = g.addV("aai-node-type","vce","vnf-id","vce").next();
170 Vertex vnfc1 = g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
172 testEdgeRules.addEdge(g, vce, vnfc1);
174 QueryBuilder<Vertex> tQ1 = getNewVertexTraversal(vce);
175 tQ1.createEdgeTraversal(EdgeType.COUSIN, "vce", "vnfc");
177 QueryBuilder<Vertex> tQ2 = getNewVertexTraversal(vnfc1);
178 tQ2.createEdgeTraversal(EdgeType.COUSIN, "vnfc", "vce");
180 List<Vertex> list1 = tQ1.toList();
181 List<Vertex> list2 = tQ2.toList();
183 assertEquals("1 - Has 1 vertexes ", 1, list1.size());
184 assertTrue("1 - traversal results in vnfc ", list1.contains(vnfc1));
185 assertEquals("2 - Has 1 vertexes ", 1, list2.size());
186 assertTrue("2 - traversal results in vce ", list2.contains(vce));
192 public void edgeToVertexTraversalSingleInRuleTest() throws AAIException {
194 Vertex vce = g.addV("aai-node-type","vce","vnf-id","vce").next();
195 Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
197 testEdgeRules.addEdge(g, vce, pserver);
199 QueryBuilder<Vertex> tQ1 = getNewVertexTraversal(vce);
200 tQ1.createEdgeTraversal(EdgeType.COUSIN, "vce", "pserver");
202 List<Vertex> list = tQ1.toList();
204 assertEquals("1 - Has 1 vertexes ", 1, list.size());
205 assertTrue("1 - traversal results in vnfc ", list.contains(pserver));
211 public void edgeToVertexMultiRuleTraversalTest() throws AAIException {
213 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
214 Vertex vnfc1 = g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
215 Vertex vnfc2 = g.addV("aai-node-type","vnfc","vnfc-name","b-name").next();
217 testEdgeRules.addEdge(g, gvnf, vnfc1);
218 testEdgeRules.addEdge(g, gvnf, vnfc2, "re-uses");
220 QueryBuilder<Vertex> tQ = getNewVertexTraversal(gvnf);
221 tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "vnfc");
223 List<Vertex> list = tQ.toList();
225 assertEquals("Has 2 vertexes ", 2, list.size());
226 assertTrue("Has vertex on the default edge ", list.contains(vnfc1));
227 assertTrue("Has vertex on the re-uses edge ", list.contains(vnfc2));
233 public void edgeToVertexMultiLabelTest() throws AAIException {
235 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
236 Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
237 Vertex vnfc1 = g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
239 testEdgeRules.addEdge(g, gvnf, vnfc1);
240 testEdgeRules.addEdge(g, pserver, vnfc1);
242 QueryBuilder<Vertex> tQ = getNewVertexTraversal(vnfc1);
243 tQ.createEdgeTraversal(EdgeType.COUSIN, "vnfc", "generic-vnf");
245 List<Vertex> list = tQ.toList();
247 assertEquals("Has 1 vertexes ", 1, list.size());
248 assertTrue("Only returns the generic vnf vertex", list.contains(gvnf));
254 public void limitTraversalTest() throws AAIException {
256 g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
257 g.addV("aai-node-type","vnfc","vnfc-name","b-name").next();
259 QueryBuilder<Vertex> tQ = new GremlinTraversal<>(loader, g, testEdgeRules);
260 tQ.getVerticesByProperty("aai-node-type","vnfc").limit(1);
262 List<Vertex> list = tQ.toList();
264 assertEquals("Has 1 vertexes ", 1, list.size());
270 public void getVertexesByPropertiesTraversalTest() throws AAIException {
272 g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
273 g.addV("aai-node-type","vnfc","vnfc-name","b-name").next();
275 QueryBuilder<Vertex> tQ = new GremlinTraversal<>(loader, g, testEdgeRules);
276 tQ.getVerticesByProperty("vnfc-name", Arrays.asList("a-name", "b-name"));
278 List<Vertex> list = tQ.toList();
280 assertEquals("Has 2 vertexes ", 2, list.size());
286 public void getVertexesByIndexedPropertyTraversalTest() throws AAIException {
288 g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
289 g.addV("aai-node-type","vnfc","vnfc-name","b-name").next();
291 QueryBuilder<Vertex> tQ = new GremlinTraversal<>(loader, g, testEdgeRules);
292 tQ.getVerticesByIndexedProperty("aai-node-type","vnfc");
294 List<Vertex> list = tQ.toList();
296 assertEquals("Has 2 vertexes ", 2, list.size());
302 public void dedupTraversalTest() throws AAIException {
304 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
305 Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
307 testEdgeRules.addEdge(g, gvnf, pserver);
308 testEdgeRules.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
310 QueryBuilder<Vertex> tQ = getNewVertexTraversal(gvnf);
311 tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "pserver").dedup();
313 List<Vertex> list = tQ.toList();
315 assertEquals("Has 2 vertexes ", 1, list.size());
316 assertTrue("result has pserver ", list.contains(pserver));
322 public void storeCapTraversalTest() throws AAIException {
324 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
325 Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
327 testEdgeRules.addEdge(g, gvnf, pserver);
328 testEdgeRules.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
330 GremlinTraversal<BulkSet<Vertex>> tQ = new GremlinTraversal<>(loader, g, gvnf, testEdgeRules);
331 tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "pserver").store("x").cap("x");
333 List<BulkSet<Vertex>> list = tQ.toList();
335 assertEquals("Has 2 vertexes ", 1, list.size());
336 assertEquals("result has pserver ",pserver, list.get(0).iterator().next());
342 public void storeCapUnfoldTraversalTest() throws AAIException {
344 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
345 Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
347 testEdgeRules.addEdge(g, gvnf, pserver);
348 testEdgeRules.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
350 QueryBuilder<Vertex> tQ = getNewVertexTraversal(gvnf);
351 tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "pserver").store("x").cap("x").unfold();
353 List<Vertex> list = tQ.toList();
355 assertEquals("Has 2 vertexes ", 2, list.size());
356 assertTrue("result has pserver ", list.contains(pserver));
362 public void nextAndHasNextTraversalTest() throws AAIException {
364 Vertex v1 = g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
365 Vertex v2 = g.addV("aai-node-type","vnfc","vnfc-name","b-name").next();
367 QueryBuilder<Vertex> tQ = new GremlinTraversal<>(loader, g, testEdgeRules);
368 tQ.getVerticesByProperty("aai-node-type","vnfc");
370 List<Vertex> list = new ArrayList<>();
372 assertTrue("Has next 1 ",tQ.hasNext());
374 assertTrue("Has next 2 ",tQ.hasNext());
376 assertFalse("Has next 3 ",tQ.hasNext());
377 assertTrue("Has all the vertexes", list.contains(v1) && list.remove(v2));
382 public void edgeToVertexMultiRuleOutTraversalTest() throws AAIException {
384 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
385 Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
387 testEdgeRules.addEdge(g, gvnf, pserver);
388 testEdgeRules.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
390 QueryBuilder<Vertex> tQ = getNewVertexTraversal(gvnf);
391 tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "pserver");
393 List<Vertex> list = tQ.toList();
395 assertEquals("Has 2 vertexes ", 2, list.size());
396 assertTrue("result has pserver ", list.contains(pserver));
402 public void edgeToVertexMultiRuleInTraversalTest() throws AAIException {
404 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
405 Vertex complex = g.addV("aai-node-type","complex","physical-location-id","a-name").next();
407 testEdgeRules.addEdge(g, gvnf, complex);
408 testEdgeRules.addEdge(g, gvnf, complex, "complex-generic-vnf-B");
410 QueryBuilder<Vertex> tQ = getNewVertexTraversal(gvnf);
411 tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "complex");
413 List<Vertex> list = tQ.toList();
415 assertEquals("Has 2 vertexes ", 2, list.size());
416 assertTrue("result has pserver ", list.contains(complex));
422 public void edgeTraversalSingleInRuleTest() throws AAIException {
424 Vertex vce = g.addV("aai-node-type","vce","vnf-id","vce").next();
425 Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
427 Edge e = testEdgeRules.addEdge(g, vce, pserver);
429 QueryBuilder<Edge> tQ1 = getNewEdgeTraversal(vce);
430 tQ1.getEdgesBetween(EdgeType.COUSIN, "vce", "pserver");
432 List<Edge> list = tQ1.toList();
434 assertEquals("1 - Has 1 edge ", 1, list.size());
435 assertTrue("1 - traversal results in edge ", list.contains(e));
441 public void edgeTraversalSingleOutRuleTest() throws AAIException {
443 Vertex vce = g.addV("aai-node-type","vce","vnf-id","vce").next();
444 Vertex vnfc1 = g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
446 Edge e = testEdgeRules.addEdge(g, vce, vnfc1);
448 QueryBuilder<Edge> tQ1 = getNewEdgeTraversal(vce);
449 tQ1.getEdgesBetween(EdgeType.COUSIN, "vce", "vnfc");
451 List<Edge> list1 = tQ1.toList();
453 assertEquals("1 - Has 1 edge ", 1, list1.size());
454 assertTrue("1 - traversal results in edge ", list1.contains(e));
460 public void edgeTraversalMultiRuleOutTraversalTest() throws AAIException {
462 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
463 Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
465 Edge e1 = testEdgeRules.addEdge(g, gvnf, pserver);
466 Edge e2 = testEdgeRules.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
468 QueryBuilder<Edge> tQ = getNewEdgeTraversal(gvnf);
469 tQ.getEdgesBetween(EdgeType.COUSIN, "generic-vnf", "pserver");
471 List<Edge> list = tQ.toList();
473 assertEquals("Has 2 edges ", 2, list.size());
474 assertTrue("result has default edge ", list.contains(e1));
475 assertTrue("result has other edge ", list.contains(e2));
481 public void edgeTraversalMultiRuleInTraversalTest() throws AAIException {
483 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
484 Vertex complex = g.addV("aai-node-type","complex","physical-location-id","a-name").next();
486 Edge e1 = testEdgeRules.addEdge(g, gvnf, complex);
487 Edge e2 = testEdgeRules.addEdge(g, gvnf, complex, "complex-generic-vnf-B");
489 QueryBuilder<Edge> tQ = getNewEdgeTraversal(gvnf);
490 tQ.getEdgesBetween(EdgeType.COUSIN, "generic-vnf", "complex");
492 List<Edge> list = tQ.toList();
494 assertEquals("Has 2 edges ", 2, list.size());
495 assertTrue("result has default edge ", list.contains(e1));
496 assertTrue("result has other edge ", list.contains(e2));
502 public void edgeTraversalMultiRuleTraversalTest() throws AAIException {
504 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
505 Vertex vnfc1 = g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
506 Vertex vnfc2 = g.addV("aai-node-type","vnfc","vnfc-name","b-name").next();
508 Edge e1 = testEdgeRules.addEdge(g, gvnf, vnfc1);
509 Edge e2 = testEdgeRules.addEdge(g, gvnf, vnfc2, "re-uses");
511 QueryBuilder<Edge> tQ = getNewEdgeTraversal(gvnf);
512 tQ.getEdgesBetween(EdgeType.COUSIN, "generic-vnf", "vnfc");
514 List<Edge> list = tQ.toList();
516 assertEquals("Has 2 edges ", 2, list.size());
517 assertTrue("result has default edge ", list.contains(e1));
518 assertTrue("result has other edge ", list.contains(e2));
523 @Test (expected = NoEdgeRuleFoundException.class)
524 public void getEdgesBetweenWithLabelsEmptyListTest() throws AAIException {
526 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
527 Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
529 Edge e1 = testEdgeRules.addEdge(g, gvnf, pserver);
530 Edge e2 = testEdgeRules.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
532 QueryBuilder<Edge> tQ = getNewEdgeTraversal(gvnf);
533 tQ.getEdgesBetweenWithLabels(EdgeType.COUSIN, "generic-vnf", "pserver", Collections.emptyList());
538 public void getEdgesBetweenWithLabelsSingleItemTest() throws AAIException {
540 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
541 Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
543 Edge e1 = testEdgeRules.addEdge(g, gvnf, pserver);
544 Edge e2 = testEdgeRules.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
546 QueryBuilder<Edge> tQ = getNewEdgeTraversal(gvnf);
547 tQ.getEdgesBetweenWithLabels(EdgeType.COUSIN, "generic-vnf", "pserver", Collections.singletonList("generic-vnf-pserver-B"));
549 List<Edge> list = tQ.toList();
551 assertEquals("Has 1 edges ", 1, list.size());
552 assertFalse("result does not have default edge ", list.contains(e1));
553 assertTrue("result has other edge ", list.contains(e2));
558 public void getEdgesBetweenWithLabelsMultipleItemTest() throws AAIException {
560 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
561 Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
563 Edge e1 = testEdgeRules.addEdge(g, gvnf, pserver);
564 Edge e2 = testEdgeRules.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
566 QueryBuilder<Edge> tQ = getNewEdgeTraversal(gvnf);
567 tQ.getEdgesBetweenWithLabels(EdgeType.COUSIN, "generic-vnf", "pserver", Arrays.asList("generic-vnf-pserver-B", "generic-vnf-pserver-A"));
569 List<Edge> list = tQ.toList();
571 assertEquals("Has 2 edges ", 2, list.size());
572 assertTrue("result has generic-vnf-pserver-A edge ", list.contains(e1));
573 assertTrue("result has generic-vnf-pserver-B edge ", list.contains(e2));
577 @Test (expected = NoEdgeRuleFoundException.class)
578 public void createEdgeTraversalWithLabelsEmptyListTest() throws AAIException {
580 Vertex gvnf = getVertex();
582 QueryBuilder<Edge> tQ = getNewEdgeTraversal(gvnf);
583 tQ.getEdgesBetweenWithLabels(EdgeType.COUSIN, "generic-vnf", "pserver", Collections.emptyList());
585 List<Edge> list = tQ.toList();
590 private Vertex getVertex() throws AAIException {
591 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
592 Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
594 Edge e1 = testEdgeRules.addEdge(g, gvnf, pserver);
595 Edge e2 = testEdgeRules.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
600 public void createEdgeTraversalWithLabelsSingleItemTest() throws AAIException {
602 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
603 Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
605 Edge e1 = testEdgeRules.addEdge(g, gvnf, pserver);
606 Edge e2 = testEdgeRules.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
608 QueryBuilder<Edge> tQ = getNewEdgeTraversal(gvnf);
609 tQ.getEdgesBetweenWithLabels(EdgeType.COUSIN, "generic-vnf", "pserver", Collections.singletonList("generic-vnf-pserver-B"));
611 List<Edge> list = tQ.toList();
613 assertEquals("Has 1 edges ", 1, list.size());
614 assertFalse("result does not have default edge ", list.contains(e1));
615 assertTrue("result has other edge ", list.contains(e2));
620 public void createEdgeTraversalWithLabelsMultipleItemTest() throws AAIException {
622 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
623 Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
625 Edge e1 = testEdgeRules.addEdge(g, gvnf, pserver);
626 Edge e2 = testEdgeRules.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
628 QueryBuilder<Edge> tQ = getNewEdgeTraversal(gvnf);
629 tQ.getEdgesBetweenWithLabels(EdgeType.COUSIN, "generic-vnf", "pserver", Arrays.asList("generic-vnf-pserver-B", "generic-vnf-pserver-A"));
631 List<Edge> list = tQ.toList();
633 assertEquals("Has 2 edges ", 2, list.size());
634 assertTrue("result has generic-vnf-pserver-A edge ", list.contains(e1));
635 assertTrue("result has generic-vnf-pserver-B edge ", list.contains(e2));
639 protected abstract QueryBuilder<Edge> getNewEdgeTraversal(Vertex v);
641 protected abstract QueryBuilder<Edge> getNewEdgeTraversal();
643 protected abstract QueryBuilder<Vertex> getNewVertexTraversal(Vertex v);
645 protected abstract QueryBuilder<Vertex> getNewVertexTraversal();