2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 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=========================================================
21 package org.openecomp.aai.serialization.tinkerpop;
23 import static org.junit.Assert.assertEquals;
25 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
26 import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
27 import org.apache.tinkerpop.gremlin.structure.Direction;
28 import org.apache.tinkerpop.gremlin.structure.Element;
29 import org.apache.tinkerpop.gremlin.structure.Graph;
30 import org.apache.tinkerpop.gremlin.structure.T;
31 import org.apache.tinkerpop.gremlin.structure.Vertex;
32 import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph;
33 import org.junit.BeforeClass;
34 import org.junit.Test;
36 import org.openecomp.aai.serialization.engines.query.GraphTraversalQueryEngine;
38 public class TreeBackedVertexTest {
41 private static Graph graph = TinkerGraph.open();
42 private static Object startKey = null;
43 private static Tree<Element> tree = null;
44 private static Tree<Element> treeDepth1 = null;
45 private static Tree<Element> treeDepth0NodeOnly = null;
47 public static void configure() {
48 GraphTraversalSource g = graph.traversal();
50 startKey = g.addV(T.label, "vserver").as("v1").property("test", "hello")
51 .addV(T.label, "vserver").as("v2")
52 .addV(T.label, "interface").property("name", "interface 1").as("v7").addInE("hasChild", "v2").property("isParent", true)
53 .addV(T.label, "pserver").property("name", "pserver 1").as("v4").addOutE("runsOn", "v1").property("isParent", false)
54 .addV(T.label, "interface").property("name", "interface 2").as("v3").addInE("hasChild", "v1").property("isParent", true)
55 .addV(T.label, "address").property("name", "address 1").addInE("hasChild", "v3").property("isParent", true)
56 .addV(T.label, "address").property("name", "address 2").addInE("hasChild", "v3").property("isParent", true)
57 .addV(T.label, "complex").property("name", "complex 1").addInE("locatedIn", "v4").property("isParent", false)
58 .addV(T.label, "interface").property("name", "interface 3").addInE("hasChild", "v4").property("isParent", true)
59 .addV(T.label, "subnet").property("name", "subnet 1").as("v5").addInE("in", "v3").property("isParent", false)
60 .addV(T.label, "address").property("name", "address 3").as("v6").addInE("hasChild", "v5").property("isParent", true)
63 tree = new GraphTraversalQueryEngine(g).findSubGraph((Vertex)startKey);
64 treeDepth1 = new GraphTraversalQueryEngine(g).findSubGraph((Vertex)startKey, 1, false);
65 treeDepth0NodeOnly = new GraphTraversalQueryEngine(g).findSubGraph((Vertex)startKey, 0, true);
68 public void oneHopViaEdges() {
70 //BulkSet set = (BulkSet)result;
71 TreeBackedVertex v = new TreeBackedVertex((Vertex)tree.getObjectsAtDepth(1).iterator().next(), tree);
74 assertEquals("locate child", v.edges(Direction.OUT).next().inVertex().property("name").orElse(""), "interface 2");
75 assertEquals("locate cousin", v.edges(Direction.IN).next().outVertex().property("name").orElse(""), "pserver 1");
81 public void oneHopViaVertices() {
83 //BulkSet set = (BulkSet)result;
84 TreeBackedVertex v = new TreeBackedVertex((Vertex)tree.getObjectsAtDepth(1).iterator().next(), tree);
87 assertEquals("locate child", "interface 2", v.vertices(Direction.OUT).next().property("name").orElse(""));
88 assertEquals("locate cousin", "pserver 1", v.vertices(Direction.IN).next().property("name").orElse(""));
93 public void twoHopCousinViaVertices() {
95 //BulkSet set = (BulkSet)result;
96 TreeBackedVertex v = new TreeBackedVertex((Vertex)tree.getObjectsAtDepth(1).iterator().next(), tree);
99 assertEquals("locate child", "subnet 1", v.vertices(Direction.OUT).next().vertices(Direction.OUT, "in").next().property("name").orElse(""));
104 public void walkVerticesRestrictedDepth() {
106 //BulkSet set = (BulkSet)result;
107 TreeBackedVertex v = new TreeBackedVertex((Vertex)treeDepth1.getObjectsAtDepth(1).iterator().next(), treeDepth1);
110 assertEquals("nothing returned", false, v.vertices(Direction.OUT).next()
111 .vertices(Direction.OUT, "hasChild").hasNext());
116 public void walkVertices() {
117 TreeBackedVertex v = new TreeBackedVertex((Vertex)tree.getObjectsAtDepth(1).iterator().next(), tree);
118 assertEquals("locate child", "address 2", v.vertices(Direction.OUT).next()
119 .vertices(Direction.OUT, "hasChild").next().property("name").orElse(""));
123 public void walkEdges() {
124 TreeBackedVertex v = new TreeBackedVertex((Vertex)tree.getObjectsAtDepth(1).iterator().next(), tree);
126 assertEquals("locate child", "address 2", v.edges(Direction.OUT).next().inVertex()
127 .edges(Direction.OUT, "hasChild").next().inVertex().property("name").orElse(""));
131 public void noEdgesFoudWithLabelVertices() {
132 TreeBackedVertex v = new TreeBackedVertex((Vertex)tree.getObjectsAtDepth(1).iterator().next(), tree);
134 assertEquals("missing hello label", false , v.vertices(Direction.OUT, "hello").hasNext());
138 public void noEdgesFoudWithLabelEdges() {
139 TreeBackedVertex v = new TreeBackedVertex((Vertex)tree.getObjectsAtDepth(1).iterator().next(), tree);
141 assertEquals("missing hello label", false , v.edges(Direction.OUT, "hello").hasNext());
145 public void depthZeroNodeOnly() {
146 TreeBackedVertex v = new TreeBackedVertex((Vertex)treeDepth0NodeOnly.getObjectsAtDepth(1).iterator().next(), treeDepth0NodeOnly);
147 assertEquals("no edges returned", false, v.edges(Direction.BOTH).hasNext());