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