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.db;
22 import static org.junit.Assert.*;
23 import static org.mockito.Mockito.spy;
24 import static org.mockito.Mockito.when;
26 import java.io.UnsupportedEncodingException;
27 import java.lang.reflect.Field;
29 import java.net.URISyntaxException;
32 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
33 import org.apache.tinkerpop.gremlin.structure.Edge;
34 import org.apache.tinkerpop.gremlin.structure.Graph;
35 import org.apache.tinkerpop.gremlin.structure.T;
36 import org.apache.tinkerpop.gremlin.structure.Vertex;
37 import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph;
39 import org.junit.rules.ExpectedException;
40 import org.onap.aai.AAISetup;
41 import org.onap.aai.db.props.AAIProperties;
42 import org.onap.aai.dbmap.DBConnectionType;
43 import org.onap.aai.exceptions.AAIException;
44 import org.onap.aai.introspection.Introspector;
45 import org.onap.aai.introspection.Loader;
46 import org.onap.aai.introspection.LoaderFactory;
47 import org.onap.aai.introspection.ModelType;
48 import org.onap.aai.introspection.Version;
49 import org.onap.aai.parsers.query.QueryParser;
50 import org.onap.aai.serialization.engines.QueryStyle;
51 import org.onap.aai.serialization.engines.TitanDBEngine;
52 import org.onap.aai.serialization.engines.TransactionalGraphEngine;
54 import com.thinkaurelius.titan.core.TitanFactory;
56 public class DbSerializerTest extends AAISetup {
58 //to use, set thrown.expect to whatever your test needs
59 //this line establishes default of expecting no exception to be thrown
61 public ExpectedException thrown = ExpectedException.none();
63 protected static Graph graph;
64 protected final EdgeRules rules = EdgeRules.getInstance();
66 private final Version version = Version.getLatest();
67 private final ModelType introspectorFactoryType = ModelType.MOXY;
68 private final QueryStyle queryStyle = QueryStyle.TRAVERSAL;
69 private final DBConnectionType type = DBConnectionType.REALTIME;
70 private Loader loader;
71 private TransactionalGraphEngine dbEngine;
72 private TransactionalGraphEngine engine; //for tests that aren't mocking the engine
73 private DBSerializer dbser;
74 TransactionalGraphEngine spy;
75 TransactionalGraphEngine.Admin adminSpy;
78 public static void init() throws Exception {
79 graph = TitanFactory.build().set("storage.backend", "inmemory").open();
85 public void setup() throws Exception {
86 loader = LoaderFactory.createLoaderForVersion(introspectorFactoryType, version);
87 dbEngine = new TitanDBEngine(queryStyle, type, loader);
89 adminSpy = spy(dbEngine.asAdmin());
92 engine = new TitanDBEngine(queryStyle, type, loader);
93 dbser = new DBSerializer(version, engine, introspectorFactoryType, "AAI-TEST");
96 public static void createGraph() throws AAIException {
98 * This setus up the test graph, For future junits , add more vertices
102 Vertex l3interipv4addresslist_1 = graph.traversal().addV("aai-node-type", "l3-interface-ipv4-address-list",
103 "l3-interface-ipv4-address", "l3-interface-ipv4-address-1").next();
104 Vertex subnet_2 = graph.traversal().addV("aai-node-type", "subnet", "subnet-id", "subnet-id-2").next();
105 Vertex l3interipv6addresslist_3 = graph.traversal().addV("aai-node-type", "l3-interface-ipv6-address-list",
106 "l3-interface-ipv6-address", "l3-interface-ipv6-address-3").next();
107 Vertex subnet_4 = graph.traversal().addV("aai-node-type", "subnet", "subnet-id", "subnet-id-4").next();
108 Vertex subnet_5 = graph.traversal().addV("aai-node-type", "subnet", "subnet-id", "subnet-id-5").next();
109 Vertex l3network_6 = graph.traversal()
110 .addV("aai-node-type", "l3-network", "network-id", "network-id-6", "network-name", "network-name-6")
113 GraphTraversalSource g = graph.traversal();
114 EdgeRules.getInstance().addEdge(g, l3interipv4addresslist_1, subnet_2);
115 EdgeRules.getInstance().addEdge(g, l3interipv6addresslist_3, subnet_4);
116 EdgeRules.getInstance().addTreeEdge(g, subnet_5, l3network_6);
120 public void testFindDeletableDoesNotReturnDuplicates() throws AAIException {
122 EdgeRules testRules = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
124 Vertex genericVnf1 = graph.addVertex("aai-node-type", "generic-vnf", "vnf-id", "vnf1", "vnf-name", "vnfName1");
126 Vertex lInterface1 = graph.addVertex("aai-node-type", "l-interface", "interface-name", "lInterface1");
127 Vertex lInterface2 = graph.addVertex("aai-node-type", "l-interface", "interface-name", "lInterface2");
129 Vertex logicalLink1 = graph.addVertex("aai-node-type", "logical-link", "link-name", "logicalLink1");
130 Vertex logicalLink2 = graph.addVertex("aai-node-type", "logical-link", "link-name", "logicalLink2");
132 GraphTraversalSource g = graph.traversal();
134 testRules.addTreeEdge(g, genericVnf1, lInterface1);
135 testRules.addTreeEdge(g, genericVnf1, lInterface2);
136 testRules.addEdge(g, lInterface1, logicalLink1);
137 testRules.addEdge(g, lInterface1, logicalLink2);
138 // This line will cause the logical link2 to be found twice under linterface 1
139 // and also under the linterface 2 and since in the past deletable returned
140 // duplicates this test checks that it shouldn't return duplicates
141 testRules.addEdge(g, lInterface2, logicalLink2);
143 when(spy.asAdmin()).thenReturn(adminSpy);
144 when(adminSpy.getTraversalSource()).thenReturn(g);
145 when(adminSpy.getReadOnlyTraversalSource()).thenReturn(g);
147 List<Vertex> deletableVertexes = spy.getQueryEngine().findDeletable(genericVnf1);
148 Set<Vertex> vertexSet = new HashSet<>();
150 for (Vertex deletableVertex : deletableVertexes) {
151 if(!vertexSet.contains(deletableVertex)){
152 vertexSet.add(deletableVertex);
154 fail("Find deletable is returning a list of duplicate vertexes");
160 public void tearDown() throws Exception {
165 public static void destroy() throws Exception {
170 public void subnetDelWithInEdgesIpv4Test() throws AAIException {
171 String expected_message = "Object is being reference by additional objects preventing it from being deleted. Please clean up references from the following types [l3-interface-ipv4-address-list]";
174 * This subnet has in-edges with l3-ipv4 and NOT ok to delete
176 Vertex subnet = graph.traversal().V().has("aai-node-type", "subnet").has("subnet-id", "subnet-id-2").next();
178 String exceptionMessage = testDelete(subnet);
179 assertEquals(expected_message, exceptionMessage);
184 public void subnetDelWithInEdgesIpv6Test() throws AAIException {
185 String expected_message = "Object is being reference by additional objects preventing it from being deleted. Please clean up references from the following types [l3-interface-ipv6-address-list]";
188 * This subnet has in-edges with l3-ipv6 and NOT ok to delete
190 Vertex subnet = graph.traversal().V().has("aai-node-type", "subnet").has("subnet-id", "subnet-id-4").next();
191 String exceptionMessage = testDelete(subnet);
192 assertEquals(expected_message, exceptionMessage);
197 public void subnetDelWithInEdgesL3network() throws AAIException {
198 String expected_message = "";
201 * This subnet has in-edges with l3-network and ok to delete
203 Vertex subnet = graph.traversal().V().has("aai-node-type", "subnet").has("subnet-id", "subnet-id-5").next();
205 String exceptionMessage = testDelete(subnet);
206 assertEquals(expected_message, exceptionMessage);
210 public String testDelete(Vertex v) throws AAIException {
212 GraphTraversalSource traversal = graph.traversal();
213 when(spy.asAdmin()).thenReturn(adminSpy);
214 when(adminSpy.getTraversalSource()).thenReturn(traversal);
215 when(adminSpy.getReadOnlyTraversalSource()).thenReturn(traversal);
217 String exceptionMessage = "";
218 DBSerializer serializer = new DBSerializer(version, spy, introspectorFactoryType, "AAI_TEST");
220 serializer.delete(v, "resourceVersion", false);
221 } catch (AAIException exception) {
222 exceptionMessage = exception.getMessage();
224 return exceptionMessage;
229 public void createNewVertexTest() throws AAIException {
230 engine.startTransaction();
232 Introspector testObj = loader.introspectorFromName("generic-vnf");
234 Vertex testVertex = dbser.createNewVertex(testObj);
235 Vertex fromGraph = engine.tx().traversal().V().has("aai-node-type","generic-vnf").toList().get(0);
236 assertEquals(testVertex.id(), fromGraph.id());
237 assertEquals("AAI-TEST", fromGraph.property(AAIProperties.SOURCE_OF_TRUTH.toString()).value());
242 public void touchStandardVertexPropertiesTest() throws AAIException, InterruptedException {
243 engine.startTransaction();
244 DBSerializer dbser2 = new DBSerializer(Version.getLatest(), engine, introspectorFactoryType, "AAI-TEST-2");
246 Vertex vert = graph.addVertex("aai-node-type", "generic-vnf");
248 dbser.touchStandardVertexProperties(vert, true);
249 String resverStart = (String)vert.property(AAIProperties.RESOURCE_VERSION).value();
250 String lastModTimeStart = (String)vert.property(AAIProperties.LAST_MOD_TS).value();
252 Thread.sleep(10); //bc the resource version is set based on current time in milliseconds,
253 //if this test runs through too fast the value may not change
254 //causing the test to fail. sleeping ensures a different value
256 dbser2.touchStandardVertexProperties(vert, false);
257 assertFalse(resverStart.equals(vert.property(AAIProperties.RESOURCE_VERSION).value()));
258 assertFalse(lastModTimeStart.equals(vert.property(AAIProperties.LAST_MOD_TS).value()));
259 assertEquals("AAI-TEST-2", vert.property(AAIProperties.LAST_MOD_SOURCE_OF_TRUTH).value());
264 public void touchStandardVertexPropertiesAAIUUIDTest() throws AAIException, InterruptedException {
265 engine.startTransaction();
267 Graph graph = TinkerGraph.open();
268 Vertex v = graph.addVertex("aai-node-type", "generic-vnf");
270 dbser.touchStandardVertexProperties(v, true);
272 assertTrue(v.property(AAIProperties.AAI_UUID).isPresent());
274 UUID.fromString((String)v.property(AAIProperties.AAI_UUID).value());
275 } catch (IllegalArgumentException e) {
276 fail("Vertex uuid is not valid uuid");
281 public void verifyResourceVersion_SunnyDayTest() throws AAIException {
282 engine.startTransaction();
284 assertTrue(dbser.verifyResourceVersion("delete", "vnfc", "abc", "abc", "vnfcs/vnfc/vnfcId"));
289 public void verifyResourceVersion_CreateWithRVTest() throws AAIException {
290 engine.startTransaction();
292 thrown.expect(AAIException.class);
293 thrown.expectMessage("resource-version passed for create of generic-vnfs/generic-vnf/myid");
294 dbser.verifyResourceVersion("create", "generic-vnf", null, "old-res-ver", "generic-vnfs/generic-vnf/myid");
299 public void verifyResourceVersion_MissingRVTest() throws AAIException {
300 engine.startTransaction();
302 thrown.expect(AAIException.class);
303 thrown.expectMessage("resource-version not passed for update of generic-vnfs/generic-vnf/myid");
304 dbser.verifyResourceVersion("update", "generic-vnf", "current-res-ver", null, "generic-vnfs/generic-vnf/myid");
309 public void verifyResourceVersion_MismatchRVTest() throws AAIException {
310 engine.startTransaction();
312 thrown.expect(AAIException.class);
313 thrown.expectMessage("resource-version MISMATCH for update of generic-vnfs/generic-vnf/myid");
314 dbser.verifyResourceVersion("update", "generic-vnf", "current-res-ver", "old-res-ver", "generic-vnfs/generic-vnf/myid");
319 public void trimClassNameTest() throws AAIException {
320 assertEquals("GenericVnf", dbser.trimClassName("GenericVnf"));
321 assertEquals("GenericVnf", dbser.trimClassName("org.onap.aai.GenericVnf"));
325 public void getURIForVertexTest() throws AAIException, URISyntaxException, UnsupportedEncodingException {
326 engine.startTransaction();
328 Vertex cr = engine.tx().addVertex("aai-node-type", "cloud-region", "cloud-owner", "me", "cloud-region-id", "123");
329 Vertex ten = engine.tx().addVertex("aai-node-type", "tenant", "tenant-id", "453");
330 EdgeRules rules = EdgeRules.getInstance();
331 rules.addTreeEdge(engine.tx().traversal(), cr, ten);
333 URI compare = new URI("/cloud-infrastructure/cloud-regions/cloud-region/me/123/tenants/tenant/453");
334 assertEquals(compare, dbser.getURIForVertex(ten));
336 cr.property("aai-node-type").remove();
337 URI compareFailure = new URI("/unknown-uri");
338 assertEquals(compareFailure, dbser.getURIForVertex(ten));
343 public void getVertexPropertiesTest() throws AAIException, UnsupportedEncodingException {
344 engine.startTransaction();
346 Vertex cr = engine.tx().addVertex("aai-node-type", "cloud-region", "cloud-owner", "me", "cloud-region-id", "123");
348 Introspector crIntro = dbser.getVertexProperties(cr);
349 assertEquals("cloud-region", crIntro.getDbName());
350 assertEquals("me", crIntro.getValue("cloud-owner"));
351 assertEquals("123", crIntro.getValue("cloud-region-id"));
356 public void setCachedURIsTest() throws AAIException, UnsupportedEncodingException, URISyntaxException {
357 engine.startTransaction();
359 Vertex cr = engine.tx().addVertex("aai-node-type", "cloud-region", "cloud-owner", "me", "cloud-region-id", "123");
360 Vertex ten = engine.tx().addVertex("aai-node-type", "tenant", "tenant-id", "453");
361 Vertex vs = engine.tx().addVertex("aai-node-type", "vserver", "vserver-id", "vs1",
362 AAIProperties.AAI_URI.toString(),
363 "/cloud-infrastructure/cloud-regions/cloud-region/me/123/tenants/tenant/453/vservers/vserver/vs1");
364 EdgeRules rules = EdgeRules.getInstance();
365 rules.addTreeEdge(engine.tx().traversal(), cr, ten);
366 rules.addTreeEdge(engine.tx().traversal(), ten, vs);
368 List<Vertex> vertices = Arrays.asList(cr, ten, vs);
369 Introspector crIn = dbser.getVertexProperties(cr);
370 Introspector tenIn = dbser.getVertexProperties(ten);
371 Introspector vsIn = dbser.getVertexProperties(vs);
372 List<Introspector> intros = Arrays.asList(crIn, tenIn, vsIn);
374 dbser.setCachedURIs(vertices, intros);
376 assertEquals("/cloud-infrastructure/cloud-regions/cloud-region/me/123",
377 (String)cr.property(AAIProperties.AAI_URI.toString()).value());
378 assertEquals("/cloud-infrastructure/cloud-regions/cloud-region/me/123/tenants/tenant/453",
379 (String)ten.property(AAIProperties.AAI_URI.toString()).value());
380 assertEquals("/cloud-infrastructure/cloud-regions/cloud-region/me/123/tenants/tenant/453/vservers/vserver/vs1",
381 (String)vs.property(AAIProperties.AAI_URI.toString()).value());
386 public void getEdgeBetweenTest() throws AAIException {
387 engine.startTransaction();
389 Vertex cr = engine.tx().addVertex("aai-node-type", "cloud-region", "cloud-owner", "me", "cloud-region-id", "123");
390 Vertex ten = engine.tx().addVertex("aai-node-type", "tenant", "tenant-id", "453");
391 EdgeRules rules = EdgeRules.getInstance();
392 rules.addTreeEdge(engine.tx().traversal(), cr, ten);
394 Edge e = dbser.getEdgeBetween(EdgeType.TREE, ten, cr, null);
395 assertEquals("org.onap.relationships.inventory.BelongsTo", e.label());
400 public void deleteEdgeTest() throws AAIException, UnsupportedEncodingException {
401 engine.startTransaction();
403 Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf");
404 Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name");
405 EdgeRules rules = EdgeRules.getInstance();
406 rules.addEdge(engine.tx().traversal(), gvnf, vnfc);
408 Introspector relData = loader.introspectorFromName("relationship-data");
409 relData.setValue("relationship-key", "vnfc.vnfc-name");
410 relData.setValue("relationship-value", "a-name");
411 Introspector relationship = loader.introspectorFromName("relationship");
412 relationship.setValue("related-to", "vnfc");
413 relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
414 relationship.setValue("relationship-data",relData);
416 assertTrue(dbser.deleteEdge(relationship, gvnf));
418 assertFalse(engine.tx().traversal().V(gvnf).both("uses").hasNext());
419 assertFalse(engine.tx().traversal().V(vnfc).both("uses").hasNext());
424 public void createEdgeTest() throws AAIException, UnsupportedEncodingException {
425 engine.startTransaction();
427 Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf");
428 Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name");
431 Introspector relData = loader.introspectorFromName("relationship-data");
432 relData.setValue("relationship-key", "vnfc.vnfc-name");
433 relData.setValue("relationship-value", "a-name");
434 Introspector relationship = loader.introspectorFromName("relationship");
435 relationship.setValue("related-to", "vnfc");
436 relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
437 relationship.setValue("relationship-data",relData);
439 assertTrue(dbser.createEdge(relationship, gvnf));
440 assertTrue(engine.tx().traversal().V(gvnf).both("org.onap.relationships.inventory.BelongsTo").hasNext());
441 assertTrue(engine.tx().traversal().V(vnfc).both("org.onap.relationships.inventory.BelongsTo").hasNext());
446 public void createCousinEdgeThatShouldBeTreeTest() throws AAIException, UnsupportedEncodingException, URISyntaxException {
447 engine.startTransaction();
449 Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf");
450 Vertex vf = engine.tx().addVertex("aai-node-type","vf-module","vf-module-id","vf-id");
452 EdgeRules.getInstance().addTreeEdge(engine.tx().traversal(), gvnf, vf);
454 Introspector relationship = loader.introspectorFromName("relationship");
455 relationship.setValue("related-to", "vf-module");
456 relationship.setValue("related-link", dbser.getURIForVertex(vf).toString());
457 Introspector relationshipList = loader.introspectorFromName("relationship-list");
458 relationshipList.setValue("relationship", Collections.singletonList(relationship.getUnderlyingObject()));
460 Introspector gvnfObj = loader.introspectorFromName("generic-vnf");
461 Vertex gvnf2 = dbser.createNewVertex(gvnfObj);
462 gvnfObj.setValue("relationship-list", relationshipList.getUnderlyingObject());
463 gvnfObj.setValue("vnf-id", "myvnf-1");
465 QueryParser uriQuery = dbEngine.getQueryBuilder().createQueryFromURI(new URI("/network/generic-vnfs/generic-vnf/myvnf-1"));
468 dbser.serializeToDb(gvnfObj, gvnf2, uriQuery, null, "test");
469 } catch (AAIException e) {
470 assertEquals("AAI_6145", e.getCode());
475 public void createEdgeNodeDoesNotExistExceptionTest() throws AAIException, UnsupportedEncodingException {
476 engine.startTransaction();
478 Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf");
480 //rainy day case, edge to non-existent object
481 Introspector relData = loader.introspectorFromName("relationship-data");
482 relData.setValue("relationship-key", "vnfc.vnfc-name");
483 relData.setValue("relationship-value", "b-name");
484 Introspector relationship = loader.introspectorFromName("relationship");
485 relationship.setValue("related-to", "vnfc");
486 relationship.setValue("related-link", "/network/vnfcs/vnfc/b-name");
487 relationship.setValue("relationship-data",relData);
489 thrown.expect(AAIException.class);
490 thrown.expectMessage("Node of type vnfc. Could not find object at: /network/vnfcs/vnfc/b-name");
491 dbser.createEdge(relationship, gvnf);
496 public void serializeSingleVertexTopLevelTest() throws AAIException, UnsupportedEncodingException {
497 engine.startTransaction();
499 Introspector gvnf = loader.introspectorFromName("generic-vnf");
500 Vertex gvnfVert = dbser.createNewVertex(gvnf);
502 gvnf.setValue("vnf-id", "myvnf");
503 dbser.serializeSingleVertex(gvnfVert, gvnf, "test");
504 assertTrue(engine.tx().traversal().V().has("aai-node-type","generic-vnf").has("vnf-id","myvnf").hasNext());
509 public void serializeSingleVertexChildTest() throws AAIException, UnsupportedEncodingException {
510 engine.startTransaction();
512 Vertex cr = engine.tx().addVertex("aai-node-type", "cloud-region", "cloud-owner", "me", "cloud-region-id", "123");
513 Introspector tenIn = loader.introspectorFromName("tenant");
514 Vertex ten = dbser.createNewVertex(tenIn);
515 EdgeRules rules = EdgeRules.getInstance();
516 rules.addTreeEdge(engine.tx().traversal(), cr, ten);
518 tenIn.setValue("tenant-id", "453");
519 tenIn.setValue("tenant-name", "mytenant");
521 dbser.serializeSingleVertex(ten, tenIn, "test");
523 assertTrue(engine.tx().traversal().V().has("aai-node-type","tenant").has("tenant-id","453").has("tenant-name","mytenant").hasNext());
529 public void getVertexPropertiesRelationshipHasLabelTest() throws AAIException, UnsupportedEncodingException {
530 engine.startTransaction();
532 Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","vnf-123");
533 Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","vnfc-123");
534 EdgeRules rules = EdgeRules.getInstance();
535 rules.addEdge(engine.tx().traversal(), gvnf, vnfc);
537 Introspector obj = loader.introspectorFromName("generic-vnf");
538 obj = this.dbser.dbToObject(Arrays.asList(gvnf), obj, AAIProperties.MAXIMUM_DEPTH, false, "false");
540 assertEquals("edge label between generic-vnf and vnfs is uses",
541 "org.onap.relationships.inventory.BelongsTo",
542 obj.getWrappedValue("relationship-list")
543 .getWrappedListValue("relationship")
545 .getValue("relationship-label")
552 public void getVertexPropertiesRelationshipOldVersionNoEdgeLabelTest() throws AAIException, UnsupportedEncodingException {
554 Version version = Version.v11;
555 DBSerializer dbser = new DBSerializer(version, engine, introspectorFactoryType, "AAI-TEST");
556 Loader loader = LoaderFactory.createLoaderForVersion(introspectorFactoryType, version);
558 engine.startTransaction();
560 Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","vnf-123");
561 Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","vnfc-123");
562 EdgeRules rules = EdgeRules.getInstance();
563 rules.addEdge(engine.tx().traversal(), gvnf, vnfc);
565 Introspector obj = loader.introspectorFromName("generic-vnf");
566 obj = dbser.dbToObject(Arrays.asList(gvnf), obj, AAIProperties.MAXIMUM_DEPTH, false, "false");
568 assertEquals("Relationship does not contain edge-property", false, obj.getWrappedValue("relationship-list").getWrappedListValue("relationship").get(0).hasProperty("relationship-label"));
574 public void createEdgeWithValidLabelTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
576 EdgeRules ers = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
578 DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules(ers);
580 engine.startTransaction();
582 Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf");
583 Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name");
586 Introspector relData = loader.introspectorFromName("relationship-data");
587 relData.setValue("relationship-key", "vnfc.vnfc-name");
588 relData.setValue("relationship-value", "a-name");
589 Introspector relationship = loader.introspectorFromName("relationship");
590 relationship.setValue("related-to", "vnfc");
591 relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
592 relationship.setValue("relationship-data",relData);
593 relationship.setValue("relationship-label", "over-uses");
595 assertTrue(localDbser.createEdge(relationship, gvnf));
596 assertTrue(engine.tx().traversal().V(gvnf).both("over-uses").hasNext());
597 assertTrue(engine.tx().traversal().V(vnfc).both("over-uses").hasNext());
602 public void createEdgeWithInvalidLabelTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
604 engine.startTransaction();
606 Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf");
607 engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name");
609 Introspector relData = loader.introspectorFromName("relationship-data");
610 relData.setValue("relationship-key", "vnfc.vnfc-name");
611 relData.setValue("relationship-value", "a-name");
612 Introspector relationship = loader.introspectorFromName("relationship");
613 relationship.setValue("related-to", "vnfc");
614 relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
615 relationship.setValue("relationship-data",relData);
616 relationship.setValue("relationship-label", "NA");
618 thrown.expect(AAIException.class);
619 thrown.expectMessage("no COUSIN edge rule between generic-vnf and vnfc with label NA");
620 dbser.createEdge(relationship, gvnf);
625 public void createEdgeWithValidLabelWhenSameEdgeExistsTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
627 EdgeRules ers = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
629 DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules(ers);
631 engine.startTransaction();
633 Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf");
634 Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name");
635 ers.addEdge(graph.traversal(), gvnf, vnfc, "re-uses");
637 Introspector relData = loader.introspectorFromName("relationship-data");
638 relData.setValue("relationship-key", "vnfc.vnfc-name");
639 relData.setValue("relationship-value", "a-name");
640 Introspector relationship = loader.introspectorFromName("relationship");
641 relationship.setValue("related-to", "vnfc");
642 relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
643 relationship.setValue("relationship-data",relData);
644 relationship.setValue("relationship-label", "re-uses");
646 assertTrue(localDbser.createEdge(relationship, gvnf));
647 assertTrue(engine.tx().traversal().V(gvnf).both("re-uses").hasNext());
648 assertTrue(engine.tx().traversal().V(vnfc).both("re-uses").hasNext());
649 assertEquals("Number of edges between vertexes is 1", Long.valueOf(1), engine.tx().traversal().V(vnfc).both().count().next());
654 public void createEdgeWithValidLabelWhenDiffEdgeExistsTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
656 EdgeRules ers = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
657 DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules(ers);
659 engine.startTransaction();
661 Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf");
662 Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name");
663 ers.addEdge(graph.traversal(), gvnf, vnfc, "uses");
665 Introspector relData = loader.introspectorFromName("relationship-data");
666 relData.setValue("relationship-key", "vnfc.vnfc-name");
667 relData.setValue("relationship-value", "a-name");
668 Introspector relationship = loader.introspectorFromName("relationship");
669 relationship.setValue("related-to", "vnfc");
670 relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
671 relationship.setValue("relationship-data",relData);
672 relationship.setValue("relationship-label", "uses");
673 localDbser.createEdge(relationship, gvnf);
675 relationship.setValue("relationship-label", "re-uses");
677 assertTrue(localDbser.createEdge(relationship, gvnf));
678 assertTrue(engine.tx().traversal().V(gvnf).both("re-uses").hasNext());
679 assertTrue(engine.tx().traversal().V(vnfc).both("re-uses").hasNext());
680 assertTrue(engine.tx().traversal().V(gvnf).both("uses").hasNext());
681 assertTrue(engine.tx().traversal().V(vnfc).both("uses").hasNext());
682 assertEquals("Number of edges between vertexes is 2", Long.valueOf(2), engine.tx().traversal().V(vnfc).both().count().next());
683 assertEquals("Number of edges between vertexes is 2", Long.valueOf(2), engine.tx().traversal().V(gvnf).both().count().next());
688 public void createEdgeWithNoLabelTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
690 EdgeRules ers = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
691 DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules(ers);
693 engine.startTransaction();
695 Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf");
696 Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name");
698 Introspector relData = loader.introspectorFromName("relationship-data");
699 relData.setValue("relationship-key", "vnfc.vnfc-name");
700 relData.setValue("relationship-value", "a-name");
701 Introspector relationship = loader.introspectorFromName("relationship");
702 relationship.setValue("related-to", "vnfc");
703 relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
704 relationship.setValue("relationship-data",relData);
705 localDbser.createEdge(relationship, gvnf);
707 assertTrue(localDbser.createEdge(relationship, gvnf));
708 assertTrue(engine.tx().traversal().V(gvnf).both("uses").hasNext());
709 assertTrue(engine.tx().traversal().V(vnfc).both("uses").hasNext());
710 assertEquals("Number of edges between vertexes is 1", Long.valueOf(1), engine.tx().traversal().V(vnfc).both().count().next());
711 assertEquals("Number of edges between vertexes is 1", Long.valueOf(1), engine.tx().traversal().V(gvnf).both().count().next());
717 public void deleteEdgeWithNoLabelWhenMultipleExistsTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
719 EdgeRules ers = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
721 DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules(ers);
723 engine.startTransaction();
725 Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf");
726 Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name");
727 ers.addEdge(graph.traversal(), gvnf, vnfc, "uses");
728 ers.addEdge(graph.traversal(), gvnf, vnfc, "re-uses");
729 ers.addEdge(graph.traversal(), gvnf, vnfc, "over-uses");
731 Introspector relData = loader.introspectorFromName("relationship-data");
732 relData.setValue("relationship-key", "vnfc.vnfc-name");
733 relData.setValue("relationship-value", "a-name");
734 Introspector relationship = loader.introspectorFromName("relationship");
735 relationship.setValue("related-to", "vnfc");
736 relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
737 relationship.setValue("relationship-data",relData);
739 assertTrue(localDbser.deleteEdge(relationship, gvnf));
740 assertFalse("generic-vnf has no edge uses", engine.tx().traversal().V(gvnf).both("uses").hasNext());
741 assertFalse("vnfc has no edge uses", engine.tx().traversal().V(vnfc).both("uses").hasNext());
742 assertTrue("generic-vnf has edge re-uses", engine.tx().traversal().V(gvnf).both("re-uses").hasNext());
743 assertTrue("vnfc has edge re-uses", engine.tx().traversal().V(vnfc).both("re-uses").hasNext());
744 assertTrue("generic-vnf has edge re-uses", engine.tx().traversal().V(gvnf).both("over-uses").hasNext());
745 assertTrue("vnfc has edge re-uses", engine.tx().traversal().V(vnfc).both("over-uses").hasNext());
746 assertEquals("Number of edges between vertexes is 2", Long.valueOf(2), engine.tx().traversal().V(vnfc).both().count().next());
747 assertEquals("Number of edges between vertexes is 2", Long.valueOf(2), engine.tx().traversal().V(gvnf).both().count().next());
752 public void deleteEdgeWithValidLabelWhenMultipleExistsTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
754 EdgeRules ers = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
755 DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules(ers);
757 engine.startTransaction();
759 Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf");
760 Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name");
761 ers.addEdge(graph.traversal(), gvnf, vnfc, "uses");
762 ers.addEdge(graph.traversal(), gvnf, vnfc, "re-uses");
763 ers.addEdge(graph.traversal(), gvnf, vnfc, "over-uses");
765 Introspector relData = loader.introspectorFromName("relationship-data");
766 relData.setValue("relationship-key", "vnfc.vnfc-name");
767 relData.setValue("relationship-value", "a-name");
768 Introspector relationship = loader.introspectorFromName("relationship");
769 relationship.setValue("related-to", "vnfc");
770 relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
771 relationship.setValue("relationship-data",relData);
772 relationship.setValue("relationship-label", "re-uses");
774 assertTrue(localDbser.deleteEdge(relationship, gvnf));
775 assertTrue("generic-vnf has edge uses", engine.tx().traversal().V(gvnf).both("uses").hasNext());
776 assertTrue("vnfc has edge uses", engine.tx().traversal().V(vnfc).both("uses").hasNext());
777 assertFalse("generic-vnf has no edge re-uses", engine.tx().traversal().V(gvnf).both("re-uses").hasNext());
778 assertFalse("vnfc has no edge re-uses", engine.tx().traversal().V(vnfc).both("re-uses").hasNext());
779 assertTrue("generic-vnf has edge re-uses", engine.tx().traversal().V(gvnf).both("over-uses").hasNext());
780 assertTrue("vnfc has edge re-uses", engine.tx().traversal().V(vnfc).both("over-uses").hasNext());
781 assertEquals("Number of edges between vertexes is 2", Long.valueOf(2), engine.tx().traversal().V(vnfc).both().count().next());
782 assertEquals("Number of edges between vertexes is 2", Long.valueOf(2), engine.tx().traversal().V(gvnf).both().count().next());
787 public void deleteEdgeWithValidInvalidLabelWhenMultipleExistsTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
789 EdgeRules ers = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
790 DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules(ers);
792 engine.startTransaction();
794 Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf");
795 Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name");
796 ers.addEdge(graph.traversal(), gvnf, vnfc, "uses");
797 ers.addEdge(graph.traversal(), gvnf, vnfc, "re-uses");
798 ers.addEdge(graph.traversal(), gvnf, vnfc, "over-uses");
800 Introspector relData = loader.introspectorFromName("relationship-data");
801 relData.setValue("relationship-key", "vnfc.vnfc-name");
802 relData.setValue("relationship-value", "a-name");
803 Introspector relationship = loader.introspectorFromName("relationship");
804 relationship.setValue("related-to", "vnfc");
805 relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
806 relationship.setValue("relationship-data",relData);
807 relationship.setValue("relationship-label", "NA");
809 thrown.expect(AAIException.class);
810 thrown.expectMessage("no COUSIN edge rule between generic-vnf and vnfc with label NA");
811 localDbser.deleteEdge(relationship, gvnf);
815 public void serializeToDbWithLabelTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, URISyntaxException {
817 EdgeRules ers = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
818 DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules(ers);
820 engine.startTransaction();
822 engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name");
824 Introspector relationship = loader.introspectorFromName("relationship");
825 relationship.setValue("related-to", "vnfc");
826 relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
827 relationship.setValue("relationship-label", "re-uses");
828 Introspector relationshipList = loader.introspectorFromName("relationship-list");
829 relationshipList.setValue("relationship", Collections.singletonList(relationship.getUnderlyingObject()));
831 Introspector gvnfObj = loader.introspectorFromName("generic-vnf");
832 Vertex gvnf = localDbser.createNewVertex(gvnfObj);
833 gvnfObj.setValue("relationship-list", relationshipList.getUnderlyingObject());
834 gvnfObj.setValue("vnf-id", "myvnf");
836 QueryParser uriQuery = dbEngine.getQueryBuilder().createQueryFromURI(new URI("/network/generic-vnfs/generic-vnf/myvnf"));
838 localDbser.serializeToDb(gvnfObj, gvnf, uriQuery, null, "test");
840 assertTrue("vertex with vnf-id myvnf exists", engine.tx().traversal().V().has("vnf-id", "myvnf").hasNext());
841 assertTrue("vertex with vnfc-name a-name exists", engine.tx().traversal().V().has("vnfc-name", "a-name").hasNext());
842 assertFalse("generic-vnf has no edge re-uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("uses").hasNext());
843 assertFalse("vnfc has no edge re-uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("uses").hasNext());
844 assertTrue("generic-vnf has edge re-uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("re-uses").hasNext());
845 assertTrue("vnfc has edge re-uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("re-uses").hasNext());
846 assertFalse("generic-vnf has no edge re-uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("over-uses").hasNext());
847 assertFalse("vnfc has no edge re-uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("over-uses").hasNext());
848 assertEquals("Number of edges between vertexes is 1", Long.valueOf(1), engine.tx().traversal().V().has("vnfc-name", "a-name").both().count().next());
849 assertEquals("Number of edges between vertexes is 1", Long.valueOf(1), engine.tx().traversal().V().has("vnf-id", "myvnf").both().count().next());
854 public void serializeToDbWithoutLabelTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, URISyntaxException {
856 EdgeRules ers = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
857 DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules(ers);
859 engine.startTransaction();
861 engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name");
863 Introspector relationship = loader.introspectorFromName("relationship");
864 relationship.setValue("related-to", "vnfc");
865 relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
867 Introspector relationshipList = loader.introspectorFromName("relationship-list");
868 relationshipList.setValue("relationship", Collections.singletonList(relationship.getUnderlyingObject()));
870 Introspector gvnfObj = loader.introspectorFromName("generic-vnf");
871 Vertex gvnf = localDbser.createNewVertex(gvnfObj);
872 gvnfObj.setValue("relationship-list", relationshipList.getUnderlyingObject());
873 gvnfObj.setValue("vnf-id", "myvnf");
875 QueryParser uriQuery = dbEngine.getQueryBuilder().createQueryFromURI(new URI("/network/generic-vnfs/generic-vnf/myvnf"));
877 localDbser.serializeToDb(gvnfObj, gvnf, uriQuery, null, "test");
879 assertTrue("vertex with vnf-id myvnf exists", engine.tx().traversal().V().has("vnf-id", "myvnf").hasNext());
880 assertTrue("vertex with vnfc-name a-name exists", engine.tx().traversal().V().has("vnfc-name", "a-name").hasNext());
881 assertTrue("generic-vnf has edge uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("uses").hasNext());
882 assertTrue("vnfc has edge uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("uses").hasNext());
883 assertFalse("generic-vnf has no edge re-uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("re-uses").hasNext());
884 assertFalse("vnfc has no edge re-uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("re-uses").hasNext());
885 assertFalse("generic-vnf has no edge over-uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("over-uses").hasNext());
886 assertFalse("vnfc has no edge over-uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("over-uses").hasNext());
887 assertEquals("Number of edges between vertexes is 1", Long.valueOf(1), engine.tx().traversal().V().has("vnfc-name", "a-name").both().count().next());
888 assertEquals("Number of edges between vertexes is 1", Long.valueOf(1), engine.tx().traversal().V().has("vnf-id", "myvnf").both().count().next());
893 public void serializeToDbWithInvalidLabelTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, URISyntaxException {
895 EdgeRules ers = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
896 DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules(ers);
898 engine.startTransaction();
900 engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name");
902 Introspector relationship = loader.introspectorFromName("relationship");
903 relationship.setValue("related-to", "vnfc");
904 relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
905 relationship.setValue("relationship-label", "NA");
906 Introspector relationshipList = loader.introspectorFromName("relationship-list");
907 relationshipList.setValue("relationship", Collections.singletonList(relationship.getUnderlyingObject()));
909 Introspector gvnfObj = loader.introspectorFromName("generic-vnf");
910 Vertex gvnf = localDbser.createNewVertex(gvnfObj);
911 gvnfObj.setValue("relationship-list", relationshipList.getUnderlyingObject());
912 gvnfObj.setValue("vnf-id", "myvnf");
914 QueryParser uriQuery = dbEngine.getQueryBuilder().createQueryFromURI(new URI("/network/generic-vnfs/generic-vnf/myvnf"));
916 thrown.expect(AAIException.class);
917 thrown.expectMessage("No EdgeRule found for passed nodeTypes: generic-vnf, vnfc with label NA.");
918 localDbser.serializeToDb(gvnfObj, gvnf, uriQuery, null, "test");
923 public void serializeToDbWithLabelAndEdgeExistsTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, URISyntaxException {
925 EdgeRules ers = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
926 DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules(ers);
928 engine.startTransaction();
929 engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name");
931 Introspector relationship;
932 Introspector relationshipList;
933 List<Object> relList = new ArrayList<>();
935 // create generic-vnf
936 Introspector gvnfObj = loader.introspectorFromName("generic-vnf");
937 Vertex gvnf = localDbser.createNewVertex(gvnfObj);
938 gvnfObj.setValue("vnf-id", "myvnf");
939 QueryParser uriQuery = dbEngine.getQueryBuilder().createQueryFromURI(new URI("/network/generic-vnfs/generic-vnf/myvnf"));
941 // create relationship to vnfc
942 relationship = loader.introspectorFromName("relationship");
943 relationship.setValue("related-to", "vnfc");
944 relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
945 relList.add(relationship.getUnderlyingObject());
946 relationshipList = loader.introspectorFromName("relationship-list");
947 relationshipList.setValue("relationship", relList);
948 gvnfObj.setValue("relationship-list", relationshipList.getUnderlyingObject());
951 localDbser.serializeToDb(gvnfObj, gvnf, uriQuery, null, "test");
953 // add second relationship
954 relationship = loader.introspectorFromName("relationship");
955 relationship.setValue("related-to", "vnfc");
956 relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
957 relationship.setValue("relationship-label", "re-uses");
958 relList.add(relationship.getUnderlyingObject());
959 relationshipList = loader.introspectorFromName("relationship-list");
960 relationshipList.setValue("relationship", relList);
961 gvnfObj.setValue("relationship-list", relationshipList.getUnderlyingObject());
963 localDbser.serializeToDb(gvnfObj, gvnf, uriQuery, null, "test");
965 assertTrue("vertex with vnf-id myvnf exists", engine.tx().traversal().V().has("vnf-id", "myvnf").hasNext());
966 assertTrue("vertex with vnfc-name a-name exists", engine.tx().traversal().V().has("vnfc-name", "a-name").hasNext());
967 assertTrue("generic-vnf has edge uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("uses").hasNext());
968 assertTrue("vnfc has edge uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("uses").hasNext());
969 assertTrue("generic-vnf has edge re-uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("re-uses").hasNext());
970 assertTrue("vnfc has edge re-uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("re-uses").hasNext());
971 assertFalse("generic-vnf has no edge over-uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("over-uses").hasNext());
972 assertFalse("vnfc has no edge over-uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("over-uses").hasNext());
973 assertEquals("Number of edges between vertexes is 2", Long.valueOf(2), engine.tx().traversal().V().has("vnfc-name", "a-name").both().count().next());
974 assertEquals("Number of edges between vertexes is 2", Long.valueOf(2), engine.tx().traversal().V().has("vnf-id", "myvnf").both().count().next());
979 public void serializeToDbWithLabelDroppingRelationshipTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, URISyntaxException {
981 EdgeRules ers = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
982 DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules(ers);
984 engine.startTransaction();
985 engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name");
987 Introspector relationship;
988 Introspector relationshipList;
989 List<Object> relList = new ArrayList<>();
991 // create generic-vnf
992 Introspector gvnfObj = loader.introspectorFromName("generic-vnf");
993 Vertex gvnf = localDbser.createNewVertex(gvnfObj);
994 gvnfObj.setValue("vnf-id", "myvnf");
995 QueryParser uriQuery = dbEngine.getQueryBuilder().createQueryFromURI(new URI("/network/generic-vnfs/generic-vnf/myvnf"));
997 // create relationship to vnfc
998 relationship = loader.introspectorFromName("relationship");
999 relationship.setValue("related-to", "vnfc");
1000 relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
1001 relList.add(relationship.getUnderlyingObject());
1002 // add second relationship
1003 relationship = loader.introspectorFromName("relationship");
1004 relationship.setValue("related-to", "vnfc");
1005 relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
1006 relationship.setValue("relationship-label", "re-uses");
1007 relList.add(relationship.getUnderlyingObject());
1008 relationshipList = loader.introspectorFromName("relationship-list");
1009 relationshipList.setValue("relationship", relList);
1010 gvnfObj.setValue("relationship-list", relationshipList.getUnderlyingObject());
1012 // add gvnf to graph
1013 localDbser.serializeToDb(gvnfObj, gvnf, uriQuery, null, "test");
1015 // drop second relationship
1017 relationshipList = loader.introspectorFromName("relationship-list");
1018 relationshipList.setValue("relationship", relList);
1019 gvnfObj.setValue("relationship-list", relationshipList.getUnderlyingObject());
1021 localDbser.serializeToDb(gvnfObj, gvnf, uriQuery, null, "test");
1023 assertTrue("vertex with vnf-id myvnf exists", engine.tx().traversal().V().has("vnf-id", "myvnf").hasNext());
1024 assertTrue("vertex with vnfc-name a-name exists", engine.tx().traversal().V().has("vnfc-name", "a-name").hasNext());
1025 assertTrue("generic-vnf has edge uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("uses").hasNext());
1026 assertTrue("vnfc has edge uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("uses").hasNext());
1027 assertFalse("generic-vnf no longer has edge re-uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("re-uses").hasNext());
1028 assertFalse("vnfc no longer has edge re-uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("re-uses").hasNext());
1029 assertFalse("generic-vnf has no edge over-uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("over-uses").hasNext());
1030 assertFalse("vnfc has no edge over-uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("over-uses").hasNext());
1031 assertEquals("Number of edges between vertexes is 1", Long.valueOf(1), engine.tx().traversal().V().has("vnfc-name", "a-name").both().count().next());
1032 assertEquals("Number of edges between vertexes is 1", Long.valueOf(1), engine.tx().traversal().V().has("vnf-id", "myvnf").both().count().next());
1036 private DBSerializer getDBSerializerWithSpecificEdgeRules(EdgeRules ers)
1037 throws NoSuchFieldException, AAIException, IllegalAccessException {
1038 // reflection to set the edge rules to the test one for DBSerializer
1039 Field reader = DBSerializer.class.getDeclaredField("edgeRules");
1040 reader.setAccessible(true);
1041 DBSerializer localDbser = new DBSerializer(Version.getLatest(), engine, introspectorFactoryType, "AAI-TEST");
1042 reader.set(localDbser, ers);
1047 public void addRelatedToPropertyTest() throws AAIException {
1048 Loader loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.v11);
1049 Introspector gv = loader.introspectorFromName("generic-vnf");
1050 gv.setValue("vnf-name", "myname");
1051 Introspector rel = loader.introspectorFromName("relationship");
1052 DBSerializer dbser = new DBSerializer(Version.v11, dbEngine,
1053 ModelType.MOXY, "AAI-TEST");
1055 dbser.addRelatedToProperty(rel, gv);
1056 List<Introspector> relToProps = rel.getWrappedListValue("related-to-property");
1057 assertTrue(relToProps.size() == 1);
1058 Introspector relToProp = relToProps.get(0);
1059 assertTrue("generic-vnf.vnf-name".equals(relToProp.getValue("property-key")));
1060 assertTrue("myname".equals(relToProp.getValue("property-value")));
1064 public void dbToObjectContainerMismatchTest() throws AAIException, UnsupportedEncodingException {
1065 DBSerializer dbser = new DBSerializer(Version.v11, dbEngine,
1066 ModelType.MOXY, "AAI-TEST");
1068 Graph vertexMaker = TinkerGraph.open();
1069 Vertex a = vertexMaker.addVertex(T.id, "0");
1070 Vertex b = vertexMaker.addVertex(T.id, "1");
1071 List<Vertex> vertices = Arrays.asList(a,b);
1073 Loader loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.v11);
1074 Introspector intro = loader.introspectorFromName("image"); //just need any non-container object
1076 thrown.expect(AAIException.class);
1077 thrown.expectMessage("query object mismatch: this object cannot hold multiple items.");
1079 dbser.dbToObject(vertices, intro, Integer.MAX_VALUE, true, "doesn't matter");
1083 public void dbToObjectTest() throws AAIException, UnsupportedEncodingException {
1084 engine.startTransaction();
1086 DBSerializer dbser = new DBSerializer(Version.getLatest(), engine,
1087 ModelType.MOXY, "AAI-TEST");
1089 Vertex gv1 = engine.tx().addVertex("aai-node-type", "generic-vnf", "vnf-id", "id1");
1090 Vertex gv2 = engine.tx().addVertex("aai-node-type", "generic-vnf", "vnf-id", "id2");
1091 List<Vertex> vertices = Arrays.asList(gv1, gv2);
1093 Loader loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.getLatest());
1094 Introspector gvContainer = loader.introspectorFromName("generic-vnfs");
1096 Introspector res = dbser.dbToObject(vertices, gvContainer, 0, true, "true");
1097 List<Introspector> gvs = res.getWrappedListValue("generic-vnf");
1098 assertTrue(gvs.size() == 2);
1099 for (Introspector i : gvs) {
1100 String vnfId = i.getValue("vnf-id");
1101 assertTrue("id1".equals(vnfId) || "id2".equals(vnfId));
1108 public void getEdgeBetweenNoLabelTest() throws AAIException {
1109 DBSerializer dbser = new DBSerializer(Version.getLatest(), engine,
1110 ModelType.MOXY, "AAI-TEST");
1112 engine.startTransaction();
1113 Vertex gv = engine.tx().addVertex("aai-node-type", "generic-vnf", "vnf-id", "id1");
1114 Vertex lint = engine.tx().addVertex("aai-node-type", "l-interface", "interface-name", "name1");
1115 rules.addTreeEdge(engine.tx().traversal(), gv, lint);
1117 Edge res = dbser.getEdgeBetween(EdgeType.TREE, gv, lint);
1118 assertEquals("org.onap.relationships.inventory.BelongsTo", res.label());
1123 public void deleteItemsWithTraversal() throws AAIException {
1124 DBSerializer dbser = new DBSerializer(Version.getLatest(), engine,
1125 ModelType.MOXY, "AAI-TEST");
1127 engine.startTransaction();
1128 Vertex gv = engine.tx().addVertex("aai-node-type", "generic-vnf", "vnf-id", "id1");
1129 Vertex lint = engine.tx().addVertex("aai-node-type", "l-interface", "interface-name", "name1");
1131 assertTrue(engine.tx().traversal().V().has("vnf-id", "id1").hasNext());
1132 assertTrue(engine.tx().traversal().V().has("interface-name", "name1").hasNext());
1134 dbser.deleteItemsWithTraversal(Arrays.asList(gv, lint));
1136 assertTrue(!engine.tx().traversal().V().has("vnf-id", "id1").hasNext());
1137 assertTrue(!engine.tx().traversal().V().has("interface-name", "name1").hasNext());
1143 public void serializeToDbWithParentTest() throws AAIException, UnsupportedEncodingException, URISyntaxException {
1144 DBSerializer dbser = new DBSerializer(Version.getLatest(), engine,
1145 ModelType.MOXY, "AAI-TEST");
1147 engine.startTransaction();
1148 Vertex gv = engine.tx().addVertex("aai-node-type", "generic-vnf", "vnf-id", "id1");
1149 Vertex lint = engine.tx().addVertex("aai-node-type", "l-interface", "interface-name", "name1");
1150 rules.addTreeEdge(engine.tx().traversal(), gv, lint);
1152 Introspector lintIntro = loader.introspectorFromName("l-interface");
1153 lintIntro.setValue("interface-role", "actor");
1154 URI lintURI = new URI("/network/generic-vnfs/generic-vnf/id1/l-interfaces/l-interface/name1");
1155 QueryParser uriQuery = dbEngine.getQueryBuilder(gv).createQueryFromURI(lintURI);
1156 dbser.serializeToDb(lintIntro, lint, uriQuery, "test-identifier", "AAI-TEST");
1158 assertTrue(engine.tx().traversal().V(lint).has("interface-role", "actor").hasNext());
1164 public void getLatestVersionViewTest() throws AAIException, UnsupportedEncodingException {
1165 DBSerializer dbser = new DBSerializer(Version.getLatest(), engine,
1166 ModelType.MOXY, "AAI-TEST");
1168 engine.startTransaction();
1169 Vertex phys = engine.tx().addVertex("aai-node-type", "physical-link", "link-name", "zaldo",
1170 "speed-value", "very-fast", "service-provider-bandwidth-up-units", "things");
1172 Introspector res = dbser.getLatestVersionView(phys);
1173 assertTrue("zaldo".equals(res.getValue("link-name")));
1174 assertTrue("very-fast".equals(res.getValue("speed-value")));
1175 assertTrue("things".equals(res.getValue("service-provider-bandwidth-up-units")));