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.serialization.queryformats;
22 import com.att.eelf.configuration.EELFLogger;
23 import com.att.eelf.configuration.EELFManager;
24 import com.google.gson.JsonArray;
25 import com.google.gson.JsonObject;
26 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
27 import org.apache.tinkerpop.gremlin.structure.Graph;
28 import org.apache.tinkerpop.gremlin.structure.T;
29 import org.apache.tinkerpop.gremlin.structure.Vertex;
30 import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph;
31 import org.junit.Before;
32 import org.junit.Test;
33 import org.junit.runner.RunWith;
34 import org.onap.aai.config.ConfigConfiguration;
35 import org.onap.aai.config.SpringContextAware;
36 import org.onap.aai.edges.EdgeIngestor;
37 import org.onap.aai.edges.exceptions.AmbiguousRuleChoiceException;
38 import org.onap.aai.edges.exceptions.EdgeRuleNotFoundException;
39 import org.onap.aai.exceptions.AAIException;
40 import org.onap.aai.serialization.db.AAICorePrivateEdgeTestConfigTranslator;
41 import org.onap.aai.serialization.db.EdgeSerializer;
42 import org.onap.aai.setup.SchemaLocationsBean;
43 import org.onap.aai.setup.SchemaVersions;
44 import org.springframework.beans.factory.annotation.Autowired;
45 import org.springframework.test.annotation.DirtiesContext;
46 import org.springframework.test.context.ContextConfiguration;
47 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
49 import java.util.Optional;
51 import static org.hamcrest.CoreMatchers.containsString;
52 import static org.hamcrest.MatcherAssert.assertThat;
53 import static org.hamcrest.core.IsNot.not;
54 import static org.junit.Assert.assertEquals;
55 import static org.junit.Assert.assertNotNull;
57 @RunWith(SpringJUnit4ClassRunner.class)
58 @ContextConfiguration(classes = {
59 ConfigConfiguration.class,
60 AAICorePrivateEdgeTestConfigTranslator.class,
63 SpringContextAware.class
66 public class GraphSONTest {
68 private static final EELFLogger LOGGER = EELFManager.getInstance().getLogger(GraphSONTest.class);
74 protected EdgeSerializer edgeSer;
77 protected EdgeIngestor rules;
79 private JsonObject jsonObj = new JsonObject() ;
80 private JsonObject properties = new JsonObject();
81 private JsonArray name = new JsonArray() ;
82 private JsonObject idVal = new JsonObject() ;
84 private GraphSON graphSON;
89 jsonObj.addProperty("id", 0);
90 jsonObj.addProperty("label", "vertex");
92 idVal.addProperty("id", 1);
93 idVal.addProperty("value", "Sam");
96 properties.add("name",name);
97 jsonObj.add("properties", properties);
99 graph = TinkerGraph.open();
100 v1 = graph.addVertex("name", "Sam");
102 graphSON = new GraphSON();
106 public void classGraphSONTestWithVertex(){
108 GraphSON graphSonObj1 = new GraphSON();
109 JsonObject obj = graphSonObj1.formatObject(v1).get();
111 assertEquals(jsonObj, obj);
115 * Case where there is only one private edge
120 * "org.onap.relationships.inventory.isA": [
124 * "aai-uuid": "oafjdsiofjs",
130 * "label": "model-ver",
135 * "value": "model-ver"
142 * @throws AAIException
145 public void testGraphWithVertexHavingPrivateEdges() throws AAIException, EdgeRuleNotFoundException, AmbiguousRuleChoiceException {
147 Vertex genericVnf = graph.addVertex(
148 T.label, "generic-vnf",
150 "aai-node-type", "generic-vnf",
151 "vnf-id", "vnf-id-1",
152 "vnf-name", "vnf-name-1"
155 Vertex modelVer = graph.addVertex(
156 T.label, "model-ver",
158 "aai-node-type", "model-ver",
159 "model-version-id", "modelVer1",
160 "model-name", "modelName1"
163 GraphTraversalSource source = graph.traversal();
164 edgeSer.addPrivateEdge(source, genericVnf, modelVer, null);
166 Optional<JsonObject> jsonObjectOptional = graphSON.formatObject(genericVnf);
167 JsonObject obj = jsonObjectOptional.get();
168 LOGGER.info(obj.toString());
170 String value = obj.toString();
172 assertThat(value, not(containsString("private")));
173 assertThat(value, not(containsString("inE")));
174 assertThat(value, not(containsString("outE")));
178 * Case where there is one private edge and regular edge
179 * with the same edge label name
184 * "org.onap.relationships.inventory.isA": [
188 * "aai-uuid": "oafjdsiofjs",
195 * "aai-uuid": "oafjdsiofjs",
201 * "label": "model-ver",
206 * "value": "model-ver"
213 * @throws AAIException
216 public void testGraphWithSameLabelWithPrivateEdgeAndRegularEdge() throws AAIException, EdgeRuleNotFoundException, AmbiguousRuleChoiceException {
218 Vertex genericVnf = graph.addVertex(
219 T.label, "generic-vnf",
221 "aai-node-type", "generic-vnf",
222 "vnf-id", "vnf-id-1",
223 "vnf-name", "vnf-name-1"
226 Vertex modelVer = graph.addVertex(
227 T.label, "model-ver",
229 "aai-node-type", "model-ver",
230 "model-version-id", "modelVer1",
231 "model-name", "modelName1"
234 Vertex modelElement = graph.addVertex(
235 T.label, "model-element",
237 "aai-node-type", "model-element"
242 GraphTraversalSource source = graph.traversal();
243 edgeSer.addPrivateEdge(source, genericVnf, modelVer, null);
244 edgeSer.addEdge(source, modelVer, modelElement, null);
246 Optional<JsonObject> jsonObjectOptional = graphSON.formatObject(modelVer);
247 JsonObject obj = jsonObjectOptional.get();
248 LOGGER.info(obj.toString());
250 String value = obj.toString();
251 assertThat(value, not(containsString("\"private\":true")));
255 * Case where there is one private edge and regular edge to same label
256 * And another regular edge to a different label
261 * "org.onap.relationships.inventory.isA": [
265 * "aai-uuid": "oafjdsiofjs",
272 * "aai-uuid": "oafjdsiofjs",
277 * "org.onap.relationships.inventory.BelongsTo": [
281 * "aai-uuid": "oafjdsiofjs",
287 * "label": "model-ver",
292 * "value": "model-ver"
299 * @throws AAIException
302 public void testGraphWithMultipleLabelWithOneLabelWithPrivateEdgeAndRegularEdgeAndAnotherLabelWithRegularEdge() throws AAIException, EdgeRuleNotFoundException, AmbiguousRuleChoiceException {
304 Vertex genericVnf = graph.addVertex(
305 T.label, "generic-vnf",
307 "aai-node-type", "generic-vnf",
308 "vnf-id", "vnf-id-1",
309 "vnf-name", "vnf-name-1"
312 Vertex modelVer = graph.addVertex(
313 T.label, "model-ver",
315 "aai-node-type", "model-ver",
316 "model-version-id", "modelVer1",
317 "model-name", "modelName1"
320 Vertex modelElement = graph.addVertex(
321 T.label, "model-element",
323 "aai-node-type", "model-element"
326 Vertex metadatum = graph.addVertex(
327 T.label, "metadatum",
329 "aai-node-type", "metadatum"
334 GraphTraversalSource source = graph.traversal();
335 edgeSer.addPrivateEdge(source, genericVnf, modelVer, null);
336 edgeSer.addEdge(source, modelVer, modelElement, null);
337 edgeSer.addTreeEdge(source, modelVer, metadatum);
339 Optional<JsonObject> jsonObjectOptional = graphSON.formatObject(modelVer);
340 JsonObject obj = jsonObjectOptional.get();
341 LOGGER.info(obj.toString());
343 String value = obj.toString();
344 assertThat(value, not(containsString("\"private\":true")));
348 public void testGraphCreateRegularOutAndInEdges() throws AAIException {
350 Vertex complex1 = graph.addVertex(
353 "aai-node-type", "complex"
356 Vertex pserver1 = graph.addVertex(
359 "aai-node-type", "pserver",
360 "hostname", "test-pserver1"
363 Vertex pserver2 = graph.addVertex(
366 "aai-node-type", "pserver",
367 "hostname", "test-pserver2"
372 GraphTraversalSource source = graph.traversal();
373 edgeSer.addEdge(source, pserver1, complex1, null);
374 edgeSer.addEdge(source, pserver2, complex1, null);
377 Optional<JsonObject> jsonObjectOptional = graphSON.formatObject(complex1);
378 JsonObject obj = jsonObjectOptional.get();
379 LOGGER.info(obj.toString());
381 assertThat(obj.toString(), not(containsString("\"private\":true")));
382 assertThat(obj.toString(), containsString("inE"));
386 * Case where there is one private edge and regular edge to same label
387 * And another regular edge to a different label
392 * "org.onap.relationships.inventory.isA": [
396 * "aai-uuid": "oafjdsiofjs",
401 * "org.onap.relationships.inventory.BelongsTo": [
405 * "aai-uuid": "oafjdsiofjs",
411 * "label": "model-ver",
416 * "value": "model-ver"
423 * @throws AAIException
426 public void testWhenMultipleEdgeLabelsBothOnlyHavePrivateEdges() throws AAIException, EdgeRuleNotFoundException, AmbiguousRuleChoiceException {
428 Vertex genericVnf = graph.addVertex(
429 T.label, "generic-vnf",
431 "aai-node-type", "generic-vnf",
432 "vnf-id", "vnf-id-1",
433 "vnf-name", "vnf-name-1"
436 Vertex modelVer = graph.addVertex(
437 T.label, "model-ver",
439 "aai-node-type", "model-ver",
440 "model-version-id", "modelVer1",
441 "model-name", "modelName1"
444 Vertex modelPrivate = graph.addVertex(
445 T.label, "model-private",
447 "aai-node-type", "model-private"
452 GraphTraversalSource source = graph.traversal();
453 edgeSer.addPrivateEdge(source, genericVnf, modelVer, null);
454 edgeSer.addPrivateEdge(source, modelVer, modelPrivate, null);
456 Optional<JsonObject> jsonObjectOptional = graphSON.formatObject(modelVer);
457 JsonObject obj = jsonObjectOptional.get();
458 LOGGER.info(obj.toString());
460 String value = obj.toString();
461 assertThat(value, not(containsString("\"private\":true")));
462 assertThat(value, not(containsString("inventory.BelongsTo")));
463 assertThat(value, not(containsString("inE")));
467 * Case where there is one private edge and regular edge to same label
468 * And another regular edge to a different label
473 * "org.onap.relationships.inventory.isA": [
477 * "aai-uuid": "oafjdsiofjs",
482 * "org.onap.relationships.inventory.BelongsTo": [
486 * "aai-uuid": "oafjdsiofjs",
493 * "aai-uuid": "jaosjfaisj",
499 * "label": "model-ver",
504 * "value": "model-ver"
511 * @throws AAIException
514 public void testWhenMultipleEdgeLabelsBothHavePrivateEdgesButOneHasTreeEdgeAndPrivateEdge() throws AAIException, EdgeRuleNotFoundException, AmbiguousRuleChoiceException {
516 Vertex genericVnf = graph.addVertex(
517 T.label, "generic-vnf",
519 "aai-node-type", "generic-vnf",
520 "vnf-id", "vnf-id-1",
521 "vnf-name", "vnf-name-1"
524 Vertex modelVer = graph.addVertex(
525 T.label, "model-ver",
527 "aai-node-type", "model-ver",
528 "model-version-id", "modelVer1",
529 "model-name", "modelName1"
532 Vertex modelPrivate = graph.addVertex(
533 T.label, "model-private",
535 "aai-node-type", "model-private"
538 Vertex metadatum = graph.addVertex(
539 T.label, "metadatum",
541 "aai-node-type", "metadatum"
544 GraphTraversalSource source = graph.traversal();
545 edgeSer.addPrivateEdge(source, genericVnf, modelVer, null);
546 edgeSer.addPrivateEdge(source, modelVer, modelPrivate, null);
547 edgeSer.addTreeEdge(source, modelVer, metadatum);
549 Optional<JsonObject> jsonObjectOptional = graphSON.formatObject(modelVer);
550 JsonObject obj = jsonObjectOptional.get();
551 LOGGER.info(obj.toString());
553 String value = obj.toString();
554 assertThat(value, not(containsString("\"private\":true")));
555 assertThat(value, containsString("inventory.BelongsTo"));
559 public void parallelThresholdCehck(){
561 GraphSON graphSonObj2 = new GraphSON();
562 assertEquals(50, graphSonObj2.parallelThreshold());