Improve the performance of resoures microservice
[aai/aai-common.git] / aai-core / src / test / java / org / onap / aai / serialization / engines / query / GraphTraversalQueryEngineTest.java
index a24855b..b943121 100644 (file)
@@ -38,6 +38,7 @@ import org.springframework.test.annotation.DirtiesContext;
 import java.io.InputStream;
 import java.util.*;
 
+import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.collection.IsIterableContainingInAnyOrder.containsInAnyOrder;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
@@ -53,30 +54,30 @@ public class GraphTraversalQueryEngineTest extends AAISetup {
        public void testFindParents() throws AAIException {
                //setup
                Graph graph = TinkerGraph.open();
-               
+
                Vertex cloudreg = graph.addVertex(T.id, "00", "aai-node-type", "cloud-region");
                Vertex tenant = graph.addVertex(T.id, "10", "aai-node-type", "tenant");
                Vertex vserver = graph.addVertex(T.id, "20", "aai-node-type", "vserver");
-               
+
                GraphTraversalSource g = graph.traversal();
-               
+
                edgeSer.addTreeEdge(g, cloudreg, tenant);
                edgeSer.addTreeEdge(g, tenant, vserver);
-               
+
                //expect start vertex back plus any parents
                List<Vertex> crExpected = new ArrayList<>(Arrays.asList(cloudreg)); //no parents
                List<Vertex> tenExpected = new ArrayList<>(Arrays.asList(tenant, cloudreg)); //only has the immediate parent
                List<Vertex> vsExpected = new ArrayList<>(Arrays.asList(vserver, tenant, cloudreg)); //parent & grandparent
-               
+
                GraphTraversalQueryEngine engine = new GraphTraversalQueryEngine(g);
-               
+
                //test
                List<Vertex> crRes = engine.findParents(cloudreg);
                assertTrue(crRes.containsAll(crExpected) && crExpected.containsAll(crRes));
-               
+
                List<Vertex> tenRes = engine.findParents(tenant);
                assertTrue(tenRes.containsAll(tenExpected) && tenExpected.containsAll(tenRes));
-               
+
                List<Vertex> vsRes = engine.findParents(vserver);
                assertTrue(vsRes.containsAll(vsExpected) && vsExpected.containsAll(vsRes));
                //verify expected ordering - start, parent, grandparent
@@ -84,131 +85,157 @@ public class GraphTraversalQueryEngineTest extends AAISetup {
                assertTrue(vsRes.get(1).equals(tenant));
                assertTrue(vsRes.get(2).equals(cloudreg));
        }
-       
+
+       @Test
+       public void testFindAllParentsGivenAaiUris(){
+
+        //setup
+        Graph graph = TinkerGraph.open();
+
+        Vertex cloudreg = graph.addVertex(T.id, "00", "aai-node-type", "cloud-region", "aai-uri", "/cloud-infrastructure/cloud-regions/cloud-region/testowner/testid");
+        Vertex tenant = graph.addVertex(T.id, "10", "aai-node-type", "tenant", "aai-uri", "/cloud-infrastructure/cloud-regions/cloud-region/testowner/testid/tenants/tenant/testTenant1");
+        Vertex vserver = graph.addVertex(T.id, "20", "aai-node-type", "vserver", "aai-uri", "/cloud-infrastructure/cloud-regions/cloud-region/testowner/testid/tenants/tenant/testTenant1/vservers/vserver/testVserver1");
+
+        String [] uris = new String[]{
+            "/cloud-infrastructure/cloud-regions/cloud-region/testowner/testid/tenants/tenant/testTenant1",
+            "/cloud-infrastructure/cloud-regions/cloud-region/testowner/testid/tenants/tenant/testTenant1/vservers/vserver/testVserver1",
+            "/cloud-infrastructure/cloud-regions/cloud-region/testowner/testid"
+        };
+
+        GraphTraversalSource g = graph.traversal();
+        GraphTraversalQueryEngine queryEngine = new GraphTraversalQueryEngine(g);
+        List<Vertex> vertices = queryEngine.findParents(uris);
+
+        assertThat("Returned vertices should be 3 cloud region, tenant and vserver", vertices.size(), is(3));
+        assertThat("Expected the first element back to be vserver", vertices.get(0), is(vserver));
+        assertThat("Expected the second element back to be tenant", vertices.get(1), is(tenant));
+        assertThat("Expected the element back to be cloud region", vertices.get(2), is(cloudreg));
+    }
+
        @Test
        public void testFindAllChildren() throws AAIException {
                //setup
                Graph graph = TinkerGraph.open();
-               
+
                Vertex cloudreg = graph.addVertex(T.id, "00", "aai-node-type", "cloud-region");
                Vertex tenant = graph.addVertex(T.id, "10", "aai-node-type", "tenant");
                Vertex vserver = graph.addVertex(T.id, "20", "aai-node-type", "vserver");
                Vertex vserver2 = graph.addVertex(T.id, "21", "aai-node-type", "vserver");
                Vertex oam = graph.addVertex(T.id, "30", "aai-node-type", "oam-network");
-               
+
                GraphTraversalSource g = graph.traversal();
-               
+
                edgeSer.addTreeEdge(g, cloudreg, tenant);
                edgeSer.addTreeEdge(g, tenant, vserver);
                edgeSer.addTreeEdge(g, tenant, vserver2);
                edgeSer.addTreeEdge(g, cloudreg, oam);
-               
+
                List<Vertex> crExpected = new ArrayList<>(Arrays.asList(cloudreg, tenant, vserver, vserver2, oam));
                List<Vertex> vsExpected = new ArrayList<>(Arrays.asList(vserver));
-               
+
                GraphTraversalQueryEngine engine = new GraphTraversalQueryEngine(g);
-               
+
                //test
                List<Vertex> crRes = engine.findAllChildren(cloudreg);
                assertTrue(crRes.containsAll(crExpected) && crExpected.containsAll(crRes));
-               
+
                List<Vertex> vsRes = engine.findAllChildren(vserver);
                assertTrue(vsRes.containsAll(vsExpected) && vsExpected.containsAll(vsRes));
        }
-       
+
        @Test
        public void testFindChildrenOfType() throws AAIException {
                //setup
                Graph graph = TinkerGraph.open();
-               
+
                Vertex gv = graph.addVertex(T.id, "00", "aai-node-type", "generic-vnf");
                Vertex lint1 = graph.addVertex(T.id, "10", "aai-node-type", "l-interface");
                Vertex lint2 = graph.addVertex(T.id, "11", "aai-node-type", "l-interface");
                Vertex lag = graph.addVertex(T.id, "20", "aai-node-type", "lag-interface");
                Vertex lint3 = graph.addVertex(T.id, "12", "aai-node-type", "l-interface");
-               
+
                GraphTraversalSource g = graph.traversal();
-               
+
                edgeSer.addTreeEdge(g, gv, lint1);
                edgeSer.addTreeEdge(g, gv, lint2);
                edgeSer.addTreeEdge(g, gv, lag);
                edgeSer.addTreeEdge(g, lag, lint3);
-               
+
                List<Vertex> expected = new ArrayList<>(Arrays.asList(lint1, lint2));
-               
+
                GraphTraversalQueryEngine engine = new GraphTraversalQueryEngine(g);
-               
+
                //test
                List<Vertex> results = engine.findChildrenOfType(gv, "l-interface");
                assertTrue(results.containsAll(expected) && expected.containsAll(results));
        }
-       
+
        @Test
        public void testFindChildren() throws AAIException {
                //setup
                Graph graph = TinkerGraph.open();
-               
+
                Vertex gv = graph.addVertex(T.id, "00", "aai-node-type", "generic-vnf");
                Vertex lint1 = graph.addVertex(T.id, "10", "aai-node-type", "l-interface");
                Vertex lint2 = graph.addVertex(T.id, "11", "aai-node-type", "l-interface");
                Vertex lag = graph.addVertex(T.id, "20", "aai-node-type", "lag-interface");
                Vertex lint3 = graph.addVertex(T.id, "12", "aai-node-type", "l-interface");
-               
+
                GraphTraversalSource g = graph.traversal();
-               
+
                edgeSer.addTreeEdge(g, gv, lint1);
                edgeSer.addTreeEdge(g, gv, lint2);
                edgeSer.addTreeEdge(g, gv, lag);
                edgeSer.addTreeEdge(g, lag, lint3);
-               
+
                List<Vertex> expected = new ArrayList<>(Arrays.asList(lint1, lint2, lag));
-               
+
                GraphTraversalQueryEngine engine = new GraphTraversalQueryEngine(g);
-               
+
                //test
                List<Vertex> results = engine.findChildren(gv);
                assertTrue(results.containsAll(expected) && expected.containsAll(results));
        }
-       
+
        @Test
        public void testFindRelatedVertices() throws AAIException {
                //setup
-               
+
                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();
-               
+
                edgeSer.addTreeEdge(g, gv, lint);
                edgeSer.addEdge(g, lint, log);
                edgeSer.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.IN, "org.onap.relationships.inventory.BelongsTo", "l-interface");
                assertTrue(outRes.containsAll(outExpected) && outExpected.containsAll(outRes));
 
                List<Vertex> inRes = engine.findRelatedVertices(log, Direction.IN, "tosca.relationships.network.LinksTo", "l-interface");
                assertTrue(inRes.containsAll(inExpected) && inExpected.containsAll(inRes));
-               
+
                List<Vertex> bothRes = engine.findRelatedVertices(lint, Direction.BOTH, "tosca.relationships.network.LinksTo", "logical-link");
                assertTrue(bothRes.containsAll(bothExpected) && bothExpected.containsAll(bothRes));
        }
-       
+
        @Test
        public void testFindSubGraph() throws AAIException, EdgeRuleNotFoundException, AmbiguousRuleChoiceException {
                //setup
                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");
@@ -225,7 +252,7 @@ public class GraphTraversalQueryEngineTest extends AAISetup {
                Vertex modelVer = graph.addVertex(T.id, "100", "aai-node-type", "model-ver");
 
                GraphTraversalSource g = graph.traversal();
-               
+
                Edge crTen = edgeSer.addTreeEdge(g, cr, ten);
                Edge crTen2 = edgeSer.addTreeEdge(g, cr, ten2);
                Edge tenVs = edgeSer.addTreeEdge(g, ten, vs);
@@ -234,14 +261,14 @@ public class GraphTraversalQueryEngineTest extends AAISetup {
                Edge lintLog = edgeSer.addEdge(g, lint, log);
                Edge vsGv = edgeSer.addEdge(g, vs, gv);
                edgeSer.addEdge(g, gv, vnfc);
-               
+
                edgeSer.addTreeEdge(g, gv, lag);
                edgeSer.addTreeEdge(g, lag, lint2);
         Edge modelVerEdge = edgeSer.addPrivateEdge(g, gv, modelVer, null);
 
                edgeSer.addTreeEdge(g, comp, ctag);
                Edge crComp = edgeSer.addEdge(g, cr, comp);
-               
+
                //findSubGraph(cr, 0, true)
                List<Element> expected1 = new ArrayList<>(Arrays.asList(cr));
                //findSubGraph(cr, 2, true)
@@ -249,48 +276,48 @@ public class GraphTraversalQueryEngineTest extends AAISetup {
                                                                                                                                        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, 
+                                                                                                                               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);
                assertThat(resList3, containsInAnyOrder(expected3.toArray()));
 //             assertTrue(resList3.containsAll(expected3) && expected3.containsAll(resList3));
        }
-       
+
        /**
-        * convenience helper method to make it easier to check the contents of the tree against 
+        * 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, EdgeRuleNotFoundException, AmbiguousRuleChoiceException {
                //setup
                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");
@@ -303,16 +330,16 @@ public class GraphTraversalQueryEngineTest extends AAISetup {
                         .addEdge("some-edge", cr, CONTAINS.toString(), "NONE");
 
                GraphTraversalSource g = graph.traversal();
-               
+
                edgeSer.addTreeEdge(g, gv, lint); //tree edge so shouldn't appear in results
                Edge gvVnfc = edgeSer.addEdge(g, gv, vnfc);
                edgeSer.addEdge(g, gv, lob); //v11/12 not v10
         Edge gvMvEdge = edgeSer.addPrivateEdge(g, gv, mv, null);
 
                List<Edge> expected = new ArrayList<>(Arrays.asList(gvVnfc));
-               
+
                GraphTraversalQueryEngine engine = new GraphTraversalQueryEngine(g);
-               
+
                //test
                Loader loader = loaderFactory.createLoaderForVersion(ModelType.MOXY, schemaVersions.getRelatedLinkVersion());
                List<Edge> results = engine.findEdgesForVersion(gv, loader);
@@ -322,27 +349,27 @@ public class GraphTraversalQueryEngineTest extends AAISetup {
                results = engine.findEdgesForVersion(cr, loader);
                assertThat(results, containsInAnyOrder(expected.toArray()));
        }
-       
+
        @Test
        public void testFindCousinVertices() throws AAIException {
                //setup
                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();
-               
+
                edgeSer.addTreeEdge(g, gv, lint); //tree edge so shouldn't appear in results
                edgeSer.addEdge(g, gv, vnfc);
                edgeSer.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));