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.DataLinkSetup;
34 import org.onap.aai.db.props.AAIProperties;
35 import org.onap.aai.exceptions.AAIException;
36 import org.onap.aai.introspection.ModelType;
37 import org.onap.aai.rest.RestTokens;
38 import org.onap.aai.serialization.engines.QueryStyle;
39 import org.onap.aai.serialization.engines.JanusGraphDBEngine;
40 import org.onap.aai.serialization.engines.TransactionalGraphEngine;
41 import org.springframework.test.annotation.DirtiesContext;
43 import javax.ws.rs.core.MultivaluedHashMap;
44 import javax.ws.rs.core.MultivaluedMap;
45 import javax.ws.rs.core.UriBuilder;
46 import java.io.UnsupportedEncodingException;
48 import java.util.ArrayList;
49 import java.util.Arrays;
50 import java.util.Collection;
51 import java.util.List;
53 import static org.hamcrest.CoreMatchers.containsString;
54 import static org.hamcrest.Matchers.hasProperty;
55 import static org.hamcrest.Matchers.is;
56 import static org.junit.Assert.assertEquals;
58 @RunWith(value = Parameterized.class)
59 @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_CLASS)
60 public class GraphTraversalTest extends DataLinkSetup {
62 private TransactionalGraphEngine dbEngine;
63 private TransactionalGraphEngine dbEngineDepthVersion;
65 @Parameterized.Parameter(value = 0)
66 public QueryStyle queryStyle;
68 @Parameterized.Parameters(name = "QueryStyle.{0}")
69 public static Collection<Object[]> data() {
70 return Arrays.asList(new Object[][]{
71 {QueryStyle.TRAVERSAL},
72 {QueryStyle.TRAVERSAL_URI}
76 @Rule public ExpectedException thrown = ExpectedException.none();
82 * @throws SecurityException
83 * @throws NoSuchFieldException
86 public void configure() throws Exception {
88 new JanusGraphDBEngine(queryStyle,
89 loaderFactory.createLoaderForVersion(ModelType.MOXY, schemaVersions.getDefaultVersion()),
92 dbEngineDepthVersion =
93 new JanusGraphDBEngine(queryStyle,
94 loaderFactory.createLoaderForVersion(ModelType.MOXY, schemaVersions.getDepthVersion()),
101 * @throws UnsupportedEncodingException the unsupported encoding exception
102 * @throws AAIException the AAI exception
105 public void parentQuery() throws UnsupportedEncodingException, AAIException {
106 URI uri = UriBuilder.fromPath("cloud-infrastructure/complexes/complex/key1").build();
108 QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri);
110 GraphTraversal<Vertex, Vertex> expected = __.<Vertex>start().has("physical-location-id", "key1").has("aai-node-type", "complex");
112 "gremlin query should be " + expected.toString(),
114 query.getQueryBuilder().getQuery().toString());
116 "parent gremlin query should be equal to normal query",
118 query.getQueryBuilder().getParentQuery().getQuery().toString());
120 "result type should be complex",
122 query.getResultType());
124 "result type should be empty",
126 query.getParentResultType());
127 assertEquals("dependent",false, query.isDependent());
135 * @throws UnsupportedEncodingException the unsupported encoding exception
136 * @throws AAIException the AAI exception
139 public void childQuery() throws UnsupportedEncodingException, AAIException {
140 URI uri = UriBuilder.fromPath("cloud-infrastructure/complexes/complex/key1/ctag-pools/ctag-pool/key2/key3").build();
141 QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri);
142 GraphTraversal<Vertex, Vertex> expected = __.<Vertex>start()
143 .has("physical-location-id", "key1").has("aai-node-type", "complex")
144 .in("org.onap.relationships.inventory.BelongsTo")
145 .has("aai-node-type", "ctag-pool")
146 .has("target-pe", "key2").has("availability-zone-name", "key3");
147 GraphTraversal<Vertex, Vertex> expectedParent = __.<Vertex>start()
148 .has("physical-location-id", "key1").has("aai-node-type", "complex");
150 "gremlin query should be " + expected.toString(),
152 query.getQueryBuilder().getQuery().toString());
154 "parent gremlin query should be equal the query for complex",
155 expectedParent.toString(),
156 query.getQueryBuilder().getParentQuery().getQuery().toString());
158 "result type should be complex",
160 query.getParentResultType());
162 "result type should be ctag-pool",
164 query.getResultType());
165 assertEquals("dependent",true, query.isDependent());
173 * @throws UnsupportedEncodingException the unsupported encoding exception
174 * @throws AAIException the AAI exception
177 public void namingExceptions() throws UnsupportedEncodingException, AAIException {
178 URI uri = UriBuilder.fromPath("network/vces/vce/key1/port-groups/port-group/key2/cvlan-tags/cvlan-tag/655").build();
179 QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri);
180 GraphTraversal<Vertex, Vertex> expected = __.<Vertex>start()
181 .has("vnf-id", "key1").has("aai-node-type", "vce")
182 .in("org.onap.relationships.inventory.BelongsTo")
183 .has("aai-node-type", "port-group")
184 .has("interface-id", "key2").in("org.onap.relationships.inventory.BelongsTo")
185 .has("aai-node-type", "cvlan-tag")
186 .has("cvlan-tag", 655);
187 GraphTraversal<Vertex, Vertex> expectedParent = __.<Vertex>start()
188 .has("vnf-id", "key1").has("aai-node-type", "vce")
189 .in("org.onap.relationships.inventory.BelongsTo")
190 .has("aai-node-type", "port-group")
191 .has("interface-id", "key2");
193 "gremlin query should be " + expected.toString(),
195 query.getQueryBuilder().getQuery().toString());
197 "parent gremlin query should be equal the query for port group",
198 expectedParent.toString(),
199 query.getQueryBuilder().getParentQuery().getQuery().toString());
201 "result type should be cvlan-tag",
203 query.getResultType());
205 "result type should be port-group",
207 query.getParentResultType());
209 "contaner type should be empty",
211 query.getContainerType());
212 assertEquals("dependent",true, query.isDependent());
221 * @throws UnsupportedEncodingException the unsupported encoding exception
222 * @throws AAIException the AAI exception
225 public void getAll() throws UnsupportedEncodingException, AAIException {
226 URI uri = UriBuilder.fromPath("network/vces/vce/key1/port-groups/port-group/key2/cvlan-tags").build();
227 QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri);
228 GraphTraversal<Vertex, Vertex> expected = __.<Vertex>start()
229 .has("vnf-id", "key1").has("aai-node-type", "vce")
230 .in("org.onap.relationships.inventory.BelongsTo")
231 .has("aai-node-type", "port-group")
232 .has("interface-id", "key2").in("org.onap.relationships.inventory.BelongsTo")
233 .has("aai-node-type", "cvlan-tag");
234 GraphTraversal<Vertex, Vertex> expectedParent = __.<Vertex>start()
235 .has("vnf-id", "key1").has("aai-node-type", "vce")
236 .in("org.onap.relationships.inventory.BelongsTo")
237 .has("aai-node-type", "port-group")
238 .has("interface-id", "key2");
240 "gremlin query should be " + expected.toString(),
242 query.getQueryBuilder().getQuery().toString());
244 "parent gremlin query should be equal the query for port group",
245 expectedParent.toString(),
246 query.getQueryBuilder().getParentQuery().getQuery().toString());
248 "result type should be port-group",
250 query.getParentResultType());
252 "result type should be cvlan-tag",
254 query.getResultType());
256 "container type should be cvlan-tags",
258 query.getContainerType());
259 assertEquals("dependent",true, query.isDependent());
265 public void getAllParent() throws UnsupportedEncodingException, AAIException {
266 URI uri = UriBuilder.fromPath("cloud-infrastructure/pservers").build();
267 QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri);
268 GraphTraversal<Vertex, Vertex> expected = __.<Vertex>start()
269 .has("aai-node-type", "pserver");
270 GraphTraversal<Vertex, Vertex> expectedParent = __.<Vertex>start()
271 .has("aai-node-type", "pserver");
273 "gremlin query should be " + expected.toString(),
275 query.getQueryBuilder().getQuery().toString());
277 "parent gremlin query should be equal the query for pserver",
278 expectedParent.toString(),
279 query.getQueryBuilder().getParentQuery().getQuery().toString());
281 "parent result type should be empty",
283 query.getParentResultType());
285 "result type should be pserver",
287 query.getResultType());
289 "container type should be pservers",
291 query.getContainerType());
292 assertEquals("dependent",false, query.isDependent());
299 * Gets the via query param.
301 * @return the via query param
302 * @throws UnsupportedEncodingException the unsupported encoding exception
303 * @throws AAIException the AAI exception
306 public void getViaQueryParam() throws UnsupportedEncodingException, AAIException {
307 URI uri = UriBuilder.fromPath("cloud-infrastructure/cloud-regions/cloud-region/mycloudowner/mycloudregionid/tenants/tenant").build();
308 MultivaluedMap<String, String> map = new MultivaluedHashMap<>();
309 map.putSingle("tenant-name", "Tenant1");
310 QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri, map);
311 GraphTraversal<Vertex, Vertex> expected = __.<Vertex>start()
312 .has("cloud-owner", "mycloudowner").has("cloud-region-id", "mycloudregionid")
313 .has("aai-node-type", "cloud-region")
314 .in("org.onap.relationships.inventory.BelongsTo")
315 .has("aai-node-type", "tenant")
316 .has("tenant-name", "Tenant1");
318 GraphTraversal<Vertex, Vertex> expectedParent = __.<Vertex>start()
319 .has("cloud-owner", "mycloudowner").has("cloud-region-id", "mycloudregionid")
320 .has("aai-node-type", "cloud-region");
323 "gremlin query should be " + expected.toString(),
325 query.getQueryBuilder().getQuery().toString());
327 "parent gremlin query should be equal the query for cloud-region",
328 expectedParent.toString(),
329 query.getQueryBuilder().getParentQuery().getQuery().toString());
331 "result type should be cloud-region",
333 query.getParentResultType());
335 "result type should be tenant",
337 query.getResultType());
339 "container type should be empty",
341 query.getContainerType());
342 assertEquals("dependent",true, query.isDependent());
347 public void getViaDuplicateQueryParam() throws UnsupportedEncodingException, AAIException {
348 URI uri = UriBuilder.fromPath("cloud-infrastructure/cloud-regions/cloud-region/mycloudowner/mycloudregionid/tenants/tenant").build();
349 MultivaluedMap<String, String> map = new MultivaluedHashMap<>();
350 List<String> values = new ArrayList<>();
351 values.add("Tenant1");
352 values.add("Tenant2");
353 map.put("tenant-name", values);
354 QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri, map);
355 GraphTraversal<Vertex, Vertex> expected = __.<Vertex>start()
356 .has("cloud-owner", "mycloudowner").has("cloud-region-id", "mycloudregionid")
357 .has("aai-node-type", "cloud-region")
358 .in("org.onap.relationships.inventory.BelongsTo")
359 .has("aai-node-type", "tenant")
360 .has("tenant-name", P.within(values));
362 GraphTraversal<Vertex, Vertex> expectedParent = __.<Vertex>start()
363 .has("cloud-owner", "mycloudowner").has("cloud-region-id", "mycloudregionid")
364 .has("aai-node-type", "cloud-region");
367 "gremlin query should be " + expected.toString(),
369 query.getQueryBuilder().getQuery().toString());
371 "parent gremlin query should be equal the query for cloud-region",
372 expectedParent.toString(),
373 query.getQueryBuilder().getParentQuery().getQuery().toString());
375 "result type should be cloud-region",
377 query.getParentResultType());
379 "result type should be tenant",
381 query.getResultType());
383 "container type should be empty",
385 query.getContainerType());
386 assertEquals("dependent",true, query.isDependent());
391 * Gets the plural via query param.
393 * @return the plural via query param
394 * @throws UnsupportedEncodingException the unsupported encoding exception
395 * @throws AAIException the AAI exception
398 public void getPluralViaQueryParam() throws UnsupportedEncodingException, AAIException {
399 URI uri = UriBuilder.fromPath("network/vnfcs").build();
400 MultivaluedMap<String, String> map = new MultivaluedHashMap<>();
401 map.putSingle("prov-status", "up");
402 QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri, map);
403 GraphTraversal<Vertex, Vertex> expected = __.<Vertex>start()
404 .has("aai-node-type", "vnfc")
405 .has("prov-status", "up");
407 GraphTraversal<Vertex, Vertex> expectedParent = __.<Vertex>start()
408 .has("aai-node-type", "vnfc");
411 "gremlin query should be " + expected.toString(),
413 query.getQueryBuilder().getQuery().toString());
416 expectedParent.toString(),
417 query.getQueryBuilder().getParentQuery().getQuery().toString());
419 "parent result type should be empty",
421 query.getParentResultType());
423 "result type should be vnfc",
425 query.getResultType());
427 "container type should be empty",
429 query.getContainerType());
430 assertEquals("dependent",true, query.isDependent());
435 * Gets the all query param naming exception.
437 * @return the all query param naming exception
438 * @throws UnsupportedEncodingException the unsupported encoding exception
439 * @throws AAIException the AAI exception
442 public void getAllQueryParamNamingException() throws UnsupportedEncodingException, AAIException {
443 URI uri = UriBuilder.fromPath("network/vces/vce/key1/port-groups/port-group/key2/cvlan-tags").build();
444 MultivaluedMap<String, String> map = new MultivaluedHashMap<>();
445 map.putSingle("cvlan-tag", "333");
446 QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri, map);
448 GraphTraversal<Vertex, Vertex> expected = __.<Vertex>start()
449 .has("vnf-id", "key1").has("aai-node-type", "vce")
450 .in("org.onap.relationships.inventory.BelongsTo")
451 .has("aai-node-type", "port-group")
452 .has("interface-id", "key2").in("org.onap.relationships.inventory.BelongsTo")
453 .has("aai-node-type", "cvlan-tag")
454 .has("cvlan-tag", 333);
455 GraphTraversal<Vertex, Vertex> expectedParent = __.<Vertex>start()
456 .has("vnf-id", "key1").has("aai-node-type", "vce")
457 .in("org.onap.relationships.inventory.BelongsTo")
458 .has("aai-node-type", "port-group")
459 .has("interface-id", "key2");
461 "gremlin query should be " + expected.toString(),
463 query.getQueryBuilder().getQuery().toString());
465 "parent gremlin query should be equal the query for port group",
466 expectedParent.toString(),
467 query.getQueryBuilder().getParentQuery().getQuery().toString());
469 "result type should be port-group",
471 query.getParentResultType());
473 "result type should be cvlan-tag",
475 query.getResultType());
477 "container type should be cvlan-tags",
479 query.getContainerType());
480 assertEquals("dependent",true, query.isDependent());
488 * @throws UnsupportedEncodingException the unsupported encoding exception
489 * @throws AAIException the AAI exception
492 public void abstractType() throws UnsupportedEncodingException, AAIException {
493 URI uri = UriBuilder.fromPath("vnf/key1").build();
495 QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri);
497 GraphTraversal<Vertex, Vertex> expected = __.<Vertex>start()
498 .has("vnf-id", "key1").has(AAIProperties.NODE_TYPE, P.within("vce", "generic-vnf"));
500 GraphTraversal<Vertex, Vertex> expectedParent = expected;
502 "gremlin query should be " + expected.toString(),
504 query.getQueryBuilder().getQuery().toString());
506 "parent gremlin query should be equal the query for port group",
507 expectedParent.toString(),
508 query.getQueryBuilder().getParentQuery().getQuery().toString());
510 "result type should be empty",
512 query.getParentResultType());
514 "result type should be vnf",
516 query.getResultType());
518 assertEquals("dependent",false, query.isDependent());
524 * Non parent abstract type.
526 * @throws UnsupportedEncodingException the unsupported encoding exception
527 * @throws AAIException the AAI exception
530 public void nonParentAbstractType() throws UnsupportedEncodingException, AAIException {
531 URI uri = UriBuilder.fromPath("cloud-infrastructure/pservers/pserver/key2/vnf/key1").build();
532 thrown.expect(AAIException.class);
533 thrown.expectMessage(containsString("not a valid path"));
534 dbEngine.getQueryBuilder().createQueryFromURI(uri);
538 public void parentAbstractTypeWithNesting() throws UnsupportedEncodingException, AAIException {
539 URI uri = UriBuilder.fromPath("vnf/key1/vf-modules/vf-module/key2").build();
541 QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri);
543 GraphTraversal<Vertex, Vertex> expected = __.<Vertex>start()
544 .has("vnf-id", "key1").has(AAIProperties.NODE_TYPE, P.within("vce", "generic-vnf"))
545 .union(__.in("org.onap.relationships.inventory.BelongsTo").has(AAIProperties.NODE_TYPE, "vf-module")).has("vf-module-id", "key2");
547 GraphTraversal<Vertex, Vertex> expectedParent = __.<Vertex>start()
548 .has("vnf-id", "key1").has(AAIProperties.NODE_TYPE, P.within("vce", "generic-vnf"));
550 "gremlin query should be " + expected.toString(),
552 query.getQueryBuilder().getQuery().toString());
554 "parent gremlin query should be equal the query for ",
555 expectedParent.toString(),
556 query.getQueryBuilder().getParentQuery().getQuery().toString());
558 "result type should be vnf",
560 query.getParentResultType());
562 "result type should be vf-module",
564 query.getResultType());
566 assertEquals("dependent",true, query.isDependent());
571 public void getViaBadQueryParam() throws UnsupportedEncodingException, AAIException {
572 URI uri = UriBuilder.fromPath("cloud-infrastructure/cloud-regions/cloud-region/a/b/tenants/tenant").build();
573 MultivaluedMap<String, String> map = new MultivaluedHashMap<>();
574 map.putSingle("tenant-n231ame", "Tenant1");
575 thrown.expect(AAIException.class);
576 thrown.expect(hasProperty("code", is("AAI_3000")));
578 QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri, map);
583 public void getPluralViaBadQueryParam() throws UnsupportedEncodingException, AAIException {
584 URI uri = UriBuilder.fromPath("cloud-infrastructure/cloud-regions/cloud-region/a/b/tenants").build();
585 MultivaluedMap<String, String> map = new MultivaluedHashMap<>();
586 map.putSingle("tenant-n231ame", "Tenant1");
587 thrown.expect(AAIException.class);
588 thrown.expect(hasProperty("code", is("AAI_3000")));
590 QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri, map);
595 public void getPluralViaDuplicateQueryParam() throws UnsupportedEncodingException, AAIException {
596 URI uri = UriBuilder.fromPath("network/vnfcs").build();
597 MultivaluedMap<String, String> map = new MultivaluedHashMap<>();
598 List<String> values = new ArrayList<>();
604 map.put("prov-status", values);
605 QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri, map);
606 GraphTraversal<Vertex, Vertex> expected = __.<Vertex>start()
607 .has("aai-node-type", "vnfc")
608 .has("prov-status", P.within(values));
610 GraphTraversal<Vertex, Vertex> expectedParent = __.<Vertex>start()
611 .has("aai-node-type", "vnfc");
614 "gremlin query should be " + expected.toString(),
616 query.getQueryBuilder().getQuery().toString());
619 expectedParent.toString(),
620 query.getQueryBuilder().getParentQuery().getQuery().toString());
622 "parent result type should be empty",
624 query.getParentResultType());
626 "result type should be vnfc",
628 query.getResultType());
630 "container type should be empty",
632 query.getContainerType());
633 assertEquals("dependent",true, query.isDependent());
638 public void dbAliasedSearch() throws UnsupportedEncodingException, AAIException {
639 URI uri = UriBuilder.fromPath("network/generic-vnfs").build();
640 MultivaluedMap<String, String> map = new MultivaluedHashMap<>();
641 map.putSingle("persona-model-customization-id", "key2");
642 QueryParser query = dbEngineDepthVersion.getQueryBuilder().createQueryFromURI(uri, map);
643 GraphTraversal<Vertex, Vertex> expected = __.<Vertex>start()
644 .has("aai-node-type", "generic-vnf")
645 .has("model-customization-id", "key2");
646 GraphTraversal<Vertex, Vertex> expectedParent = __.<Vertex>start()
647 .has("aai-node-type", "generic-vnf");
650 "gremlin query should be " + expected.toString(),
652 query.getQueryBuilder().getQuery().toString());
655 expectedParent.toString(),
656 query.getQueryBuilder().getParentQuery().getQuery().toString());
659 "result type should be",
661 query.getResultType());
663 "result type should be empty",
665 query.getParentResultType());
666 assertEquals("dependent",true, query.isDependent());
672 public void dataLinkedSearch() throws UnsupportedEncodingException, AAIException {
673 URI uri = UriBuilder.fromPath("network/vpn-bindings").build();
674 MultivaluedMap<String, String> map = new MultivaluedHashMap<>();
675 map.putSingle("global-route-target", "key2");
676 QueryParser query = dbEngineDepthVersion.getQueryBuilder().createQueryFromURI(uri, map);
677 GraphTraversal<Vertex, Vertex> expected = __.<Vertex>start()
678 .has("aai-node-type", "vpn-binding")
679 .where(__.in("org.onap.relationships.inventory.BelongsTo").has(AAIProperties.NODE_TYPE, "route-target").has("global-route-target", "key2"));
680 GraphTraversal<Vertex, Vertex> expectedParent = __.<Vertex>start()
681 .has("aai-node-type", "vpn-binding");
684 "gremlin query should be " + expected.toString(),
686 query.getQueryBuilder().getQuery().toString());
689 expectedParent.toString(),
690 query.getQueryBuilder().getParentQuery().getQuery().toString());
693 "result type should be",
695 query.getResultType());
697 "result type should be empty",
699 query.getParentResultType());
700 assertEquals("dependent",true, query.isDependent());
704 public void pluralCousin() throws UnsupportedEncodingException, AAIException {
705 URI uri = UriBuilder.fromPath("cloud-infrastructure/complexes/complex/key1/related-to/pservers").build();
707 QueryParser query = dbEngineDepthVersion.getQueryBuilder().createQueryFromURI(uri);
708 GraphTraversal<Vertex, Vertex> expected = __.<Vertex>start()
709 .has("physical-location-id", "key1")
710 .has("aai-node-type", "complex")
711 .in("org.onap.relationships.inventory.LocatedIn").has("aai-node-type", "pserver");
712 GraphTraversal<Vertex, Vertex> expectedParent = __.<Vertex>start()
713 .has("physical-location-id", "key1")
714 .has("aai-node-type", "complex");
717 "gremlin query should be " + expected.toString(),
719 query.getQueryBuilder().getQuery().toString());
722 expectedParent.toString(),
723 query.getQueryBuilder().getParentQuery().getQuery().toString());
726 "result type should be",
728 query.getResultType());
730 "result type should be",
732 query.getParentResultType());
733 //this is controversial but we're not allowing writes on this currently
734 assertEquals("dependent",true, query.isDependent());
738 public void specificCousin() throws UnsupportedEncodingException, AAIException {
739 URI uri = UriBuilder.fromPath("cloud-infrastructure/complexes/complex/key1/related-to/pservers/pserver/key2").build();
741 QueryParser query = dbEngineDepthVersion.getQueryBuilder().createQueryFromURI(uri);
742 GraphTraversal<Vertex, Vertex> expected = __.<Vertex>start()
743 .has("physical-location-id", "key1")
744 .has("aai-node-type", "complex")
745 .in("org.onap.relationships.inventory.LocatedIn").has("aai-node-type", "pserver")
746 .has("hostname", "key2");
747 GraphTraversal<Vertex, Vertex> expectedParent = __.<Vertex>start()
748 .has("physical-location-id", "key1")
749 .has("aai-node-type", "complex");
752 "gremlin query should be " + expected.toString(),
754 query.getQueryBuilder().getQuery().toString());
757 expectedParent.toString(),
758 query.getQueryBuilder().getParentQuery().getQuery().toString());
761 "result type should be",
763 query.getResultType());
765 "result type should be",
767 query.getParentResultType());
768 //this is controversial but we're not allowing writes on this currently
769 assertEquals("dependent",true, query.isDependent());
773 public void doubleSpecificCousin() throws UnsupportedEncodingException, AAIException {
774 URI uri = UriBuilder.fromPath("cloud-infrastructure/complexes/complex/key1/related-to/pservers/pserver/key2/related-to/vservers/vserver/key3").build();
776 QueryParser query = dbEngineDepthVersion.getQueryBuilder().createQueryFromURI(uri);
777 GraphTraversal<Vertex, Vertex> expected = __.<Vertex>start()
778 .has("physical-location-id", "key1")
779 .has("aai-node-type", "complex")
780 .in("org.onap.relationships.inventory.LocatedIn").has("aai-node-type", "pserver")
781 .has("hostname", "key2")
782 .in("tosca.relationships.HostedOn").has("aai-node-type", "vserver")
783 .has("vserver-id", "key3");
784 GraphTraversal<Vertex, Vertex> expectedParent = __.<Vertex>start()
785 .has("physical-location-id", "key1")
786 .has("aai-node-type", "complex")
787 .in("org.onap.relationships.inventory.LocatedIn").has("aai-node-type", "pserver")
788 .has("hostname", "key2");
791 "gremlin query should be " + expected.toString(),
793 query.getQueryBuilder().getQuery().toString());
796 expectedParent.toString(),
797 query.getQueryBuilder().getParentQuery().getQuery().toString());
800 "result type should be",
802 query.getResultType());
804 "result type should be",
806 query.getParentResultType());
807 //this is controversial but we're not allowing writes on this currently
808 assertEquals("dependent",true, query.isDependent());
812 public void traversalEndsInRelatedTo() throws UnsupportedEncodingException, AAIException {
813 URI uri = UriBuilder.fromPath("cloud-infrastructure/complexes/complex/key1/related-to").build();
815 thrown.expect(AAIException.class);
816 thrown.expectMessage(containsString(RestTokens.COUSIN.toString()));
817 QueryParser query = dbEngineDepthVersion.getQueryBuilder().createQueryFromURI(uri);
822 public void pluralCousinToPluralCousin() throws UnsupportedEncodingException, AAIException {
823 URI uri = UriBuilder.fromPath("cloud-infrastructure/complexes/related-to/pservers").build();
825 thrown.expect(AAIException.class);
826 thrown.expectMessage(containsString("chain plurals"));
827 QueryParser query = dbEngineDepthVersion.getQueryBuilder().createQueryFromURI(uri);