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=========================================================
20 package org.onap.aai.parsers.query;
22 import org.apache.tinkerpop.gremlin.process.traversal.P;
23 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
24 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
25 import org.apache.tinkerpop.gremlin.structure.Vertex;
26 import org.junit.Before;
27 import org.junit.Rule;
28 import org.junit.Test;
29 import org.junit.rules.ExpectedException;
30 import org.junit.runner.RunWith;
31 import org.junit.runners.Parameterized;
32 import org.onap.aai.AAISetup;
33 import org.onap.aai.db.props.AAIProperties;
34 import org.onap.aai.exceptions.AAIException;
35 import org.onap.aai.introspection.ModelType;
36 import org.onap.aai.rest.RestTokens;
37 import org.onap.aai.serialization.engines.QueryStyle;
38 import org.onap.aai.serialization.engines.JanusGraphDBEngine;
39 import org.onap.aai.serialization.engines.TransactionalGraphEngine;
41 import javax.ws.rs.core.MultivaluedHashMap;
42 import javax.ws.rs.core.MultivaluedMap;
43 import javax.ws.rs.core.UriBuilder;
44 import java.io.UnsupportedEncodingException;
46 import java.util.ArrayList;
47 import java.util.Arrays;
48 import java.util.Collection;
49 import java.util.List;
51 import static org.hamcrest.CoreMatchers.containsString;
52 import static org.hamcrest.Matchers.hasProperty;
53 import static org.hamcrest.Matchers.is;
54 import static org.junit.Assert.assertEquals;
56 @RunWith(value = Parameterized.class)
57 public class GraphTraversalTest extends AAISetup {
59 private TransactionalGraphEngine dbEngine;
60 private TransactionalGraphEngine dbEnginev9;
62 @Parameterized.Parameter(value = 0)
63 public QueryStyle queryStyle;
65 @Parameterized.Parameters(name = "QueryStyle.{0}")
66 public static Collection<Object[]> data() {
67 return Arrays.asList(new Object[][]{
68 {QueryStyle.TRAVERSAL},
69 {QueryStyle.TRAVERSAL_URI}
73 @Rule public ExpectedException thrown = ExpectedException.none();
79 * @throws SecurityException
80 * @throws NoSuchFieldException
83 public void configure() throws Exception {
85 new JanusGraphDBEngine(queryStyle,
86 loaderFactory.createLoaderForVersion(ModelType.MOXY, schemaVersions.getDefaultVersion()),
90 new JanusGraphDBEngine(queryStyle,
91 loaderFactory.createLoaderForVersion(ModelType.MOXY, schemaVersions.getDepthVersion()),
98 * @throws UnsupportedEncodingException the unsupported encoding exception
99 * @throws AAIException the AAI exception
102 public void parentQuery() throws UnsupportedEncodingException, AAIException {
103 URI uri = UriBuilder.fromPath("cloud-infrastructure/complexes/complex/key1").build();
105 QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri);
107 GraphTraversal<Vertex, Vertex> expected = __.<Vertex>start().has("physical-location-id", "key1").has("aai-node-type", "complex");
109 "gremlin query should be " + expected.toString(),
111 query.getQueryBuilder().getQuery().toString());
113 "parent gremlin query should be equal to normal query",
115 query.getQueryBuilder().getParentQuery().getQuery().toString());
117 "result type should be complex",
119 query.getResultType());
121 "result type should be empty",
123 query.getParentResultType());
124 assertEquals("dependent",false, query.isDependent());
132 * @throws UnsupportedEncodingException the unsupported encoding exception
133 * @throws AAIException the AAI exception
136 public void childQuery() throws UnsupportedEncodingException, AAIException {
137 URI uri = UriBuilder.fromPath("cloud-infrastructure/complexes/complex/key1/ctag-pools/ctag-pool/key2/key3").build();
138 QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri);
139 GraphTraversal<Vertex, Vertex> expected = __.<Vertex>start()
140 .has("physical-location-id", "key1").has("aai-node-type", "complex")
141 .in("org.onap.relationships.inventory.BelongsTo")
142 .has("aai-node-type", "ctag-pool")
143 .has("target-pe", "key2").has("availability-zone-name", "key3");
144 GraphTraversal<Vertex, Vertex> expectedParent = __.<Vertex>start()
145 .has("physical-location-id", "key1").has("aai-node-type", "complex");
147 "gremlin query should be " + expected.toString(),
149 query.getQueryBuilder().getQuery().toString());
151 "parent gremlin query should be equal the query for complex",
152 expectedParent.toString(),
153 query.getQueryBuilder().getParentQuery().getQuery().toString());
155 "result type should be complex",
157 query.getParentResultType());
159 "result type should be ctag-pool",
161 query.getResultType());
162 assertEquals("dependent",true, query.isDependent());
170 * @throws UnsupportedEncodingException the unsupported encoding exception
171 * @throws AAIException the AAI exception
174 public void namingExceptions() throws UnsupportedEncodingException, AAIException {
175 URI uri = UriBuilder.fromPath("network/vces/vce/key1/port-groups/port-group/key2/cvlan-tags/cvlan-tag/655").build();
176 QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri);
177 GraphTraversal<Vertex, Vertex> expected = __.<Vertex>start()
178 .has("vnf-id", "key1").has("aai-node-type", "vce")
179 .in("org.onap.relationships.inventory.BelongsTo")
180 .has("aai-node-type", "port-group")
181 .has("interface-id", "key2").in("org.onap.relationships.inventory.BelongsTo")
182 .has("aai-node-type", "cvlan-tag")
183 .has("cvlan-tag", 655);
184 GraphTraversal<Vertex, Vertex> expectedParent = __.<Vertex>start()
185 .has("vnf-id", "key1").has("aai-node-type", "vce")
186 .in("org.onap.relationships.inventory.BelongsTo")
187 .has("aai-node-type", "port-group")
188 .has("interface-id", "key2");
190 "gremlin query should be " + expected.toString(),
192 query.getQueryBuilder().getQuery().toString());
194 "parent gremlin query should be equal the query for port group",
195 expectedParent.toString(),
196 query.getQueryBuilder().getParentQuery().getQuery().toString());
198 "result type should be cvlan-tag",
200 query.getResultType());
202 "result type should be port-group",
204 query.getParentResultType());
206 "contaner type should be empty",
208 query.getContainerType());
209 assertEquals("dependent",true, query.isDependent());
218 * @throws UnsupportedEncodingException the unsupported encoding exception
219 * @throws AAIException the AAI exception
222 public void getAll() throws UnsupportedEncodingException, AAIException {
223 URI uri = UriBuilder.fromPath("network/vces/vce/key1/port-groups/port-group/key2/cvlan-tags").build();
224 QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri);
225 GraphTraversal<Vertex, Vertex> expected = __.<Vertex>start()
226 .has("vnf-id", "key1").has("aai-node-type", "vce")
227 .in("org.onap.relationships.inventory.BelongsTo")
228 .has("aai-node-type", "port-group")
229 .has("interface-id", "key2").in("org.onap.relationships.inventory.BelongsTo")
230 .has("aai-node-type", "cvlan-tag");
231 GraphTraversal<Vertex, Vertex> expectedParent = __.<Vertex>start()
232 .has("vnf-id", "key1").has("aai-node-type", "vce")
233 .in("org.onap.relationships.inventory.BelongsTo")
234 .has("aai-node-type", "port-group")
235 .has("interface-id", "key2");
237 "gremlin query should be " + expected.toString(),
239 query.getQueryBuilder().getQuery().toString());
241 "parent gremlin query should be equal the query for port group",
242 expectedParent.toString(),
243 query.getQueryBuilder().getParentQuery().getQuery().toString());
245 "result type should be port-group",
247 query.getParentResultType());
249 "result type should be cvlan-tag",
251 query.getResultType());
253 "container type should be cvlan-tags",
255 query.getContainerType());
256 assertEquals("dependent",true, query.isDependent());
262 public void getAllParent() throws UnsupportedEncodingException, AAIException {
263 URI uri = UriBuilder.fromPath("cloud-infrastructure/pservers").build();
264 QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri);
265 GraphTraversal<Vertex, Vertex> expected = __.<Vertex>start()
266 .has("aai-node-type", "pserver");
267 GraphTraversal<Vertex, Vertex> expectedParent = __.<Vertex>start()
268 .has("aai-node-type", "pserver");
270 "gremlin query should be " + expected.toString(),
272 query.getQueryBuilder().getQuery().toString());
274 "parent gremlin query should be equal the query for pserver",
275 expectedParent.toString(),
276 query.getQueryBuilder().getParentQuery().getQuery().toString());
278 "parent result type should be empty",
280 query.getParentResultType());
282 "result type should be pserver",
284 query.getResultType());
286 "container type should be pservers",
288 query.getContainerType());
289 assertEquals("dependent",false, query.isDependent());
296 * Gets the via query param.
298 * @return the via query param
299 * @throws UnsupportedEncodingException the unsupported encoding exception
300 * @throws AAIException the AAI exception
303 public void getViaQueryParam() throws UnsupportedEncodingException, AAIException {
304 URI uri = UriBuilder.fromPath("cloud-infrastructure/cloud-regions/cloud-region/mycloudowner/mycloudregionid/tenants/tenant").build();
305 MultivaluedMap<String, String> map = new MultivaluedHashMap<>();
306 map.putSingle("tenant-name", "Tenant1");
307 QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri, map);
308 GraphTraversal<Vertex, Vertex> expected = __.<Vertex>start()
309 .has("cloud-owner", "mycloudowner").has("cloud-region-id", "mycloudregionid")
310 .has("aai-node-type", "cloud-region")
311 .in("org.onap.relationships.inventory.BelongsTo")
312 .has("aai-node-type", "tenant")
313 .has("tenant-name", "Tenant1");
315 GraphTraversal<Vertex, Vertex> expectedParent = __.<Vertex>start()
316 .has("cloud-owner", "mycloudowner").has("cloud-region-id", "mycloudregionid")
317 .has("aai-node-type", "cloud-region");
320 "gremlin query should be " + expected.toString(),
322 query.getQueryBuilder().getQuery().toString());
324 "parent gremlin query should be equal the query for cloud-region",
325 expectedParent.toString(),
326 query.getQueryBuilder().getParentQuery().getQuery().toString());
328 "result type should be cloud-region",
330 query.getParentResultType());
332 "result type should be tenant",
334 query.getResultType());
336 "container type should be empty",
338 query.getContainerType());
339 assertEquals("dependent",true, query.isDependent());
344 public void getViaDuplicateQueryParam() throws UnsupportedEncodingException, AAIException {
345 URI uri = UriBuilder.fromPath("cloud-infrastructure/cloud-regions/cloud-region/mycloudowner/mycloudregionid/tenants/tenant").build();
346 MultivaluedMap<String, String> map = new MultivaluedHashMap<>();
347 List<String> values = new ArrayList<>();
348 values.add("Tenant1");
349 values.add("Tenant2");
350 map.put("tenant-name", values);
351 QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri, map);
352 GraphTraversal<Vertex, Vertex> expected = __.<Vertex>start()
353 .has("cloud-owner", "mycloudowner").has("cloud-region-id", "mycloudregionid")
354 .has("aai-node-type", "cloud-region")
355 .in("org.onap.relationships.inventory.BelongsTo")
356 .has("aai-node-type", "tenant")
357 .has("tenant-name", P.within(values));
359 GraphTraversal<Vertex, Vertex> expectedParent = __.<Vertex>start()
360 .has("cloud-owner", "mycloudowner").has("cloud-region-id", "mycloudregionid")
361 .has("aai-node-type", "cloud-region");
364 "gremlin query should be " + expected.toString(),
366 query.getQueryBuilder().getQuery().toString());
368 "parent gremlin query should be equal the query for cloud-region",
369 expectedParent.toString(),
370 query.getQueryBuilder().getParentQuery().getQuery().toString());
372 "result type should be cloud-region",
374 query.getParentResultType());
376 "result type should be tenant",
378 query.getResultType());
380 "container type should be empty",
382 query.getContainerType());
383 assertEquals("dependent",true, query.isDependent());
388 * Gets the plural via query param.
390 * @return the plural via query param
391 * @throws UnsupportedEncodingException the unsupported encoding exception
392 * @throws AAIException the AAI exception
395 public void getPluralViaQueryParam() throws UnsupportedEncodingException, AAIException {
396 URI uri = UriBuilder.fromPath("network/vnfcs").build();
397 MultivaluedMap<String, String> map = new MultivaluedHashMap<>();
398 map.putSingle("prov-status", "up");
399 QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri, map);
400 GraphTraversal<Vertex, Vertex> expected = __.<Vertex>start()
401 .has("aai-node-type", "vnfc")
402 .has("prov-status", "up");
404 GraphTraversal<Vertex, Vertex> expectedParent = __.<Vertex>start()
405 .has("aai-node-type", "vnfc");
408 "gremlin query should be " + expected.toString(),
410 query.getQueryBuilder().getQuery().toString());
413 expectedParent.toString(),
414 query.getQueryBuilder().getParentQuery().getQuery().toString());
416 "parent result type should be empty",
418 query.getParentResultType());
420 "result type should be vnfc",
422 query.getResultType());
424 "container type should be empty",
426 query.getContainerType());
427 assertEquals("dependent",true, query.isDependent());
432 * Gets the all query param naming exception.
434 * @return the all query param naming exception
435 * @throws UnsupportedEncodingException the unsupported encoding exception
436 * @throws AAIException the AAI exception
439 public void getAllQueryParamNamingException() throws UnsupportedEncodingException, AAIException {
440 URI uri = UriBuilder.fromPath("network/vces/vce/key1/port-groups/port-group/key2/cvlan-tags").build();
441 MultivaluedMap<String, String> map = new MultivaluedHashMap<>();
442 map.putSingle("cvlan-tag", "333");
443 QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri, map);
445 GraphTraversal<Vertex, Vertex> expected = __.<Vertex>start()
446 .has("vnf-id", "key1").has("aai-node-type", "vce")
447 .in("org.onap.relationships.inventory.BelongsTo")
448 .has("aai-node-type", "port-group")
449 .has("interface-id", "key2").in("org.onap.relationships.inventory.BelongsTo")
450 .has("aai-node-type", "cvlan-tag")
451 .has("cvlan-tag", 333);
452 GraphTraversal<Vertex, Vertex> expectedParent = __.<Vertex>start()
453 .has("vnf-id", "key1").has("aai-node-type", "vce")
454 .in("org.onap.relationships.inventory.BelongsTo")
455 .has("aai-node-type", "port-group")
456 .has("interface-id", "key2");
458 "gremlin query should be " + expected.toString(),
460 query.getQueryBuilder().getQuery().toString());
462 "parent gremlin query should be equal the query for port group",
463 expectedParent.toString(),
464 query.getQueryBuilder().getParentQuery().getQuery().toString());
466 "result type should be port-group",
468 query.getParentResultType());
470 "result type should be cvlan-tag",
472 query.getResultType());
474 "container type should be cvlan-tags",
476 query.getContainerType());
477 assertEquals("dependent",true, query.isDependent());
485 * @throws UnsupportedEncodingException the unsupported encoding exception
486 * @throws AAIException the AAI exception
489 public void abstractType() throws UnsupportedEncodingException, AAIException {
490 URI uri = UriBuilder.fromPath("vnf/key1").build();
492 QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri);
494 GraphTraversal<Vertex, Vertex> expected = __.<Vertex>start()
495 .has("vnf-id", "key1").has(AAIProperties.NODE_TYPE, P.within("vce", "generic-vnf"));
497 GraphTraversal<Vertex, Vertex> expectedParent = expected;
499 "gremlin query should be " + expected.toString(),
501 query.getQueryBuilder().getQuery().toString());
503 "parent gremlin query should be equal the query for port group",
504 expectedParent.toString(),
505 query.getQueryBuilder().getParentQuery().getQuery().toString());
507 "result type should be empty",
509 query.getParentResultType());
511 "result type should be vnf",
513 query.getResultType());
515 assertEquals("dependent",false, query.isDependent());
521 * Non parent abstract type.
523 * @throws UnsupportedEncodingException the unsupported encoding exception
524 * @throws AAIException the AAI exception
527 public void nonParentAbstractType() throws UnsupportedEncodingException, AAIException {
528 URI uri = UriBuilder.fromPath("cloud-infrastructure/pservers/pserver/key2/vnf/key1").build();
529 thrown.expect(AAIException.class);
530 thrown.expectMessage(containsString("not a valid path"));
531 dbEngine.getQueryBuilder().createQueryFromURI(uri);
535 public void parentAbstractTypeWithNesting() throws UnsupportedEncodingException, AAIException {
536 URI uri = UriBuilder.fromPath("vnf/key1/vf-modules/vf-module/key2").build();
538 QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri);
540 GraphTraversal<Vertex, Vertex> expected = __.<Vertex>start()
541 .has("vnf-id", "key1").has(AAIProperties.NODE_TYPE, P.within("vce", "generic-vnf"))
542 .union(__.in("org.onap.relationships.inventory.BelongsTo").has(AAIProperties.NODE_TYPE, "vf-module")).has("vf-module-id", "key2");
544 GraphTraversal<Vertex, Vertex> expectedParent = __.<Vertex>start()
545 .has("vnf-id", "key1").has(AAIProperties.NODE_TYPE, P.within("vce", "generic-vnf"));
547 "gremlin query should be " + expected.toString(),
549 query.getQueryBuilder().getQuery().toString());
551 "parent gremlin query should be equal the query for ",
552 expectedParent.toString(),
553 query.getQueryBuilder().getParentQuery().getQuery().toString());
555 "result type should be vnf",
557 query.getParentResultType());
559 "result type should be vf-module",
561 query.getResultType());
563 assertEquals("dependent",true, query.isDependent());
568 public void getViaBadQueryParam() throws UnsupportedEncodingException, AAIException {
569 URI uri = UriBuilder.fromPath("cloud-infrastructure/cloud-regions/cloud-region/a/b/tenants/tenant").build();
570 MultivaluedMap<String, String> map = new MultivaluedHashMap<>();
571 map.putSingle("tenant-n231ame", "Tenant1");
572 thrown.expect(AAIException.class);
573 thrown.expect(hasProperty("code", is("AAI_3000")));
575 QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri, map);
580 public void getPluralViaBadQueryParam() throws UnsupportedEncodingException, AAIException {
581 URI uri = UriBuilder.fromPath("cloud-infrastructure/cloud-regions/cloud-region/a/b/tenants").build();
582 MultivaluedMap<String, String> map = new MultivaluedHashMap<>();
583 map.putSingle("tenant-n231ame", "Tenant1");
584 thrown.expect(AAIException.class);
585 thrown.expect(hasProperty("code", is("AAI_3000")));
587 QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri, map);
592 public void getPluralViaDuplicateQueryParam() throws UnsupportedEncodingException, AAIException {
593 URI uri = UriBuilder.fromPath("network/vnfcs").build();
594 MultivaluedMap<String, String> map = new MultivaluedHashMap<>();
595 List<String> values = new ArrayList<>();
601 map.put("prov-status", values);
602 QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri, map);
603 GraphTraversal<Vertex, Vertex> expected = __.<Vertex>start()
604 .has("aai-node-type", "vnfc")
605 .has("prov-status", P.within(values));
607 GraphTraversal<Vertex, Vertex> expectedParent = __.<Vertex>start()
608 .has("aai-node-type", "vnfc");
611 "gremlin query should be " + expected.toString(),
613 query.getQueryBuilder().getQuery().toString());
616 expectedParent.toString(),
617 query.getQueryBuilder().getParentQuery().getQuery().toString());
619 "parent result type should be empty",
621 query.getParentResultType());
623 "result type should be vnfc",
625 query.getResultType());
627 "container type should be empty",
629 query.getContainerType());
630 assertEquals("dependent",true, query.isDependent());
635 public void dbAliasedSearch() throws UnsupportedEncodingException, AAIException {
636 URI uri = UriBuilder.fromPath("network/generic-vnfs").build();
637 MultivaluedMap<String, String> map = new MultivaluedHashMap<>();
638 map.putSingle("persona-model-customization-id", "key2");
639 QueryParser query = dbEnginev9.getQueryBuilder().createQueryFromURI(uri, map);
640 GraphTraversal<Vertex, Vertex> expected = __.<Vertex>start()
641 .has("aai-node-type", "generic-vnf")
642 .has("model-customization-id", "key2");
643 GraphTraversal<Vertex, Vertex> expectedParent = __.<Vertex>start()
644 .has("aai-node-type", "generic-vnf");
647 "gremlin query should be " + expected.toString(),
649 query.getQueryBuilder().getQuery().toString());
652 expectedParent.toString(),
653 query.getQueryBuilder().getParentQuery().getQuery().toString());
656 "result type should be",
658 query.getResultType());
660 "result type should be empty",
662 query.getParentResultType());
663 assertEquals("dependent",true, query.isDependent());
669 public void dataLinkedSearch() throws UnsupportedEncodingException, AAIException {
670 URI uri = UriBuilder.fromPath("network/vpn-bindings").build();
671 MultivaluedMap<String, String> map = new MultivaluedHashMap<>();
672 map.putSingle("global-route-target", "key2");
673 QueryParser query = dbEnginev9.getQueryBuilder().createQueryFromURI(uri, map);
674 GraphTraversal<Vertex, Vertex> expected = __.<Vertex>start()
675 .has("aai-node-type", "vpn-binding")
676 .where(__.in("org.onap.relationships.inventory.BelongsTo").has(AAIProperties.NODE_TYPE, "route-target").has("global-route-target", "key2"));
677 GraphTraversal<Vertex, Vertex> expectedParent = __.<Vertex>start()
678 .has("aai-node-type", "vpn-binding");
681 "gremlin query should be " + expected.toString(),
683 query.getQueryBuilder().getQuery().toString());
686 expectedParent.toString(),
687 query.getQueryBuilder().getParentQuery().getQuery().toString());
690 "result type should be",
692 query.getResultType());
694 "result type should be empty",
696 query.getParentResultType());
697 assertEquals("dependent",true, query.isDependent());
701 public void pluralCousin() throws UnsupportedEncodingException, AAIException {
702 URI uri = UriBuilder.fromPath("cloud-infrastructure/complexes/complex/key1/related-to/pservers").build();
704 QueryParser query = dbEnginev9.getQueryBuilder().createQueryFromURI(uri);
705 GraphTraversal<Vertex, Vertex> expected = __.<Vertex>start()
706 .has("physical-location-id", "key1")
707 .has("aai-node-type", "complex")
708 .in("org.onap.relationships.inventory.LocatedIn").has("aai-node-type", "pserver");
709 GraphTraversal<Vertex, Vertex> expectedParent = __.<Vertex>start()
710 .has("physical-location-id", "key1")
711 .has("aai-node-type", "complex");
714 "gremlin query should be " + expected.toString(),
716 query.getQueryBuilder().getQuery().toString());
719 expectedParent.toString(),
720 query.getQueryBuilder().getParentQuery().getQuery().toString());
723 "result type should be",
725 query.getResultType());
727 "result type should be",
729 query.getParentResultType());
730 //this is controversial but we're not allowing writes on this currently
731 assertEquals("dependent",true, query.isDependent());
735 public void specificCousin() throws UnsupportedEncodingException, AAIException {
736 URI uri = UriBuilder.fromPath("cloud-infrastructure/complexes/complex/key1/related-to/pservers/pserver/key2").build();
738 QueryParser query = dbEnginev9.getQueryBuilder().createQueryFromURI(uri);
739 GraphTraversal<Vertex, Vertex> expected = __.<Vertex>start()
740 .has("physical-location-id", "key1")
741 .has("aai-node-type", "complex")
742 .in("org.onap.relationships.inventory.LocatedIn").has("aai-node-type", "pserver")
743 .has("hostname", "key2");
744 GraphTraversal<Vertex, Vertex> expectedParent = __.<Vertex>start()
745 .has("physical-location-id", "key1")
746 .has("aai-node-type", "complex");
749 "gremlin query should be " + expected.toString(),
751 query.getQueryBuilder().getQuery().toString());
754 expectedParent.toString(),
755 query.getQueryBuilder().getParentQuery().getQuery().toString());
758 "result type should be",
760 query.getResultType());
762 "result type should be",
764 query.getParentResultType());
765 //this is controversial but we're not allowing writes on this currently
766 assertEquals("dependent",true, query.isDependent());
770 public void doubleSpecificCousin() throws UnsupportedEncodingException, AAIException {
771 URI uri = UriBuilder.fromPath("cloud-infrastructure/complexes/complex/key1/related-to/pservers/pserver/key2/related-to/vservers/vserver/key3").build();
773 QueryParser query = dbEnginev9.getQueryBuilder().createQueryFromURI(uri);
774 GraphTraversal<Vertex, Vertex> expected = __.<Vertex>start()
775 .has("physical-location-id", "key1")
776 .has("aai-node-type", "complex")
777 .in("org.onap.relationships.inventory.LocatedIn").has("aai-node-type", "pserver")
778 .has("hostname", "key2")
779 .in("tosca.relationships.HostedOn").has("aai-node-type", "vserver")
780 .has("vserver-id", "key3");
781 GraphTraversal<Vertex, Vertex> expectedParent = __.<Vertex>start()
782 .has("physical-location-id", "key1")
783 .has("aai-node-type", "complex")
784 .in("org.onap.relationships.inventory.LocatedIn").has("aai-node-type", "pserver")
785 .has("hostname", "key2");
788 "gremlin query should be " + expected.toString(),
790 query.getQueryBuilder().getQuery().toString());
793 expectedParent.toString(),
794 query.getQueryBuilder().getParentQuery().getQuery().toString());
797 "result type should be",
799 query.getResultType());
801 "result type should be",
803 query.getParentResultType());
804 //this is controversial but we're not allowing writes on this currently
805 assertEquals("dependent",true, query.isDependent());
809 public void traversalEndsInRelatedTo() throws UnsupportedEncodingException, AAIException {
810 URI uri = UriBuilder.fromPath("cloud-infrastructure/complexes/complex/key1/related-to").build();
812 thrown.expect(AAIException.class);
813 thrown.expectMessage(containsString(RestTokens.COUSIN.toString()));
814 QueryParser query = dbEnginev9.getQueryBuilder().createQueryFromURI(uri);
819 public void pluralCousinToPluralCousin() throws UnsupportedEncodingException, AAIException {
820 URI uri = UriBuilder.fromPath("cloud-infrastructure/complexes/related-to/pservers").build();
822 thrown.expect(AAIException.class);
823 thrown.expectMessage(containsString("chain plurals"));
824 QueryParser query = dbEnginev9.getQueryBuilder().createQueryFromURI(uri);