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 org.janusgraph.core.JanusGraphFactory;
23 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
24 import org.apache.tinkerpop.gremlin.structure.*;
25 import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph;
27 import org.junit.rules.ExpectedException;
28 import org.junit.runner.RunWith;
29 import org.junit.runners.Parameterized;
30 import org.onap.aai.AAISetup;
31 import org.onap.aai.db.props.AAIProperties;
32 import org.onap.aai.dbmap.DBConnectionType;
33 import org.onap.aai.exceptions.AAIException;
34 import org.onap.aai.introspection.*;
35 import org.onap.aai.parsers.query.QueryParser;
36 import org.onap.aai.serialization.engines.QueryStyle;
37 import org.onap.aai.serialization.engines.JanusGraphDBEngine;
38 import org.onap.aai.serialization.engines.TransactionalGraphEngine;
40 import java.io.UnsupportedEncodingException;
41 import java.lang.reflect.Field;
43 import java.net.URISyntaxException;
46 import static org.junit.Assert.*;
47 import static org.mockito.Mockito.spy;
48 import static org.mockito.Mockito.when;
50 @RunWith(value = Parameterized.class)
51 public class DbSerializerTest extends AAISetup {
53 //to use, set thrown.expect to whatever your test needs
54 //this line establishes default of expecting no exception to be thrown
56 public ExpectedException thrown = ExpectedException.none();
58 protected static Graph graph;
59 protected final EdgeRules rules = EdgeRules.getInstance();
61 private final Version version = Version.getLatest();
62 private final ModelType introspectorFactoryType = ModelType.MOXY;
63 private final DBConnectionType type = DBConnectionType.REALTIME;
64 private Loader loader;
65 private TransactionalGraphEngine dbEngine;
66 private TransactionalGraphEngine engine; //for tests that aren't mocking the engine
67 private DBSerializer dbser;
68 TransactionalGraphEngine spy;
69 TransactionalGraphEngine.Admin adminSpy;
71 @Parameterized.Parameter(value = 0)
72 public QueryStyle queryStyle;
74 @Parameterized.Parameters(name = "QueryStyle.{0}")
75 public static Collection<Object[]> data() {
76 return Arrays.asList(new Object[][]{
77 {QueryStyle.TRAVERSAL}
82 public static void init() throws Exception {
83 graph = JanusGraphFactory.build().set("storage.backend", "inmemory").open();
88 public void setup() throws Exception {
90 loader = LoaderFactory.createLoaderForVersion(introspectorFactoryType, version);
91 dbEngine = new JanusGraphDBEngine(queryStyle, type, loader);
93 adminSpy = spy(dbEngine.asAdmin());
96 engine = new JanusGraphDBEngine(queryStyle, type, loader);
97 dbser = new DBSerializer(version, engine, introspectorFactoryType, "AAI-TEST");
101 public void testFindDeletableDoesNotReturnDuplicates() throws AAIException {
103 EdgeRules testRules = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
105 Vertex genericVnf1 = graph.addVertex("aai-node-type", "generic-vnf", "vnf-id", "vnf1", "vnf-name", "vnfName1");
107 Vertex lInterface1 = graph.addVertex("aai-node-type", "l-interface", "interface-name", "lInterface1");
108 Vertex lInterface2 = graph.addVertex("aai-node-type", "l-interface", "interface-name", "lInterface2");
110 Vertex logicalLink1 = graph.addVertex("aai-node-type", "logical-link", "link-name", "logicalLink1");
111 Vertex logicalLink2 = graph.addVertex("aai-node-type", "logical-link", "link-name", "logicalLink2");
113 GraphTraversalSource g = graph.traversal();
115 testRules.addTreeEdge(g, genericVnf1, lInterface1);
116 testRules.addTreeEdge(g, genericVnf1, lInterface2);
117 testRules.addEdge(g, lInterface1, logicalLink1);
118 testRules.addEdge(g, lInterface1, logicalLink2);
119 // This line will cause the logical link2 to be found twice under linterface 1
120 // and also under the linterface 2 and since in the past deletable returned
121 // duplicates this test checks that it shouldn't return duplicates
122 testRules.addEdge(g, lInterface2, logicalLink2);
124 when(spy.asAdmin()).thenReturn(adminSpy);
125 when(adminSpy.getTraversalSource()).thenReturn(g);
126 when(adminSpy.getReadOnlyTraversalSource()).thenReturn(g);
128 List<Vertex> deletableVertexes = spy.getQueryEngine().findDeletable(genericVnf1);
129 Set<Vertex> vertexSet = new HashSet<>();
131 for (Vertex deletableVertex : deletableVertexes) {
132 if(!vertexSet.contains(deletableVertex)){
133 vertexSet.add(deletableVertex);
135 fail("Find deletable is returning a list of duplicate vertexes");
141 public void tearDown() throws Exception {
146 public static void destroy() throws Exception {
151 public void subnetSetup() throws AAIException {
153 * This setus up the test graph, For future junits , add more vertices
157 Vertex l3interipv4addresslist_1 = graph.traversal().addV("aai-node-type", "l3-interface-ipv4-address-list",
158 "l3-interface-ipv4-address", "l3-interface-ipv4-address-1").next();
159 Vertex subnet_2 = graph.traversal().addV("aai-node-type", "subnet", "subnet-id", "subnet-id-2").next();
160 Vertex l3interipv6addresslist_3 = graph.traversal().addV("aai-node-type", "l3-interface-ipv6-address-list",
161 "l3-interface-ipv6-address", "l3-interface-ipv6-address-3").next();
162 Vertex subnet_4 = graph.traversal().addV("aai-node-type", "subnet", "subnet-id", "subnet-id-4").next();
163 Vertex subnet_5 = graph.traversal().addV("aai-node-type", "subnet", "subnet-id", "subnet-id-5").next();
164 Vertex l3network_6 = graph.traversal()
165 .addV("aai-node-type", "l3-network", "network-id", "network-id-6", "network-name", "network-name-6")
168 GraphTraversalSource g = graph.traversal();
169 EdgeRules.getInstance().addEdge(g, l3interipv4addresslist_1, subnet_2);
170 EdgeRules.getInstance().addEdge(g, l3interipv6addresslist_3, subnet_4);
171 EdgeRules.getInstance().addTreeEdge(g, subnet_5, l3network_6);
175 public void subnetDelWithInEdgesIpv4Test() throws AAIException {
177 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]";
180 * This subnet has in-edges with l3-ipv4 and NOT ok to delete
182 Vertex subnet = graph.traversal().V().has("aai-node-type", "subnet").has("subnet-id", "subnet-id-2").next();
184 String exceptionMessage = testDelete(subnet);
185 assertEquals(expected_message, exceptionMessage);
190 public void subnetDelWithInEdgesIpv6Test() throws AAIException {
192 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]";
195 * This subnet has in-edges with l3-ipv6 and NOT ok to delete
197 Vertex subnet = graph.traversal().V().has("aai-node-type", "subnet").has("subnet-id", "subnet-id-4").next();
198 String exceptionMessage = testDelete(subnet);
199 assertEquals(expected_message, exceptionMessage);
204 public void subnetDelWithInEdgesL3network() throws AAIException {
206 String expected_message = "";
209 * This subnet has in-edges with l3-network and ok to delete
211 Vertex subnet = graph.traversal().V().has("aai-node-type", "subnet").has("subnet-id", "subnet-id-5").next();
213 String exceptionMessage = testDelete(subnet);
214 assertEquals(expected_message, exceptionMessage);
218 public String testDelete(Vertex v) throws AAIException {
220 GraphTraversalSource traversal = graph.traversal();
221 when(spy.asAdmin()).thenReturn(adminSpy);
222 when(adminSpy.getTraversalSource()).thenReturn(traversal);
223 when(adminSpy.getReadOnlyTraversalSource()).thenReturn(traversal);
225 String exceptionMessage = "";
226 DBSerializer serializer = new DBSerializer(version, spy, introspectorFactoryType, "AAI_TEST");
228 serializer.delete(v, "resourceVersion", false);
229 } catch (AAIException exception) {
230 exceptionMessage = exception.getMessage();
232 return exceptionMessage;
237 public void createNewVertexTest() throws AAIException {
238 engine.startTransaction();
240 Introspector testObj = loader.introspectorFromName("generic-vnf");
242 Vertex testVertex = dbser.createNewVertex(testObj);
243 Vertex fromGraph = engine.tx().traversal().V().has("aai-node-type","generic-vnf").toList().get(0);
244 assertEquals(testVertex.id(), fromGraph.id());
245 assertEquals("AAI-TEST", fromGraph.property(AAIProperties.SOURCE_OF_TRUTH.toString()).value());
250 public void touchStandardVertexPropertiesTest() throws AAIException, InterruptedException {
251 engine.startTransaction();
252 DBSerializer dbser2 = new DBSerializer(Version.getLatest(), engine, introspectorFactoryType, "AAI-TEST-2");
254 Vertex vert = graph.addVertex("aai-node-type", "generic-vnf");
256 dbser.touchStandardVertexProperties(vert, true);
257 String resverStart = (String)vert.property(AAIProperties.RESOURCE_VERSION).value();
258 String lastModTimeStart = (String)vert.property(AAIProperties.LAST_MOD_TS).value();
260 Thread.sleep(10); //bc the resource version is set based on current time in milliseconds,
261 //if this test runs through too fast the value may not change
262 //causing the test to fail. sleeping ensures a different value
264 dbser2.touchStandardVertexProperties(vert, false);
265 assertFalse(resverStart.equals(vert.property(AAIProperties.RESOURCE_VERSION).value()));
266 assertFalse(lastModTimeStart.equals(vert.property(AAIProperties.LAST_MOD_TS).value()));
267 assertEquals("AAI-TEST-2", vert.property(AAIProperties.LAST_MOD_SOURCE_OF_TRUTH).value());
272 public void touchStandardVertexPropertiesAAIUUIDTest() throws AAIException, InterruptedException {
273 engine.startTransaction();
275 Graph graph = TinkerGraph.open();
276 Vertex v = graph.addVertex("aai-node-type", "generic-vnf");
278 dbser.touchStandardVertexProperties(v, true);
280 assertTrue(v.property(AAIProperties.AAI_UUID).isPresent());
282 UUID.fromString((String)v.property(AAIProperties.AAI_UUID).value());
283 } catch (IllegalArgumentException e) {
284 fail("Vertex uuid is not valid uuid");
289 public void serializeToDbNewVertexAndEdgeAAIUUIDTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, URISyntaxException {
290 String testName = new Object() {}.getClass().getEnclosingMethod().getName();
291 EdgeRules ers = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
292 DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules(ers);
294 engine.startTransaction();
296 engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","vnfc-" + testName, AAIProperties.AAI_URI, "/network/vnfcs/vnfc/vnfc-" + testName);
298 Introspector relationship = loader.introspectorFromName("relationship");
299 relationship.setValue("related-to", "vnfc");
300 relationship.setValue("related-link", "/network/vnfcs/vnfc/vnfc-" + testName);
302 Introspector relationshipList = loader.introspectorFromName("relationship-list");
303 relationshipList.setValue("relationship", Collections.singletonList(relationship.getUnderlyingObject()));
305 Introspector gvnfObj = loader.introspectorFromName("generic-vnf");
306 Vertex gvnf = localDbser.createNewVertex(gvnfObj);
307 gvnfObj.setValue("relationship-list", relationshipList.getUnderlyingObject());
308 gvnfObj.setValue("vnf-id", "vnf-" + testName);
310 QueryParser uriQuery = dbEngine.getQueryBuilder().createQueryFromURI(new URI("/network/generic-vnfs/generic-vnf/vnf-" + testName));
312 localDbser.serializeToDb(gvnfObj, gvnf, uriQuery, null, "test");
313 assertTrue("Generic-vnf has uuid ", gvnf.property(AAIProperties.AAI_UUID).isPresent());
314 assertTrue("Edge has uuid ", gvnf.edges(Direction.BOTH).next().property(AAIProperties.AAI_UUID).isPresent());
320 public void verifyResourceVersion_SunnyDayTest() throws AAIException {
321 engine.startTransaction();
323 assertTrue(dbser.verifyResourceVersion("delete", "vnfc", "abc", "abc", "vnfcs/vnfc/vnfcId"));
328 public void verifyResourceVersion_CreateWithRVTest() throws AAIException {
329 engine.startTransaction();
331 thrown.expect(AAIException.class);
332 thrown.expectMessage("resource-version passed for create of generic-vnfs/generic-vnf/myid");
333 dbser.verifyResourceVersion("create", "generic-vnf", null, "old-res-ver", "generic-vnfs/generic-vnf/myid");
338 public void verifyResourceVersion_MissingRVTest() throws AAIException {
339 engine.startTransaction();
341 thrown.expect(AAIException.class);
342 thrown.expectMessage("resource-version not passed for update of generic-vnfs/generic-vnf/myid");
343 dbser.verifyResourceVersion("update", "generic-vnf", "current-res-ver", null, "generic-vnfs/generic-vnf/myid");
348 public void verifyResourceVersion_MismatchRVTest() throws AAIException {
349 engine.startTransaction();
351 thrown.expect(AAIException.class);
352 thrown.expectMessage("resource-version MISMATCH for update of generic-vnfs/generic-vnf/myid");
353 dbser.verifyResourceVersion("update", "generic-vnf", "current-res-ver", "old-res-ver", "generic-vnfs/generic-vnf/myid");
358 public void trimClassNameTest() throws AAIException {
359 assertEquals("GenericVnf", dbser.trimClassName("GenericVnf"));
360 assertEquals("GenericVnf", dbser.trimClassName("org.onap.aai.GenericVnf"));
364 public void getURIForVertexTest() throws AAIException, URISyntaxException, UnsupportedEncodingException {
365 engine.startTransaction();
367 Vertex cr = engine.tx().addVertex("aai-node-type", "cloud-region", "cloud-owner", "me", "cloud-region-id", "123");
368 Vertex ten = engine.tx().addVertex("aai-node-type", "tenant", "tenant-id", "453");
369 EdgeRules rules = EdgeRules.getInstance();
370 rules.addTreeEdge(engine.tx().traversal(), cr, ten);
372 URI compare = new URI("/cloud-infrastructure/cloud-regions/cloud-region/me/123/tenants/tenant/453");
373 assertEquals(compare, dbser.getURIForVertex(ten));
375 cr.property("aai-node-type").remove();
376 URI compareFailure = new URI("/unknown-uri");
377 assertEquals(compareFailure, dbser.getURIForVertex(ten));
382 public void getVertexPropertiesTest() throws AAIException, UnsupportedEncodingException {
383 engine.startTransaction();
385 Vertex cr = engine.tx().addVertex("aai-node-type", "cloud-region", "cloud-owner", "me", "cloud-region-id", "123");
387 Introspector crIntro = dbser.getVertexProperties(cr);
388 assertEquals("cloud-region", crIntro.getDbName());
389 assertEquals("me", crIntro.getValue("cloud-owner"));
390 assertEquals("123", crIntro.getValue("cloud-region-id"));
395 public void setCachedURIsTest() throws AAIException, UnsupportedEncodingException, URISyntaxException {
396 engine.startTransaction();
398 Vertex cr = engine.tx().addVertex("aai-node-type", "cloud-region", "cloud-owner", "me", "cloud-region-id", "123");
399 Vertex ten = engine.tx().addVertex("aai-node-type", "tenant", "tenant-id", "453");
400 Vertex vs = engine.tx().addVertex("aai-node-type", "vserver", "vserver-id", "vs1",
401 AAIProperties.AAI_URI.toString(),
402 "/cloud-infrastructure/cloud-regions/cloud-region/me/123/tenants/tenant/453/vservers/vserver/vs1");
403 EdgeRules rules = EdgeRules.getInstance();
404 rules.addTreeEdge(engine.tx().traversal(), cr, ten);
405 rules.addTreeEdge(engine.tx().traversal(), ten, vs);
407 List<Vertex> vertices = Arrays.asList(cr, ten, vs);
408 Introspector crIn = dbser.getVertexProperties(cr);
409 Introspector tenIn = dbser.getVertexProperties(ten);
410 Introspector vsIn = dbser.getVertexProperties(vs);
411 List<Introspector> intros = Arrays.asList(crIn, tenIn, vsIn);
413 dbser.setCachedURIs(vertices, intros);
415 assertEquals("/cloud-infrastructure/cloud-regions/cloud-region/me/123",
416 (String)cr.property(AAIProperties.AAI_URI.toString()).value());
417 assertEquals("/cloud-infrastructure/cloud-regions/cloud-region/me/123/tenants/tenant/453",
418 (String)ten.property(AAIProperties.AAI_URI.toString()).value());
419 assertEquals("/cloud-infrastructure/cloud-regions/cloud-region/me/123/tenants/tenant/453/vservers/vserver/vs1",
420 (String)vs.property(AAIProperties.AAI_URI.toString()).value());
425 public void getEdgeBetweenTest() throws AAIException {
426 engine.startTransaction();
428 Vertex cr = engine.tx().addVertex("aai-node-type", "cloud-region", "cloud-owner", "me", "cloud-region-id", "123");
429 Vertex ten = engine.tx().addVertex("aai-node-type", "tenant", "tenant-id", "453");
430 EdgeRules rules = EdgeRules.getInstance();
431 rules.addTreeEdge(engine.tx().traversal(), cr, ten);
433 Edge e = dbser.getEdgeBetween(EdgeType.TREE, ten, cr, null);
434 assertEquals("org.onap.relationships.inventory.BelongsTo", e.label());
439 public void deleteEdgeTest() throws AAIException, UnsupportedEncodingException {
440 engine.startTransaction();
442 Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf", "aai-uri", "/network/generic-vnfs/generic-vnf/myvnf");
443 Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name", "aai-uri", "/network/vnfcs/vnfc/a-name");
444 EdgeRules rules = EdgeRules.getInstance();
445 rules.addEdge(engine.tx().traversal(), gvnf, vnfc);
447 Introspector relData = loader.introspectorFromName("relationship-data");
448 relData.setValue("relationship-key", "vnfc.vnfc-name");
449 relData.setValue("relationship-value", "a-name");
450 Introspector relationship = loader.introspectorFromName("relationship");
451 relationship.setValue("related-to", "vnfc");
452 relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
453 relationship.setValue("relationship-data",relData);
455 assertTrue(dbser.deleteEdge(relationship, gvnf));
457 assertFalse(engine.tx().traversal().V(gvnf).both("uses").hasNext());
458 assertFalse(engine.tx().traversal().V(vnfc).both("uses").hasNext());
463 public void createEdgeTest() throws AAIException, UnsupportedEncodingException {
464 engine.startTransaction();
466 Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf", "aai-uri", "/network/generic-vnfs/generic-vnf/myvnf");
467 Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name", "aai-uri", "/network/vnfcs/vnfc/a-name");
470 Introspector relData = loader.introspectorFromName("relationship-data");
471 relData.setValue("relationship-key", "vnfc.vnfc-name");
472 relData.setValue("relationship-value", "a-name");
473 Introspector relationship = loader.introspectorFromName("relationship");
474 relationship.setValue("related-to", "vnfc");
475 relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
476 relationship.setValue("relationship-data",relData);
478 assertTrue(dbser.createEdge(relationship, gvnf));
479 assertTrue(engine.tx().traversal().V(gvnf).both("org.onap.relationships.inventory.BelongsTo").hasNext());
480 assertTrue(engine.tx().traversal().V(vnfc).both("org.onap.relationships.inventory.BelongsTo").hasNext());
485 public void createCousinEdgeThatShouldBeTreeTest() throws AAIException, UnsupportedEncodingException, URISyntaxException {
486 engine.startTransaction();
488 Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf", "aai-uri", "/network/generic-vnfs/generic-vnf/myvnf");
489 Vertex vf = engine.tx().addVertex("aai-node-type","vf-module","vf-module-id","vf-id", "aai-uri", "/network/generic-vnfs/generic-vnf/myvnf/vf-modules/vf-module/vf-id");
491 EdgeRules.getInstance().addTreeEdge(engine.tx().traversal(), gvnf, vf);
493 Introspector relationship = loader.introspectorFromName("relationship");
494 relationship.setValue("related-to", "vf-module");
495 relationship.setValue("related-link", dbser.getURIForVertex(vf).toString());
496 Introspector relationshipList = loader.introspectorFromName("relationship-list");
497 relationshipList.setValue("relationship", Collections.singletonList(relationship.getUnderlyingObject()));
499 Introspector gvnfObj = loader.introspectorFromName("generic-vnf");
500 Vertex gvnf2 = dbser.createNewVertex(gvnfObj);
501 gvnfObj.setValue("relationship-list", relationshipList.getUnderlyingObject());
502 gvnfObj.setValue("vnf-id", "myvnf-1");
504 QueryParser uriQuery = dbEngine.getQueryBuilder().createQueryFromURI(new URI("/network/generic-vnfs/generic-vnf/myvnf-1"));
507 dbser.serializeToDb(gvnfObj, gvnf2, uriQuery, null, "test");
508 } catch (AAIException e) {
509 assertEquals("AAI_6145", e.getCode());
514 public void createEdgeNodeDoesNotExistExceptionTest() throws AAIException, UnsupportedEncodingException {
515 engine.startTransaction();
517 Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf", "aai-uri", "/network/generic-vnfs/generic-vnf/myvnf");
519 //rainy day case, edge to non-existent object
520 Introspector relData = loader.introspectorFromName("relationship-data");
521 relData.setValue("relationship-key", "vnfc.vnfc-name");
522 relData.setValue("relationship-value", "b-name");
523 Introspector relationship = loader.introspectorFromName("relationship");
524 relationship.setValue("related-to", "vnfc");
525 relationship.setValue("related-link", "/network/vnfcs/vnfc/b-name");
526 relationship.setValue("relationship-data",relData);
528 thrown.expect(AAIException.class);
529 thrown.expectMessage("Node of type vnfc. Could not find object at: /network/vnfcs/vnfc/b-name");
530 dbser.createEdge(relationship, gvnf);
535 public void serializeSingleVertexTopLevelTest() throws AAIException, UnsupportedEncodingException {
536 engine.startTransaction();
538 Introspector gvnf = loader.introspectorFromName("generic-vnf");
539 Vertex gvnfVert = dbser.createNewVertex(gvnf);
541 gvnf.setValue("vnf-id", "myvnf");
542 dbser.serializeSingleVertex(gvnfVert, gvnf, "test");
543 assertTrue(engine.tx().traversal().V().has("aai-node-type","generic-vnf").has("vnf-id","myvnf").hasNext());
548 public void serializeSingleVertexChildTest() throws AAIException, UnsupportedEncodingException {
549 engine.startTransaction();
551 Vertex cr = engine.tx().addVertex("aai-node-type", "cloud-region", "cloud-owner", "me", "cloud-region-id", "123");
552 Introspector tenIn = loader.introspectorFromName("tenant");
553 Vertex ten = dbser.createNewVertex(tenIn);
554 EdgeRules rules = EdgeRules.getInstance();
555 rules.addTreeEdge(engine.tx().traversal(), cr, ten);
557 tenIn.setValue("tenant-id", "453");
558 tenIn.setValue("tenant-name", "mytenant");
560 dbser.serializeSingleVertex(ten, tenIn, "test");
562 assertTrue(engine.tx().traversal().V().has("aai-node-type","tenant").has("tenant-id","453").has("tenant-name","mytenant").hasNext());
568 public void getVertexPropertiesRelationshipHasLabelTest() throws AAIException, UnsupportedEncodingException {
569 engine.startTransaction();
571 Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","vnf-123");
572 Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","vnfc-123");
573 EdgeRules rules = EdgeRules.getInstance();
574 rules.addEdge(engine.tx().traversal(), gvnf, vnfc);
576 Introspector obj = loader.introspectorFromName("generic-vnf");
577 obj = this.dbser.dbToObject(Arrays.asList(gvnf), obj, AAIProperties.MAXIMUM_DEPTH, false, "false");
579 assertEquals("edge label between generic-vnf and vnfs is uses",
580 "org.onap.relationships.inventory.BelongsTo",
581 obj.getWrappedValue("relationship-list")
582 .getWrappedListValue("relationship")
584 .getValue("relationship-label")
591 public void getVertexPropertiesRelationshipOldVersionNoEdgeLabelTest() throws AAIException, UnsupportedEncodingException {
593 Version version = Version.v11;
594 DBSerializer dbser = new DBSerializer(version, engine, introspectorFactoryType, "AAI-TEST");
595 Loader loader = LoaderFactory.createLoaderForVersion(introspectorFactoryType, version);
597 engine.startTransaction();
599 Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","vnf-123");
600 Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","vnfc-123");
601 EdgeRules rules = EdgeRules.getInstance();
602 rules.addEdge(engine.tx().traversal(), gvnf, vnfc);
604 Introspector obj = loader.introspectorFromName("generic-vnf");
605 obj = dbser.dbToObject(Arrays.asList(gvnf), obj, AAIProperties.MAXIMUM_DEPTH, false, "false");
607 assertEquals("Relationship does not contain edge-property", false, obj.getWrappedValue("relationship-list").getWrappedListValue("relationship").get(0).hasProperty("relationship-label"));
613 public void createEdgeWithValidLabelTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
615 EdgeRules ers = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
617 DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules(ers);
619 engine.startTransaction();
621 Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf", "aai-uri", "/network/generic-vnfs/generic-vnf/myvnf");
622 Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name", "aai-uri", "/network/vnfcs/vnfc/a-name");
625 Introspector relData = loader.introspectorFromName("relationship-data");
626 relData.setValue("relationship-key", "vnfc.vnfc-name");
627 relData.setValue("relationship-value", "a-name");
628 Introspector relationship = loader.introspectorFromName("relationship");
629 relationship.setValue("related-to", "vnfc");
630 relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
631 relationship.setValue("relationship-data",relData);
632 relationship.setValue("relationship-label", "over-uses");
634 assertTrue(localDbser.createEdge(relationship, gvnf));
635 assertTrue(engine.tx().traversal().V(gvnf).both("over-uses").hasNext());
636 assertTrue(engine.tx().traversal().V(vnfc).both("over-uses").hasNext());
641 public void createEdgeWithInvalidLabelTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
643 engine.startTransaction();
645 Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf", "aai-uri", "/network/generic-vnfs/generic-vnf/myvnf");
646 engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name", "aai-uri", "/network/vnfcs/vnfc/a-name");
648 Introspector relData = loader.introspectorFromName("relationship-data");
649 relData.setValue("relationship-key", "vnfc.vnfc-name");
650 relData.setValue("relationship-value", "a-name");
651 Introspector relationship = loader.introspectorFromName("relationship");
652 relationship.setValue("related-to", "vnfc");
653 relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
654 relationship.setValue("relationship-data",relData);
655 relationship.setValue("relationship-label", "NA");
657 thrown.expect(AAIException.class);
658 thrown.expectMessage("no COUSIN edge rule between generic-vnf and vnfc with label NA");
659 dbser.createEdge(relationship, gvnf);
664 public void createEdgeWithValidLabelWhenSameEdgeExistsTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
666 EdgeRules ers = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
668 DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules(ers);
670 engine.startTransaction();
672 Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf", "aai-uri", "/network/generic-vnfs/generic-vnf/myvnf");
673 Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name", "aai-uri", "/network/vnfcs/vnfc/a-name");
674 ers.addEdge(graph.traversal(), gvnf, vnfc, "re-uses");
676 Introspector relData = loader.introspectorFromName("relationship-data");
677 relData.setValue("relationship-key", "vnfc.vnfc-name");
678 relData.setValue("relationship-value", "a-name");
679 Introspector relationship = loader.introspectorFromName("relationship");
680 relationship.setValue("related-to", "vnfc");
681 relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
682 relationship.setValue("relationship-data",relData);
683 relationship.setValue("relationship-label", "re-uses");
685 assertTrue(localDbser.createEdge(relationship, gvnf));
686 assertTrue(engine.tx().traversal().V(gvnf).both("re-uses").hasNext());
687 assertTrue(engine.tx().traversal().V(vnfc).both("re-uses").hasNext());
688 assertEquals("Number of edges between vertexes is 1", Long.valueOf(1), engine.tx().traversal().V(vnfc).both().count().next());
693 public void createEdgeWithValidLabelWhenDiffEdgeExistsTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
695 EdgeRules ers = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
696 DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules(ers);
698 engine.startTransaction();
700 Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf", "aai-uri", "/network/generic-vnfs/generic-vnf/myvnf");
701 Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name", "aai-uri", "/network/vnfcs/vnfc/a-name");
702 ers.addEdge(graph.traversal(), gvnf, vnfc, "uses");
704 Introspector relData = loader.introspectorFromName("relationship-data");
705 relData.setValue("relationship-key", "vnfc.vnfc-name");
706 relData.setValue("relationship-value", "a-name");
707 Introspector relationship = loader.introspectorFromName("relationship");
708 relationship.setValue("related-to", "vnfc");
709 relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
710 relationship.setValue("relationship-data",relData);
711 relationship.setValue("relationship-label", "uses");
712 localDbser.createEdge(relationship, gvnf);
714 relationship.setValue("relationship-label", "re-uses");
716 assertTrue(localDbser.createEdge(relationship, gvnf));
717 assertTrue(engine.tx().traversal().V(gvnf).both("re-uses").hasNext());
718 assertTrue(engine.tx().traversal().V(vnfc).both("re-uses").hasNext());
719 assertTrue(engine.tx().traversal().V(gvnf).both("uses").hasNext());
720 assertTrue(engine.tx().traversal().V(vnfc).both("uses").hasNext());
721 assertEquals("Number of edges between vertexes is 2", Long.valueOf(2), engine.tx().traversal().V(vnfc).both().count().next());
722 assertEquals("Number of edges between vertexes is 2", Long.valueOf(2), engine.tx().traversal().V(gvnf).both().count().next());
727 public void createEdgeWithNoLabelTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
729 EdgeRules ers = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
730 DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules(ers);
732 engine.startTransaction();
734 Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf", "aai-uri", "/network/generic-vnfs/generic-vnf/myvnf");
735 Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name", "aai-uri", "/network/vnfcs/vnfc/a-name");
737 Introspector relData = loader.introspectorFromName("relationship-data");
738 relData.setValue("relationship-key", "vnfc.vnfc-name");
739 relData.setValue("relationship-value", "a-name");
740 Introspector relationship = loader.introspectorFromName("relationship");
741 relationship.setValue("related-to", "vnfc");
742 relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
743 relationship.setValue("relationship-data",relData);
744 localDbser.createEdge(relationship, gvnf);
746 assertTrue(localDbser.createEdge(relationship, gvnf));
747 assertTrue(engine.tx().traversal().V(gvnf).both("uses").hasNext());
748 assertTrue(engine.tx().traversal().V(vnfc).both("uses").hasNext());
749 assertEquals("Number of edges between vertexes is 1", Long.valueOf(1), engine.tx().traversal().V(vnfc).both().count().next());
750 assertEquals("Number of edges between vertexes is 1", Long.valueOf(1), engine.tx().traversal().V(gvnf).both().count().next());
756 public void deleteEdgeWithNoLabelWhenMultipleExistsTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
758 EdgeRules ers = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
760 DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules(ers);
762 engine.startTransaction();
764 Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf", "aai-uri", "/network/generic-vnfs/generic-vnf/myvnf");
765 Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name", "aai-uri", "/network/vnfcs/vnfc/a-name");
766 ers.addEdge(graph.traversal(), gvnf, vnfc, "uses");
767 ers.addEdge(graph.traversal(), gvnf, vnfc, "re-uses");
768 ers.addEdge(graph.traversal(), gvnf, vnfc, "over-uses");
770 Introspector relData = loader.introspectorFromName("relationship-data");
771 relData.setValue("relationship-key", "vnfc.vnfc-name");
772 relData.setValue("relationship-value", "a-name");
773 Introspector relationship = loader.introspectorFromName("relationship");
774 relationship.setValue("related-to", "vnfc");
775 relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
776 relationship.setValue("relationship-data",relData);
778 assertTrue(localDbser.deleteEdge(relationship, gvnf));
779 assertFalse("generic-vnf has no edge uses", engine.tx().traversal().V(gvnf).both("uses").hasNext());
780 assertFalse("vnfc has no edge uses", engine.tx().traversal().V(vnfc).both("uses").hasNext());
781 assertTrue("generic-vnf has edge re-uses", engine.tx().traversal().V(gvnf).both("re-uses").hasNext());
782 assertTrue("vnfc has edge re-uses", engine.tx().traversal().V(vnfc).both("re-uses").hasNext());
783 assertTrue("generic-vnf has edge re-uses", engine.tx().traversal().V(gvnf).both("over-uses").hasNext());
784 assertTrue("vnfc has edge re-uses", engine.tx().traversal().V(vnfc).both("over-uses").hasNext());
785 assertEquals("Number of edges between vertexes is 2", Long.valueOf(2), engine.tx().traversal().V(vnfc).both().count().next());
786 assertEquals("Number of edges between vertexes is 2", Long.valueOf(2), engine.tx().traversal().V(gvnf).both().count().next());
791 public void deleteEdgeWithValidLabelWhenMultipleExistsTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
793 EdgeRules ers = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
794 DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules(ers);
796 engine.startTransaction();
798 Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf", "aai-uri", "/network/generic-vnfs/generic-vnf/myvnf");
799 Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name", "aai-uri", "/network/vnfcs/vnfc/a-name");
800 ers.addEdge(graph.traversal(), gvnf, vnfc, "uses");
801 ers.addEdge(graph.traversal(), gvnf, vnfc, "re-uses");
802 ers.addEdge(graph.traversal(), gvnf, vnfc, "over-uses");
804 Introspector relData = loader.introspectorFromName("relationship-data");
805 relData.setValue("relationship-key", "vnfc.vnfc-name");
806 relData.setValue("relationship-value", "a-name");
807 Introspector relationship = loader.introspectorFromName("relationship");
808 relationship.setValue("related-to", "vnfc");
809 relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
810 relationship.setValue("relationship-data",relData);
811 relationship.setValue("relationship-label", "re-uses");
813 assertTrue(localDbser.deleteEdge(relationship, gvnf));
814 assertTrue("generic-vnf has edge uses", engine.tx().traversal().V(gvnf).both("uses").hasNext());
815 assertTrue("vnfc has edge uses", engine.tx().traversal().V(vnfc).both("uses").hasNext());
816 assertFalse("generic-vnf has no edge re-uses", engine.tx().traversal().V(gvnf).both("re-uses").hasNext());
817 assertFalse("vnfc has no edge re-uses", engine.tx().traversal().V(vnfc).both("re-uses").hasNext());
818 assertTrue("generic-vnf has edge re-uses", engine.tx().traversal().V(gvnf).both("over-uses").hasNext());
819 assertTrue("vnfc has edge re-uses", engine.tx().traversal().V(vnfc).both("over-uses").hasNext());
820 assertEquals("Number of edges between vertexes is 2", Long.valueOf(2), engine.tx().traversal().V(vnfc).both().count().next());
821 assertEquals("Number of edges between vertexes is 2", Long.valueOf(2), engine.tx().traversal().V(gvnf).both().count().next());
826 public void deleteEdgeWithValidInvalidLabelWhenMultipleExistsTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
828 EdgeRules ers = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
829 DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules(ers);
831 engine.startTransaction();
833 Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf", "aai-uri", "/network/generic-vnfs/generic-vnf/myvnf");
834 Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name", "aai-uri", "/network/vnfcs/vnfc/a-name");
835 ers.addEdge(graph.traversal(), gvnf, vnfc, "uses");
836 ers.addEdge(graph.traversal(), gvnf, vnfc, "re-uses");
837 ers.addEdge(graph.traversal(), gvnf, vnfc, "over-uses");
839 Introspector relData = loader.introspectorFromName("relationship-data");
840 relData.setValue("relationship-key", "vnfc.vnfc-name");
841 relData.setValue("relationship-value", "a-name");
842 Introspector relationship = loader.introspectorFromName("relationship");
843 relationship.setValue("related-to", "vnfc");
844 relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
845 relationship.setValue("relationship-data",relData);
846 relationship.setValue("relationship-label", "NA");
848 thrown.expect(AAIException.class);
849 thrown.expectMessage("no COUSIN edge rule between generic-vnf and vnfc with label NA");
850 localDbser.deleteEdge(relationship, gvnf);
854 public void serializeToDbWithLabelTest() 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", "aai-uri", "/network/vnfcs/vnfc/a-name");
863 Introspector relationship = loader.introspectorFromName("relationship");
864 relationship.setValue("related-to", "vnfc");
865 relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
866 relationship.setValue("relationship-label", "re-uses");
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 assertFalse("generic-vnf has no edge re-uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("uses").hasNext());
882 assertFalse("vnfc has no edge re-uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("uses").hasNext());
883 assertTrue("generic-vnf has edge re-uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("re-uses").hasNext());
884 assertTrue("vnfc has edge re-uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("re-uses").hasNext());
885 assertFalse("generic-vnf has no edge re-uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("over-uses").hasNext());
886 assertFalse("vnfc has no edge re-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 serializeToDbWithoutLabelTest() 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", "aai-uri", "/network/vnfcs/vnfc/a-name");
902 Introspector relationship = loader.introspectorFromName("relationship");
903 relationship.setValue("related-to", "vnfc");
904 relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
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 localDbser.serializeToDb(gvnfObj, gvnf, uriQuery, null, "test");
918 assertTrue("vertex with vnf-id myvnf exists", engine.tx().traversal().V().has("vnf-id", "myvnf").hasNext());
919 assertTrue("vertex with vnfc-name a-name exists", engine.tx().traversal().V().has("vnfc-name", "a-name").hasNext());
920 assertTrue("generic-vnf has edge uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("uses").hasNext());
921 assertTrue("vnfc has edge uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("uses").hasNext());
922 assertFalse("generic-vnf has no edge re-uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("re-uses").hasNext());
923 assertFalse("vnfc has no edge re-uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("re-uses").hasNext());
924 assertFalse("generic-vnf has no edge over-uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("over-uses").hasNext());
925 assertFalse("vnfc has no edge over-uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("over-uses").hasNext());
926 assertEquals("Number of edges between vertexes is 1", Long.valueOf(1), engine.tx().traversal().V().has("vnfc-name", "a-name").both().count().next());
927 assertEquals("Number of edges between vertexes is 1", Long.valueOf(1), engine.tx().traversal().V().has("vnf-id", "myvnf").both().count().next());
932 public void serializeToDbWithInvalidLabelTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, URISyntaxException {
934 EdgeRules ers = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
935 DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules(ers);
937 engine.startTransaction();
939 engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name", "aai-uri", "/network/vnfcs/vnfc/a-name");
941 Introspector relationship = loader.introspectorFromName("relationship");
942 relationship.setValue("related-to", "vnfc");
943 relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
944 relationship.setValue("relationship-label", "NA");
945 Introspector relationshipList = loader.introspectorFromName("relationship-list");
946 relationshipList.setValue("relationship", Collections.singletonList(relationship.getUnderlyingObject()));
948 Introspector gvnfObj = loader.introspectorFromName("generic-vnf");
949 Vertex gvnf = localDbser.createNewVertex(gvnfObj);
950 gvnfObj.setValue("relationship-list", relationshipList.getUnderlyingObject());
951 gvnfObj.setValue("vnf-id", "myvnf");
953 QueryParser uriQuery = dbEngine.getQueryBuilder().createQueryFromURI(new URI("/network/generic-vnfs/generic-vnf/myvnf"));
955 thrown.expect(AAIException.class);
956 thrown.expectMessage("No EdgeRule found for passed nodeTypes: generic-vnf, vnfc with label NA.");
957 localDbser.serializeToDb(gvnfObj, gvnf, uriQuery, null, "test");
962 public void serializeToDbWithLabelAndEdgeExistsTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, URISyntaxException {
964 EdgeRules ers = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
965 DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules(ers);
967 engine.startTransaction();
968 engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name", "aai-uri", "/network/vnfcs/vnfc/a-name");
970 Introspector relationship;
971 Introspector relationshipList;
972 List<Object> relList = new ArrayList<>();
974 // create generic-vnf
975 Introspector gvnfObj = loader.introspectorFromName("generic-vnf");
976 Vertex gvnf = localDbser.createNewVertex(gvnfObj);
977 gvnfObj.setValue("vnf-id", "myvnf");
978 QueryParser uriQuery = dbEngine.getQueryBuilder().createQueryFromURI(new URI("/network/generic-vnfs/generic-vnf/myvnf"));
980 // create relationship to vnfc
981 relationship = loader.introspectorFromName("relationship");
982 relationship.setValue("related-to", "vnfc");
983 relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
984 relList.add(relationship.getUnderlyingObject());
985 relationshipList = loader.introspectorFromName("relationship-list");
986 relationshipList.setValue("relationship", relList);
987 gvnfObj.setValue("relationship-list", relationshipList.getUnderlyingObject());
990 localDbser.serializeToDb(gvnfObj, gvnf, uriQuery, null, "test");
992 // add second relationship
993 relationship = loader.introspectorFromName("relationship");
994 relationship.setValue("related-to", "vnfc");
995 relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
996 relationship.setValue("relationship-label", "re-uses");
997 relList.add(relationship.getUnderlyingObject());
998 relationshipList = loader.introspectorFromName("relationship-list");
999 relationshipList.setValue("relationship", relList);
1000 gvnfObj.setValue("relationship-list", relationshipList.getUnderlyingObject());
1002 localDbser.serializeToDb(gvnfObj, gvnf, uriQuery, null, "test");
1004 assertTrue("vertex with vnf-id myvnf exists", engine.tx().traversal().V().has("vnf-id", "myvnf").hasNext());
1005 assertTrue("vertex with vnfc-name a-name exists", engine.tx().traversal().V().has("vnfc-name", "a-name").hasNext());
1006 assertTrue("generic-vnf has edge uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("uses").hasNext());
1007 assertTrue("vnfc has edge uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("uses").hasNext());
1008 assertTrue("generic-vnf has edge re-uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("re-uses").hasNext());
1009 assertTrue("vnfc has edge re-uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("re-uses").hasNext());
1010 assertFalse("generic-vnf has no edge over-uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("over-uses").hasNext());
1011 assertFalse("vnfc has no edge over-uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("over-uses").hasNext());
1012 assertEquals("Number of edges between vertexes is 2", Long.valueOf(2), engine.tx().traversal().V().has("vnfc-name", "a-name").both().count().next());
1013 assertEquals("Number of edges between vertexes is 2", Long.valueOf(2), engine.tx().traversal().V().has("vnf-id", "myvnf").both().count().next());
1018 public void serializeToDbWithLabelDroppingRelationshipTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, URISyntaxException {
1020 EdgeRules ers = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json");
1021 DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules(ers);
1023 engine.startTransaction();
1024 engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name", "aai-uri", "/network/vnfcs/vnfc/a-name");
1027 Introspector relationship;
1028 Introspector relationshipList;
1029 List<Object> relList = new ArrayList<>();
1031 // create generic-vnf
1032 Introspector gvnfObj = loader.introspectorFromName("generic-vnf");
1033 Vertex gvnf = localDbser.createNewVertex(gvnfObj);
1034 gvnfObj.setValue("vnf-id", "myvnf");
1035 QueryParser uriQuery = dbEngine.getQueryBuilder().createQueryFromURI(new URI("/network/generic-vnfs/generic-vnf/myvnf"));
1037 // create relationship to vnfc
1038 relationship = loader.introspectorFromName("relationship");
1039 relationship.setValue("related-to", "vnfc");
1040 relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
1041 relList.add(relationship.getUnderlyingObject());
1042 // add second relationship
1043 relationship = loader.introspectorFromName("relationship");
1044 relationship.setValue("related-to", "vnfc");
1045 relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
1046 relationship.setValue("relationship-label", "re-uses");
1047 relList.add(relationship.getUnderlyingObject());
1048 relationshipList = loader.introspectorFromName("relationship-list");
1049 relationshipList.setValue("relationship", relList);
1050 gvnfObj.setValue("relationship-list", relationshipList.getUnderlyingObject());
1052 // add gvnf to graph
1053 localDbser.serializeToDb(gvnfObj, gvnf, uriQuery, null, "test");
1055 // drop second relationship
1057 relationshipList = loader.introspectorFromName("relationship-list");
1058 relationshipList.setValue("relationship", relList);
1059 gvnfObj.setValue("relationship-list", relationshipList.getUnderlyingObject());
1061 localDbser.serializeToDb(gvnfObj, gvnf, uriQuery, null, "test");
1063 assertTrue("vertex with vnf-id myvnf exists", engine.tx().traversal().V().has("vnf-id", "myvnf").hasNext());
1064 assertTrue("vertex with vnfc-name a-name exists", engine.tx().traversal().V().has("vnfc-name", "a-name").hasNext());
1065 assertTrue("generic-vnf has edge uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("uses").hasNext());
1066 assertTrue("vnfc has edge uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("uses").hasNext());
1067 assertFalse("generic-vnf no longer has edge re-uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("re-uses").hasNext());
1068 assertFalse("vnfc no longer has edge re-uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("re-uses").hasNext());
1069 assertFalse("generic-vnf has no edge over-uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("over-uses").hasNext());
1070 assertFalse("vnfc has no edge over-uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("over-uses").hasNext());
1071 assertEquals("Number of edges between vertexes is 1", Long.valueOf(1), engine.tx().traversal().V().has("vnfc-name", "a-name").both().count().next());
1072 assertEquals("Number of edges between vertexes is 1", Long.valueOf(1), engine.tx().traversal().V().has("vnf-id", "myvnf").both().count().next());
1076 private DBSerializer getDBSerializerWithSpecificEdgeRules(EdgeRules ers)
1077 throws NoSuchFieldException, AAIException, IllegalAccessException {
1078 // reflection to set the edge rules to the test one for DBSerializer
1079 Field reader = DBSerializer.class.getDeclaredField("edgeRules");
1080 reader.setAccessible(true);
1081 DBSerializer localDbser = new DBSerializer(Version.getLatest(), engine, introspectorFactoryType, "AAI-TEST");
1082 reader.set(localDbser, ers);
1087 public void addRelatedToPropertyTest() throws AAIException {
1088 Loader loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.v11);
1089 Introspector gv = loader.introspectorFromName("generic-vnf");
1090 gv.setValue("vnf-name", "myname");
1091 Introspector rel = loader.introspectorFromName("relationship");
1092 DBSerializer dbser = new DBSerializer(Version.v11, dbEngine,
1093 ModelType.MOXY, "AAI-TEST");
1095 dbser.addRelatedToProperty(rel, gv);
1096 List<Introspector> relToProps = rel.getWrappedListValue("related-to-property");
1097 assertTrue(relToProps.size() == 1);
1098 Introspector relToProp = relToProps.get(0);
1099 assertTrue("generic-vnf.vnf-name".equals(relToProp.getValue("property-key")));
1100 assertTrue("myname".equals(relToProp.getValue("property-value")));
1104 public void dbToObjectContainerMismatchTest() throws AAIException, UnsupportedEncodingException {
1105 DBSerializer dbser = new DBSerializer(Version.v11, dbEngine,
1106 ModelType.MOXY, "AAI-TEST");
1108 Graph vertexMaker = TinkerGraph.open();
1109 Vertex a = vertexMaker.addVertex(T.id, "0");
1110 Vertex b = vertexMaker.addVertex(T.id, "1");
1111 List<Vertex> vertices = Arrays.asList(a,b);
1113 Loader loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.v11);
1114 Introspector intro = loader.introspectorFromName("image"); //just need any non-container object
1116 thrown.expect(AAIException.class);
1117 thrown.expectMessage("query object mismatch: this object cannot hold multiple items.");
1119 dbser.dbToObject(vertices, intro, Integer.MAX_VALUE, true, "doesn't matter");
1123 public void dbToObjectTest() throws AAIException, UnsupportedEncodingException {
1124 engine.startTransaction();
1126 DBSerializer dbser = new DBSerializer(Version.getLatest(), engine,
1127 ModelType.MOXY, "AAI-TEST");
1129 Vertex gv1 = engine.tx().addVertex("aai-node-type", "generic-vnf", "vnf-id", "id1");
1130 Vertex gv2 = engine.tx().addVertex("aai-node-type", "generic-vnf", "vnf-id", "id2");
1131 List<Vertex> vertices = Arrays.asList(gv1, gv2);
1133 Loader loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.getLatest());
1134 Introspector gvContainer = loader.introspectorFromName("generic-vnfs");
1136 Introspector res = dbser.dbToObject(vertices, gvContainer, 0, true, "true");
1137 List<Introspector> gvs = res.getWrappedListValue("generic-vnf");
1138 assertTrue(gvs.size() == 2);
1139 for (Introspector i : gvs) {
1140 String vnfId = i.getValue("vnf-id");
1141 assertTrue("id1".equals(vnfId) || "id2".equals(vnfId));
1148 public void getEdgeBetweenNoLabelTest() throws AAIException {
1149 DBSerializer dbser = new DBSerializer(Version.getLatest(), engine,
1150 ModelType.MOXY, "AAI-TEST");
1152 engine.startTransaction();
1153 Vertex gv = engine.tx().addVertex("aai-node-type", "generic-vnf", "vnf-id", "id1");
1154 Vertex lint = engine.tx().addVertex("aai-node-type", "l-interface", "interface-name", "name1");
1155 rules.addTreeEdge(engine.tx().traversal(), gv, lint);
1157 Edge res = dbser.getEdgeBetween(EdgeType.TREE, gv, lint);
1158 assertEquals("org.onap.relationships.inventory.BelongsTo", res.label());
1163 public void deleteItemsWithTraversal() throws AAIException {
1164 DBSerializer dbser = new DBSerializer(Version.getLatest(), engine,
1165 ModelType.MOXY, "AAI-TEST");
1167 engine.startTransaction();
1168 Vertex gv = engine.tx().addVertex("aai-node-type", "generic-vnf", "vnf-id", "id1");
1169 Vertex lint = engine.tx().addVertex("aai-node-type", "l-interface", "interface-name", "name1");
1171 assertTrue(engine.tx().traversal().V().has("vnf-id", "id1").hasNext());
1172 assertTrue(engine.tx().traversal().V().has("interface-name", "name1").hasNext());
1174 dbser.deleteItemsWithTraversal(Arrays.asList(gv, lint));
1176 assertTrue(!engine.tx().traversal().V().has("vnf-id", "id1").hasNext());
1177 assertTrue(!engine.tx().traversal().V().has("interface-name", "name1").hasNext());
1183 public void serializeToDbWithParentTest() throws AAIException, UnsupportedEncodingException, URISyntaxException {
1184 DBSerializer dbser = new DBSerializer(Version.getLatest(), engine,
1185 ModelType.MOXY, "AAI-TEST");
1187 engine.startTransaction();
1188 Vertex gv = engine.tx().addVertex("aai-node-type", "generic-vnf", "vnf-id", "id1", "aai-uri", "/network/generic-vnfs/generic-vnf/id1");
1189 Vertex lint = engine.tx().addVertex("aai-node-type", "l-interface");
1190 rules.addTreeEdge(engine.tx().traversal(), gv, lint);
1192 Introspector lintIntro = loader.introspectorFromName("l-interface");
1193 lintIntro.setValue("interface-name", "name1");
1194 lintIntro.setValue("interface-role", "actor");
1195 URI lintURI = new URI("/network/generic-vnfs/generic-vnf/id1/l-interfaces/l-interface/name1");
1196 QueryParser uriQuery = engine.getQueryBuilder(gv).createQueryFromURI(lintURI);
1197 dbser.serializeToDb(lintIntro, lint, uriQuery, "test-identifier", "AAI-TEST");
1199 assertTrue(engine.tx().traversal().V(lint).has("interface-role", "actor").hasNext());
1205 public void getLatestVersionViewTest() throws AAIException, UnsupportedEncodingException {
1206 DBSerializer dbser = new DBSerializer(Version.getLatest(), engine,
1207 ModelType.MOXY, "AAI-TEST");
1209 engine.startTransaction();
1210 Vertex phys = engine.tx().addVertex("aai-node-type", "physical-link", "link-name", "zaldo",
1211 "speed-value", "very-fast", "service-provider-bandwidth-up-units", "things");
1213 Introspector res = dbser.getLatestVersionView(phys);
1214 assertTrue("zaldo".equals(res.getValue("link-name")));
1215 assertTrue("very-fast".equals(res.getValue("speed-value")));
1216 assertTrue("things".equals(res.getValue("service-provider-bandwidth-up-units")));