Integrate aai-schema-ingest library into aai-core
[aai/aai-common.git] / aai-core / src / test / java / org / onap / aai / query / builder / TraversalQueryTest.java
1 /**
2  * ============LICENSE_START=======================================================
3  * org.onap.aai
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
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 package org.onap.aai.query.builder;
21
22 import org.apache.tinkerpop.gremlin.process.traversal.Path;
23 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
24 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
25 import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
26 import org.apache.tinkerpop.gremlin.structure.Edge;
27 import org.apache.tinkerpop.gremlin.structure.Vertex;
28 import org.junit.Ignore;
29 import org.junit.Test;
30 import org.onap.aai.db.props.AAIProperties;
31 import org.onap.aai.exceptions.AAIException;
32 import org.onap.aai.edges.enums.EdgeType;
33
34 import java.io.UnsupportedEncodingException;
35 import java.net.URI;
36 import java.net.URISyntaxException;
37 import java.util.List;
38
39 import static org.junit.Assert.assertEquals;
40 import static org.junit.Assert.assertTrue;
41 public class TraversalQueryTest extends QueryBuilderTestAbstraction {
42
43         
44         @Override
45         protected QueryBuilder<Edge> getNewEdgeTraversalWithTestEdgeRules(Vertex v) {
46                 return new TraversalQuery<>(loader, g, v);
47         }
48         
49         @Override
50         protected QueryBuilder<Edge> getNewEdgeTraversalWithTestEdgeRules() {
51                 return new TraversalQuery<>(loader, g);
52         }
53         
54         @Override
55         protected QueryBuilder<Vertex> getNewVertexTraversalWithTestEdgeRules(Vertex v) {
56                 return new TraversalQuery<>(loader, g, v);
57         }
58         
59         @Override
60         protected QueryBuilder<Vertex> getNewVertexTraversalWithTestEdgeRules() {
61                 return new TraversalQuery<>(loader, g);
62         }
63
64
65         protected QueryBuilder<Vertex> getNewVertexTraversal() {
66                 return new TraversalQuery<>(loader, g);
67         }
68         
69         @Override
70         protected QueryBuilder<Tree> getNewTreeTraversalWithTestEdgeRules(Vertex v) {
71                 return new TraversalQuery<>(loader, g, v);
72         }
73
74         @Override
75         protected QueryBuilder<Tree> getNewTreeTraversalWithTestEdgeRules() {
76                 return new TraversalQuery<>(loader, g);
77         }
78
79         @Override
80         protected QueryBuilder<Path> getNewPathTraversalWithTestEdgeRules(Vertex v) {
81                 return new TraversalQuery<>(loader, g, v);
82         }
83
84         @Override
85         protected QueryBuilder<Path> getNewPathTraversalWithTestEdgeRules() {
86                 return new TraversalQuery<>(loader, g);
87         }
88         
89         @Test
90         public void unionQuery() {
91                 QueryBuilder<Vertex> tQ = getNewVertexTraversal();
92                 QueryBuilder<Vertex> tQ2 = getNewVertexTraversal();
93                 QueryBuilder<Vertex> tQ3 = getNewVertexTraversal();
94                 tQ.union(
95                                 tQ2.getVerticesByProperty("test1", "value1"),
96                                 tQ3.getVerticesByIndexedProperty("test2", "value2"));
97
98                 GraphTraversal<Vertex, Vertex> expected = __.<Vertex>start()
99                                 .union(__.has("test1", "value1"),__.has("test2", "value2"));
100
101                 assertEquals("they are equal", expected, tQ.getQuery());
102
103
104         }
105
106         @Test
107         public void traversalClones() throws UnsupportedEncodingException, AAIException, URISyntaxException {
108                 QueryBuilder<Vertex> tQ = getNewVertexTraversal();
109                 QueryBuilder<Vertex> builder = tQ.createQueryFromURI(new URI("network/generic-vnfs/generic-vnf/key1")).getQueryBuilder();
110                 GraphTraversal<Vertex, Vertex> expected = __.<Vertex>start().has("vnf-id", "key1").has("aai-node-type", "generic-vnf");
111                 GraphTraversal<Vertex, Vertex> containerExpected = __.<Vertex>start().has("aai-node-type", "generic-vnf");
112
113                 assertEquals("query object", expected.toString(), builder.getQuery().toString());
114                 assertEquals("container query object", containerExpected.toString(), builder.getContainerQuery().getQuery().toString());
115
116
117         }
118
119         // TODO - Identify why this unit test is failing and if this
120         // is going to cause any problems
121         @Test
122         @Ignore("Not working ever since the change to using model driven development")
123         public void nestedTraversalClones() throws UnsupportedEncodingException, AAIException, URISyntaxException {
124
125                 QueryBuilder<Vertex> tQ = getNewVertexTraversal();
126                 QueryBuilder<Vertex> builder = tQ.createQueryFromURI(new URI("network/generic-vnfs/generic-vnf/key1/l-interfaces/l-interface/key2")).getQueryBuilder();
127                 GraphTraversal<Vertex, Vertex> expected = __.<Vertex>start()
128                                 .has("vnf-id", "key1")
129                                 .has("aai-node-type", "generic-vnf")
130                                 .in("org.onap.relationships.inventory.BelongsTo").has(AAIProperties.NODE_TYPE, "l-interface")
131                                 .has("interface-name", "key2");
132                 GraphTraversal<Vertex, Vertex> containerExpected = __.<Vertex>start()
133                                 .has("vnf-id", "key1")
134                                 .has("aai-node-type", "generic-vnf")
135                                 .in("org.onap.relationships.inventory.BelongsTo")
136                                 .has(AAIProperties.NODE_TYPE, "l-interface");
137                 
138                 assertEquals("query object", expected.toString(), builder.getQuery().toString());
139                 assertEquals("container query object", containerExpected.toString(), builder.getContainerQuery().getQuery().toString());
140                 
141
142         }
143         
144         @Test
145         public void abstractEdgeToVertexTraversalTest() throws AAIException {
146                                 
147                 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
148                 Vertex vnfc1 = g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
149                 
150                 testEdgeSer.addEdge(g, gvnf, vnfc1);
151                 
152                 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(gvnf);
153                 tQ.createEdgeTraversal(EdgeType.COUSIN, "vnf", "vnfc");
154                 
155                 List<Vertex> list = tQ.toList();
156
157                 assertEquals("Has 1 vertexes ", 1, list.size());
158                 assertTrue("Has vertex on the default edge ", list.contains(vnfc1));
159                 
160
161         }
162         
163         @Test
164         public void abstractEdgeToVertexTraversalSingleOutRuleTest() throws AAIException {
165                                 
166                 Vertex vce = g.addV("aai-node-type","vce","vnf-id","vce").next();
167                 Vertex vnfc1 = g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
168                 
169                 testEdgeSer.addEdge(g, vce, vnfc1);
170                 
171                 QueryBuilder<Vertex> tQ1 = getNewVertexTraversalWithTestEdgeRules(vce);
172                 tQ1.createEdgeTraversal(EdgeType.COUSIN, "vnf", "vnfc");
173                 
174                 QueryBuilder<Vertex> tQ2 = getNewVertexTraversalWithTestEdgeRules(vnfc1);
175                 tQ2.createEdgeTraversal(EdgeType.COUSIN, "vnfc", "vnf");
176                 
177                 List<Vertex> list1 = tQ1.toList();
178                 List<Vertex> list2 = tQ2.toList();
179                 
180                 assertEquals("1 - Has 1 vertexes ", 1, list1.size());
181                 assertTrue("1 - traversal results in vnfc ", list1.contains(vnfc1));
182                 assertEquals("2 - Has 1 vertexes ", 1, list2.size());
183                 assertTrue("2 - traversal results in vce ", list2.contains(vce));
184                 
185
186         }
187         
188         @Test
189         public void abstractEdgeToVertexTraversalSingleInRuleTest() throws AAIException {
190                                 
191                 Vertex vce = g.addV("aai-node-type","vce","vnf-id","vce").next();
192                 Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
193                 
194                 testEdgeSer.addEdge(g, vce, pserver);
195                 
196                 QueryBuilder<Vertex> tQ1 = getNewVertexTraversalWithTestEdgeRules(vce);
197                 tQ1.createEdgeTraversal(EdgeType.COUSIN, "vnf", "pserver");
198                 
199                 List<Vertex> list = tQ1.toList();
200
201                 assertEquals("1 - Has 1 vertexes ", 1, list.size());
202                 assertTrue("1 - traversal results in vnfc ", list.contains(pserver));
203                 
204
205         }
206         
207         @Test
208         public void abstractEdgeToVertexMultiRuleTraversalTest() throws AAIException {
209                                 
210                 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
211                 Vertex vnfc1 = g.addV("aai-node-type","vnfc","vnfc-name","a-name").next();
212                 Vertex vnfc2 = g.addV("aai-node-type","vnfc","vnfc-name","b-name").next();
213                 
214                 testEdgeSer.addEdge(g, gvnf, vnfc1);
215                 testEdgeSer.addEdge(g, gvnf, vnfc2, "re-uses");
216                 
217                 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(gvnf);
218                 tQ.createEdgeTraversal(EdgeType.COUSIN, "vnf", "vnfc");
219                 
220                 List<Vertex> list = tQ.toList();
221
222                 assertEquals("Has 2 vertexes ", 2, list.size());
223                 assertTrue("Has vertex on the default edge ", list.contains(vnfc1));
224                 assertTrue("Has vertex on the re-uses edge ", list.contains(vnfc2));
225                 
226
227         }
228         
229         @Test
230         public void abstractEdgeToVertexMultiRuleOutTraversalTest() throws AAIException {
231                         
232                 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
233                 Vertex pserver = g.addV("aai-node-type","pserver","hostname","a-name").next();
234                 
235                 testEdgeSer.addEdge(g, gvnf, pserver);
236                 testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
237                 
238                 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(gvnf);
239                 tQ.createEdgeTraversal(EdgeType.COUSIN, "vnf", "pserver");
240                 
241                 List<Vertex> list = tQ.toList();
242         
243                 assertEquals("Has 2 vertexes ", 2, list.size());
244                 assertTrue("result has pserver ", list.contains(pserver));
245                 
246
247         }
248         
249         @Test
250         public void abstractEdgeToVertexMultiRuleInTraversalTest() throws AAIException {
251                         
252                 Vertex gvnf = g.addV("aai-node-type","generic-vnf","vnf-id","gvnf").next();
253                 Vertex complex = g.addV("aai-node-type","complex","physical-location-id","a-name").next();
254                 
255                 testEdgeSer.addEdge(g, gvnf, complex);
256                 testEdgeSer.addEdge(g, gvnf, complex, "complex-generic-vnf-B");
257                 
258                 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(gvnf);
259                 tQ.createEdgeTraversal(EdgeType.COUSIN, "vnf", "complex");
260                 
261                 List<Vertex> list = tQ.toList();
262         
263                 assertEquals("Has 2 vertexes ", 2, list.size());
264                 assertTrue("result has pserver ", list.contains(complex));
265                 
266
267         }
268
269
270         
271 }