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.att.eelf.configuration.EELFLogger;
30 import com.att.eelf.configuration.EELFManager;
31 import com.google.gson.JsonArray;
32 import com.google.gson.JsonObject;
34 import java.util.Optional;
36 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
37 import org.apache.tinkerpop.gremlin.structure.Graph;
38 import org.apache.tinkerpop.gremlin.structure.T;
39 import org.apache.tinkerpop.gremlin.structure.Vertex;
40 import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph;
41 import org.junit.Before;
42 import org.junit.Test;
43 import org.junit.runner.RunWith;
44 import org.onap.aai.config.ConfigConfiguration;
45 import org.onap.aai.config.SpringContextAware;
46 import org.onap.aai.edges.EdgeIngestor;
47 import org.onap.aai.edges.exceptions.AmbiguousRuleChoiceException;
48 import org.onap.aai.edges.exceptions.EdgeRuleNotFoundException;
49 import org.onap.aai.exceptions.AAIException;
50 import org.onap.aai.serialization.db.AAICorePrivateEdgeTestConfigTranslator;
51 import org.onap.aai.serialization.db.EdgeSerializer;
52 import org.onap.aai.setup.SchemaLocationsBean;
53 import org.onap.aai.setup.SchemaVersions;
54 import org.springframework.beans.factory.annotation.Autowired;
55 import org.springframework.test.annotation.DirtiesContext;
56 import org.springframework.test.context.ContextConfiguration;
57 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
59 @RunWith(SpringJUnit4ClassRunner.class)
60 @ContextConfiguration(
61 classes = {ConfigConfiguration.class, AAICorePrivateEdgeTestConfigTranslator.class, EdgeIngestor.class,
62 EdgeSerializer.class, SpringContextAware.class})
64 public class GraphSONTest {
66 private static final EELFLogger LOGGER = EELFManager.getInstance().getLogger(GraphSONTest.class);
72 protected EdgeSerializer edgeSer;
75 protected EdgeIngestor rules;
77 private JsonObject jsonObj = new JsonObject();
78 private JsonObject properties = new JsonObject();
79 private JsonArray name = new JsonArray();
80 private JsonObject idVal = new JsonObject();
82 private GraphSON graphSON;
87 jsonObj.addProperty("id", 0);
88 jsonObj.addProperty("label", "vertex");
90 idVal.addProperty("id", 1);
91 idVal.addProperty("value", "Sam");
94 properties.add("name", name);
95 jsonObj.add("properties", properties);
97 graph = TinkerGraph.open();
98 v1 = graph.addVertex("name", "Sam");
100 graphSON = new GraphSON();
104 public void classGraphSONTestWithVertex() {
106 GraphSON graphSonObj1 = new GraphSON();
107 JsonObject obj = graphSonObj1.formatObject(v1).get();
109 assertEquals(jsonObj, obj);
113 * Case where there is only one private edge
119 * "org.onap.relationships.inventory.isA": [
123 * "aai-uuid": "oafjdsiofjs",
129 * "label": "model-ver",
134 * "value": "model-ver"
141 * @throws AAIException
144 public void testGraphWithVertexHavingPrivateEdges()
145 throws AAIException, EdgeRuleNotFoundException, AmbiguousRuleChoiceException {
147 Vertex genericVnf = graph.addVertex(T.label, "generic-vnf", T.id, "20", "aai-node-type", "generic-vnf",
148 "vnf-id", "vnf-id-1", "vnf-name", "vnf-name-1");
150 Vertex modelVer = graph.addVertex(T.label, "model-ver", T.id, "21", "aai-node-type", "model-ver",
151 "model-version-id", "modelVer1", "model-name", "modelName1");
153 GraphTraversalSource source = graph.traversal();
154 edgeSer.addPrivateEdge(source, genericVnf, modelVer, null);
156 Optional<JsonObject> jsonObjectOptional = graphSON.formatObject(genericVnf);
157 JsonObject obj = jsonObjectOptional.get();
158 LOGGER.info(obj.toString());
160 String value = obj.toString();
162 assertThat(value, not(containsString("private")));
163 assertThat(value, not(containsString("inE")));
164 assertThat(value, not(containsString("outE")));
168 * Case where there is one private edge and regular edge
169 * with the same edge label name
175 * "org.onap.relationships.inventory.isA": [
179 * "aai-uuid": "oafjdsiofjs",
186 * "aai-uuid": "oafjdsiofjs",
192 * "label": "model-ver",
197 * "value": "model-ver"
204 * @throws AAIException
207 public void testGraphWithSameLabelWithPrivateEdgeAndRegularEdge()
208 throws AAIException, EdgeRuleNotFoundException, AmbiguousRuleChoiceException {
210 Vertex genericVnf = graph.addVertex(T.label, "generic-vnf", T.id, "20", "aai-node-type", "generic-vnf",
211 "vnf-id", "vnf-id-1", "vnf-name", "vnf-name-1");
213 Vertex modelVer = graph.addVertex(T.label, "model-ver", T.id, "21", "aai-node-type", "model-ver",
214 "model-version-id", "modelVer1", "model-name", "modelName1");
216 Vertex modelElement = graph.addVertex(T.label, "model-element", T.id, "22", "aai-node-type", "model-element");
218 GraphTraversalSource source = graph.traversal();
219 edgeSer.addPrivateEdge(source, genericVnf, modelVer, null);
220 edgeSer.addEdge(source, modelVer, modelElement, null);
222 Optional<JsonObject> jsonObjectOptional = graphSON.formatObject(modelVer);
223 JsonObject obj = jsonObjectOptional.get();
224 LOGGER.info(obj.toString());
226 String value = obj.toString();
227 assertThat(value, not(containsString("\"private\":true")));
231 * Case where there is one private edge and regular edge to same label
232 * And another regular edge to a different label
238 * "org.onap.relationships.inventory.isA": [
242 * "aai-uuid": "oafjdsiofjs",
249 * "aai-uuid": "oafjdsiofjs",
254 * "org.onap.relationships.inventory.BelongsTo": [
258 * "aai-uuid": "oafjdsiofjs",
264 * "label": "model-ver",
269 * "value": "model-ver"
276 * @throws AAIException
279 public void testGraphWithMultipleLabelWithOneLabelWithPrivateEdgeAndRegularEdgeAndAnotherLabelWithRegularEdge()
280 throws AAIException, EdgeRuleNotFoundException, AmbiguousRuleChoiceException {
282 Vertex genericVnf = graph.addVertex(T.label, "generic-vnf", T.id, "20", "aai-node-type", "generic-vnf",
283 "vnf-id", "vnf-id-1", "vnf-name", "vnf-name-1");
285 Vertex modelVer = graph.addVertex(T.label, "model-ver", T.id, "21", "aai-node-type", "model-ver",
286 "model-version-id", "modelVer1", "model-name", "modelName1");
288 Vertex modelElement = graph.addVertex(T.label, "model-element", T.id, "22", "aai-node-type", "model-element");
290 Vertex metadatum = graph.addVertex(T.label, "metadatum", T.id, "23", "aai-node-type", "metadatum");
292 GraphTraversalSource source = graph.traversal();
293 edgeSer.addPrivateEdge(source, genericVnf, modelVer, null);
294 edgeSer.addEdge(source, modelVer, modelElement, null);
295 edgeSer.addTreeEdge(source, modelVer, metadatum);
297 Optional<JsonObject> jsonObjectOptional = graphSON.formatObject(modelVer);
298 JsonObject obj = jsonObjectOptional.get();
299 LOGGER.info(obj.toString());
301 String value = obj.toString();
302 assertThat(value, not(containsString("\"private\":true")));
306 public void testGraphCreateRegularOutAndInEdges() throws AAIException {
308 Vertex complex1 = graph.addVertex(T.label, "complex", T.id, "20", "aai-node-type", "complex");
310 Vertex pserver1 = graph.addVertex(T.label, "pserver", T.id, "22", "aai-node-type", "pserver", "hostname",
313 Vertex pserver2 = graph.addVertex(T.label, "pserver", T.id, "23", "aai-node-type", "pserver", "hostname",
316 GraphTraversalSource source = graph.traversal();
317 edgeSer.addEdge(source, pserver1, complex1, null);
318 edgeSer.addEdge(source, pserver2, complex1, null);
320 Optional<JsonObject> jsonObjectOptional = graphSON.formatObject(complex1);
321 JsonObject obj = jsonObjectOptional.get();
322 LOGGER.info(obj.toString());
324 assertThat(obj.toString(), not(containsString("\"private\":true")));
325 assertThat(obj.toString(), containsString("inE"));
329 * Case where there is one private edge and regular edge to same label
330 * And another regular edge to a different label
336 * "org.onap.relationships.inventory.isA": [
340 * "aai-uuid": "oafjdsiofjs",
345 * "org.onap.relationships.inventory.BelongsTo": [
349 * "aai-uuid": "oafjdsiofjs",
355 * "label": "model-ver",
360 * "value": "model-ver"
367 * @throws AAIException
370 public void testWhenMultipleEdgeLabelsBothOnlyHavePrivateEdges()
371 throws AAIException, EdgeRuleNotFoundException, AmbiguousRuleChoiceException {
373 Vertex genericVnf = graph.addVertex(T.label, "generic-vnf", T.id, "20", "aai-node-type", "generic-vnf",
374 "vnf-id", "vnf-id-1", "vnf-name", "vnf-name-1");
376 Vertex modelVer = graph.addVertex(T.label, "model-ver", T.id, "21", "aai-node-type", "model-ver",
377 "model-version-id", "modelVer1", "model-name", "modelName1");
379 Vertex modelPrivate = graph.addVertex(T.label, "model-private", T.id, "22", "aai-node-type", "model-private");
381 GraphTraversalSource source = graph.traversal();
382 edgeSer.addPrivateEdge(source, genericVnf, modelVer, null);
383 edgeSer.addPrivateEdge(source, modelVer, modelPrivate, null);
385 Optional<JsonObject> jsonObjectOptional = graphSON.formatObject(modelVer);
386 JsonObject obj = jsonObjectOptional.get();
387 LOGGER.info(obj.toString());
389 String value = obj.toString();
390 assertThat(value, not(containsString("\"private\":true")));
391 assertThat(value, not(containsString("inventory.BelongsTo")));
392 assertThat(value, not(containsString("inE")));
396 * Case where there is one private edge and regular edge to same label
397 * And another regular edge to a different label
403 * "org.onap.relationships.inventory.isA": [
407 * "aai-uuid": "oafjdsiofjs",
412 * "org.onap.relationships.inventory.BelongsTo": [
416 * "aai-uuid": "oafjdsiofjs",
423 * "aai-uuid": "jaosjfaisj",
429 * "label": "model-ver",
434 * "value": "model-ver"
441 * @throws AAIException
444 public void testWhenMultipleEdgeLabelsBothHavePrivateEdgesButOneHasTreeEdgeAndPrivateEdge()
445 throws AAIException, EdgeRuleNotFoundException, AmbiguousRuleChoiceException {
447 Vertex genericVnf = graph.addVertex(T.label, "generic-vnf", T.id, "20", "aai-node-type", "generic-vnf",
448 "vnf-id", "vnf-id-1", "vnf-name", "vnf-name-1");
450 Vertex modelVer = graph.addVertex(T.label, "model-ver", T.id, "21", "aai-node-type", "model-ver",
451 "model-version-id", "modelVer1", "model-name", "modelName1");
453 Vertex modelPrivate = graph.addVertex(T.label, "model-private", T.id, "22", "aai-node-type", "model-private");
455 Vertex metadatum = graph.addVertex(T.label, "metadatum", T.id, "23", "aai-node-type", "metadatum");
457 GraphTraversalSource source = graph.traversal();
458 edgeSer.addPrivateEdge(source, genericVnf, modelVer, null);
459 edgeSer.addPrivateEdge(source, modelVer, modelPrivate, null);
460 edgeSer.addTreeEdge(source, modelVer, metadatum);
462 Optional<JsonObject> jsonObjectOptional = graphSON.formatObject(modelVer);
463 JsonObject obj = jsonObjectOptional.get();
464 LOGGER.info(obj.toString());
466 String value = obj.toString();
467 assertThat(value, not(containsString("\"private\":true")));
468 assertThat(value, containsString("inventory.BelongsTo"));
472 public void parallelThresholdCehck() {
474 GraphSON graphSonObj2 = new GraphSON();
475 assertEquals(50, graphSonObj2.parallelThreshold());