2 * ============LICENSE_START=======================================================
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
20 * ECOMP is a trademark and service mark of AT&T Intellectual Property.
22 package org.onap.aai.query.builder;
24 import static org.junit.Assert.assertEquals;
25 import static org.junit.Assert.assertTrue;
27 import java.io.UnsupportedEncodingException;
29 import java.net.URISyntaxException;
30 import java.util.List;
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;
41 public class TraversalQueryTest extends QueryBuilderTestAbstraction {
45 protected QueryBuilder<Edge> getNewEdgeTraversal(Vertex v) {
46 return new TraversalQuery<>(loader, g, v, testEdgeRules);
50 protected QueryBuilder<Edge> getNewEdgeTraversal() {
51 return new TraversalQuery<>(loader, g, testEdgeRules);
55 protected QueryBuilder<Vertex> getNewVertexTraversal(Vertex v) {
56 return new TraversalQuery<>(loader, g, v, testEdgeRules);
60 protected QueryBuilder<Vertex> getNewVertexTraversal() {
61 return new TraversalQuery<>(loader, g, testEdgeRules);
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);
70 tQ2.getVerticesByProperty("test1", "value1"),
71 tQ3.getVerticesByIndexedProperty("test2", "value2"));
73 GraphTraversal<Vertex, Vertex> expected = __.<Vertex>start()
74 .union(__.has("test1", "value1"),__.has("test2", "value2"));
76 assertEquals("they are equal", expected, tQ.getQuery());
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");
88 assertEquals("query object", expected.toString(), builder.getQuery().toString());
89 assertEquals("container query object", containerExpected.toString(), builder.getContainerQuery().getQuery().toString());
95 public void nestedTraversalClones() throws UnsupportedEncodingException, AAIException, URISyntaxException {
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");
110 assertEquals("query object", expected.toString(), builder.getQuery().toString());
111 assertEquals("container query object", containerExpected.toString(), builder.getContainerQuery().getQuery().toString());
117 public void abstractEdgeToVertexTraversalTest() throws AAIException {
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();
122 testEdgeRules.addEdge(g, gvnf, vnfc1);
124 QueryBuilder<Vertex> tQ = getNewVertexTraversal(gvnf);
125 tQ.createEdgeTraversal(EdgeType.COUSIN, "vnf", "vnfc");
127 List<Vertex> list = tQ.toList();
129 assertEquals("Has 1 vertexes ", 1, list.size());
130 assertTrue("Has vertex on the default edge ", list.contains(vnfc1));
136 public void abstractEdgeToVertexTraversalSingleOutRuleTest() throws AAIException {
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();
141 testEdgeRules.addEdge(g, vce, vnfc1);
143 QueryBuilder<Vertex> tQ1 = new TraversalQuery<>(loader, g, vce, testEdgeRules);
144 tQ1.createEdgeTraversal(EdgeType.COUSIN, "vnf", "vnfc");
146 QueryBuilder<Vertex> tQ2 = new TraversalQuery<>(loader, g, vnfc1, testEdgeRules);
147 tQ2.createEdgeTraversal(EdgeType.COUSIN, "vnfc", "vnf");
149 List<Vertex> list1 = tQ1.toList();
150 List<Vertex> list2 = tQ2.toList();
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));
161 public void abstractEdgeToVertexTraversalSingleInRuleTest() throws AAIException {
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();
166 testEdgeRules.addEdge(g, vce, pserver);
168 QueryBuilder<Vertex> tQ1 = new TraversalQuery<>(loader, g, vce, testEdgeRules);
169 tQ1.createEdgeTraversal(EdgeType.COUSIN, "vnf", "pserver");
171 List<Vertex> list = tQ1.toList();
173 assertEquals("1 - Has 1 vertexes ", 1, list.size());
174 assertTrue("1 - traversal results in vnfc ", list.contains(pserver));
180 public void abstractEdgeToVertexMultiRuleTraversalTest() throws AAIException {
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();
186 testEdgeRules.addEdge(g, gvnf, vnfc1);
187 testEdgeRules.addEdge(g, gvnf, vnfc2, "re-uses");
189 QueryBuilder<Vertex> tQ = getNewVertexTraversal(gvnf);
190 tQ.createEdgeTraversal(EdgeType.COUSIN, "vnf", "vnfc");
192 List<Vertex> list = tQ.toList();
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));
202 public void abstractEdgeToVertexMultiRuleOutTraversalTest() throws AAIException {
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();
207 testEdgeRules.addEdge(g, gvnf, pserver);
208 testEdgeRules.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
210 QueryBuilder<Vertex> tQ = getNewVertexTraversal(gvnf);
211 tQ.createEdgeTraversal(EdgeType.COUSIN, "vnf", "pserver");
213 List<Vertex> list = tQ.toList();
215 assertEquals("Has 2 vertexes ", 2, list.size());
216 assertTrue("result has pserver ", list.contains(pserver));
222 public void abstractEdgeToVertexMultiRuleInTraversalTest() throws AAIException {
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();
227 testEdgeRules.addEdge(g, gvnf, complex);
228 testEdgeRules.addEdge(g, gvnf, complex, "complex-generic-vnf-B");
230 QueryBuilder<Vertex> tQ = getNewVertexTraversal(gvnf);
231 tQ.createEdgeTraversal(EdgeType.COUSIN, "vnf", "complex");
233 List<Vertex> list = tQ.toList();
235 assertEquals("Has 2 vertexes ", 2, list.size());
236 assertTrue("result has pserver ", list.contains(complex));