18fa7db301197097cea680e39a1c1168559485c7
[aai/aai-common.git] / aai-core / src / test / java / org / openecomp / aai / serialization / tinkerpop / TreeBackedVertexTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * org.openecomp.aai
4  * ================================================================================
5  * Copyright (C) 2017 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
10
11      http://www.apache.org/licenses/LICENSE-2.0
12
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=========================================================
19  */
20
21 package org.openecomp.aai.serialization.tinkerpop;
22
23 import static org.junit.Assert.assertEquals;
24
25 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
26 import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
27 import org.apache.tinkerpop.gremlin.structure.Direction;
28 import org.apache.tinkerpop.gremlin.structure.Element;
29 import org.apache.tinkerpop.gremlin.structure.Graph;
30 import org.apache.tinkerpop.gremlin.structure.T;
31 import org.apache.tinkerpop.gremlin.structure.Vertex;
32 import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph;
33 import org.junit.BeforeClass;
34 import org.junit.Test;
35
36 import org.openecomp.aai.serialization.engines.query.GraphTraversalQueryEngine;
37
38 public class TreeBackedVertexTest {
39
40         
41         private static Graph graph = TinkerGraph.open();
42         private static Object startKey = null;
43         private static Tree<Element> tree = null;
44         private static Tree<Element> treeDepth1 = null;
45         private static Tree<Element> treeDepth0NodeOnly = null;
46         @BeforeClass
47         public static void configure() {
48                 GraphTraversalSource g = graph.traversal();
49                 
50                 startKey = g.addV(T.label, "vserver").as("v1").property("test", "hello")
51                                 .addV(T.label, "vserver").as("v2")
52                                 .addV(T.label, "interface").property("name", "interface 1").as("v7").addInE("hasChild", "v2").property("isParent", true)
53                                 .addV(T.label, "pserver").property("name", "pserver 1").as("v4").addOutE("runsOn", "v1").property("isParent", false)
54                                 .addV(T.label, "interface").property("name", "interface 2").as("v3").addInE("hasChild", "v1").property("isParent", true)
55                                 .addV(T.label, "address").property("name", "address 1").addInE("hasChild", "v3").property("isParent", true)
56                                 .addV(T.label, "address").property("name", "address 2").addInE("hasChild", "v3").property("isParent", true)
57                                 .addV(T.label, "complex").property("name", "complex 1").addInE("locatedIn", "v4").property("isParent", false)
58                                 .addV(T.label, "interface").property("name", "interface 3").addInE("hasChild", "v4").property("isParent", true)
59                                 .addV(T.label, "subnet").property("name", "subnet 1").as("v5").addInE("in", "v3").property("isParent", false)
60                                 .addV(T.label, "address").property("name", "address 3").as("v6").addInE("hasChild", "v5").property("isParent", true)
61                                 .select("v1").next();
62                 
63                 tree = new GraphTraversalQueryEngine(g).findSubGraph((Vertex)startKey);
64                 treeDepth1 = new GraphTraversalQueryEngine(g).findSubGraph((Vertex)startKey, 1, false);
65                 treeDepth0NodeOnly = new GraphTraversalQueryEngine(g).findSubGraph((Vertex)startKey, 0, true);
66         }
67         @Test
68         public void oneHopViaEdges() {
69
70                 //BulkSet set = (BulkSet)result;
71                 TreeBackedVertex v = new TreeBackedVertex((Vertex)tree.getObjectsAtDepth(1).iterator().next(), tree);
72                 
73         
74                 assertEquals("locate child", v.edges(Direction.OUT).next().inVertex().property("name").orElse(""), "interface 2");
75                 assertEquals("locate cousin", v.edges(Direction.IN).next().outVertex().property("name").orElse(""), "pserver 1");
76
77                 
78         }
79         
80         @Test
81         public void oneHopViaVertices() {
82
83                 //BulkSet set = (BulkSet)result;
84                 TreeBackedVertex v = new TreeBackedVertex((Vertex)tree.getObjectsAtDepth(1).iterator().next(), tree);
85                 
86         
87                 assertEquals("locate child", "interface 2", v.vertices(Direction.OUT).next().property("name").orElse(""));
88                 assertEquals("locate cousin", "pserver 1", v.vertices(Direction.IN).next().property("name").orElse(""));
89         
90         }
91         
92         @Test
93         public void twoHopCousinViaVertices() {
94
95                 //BulkSet set = (BulkSet)result;
96                 TreeBackedVertex v = new TreeBackedVertex((Vertex)tree.getObjectsAtDepth(1).iterator().next(), tree);
97                 
98         
99                 assertEquals("locate child", "subnet 1", v.vertices(Direction.OUT).next().vertices(Direction.OUT, "in").next().property("name").orElse(""));
100         
101         }
102         
103         @Test
104         public void walkVerticesRestrictedDepth() {
105
106                 //BulkSet set = (BulkSet)result;
107                 TreeBackedVertex v = new TreeBackedVertex((Vertex)treeDepth1.getObjectsAtDepth(1).iterator().next(), treeDepth1);
108                 
109         
110                 assertEquals("nothing returned", false, v.vertices(Direction.OUT).next()
111                                 .vertices(Direction.OUT, "hasChild").hasNext());
112         
113         }
114         
115         @Test
116         public void walkVertices() {
117                 TreeBackedVertex v = new TreeBackedVertex((Vertex)tree.getObjectsAtDepth(1).iterator().next(), tree);
118                 assertEquals("locate child", "address 2", v.vertices(Direction.OUT).next()
119                                 .vertices(Direction.OUT, "hasChild").next().property("name").orElse(""));
120         }
121         
122         @Test
123         public void walkEdges() {
124                 TreeBackedVertex v = new TreeBackedVertex((Vertex)tree.getObjectsAtDepth(1).iterator().next(), tree);
125
126                 assertEquals("locate child", "address 2", v.edges(Direction.OUT).next().inVertex()
127                                 .edges(Direction.OUT, "hasChild").next().inVertex().property("name").orElse(""));
128         }
129         
130         @Test
131         public void noEdgesFoudWithLabelVertices() {
132                 TreeBackedVertex v = new TreeBackedVertex((Vertex)tree.getObjectsAtDepth(1).iterator().next(), tree);
133
134                 assertEquals("missing hello label", false , v.vertices(Direction.OUT, "hello").hasNext());
135         }
136         
137         @Test
138         public void noEdgesFoudWithLabelEdges() {
139                 TreeBackedVertex v = new TreeBackedVertex((Vertex)tree.getObjectsAtDepth(1).iterator().next(), tree);
140
141                 assertEquals("missing hello label", false , v.edges(Direction.OUT, "hello").hasNext());
142         }
143         
144         @Test
145         public void depthZeroNodeOnly() {
146                 TreeBackedVertex v = new TreeBackedVertex((Vertex)treeDepth0NodeOnly.getObjectsAtDepth(1).iterator().next(), treeDepth0NodeOnly);
147                 assertEquals("no edges returned", false, v.edges(Direction.BOTH).hasNext());
148         }
149         
150 }