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=========================================================
21 package org.onap.aai.serialization.queryformats;
23 import static org.hamcrest.CoreMatchers.containsString;
24 import static org.hamcrest.MatcherAssert.assertThat;
25 import static org.hamcrest.core.IsNot.not;
26 import static org.junit.Assert.assertEquals;
27 import static org.junit.Assert.assertNotNull;
29 import com.google.gson.JsonArray;
30 import com.google.gson.JsonObject;
32 import java.util.Optional;
34 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
35 import org.apache.tinkerpop.gremlin.structure.Graph;
36 import org.apache.tinkerpop.gremlin.structure.T;
37 import org.apache.tinkerpop.gremlin.structure.Vertex;
38 import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph;
39 import org.junit.Before;
40 import org.junit.Test;
41 import org.junit.runner.RunWith;
42 import org.onap.aai.config.ConfigConfiguration;
43 import org.onap.aai.config.SpringContextAware;
44 import org.onap.aai.edges.EdgeIngestor;
45 import org.onap.aai.edges.exceptions.AmbiguousRuleChoiceException;
46 import org.onap.aai.edges.exceptions.EdgeRuleNotFoundException;
47 import org.onap.aai.exceptions.AAIException;
48 import org.onap.aai.serialization.db.AAICorePrivateEdgeTestConfigTranslator;
49 import org.onap.aai.serialization.db.EdgeSerializer;
50 import org.slf4j.Logger;
51 import org.slf4j.LoggerFactory;
52 import org.springframework.beans.factory.annotation.Autowired;
53 import org.springframework.test.annotation.DirtiesContext;
54 import org.springframework.test.context.ContextConfiguration;
55 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
57 @RunWith(SpringJUnit4ClassRunner.class)
58 @ContextConfiguration(
59 classes = {ConfigConfiguration.class, AAICorePrivateEdgeTestConfigTranslator.class, EdgeIngestor.class,
60 EdgeSerializer.class, SpringContextAware.class})
62 public class GraphSONTest {
64 private static final Logger LOGGER = LoggerFactory.getLogger(GraphSONTest.class);
70 protected EdgeSerializer edgeSer;
73 protected EdgeIngestor rules;
75 private JsonObject jsonObj = new JsonObject();
76 private JsonObject properties = new JsonObject();
77 private JsonArray name = new JsonArray();
78 private JsonObject idVal = new JsonObject();
80 private GraphSON graphSON;
85 jsonObj.addProperty("id", 0);
86 jsonObj.addProperty("label", "vertex");
88 idVal.addProperty("id", 1);
89 idVal.addProperty("value", "Sam");
92 properties.add("name", name);
93 jsonObj.add("properties", properties);
95 graph = TinkerGraph.open();
96 v1 = graph.addVertex("name", "Sam");
98 graphSON = new GraphSON();
102 public void classGraphSONTestWithVertex() {
104 GraphSON graphSonObj1 = new GraphSON();
105 JsonObject obj = graphSonObj1.formatObject(v1).get();
107 assertEquals(jsonObj, obj);
111 * Case where there is only one private edge
117 * "org.onap.relationships.inventory.isA": [
121 * "aai-uuid": "oafjdsiofjs",
127 * "label": "model-ver",
132 * "value": "model-ver"
139 * @throws AAIException
142 public void testGraphWithVertexHavingPrivateEdges()
143 throws AAIException, EdgeRuleNotFoundException, AmbiguousRuleChoiceException {
145 Vertex genericVnf = graph.addVertex(T.label, "generic-vnf", T.id, "20", "aai-node-type", "generic-vnf",
146 "vnf-id", "vnf-id-1", "vnf-name", "vnf-name-1");
148 Vertex modelVer = graph.addVertex(T.label, "model-ver", T.id, "21", "aai-node-type", "model-ver",
149 "model-version-id", "modelVer1", "model-name", "modelName1");
151 GraphTraversalSource source = graph.traversal();
152 edgeSer.addPrivateEdge(source, genericVnf, modelVer, null);
154 Optional<JsonObject> jsonObjectOptional = graphSON.formatObject(genericVnf);
155 JsonObject obj = jsonObjectOptional.get();
156 LOGGER.info(obj.toString());
158 String value = obj.toString();
160 assertThat(value, not(containsString("private")));
161 assertThat(value, not(containsString("inE")));
162 assertThat(value, not(containsString("outE")));
166 * Case where there is one private edge and regular edge
167 * with the same edge label name
173 * "org.onap.relationships.inventory.isA": [
177 * "aai-uuid": "oafjdsiofjs",
184 * "aai-uuid": "oafjdsiofjs",
190 * "label": "model-ver",
195 * "value": "model-ver"
202 * @throws AAIException
205 public void testGraphWithSameLabelWithPrivateEdgeAndRegularEdge()
206 throws AAIException, EdgeRuleNotFoundException, AmbiguousRuleChoiceException {
208 Vertex genericVnf = graph.addVertex(T.label, "generic-vnf", T.id, "20", "aai-node-type", "generic-vnf",
209 "vnf-id", "vnf-id-1", "vnf-name", "vnf-name-1");
211 Vertex modelVer = graph.addVertex(T.label, "model-ver", T.id, "21", "aai-node-type", "model-ver",
212 "model-version-id", "modelVer1", "model-name", "modelName1");
214 Vertex modelElement = graph.addVertex(T.label, "model-element", T.id, "22", "aai-node-type", "model-element");
216 GraphTraversalSource source = graph.traversal();
217 edgeSer.addPrivateEdge(source, genericVnf, modelVer, null);
218 edgeSer.addEdge(source, modelVer, modelElement, null);
220 Optional<JsonObject> jsonObjectOptional = graphSON.formatObject(modelVer);
221 JsonObject obj = jsonObjectOptional.get();
222 LOGGER.info(obj.toString());
224 String value = obj.toString();
225 assertThat(value, not(containsString("\"private\":true")));
229 * Case where there is one private edge and regular edge to same label
230 * And another regular edge to a different label
236 * "org.onap.relationships.inventory.isA": [
240 * "aai-uuid": "oafjdsiofjs",
247 * "aai-uuid": "oafjdsiofjs",
252 * "org.onap.relationships.inventory.BelongsTo": [
256 * "aai-uuid": "oafjdsiofjs",
262 * "label": "model-ver",
267 * "value": "model-ver"
274 * @throws AAIException
277 public void testGraphWithMultipleLabelWithOneLabelWithPrivateEdgeAndRegularEdgeAndAnotherLabelWithRegularEdge()
278 throws AAIException, EdgeRuleNotFoundException, AmbiguousRuleChoiceException {
280 Vertex genericVnf = graph.addVertex(T.label, "generic-vnf", T.id, "20", "aai-node-type", "generic-vnf",
281 "vnf-id", "vnf-id-1", "vnf-name", "vnf-name-1");
283 Vertex modelVer = graph.addVertex(T.label, "model-ver", T.id, "21", "aai-node-type", "model-ver",
284 "model-version-id", "modelVer1", "model-name", "modelName1");
286 Vertex modelElement = graph.addVertex(T.label, "model-element", T.id, "22", "aai-node-type", "model-element");
288 Vertex metadatum = graph.addVertex(T.label, "metadatum", T.id, "23", "aai-node-type", "metadatum");
290 GraphTraversalSource source = graph.traversal();
291 edgeSer.addPrivateEdge(source, genericVnf, modelVer, null);
292 edgeSer.addEdge(source, modelVer, modelElement, null);
293 edgeSer.addTreeEdge(source, modelVer, metadatum);
295 Optional<JsonObject> jsonObjectOptional = graphSON.formatObject(modelVer);
296 JsonObject obj = jsonObjectOptional.get();
297 LOGGER.info(obj.toString());
299 String value = obj.toString();
300 assertThat(value, not(containsString("\"private\":true")));
304 public void testGraphCreateRegularOutAndInEdges() throws AAIException {
306 Vertex complex1 = graph.addVertex(T.label, "complex", T.id, "20", "aai-node-type", "complex");
308 Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "22", "aai-node-type", "pserver", "hostname",
311 Vertex pserver2 = graph.addVertex(T.label, "pserver", T.id, "23", "aai-node-type", "pserver", "hostname",
314 GraphTraversalSource source = graph.traversal();
315 edgeSer.addEdge(source, pserver1, complex1, null);
316 edgeSer.addEdge(source, pserver2, complex1, null);
318 Optional<JsonObject> jsonObjectOptional = graphSON.formatObject(complex1);
319 JsonObject obj = jsonObjectOptional.get();
320 LOGGER.info(obj.toString());
322 assertThat(obj.toString(), not(containsString("\"private\":true")));
323 assertThat(obj.toString(), containsString("inE"));
327 * Case where there is one private edge and regular edge to same label
328 * And another regular edge to a different label
334 * "org.onap.relationships.inventory.isA": [
338 * "aai-uuid": "oafjdsiofjs",
343 * "org.onap.relationships.inventory.BelongsTo": [
347 * "aai-uuid": "oafjdsiofjs",
353 * "label": "model-ver",
358 * "value": "model-ver"
365 * @throws AAIException
368 public void testWhenMultipleEdgeLabelsBothOnlyHavePrivateEdges()
369 throws AAIException, EdgeRuleNotFoundException, AmbiguousRuleChoiceException {
371 Vertex genericVnf = graph.addVertex(T.label, "generic-vnf", T.id, "20", "aai-node-type", "generic-vnf",
372 "vnf-id", "vnf-id-1", "vnf-name", "vnf-name-1");
374 Vertex modelVer = graph.addVertex(T.label, "model-ver", T.id, "21", "aai-node-type", "model-ver",
375 "model-version-id", "modelVer1", "model-name", "modelName1");
377 Vertex modelPrivate = graph.addVertex(T.label, "model-private", T.id, "22", "aai-node-type", "model-private");
379 GraphTraversalSource source = graph.traversal();
380 edgeSer.addPrivateEdge(source, genericVnf, modelVer, null);
381 edgeSer.addPrivateEdge(source, modelVer, modelPrivate, null);
383 Optional<JsonObject> jsonObjectOptional = graphSON.formatObject(modelVer);
384 JsonObject obj = jsonObjectOptional.get();
385 LOGGER.info(obj.toString());
387 String value = obj.toString();
388 assertThat(value, not(containsString("\"private\":true")));
389 assertThat(value, not(containsString("inventory.BelongsTo")));
390 assertThat(value, not(containsString("inE")));
394 * Case where there is one private edge and regular edge to same label
395 * And another regular edge to a different label
401 * "org.onap.relationships.inventory.isA": [
405 * "aai-uuid": "oafjdsiofjs",
410 * "org.onap.relationships.inventory.BelongsTo": [
414 * "aai-uuid": "oafjdsiofjs",
421 * "aai-uuid": "jaosjfaisj",
427 * "label": "model-ver",
432 * "value": "model-ver"
439 * @throws AAIException
442 public void testWhenMultipleEdgeLabelsBothHavePrivateEdgesButOneHasTreeEdgeAndPrivateEdge()
443 throws AAIException, EdgeRuleNotFoundException, AmbiguousRuleChoiceException {
445 Vertex genericVnf = graph.addVertex(T.label, "generic-vnf", T.id, "20", "aai-node-type", "generic-vnf",
446 "vnf-id", "vnf-id-1", "vnf-name", "vnf-name-1");
448 Vertex modelVer = graph.addVertex(T.label, "model-ver", T.id, "21", "aai-node-type", "model-ver",
449 "model-version-id", "modelVer1", "model-name", "modelName1");
451 Vertex modelPrivate = graph.addVertex(T.label, "model-private", T.id, "22", "aai-node-type", "model-private");
453 Vertex metadatum = graph.addVertex(T.label, "metadatum", T.id, "23", "aai-node-type", "metadatum");
455 GraphTraversalSource source = graph.traversal();
456 edgeSer.addPrivateEdge(source, genericVnf, modelVer, null);
457 edgeSer.addPrivateEdge(source, modelVer, modelPrivate, null);
458 edgeSer.addTreeEdge(source, modelVer, metadatum);
460 Optional<JsonObject> jsonObjectOptional = graphSON.formatObject(modelVer);
461 JsonObject obj = jsonObjectOptional.get();
462 LOGGER.info(obj.toString());
464 String value = obj.toString();
465 assertThat(value, not(containsString("\"private\":true")));
466 assertThat(value, containsString("inventory.BelongsTo"));
470 public void parallelThresholdCehck() {
472 GraphSON graphSonObj2 = new GraphSON();
473 assertEquals(50, graphSonObj2.parallelThreshold());