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=========================================================
21 package org.onap.aai.query.builder;
23 import static org.hamcrest.CoreMatchers.is;
24 import static org.hamcrest.collection.IsIterableContainingInOrder.contains;
25 import static org.junit.Assert.*;
27 import java.util.ArrayList;
28 import java.util.Arrays;
29 import java.util.Collections;
30 import java.util.List;
32 import org.apache.tinkerpop.gremlin.process.traversal.Path;
33 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
34 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
35 import org.apache.tinkerpop.gremlin.process.traversal.step.util.BulkSet;
36 import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
37 import org.apache.tinkerpop.gremlin.structure.Edge;
38 import org.apache.tinkerpop.gremlin.structure.Graph;
39 import org.apache.tinkerpop.gremlin.structure.Vertex;
40 import org.janusgraph.core.JanusGraphFactory;
42 import org.junit.runner.RunWith;
43 import org.onap.aai.config.ConfigConfiguration;
44 import org.onap.aai.config.IntrospectionConfig;
45 import org.onap.aai.config.SpringContextAware;
46 import org.onap.aai.config.XmlFormatTransformerConfiguration;
47 import org.onap.aai.db.props.AAIProperties;
48 import org.onap.aai.edges.EdgeIngestor;
49 import org.onap.aai.edges.enums.EdgeType;
50 import org.onap.aai.exceptions.AAIException;
51 import org.onap.aai.introspection.Loader;
52 import org.onap.aai.introspection.LoaderFactory;
53 import org.onap.aai.introspection.ModelType;
54 import org.onap.aai.nodes.NodeIngestor;
55 import org.onap.aai.serialization.db.EdgeSerializer;
56 import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException;
57 import org.onap.aai.serialization.queryformats.QueryFormatTestHelper;
58 import org.onap.aai.setup.SchemaVersions;
59 import org.onap.aai.util.AAIConstants;
60 import org.springframework.beans.factory.annotation.Autowired;
61 import org.springframework.test.annotation.DirtiesContext;
62 import org.springframework.test.context.ContextConfiguration;
63 import org.springframework.test.context.TestPropertySource;
64 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
66 @RunWith(SpringJUnit4ClassRunner.class)
67 @ContextConfiguration(
68 classes = {ConfigConfiguration.class, QueryTestsConfigTranslator.class, NodeIngestor.class, EdgeIngestor.class,
69 EdgeSerializer.class, SpringContextAware.class, IntrospectionConfig.class,
70 XmlFormatTransformerConfiguration.class})
71 @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
73 properties = {"schema.translator.list = config", "schema.nodes.location=src/test/resources/onap/oxm",
74 "schema.edges.location=src/test/resources/onap/dbedgerules"})
75 public abstract class QueryBuilderTestAbstraction {
77 protected Loader loader;
78 protected static Graph graph;
79 protected GraphTraversalSource g;
82 protected EdgeSerializer testEdgeSer;
85 protected SchemaVersions schemaVersions;
88 protected LoaderFactory loaderFactory;
91 public static void setup() throws Exception {
92 System.setProperty("AJSC_HOME", ".");
93 System.setProperty("BUNDLECONFIG_DIR", "src/test/resources/bundleconfig-local");
94 QueryFormatTestHelper.setFinalStatic(AAIConstants.class.getField("AAI_HOME_ETC_OXM"),
95 "src/test/resources/bundleconfig-local/etc/oxm/");
96 graph = JanusGraphFactory.build().set("storage.backend", "inmemory").open();
100 public void configure() {
101 loader = loaderFactory.createLoaderForVersion(ModelType.MOXY, schemaVersions.getDefaultVersion());
103 g = graph.traversal();
107 public void deConfigure() {
112 public static void teardown() throws Exception {
117 * This helper method was designed to minimize the changes needed due to the eventual
118 * removal of the addV(String...) method.
119 * Correct vertex creation addV(label).property(k,v).property(k,v)...
122 protected GraphTraversal<Vertex, Vertex> addVHelper(GraphTraversalSource gts, String label, Object... props) {
123 for (int i = 0; i < props.length; i++) {
124 if (props[i].equals(AAIProperties.NODE_TYPE)) {
125 label = props[i + 1].toString();
128 GraphTraversal<Vertex, Vertex> v = gts.addV(label);
129 for (int i = 0; i < props.length; i += 2) {
130 v.property(props[i], props[i + 1]);
136 public void createEdgeGVnfToVnfcTraversal() throws AAIException {
138 Vertex gvnf = this.addVHelper(g, "vertex", "aai-node-type", "generic-vnf", "vnf-id", "myvnf").next();
139 Vertex vnfc = this.addVHelper(g, "vertex", "aai-node-type", "vnfc", "vnfc-name", "a-name").next();
140 testEdgeSer.addEdge(g, gvnf, vnfc, "uses");
142 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(gvnf);
143 tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "vnfc");
145 assertEquals(vnfc, tQ.next());
150 public void createEdgeLinterfaceToLogicalLinkTraversal() throws AAIException {
153 this.addVHelper(g, "vertex", "aai-node-type", "l-interface", "interface-name", "l-interface-a").next();
155 this.addVHelper(g, "vertex", "aai-node-type", "logical-link", "link-name", "logical-link-a").next();
156 testEdgeSer.addEdge(g, lInterface, logicalLink, "sourceLInterface");
158 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(lInterface);
159 tQ.createEdgeTraversal(EdgeType.COUSIN, "l-interface", "logical-link");
161 Vertex next = tQ.next();
163 assertEquals(logicalLink, next);
167 @SuppressWarnings("rawtypes")
169 public void createEdgeLinterfaceToLogicalLinkTraversal_tree() throws AAIException {
171 this.addVHelper(g, "vertex", "aai-node-type", "l-interface", "interface-name", "l-interface-a").next();
173 this.addVHelper(g, "vertex", "aai-node-type", "logical-link", "link-name", "logical-link-a").next();
174 testEdgeSer.addEdge(g, lInterface, logicalLink, "sourceLInterface");
176 QueryBuilder<Tree> tQ = getNewTreeTraversalWithTestEdgeRules(lInterface).createEdgeTraversal(EdgeType.COUSIN,
177 loader.introspectorFromName("l-interface"), loader.introspectorFromName("logical-link")).tree();
179 Vertex lInterfaceExpected =
180 graph.traversal().V().has("aai-node-type", "l-interface").has("interface-name", "l-interface-a").next();
181 Vertex logicalLinkExpected =
182 graph.traversal().V().has("aai-node-type", "logical-link").has("link-name", "logical-link-a").next();
183 Tree tree = tQ.next();
184 assertTrue(tree.containsKey(lInterfaceExpected));
185 assertTrue(((Tree) tree.get(lInterfaceExpected)).containsKey(logicalLinkExpected));
188 @SuppressWarnings("rawtypes")
190 public void createEdgeLinterfaceToLogicalLinkTraversal_Path() throws AAIException {
192 this.addVHelper(g, "vertex", "aai-node-type", "p-interface", "interface-name", "p-interface-a").next();
194 this.addVHelper(g, "vertex", "aai-node-type", "l-interface", "interface-name", "l-interface-a").next();
196 this.addVHelper(g, "vertex", "aai-node-type", "logical-link", "link-name", "logical-link-a").next();
197 testEdgeSer.addEdge(g, lInterface, logicalLink);
198 testEdgeSer.addTreeEdge(g, pInterface, lInterface);
200 QueryBuilder<Path> tQ = getNewPathTraversalWithTestEdgeRules(pInterface)
201 .createEdgeTraversal(EdgeType.TREE, loader.introspectorFromName("p-interface"),
202 loader.introspectorFromName("l-interface"))
203 .createEdgeTraversal(EdgeType.COUSIN, loader.introspectorFromName("l-interface"),
204 loader.introspectorFromName("logical-link"))
207 Path path = tQ.next();
208 assertThat(path.objects(), contains(pInterface, lInterface, logicalLink));
211 @SuppressWarnings("rawtypes")
213 public void parentVertexTest() throws AAIException {
215 this.addVHelper(g, "vertex", "aai-node-type", "p-interface", "interface-name", "p-interface-a").next();
217 this.addVHelper(g, "vertex", "aai-node-type", "l-interface", "interface-name", "l-interface-a").next();
219 testEdgeSer.addTreeEdge(g, pInterface, lInterface);
221 QueryBuilder<Vertex> tQ = getNewEdgeTraversalWithTestEdgeRules(lInterface).getParentVertex();
223 Vertex parent = tQ.next();
224 assertThat(parent, is(pInterface));
228 public void createEdgeLinterfaceToLogicalLinkIntrospectorTraversal() throws AAIException {
231 this.addVHelper(g, "vertex", "aai-node-type", "l-interface", "interface-name", "l-interface-a").next();
233 this.addVHelper(g, "vertex", "aai-node-type", "logical-link", "link-name", "logical-link-a").next();
234 testEdgeSer.addEdge(g, lInterface, logicalLink, "sourceLInterface");
236 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(lInterface);
237 tQ.createEdgeTraversal(EdgeType.COUSIN, loader.introspectorFromName("l-interface"),
238 loader.introspectorFromName("logical-link"));
240 Vertex next = tQ.next();
242 assertEquals(logicalLink, next);
247 public void createEdgeLinterfaceToLogicalLinkVertexToIntrospectorTraversal() throws AAIException {
250 this.addVHelper(g, "vertex", "aai-node-type", "l-interface", "interface-name", "l-interface-a").next();
252 this.addVHelper(g, "vertex", "aai-node-type", "logical-link", "link-name", "logical-link-a").next();
253 testEdgeSer.addEdge(g, lInterface, logicalLink, "sourceLInterface");
255 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(lInterface);
256 tQ.createEdgeTraversal(EdgeType.COUSIN, lInterface, loader.introspectorFromName("logical-link"));
258 Vertex next = tQ.next();
260 assertEquals(logicalLink, next);
265 public void edgeToVertexTraversalTest() throws AAIException {
267 Vertex gvnf = this.addVHelper(g, "vertex", "aai-node-type", "generic-vnf", "vnf-id", "gvnf").next();
268 Vertex vnfc1 = this.addVHelper(g, "vertex", "aai-node-type", "vnfc", "vnfc-name", "a-name").next();
270 testEdgeSer.addEdge(g, gvnf, vnfc1);
272 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(gvnf);
273 tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "vnfc");
275 List<Vertex> list = tQ.toList();
277 assertEquals("Has 1 vertexes ", 1, list.size());
278 assertTrue("Has vertex on the default edge ", list.contains(vnfc1));
283 public void edgeToVertexTraversalSingleOutRuleTest() throws AAIException {
285 Vertex vce = this.addVHelper(g, "vertex", "aai-node-type", "vce", "vnf-id", "vce").next();
286 Vertex vnfc1 = this.addVHelper(g, "vertex", "aai-node-type", "vnfc", "vnfc-name", "a-name").next();
288 testEdgeSer.addEdge(g, vce, vnfc1);
290 QueryBuilder<Vertex> tQ1 = getNewVertexTraversalWithTestEdgeRules(vce);
291 tQ1.createEdgeTraversal(EdgeType.COUSIN, "vce", "vnfc");
293 QueryBuilder<Vertex> tQ2 = getNewVertexTraversalWithTestEdgeRules(vnfc1);
294 tQ2.createEdgeTraversal(EdgeType.COUSIN, "vnfc", "vce");
296 List<Vertex> list1 = tQ1.toList();
297 List<Vertex> list2 = tQ2.toList();
299 assertEquals("1 - Has 1 vertexes ", 1, list1.size());
300 assertTrue("1 - traversal results in vnfc ", list1.contains(vnfc1));
301 assertEquals("2 - Has 1 vertexes ", 1, list2.size());
302 assertTrue("2 - traversal results in vce ", list2.contains(vce));
307 public void edgeToVertexTraversalSingleInRuleTest() throws AAIException {
309 Vertex vce = this.addVHelper(g, "vertex", "aai-node-type", "vce", "vnf-id", "vce").next();
310 Vertex pserver = this.addVHelper(g, "vertex", "aai-node-type", "pserver", "hostname", "a-name").next();
312 testEdgeSer.addEdge(g, vce, pserver);
314 QueryBuilder<Vertex> tQ1 = getNewVertexTraversalWithTestEdgeRules(vce);
315 tQ1.createEdgeTraversal(EdgeType.COUSIN, "vce", "pserver");
317 List<Vertex> list = tQ1.toList();
319 assertEquals("1 - Has 1 vertexes ", 1, list.size());
320 assertTrue("1 - traversal results in vnfc ", list.contains(pserver));
325 public void edgeToVertexMultiRuleTraversalTest() throws AAIException {
327 Vertex gvnf = this.addVHelper(g, "vertex", "aai-node-type", "generic-vnf", "vnf-id", "gvnf").next();
328 Vertex vnfc1 = this.addVHelper(g, "vertex", "aai-node-type", "vnfc", "vnfc-name", "a-name").next();
329 Vertex vnfc2 = this.addVHelper(g, "vertex", "aai-node-type", "vnfc", "vnfc-name", "b-name").next();
331 testEdgeSer.addEdge(g, gvnf, vnfc1);
332 testEdgeSer.addEdge(g, gvnf, vnfc2, "re-uses");
334 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(gvnf);
335 tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "vnfc");
337 List<Vertex> list = tQ.toList();
339 assertEquals("Has 2 vertexes ", 2, list.size());
340 assertTrue("Has vertex on the default edge ", list.contains(vnfc1));
341 assertTrue("Has vertex on the re-uses edge ", list.contains(vnfc2));
346 public void edgeToVertexMultiLabelTest() throws AAIException {
348 Vertex gvnf = this.addVHelper(g, "vertex", "aai-node-type", "generic-vnf", "vnf-id", "gvnf").next();
349 Vertex pserver = this.addVHelper(g, "vertex", "aai-node-type", "pserver", "hostname", "a-name").next();
350 Vertex vnfc1 = this.addVHelper(g, "vertex", "aai-node-type", "vnfc", "vnfc-name", "a-name").next();
352 testEdgeSer.addEdge(g, gvnf, vnfc1);
353 testEdgeSer.addEdge(g, pserver, vnfc1);
355 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(vnfc1);
356 tQ.createEdgeTraversal(EdgeType.COUSIN, "vnfc", "generic-vnf");
358 List<Vertex> list = tQ.toList();
360 assertEquals("Has 1 vertexes ", 1, list.size());
361 assertTrue("Only returns the generic vnf vertex", list.contains(gvnf));
366 public void limitTraversalTest() {
368 this.addVHelper(g, "vertex", "aai-node-type", "vnfc", "vnfc-name", "a-name").next();
369 this.addVHelper(g, "vertex", "aai-node-type", "vnfc", "vnfc-name", "b-name").next();
371 QueryBuilder<Vertex> tQ = new GremlinTraversal<>(loader, g);
372 tQ.getVerticesByProperty("aai-node-type", "vnfc").limit(1);
374 List<Vertex> list = tQ.toList();
376 assertEquals("Has 1 vertexes ", 1, list.size());
381 public void getVertexesByPropertiesTraversalTest() {
383 this.addVHelper(g, "vertex", "aai-node-type", "vnfc", "vnfc-name", "a-name").next();
384 this.addVHelper(g, "vertex", "aai-node-type", "vnfc", "vnfc-name", "b-name").next();
386 QueryBuilder<Vertex> tQ = new GremlinTraversal<>(loader, g);
387 tQ.getVerticesByProperty("vnfc-name", Arrays.asList("a-name", "b-name"));
389 List<Vertex> list = tQ.toList();
391 assertEquals("Has 2 vertexes ", 2, list.size());
396 public void getVerticesByCommaSeperatedValueTraversalTest() {
398 this.addVHelper(g, "vertex", "aai-node-type", "vnfc", "vnfc-name", "a-name").next();
399 this.addVHelper(g, "vertex", "aai-node-type", "vnfc", "vnfc-name", "b-name").next();
401 QueryBuilder<Vertex> tQ = new GremlinTraversal<>(loader, g);
402 tQ.getVerticesByCommaSeperatedValue("vnfc-name", "a-name, b-name");
404 List<Vertex> list = tQ.toList();
406 assertEquals("Has 2 vertexes ", 2, list.size());
410 public void getVertexesByIndexedPropertyTraversalTest() {
412 this.addVHelper(g, "vertex", "aai-node-type", "vnfc", "vnfc-name", "a-name").next();
413 this.addVHelper(g, "vertex", "aai-node-type", "vnfc", "vnfc-name", "b-name").next();
415 QueryBuilder<Vertex> tQ = new GremlinTraversal<>(loader, g);
416 tQ.getVerticesByIndexedProperty("aai-node-type", "vnfc");
418 List<Vertex> list = tQ.toList();
420 assertEquals("Has 2 vertexes ", 2, list.size());
424 public void dedupTraversalTest() throws AAIException {
426 Vertex gvnf = this.addVHelper(g, "vertex", "aai-node-type", "generic-vnf", "vnf-id", "gvnf").next();
427 Vertex pserver = this.addVHelper(g, "vertex", "aai-node-type", "pserver", "hostname", "a-name").next();
429 testEdgeSer.addEdge(g, gvnf, pserver);
430 testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
432 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(gvnf);
433 tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "pserver").dedup();
435 List<Vertex> list = tQ.toList();
437 assertEquals("Has 2 vertexes ", 1, list.size());
438 assertTrue("result has pserver ", list.contains(pserver));
443 public void storeCapTraversalTest() throws AAIException {
445 Vertex gvnf = this.addVHelper(g, "vertex", "aai-node-type", "generic-vnf", "vnf-id", "gvnf").next();
446 Vertex pserver = this.addVHelper(g, "vertex", "aai-node-type", "pserver", "hostname", "a-name").next();
448 testEdgeSer.addEdge(g, gvnf, pserver);
449 testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
451 GremlinTraversal<BulkSet<Vertex>> tQ = new GremlinTraversal<>(loader, g, gvnf);
452 tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "pserver").store("x").cap("x");
454 List<BulkSet<Vertex>> list = tQ.toList();
456 assertEquals("Has 2 vertexes ", 1, list.size());
457 assertEquals("result has pserver ", pserver, list.get(0).iterator().next());
462 public void storeCapUnfoldTraversalTest() throws AAIException {
464 Vertex gvnf = this.addVHelper(g, "vertex", "aai-node-type", "generic-vnf", "vnf-id", "gvnf").next();
465 Vertex pserver = this.addVHelper(g, "vertex", "aai-node-type", "pserver", "hostname", "a-name").next();
467 testEdgeSer.addEdge(g, gvnf, pserver);
468 testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
470 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(gvnf);
471 tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "pserver").store("x").cap("x").unfold();
473 List<Vertex> list = tQ.toList();
475 assertEquals("Has 2 vertexes ", 2, list.size());
476 assertTrue("result has pserver ", list.contains(pserver));
481 public void nextAndHasNextTraversalTest() {
483 Vertex v1 = this.addVHelper(g, "vertex", "aai-node-type", "vnfc", "vnfc-name", "a-name").next();
484 Vertex v2 = this.addVHelper(g, "vertex", "aai-node-type", "vnfc", "vnfc-name", "b-name").next();
486 QueryBuilder<Vertex> tQ = new GremlinTraversal<>(loader, g);
487 tQ.getVerticesByProperty("aai-node-type", "vnfc");
489 List<Vertex> list = new ArrayList<>();
491 assertTrue("Has next 1 ", tQ.hasNext());
493 assertTrue("Has next 2 ", tQ.hasNext());
495 assertFalse("Has next 3 ", tQ.hasNext());
496 assertTrue("Has all the vertexes", list.contains(v1) && list.remove(v2));
501 public void edgeToVertexMultiRuleOutTraversalTest() throws AAIException {
503 Vertex gvnf = this.addVHelper(g, "vertex", "aai-node-type", "generic-vnf", "vnf-id", "gvnf").next();
504 Vertex pserver = this.addVHelper(g, "vertex", "aai-node-type", "pserver", "hostname", "a-name").next();
506 testEdgeSer.addEdge(g, gvnf, pserver);
507 testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
509 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(gvnf);
510 tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "pserver");
512 List<Vertex> list = tQ.toList();
514 assertEquals("Has 2 vertexes ", 2, list.size());
515 assertTrue("result has pserver ", list.contains(pserver));
520 public void edgeToVertexMultiRuleInTraversalTest() throws AAIException {
522 Vertex gvnf = this.addVHelper(g, "vertex", "aai-node-type", "generic-vnf", "vnf-id", "gvnf").next();
524 this.addVHelper(g, "vertex", "aai-node-type", "complex", "physical-location-id", "a-name").next();
526 testEdgeSer.addEdge(g, gvnf, complex);
527 testEdgeSer.addEdge(g, gvnf, complex, "complex-generic-vnf-B");
529 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(gvnf);
530 tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "complex");
532 List<Vertex> list = tQ.toList();
534 assertEquals("Has 2 vertexes ", 2, list.size());
535 assertTrue("result has pserver ", list.contains(complex));
540 public void edgeTraversalSingleInRuleTest() throws AAIException {
542 Vertex vce = this.addVHelper(g, "vertex", "aai-node-type", "vce", "vnf-id", "vce").next();
543 Vertex pserver = this.addVHelper(g, "vertex", "aai-node-type", "pserver", "hostname", "a-name").next();
545 Edge e = testEdgeSer.addEdge(g, vce, pserver);
547 QueryBuilder<Edge> tQ1 = getNewEdgeTraversalWithTestEdgeRules(vce);
548 tQ1.getEdgesBetween(EdgeType.COUSIN, "vce", "pserver");
550 List<Edge> list = tQ1.toList();
552 assertEquals("1 - Has 1 edge ", 1, list.size());
553 assertTrue("1 - traversal results in edge ", list.contains(e));
558 public void edgeTraversalSingleOutRuleTest() throws AAIException {
560 Vertex vce = this.addVHelper(g, "vertex", "aai-node-type", "vce", "vnf-id", "vce").next();
561 Vertex vnfc1 = this.addVHelper(g, "vertex", "aai-node-type", "vnfc", "vnfc-name", "a-name").next();
563 Edge e = testEdgeSer.addEdge(g, vce, vnfc1);
565 QueryBuilder<Edge> tQ1 = getNewEdgeTraversalWithTestEdgeRules(vce);
566 tQ1.getEdgesBetween(EdgeType.COUSIN, "vce", "vnfc");
568 List<Edge> list1 = tQ1.toList();
570 assertEquals("1 - Has 1 edge ", 1, list1.size());
571 assertTrue("1 - traversal results in edge ", list1.contains(e));
576 public void edgeTraversalMultiRuleOutTraversalTest() throws AAIException {
578 Vertex gvnf = this.addVHelper(g, "vertex", "aai-node-type", "generic-vnf", "vnf-id", "gvnf").next();
579 Vertex pserver = this.addVHelper(g, "vertex", "aai-node-type", "pserver", "hostname", "a-name").next();
581 Edge e1 = testEdgeSer.addEdge(g, gvnf, pserver);
582 Edge e2 = testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
584 QueryBuilder<Edge> tQ = getNewEdgeTraversalWithTestEdgeRules(gvnf);
585 tQ.getEdgesBetween(EdgeType.COUSIN, "generic-vnf", "pserver");
587 List<Edge> list = tQ.toList();
589 assertEquals("Has 2 edges ", 2, list.size());
590 assertTrue("result has default edge ", list.contains(e1));
591 assertTrue("result has other edge ", list.contains(e2));
596 public void edgeTraversalMultiRuleInTraversalTest() throws AAIException {
598 Vertex gvnf = this.addVHelper(g, "vertex", "aai-node-type", "generic-vnf", "vnf-id", "gvnf").next();
600 this.addVHelper(g, "vertex", "aai-node-type", "complex", "physical-location-id", "a-name").next();
602 Edge e1 = testEdgeSer.addEdge(g, gvnf, complex);
603 Edge e2 = testEdgeSer.addEdge(g, gvnf, complex, "complex-generic-vnf-B");
605 QueryBuilder<Edge> tQ = getNewEdgeTraversalWithTestEdgeRules(gvnf);
606 tQ.getEdgesBetween(EdgeType.COUSIN, "generic-vnf", "complex");
608 List<Edge> list = tQ.toList();
610 assertEquals("Has 2 edges ", 2, list.size());
611 assertTrue("result has default edge ", list.contains(e1));
612 assertTrue("result has other edge ", list.contains(e2));
617 public void edgeTraversalMultiRuleTraversalTest() throws AAIException {
619 Vertex gvnf = this.addVHelper(g, "vertex", "aai-node-type", "generic-vnf", "vnf-id", "gvnf").next();
620 Vertex vnfc1 = this.addVHelper(g, "vertex", "aai-node-type", "vnfc", "vnfc-name", "a-name").next();
621 Vertex vnfc2 = this.addVHelper(g, "vertex", "aai-node-type", "vnfc", "vnfc-name", "b-name").next();
623 Edge e1 = testEdgeSer.addEdge(g, gvnf, vnfc1);
624 Edge e2 = testEdgeSer.addEdge(g, gvnf, vnfc2, "re-uses");
626 QueryBuilder<Edge> tQ = getNewEdgeTraversalWithTestEdgeRules(gvnf);
627 tQ.getEdgesBetween(EdgeType.COUSIN, "generic-vnf", "vnfc");
629 List<Edge> list = tQ.toList();
631 assertEquals("Has 2 edges ", 2, list.size());
632 assertTrue("result has default edge ", list.contains(e1));
633 assertTrue("result has other edge ", list.contains(e2));
637 @Ignore("This test is failing for TraversalQueryTest and Optimized but it passes for GremlinQueryTest")
638 @Test(expected = NoEdgeRuleFoundException.class)
639 public void getEdgesBetweenWithLabelsEmptyListTest() throws AAIException {
641 Vertex gvnf = this.addVHelper(g, "vertex", "aai-node-type", "generic-vnf", "vnf-id", "gvnf").next();
642 Vertex pserver = this.addVHelper(g, "vertex", "aai-node-type", "pserver", "hostname", "a-name").next();
644 testEdgeSer.addEdge(g, gvnf, pserver);
645 testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
647 QueryBuilder<Edge> tQ = getNewEdgeTraversalWithTestEdgeRules(gvnf);
648 tQ.getEdgesBetweenWithLabels(EdgeType.COUSIN, "generic-vnf", "pserver", Collections.emptyList());
653 public void getEdgesBetweenWithLabelsSingleItemTest() throws AAIException {
655 Vertex gvnf = this.addVHelper(g, "vertex", "aai-node-type", "generic-vnf", "vnf-id", "gvnf").next();
656 Vertex pserver = this.addVHelper(g, "vertex", "aai-node-type", "pserver", "hostname", "a-name").next();
658 Edge e1 = testEdgeSer.addEdge(g, gvnf, pserver);
659 Edge e2 = testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
661 QueryBuilder<Edge> tQ = getNewEdgeTraversalWithTestEdgeRules(gvnf);
662 tQ.getEdgesBetweenWithLabels(EdgeType.COUSIN, "generic-vnf", "pserver",
663 Collections.singletonList("generic-vnf-pserver-B"));
665 List<Edge> list = tQ.toList();
667 assertEquals("Has 1 edges ", 1, list.size());
668 assertFalse("result does not have default edge ", list.contains(e1));
669 assertTrue("result has other edge ", list.contains(e2));
674 public void getEdgesBetweenWithLabelsMultipleItemTest() throws AAIException {
676 Vertex gvnf = this.addVHelper(g, "vertex", "aai-node-type", "generic-vnf", "vnf-id", "gvnf").next();
677 Vertex pserver = this.addVHelper(g, "vertex", "aai-node-type", "pserver", "hostname", "a-name").next();
679 Edge e1 = testEdgeSer.addEdge(g, gvnf, pserver);
680 Edge e2 = testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
682 QueryBuilder<Edge> tQ = getNewEdgeTraversalWithTestEdgeRules(gvnf);
683 tQ.getEdgesBetweenWithLabels(EdgeType.COUSIN, "generic-vnf", "pserver",
684 Arrays.asList("generic-vnf-pserver-B", "generic-vnf-pserver-A"));
686 List<Edge> list = tQ.toList();
688 assertEquals("Has 2 edges ", 2, list.size());
689 assertTrue("result has generic-vnf-pserver-A edge ", list.contains(e1));
690 assertTrue("result has generic-vnf-pserver-B edge ", list.contains(e2));
694 @Ignore("This test is failing for TraversalQueryTest and Optimized but it passes for GremlinQueryTest")
695 @Test(expected = NoEdgeRuleFoundException.class)
696 public void createEdgeTraversalWithLabelsEmptyListTest() throws AAIException {
698 Vertex gvnf = getVertex();
700 QueryBuilder<Edge> tQ = getNewEdgeTraversalWithTestEdgeRules(gvnf);
701 tQ.getEdgesBetweenWithLabels(EdgeType.COUSIN, "generic-vnf", "pserver", Collections.emptyList());
707 private Vertex getVertex() throws AAIException {
708 Vertex gvnf = this.addVHelper(g, "vertex", "aai-node-type", "generic-vnf", "vnf-id", "gvnf").next();
709 Vertex pserver = this.addVHelper(g, "vertex", "aai-node-type", "pserver", "hostname", "a-name").next();
711 testEdgeSer.addEdge(g, gvnf, pserver);
712 testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
717 public void createEdgeTraversalWithLabelsSingleItemTest() throws AAIException {
719 Vertex gvnf = this.addVHelper(g, "vertex", "aai-node-type", "generic-vnf", "vnf-id", "gvnf").next();
720 Vertex pserver = this.addVHelper(g, "vertex", "aai-node-type", "pserver", "hostname", "a-name").next();
722 Edge e1 = testEdgeSer.addEdge(g, gvnf, pserver);
723 Edge e2 = testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
725 QueryBuilder<Edge> tQ = getNewEdgeTraversalWithTestEdgeRules(gvnf);
726 tQ.getEdgesBetweenWithLabels(EdgeType.COUSIN, "generic-vnf", "pserver",
727 Collections.singletonList("generic-vnf-pserver-B"));
729 List<Edge> list = tQ.toList();
731 assertEquals("Has 1 edges ", 1, list.size());
732 assertFalse("result does not have default edge ", list.contains(e1));
733 assertTrue("result has other edge ", list.contains(e2));
738 public void createEdgeTraversalWithLabelsMultipleItemTest() throws AAIException {
740 Vertex gvnf = this.addVHelper(g, "vertex", "aai-node-type", "generic-vnf", "vnf-id", "gvnf").next();
741 Vertex pserver = this.addVHelper(g, "vertex", "aai-node-type", "pserver", "hostname", "a-name").next();
743 Edge e1 = testEdgeSer.addEdge(g, gvnf, pserver);
744 Edge e2 = testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
746 QueryBuilder<Edge> tQ = getNewEdgeTraversalWithTestEdgeRules(gvnf);
747 tQ.getEdgesBetweenWithLabels(EdgeType.COUSIN, "generic-vnf", "pserver",
748 Arrays.asList("generic-vnf-pserver-B", "generic-vnf-pserver-A"));
750 List<Edge> list = tQ.toList();
752 assertEquals("Has 2 edges ", 2, list.size());
753 assertTrue("result has generic-vnf-pserver-A edge ", list.contains(e1));
754 assertTrue("result has generic-vnf-pserver-B edge ", list.contains(e2));
759 public void createEdgeTraversalIfParameterIsPresentParameterExistsTest() throws AAIException {
761 Vertex gvnf = this.addVHelper(g, "vertex", "aai-node-type", "generic-vnf", "vnf-id", "gvnf").next();
762 Vertex pserver1 = this.addVHelper(g, "vertex", "aai-node-type", "pserver", "hostname", "a-name").next();
763 Vertex pserver2 = this.addVHelper(g, "vertex", "aai-node-type", "pserver", "hostname", "b-name").next();
764 Vertex optionalVce = this.addVHelper(g, "vertex", "aai-node-type", "vce", "vnf-id", "optional").next();
766 testEdgeSer.addEdge(g, gvnf, pserver1);
767 testEdgeSer.addEdge(g, gvnf, pserver2);
768 testEdgeSer.addEdge(g, optionalVce, pserver1);
770 QueryBuilder<Edge> tQ = getNewEdgeTraversalWithTestEdgeRules(gvnf);
771 tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "pserver");
774 tQ.createEdgeTraversalIfParameterIsPresent(EdgeType.COUSIN, "pserver", "vce", "optional").toList();
775 assertEquals("Has 1 vertex ", 1, list.size());
776 assertTrue("result has optional-vce vertex ", list.contains(optionalVce));
780 public void createEdgeTraversalIfParameterIsPresentParameterDoesNotExistTest() throws AAIException {
782 Vertex gvnf = this.addVHelper(g, "vertex", "aai-node-type", "generic-vnf", "vnf-id", "gvnf").next();
783 Vertex pserver1 = this.addVHelper(g, "vertex", "aai-node-type", "pserver", "hostname", "a-name").next();
784 Vertex pserver2 = this.addVHelper(g, "vertex", "aai-node-type", "pserver", "hostname", "b-name").next();
785 Vertex optionalVce = this.addVHelper(g, "vertex", "aai-node-type", "vce", "vnf-id", "optional").next();
787 testEdgeSer.addEdge(g, gvnf, pserver1);
788 testEdgeSer.addEdge(g, gvnf, pserver2);
789 testEdgeSer.addEdge(g, optionalVce, pserver1);
791 QueryBuilder<Edge> tQ = getNewEdgeTraversalWithTestEdgeRules(gvnf);
792 tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "pserver");
793 MissingOptionalParameter missingParameter = MissingOptionalParameter.getInstance();
795 List<Vertex> list = tQ
796 .createEdgeTraversalIfParameterIsPresent(EdgeType.COUSIN, "pserver", "vce", missingParameter).toList();
797 assertEquals("Has 2 vertices ", 2, list.size());
798 assertTrue("result has pserver-1 vertex ", list.contains(pserver1));
799 assertTrue("result has pserver-2 vertex ", list.contains(pserver2));
800 assertTrue("result does not have optional-vce vertex ", !list.contains(optionalVce));
803 protected abstract QueryBuilder<Edge> getNewEdgeTraversalWithTestEdgeRules(Vertex v);
805 protected abstract QueryBuilder<Edge> getNewEdgeTraversalWithTestEdgeRules();
807 protected abstract QueryBuilder<Vertex> getNewVertexTraversalWithTestEdgeRules(Vertex v);
809 protected abstract QueryBuilder<Vertex> getNewVertexTraversalWithTestEdgeRules();
811 protected abstract QueryBuilder<Tree> getNewTreeTraversalWithTestEdgeRules(Vertex v);
813 protected abstract QueryBuilder<Tree> getNewTreeTraversalWithTestEdgeRules();
815 protected abstract QueryBuilder<Path> getNewPathTraversalWithTestEdgeRules(Vertex v);
817 protected abstract QueryBuilder<Path> getNewPathTraversalWithTestEdgeRules();