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",
78 "schema.nodes.location=src/test/resources/onap/oxm",
79 "schema.edges.location=src/test/resources/onap/dbedgerules"
81 public abstract class QueryBuilderTestAbstraction {
83 protected Loader loader;
84 protected static Graph graph;
85 protected GraphTraversalSource g;
88 protected EdgeSerializer testEdgeSer;
91 protected LoaderFactory loaderFactory;
94 protected SchemaVersions schemaVersions;
97 public static void setup() throws Exception {
98 System.setProperty("AJSC_HOME", ".");
99 System.setProperty("BUNDLECONFIG_DIR", "src/test/resources/bundleconfig-local");
100 QueryFormatTestHelper.setFinalStatic(AAIConstants.class.getField("AAI_HOME_ETC_OXM"), "src/test/resources/bundleconfig-local/etc/oxm/");
101 graph = JanusGraphFactory.build().set("storage.backend", "inmemory").open();
105 public void configure() throws Exception {
106 loader = loaderFactory.createLoaderForVersion(ModelType.MOXY, schemaVersions.getDefaultVersion());
109 g = graph.traversal();
113 public void deConfigure() throws Exception {
118 public static void teardown() throws Exception {
123 public void createEdgeGVnfToVnfcTraversal() throws AAIException {
125 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","myvnf").next();
126 Vertex vnfc = g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
127 testEdgeSer.addEdge(g, gvnf, vnfc, "uses");
129 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(gvnf);
130 tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "vnfc");
132 assertEquals(vnfc, tQ.next());
138 public void createEdgeLinterfaceToLogicalLinkTraversal() throws AAIException {
140 Vertex lInterface = g.addV("aai-node-type","l-interface","interface-name","l-interface-a").next();
141 Vertex logicalLink = g.addV("aai-node-type","logical-link","link-name","logical-link-a").next();
142 testEdgeSer.addEdge(g, lInterface, logicalLink, "sourceLInterface");
144 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(lInterface);
145 tQ.createEdgeTraversal(EdgeType.COUSIN, "l-interface", "logical-link");
147 Vertex next = tQ.next();
149 assertEquals(logicalLink, next);
154 @SuppressWarnings("rawtypes")
156 public void createEdgeLinterfaceToLogicalLinkTraversal_tree() throws AAIException {
157 Vertex lInterface = g.addV("aai-node-type","l-interface","interface-name","l-interface-a").next();
158 Vertex logicalLink = g.addV("aai-node-type","logical-link","link-name","logical-link-a").next();
159 testEdgeSer.addEdge(g, lInterface, logicalLink, "sourceLInterface");
161 QueryBuilder<Tree> tQ = getNewTreeTraversalWithTestEdgeRules(lInterface).createEdgeTraversal(EdgeType.COUSIN,
162 loader.introspectorFromName("l-interface" ), loader.introspectorFromName("logical-link")).tree();
164 Vertex lInterfaceExpected = graph.traversal().V().has("aai-node-type","l-interface").has("interface-name","l-interface-a").next();
165 Vertex logicalLinkExpected = graph.traversal().V().has("aai-node-type", "logical-link").has("link-name","logical-link-a").next();
166 Tree tree = tQ.next();
167 assertTrue(tree.containsKey(lInterfaceExpected));
168 assertTrue(((Tree) tree.get(lInterfaceExpected)).containsKey(logicalLinkExpected));
171 @SuppressWarnings("rawtypes")
173 public void createEdgeLinterfaceToLogicalLinkTraversal_Path() throws AAIException {
174 Vertex pInterface = g.addV("aai-node-type","p-interface","interface-name","p-interface-a").next();
175 Vertex lInterface = g.addV("aai-node-type","l-interface","interface-name","l-interface-a").next();
176 Vertex logicalLink = g.addV("aai-node-type","logical-link","link-name","logical-link-a").next();
177 testEdgeSer.addEdge(g, lInterface, logicalLink);
178 testEdgeSer.addTreeEdge(g, pInterface, lInterface);
180 QueryBuilder<Path> tQ = getNewPathTraversalWithTestEdgeRules(pInterface).createEdgeTraversal(EdgeType.TREE,
181 loader.introspectorFromName("p-interface" ), loader.introspectorFromName("l-interface")).createEdgeTraversal(EdgeType.COUSIN,
182 loader.introspectorFromName("l-interface" ), loader.introspectorFromName("logical-link")).path();
184 Path path = tQ.next();
185 assertThat(path.objects(), contains(pInterface, lInterface, logicalLink));
188 @SuppressWarnings("rawtypes")
190 public void parentVertexTest() throws AAIException {
191 Vertex pInterface = g.addV("aai-node-type","p-interface","interface-name","p-interface-a").next();
192 Vertex lInterface = g.addV("aai-node-type","l-interface","interface-name","l-interface-a").next();
194 testEdgeSer.addTreeEdge(g, pInterface, lInterface);
196 QueryBuilder<Vertex> tQ = getNewEdgeTraversalWithTestEdgeRules(lInterface).getParentVertex();
198 Vertex parent = tQ.next();
199 assertThat(parent, is(pInterface));
204 public void createEdgeLinterfaceToLogicalLinkIntrospectorTraversal() throws AAIException {
206 Vertex lInterface = g.addV("aai-node-type","l-interface","interface-name","l-interface-a").next();
207 Vertex logicalLink = g.addV("aai-node-type","logical-link","link-name","logical-link-a").next();
208 testEdgeSer.addEdge(g, lInterface, logicalLink, "sourceLInterface");
210 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(lInterface);
211 tQ.createEdgeTraversal(EdgeType.COUSIN, loader.introspectorFromName("l-interface"), loader.introspectorFromName("logical-link"));
213 Vertex next = tQ.next();
215 assertEquals(logicalLink, next);
221 public void createEdgeLinterfaceToLogicalLinkVertexToIntrospectorTraversal() throws AAIException {
223 Vertex lInterface = g.addV("aai-node-type","l-interface","interface-name","l-interface-a").next();
224 Vertex logicalLink = g.addV("aai-node-type","logical-link","link-name","logical-link-a").next();
225 testEdgeSer.addEdge(g, lInterface, logicalLink, "sourceLInterface");
227 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(lInterface);
228 tQ.createEdgeTraversal(EdgeType.COUSIN, lInterface, loader.introspectorFromName("logical-link"));
230 Vertex next = tQ.next();
232 assertEquals(logicalLink, next);
238 public void edgeToVertexTraversalTest() throws AAIException {
240 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
241 Vertex vnfc1 = g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
243 testEdgeSer.addEdge(g, gvnf, vnfc1);
245 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(gvnf);
246 tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "vnfc");
248 List<Vertex> list = tQ.toList();
250 assertEquals("Has 1 vertexes ", 1, list.size());
251 assertTrue("Has vertex on the default edge ", list.contains(vnfc1));
257 public void edgeToVertexTraversalSingleOutRuleTest() throws AAIException {
259 Vertex vce = g.addV("aai-node-type","vce","vnf-id","vce").next();
260 Vertex vnfc1 = g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
262 testEdgeSer.addEdge(g, vce, vnfc1);
264 QueryBuilder<Vertex> tQ1 = getNewVertexTraversalWithTestEdgeRules(vce);
265 tQ1.createEdgeTraversal(EdgeType.COUSIN, "vce", "vnfc");
267 QueryBuilder<Vertex> tQ2 = getNewVertexTraversalWithTestEdgeRules(vnfc1);
268 tQ2.createEdgeTraversal(EdgeType.COUSIN, "vnfc", "vce");
270 List<Vertex> list1 = tQ1.toList();
271 List<Vertex> list2 = tQ2.toList();
273 assertEquals("1 - Has 1 vertexes ", 1, list1.size());
274 assertTrue("1 - traversal results in vnfc ", list1.contains(vnfc1));
275 assertEquals("2 - Has 1 vertexes ", 1, list2.size());
276 assertTrue("2 - traversal results in vce ", list2.contains(vce));
282 public void edgeToVertexTraversalSingleInRuleTest() throws AAIException {
284 Vertex vce = g.addV("aai-node-type","vce","vnf-id","vce").next();
285 Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
287 testEdgeSer.addEdge(g, vce, pserver);
289 QueryBuilder<Vertex> tQ1 = getNewVertexTraversalWithTestEdgeRules(vce);
290 tQ1.createEdgeTraversal(EdgeType.COUSIN, "vce", "pserver");
292 List<Vertex> list = tQ1.toList();
294 assertEquals("1 - Has 1 vertexes ", 1, list.size());
295 assertTrue("1 - traversal results in vnfc ", list.contains(pserver));
301 public void edgeToVertexMultiRuleTraversalTest() throws AAIException {
303 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
304 Vertex vnfc1 = g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
305 Vertex vnfc2 = g.addV("aai-node-type","vnfc","vnfc-name","b-name").next();
307 testEdgeSer.addEdge(g, gvnf, vnfc1);
308 testEdgeSer.addEdge(g, gvnf, vnfc2, "re-uses");
310 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(gvnf);
311 tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "vnfc");
313 List<Vertex> list = tQ.toList();
315 assertEquals("Has 2 vertexes ", 2, list.size());
316 assertTrue("Has vertex on the default edge ", list.contains(vnfc1));
317 assertTrue("Has vertex on the re-uses edge ", list.contains(vnfc2));
323 public void edgeToVertexMultiLabelTest() throws AAIException {
325 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
326 Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
327 Vertex vnfc1 = g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
329 testEdgeSer.addEdge(g, gvnf, vnfc1);
330 testEdgeSer.addEdge(g, pserver, vnfc1);
332 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(vnfc1);
333 tQ.createEdgeTraversal(EdgeType.COUSIN, "vnfc", "generic-vnf");
335 List<Vertex> list = tQ.toList();
337 assertEquals("Has 1 vertexes ", 1, list.size());
338 assertTrue("Only returns the generic vnf vertex", list.contains(gvnf));
344 public void limitTraversalTest() throws AAIException {
346 g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
347 g.addV("aai-node-type","vnfc","vnfc-name","b-name").next();
349 QueryBuilder<Vertex> tQ = new GremlinTraversal<>(loader, g);
350 tQ.getVerticesByProperty("aai-node-type","vnfc").limit(1);
352 List<Vertex> list = tQ.toList();
354 assertEquals("Has 1 vertexes ", 1, list.size());
360 public void getVertexesByPropertiesTraversalTest() throws AAIException {
362 g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
363 g.addV("aai-node-type","vnfc","vnfc-name","b-name").next();
365 QueryBuilder<Vertex> tQ = new GremlinTraversal<>(loader, g);
366 tQ.getVerticesByProperty("vnfc-name", Arrays.asList("a-name", "b-name"));
368 List<Vertex> list = tQ.toList();
370 assertEquals("Has 2 vertexes ", 2, list.size());
376 public void getVertexesByIndexedPropertyTraversalTest() throws AAIException {
378 g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
379 g.addV("aai-node-type","vnfc","vnfc-name","b-name").next();
381 QueryBuilder<Vertex> tQ = new GremlinTraversal<>(loader, g);
382 tQ.getVerticesByIndexedProperty("aai-node-type","vnfc");
384 List<Vertex> list = tQ.toList();
386 assertEquals("Has 2 vertexes ", 2, list.size());
392 public void dedupTraversalTest() throws AAIException {
394 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
395 Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
397 testEdgeSer.addEdge(g, gvnf, pserver);
398 testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
400 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(gvnf);
401 tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "pserver").dedup();
403 List<Vertex> list = tQ.toList();
405 assertEquals("Has 2 vertexes ", 1, list.size());
406 assertTrue("result has pserver ", list.contains(pserver));
412 public void storeCapTraversalTest() throws AAIException {
414 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
415 Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
417 testEdgeSer.addEdge(g, gvnf, pserver);
418 testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
420 GremlinTraversal<BulkSet<Vertex>> tQ = new GremlinTraversal<>(loader, g, gvnf);
421 tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "pserver").store("x").cap("x");
423 List<BulkSet<Vertex>> list = tQ.toList();
425 assertEquals("Has 2 vertexes ", 1, list.size());
426 assertEquals("result has pserver ",pserver, list.get(0).iterator().next());
432 public void storeCapUnfoldTraversalTest() throws AAIException {
434 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
435 Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
437 testEdgeSer.addEdge(g, gvnf, pserver);
438 testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
440 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(gvnf);
441 tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "pserver").store("x").cap("x").unfold();
443 List<Vertex> list = tQ.toList();
445 assertEquals("Has 2 vertexes ", 2, list.size());
446 assertTrue("result has pserver ", list.contains(pserver));
452 public void nextAndHasNextTraversalTest() throws AAIException {
454 Vertex v1 = g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
455 Vertex v2 = g.addV("aai-node-type","vnfc","vnfc-name","b-name").next();
457 QueryBuilder<Vertex> tQ = new GremlinTraversal<>(loader, g);
458 tQ.getVerticesByProperty("aai-node-type","vnfc");
460 List<Vertex> list = new ArrayList<>();
462 assertTrue("Has next 1 ",tQ.hasNext());
464 assertTrue("Has next 2 ",tQ.hasNext());
466 assertFalse("Has next 3 ",tQ.hasNext());
467 assertTrue("Has all the vertexes", list.contains(v1) && list.remove(v2));
472 public void edgeToVertexMultiRuleOutTraversalTest() throws AAIException {
474 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
475 Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
477 testEdgeSer.addEdge(g, gvnf, pserver);
478 testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
480 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(gvnf);
481 tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "pserver");
483 List<Vertex> list = tQ.toList();
485 assertEquals("Has 2 vertexes ", 2, list.size());
486 assertTrue("result has pserver ", list.contains(pserver));
492 public void edgeToVertexMultiRuleInTraversalTest() throws AAIException {
494 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
495 Vertex complex = g.addV("aai-node-type","complex","physical-location-id","a-name").next();
497 testEdgeSer.addEdge(g, gvnf, complex);
498 testEdgeSer.addEdge(g, gvnf, complex, "complex-generic-vnf-B");
500 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(gvnf);
501 tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "complex");
503 List<Vertex> list = tQ.toList();
505 assertEquals("Has 2 vertexes ", 2, list.size());
506 assertTrue("result has pserver ", list.contains(complex));
512 public void edgeTraversalSingleInRuleTest() throws AAIException {
514 Vertex vce = g.addV("aai-node-type","vce","vnf-id","vce").next();
515 Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
517 Edge e = testEdgeSer.addEdge(g, vce, pserver);
519 QueryBuilder<Edge> tQ1 = getNewEdgeTraversalWithTestEdgeRules(vce);
520 tQ1.getEdgesBetween(EdgeType.COUSIN, "vce", "pserver");
522 List<Edge> list = tQ1.toList();
524 assertEquals("1 - Has 1 edge ", 1, list.size());
525 assertTrue("1 - traversal results in edge ", list.contains(e));
531 public void edgeTraversalSingleOutRuleTest() throws AAIException {
533 Vertex vce = g.addV("aai-node-type","vce","vnf-id","vce").next();
534 Vertex vnfc1 = g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
536 Edge e = testEdgeSer.addEdge(g, vce, vnfc1);
538 QueryBuilder<Edge> tQ1 = getNewEdgeTraversalWithTestEdgeRules(vce);
539 tQ1.getEdgesBetween(EdgeType.COUSIN, "vce", "vnfc");
541 List<Edge> list1 = tQ1.toList();
543 assertEquals("1 - Has 1 edge ", 1, list1.size());
544 assertTrue("1 - traversal results in edge ", list1.contains(e));
550 public void edgeTraversalMultiRuleOutTraversalTest() throws AAIException {
552 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
553 Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
555 Edge e1 = testEdgeSer.addEdge(g, gvnf, pserver);
556 Edge e2 = testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
558 QueryBuilder<Edge> tQ = getNewEdgeTraversalWithTestEdgeRules(gvnf);
559 tQ.getEdgesBetween(EdgeType.COUSIN, "generic-vnf", "pserver");
561 List<Edge> list = tQ.toList();
563 assertEquals("Has 2 edges ", 2, list.size());
564 assertTrue("result has default edge ", list.contains(e1));
565 assertTrue("result has other edge ", list.contains(e2));
571 public void edgeTraversalMultiRuleInTraversalTest() throws AAIException {
573 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
574 Vertex complex = g.addV("aai-node-type","complex","physical-location-id","a-name").next();
576 Edge e1 = testEdgeSer.addEdge(g, gvnf, complex);
577 Edge e2 = testEdgeSer.addEdge(g, gvnf, complex, "complex-generic-vnf-B");
579 QueryBuilder<Edge> tQ = getNewEdgeTraversalWithTestEdgeRules(gvnf);
580 tQ.getEdgesBetween(EdgeType.COUSIN, "generic-vnf", "complex");
582 List<Edge> list = tQ.toList();
584 assertEquals("Has 2 edges ", 2, list.size());
585 assertTrue("result has default edge ", list.contains(e1));
586 assertTrue("result has other edge ", list.contains(e2));
592 public void edgeTraversalMultiRuleTraversalTest() throws AAIException {
594 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
595 Vertex vnfc1 = g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
596 Vertex vnfc2 = g.addV("aai-node-type","vnfc","vnfc-name","b-name").next();
598 Edge e1 = testEdgeSer.addEdge(g, gvnf, vnfc1);
599 Edge e2 = testEdgeSer.addEdge(g, gvnf, vnfc2, "re-uses");
601 QueryBuilder<Edge> tQ = getNewEdgeTraversalWithTestEdgeRules(gvnf);
602 tQ.getEdgesBetween(EdgeType.COUSIN, "generic-vnf", "vnfc");
604 List<Edge> list = tQ.toList();
606 assertEquals("Has 2 edges ", 2, list.size());
607 assertTrue("result has default edge ", list.contains(e1));
608 assertTrue("result has other edge ", list.contains(e2));
613 @Ignore("This test is failing for TraversalQueryTest and Optimized but it passes for GremlinQueryTest")
614 @Test (expected = NoEdgeRuleFoundException.class)
615 public void getEdgesBetweenWithLabelsEmptyListTest() throws AAIException {
617 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
618 Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
620 testEdgeSer.addEdge(g, gvnf, pserver);
621 testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
623 QueryBuilder<Edge> tQ = getNewEdgeTraversalWithTestEdgeRules(gvnf);
624 tQ.getEdgesBetweenWithLabels(EdgeType.COUSIN, "generic-vnf", "pserver", Collections.emptyList());
629 public void getEdgesBetweenWithLabelsSingleItemTest() throws AAIException {
631 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
632 Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
634 Edge e1 = testEdgeSer.addEdge(g, gvnf, pserver);
635 Edge e2 = testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
637 QueryBuilder<Edge> tQ = getNewEdgeTraversalWithTestEdgeRules(gvnf);
638 tQ.getEdgesBetweenWithLabels(EdgeType.COUSIN, "generic-vnf", "pserver", Collections.singletonList("generic-vnf-pserver-B"));
640 List<Edge> list = tQ.toList();
642 assertEquals("Has 1 edges ", 1, list.size());
643 assertFalse("result does not have default edge ", list.contains(e1));
644 assertTrue("result has other edge ", list.contains(e2));
649 public void getEdgesBetweenWithLabelsMultipleItemTest() throws AAIException {
651 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
652 Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
654 Edge e1 = testEdgeSer.addEdge(g, gvnf, pserver);
655 Edge e2 = testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
657 QueryBuilder<Edge> tQ = getNewEdgeTraversalWithTestEdgeRules(gvnf);
658 tQ.getEdgesBetweenWithLabels(EdgeType.COUSIN, "generic-vnf", "pserver", Arrays.asList("generic-vnf-pserver-B", "generic-vnf-pserver-A"));
660 List<Edge> list = tQ.toList();
662 assertEquals("Has 2 edges ", 2, list.size());
663 assertTrue("result has generic-vnf-pserver-A edge ", list.contains(e1));
664 assertTrue("result has generic-vnf-pserver-B edge ", list.contains(e2));
668 @Ignore("This test is failing for TraversalQueryTest and Optimized but it passes for GremlinQueryTest")
669 @Test (expected = NoEdgeRuleFoundException.class)
670 public void createEdgeTraversalWithLabelsEmptyListTest() throws AAIException {
672 Vertex gvnf = getVertex();
674 QueryBuilder<Edge> tQ = getNewEdgeTraversalWithTestEdgeRules(gvnf);
675 tQ.getEdgesBetweenWithLabels(EdgeType.COUSIN, "generic-vnf", "pserver", Collections.emptyList());
682 private Vertex getVertex() throws AAIException {
683 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
684 Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
686 testEdgeSer.addEdge(g, gvnf, pserver);
687 testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
692 public void createEdgeTraversalWithLabelsSingleItemTest() throws AAIException {
694 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
695 Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
697 Edge e1 = testEdgeSer.addEdge(g, gvnf, pserver);
698 Edge e2 = testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
700 QueryBuilder<Edge> tQ = getNewEdgeTraversalWithTestEdgeRules(gvnf);
701 tQ.getEdgesBetweenWithLabels(EdgeType.COUSIN, "generic-vnf", "pserver", Collections.singletonList("generic-vnf-pserver-B"));
703 List<Edge> list = tQ.toList();
705 assertEquals("Has 1 edges ", 1, list.size());
706 assertFalse("result does not have default edge ", list.contains(e1));
707 assertTrue("result has other edge ", list.contains(e2));
712 public void createEdgeTraversalWithLabelsMultipleItemTest() throws AAIException {
714 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
715 Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
717 Edge e1 = testEdgeSer.addEdge(g, gvnf, pserver);
718 Edge e2 = testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
720 QueryBuilder<Edge> tQ = getNewEdgeTraversalWithTestEdgeRules(gvnf);
721 tQ.getEdgesBetweenWithLabels(EdgeType.COUSIN, "generic-vnf", "pserver", Arrays.asList("generic-vnf-pserver-B", "generic-vnf-pserver-A"));
723 List<Edge> list = tQ.toList();
725 assertEquals("Has 2 edges ", 2, list.size());
726 assertTrue("result has generic-vnf-pserver-A edge ", list.contains(e1));
727 assertTrue("result has generic-vnf-pserver-B edge ", list.contains(e2));
731 protected abstract QueryBuilder<Edge> getNewEdgeTraversalWithTestEdgeRules(Vertex v);
733 protected abstract QueryBuilder<Edge> getNewEdgeTraversalWithTestEdgeRules();
735 protected abstract QueryBuilder<Vertex> getNewVertexTraversalWithTestEdgeRules(Vertex v);
737 protected abstract QueryBuilder<Vertex> getNewVertexTraversalWithTestEdgeRules();
739 protected abstract QueryBuilder<Tree> getNewTreeTraversalWithTestEdgeRules(Vertex v);
741 protected abstract QueryBuilder<Tree> getNewTreeTraversalWithTestEdgeRules();
743 protected abstract QueryBuilder<Path> getNewPathTraversalWithTestEdgeRules(Vertex v);
745 protected abstract QueryBuilder<Path> getNewPathTraversalWithTestEdgeRules();