AAI-1523 checkstyle warnings for aai-core query
[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 }