2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Modifications Copyright © 2024 Deutsche Telekom.
8 * ================================================================================
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
20 * ============LICENSE_END=========================================================
23 package org.onap.aai.query.builder;
25 import static org.junit.Assert.assertArrayEquals;
26 import static org.junit.Assert.assertEquals;
28 import java.util.Collections;
29 import java.util.List;
32 import org.apache.tinkerpop.gremlin.process.traversal.Path;
33 import org.apache.tinkerpop.gremlin.process.traversal.Step;
34 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
35 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
36 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
37 import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
38 import org.apache.tinkerpop.gremlin.structure.Edge;
39 import org.apache.tinkerpop.gremlin.structure.Vertex;
40 import org.janusgraph.core.JanusGraph;
41 import org.janusgraph.core.JanusGraphFactory;
42 import org.junit.Test;
43 import org.junit.experimental.categories.Category;
44 import org.onap.aai.TinkerpopUpgrade;
45 import org.onap.aai.db.props.AAIProperties;
46 import org.onap.aai.introspection.Loader;
47 import org.onap.aai.introspection.LoaderUtil;
48 import org.onap.aai.introspection.exceptions.AAIUnknownObjectException;
50 @Category(TinkerpopUpgrade.class)
51 public class TraversalURIOptimizedQueryTest extends TraversalQueryTest {
54 protected QueryBuilder<Edge> getNewEdgeTraversalWithTestEdgeRules(Vertex v) {
55 return new TraversalURIOptimizedQuery<>(loader, g, v);
59 protected QueryBuilder<Edge> getNewEdgeTraversalWithTestEdgeRules() {
60 return new TraversalURIOptimizedQuery<>(loader, g);
64 protected QueryBuilder<Vertex> getNewVertexTraversalWithTestEdgeRules(Vertex v) {
65 return new TraversalURIOptimizedQuery<>(loader, g, v);
69 protected QueryBuilder<Vertex> getNewVertexTraversalWithTestEdgeRules() {
70 return new TraversalURIOptimizedQuery<>(loader, g);
74 protected QueryBuilder<Vertex> getNewVertexTraversal() {
75 return new TraversalURIOptimizedQuery<>(loader, g);
79 protected QueryBuilder<Tree> getNewTreeTraversalWithTestEdgeRules(Vertex v) {
80 return new TraversalURIOptimizedQuery<>(loader, g, v);
84 protected QueryBuilder<Tree> getNewTreeTraversalWithTestEdgeRules() {
85 return new TraversalURIOptimizedQuery<>(loader, g);
89 protected QueryBuilder<Path> getNewPathTraversalWithTestEdgeRules(Vertex v) {
90 return new TraversalURIOptimizedQuery<>(loader, g, v);
94 protected QueryBuilder<Path> getNewPathTraversalWithTestEdgeRules() {
95 return new TraversalURIOptimizedQuery<>(loader, g);
99 public void thatTraversalIsPivotedWithinHasContainer() throws AAIUnknownObjectException {
100 JanusGraph graph = JanusGraphFactory.build().set("storage.backend", "inmemory").open();
101 GraphTraversalSource source = graph.newTransaction().traversal();
102 final Loader loader = LoaderUtil.getLatestVersion();
103 GraphTraversal<Vertex, Vertex> traversal = (GraphTraversal<Vertex, Vertex>) __.<Vertex>start();
104 GraphTraversalBuilder graphTraversalBuilder = new TraversalURIOptimizedQuery<>(loader, source);
105 Map<Integer, String> stepToAaiUri = Collections.singletonMap(6, "/smth");
106 TraversalURIOptimizedQuery traversalQuery = new TraversalURIOptimizedQuery<>(traversal, loader, source,
107 graphTraversalBuilder, stepToAaiUri);
108 traversalQuery.limit(1);
109 traversalQuery.has("propertyKey", "value");
110 traversalQuery.has("propertyKey2", "value2");
111 traversalQuery.limit(2);
112 traversalQuery.has("propertyKey3", "value3");
113 traversalQuery.has("propertyKey4", "value4");
114 traversalQuery.has("propertyKey5", "value5");
115 traversalQuery.limit(3);
116 traversalQuery.limit(4);
118 traversalQuery.executeQuery();
119 String query = traversalQuery.completeTraversal.getSteps().toString();
121 "[GraphStep(vertex,[]), HasStep([aai-uri.eq(/smth)]), HasStep([propertyKey5.eq(value5)]), RangeGlobalStep(0,3), RangeGlobalStep(0,4)]",
126 public void thatTraversalIsPivottedAtRegularStep() throws AAIUnknownObjectException {
127 JanusGraph graph = JanusGraphFactory.build().set("storage.backend", "inmemory").open();
128 GraphTraversalSource source = graph.newTransaction().traversal();
129 final Loader loader = LoaderUtil.getLatestVersion();
130 GraphTraversal<Vertex, Vertex> traversal = (GraphTraversal<Vertex, Vertex>) __.<Vertex>start();
131 GraphTraversalBuilder graphTraversalBuilder = new TraversalURIOptimizedQuery<>(loader, source);
132 Map<Integer, String> stepToAaiUri = Collections.singletonMap(3, "/smth");
133 TraversalURIOptimizedQuery traversalQuery = new TraversalURIOptimizedQuery<>(traversal, loader, source,
134 graphTraversalBuilder, stepToAaiUri);
135 traversalQuery.limit(1);
136 traversalQuery.has("propertyKey", "value");
137 traversalQuery.has("propertyKey2", "value2");
138 traversalQuery.limit(2);
139 traversalQuery.has("propertyKey3", "value3");
140 traversalQuery.has("propertyKey4", "value4");
141 traversalQuery.has("propertyKey5", "value5");
142 traversalQuery.limit(3);
143 traversalQuery.limit(4);
145 GraphTraversal<Vertex, Vertex> expected = __.<Vertex>start()
146 .has(AAIProperties.AAI_URI, "/smth")
148 .has("propertyKey3", "value3")
149 .has("propertyKey4", "value4")
150 .has("propertyKey5", "value5")
153 List<Step> expectedSteps = expected.asAdmin().getSteps();
154 traversalQuery.executeQuery();
155 List<Step> rawActual = traversalQuery.completeTraversal.getSteps();
156 List<Step> actualStep = rawActual.subList(1, rawActual.size()); // remove GraphStep since I found no way to add
157 // it to the expected traversal
158 assertArrayEquals(expectedSteps.toArray(), actualStep.toArray());