2 * ============LICENSE_START=======================================================
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
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=========================================================
21 package org.onap.aai.query.builder;
23 import org.apache.tinkerpop.gremlin.process.traversal.Path;
24 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
25 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
26 import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
27 import org.apache.tinkerpop.gremlin.structure.Edge;
28 import org.apache.tinkerpop.gremlin.structure.Vertex;
29 import org.junit.Ignore;
30 import org.junit.Test;
31 import org.onap.aai.db.props.AAIProperties;
32 import org.onap.aai.edges.enums.EdgeType;
33 import org.onap.aai.exceptions.AAIException;
35 import java.io.UnsupportedEncodingException;
37 import java.net.URISyntaxException;
38 import java.util.List;
40 import static org.junit.Assert.assertEquals;
41 import static org.junit.Assert.assertTrue;
43 public class TraversalQueryTest extends QueryBuilderTestAbstraction {
46 protected QueryBuilder<Edge> getNewEdgeTraversalWithTestEdgeRules(Vertex v) {
47 return new TraversalQuery<>(loader, g, v);
51 protected QueryBuilder<Edge> getNewEdgeTraversalWithTestEdgeRules() {
52 return new TraversalQuery<>(loader, g);
56 protected QueryBuilder<Vertex> getNewVertexTraversalWithTestEdgeRules(Vertex v) {
57 return new TraversalQuery<>(loader, g, v);
61 protected QueryBuilder<Vertex> getNewVertexTraversalWithTestEdgeRules() {
62 return new TraversalQuery<>(loader, g);
65 protected QueryBuilder<Vertex> getNewVertexTraversal() {
66 return new TraversalQuery<>(loader, g);
70 protected QueryBuilder<Tree> getNewTreeTraversalWithTestEdgeRules(Vertex v) {
71 return new TraversalQuery<>(loader, g, v);
75 protected QueryBuilder<Tree> getNewTreeTraversalWithTestEdgeRules() {
76 return new TraversalQuery<>(loader, g);
80 protected QueryBuilder<Path> getNewPathTraversalWithTestEdgeRules(Vertex v) {
81 return new TraversalQuery<>(loader, g, v);
85 protected QueryBuilder<Path> getNewPathTraversalWithTestEdgeRules() {
86 return new TraversalQuery<>(loader, g);
90 public void unionQuery() {
91 QueryBuilder<Vertex> tQ = getNewVertexTraversal();
92 QueryBuilder<Vertex> tQ2 = getNewVertexTraversal();
93 QueryBuilder<Vertex> tQ3 = getNewVertexTraversal();
94 tQ.union(tQ2.getVerticesByProperty("test1", "value1"), tQ3.getVerticesByIndexedProperty("test2", "value2"));
96 GraphTraversal<Vertex, Vertex> expected =
97 __.<Vertex>start().union(__.has("test1", "value1"), __.has("test2", "value2"));
99 assertEquals("they are equal", expected, tQ.getQuery());
104 public void traversalClones() throws UnsupportedEncodingException, AAIException, URISyntaxException {
105 QueryBuilder<Vertex> tQ = getNewVertexTraversal();
106 QueryBuilder<Vertex> builder =
107 tQ.createQueryFromURI(new URI("network/generic-vnfs/generic-vnf/key1")).getQueryBuilder();
108 GraphTraversal<Vertex, Vertex> expected =
109 __.<Vertex>start().has("vnf-id", "key1").has("aai-node-type", "generic-vnf");
110 GraphTraversal<Vertex, Vertex> containerExpected = __.<Vertex>start().has("aai-node-type", "generic-vnf");
112 assertEquals("query object", expected.toString(), builder.getQuery().toString());
113 assertEquals("container query object", containerExpected.toString(),
114 builder.getContainerQuery().getQuery().toString());
118 // TODO - Identify why this unit test is failing and if this
119 // is going to cause any problems
121 @Ignore("Not working ever since the change to using model driven development")
122 public void nestedTraversalClones() throws UnsupportedEncodingException, AAIException, URISyntaxException {
124 QueryBuilder<Vertex> tQ = getNewVertexTraversal();
125 QueryBuilder<Vertex> builder =
126 tQ.createQueryFromURI(new URI("network/generic-vnfs/generic-vnf/key1/l-interfaces/l-interface/key2"))
128 GraphTraversal<Vertex, Vertex> expected = __.<Vertex>start().has("vnf-id", "key1")
129 .has("aai-node-type", "generic-vnf").in("org.onap.relationships.inventory.BelongsTo")
130 .has(AAIProperties.NODE_TYPE, "l-interface").has("interface-name", "key2");
131 GraphTraversal<Vertex, Vertex> containerExpected =
132 __.<Vertex>start().has("vnf-id", "key1").has("aai-node-type", "generic-vnf")
133 .in("org.onap.relationships.inventory.BelongsTo").has(AAIProperties.NODE_TYPE, "l-interface");
135 assertEquals("query object", expected.toString(), builder.getQuery().toString());
136 assertEquals("container query object", containerExpected.toString(),
137 builder.getContainerQuery().getQuery().toString());
142 public void abstractEdgeToVertexTraversalTest() throws AAIException {
144 Vertex gvnf = this.addVHelper(g, "vertex", "aai-node-type", "generic-vnf", "vnf-id", "gvnf").next();
145 Vertex vnfc1 = this.addVHelper(g, "vertex", "aai-node-type", "vnfc", "vnfc-name", "a-name").next();
147 testEdgeSer.addEdge(g, gvnf, vnfc1);
149 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(gvnf);
150 tQ.createEdgeTraversal(EdgeType.COUSIN, "vnf", "vnfc");
152 List<Vertex> list = tQ.toList();
154 assertEquals("Has 1 vertexes ", 1, list.size());
155 assertTrue("Has vertex on the default edge ", list.contains(vnfc1));
160 public void abstractEdgeToVertexTraversalSingleOutRuleTest() throws AAIException {
162 Vertex vce = this.addVHelper(g, "vertex", "aai-node-type", "vce", "vnf-id", "vce").next();
163 Vertex vnfc1 = this.addVHelper(g, "vertex", "aai-node-type", "vnfc", "vnfc-name", "a-name").next();
165 testEdgeSer.addEdge(g, vce, vnfc1);
167 QueryBuilder<Vertex> tQ1 = getNewVertexTraversalWithTestEdgeRules(vce);
168 tQ1.createEdgeTraversal(EdgeType.COUSIN, "vnf", "vnfc");
170 QueryBuilder<Vertex> tQ2 = getNewVertexTraversalWithTestEdgeRules(vnfc1);
171 tQ2.createEdgeTraversal(EdgeType.COUSIN, "vnfc", "vnf");
173 List<Vertex> list1 = tQ1.toList();
174 List<Vertex> list2 = tQ2.toList();
176 assertEquals("1 - Has 1 vertexes ", 1, list1.size());
177 assertTrue("1 - traversal results in vnfc ", list1.contains(vnfc1));
178 assertEquals("2 - Has 1 vertexes ", 1, list2.size());
179 assertTrue("2 - traversal results in vce ", list2.contains(vce));
184 public void abstractEdgeToVertexTraversalSingleInRuleTest() throws AAIException {
186 Vertex vce = this.addVHelper(g, "vertex", "aai-node-type", "vce", "vnf-id", "vce").next();
187 Vertex pserver = this.addVHelper(g, "vertex", "aai-node-type", "pserver", "hostname", "a-name").next();
189 testEdgeSer.addEdge(g, vce, pserver);
191 QueryBuilder<Vertex> tQ1 = getNewVertexTraversalWithTestEdgeRules(vce);
192 tQ1.createEdgeTraversal(EdgeType.COUSIN, "vnf", "pserver");
194 List<Vertex> list = tQ1.toList();
196 assertEquals("1 - Has 1 vertexes ", 1, list.size());
197 assertTrue("1 - traversal results in vnfc ", list.contains(pserver));
202 public void abstractEdgeToVertexMultiRuleTraversalTest() throws AAIException {
204 Vertex gvnf = this.addVHelper(g, "vertex", "aai-node-type", "generic-vnf", "vnf-id", "gvnf").next();
205 Vertex vnfc1 = this.addVHelper(g, "vertex", "aai-node-type", "vnfc", "vnfc-name", "a-name").next();
206 Vertex vnfc2 = this.addVHelper(g, "vertex", "aai-node-type", "vnfc", "vnfc-name", "b-name").next();
208 testEdgeSer.addEdge(g, gvnf, vnfc1);
209 testEdgeSer.addEdge(g, gvnf, vnfc2, "re-uses");
211 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(gvnf);
212 tQ.createEdgeTraversal(EdgeType.COUSIN, "vnf", "vnfc");
214 List<Vertex> list = tQ.toList();
216 assertEquals("Has 2 vertexes ", 2, list.size());
217 assertTrue("Has vertex on the default edge ", list.contains(vnfc1));
218 assertTrue("Has vertex on the re-uses edge ", list.contains(vnfc2));
223 public void abstractEdgeToVertexMultiRuleOutTraversalTest() throws AAIException {
225 Vertex gvnf = this.addVHelper(g, "vertex", "aai-node-type", "generic-vnf", "vnf-id", "gvnf").next();
226 Vertex pserver = this.addVHelper(g, "vertex", "aai-node-type", "pserver", "hostname", "a-name").next();
228 testEdgeSer.addEdge(g, gvnf, pserver);
229 testEdgeSer.addEdge(g, gvnf, pserver, "generic-vnf-pserver-B");
231 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(gvnf);
232 tQ.createEdgeTraversal(EdgeType.COUSIN, "vnf", "pserver");
234 List<Vertex> list = tQ.toList();
236 assertEquals("Has 2 vertexes ", 2, list.size());
237 assertTrue("result has pserver ", list.contains(pserver));
242 public void abstractEdgeToVertexMultiRuleInTraversalTest() throws AAIException {
244 Vertex gvnf = this.addVHelper(g, "vertex", "aai-node-type", "generic-vnf", "vnf-id", "gvnf").next();
245 Vertex complex = this.addVHelper(g, "vertex", "aai-node-type", "complex", "physical-location-id", "a-name").next();
247 testEdgeSer.addEdge(g, gvnf, complex);
248 testEdgeSer.addEdge(g, gvnf, complex, "complex-generic-vnf-B");
250 QueryBuilder<Vertex> tQ = getNewVertexTraversalWithTestEdgeRules(gvnf);
251 tQ.createEdgeTraversal(EdgeType.COUSIN, "vnf", "complex");
253 List<Vertex> list = tQ.toList();
255 assertEquals("Has 2 vertexes ", 2, list.size());
256 assertTrue("result has pserver ", list.contains(complex));