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