2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright © 2017-2018 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 package org.onap.aai.query.builder;
22 import org.apache.tinkerpop.gremlin.process.traversal.Path;
23 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
24 import org.apache.tinkerpop.gremlin.process.traversal.step.util.BulkSet;
25 import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
26 import org.apache.tinkerpop.gremlin.structure.Edge;
27 import org.apache.tinkerpop.gremlin.structure.Graph;
28 import org.apache.tinkerpop.gremlin.structure.Vertex;
29 import org.janusgraph.core.JanusGraphFactory;
31 import org.junit.runner.RunWith;
32 import org.onap.aai.config.IntrospectionConfig;
33 import org.onap.aai.config.SpringContextAware;
34 import org.onap.aai.exceptions.AAIException;
35 import org.onap.aai.introspection.Loader;
36 import org.onap.aai.introspection.LoaderFactory;
37 import org.onap.aai.introspection.ModelType;
38 import org.onap.aai.nodes.NodeIngestor;
39 import org.onap.aai.serialization.db.EdgeSerializer;
40 import org.onap.aai.edges.EdgeIngestor;
41 import org.onap.aai.edges.enums.EdgeType;
42 import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException;
43 import org.onap.aai.serialization.queryformats.QueryFormatTestHelper;
44 import org.onap.aai.setup.SchemaLocationsBean;
45 import org.onap.aai.setup.SchemaVersions;
46 import org.onap.aai.util.AAIConstants;
47 import org.springframework.beans.factory.annotation.Autowired;
48 import org.springframework.test.annotation.DirtiesContext;
49 import org.springframework.test.context.ContextConfiguration;
50 import org.springframework.test.context.TestPropertySource;
51 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
52 import org.onap.aai.db.props.AAIProperties;
55 import java.util.ArrayList;
56 import java.util.Arrays;
57 import java.util.Collections;
58 import java.util.List;
60 import static org.hamcrest.CoreMatchers.is;
61 import static org.hamcrest.collection.IsIterableContainingInOrder.contains;
62 import static org.junit.Assert.*;
64 @RunWith(SpringJUnit4ClassRunner.class)
65 @ContextConfiguration(classes = {
66 SchemaLocationsBean.class,
68 QueryTestsConfigTranslator.class,
72 SpringContextAware.class,
73 IntrospectionConfig.class
75 @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
76 @TestPropertySource(properties = {
77 "schema.translator.list = config"
79 public abstract class QueryBuilderTestAbstraction {
81 protected Loader loader;
82 protected static Graph graph;
83 protected GraphTraversalSource g;
86 protected EdgeSerializer testEdgeSer;
89 protected LoaderFactory loaderFactory;
92 protected SchemaVersions schemaVersions;
95 public static void setup() throws Exception {
96 System.setProperty("AJSC_HOME", ".");
97 System.setProperty("BUNDLECONFIG_DIR", "src/test/resources/bundleconfig-local");
98 QueryFormatTestHelper.setFinalStatic(AAIConstants.class.getField("AAI_HOME_ETC_OXM"), "src/test/resources/bundleconfig-local/etc/oxm/");
99 graph = JanusGraphFactory.build().set("storage.backend", "inmemory").open();
103 public void configure() throws Exception {
104 loader = loaderFactory.createLoaderForVersion(ModelType.MOXY, schemaVersions.getDefaultVersion());
107 g = graph.traversal();
111 public void deConfigure() throws Exception {
116 public static void teardown() throws Exception {
121 public void createEdgeGVnfToVnfcTraversal() throws AAIException {
123 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","myvnf").next();
124 Vertex vnfc = g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
125 testEdgeSer.addEdge(g, gvnf, vnfc, "uses");
127 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(gvnf);
128 tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "vnfc");
130 assertEquals(vnfc, tQ.next());
136 public void createEdgeLinterfaceToLogicalLinkTraversal() throws AAIException {
138 Vertex lInterface = g.addV("aai-node-type","l-interface","interface-name","l-interface-a").next();
139 Vertex logicalLink = g.addV("aai-node-type","logical-link","link-name","logical-link-a").next();
140 testEdgeSer.addEdge(g, lInterface, logicalLink, "sourceLInterface");
142 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(lInterface);
143 tQ.createEdgeTraversal(EdgeType.COUSIN, "l-interface", "logical-link");
145 Vertex next = tQ.next();
147 assertEquals(logicalLink, next);
152 @SuppressWarnings("rawtypes")
154 public void createEdgeLinterfaceToLogicalLinkTraversal_tree() throws AAIException {
155 Vertex lInterface = g.addV("aai-node-type","l-interface","interface-name","l-interface-a").next();
156 Vertex logicalLink = g.addV("aai-node-type","logical-link","link-name","logical-link-a").next();
157 testEdgeSer.addEdge(g, lInterface, logicalLink, "sourceLInterface");
159 QueryBuilder<Tree> tQ = getNewTreeTraversalWithTestEdgeRules(lInterface).createEdgeTraversal(EdgeType.COUSIN,
160 loader.introspectorFromName("l-interface" ), loader.introspectorFromName("logical-link")).tree();
162 Vertex lInterfaceExpected = graph.traversal().V().has("aai-node-type","l-interface").has("interface-name","l-interface-a").next();
163 Vertex logicalLinkExpected = graph.traversal().V().has("aai-node-type", "logical-link").has("link-name","logical-link-a").next();
164 Tree tree = tQ.next();
165 assertTrue(tree.containsKey(lInterfaceExpected));
166 assertTrue(((Tree) tree.get(lInterfaceExpected)).containsKey(logicalLinkExpected));
169 @SuppressWarnings("rawtypes")
171 public void createEdgeLinterfaceToLogicalLinkTraversal_Path() throws AAIException {
172 Vertex pInterface = g.addV("aai-node-type","p-interface","interface-name","p-interface-a").next();
173 Vertex lInterface = g.addV("aai-node-type","l-interface","interface-name","l-interface-a").next();
174 Vertex logicalLink = g.addV("aai-node-type","logical-link","link-name","logical-link-a").next();
175 testEdgeSer.addEdge(g, lInterface, logicalLink);
176 testEdgeSer.addTreeEdge(g, pInterface, lInterface);
178 QueryBuilder<Path> tQ = getNewPathTraversalWithTestEdgeRules(pInterface).createEdgeTraversal(EdgeType.TREE,
179 loader.introspectorFromName("p-interface" ), loader.introspectorFromName("l-interface")).createEdgeTraversal(EdgeType.COUSIN,
180 loader.introspectorFromName("l-interface" ), loader.introspectorFromName("logical-link")).path();
182 Path path = tQ.next();
183 assertThat(path.objects(), contains(pInterface, lInterface, logicalLink));
186 @SuppressWarnings("rawtypes")
188 public void parentVertexTest() throws AAIException {
189 Vertex pInterface = g.addV("aai-node-type","p-interface","interface-name","p-interface-a").next();
190 Vertex lInterface = g.addV("aai-node-type","l-interface","interface-name","l-interface-a").next();
192 testEdgeSer.addTreeEdge(g, pInterface, lInterface);
194 QueryBuilder<Vertex> tQ = getNewEdgeTraversalWithTestEdgeRules(lInterface).getParentVertex();
196 Vertex parent = tQ.next();
197 assertThat(parent, is(pInterface));
202 public void createEdgeLinterfaceToLogicalLinkIntrospectorTraversal() throws AAIException {
204 Vertex lInterface = g.addV("aai-node-type","l-interface","interface-name","l-interface-a").next();
205 Vertex logicalLink = g.addV("aai-node-type","logical-link","link-name","logical-link-a").next();
206 testEdgeSer.addEdge(g, lInterface, logicalLink, "sourceLInterface");
208 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(lInterface);
209 tQ.createEdgeTraversal(EdgeType.COUSIN, loader.introspectorFromName("l-interface"), loader.introspectorFromName("logical-link"));
211 Vertex next = tQ.next();
213 assertEquals(logicalLink, next);
219 public void createEdgeLinterfaceToLogicalLinkVertexToIntrospectorTraversal() throws AAIException {
221 Vertex lInterface = g.addV("aai-node-type","l-interface","interface-name","l-interface-a").next();
222 Vertex logicalLink = g.addV("aai-node-type","logical-link","link-name","logical-link-a").next();
223 testEdgeSer.addEdge(g, lInterface, logicalLink, "sourceLInterface");
225 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(lInterface);
226 tQ.createEdgeTraversal(EdgeType.COUSIN, lInterface, loader.introspectorFromName("logical-link"));
228 Vertex next = tQ.next();
230 assertEquals(logicalLink, next);
236 public void edgeToVertexTraversalTest() throws AAIException {
238 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
239 Vertex vnfc1 = g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
241 testEdgeSer.addEdge(g, gvnf, vnfc1);
243 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(gvnf);
244 tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "vnfc");
246 List<Vertex> list = tQ.toList();
248 assertEquals("Has 1 vertexes ", 1, list.size());
249 assertTrue("Has vertex on the default edge ", list.contains(vnfc1));
255 public void edgeToVertexTraversalSingleOutRuleTest() throws AAIException {
257 Vertex vce = g.addV("aai-node-type","vce","vnf-id","vce").next();
258 Vertex vnfc1 = g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
260 testEdgeSer.addEdge(g, vce, vnfc1);
262 QueryBuilder<Vertex> tQ1 = getNewVertexTraversalWithTestEdgeRules(vce);
263 tQ1.createEdgeTraversal(EdgeType.COUSIN, "vce", "vnfc");
265 QueryBuilder<Vertex> tQ2 = getNewVertexTraversalWithTestEdgeRules(vnfc1);
266 tQ2.createEdgeTraversal(EdgeType.COUSIN, "vnfc", "vce");
268 List<Vertex> list1 = tQ1.toList();
269 List<Vertex> list2 = tQ2.toList();
271 assertEquals("1 - Has 1 vertexes ", 1, list1.size());
272 assertTrue("1 - traversal results in vnfc ", list1.contains(vnfc1));
273 assertEquals("2 - Has 1 vertexes ", 1, list2.size());
274 assertTrue("2 - traversal results in vce ", list2.contains(vce));
280 public void edgeToVertexTraversalSingleInRuleTest() throws AAIException {
282 Vertex vce = g.addV("aai-node-type","vce","vnf-id","vce").next();
283 Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
285 testEdgeSer.addEdge(g, vce, pserver);
287 QueryBuilder<Vertex> tQ1 = getNewVertexTraversalWithTestEdgeRules(vce);
288 tQ1.createEdgeTraversal(EdgeType.COUSIN, "vce", "pserver");
290 List<Vertex> list = tQ1.toList();
292 assertEquals("1 - Has 1 vertexes ", 1, list.size());
293 assertTrue("1 - traversal results in vnfc ", list.contains(pserver));
299 public void edgeToVertexMultiRuleTraversalTest() throws AAIException {
301 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
302 Vertex vnfc1 = g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
303 Vertex vnfc2 = g.addV("aai-node-type","vnfc","vnfc-name","b-name").next();
305 testEdgeSer.addEdge(g, gvnf, vnfc1);
306 testEdgeSer.addEdge(g, gvnf, vnfc2, "re-uses");
308 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(gvnf);
309 tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "vnfc");
311 List<Vertex> list = tQ.toList();
313 assertEquals("Has 2 vertexes ", 2, list.size());
314 assertTrue("Has vertex on the default edge ", list.contains(vnfc1));
315 assertTrue("Has vertex on the re-uses edge ", list.contains(vnfc2));
321 public void edgeToVertexMultiLabelTest() throws AAIException {
323 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
324 Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
325 Vertex vnfc1 = g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
327 testEdgeSer.addEdge(g, gvnf, vnfc1);
328 testEdgeSer.addEdge(g, pserver, vnfc1);
330 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(vnfc1);
331 tQ.createEdgeTraversal(EdgeType.COUSIN, "vnfc", "generic-vnf");
333 List<Vertex> list = tQ.toList();
335 assertEquals("Has 1 vertexes ", 1, list.size());
336 assertTrue("Only returns the generic vnf vertex", list.contains(gvnf));
342 public void limitTraversalTest() throws AAIException {
344 g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
345 g.addV("aai-node-type","vnfc","vnfc-name","b-name").next();
347 QueryBuilder<Vertex> tQ = new GremlinTraversal<>(loader, g);
348 tQ.getVerticesByProperty("aai-node-type","vnfc").limit(1);
350 List<Vertex> list = tQ.toList();
352 assertEquals("Has 1 vertexes ", 1, list.size());
358 public void getVertexesByPropertiesTraversalTest() throws AAIException {
360 g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
361 g.addV("aai-node-type","vnfc","vnfc-name","b-name").next();
363 QueryBuilder<Vertex> tQ = new GremlinTraversal<>(loader, g);
364 tQ.getVerticesByProperty("vnfc-name", Arrays.asList("a-name", "b-name"));
366 List<Vertex> list = tQ.toList();
368 assertEquals("Has 2 vertexes ", 2, list.size());
374 public void getVertexesByIndexedPropertyTraversalTest() throws AAIException {
376 g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
377 g.addV("aai-node-type","vnfc","vnfc-name","b-name").next();
379 QueryBuilder<Vertex> tQ = new GremlinTraversal<>(loader, g);
380 tQ.getVerticesByIndexedProperty("aai-node-type","vnfc");
382 List<Vertex> list = tQ.toList();
384 assertEquals("Has 2 vertexes ", 2, list.size());
390 public void dedupTraversalTest() throws AAIException {
392 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
393 Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
395 testEdgeSer.addEdge(g, gvnf, pserver);
396 testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
398 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(gvnf);
399 tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "pserver").dedup();
401 List<Vertex> list = tQ.toList();
403 assertEquals("Has 2 vertexes ", 1, list.size());
404 assertTrue("result has pserver ", list.contains(pserver));
410 public void storeCapTraversalTest() throws AAIException {
412 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
413 Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
415 testEdgeSer.addEdge(g, gvnf, pserver);
416 testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
418 GremlinTraversal<BulkSet<Vertex>> tQ = new GremlinTraversal<>(loader, g, gvnf);
419 tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "pserver").store("x").cap("x");
421 List<BulkSet<Vertex>> list = tQ.toList();
423 assertEquals("Has 2 vertexes ", 1, list.size());
424 assertEquals("result has pserver ",pserver, list.get(0).iterator().next());
430 public void storeCapUnfoldTraversalTest() throws AAIException {
432 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
433 Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
435 testEdgeSer.addEdge(g, gvnf, pserver);
436 testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
438 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(gvnf);
439 tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "pserver").store("x").cap("x").unfold();
441 List<Vertex> list = tQ.toList();
443 assertEquals("Has 2 vertexes ", 2, list.size());
444 assertTrue("result has pserver ", list.contains(pserver));
450 public void nextAndHasNextTraversalTest() throws AAIException {
452 Vertex v1 = g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
453 Vertex v2 = g.addV("aai-node-type","vnfc","vnfc-name","b-name").next();
455 QueryBuilder<Vertex> tQ = new GremlinTraversal<>(loader, g);
456 tQ.getVerticesByProperty("aai-node-type","vnfc");
458 List<Vertex> list = new ArrayList<>();
460 assertTrue("Has next 1 ",tQ.hasNext());
462 assertTrue("Has next 2 ",tQ.hasNext());
464 assertFalse("Has next 3 ",tQ.hasNext());
465 assertTrue("Has all the vertexes", list.contains(v1) && list.remove(v2));
470 public void edgeToVertexMultiRuleOutTraversalTest() throws AAIException {
472 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
473 Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
475 testEdgeSer.addEdge(g, gvnf, pserver);
476 testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
478 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(gvnf);
479 tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "pserver");
481 List<Vertex> list = tQ.toList();
483 assertEquals("Has 2 vertexes ", 2, list.size());
484 assertTrue("result has pserver ", list.contains(pserver));
490 public void edgeToVertexMultiRuleInTraversalTest() throws AAIException {
492 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
493 Vertex complex = g.addV("aai-node-type","complex","physical-location-id","a-name").next();
495 testEdgeSer.addEdge(g, gvnf, complex);
496 testEdgeSer.addEdge(g, gvnf, complex, "complex-generic-vnf-B");
498 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(gvnf);
499 tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "complex");
501 List<Vertex> list = tQ.toList();
503 assertEquals("Has 2 vertexes ", 2, list.size());
504 assertTrue("result has pserver ", list.contains(complex));
510 public void edgeTraversalSingleInRuleTest() throws AAIException {
512 Vertex vce = g.addV("aai-node-type","vce","vnf-id","vce").next();
513 Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
515 Edge e = testEdgeSer.addEdge(g, vce, pserver);
517 QueryBuilder<Edge> tQ1 = getNewEdgeTraversalWithTestEdgeRules(vce);
518 tQ1.getEdgesBetween(EdgeType.COUSIN, "vce", "pserver");
520 List<Edge> list = tQ1.toList();
522 assertEquals("1 - Has 1 edge ", 1, list.size());
523 assertTrue("1 - traversal results in edge ", list.contains(e));
529 public void edgeTraversalSingleOutRuleTest() throws AAIException {
531 Vertex vce = g.addV("aai-node-type","vce","vnf-id","vce").next();
532 Vertex vnfc1 = g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
534 Edge e = testEdgeSer.addEdge(g, vce, vnfc1);
536 QueryBuilder<Edge> tQ1 = getNewEdgeTraversalWithTestEdgeRules(vce);
537 tQ1.getEdgesBetween(EdgeType.COUSIN, "vce", "vnfc");
539 List<Edge> list1 = tQ1.toList();
541 assertEquals("1 - Has 1 edge ", 1, list1.size());
542 assertTrue("1 - traversal results in edge ", list1.contains(e));
548 public void edgeTraversalMultiRuleOutTraversalTest() throws AAIException {
550 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
551 Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
553 Edge e1 = testEdgeSer.addEdge(g, gvnf, pserver);
554 Edge e2 = testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
556 QueryBuilder<Edge> tQ = getNewEdgeTraversalWithTestEdgeRules(gvnf);
557 tQ.getEdgesBetween(EdgeType.COUSIN, "generic-vnf", "pserver");
559 List<Edge> list = tQ.toList();
561 assertEquals("Has 2 edges ", 2, list.size());
562 assertTrue("result has default edge ", list.contains(e1));
563 assertTrue("result has other edge ", list.contains(e2));
569 public void edgeTraversalMultiRuleInTraversalTest() throws AAIException {
571 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
572 Vertex complex = g.addV("aai-node-type","complex","physical-location-id","a-name").next();
574 Edge e1 = testEdgeSer.addEdge(g, gvnf, complex);
575 Edge e2 = testEdgeSer.addEdge(g, gvnf, complex, "complex-generic-vnf-B");
577 QueryBuilder<Edge> tQ = getNewEdgeTraversalWithTestEdgeRules(gvnf);
578 tQ.getEdgesBetween(EdgeType.COUSIN, "generic-vnf", "complex");
580 List<Edge> list = tQ.toList();
582 assertEquals("Has 2 edges ", 2, list.size());
583 assertTrue("result has default edge ", list.contains(e1));
584 assertTrue("result has other edge ", list.contains(e2));
590 public void edgeTraversalMultiRuleTraversalTest() throws AAIException {
592 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
593 Vertex vnfc1 = g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
594 Vertex vnfc2 = g.addV("aai-node-type","vnfc","vnfc-name","b-name").next();
596 Edge e1 = testEdgeSer.addEdge(g, gvnf, vnfc1);
597 Edge e2 = testEdgeSer.addEdge(g, gvnf, vnfc2, "re-uses");
599 QueryBuilder<Edge> tQ = getNewEdgeTraversalWithTestEdgeRules(gvnf);
600 tQ.getEdgesBetween(EdgeType.COUSIN, "generic-vnf", "vnfc");
602 List<Edge> list = tQ.toList();
604 assertEquals("Has 2 edges ", 2, list.size());
605 assertTrue("result has default edge ", list.contains(e1));
606 assertTrue("result has other edge ", list.contains(e2));
611 @Ignore("This test is failing for TraversalQueryTest and Optimized but it passes for GremlinQueryTest")
612 @Test (expected = NoEdgeRuleFoundException.class)
613 public void getEdgesBetweenWithLabelsEmptyListTest() throws AAIException {
615 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
616 Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
618 testEdgeSer.addEdge(g, gvnf, pserver);
619 testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
621 QueryBuilder<Edge> tQ = getNewEdgeTraversalWithTestEdgeRules(gvnf);
622 tQ.getEdgesBetweenWithLabels(EdgeType.COUSIN, "generic-vnf", "pserver", Collections.emptyList());
627 public void getEdgesBetweenWithLabelsSingleItemTest() throws AAIException {
629 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
630 Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
632 Edge e1 = testEdgeSer.addEdge(g, gvnf, pserver);
633 Edge e2 = testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
635 QueryBuilder<Edge> tQ = getNewEdgeTraversalWithTestEdgeRules(gvnf);
636 tQ.getEdgesBetweenWithLabels(EdgeType.COUSIN, "generic-vnf", "pserver", Collections.singletonList("generic-vnf-pserver-B"));
638 List<Edge> list = tQ.toList();
640 assertEquals("Has 1 edges ", 1, list.size());
641 assertFalse("result does not have default edge ", list.contains(e1));
642 assertTrue("result has other edge ", list.contains(e2));
647 public void getEdgesBetweenWithLabelsMultipleItemTest() throws AAIException {
649 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
650 Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
652 Edge e1 = testEdgeSer.addEdge(g, gvnf, pserver);
653 Edge e2 = testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
655 QueryBuilder<Edge> tQ = getNewEdgeTraversalWithTestEdgeRules(gvnf);
656 tQ.getEdgesBetweenWithLabels(EdgeType.COUSIN, "generic-vnf", "pserver", Arrays.asList("generic-vnf-pserver-B", "generic-vnf-pserver-A"));
658 List<Edge> list = tQ.toList();
660 assertEquals("Has 2 edges ", 2, list.size());
661 assertTrue("result has generic-vnf-pserver-A edge ", list.contains(e1));
662 assertTrue("result has generic-vnf-pserver-B edge ", list.contains(e2));
666 @Ignore("This test is failing for TraversalQueryTest and Optimized but it passes for GremlinQueryTest")
667 @Test (expected = NoEdgeRuleFoundException.class)
668 public void createEdgeTraversalWithLabelsEmptyListTest() throws AAIException {
670 Vertex gvnf = getVertex();
672 QueryBuilder<Edge> tQ = getNewEdgeTraversalWithTestEdgeRules(gvnf);
673 tQ.getEdgesBetweenWithLabels(EdgeType.COUSIN, "generic-vnf", "pserver", Collections.emptyList());
680 private Vertex getVertex() throws AAIException {
681 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
682 Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
684 testEdgeSer.addEdge(g, gvnf, pserver);
685 testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
690 public void createEdgeTraversalWithLabelsSingleItemTest() throws AAIException {
692 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
693 Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
695 Edge e1 = testEdgeSer.addEdge(g, gvnf, pserver);
696 Edge e2 = testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
698 QueryBuilder<Edge> tQ = getNewEdgeTraversalWithTestEdgeRules(gvnf);
699 tQ.getEdgesBetweenWithLabels(EdgeType.COUSIN, "generic-vnf", "pserver", Collections.singletonList("generic-vnf-pserver-B"));
701 List<Edge> list = tQ.toList();
703 assertEquals("Has 1 edges ", 1, list.size());
704 assertFalse("result does not have default edge ", list.contains(e1));
705 assertTrue("result has other edge ", list.contains(e2));
710 public void createEdgeTraversalWithLabelsMultipleItemTest() throws AAIException {
712 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
713 Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
715 Edge e1 = testEdgeSer.addEdge(g, gvnf, pserver);
716 Edge e2 = testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
718 QueryBuilder<Edge> tQ = getNewEdgeTraversalWithTestEdgeRules(gvnf);
719 tQ.getEdgesBetweenWithLabels(EdgeType.COUSIN, "generic-vnf", "pserver", Arrays.asList("generic-vnf-pserver-B", "generic-vnf-pserver-A"));
721 List<Edge> list = tQ.toList();
723 assertEquals("Has 2 edges ", 2, list.size());
724 assertTrue("result has generic-vnf-pserver-A edge ", list.contains(e1));
725 assertTrue("result has generic-vnf-pserver-B edge ", list.contains(e2));
729 protected abstract QueryBuilder<Edge> getNewEdgeTraversalWithTestEdgeRules(Vertex v);
731 protected abstract QueryBuilder<Edge> getNewEdgeTraversalWithTestEdgeRules();
733 protected abstract QueryBuilder<Vertex> getNewVertexTraversalWithTestEdgeRules(Vertex v);
735 protected abstract QueryBuilder<Vertex> getNewVertexTraversalWithTestEdgeRules();
737 protected abstract QueryBuilder<Tree> getNewTreeTraversalWithTestEdgeRules(Vertex v);
739 protected abstract QueryBuilder<Tree> getNewTreeTraversalWithTestEdgeRules();
741 protected abstract QueryBuilder<Path> getNewPathTraversalWithTestEdgeRules(Vertex v);
743 protected abstract QueryBuilder<Path> getNewPathTraversalWithTestEdgeRules();