+
+ @Test
+ public void testFindRelatedVertices() throws AAIException {
+ //setup
+ EdgeRules rules = EdgeRules.getInstance();
+
+ Graph graph = TinkerGraph.open();
+
+ Vertex gv = graph.addVertex(T.id, "00", "aai-node-type", "generic-vnf");
+ Vertex lint = graph.addVertex(T.id, "10", "aai-node-type", "l-interface");
+ Vertex lint2 = graph.addVertex(T.id, "11", "aai-node-type", "l-interface");
+ Vertex log = graph.addVertex(T.id, "20", "aai-node-type", "logical-link");
+
+ GraphTraversalSource g = graph.traversal();
+
+ rules.addTreeEdge(g, gv, lint);
+ rules.addEdge(g, lint, log);
+ rules.addEdge(g, log, lint2);
+
+ List<Vertex> outExpected = new ArrayList<>(Arrays.asList(lint));
+ List<Vertex> inExpected = new ArrayList<>(Arrays.asList(lint, lint2));
+ List<Vertex> bothExpected = new ArrayList<>(Arrays.asList(log));
+
+ GraphTraversalQueryEngine engine = new GraphTraversalQueryEngine(g);
+
+ //test
+ List<Vertex> outRes = engine.findRelatedVertices(gv, Direction.OUT, "hasLInterface", "l-interface");
+ assertTrue(outRes.containsAll(outExpected) && outExpected.containsAll(outRes));
+
+ List<Vertex> inRes = engine.findRelatedVertices(log, Direction.IN, "usesLogicalLink", "l-interface");
+ assertTrue(inRes.containsAll(inExpected) && inExpected.containsAll(inRes));
+
+ List<Vertex> bothRes = engine.findRelatedVertices(lint, Direction.BOTH, "usesLogicalLink", "logical-link");
+ assertTrue(bothRes.containsAll(bothExpected) && bothExpected.containsAll(bothRes));
+ }
+
+ @Test
+ public void testFindSubGraph() throws AAIException {
+ //setup
+ EdgeRules rules = EdgeRules.getInstance();
+ Graph graph = TinkerGraph.open();
+
+ Vertex cr = graph.addVertex(T.id, "00", "aai-node-type", "cloud-region");
+ Vertex ten = graph.addVertex(T.id, "10", "aai-node-type", "tenant");
+ Vertex ten2 = graph.addVertex(T.id, "11", "aai-node-type", "tenant");
+ Vertex vs = graph.addVertex(T.id, "20", "aai-node-type", "vserver");
+ Vertex vs2 = graph.addVertex(T.id, "21", "aai-node-type", "vserver");
+ Vertex lint = graph.addVertex(T.id, "30", "aai-node-type", "l-interface");
+ Vertex comp = graph.addVertex(T.id, "40", "aai-node-type", "complex");
+ Vertex ctag = graph.addVertex(T.id, "50", "aai-node-type", "ctag-pool");
+ Vertex gv = graph.addVertex(T.id, "60", "aai-node-type", "generic-vnf");
+ Vertex lag = graph.addVertex(T.id, "70", "aai-node-type", "lag-interface");
+ Vertex lint2 = graph.addVertex(T.id, "31", "aai-node-type", "l-interface");
+ Vertex log = graph.addVertex(T.id, "80", "aai-node-type", "logical-link");
+ Vertex vnfc = graph.addVertex(T.id, "90", "aai-node-type", "vnfc");
+
+ GraphTraversalSource g = graph.traversal();
+
+ Edge crTen = rules.addTreeEdge(g, cr, ten);
+ Edge crTen2 = rules.addTreeEdge(g, cr, ten2);
+ Edge tenVs = rules.addTreeEdge(g, ten, vs);
+ Edge tenVs2 = rules.addTreeEdge(g, ten, vs2);
+ Edge vsLInt = rules.addTreeEdge(g, vs, lint);
+ Edge lintLog = rules.addEdge(g, lint, log);
+ Edge vsGv = rules.addEdge(g, vs, gv);
+ rules.addEdge(g, gv, vnfc);
+
+ rules.addTreeEdge(g, gv, lag);
+ rules.addTreeEdge(g, lag, lint2);
+
+ rules.addTreeEdge(g, comp, ctag);
+ Edge crComp = rules.addEdge(g, cr, comp);
+
+ //findSubGraph(cr, 0, true)
+ List<Element> expected1 = new ArrayList<>(Arrays.asList(cr));
+ //findSubGraph(cr, 2, true)
+ List<Element> expected2 = new ArrayList<>(Arrays.asList(cr, ten, ten2, vs, vs2,
+ crTen, crTen2, tenVs, tenVs2));
+ //findSubGraph(cr)
+ List<Element> expected3 = new ArrayList<>(Arrays.asList(cr, ten, ten2, comp, vs, vs2, lint, gv, log,
+ crTen, crTen2, crComp, tenVs, tenVs2, vsLInt,
+ vsGv, lintLog));
+
+ GraphTraversalQueryEngine engine = new GraphTraversalQueryEngine(g);
+
+ //test
+ Tree<Element> res1 = engine.findSubGraph(cr, 0, true);
+ Set<Element> resList1 = treeToList(res1);
+ assertTrue(resList1.containsAll(expected1) && expected1.containsAll(resList1));
+
+ Tree<Element> res2 = engine.findSubGraph(cr, 2, true);
+ Set<Element> resList2 = treeToList(res2);
+ assertTrue(resList2.containsAll(expected2) && expected2.containsAll(resList2));
+
+ Tree<Element> res3 = engine.findSubGraph(cr);
+ Set<Element> resList3 = treeToList(res3);
+ assertTrue(resList3.containsAll(expected3) && expected3.containsAll(resList3));
+ }
+
+ /**
+ * convenience helper method to make it easier to check the contents of the tree against
+ * a list of expected results
+ * @param tree - the tree whose contents you want in collection form
+ * @return set of the contents of the tree
+ */
+ private Set<Element> treeToList(Tree<Element> tree) {
+ Set<Element> ret = new HashSet<>();
+
+ for (Element key : tree.keySet()) {
+ ret.add(key);
+ ret.addAll(treeToList(tree.get(key)));
+ }
+
+ return ret;
+ }
+
+ @Test
+ public void testFindEdgesForVersion() throws AAIException {
+ //setup
+ EdgeRules rules = EdgeRules.getInstance();
+ Graph graph = TinkerGraph.open();
+
+ Vertex gv = graph.addVertex(T.id, "00", "aai-node-type", "generic-vnf");
+ Vertex vnfc = graph.addVertex(T.id, "10", "aai-node-type", "vnfc");
+ Vertex lob = graph.addVertex(T.id, "20", "aai-node-type", "line-of-business");
+ Vertex lint = graph.addVertex(T.id, "30", "aai-node-type", "l-interface");
+
+ GraphTraversalSource g = graph.traversal();
+
+ rules.addTreeEdge(g, gv, lint); //tree edge so shouldn't appear in results
+ Edge gvVnfc = rules.addEdge(g, gv, vnfc);
+ rules.addEdge(g, gv, lob); //v11/12 not v10
+
+ List<Edge> expected = new ArrayList<>(Arrays.asList(gvVnfc));
+
+ GraphTraversalQueryEngine engine = new GraphTraversalQueryEngine(g);
+
+ //test
+ Loader loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.v10);
+ List<Edge> results = engine.findEdgesForVersion(gv, loader);
+ assertTrue(results.containsAll(expected) && expected.containsAll(results));
+ }
+
+ @Test
+ public void testFindCousinVertices() throws AAIException {
+ //setup
+ EdgeRules rules = EdgeRules.getInstance();
+ Graph graph = TinkerGraph.open();
+
+ Vertex gv = graph.addVertex(T.id, "00", "aai-node-type", "generic-vnf");
+ Vertex vnfc = graph.addVertex(T.id, "10", "aai-node-type", "vnfc");
+ Vertex lob = graph.addVertex(T.id, "20", "aai-node-type", "line-of-business");
+ Vertex lint = graph.addVertex(T.id, "30", "aai-node-type", "l-interface");
+
+ GraphTraversalSource g = graph.traversal();
+
+ rules.addTreeEdge(g, gv, lint); //tree edge so shouldn't appear in results
+ rules.addEdge(g, gv, vnfc);
+ rules.addEdge(g, gv, lob);
+
+ List<Vertex> expected = new ArrayList<>(Arrays.asList(vnfc, lob));
+
+ GraphTraversalQueryEngine engine = new GraphTraversalQueryEngine(g);
+
+ //test
+ List<Vertex> results = engine.findCousinVertices(gv);
+ assertTrue(results.containsAll(expected) && expected.containsAll(results));
+ }