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 org.apache.tinkerpop.gremlin.process.traversal.Path;
24 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
25 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
26 import org.apache.tinkerpop.gremlin.process.traversal.step.util.BulkSet;
27 import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
28 import org.apache.tinkerpop.gremlin.structure.Edge;
29 import org.apache.tinkerpop.gremlin.structure.Graph;
30 import org.apache.tinkerpop.gremlin.structure.Vertex;
31 import org.janusgraph.core.JanusGraphFactory;
33 import org.junit.runner.RunWith;
34 import org.onap.aai.config.ConfigConfiguration;
35 import org.onap.aai.config.IntrospectionConfig;
36 import org.onap.aai.config.SpringContextAware;
37 import org.onap.aai.config.XmlFormatTransformerConfiguration;
38 import org.onap.aai.db.props.AAIProperties;
39 import org.onap.aai.edges.EdgeIngestor;
40 import org.onap.aai.edges.enums.EdgeType;
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.nodes.NodeIngestor;
46 import org.onap.aai.serialization.db.EdgeSerializer;
47 import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException;
48 import org.onap.aai.serialization.queryformats.QueryFormatTestHelper;
49 import org.onap.aai.setup.SchemaVersions;
50 import org.onap.aai.util.AAIConstants;
51 import org.springframework.beans.factory.annotation.Autowired;
52 import org.springframework.test.annotation.DirtiesContext;
53 import org.springframework.test.context.ContextConfiguration;
54 import org.springframework.test.context.TestPropertySource;
55 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
57 import java.util.ArrayList;
58 import java.util.Arrays;
59 import java.util.Collections;
60 import java.util.List;
62 import static org.hamcrest.CoreMatchers.is;
63 import static org.hamcrest.collection.IsIterableContainingInOrder.contains;
64 import static org.junit.Assert.*;
66 @RunWith(SpringJUnit4ClassRunner.class)
67 @ContextConfiguration(
68 classes = {ConfigConfiguration.class, QueryTestsConfigTranslator.class, NodeIngestor.class, EdgeIngestor.class,
69 EdgeSerializer.class, SpringContextAware.class, IntrospectionConfig.class, XmlFormatTransformerConfiguration.class})
70 @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
72 properties = {"schema.translator.list = config", "schema.nodes.location=src/test/resources/onap/oxm",
73 "schema.edges.location=src/test/resources/onap/dbedgerules"})
74 public abstract class QueryBuilderTestAbstraction {
76 protected Loader loader;
77 protected static Graph graph;
78 protected GraphTraversalSource g;
81 protected EdgeSerializer testEdgeSer;
84 protected SchemaVersions schemaVersions;
87 protected LoaderFactory loaderFactory;
90 public static void setup() throws Exception {
91 System.setProperty("AJSC_HOME", ".");
92 System.setProperty("BUNDLECONFIG_DIR", "src/test/resources/bundleconfig-local");
93 QueryFormatTestHelper.setFinalStatic(AAIConstants.class.getField("AAI_HOME_ETC_OXM"),
94 "src/test/resources/bundleconfig-local/etc/oxm/");
95 graph = JanusGraphFactory.build().set("storage.backend", "inmemory").open();
99 public void configure() {
100 loader = loaderFactory.createLoaderForVersion(ModelType.MOXY, schemaVersions.getDefaultVersion());
102 g = graph.traversal();
106 public void deConfigure() {
111 public static void teardown() throws Exception {
116 * This helper method was designed to minimize the changes needed due to the eventual
117 * removal of the addV(String...) method.
118 * Correct vertex creation addV(label).property(k,v).property(k,v)...
121 protected GraphTraversal<Vertex, Vertex> addVHelper(GraphTraversalSource gts, String label, Object... props) {
122 for (int i = 0; i < props.length; i++) {
123 if (props[i].equals(AAIProperties.NODE_TYPE)) {
124 label = props[i+1].toString();
127 GraphTraversal<Vertex, Vertex> v = gts.addV(label);
128 for (int i = 0; i < props.length; i+=2) {
129 v.property(props[i], props[i+1]);
135 public void createEdgeGVnfToVnfcTraversal() throws AAIException {
137 Vertex gvnf = this.addVHelper(g, "vertex", "aai-node-type", "generic-vnf", "vnf-id", "myvnf").next();
138 Vertex vnfc = this.addVHelper(g, "vertex", "aai-node-type", "vnfc", "vnfc-name", "a-name").next();
139 testEdgeSer.addEdge(g, gvnf, vnfc, "uses");
141 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(gvnf);
142 tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "vnfc");
144 assertEquals(vnfc, tQ.next());
149 public void createEdgeLinterfaceToLogicalLinkTraversal() throws AAIException {
151 Vertex lInterface = this.addVHelper(g, "vertex", "aai-node-type", "l-interface", "interface-name", "l-interface-a").next();
152 Vertex logicalLink = this.addVHelper(g, "vertex", "aai-node-type", "logical-link", "link-name", "logical-link-a").next();
153 testEdgeSer.addEdge(g, lInterface, logicalLink, "sourceLInterface");
155 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(lInterface);
156 tQ.createEdgeTraversal(EdgeType.COUSIN, "l-interface", "logical-link");
158 Vertex next = tQ.next();
160 assertEquals(logicalLink, next);
164 @SuppressWarnings("rawtypes")
166 public void createEdgeLinterfaceToLogicalLinkTraversal_tree() throws AAIException {
167 Vertex lInterface = this.addVHelper(g, "vertex", "aai-node-type", "l-interface", "interface-name", "l-interface-a").next();
168 Vertex logicalLink = this.addVHelper(g, "vertex", "aai-node-type", "logical-link", "link-name", "logical-link-a").next();
169 testEdgeSer.addEdge(g, lInterface, logicalLink, "sourceLInterface");
171 QueryBuilder<Tree> tQ = getNewTreeTraversalWithTestEdgeRules(lInterface).createEdgeTraversal(EdgeType.COUSIN,
172 loader.introspectorFromName("l-interface"), loader.introspectorFromName("logical-link")).tree();
174 Vertex lInterfaceExpected =
175 graph.traversal().V().has("aai-node-type", "l-interface").has("interface-name", "l-interface-a").next();
176 Vertex logicalLinkExpected =
177 graph.traversal().V().has("aai-node-type", "logical-link").has("link-name", "logical-link-a").next();
178 Tree tree = tQ.next();
179 assertTrue(tree.containsKey(lInterfaceExpected));
180 assertTrue(((Tree) tree.get(lInterfaceExpected)).containsKey(logicalLinkExpected));
183 @SuppressWarnings("rawtypes")
185 public void createEdgeLinterfaceToLogicalLinkTraversal_Path() throws AAIException {
186 Vertex pInterface = this.addVHelper(g, "vertex", "aai-node-type", "p-interface", "interface-name", "p-interface-a").next();
187 Vertex lInterface = this.addVHelper(g, "vertex", "aai-node-type", "l-interface", "interface-name", "l-interface-a").next();
188 Vertex logicalLink = this.addVHelper(g, "vertex", "aai-node-type", "logical-link", "link-name", "logical-link-a").next();
189 testEdgeSer.addEdge(g, lInterface, logicalLink);
190 testEdgeSer.addTreeEdge(g, pInterface, lInterface);
192 QueryBuilder<Path> tQ = getNewPathTraversalWithTestEdgeRules(pInterface)
193 .createEdgeTraversal(EdgeType.TREE, loader.introspectorFromName("p-interface"),
194 loader.introspectorFromName("l-interface"))
195 .createEdgeTraversal(EdgeType.COUSIN, loader.introspectorFromName("l-interface"),
196 loader.introspectorFromName("logical-link"))
199 Path path = tQ.next();
200 assertThat(path.objects(), contains(pInterface, lInterface, logicalLink));
203 @SuppressWarnings("rawtypes")
205 public void parentVertexTest() throws AAIException {
206 Vertex pInterface = this.addVHelper(g, "vertex", "aai-node-type", "p-interface", "interface-name", "p-interface-a").next();
207 Vertex lInterface = this.addVHelper(g, "vertex", "aai-node-type", "l-interface", "interface-name", "l-interface-a").next();
209 testEdgeSer.addTreeEdge(g, pInterface, lInterface);
211 QueryBuilder<Vertex> tQ = getNewEdgeTraversalWithTestEdgeRules(lInterface).getParentVertex();
213 Vertex parent = tQ.next();
214 assertThat(parent, is(pInterface));
218 public void createEdgeLinterfaceToLogicalLinkIntrospectorTraversal() throws AAIException {
220 Vertex lInterface = this.addVHelper(g, "vertex", "aai-node-type", "l-interface", "interface-name", "l-interface-a").next();
221 Vertex logicalLink = this.addVHelper(g, "vertex", "aai-node-type", "logical-link", "link-name", "logical-link-a").next();
222 testEdgeSer.addEdge(g, lInterface, logicalLink, "sourceLInterface");
224 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(lInterface);
225 tQ.createEdgeTraversal(EdgeType.COUSIN, loader.introspectorFromName("l-interface"),
226 loader.introspectorFromName("logical-link"));
228 Vertex next = tQ.next();
230 assertEquals(logicalLink, next);
235 public void createEdgeLinterfaceToLogicalLinkVertexToIntrospectorTraversal() throws AAIException {
237 Vertex lInterface = this.addVHelper(g, "vertex", "aai-node-type", "l-interface", "interface-name", "l-interface-a").next();
238 Vertex logicalLink = this.addVHelper(g, "vertex", "aai-node-type", "logical-link", "link-name", "logical-link-a").next();
239 testEdgeSer.addEdge(g, lInterface, logicalLink, "sourceLInterface");
241 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(lInterface);
242 tQ.createEdgeTraversal(EdgeType.COUSIN, lInterface, loader.introspectorFromName("logical-link"));
244 Vertex next = tQ.next();
246 assertEquals(logicalLink, next);
251 public void edgeToVertexTraversalTest() throws AAIException {
253 Vertex gvnf = this.addVHelper(g, "vertex", "aai-node-type", "generic-vnf", "vnf-id", "gvnf").next();
254 Vertex vnfc1 = this.addVHelper(g, "vertex", "aai-node-type", "vnfc", "vnfc-name", "a-name").next();
256 testEdgeSer.addEdge(g, gvnf, vnfc1);
258 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(gvnf);
259 tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "vnfc");
261 List<Vertex> list = tQ.toList();
263 assertEquals("Has 1 vertexes ", 1, list.size());
264 assertTrue("Has vertex on the default edge ", list.contains(vnfc1));
269 public void edgeToVertexTraversalSingleOutRuleTest() throws AAIException {
271 Vertex vce = this.addVHelper(g, "vertex", "aai-node-type", "vce", "vnf-id", "vce").next();
272 Vertex vnfc1 = this.addVHelper(g, "vertex", "aai-node-type", "vnfc", "vnfc-name", "a-name").next();
274 testEdgeSer.addEdge(g, vce, vnfc1);
276 QueryBuilder<Vertex> tQ1 = getNewVertexTraversalWithTestEdgeRules(vce);
277 tQ1.createEdgeTraversal(EdgeType.COUSIN, "vce", "vnfc");
279 QueryBuilder<Vertex> tQ2 = getNewVertexTraversalWithTestEdgeRules(vnfc1);
280 tQ2.createEdgeTraversal(EdgeType.COUSIN, "vnfc", "vce");
282 List<Vertex> list1 = tQ1.toList();
283 List<Vertex> list2 = tQ2.toList();
285 assertEquals("1 - Has 1 vertexes ", 1, list1.size());
286 assertTrue("1 - traversal results in vnfc ", list1.contains(vnfc1));
287 assertEquals("2 - Has 1 vertexes ", 1, list2.size());
288 assertTrue("2 - traversal results in vce ", list2.contains(vce));
293 public void edgeToVertexTraversalSingleInRuleTest() throws AAIException {
295 Vertex vce = this.addVHelper(g, "vertex", "aai-node-type", "vce", "vnf-id", "vce").next();
296 Vertex pserver = this.addVHelper(g, "vertex", "aai-node-type", "pserver", "hostname", "a-name").next();
298 testEdgeSer.addEdge(g, vce, pserver);
300 QueryBuilder<Vertex> tQ1 = getNewVertexTraversalWithTestEdgeRules(vce);
301 tQ1.createEdgeTraversal(EdgeType.COUSIN, "vce", "pserver");
303 List<Vertex> list = tQ1.toList();
305 assertEquals("1 - Has 1 vertexes ", 1, list.size());
306 assertTrue("1 - traversal results in vnfc ", list.contains(pserver));
311 public void edgeToVertexMultiRuleTraversalTest() throws AAIException {
313 Vertex gvnf = this.addVHelper(g, "vertex", "aai-node-type", "generic-vnf", "vnf-id", "gvnf").next();
314 Vertex vnfc1 = this.addVHelper(g, "vertex", "aai-node-type", "vnfc", "vnfc-name", "a-name").next();
315 Vertex vnfc2 = this.addVHelper(g, "vertex", "aai-node-type", "vnfc", "vnfc-name", "b-name").next();
317 testEdgeSer.addEdge(g, gvnf, vnfc1);
318 testEdgeSer.addEdge(g, gvnf, vnfc2, "re-uses");
320 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(gvnf);
321 tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "vnfc");
323 List<Vertex> list = tQ.toList();
325 assertEquals("Has 2 vertexes ", 2, list.size());
326 assertTrue("Has vertex on the default edge ", list.contains(vnfc1));
327 assertTrue("Has vertex on the re-uses edge ", list.contains(vnfc2));
332 public void edgeToVertexMultiLabelTest() throws AAIException {
334 Vertex gvnf = this.addVHelper(g, "vertex", "aai-node-type", "generic-vnf", "vnf-id", "gvnf").next();
335 Vertex pserver = this.addVHelper(g, "vertex", "aai-node-type", "pserver", "hostname", "a-name").next();
336 Vertex vnfc1 = this.addVHelper(g, "vertex", "aai-node-type", "vnfc", "vnfc-name", "a-name").next();
338 testEdgeSer.addEdge(g, gvnf, vnfc1);
339 testEdgeSer.addEdge(g, pserver, vnfc1);
341 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(vnfc1);
342 tQ.createEdgeTraversal(EdgeType.COUSIN, "vnfc", "generic-vnf");
344 List<Vertex> list = tQ.toList();
346 assertEquals("Has 1 vertexes ", 1, list.size());
347 assertTrue("Only returns the generic vnf vertex", list.contains(gvnf));
352 public void limitTraversalTest() {
354 this.addVHelper(g, "vertex", "aai-node-type", "vnfc", "vnfc-name", "a-name").next();
355 this.addVHelper(g, "vertex", "aai-node-type", "vnfc", "vnfc-name", "b-name").next();
357 QueryBuilder<Vertex> tQ = new GremlinTraversal<>(loader, g);
358 tQ.getVerticesByProperty("aai-node-type", "vnfc").limit(1);
360 List<Vertex> list = tQ.toList();
362 assertEquals("Has 1 vertexes ", 1, list.size());
367 public void getVertexesByPropertiesTraversalTest() {
369 this.addVHelper(g, "vertex", "aai-node-type", "vnfc", "vnfc-name", "a-name").next();
370 this.addVHelper(g, "vertex", "aai-node-type", "vnfc", "vnfc-name", "b-name").next();
372 QueryBuilder<Vertex> tQ = new GremlinTraversal<>(loader, g);
373 tQ.getVerticesByProperty("vnfc-name", Arrays.asList("a-name", "b-name"));
375 List<Vertex> list = tQ.toList();
377 assertEquals("Has 2 vertexes ", 2, list.size());
382 public void getVerticesByCommaSeperatedValueTraversalTest() {
384 this.addVHelper(g, "vertex", "aai-node-type", "vnfc", "vnfc-name", "a-name").next();
385 this.addVHelper(g, "vertex", "aai-node-type", "vnfc", "vnfc-name", "b-name").next();
387 QueryBuilder<Vertex> tQ = new GremlinTraversal<>(loader, g);
388 tQ.getVerticesByCommaSeperatedValue("vnfc-name","a-name, b-name");
390 List<Vertex> list = tQ.toList();
392 assertEquals("Has 2 vertexes ", 2, list.size());
396 public void getVertexesByIndexedPropertyTraversalTest() {
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.getVerticesByIndexedProperty("aai-node-type", "vnfc");
404 List<Vertex> list = tQ.toList();
406 assertEquals("Has 2 vertexes ", 2, list.size());
410 public void dedupTraversalTest() throws AAIException {
412 Vertex gvnf = this.addVHelper(g, "vertex", "aai-node-type", "generic-vnf", "vnf-id", "gvnf").next();
413 Vertex pserver = this.addVHelper(g, "vertex", "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 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(gvnf);
419 tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "pserver").dedup();
421 List<Vertex> list = tQ.toList();
423 assertEquals("Has 2 vertexes ", 1, list.size());
424 assertTrue("result has pserver ", list.contains(pserver));
429 public void storeCapTraversalTest() throws AAIException {
431 Vertex gvnf = this.addVHelper(g, "vertex", "aai-node-type", "generic-vnf", "vnf-id", "gvnf").next();
432 Vertex pserver = this.addVHelper(g, "vertex", "aai-node-type", "pserver", "hostname", "a-name").next();
434 testEdgeSer.addEdge(g, gvnf, pserver);
435 testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
437 GremlinTraversal<BulkSet<Vertex>> tQ = new GremlinTraversal<>(loader, g, gvnf);
438 tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "pserver").store("x").cap("x");
440 List<BulkSet<Vertex>> list = tQ.toList();
442 assertEquals("Has 2 vertexes ", 1, list.size());
443 assertEquals("result has pserver ", pserver, list.get(0).iterator().next());
448 public void storeCapUnfoldTraversalTest() throws AAIException {
450 Vertex gvnf = this.addVHelper(g, "vertex", "aai-node-type", "generic-vnf", "vnf-id", "gvnf").next();
451 Vertex pserver = this.addVHelper(g, "vertex", "aai-node-type", "pserver", "hostname", "a-name").next();
453 testEdgeSer.addEdge(g, gvnf, pserver);
454 testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
456 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(gvnf);
457 tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "pserver").store("x").cap("x").unfold();
459 List<Vertex> list = tQ.toList();
461 assertEquals("Has 2 vertexes ", 2, list.size());
462 assertTrue("result has pserver ", list.contains(pserver));
467 public void nextAndHasNextTraversalTest() {
469 Vertex v1 = this.addVHelper(g, "vertex", "aai-node-type", "vnfc", "vnfc-name", "a-name").next();
470 Vertex v2 = this.addVHelper(g, "vertex", "aai-node-type", "vnfc", "vnfc-name", "b-name").next();
472 QueryBuilder<Vertex> tQ = new GremlinTraversal<>(loader, g);
473 tQ.getVerticesByProperty("aai-node-type", "vnfc");
475 List<Vertex> list = new ArrayList<>();
477 assertTrue("Has next 1 ", tQ.hasNext());
479 assertTrue("Has next 2 ", tQ.hasNext());
481 assertFalse("Has next 3 ", tQ.hasNext());
482 assertTrue("Has all the vertexes", list.contains(v1) && list.remove(v2));
487 public void edgeToVertexMultiRuleOutTraversalTest() throws AAIException {
489 Vertex gvnf = this.addVHelper(g, "vertex", "aai-node-type", "generic-vnf", "vnf-id", "gvnf").next();
490 Vertex pserver = this.addVHelper(g, "vertex", "aai-node-type", "pserver", "hostname", "a-name").next();
492 testEdgeSer.addEdge(g, gvnf, pserver);
493 testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
495 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(gvnf);
496 tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "pserver");
498 List<Vertex> list = tQ.toList();
500 assertEquals("Has 2 vertexes ", 2, list.size());
501 assertTrue("result has pserver ", list.contains(pserver));
506 public void edgeToVertexMultiRuleInTraversalTest() throws AAIException {
508 Vertex gvnf = this.addVHelper(g, "vertex", "aai-node-type", "generic-vnf", "vnf-id", "gvnf").next();
509 Vertex complex = this.addVHelper(g, "vertex", "aai-node-type", "complex", "physical-location-id", "a-name").next();
511 testEdgeSer.addEdge(g, gvnf, complex);
512 testEdgeSer.addEdge(g, gvnf, complex, "complex-generic-vnf-B");
514 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(gvnf);
515 tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "complex");
517 List<Vertex> list = tQ.toList();
519 assertEquals("Has 2 vertexes ", 2, list.size());
520 assertTrue("result has pserver ", list.contains(complex));
525 public void edgeTraversalSingleInRuleTest() throws AAIException {
527 Vertex vce = this.addVHelper(g, "vertex", "aai-node-type", "vce", "vnf-id", "vce").next();
528 Vertex pserver = this.addVHelper(g, "vertex", "aai-node-type", "pserver", "hostname", "a-name").next();
530 Edge e = testEdgeSer.addEdge(g, vce, pserver);
532 QueryBuilder<Edge> tQ1 = getNewEdgeTraversalWithTestEdgeRules(vce);
533 tQ1.getEdgesBetween(EdgeType.COUSIN, "vce", "pserver");
535 List<Edge> list = tQ1.toList();
537 assertEquals("1 - Has 1 edge ", 1, list.size());
538 assertTrue("1 - traversal results in edge ", list.contains(e));
543 public void edgeTraversalSingleOutRuleTest() throws AAIException {
545 Vertex vce = this.addVHelper(g, "vertex", "aai-node-type", "vce", "vnf-id", "vce").next();
546 Vertex vnfc1 = this.addVHelper(g, "vertex", "aai-node-type", "vnfc", "vnfc-name", "a-name").next();
548 Edge e = testEdgeSer.addEdge(g, vce, vnfc1);
550 QueryBuilder<Edge> tQ1 = getNewEdgeTraversalWithTestEdgeRules(vce);
551 tQ1.getEdgesBetween(EdgeType.COUSIN, "vce", "vnfc");
553 List<Edge> list1 = tQ1.toList();
555 assertEquals("1 - Has 1 edge ", 1, list1.size());
556 assertTrue("1 - traversal results in edge ", list1.contains(e));
561 public void edgeTraversalMultiRuleOutTraversalTest() throws AAIException {
563 Vertex gvnf = this.addVHelper(g, "vertex", "aai-node-type", "generic-vnf", "vnf-id", "gvnf").next();
564 Vertex pserver = this.addVHelper(g, "vertex", "aai-node-type", "pserver", "hostname", "a-name").next();
566 Edge e1 = testEdgeSer.addEdge(g, gvnf, pserver);
567 Edge e2 = testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
569 QueryBuilder<Edge> tQ = getNewEdgeTraversalWithTestEdgeRules(gvnf);
570 tQ.getEdgesBetween(EdgeType.COUSIN, "generic-vnf", "pserver");
572 List<Edge> list = tQ.toList();
574 assertEquals("Has 2 edges ", 2, list.size());
575 assertTrue("result has default edge ", list.contains(e1));
576 assertTrue("result has other edge ", list.contains(e2));
581 public void edgeTraversalMultiRuleInTraversalTest() throws AAIException {
583 Vertex gvnf = this.addVHelper(g, "vertex", "aai-node-type", "generic-vnf", "vnf-id", "gvnf").next();
584 Vertex complex = this.addVHelper(g, "vertex", "aai-node-type", "complex", "physical-location-id", "a-name").next();
586 Edge e1 = testEdgeSer.addEdge(g, gvnf, complex);
587 Edge e2 = testEdgeSer.addEdge(g, gvnf, complex, "complex-generic-vnf-B");
589 QueryBuilder<Edge> tQ = getNewEdgeTraversalWithTestEdgeRules(gvnf);
590 tQ.getEdgesBetween(EdgeType.COUSIN, "generic-vnf", "complex");
592 List<Edge> list = tQ.toList();
594 assertEquals("Has 2 edges ", 2, list.size());
595 assertTrue("result has default edge ", list.contains(e1));
596 assertTrue("result has other edge ", list.contains(e2));
601 public void edgeTraversalMultiRuleTraversalTest() throws AAIException {
603 Vertex gvnf = this.addVHelper(g, "vertex", "aai-node-type", "generic-vnf", "vnf-id", "gvnf").next();
604 Vertex vnfc1 = this.addVHelper(g, "vertex", "aai-node-type", "vnfc", "vnfc-name", "a-name").next();
605 Vertex vnfc2 = this.addVHelper(g, "vertex", "aai-node-type", "vnfc", "vnfc-name", "b-name").next();
607 Edge e1 = testEdgeSer.addEdge(g, gvnf, vnfc1);
608 Edge e2 = testEdgeSer.addEdge(g, gvnf, vnfc2, "re-uses");
610 QueryBuilder<Edge> tQ = getNewEdgeTraversalWithTestEdgeRules(gvnf);
611 tQ.getEdgesBetween(EdgeType.COUSIN, "generic-vnf", "vnfc");
613 List<Edge> list = tQ.toList();
615 assertEquals("Has 2 edges ", 2, list.size());
616 assertTrue("result has default edge ", list.contains(e1));
617 assertTrue("result has other edge ", list.contains(e2));
621 @Ignore("This test is failing for TraversalQueryTest and Optimized but it passes for GremlinQueryTest")
622 @Test(expected = NoEdgeRuleFoundException.class)
623 public void getEdgesBetweenWithLabelsEmptyListTest() throws AAIException {
625 Vertex gvnf = this.addVHelper(g, "vertex", "aai-node-type", "generic-vnf", "vnf-id", "gvnf").next();
626 Vertex pserver = this.addVHelper(g, "vertex", "aai-node-type", "pserver", "hostname", "a-name").next();
628 testEdgeSer.addEdge(g, gvnf, pserver);
629 testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
631 QueryBuilder<Edge> tQ = getNewEdgeTraversalWithTestEdgeRules(gvnf);
632 tQ.getEdgesBetweenWithLabels(EdgeType.COUSIN, "generic-vnf", "pserver", Collections.emptyList());
637 public void getEdgesBetweenWithLabelsSingleItemTest() throws AAIException {
639 Vertex gvnf = this.addVHelper(g, "vertex", "aai-node-type", "generic-vnf", "vnf-id", "gvnf").next();
640 Vertex pserver = this.addVHelper(g, "vertex", "aai-node-type", "pserver", "hostname", "a-name").next();
642 Edge e1 = testEdgeSer.addEdge(g, gvnf, pserver);
643 Edge e2 = testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
645 QueryBuilder<Edge> tQ = getNewEdgeTraversalWithTestEdgeRules(gvnf);
646 tQ.getEdgesBetweenWithLabels(EdgeType.COUSIN, "generic-vnf", "pserver",
647 Collections.singletonList("generic-vnf-pserver-B"));
649 List<Edge> list = tQ.toList();
651 assertEquals("Has 1 edges ", 1, list.size());
652 assertFalse("result does not have default edge ", list.contains(e1));
653 assertTrue("result has other edge ", list.contains(e2));
658 public void getEdgesBetweenWithLabelsMultipleItemTest() throws AAIException {
660 Vertex gvnf = this.addVHelper(g, "vertex", "aai-node-type", "generic-vnf", "vnf-id", "gvnf").next();
661 Vertex pserver = this.addVHelper(g, "vertex", "aai-node-type", "pserver", "hostname", "a-name").next();
663 Edge e1 = testEdgeSer.addEdge(g, gvnf, pserver);
664 Edge e2 = testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
666 QueryBuilder<Edge> tQ = getNewEdgeTraversalWithTestEdgeRules(gvnf);
667 tQ.getEdgesBetweenWithLabels(EdgeType.COUSIN, "generic-vnf", "pserver",
668 Arrays.asList("generic-vnf-pserver-B", "generic-vnf-pserver-A"));
670 List<Edge> list = tQ.toList();
672 assertEquals("Has 2 edges ", 2, list.size());
673 assertTrue("result has generic-vnf-pserver-A edge ", list.contains(e1));
674 assertTrue("result has generic-vnf-pserver-B edge ", list.contains(e2));
678 @Ignore("This test is failing for TraversalQueryTest and Optimized but it passes for GremlinQueryTest")
679 @Test(expected = NoEdgeRuleFoundException.class)
680 public void createEdgeTraversalWithLabelsEmptyListTest() throws AAIException {
682 Vertex gvnf = getVertex();
684 QueryBuilder<Edge> tQ = getNewEdgeTraversalWithTestEdgeRules(gvnf);
685 tQ.getEdgesBetweenWithLabels(EdgeType.COUSIN, "generic-vnf", "pserver", Collections.emptyList());
691 private Vertex getVertex() throws AAIException {
692 Vertex gvnf = this.addVHelper(g, "vertex", "aai-node-type", "generic-vnf", "vnf-id", "gvnf").next();
693 Vertex pserver = this.addVHelper(g, "vertex", "aai-node-type", "pserver", "hostname", "a-name").next();
695 testEdgeSer.addEdge(g, gvnf, pserver);
696 testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
701 public void createEdgeTraversalWithLabelsSingleItemTest() throws AAIException {
703 Vertex gvnf = this.addVHelper(g, "vertex", "aai-node-type", "generic-vnf", "vnf-id", "gvnf").next();
704 Vertex pserver = this.addVHelper(g, "vertex", "aai-node-type", "pserver", "hostname", "a-name").next();
706 Edge e1 = testEdgeSer.addEdge(g, gvnf, pserver);
707 Edge e2 = testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
709 QueryBuilder<Edge> tQ = getNewEdgeTraversalWithTestEdgeRules(gvnf);
710 tQ.getEdgesBetweenWithLabels(EdgeType.COUSIN, "generic-vnf", "pserver",
711 Collections.singletonList("generic-vnf-pserver-B"));
713 List<Edge> list = tQ.toList();
715 assertEquals("Has 1 edges ", 1, list.size());
716 assertFalse("result does not have default edge ", list.contains(e1));
717 assertTrue("result has other edge ", list.contains(e2));
722 public void createEdgeTraversalWithLabelsMultipleItemTest() throws AAIException {
724 Vertex gvnf = this.addVHelper(g, "vertex", "aai-node-type", "generic-vnf", "vnf-id", "gvnf").next();
725 Vertex pserver = this.addVHelper(g, "vertex", "aai-node-type", "pserver", "hostname", "a-name").next();
727 Edge e1 = testEdgeSer.addEdge(g, gvnf, pserver);
728 Edge e2 = testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
730 QueryBuilder<Edge> tQ = getNewEdgeTraversalWithTestEdgeRules(gvnf);
731 tQ.getEdgesBetweenWithLabels(EdgeType.COUSIN, "generic-vnf", "pserver",
732 Arrays.asList("generic-vnf-pserver-B", "generic-vnf-pserver-A"));
734 List<Edge> list = tQ.toList();
736 assertEquals("Has 2 edges ", 2, list.size());
737 assertTrue("result has generic-vnf-pserver-A edge ", list.contains(e1));
738 assertTrue("result has generic-vnf-pserver-B edge ", list.contains(e2));
743 public void createEdgeTraversalIfParameterIsPresentParameterExistsTest() throws AAIException {
745 Vertex gvnf = this.addVHelper(g, "vertex", "aai-node-type", "generic-vnf", "vnf-id", "gvnf").next();
746 Vertex pserver1 = this.addVHelper(g, "vertex", "aai-node-type", "pserver", "hostname", "a-name").next();
747 Vertex pserver2 = this.addVHelper(g, "vertex", "aai-node-type", "pserver", "hostname", "b-name").next();
748 Vertex optionalVce = this.addVHelper(g, "vertex", "aai-node-type", "vce", "vnf-id", "optional").next();
750 testEdgeSer.addEdge(g, gvnf, pserver1);
751 testEdgeSer.addEdge(g, gvnf, pserver2);
752 testEdgeSer.addEdge(g, optionalVce, pserver1);
754 QueryBuilder<Edge> tQ = getNewEdgeTraversalWithTestEdgeRules(gvnf);
755 tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "pserver");
757 List<Vertex> list = tQ.createEdgeTraversalIfParameterIsPresent(EdgeType.COUSIN, "pserver", "vce", "optional").toList();
758 assertEquals("Has 1 vertex ", 1, list.size());
759 assertTrue("result has optional-vce vertex ", list.contains(optionalVce));
763 public void createEdgeTraversalIfParameterIsPresentParameterDoesNotExistTest() throws AAIException {
765 Vertex gvnf = this.addVHelper(g, "vertex", "aai-node-type", "generic-vnf", "vnf-id", "gvnf").next();
766 Vertex pserver1 = this.addVHelper(g, "vertex", "aai-node-type", "pserver", "hostname", "a-name").next();
767 Vertex pserver2 = this.addVHelper(g, "vertex", "aai-node-type", "pserver", "hostname", "b-name").next();
768 Vertex optionalVce = this.addVHelper(g, "vertex", "aai-node-type", "vce", "vnf-id", "optional").next();
770 testEdgeSer.addEdge(g, gvnf, pserver1);
771 testEdgeSer.addEdge(g, gvnf, pserver2);
772 testEdgeSer.addEdge(g, optionalVce, pserver1);
774 QueryBuilder<Edge> tQ = getNewEdgeTraversalWithTestEdgeRules(gvnf);
775 tQ.createEdgeTraversal(EdgeType.COUSIN, "generic-vnf", "pserver");
776 MissingOptionalParameter missingParameter = MissingOptionalParameter.getInstance();
778 List<Vertex> list = tQ.createEdgeTraversalIfParameterIsPresent(EdgeType.COUSIN, "pserver", "vce", missingParameter).toList();
779 assertEquals("Has 2 vertices ", 2, list.size());
780 assertTrue("result has pserver-1 vertex ", list.contains(pserver1));
781 assertTrue("result has pserver-2 vertex ", list.contains(pserver2));
782 assertTrue("result does not have optional-vce vertex ", !list.contains(optionalVce));
786 protected abstract QueryBuilder<Edge> getNewEdgeTraversalWithTestEdgeRules(Vertex v);
788 protected abstract QueryBuilder<Edge> getNewEdgeTraversalWithTestEdgeRules();
790 protected abstract QueryBuilder<Vertex> getNewVertexTraversalWithTestEdgeRules(Vertex v);
792 protected abstract QueryBuilder<Vertex> getNewVertexTraversalWithTestEdgeRules();
794 protected abstract QueryBuilder<Tree> getNewTreeTraversalWithTestEdgeRules(Vertex v);
796 protected abstract QueryBuilder<Tree> getNewTreeTraversalWithTestEdgeRules();
798 protected abstract QueryBuilder<Path> getNewPathTraversalWithTestEdgeRules(Vertex v);
800 protected abstract QueryBuilder<Path> getNewPathTraversalWithTestEdgeRules();