AAI-1523 Batch reformat aai-core
[aai/aai-common.git] / aai-core / src / test / java / org / onap / aai / serialization / db / DbSerializer_needsFakeRulesTest.java
index 1ddef28..808dd63 100644 (file)
  * limitations under the License.
  * ============LICENSE_END=========================================================
  */
+
 package org.onap.aai.serialization.db;
 
-import org.onap.aai.config.ConfigConfiguration;
-import org.onap.aai.setup.SchemaVersion;
-import org.onap.aai.setup.SchemaVersions;
-import org.onap.aai.util.AAIConstants;
-import org.janusgraph.core.JanusGraphFactory;
+import static org.junit.Assert.*;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.*;
+
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
 import org.apache.tinkerpop.gremlin.structure.*;
+import org.janusgraph.core.JanusGraphFactory;
 import org.junit.*;
 import org.junit.rules.ExpectedException;
 import org.junit.runner.RunWith;
+import org.onap.aai.config.ConfigConfiguration;
 import org.onap.aai.config.IntrospectionConfig;
 import org.onap.aai.config.SpringContextAware;
 import org.onap.aai.db.props.AAIProperties;
@@ -38,609 +45,678 @@ import org.onap.aai.exceptions.AAIException;
 import org.onap.aai.introspection.*;
 import org.onap.aai.nodes.NodeIngestor;
 import org.onap.aai.parsers.query.QueryParser;
-import org.onap.aai.serialization.engines.QueryStyle;
 import org.onap.aai.serialization.engines.JanusGraphDBEngine;
+import org.onap.aai.serialization.engines.QueryStyle;
 import org.onap.aai.serialization.engines.TransactionalGraphEngine;
 import org.onap.aai.serialization.queryformats.QueryFormatTestHelper;
 import org.onap.aai.setup.SchemaLocationsBean;
+import org.onap.aai.setup.SchemaVersion;
+import org.onap.aai.setup.SchemaVersions;
+import org.onap.aai.util.AAIConstants;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.TestPropertySource;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
-import java.io.UnsupportedEncodingException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.*;
-
-import static org.junit.Assert.*;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.when;
-
 //@RunWith(value = Parameterized.class) TODO replace this functionality
 @RunWith(SpringJUnit4ClassRunner.class)
-@ContextConfiguration(classes = {
-               ConfigConfiguration.class,
-               AAICoreFakeEdgesConfigTranslator.class,
-               NodeIngestor.class,
-               EdgeIngestor.class,
-               EdgeSerializer.class,
-               SpringContextAware.class,
-               IntrospectionConfig.class
-})
-@TestPropertySource(properties = {
-    "schema.translator.list = config",
-    "schema.nodes.location=src/test/resources/onap/oxm",
-    "schema.edges.location=src/test/resources/onap/dbedgerules"
-})
+@ContextConfiguration(
+        classes = {ConfigConfiguration.class, AAICoreFakeEdgesConfigTranslator.class, NodeIngestor.class,
+                EdgeIngestor.class, EdgeSerializer.class, SpringContextAware.class, IntrospectionConfig.class})
+@TestPropertySource(
+        properties = {"schema.translator.list = config", "schema.nodes.location=src/test/resources/onap/oxm",
+                "schema.edges.location=src/test/resources/onap/dbedgerules"})
 public class DbSerializer_needsFakeRulesTest {
 
-       //to use, set thrown.expect to whatever your test needs
-       //this line establishes default of expecting no exception to be thrown
-       @Rule
-       public ExpectedException thrown = ExpectedException.none();
-
-       protected static Graph graph;
-
-       @Autowired
-       protected EdgeSerializer edgeSer;
-       @Autowired
-       protected EdgeIngestor ei;
-       @Autowired
-       protected SchemaVersions schemaVersions;
-
-       private SchemaVersion version;
-       private final ModelType introspectorFactoryType = ModelType.MOXY;
-       private final DBConnectionType type = DBConnectionType.REALTIME;
-       private Loader loader;
-       private TransactionalGraphEngine dbEngine;
-       private TransactionalGraphEngine engine; //for tests that aren't mocking the engine
-       private DBSerializer dbser;
-       TransactionalGraphEngine spy;
-       TransactionalGraphEngine.Admin adminSpy;
-
-       //@Parameterized.Parameter(value = 0)
-       public QueryStyle queryStyle = QueryStyle.TRAVERSAL;
-
-       /*@Parameterized.Parameters(name = "QueryStyle.{0}")
-       public static Collection<Object[]> data() {
-               return Arrays.asList(new Object[][]{
-                               {QueryStyle.TRAVERSAL},
-                               {QueryStyle.TRAVERSAL_URI}
-               });
-       }*/
-
-       @BeforeClass
-       public static void init() throws Exception {
-               graph = JanusGraphFactory.build().set("storage.backend", "inmemory").open();
-               System.setProperty("AJSC_HOME", ".");
+    // to use, set thrown.expect to whatever your test needs
+    // this line establishes default of expecting no exception to be thrown
+    @Rule
+    public ExpectedException thrown = ExpectedException.none();
+
+    protected static Graph graph;
+
+    @Autowired
+    protected EdgeSerializer edgeSer;
+    @Autowired
+    protected EdgeIngestor ei;
+    @Autowired
+    protected SchemaVersions schemaVersions;
+
+    private SchemaVersion version;
+    private final ModelType introspectorFactoryType = ModelType.MOXY;
+    private final DBConnectionType type = DBConnectionType.REALTIME;
+    private Loader loader;
+    private TransactionalGraphEngine dbEngine;
+    private TransactionalGraphEngine engine; // for tests that aren't mocking the engine
+    private DBSerializer dbser;
+    TransactionalGraphEngine spy;
+    TransactionalGraphEngine.Admin adminSpy;
+
+    // @Parameterized.Parameter(value = 0)
+    public QueryStyle queryStyle = QueryStyle.TRAVERSAL;
+
+    /*
+     * @Parameterized.Parameters(name = "QueryStyle.{0}")
+     * public static Collection<Object[]> data() {
+     * return Arrays.asList(new Object[][]{
+     * {QueryStyle.TRAVERSAL},
+     * {QueryStyle.TRAVERSAL_URI}
+     * });
+     * }
+     */
+
+    @BeforeClass
+    public static void init() throws Exception {
+        graph = JanusGraphFactory.build().set("storage.backend", "inmemory").open();
+        System.setProperty("AJSC_HOME", ".");
         System.setProperty("BUNDLECONFIG_DIR", "src/test/resources/bundleconfig-local");
-        QueryFormatTestHelper.setFinalStatic(AAIConstants.class.getField("AAI_HOME_ETC_OXM"), "src/test/resources/bundleconfig-local/etc/oxm/");
+        QueryFormatTestHelper.setFinalStatic(AAIConstants.class.getField("AAI_HOME_ETC_OXM"),
+                "src/test/resources/bundleconfig-local/etc/oxm/");
 
-       }
+    }
 
-       @Before
-       public void setup() throws Exception {
-               //createGraph();
+    @Before
+    public void setup() throws Exception {
+        // createGraph();
         version = schemaVersions.getDefaultVersion();
-               loader = SpringContextAware.getBean(LoaderFactory.class).createLoaderForVersion(introspectorFactoryType, version);
-               dbEngine = new JanusGraphDBEngine(queryStyle, type, loader);
-               spy = spy(dbEngine);
-               adminSpy = spy(dbEngine.asAdmin());
-
-
-               engine = new JanusGraphDBEngine(queryStyle, type, loader);
-               dbser = new DBSerializer(version, engine, introspectorFactoryType, "AAI-TEST");
-       }
-
-       @After
-       public void tearDown() throws Exception {
-           engine.rollback();
-       }
-
-       @AfterClass
-       public static void destroy() throws Exception {
-               graph.close();
-       }
-
-       public void subnetSetup() throws AAIException {
-               /*
-                * This setus up the test graph, For future junits , add more vertices
-                * and edges
-                */
-
-               Vertex l3interipv4addresslist_1 = graph.traversal().addV("aai-node-type", "l3-interface-ipv4-address-list",
-                               "l3-interface-ipv4-address", "l3-interface-ipv4-address-1").next();
-               Vertex subnet_2 = graph.traversal().addV("aai-node-type", "subnet", "subnet-id", "subnet-id-2").next();
-               Vertex l3interipv6addresslist_3 = graph.traversal().addV("aai-node-type", "l3-interface-ipv6-address-list",
-                               "l3-interface-ipv6-address", "l3-interface-ipv6-address-3").next();
-               Vertex subnet_4 = graph.traversal().addV("aai-node-type", "subnet", "subnet-id", "subnet-id-4").next();
-               Vertex subnet_5 = graph.traversal().addV("aai-node-type", "subnet", "subnet-id", "subnet-id-5").next();
-               Vertex l3network_6 = graph.traversal()
-                               .addV("aai-node-type", "l3-network", "network-id", "network-id-6", "network-name", "network-name-6")
-                               .next();
-
-               GraphTraversalSource g = graph.traversal();
-               edgeSer.addEdge(g, l3interipv4addresslist_1, subnet_2);
-               edgeSer.addEdge(g, l3interipv6addresslist_3, subnet_4);
-               edgeSer.addTreeEdge(g, subnet_5, l3network_6);
-       }
-
-       public String testDelete(Vertex v) throws AAIException {
-
-               GraphTraversalSource traversal = graph.traversal();
-               when(spy.asAdmin()).thenReturn(adminSpy);
-               when(adminSpy.getTraversalSource()).thenReturn(traversal);
-               when(adminSpy.getReadOnlyTraversalSource()).thenReturn(traversal);
-
-               String exceptionMessage = "";
-               DBSerializer serializer = new DBSerializer(version, spy, introspectorFactoryType, "AAI_TEST");
-               try {
-                       serializer.delete(v, "resourceVersion", false);
-               } catch (AAIException exception) {
-                       exceptionMessage = exception.getMessage();
-               }
-               return exceptionMessage;
-
-       }
-
-       @Test
-       public void serializeToDbNewVertexAndEdgeAAIUUIDTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, URISyntaxException {
-               String testName = new Object() {}.getClass().getEnclosingMethod().getName();
-               DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules();
-
-               engine.startTransaction();
-
-               engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","vnfc-" + testName, AAIProperties.AAI_URI, "/network/vnfcs/vnfc/vnfc-" + testName);
-
-               Introspector relationship = loader.introspectorFromName("relationship");
-               relationship.setValue("related-to", "vnfc");
-               relationship.setValue("related-link", "/network/vnfcs/vnfc/vnfc-" + testName);
-
-               Introspector relationshipList = loader.introspectorFromName("relationship-list");
-               relationshipList.setValue("relationship", Collections.singletonList(relationship.getUnderlyingObject()));
-
-               Introspector gvnfObj = loader.introspectorFromName("generic-vnf");
-               Vertex gvnf = localDbser.createNewVertex(gvnfObj);
-               gvnfObj.setValue("relationship-list", relationshipList.getUnderlyingObject());
-               gvnfObj.setValue("vnf-id", "vnf-" + testName);
-
-               QueryParser uriQuery = dbEngine.getQueryBuilder().createQueryFromURI(new URI("/network/generic-vnfs/generic-vnf/vnf-" + testName));
-
-               localDbser.serializeToDb(gvnfObj, gvnf, uriQuery, null, "test");
-               assertTrue("Generic-vnf has uuid ", gvnf.property(AAIProperties.AAI_UUID).isPresent());
-               assertTrue("Edge has uuid ", gvnf.edges(Direction.BOTH).next().property(AAIProperties.AAI_UUID).isPresent());
-
-       }
-
-       @Test
-       public void createEdgeWithValidLabelTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
-
-               DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules();
-
-               engine.startTransaction();
-
-               Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf", "aai-uri", "/network/generic-vnfs/generic-vnf/myvnf");
-               Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name", "aai-uri", "/network/vnfcs/vnfc/a-name");
-
-               //sunny day case
-               Introspector relData = loader.introspectorFromName("relationship-data");
-               relData.setValue("relationship-key", "vnfc.vnfc-name");
-               relData.setValue("relationship-value", "a-name");
-               Introspector relationship = loader.introspectorFromName("relationship");
-               relationship.setValue("related-to", "vnfc");
-               relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
-               relationship.setValue("relationship-data",relData);
-               relationship.setValue("relationship-label", "over-uses");
-
-               assertTrue(localDbser.createEdge(relationship, gvnf));
-               assertTrue(engine.tx().traversal().V(gvnf).both("over-uses").hasNext());
-               assertTrue(engine.tx().traversal().V(vnfc).both("over-uses").hasNext());
-
-       }
-
-       @Test
-       public void createEdgeWithValidLabelWhenSameEdgeExistsTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
-
-               DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules();
-               engine.startTransaction();
-
-               Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf", "aai-uri", "/network/generic-vnfs/generic-vnf/myvnf");
-               Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name", "aai-uri", "/network/vnfcs/vnfc/a-name");
-               edgeSer.addEdge(graph.traversal(), gvnf, vnfc, "re-uses");
-
-               Introspector relData = loader.introspectorFromName("relationship-data");
-               relData.setValue("relationship-key", "vnfc.vnfc-name");
-               relData.setValue("relationship-value", "a-name");
-               Introspector relationship = loader.introspectorFromName("relationship");
-               relationship.setValue("related-to", "vnfc");
-               relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
-               relationship.setValue("relationship-data",relData);
-               relationship.setValue("relationship-label", "re-uses");
-
-               assertTrue(localDbser.createEdge(relationship, gvnf));
-               assertTrue(engine.tx().traversal().V(gvnf).both("re-uses").hasNext());
-               assertTrue(engine.tx().traversal().V(vnfc).both("re-uses").hasNext());
-               assertEquals("Number of edges between vertexes is 1", Long.valueOf(1), engine.tx().traversal().V(vnfc).both().count().next());
-
-       }
-
-       @Test
-       public void createEdgeWithValidLabelWhenDiffEdgeExistsTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
-
-               DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules();
-               engine.startTransaction();
-
-               Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf", "aai-uri", "/network/generic-vnfs/generic-vnf/myvnf");
-               Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name", "aai-uri", "/network/vnfcs/vnfc/a-name");
-               edgeSer.addEdge(graph.traversal(), gvnf, vnfc, "uses");
-
-               Introspector relData = loader.introspectorFromName("relationship-data");
-               relData.setValue("relationship-key", "vnfc.vnfc-name");
-               relData.setValue("relationship-value", "a-name");
-               Introspector relationship = loader.introspectorFromName("relationship");
-               relationship.setValue("related-to", "vnfc");
-               relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
-               relationship.setValue("relationship-data",relData);
-               relationship.setValue("relationship-label", "uses");
-               localDbser.createEdge(relationship, gvnf);
-
-               relationship.setValue("relationship-label", "re-uses");
-
-               assertTrue(localDbser.createEdge(relationship, gvnf));
-               assertTrue(engine.tx().traversal().V(gvnf).both("re-uses").hasNext());
-               assertTrue(engine.tx().traversal().V(vnfc).both("re-uses").hasNext());
-               assertTrue(engine.tx().traversal().V(gvnf).both("uses").hasNext());
-               assertTrue(engine.tx().traversal().V(vnfc).both("uses").hasNext());
-               assertEquals("Number of edges between vertexes is 2", Long.valueOf(2), engine.tx().traversal().V(vnfc).both().count().next());
-               assertEquals("Number of edges between vertexes is 2", Long.valueOf(2), engine.tx().traversal().V(gvnf).both().count().next());
-
-       }
-
-       @Test
-       public void createEdgeWithNoLabelTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
-
-               DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules();
-               engine.startTransaction();
-
-               Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf", "aai-uri", "/network/generic-vnfs/generic-vnf/myvnf");
-               Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name", "aai-uri", "/network/vnfcs/vnfc/a-name");
-
-               Introspector relData = loader.introspectorFromName("relationship-data");
-               relData.setValue("relationship-key", "vnfc.vnfc-name");
-               relData.setValue("relationship-value", "a-name");
-               Introspector relationship = loader.introspectorFromName("relationship");
-               relationship.setValue("related-to", "vnfc");
-               relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
-               relationship.setValue("relationship-data",relData);
-               localDbser.createEdge(relationship, gvnf);
-
-               assertTrue(localDbser.createEdge(relationship, gvnf));
-               assertTrue(engine.tx().traversal().V(gvnf).both("uses").hasNext());
-               assertTrue(engine.tx().traversal().V(vnfc).both("uses").hasNext());
-               assertEquals("Number of edges between vertexes is 1", Long.valueOf(1), engine.tx().traversal().V(vnfc).both().count().next());
-               assertEquals("Number of edges between vertexes is 1", Long.valueOf(1), engine.tx().traversal().V(gvnf).both().count().next());
-
-
-       }
-
-       @Test
-       public void deleteEdgeWithNoLabelWhenMultipleExistsTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
-
-               DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules();
-               engine.startTransaction();
-
-               Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf", "aai-uri", "/network/generic-vnfs/generic-vnf/myvnf");
-               Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name", "aai-uri", "/network/vnfcs/vnfc/a-name");
-               edgeSer.addEdge(graph.traversal(), gvnf, vnfc, "uses");
-               edgeSer.addEdge(graph.traversal(), gvnf, vnfc, "re-uses");
-               edgeSer.addEdge(graph.traversal(), gvnf, vnfc, "over-uses");
-
-               Introspector relData = loader.introspectorFromName("relationship-data");
-               relData.setValue("relationship-key", "vnfc.vnfc-name");
-               relData.setValue("relationship-value", "a-name");
-               Introspector relationship = loader.introspectorFromName("relationship");
-               relationship.setValue("related-to", "vnfc");
-               relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
-               relationship.setValue("relationship-data",relData);
-
-               assertTrue(localDbser.deleteEdge(relationship, gvnf));
-               assertFalse("generic-vnf has no edge uses", engine.tx().traversal().V(gvnf).both("uses").hasNext());
-               assertFalse("vnfc has no edge uses", engine.tx().traversal().V(vnfc).both("uses").hasNext());
-               assertTrue("generic-vnf has edge re-uses", engine.tx().traversal().V(gvnf).both("re-uses").hasNext());
-               assertTrue("vnfc has edge re-uses", engine.tx().traversal().V(vnfc).both("re-uses").hasNext());
-               assertTrue("generic-vnf has edge re-uses", engine.tx().traversal().V(gvnf).both("over-uses").hasNext());
-               assertTrue("vnfc has edge re-uses", engine.tx().traversal().V(vnfc).both("over-uses").hasNext());
-               assertEquals("Number of edges between vertexes is 2", Long.valueOf(2), engine.tx().traversal().V(vnfc).both().count().next());
-               assertEquals("Number of edges between vertexes is 2", Long.valueOf(2), engine.tx().traversal().V(gvnf).both().count().next());
-
-       }
-
-       @Test
-       public void deleteEdgeWithValidLabelWhenMultipleExistsTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
-
-               DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules();
-
-               engine.startTransaction();
-
-               Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf", "aai-uri", "/network/generic-vnfs/generic-vnf/myvnf");
-               Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name", "aai-uri", "/network/vnfcs/vnfc/a-name");
-               edgeSer.addEdge(graph.traversal(), gvnf, vnfc, "uses");
-               edgeSer.addEdge(graph.traversal(), gvnf, vnfc, "re-uses");
-               edgeSer.addEdge(graph.traversal(), gvnf, vnfc, "over-uses");
-
-               Introspector relData = loader.introspectorFromName("relationship-data");
-               relData.setValue("relationship-key", "vnfc.vnfc-name");
-               relData.setValue("relationship-value", "a-name");
-               Introspector relationship = loader.introspectorFromName("relationship");
-               relationship.setValue("related-to", "vnfc");
-               relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
-               relationship.setValue("relationship-data",relData);
-               relationship.setValue("relationship-label", "re-uses");
-
-               assertTrue(localDbser.deleteEdge(relationship, gvnf));
-               assertTrue("generic-vnf has edge uses", engine.tx().traversal().V(gvnf).both("uses").hasNext());
-               assertTrue("vnfc has edge uses", engine.tx().traversal().V(vnfc).both("uses").hasNext());
-               assertFalse("generic-vnf has no edge re-uses", engine.tx().traversal().V(gvnf).both("re-uses").hasNext());
-               assertFalse("vnfc has no edge re-uses", engine.tx().traversal().V(vnfc).both("re-uses").hasNext());
-               assertTrue("generic-vnf has edge re-uses", engine.tx().traversal().V(gvnf).both("over-uses").hasNext());
-               assertTrue("vnfc has edge re-uses", engine.tx().traversal().V(vnfc).both("over-uses").hasNext());
-               assertEquals("Number of edges between vertexes is 2", Long.valueOf(2), engine.tx().traversal().V(vnfc).both().count().next());
-               assertEquals("Number of edges between vertexes is 2", Long.valueOf(2), engine.tx().traversal().V(gvnf).both().count().next());
-
-       }
-
-       @Test
-       public void deleteEdgeWithValidInvalidLabelWhenMultipleExistsTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
-
-               DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules();
-
-               engine.startTransaction();
-
-               Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf", "aai-uri", "/network/generic-vnfs/generic-vnf/myvnf");
-               Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name", "aai-uri", "/network/vnfcs/vnfc/a-name");
-               edgeSer.addEdge(graph.traversal(), gvnf, vnfc, "uses");
-               edgeSer.addEdge(graph.traversal(), gvnf, vnfc, "re-uses");
-               edgeSer.addEdge(graph.traversal(), gvnf, vnfc, "over-uses");
-
-               Introspector relData = loader.introspectorFromName("relationship-data");
-               relData.setValue("relationship-key", "vnfc.vnfc-name");
-               relData.setValue("relationship-value", "a-name");
-               Introspector relationship = loader.introspectorFromName("relationship");
-               relationship.setValue("related-to", "vnfc");
-               relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
-               relationship.setValue("relationship-data",relData);
-               relationship.setValue("relationship-label", "NA");
-
-               thrown.expect(AAIException.class);
-               thrown.expectMessage("No rule found");
-               thrown.expectMessage("node type: generic-vnf, node type: vnfc, label: NA, type: COUSIN");
-               localDbser.deleteEdge(relationship, gvnf);
-       }
-
-       @Test
-       public void serializeToDbWithLabelTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, URISyntaxException {
-
-               DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules();
-
-               engine.startTransaction();
-
-               engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name", "aai-uri", "/network/vnfcs/vnfc/a-name");
-
-               Introspector relationship = loader.introspectorFromName("relationship");
-               relationship.setValue("related-to", "vnfc");
-               relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
-               relationship.setValue("relationship-label", "re-uses");
-               Introspector relationshipList = loader.introspectorFromName("relationship-list");
-               relationshipList.setValue("relationship", Collections.singletonList(relationship.getUnderlyingObject()));
-
-               Introspector gvnfObj = loader.introspectorFromName("generic-vnf");
-               Vertex gvnf = localDbser.createNewVertex(gvnfObj);
-               gvnfObj.setValue("relationship-list", relationshipList.getUnderlyingObject());
-               gvnfObj.setValue("vnf-id", "myvnf");
-
-               QueryParser uriQuery = dbEngine.getQueryBuilder().createQueryFromURI(new URI("/network/generic-vnfs/generic-vnf/myvnf"));
-
-               localDbser.serializeToDb(gvnfObj, gvnf, uriQuery, null, "test");
-
-               assertTrue("vertex with vnf-id myvnf exists", engine.tx().traversal().V().has("vnf-id", "myvnf").hasNext());
-               assertTrue("vertex with vnfc-name a-name exists", engine.tx().traversal().V().has("vnfc-name", "a-name").hasNext());
-               assertFalse("generic-vnf has no edge re-uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("uses").hasNext());
-               assertFalse("vnfc has no edge re-uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("uses").hasNext());
-               assertTrue("generic-vnf has edge re-uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("re-uses").hasNext());
-               assertTrue("vnfc has edge re-uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("re-uses").hasNext());
-               assertFalse("generic-vnf has no edge re-uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("over-uses").hasNext());
-               assertFalse("vnfc has no edge re-uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("over-uses").hasNext());
-               assertEquals("Number of edges between vertexes is 1", Long.valueOf(1), engine.tx().traversal().V().has("vnfc-name", "a-name").both().count().next());
-               assertEquals("Number of edges between vertexes is 1", Long.valueOf(1), engine.tx().traversal().V().has("vnf-id", "myvnf").both().count().next());
-
-       }
-
-       @Test
-       public void serializeToDbWithoutLabelTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, URISyntaxException {
-
-               DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules();
-
-               engine.startTransaction();
-
-               engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name", "aai-uri", "/network/vnfcs/vnfc/a-name");
-
-               Introspector relationship = loader.introspectorFromName("relationship");
-               relationship.setValue("related-to", "vnfc");
-               relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
-
-               Introspector relationshipList = loader.introspectorFromName("relationship-list");
-               relationshipList.setValue("relationship", Collections.singletonList(relationship.getUnderlyingObject()));
-
-               Introspector gvnfObj = loader.introspectorFromName("generic-vnf");
-               Vertex gvnf = localDbser.createNewVertex(gvnfObj);
-               gvnfObj.setValue("relationship-list", relationshipList.getUnderlyingObject());
-               gvnfObj.setValue("vnf-id", "myvnf");
-
-               QueryParser uriQuery = dbEngine.getQueryBuilder().createQueryFromURI(new URI("/network/generic-vnfs/generic-vnf/myvnf"));
-
-               localDbser.serializeToDb(gvnfObj, gvnf, uriQuery, null, "test");
-
-               assertTrue("vertex with vnf-id myvnf exists", engine.tx().traversal().V().has("vnf-id", "myvnf").hasNext());
-               assertTrue("vertex with vnfc-name a-name exists", engine.tx().traversal().V().has("vnfc-name", "a-name").hasNext());
-               assertTrue("generic-vnf has edge uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("uses").hasNext());
-               assertTrue("vnfc has edge uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("uses").hasNext());
-               assertFalse("generic-vnf has no edge re-uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("re-uses").hasNext());
-               assertFalse("vnfc has no edge re-uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("re-uses").hasNext());
-               assertFalse("generic-vnf has no edge over-uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("over-uses").hasNext());
-               assertFalse("vnfc has no edge over-uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("over-uses").hasNext());
-               assertEquals("Number of edges between vertexes is 1", Long.valueOf(1), engine.tx().traversal().V().has("vnfc-name", "a-name").both().count().next());
-               assertEquals("Number of edges between vertexes is 1", Long.valueOf(1), engine.tx().traversal().V().has("vnf-id", "myvnf").both().count().next());
-
-       }
-
-       @Test
-       public void serializeToDbWithInvalidLabelTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, URISyntaxException {
-
-               DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules();
-
-               engine.startTransaction();
-
-               engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name", "aai-uri", "/network/vnfcs/vnfc/a-name");
-
-               Introspector relationship = loader.introspectorFromName("relationship");
-               relationship.setValue("related-to", "vnfc");
-               relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
-               relationship.setValue("relationship-label", "NA");
-               Introspector relationshipList = loader.introspectorFromName("relationship-list");
-               relationshipList.setValue("relationship", Collections.singletonList(relationship.getUnderlyingObject()));
-
-               Introspector gvnfObj = loader.introspectorFromName("generic-vnf");
-               Vertex gvnf = localDbser.createNewVertex(gvnfObj);
-               gvnfObj.setValue("relationship-list", relationshipList.getUnderlyingObject());
-               gvnfObj.setValue("vnf-id", "myvnf");
-
-               QueryParser uriQuery = dbEngine.getQueryBuilder().createQueryFromURI(new URI("/network/generic-vnfs/generic-vnf/myvnf"));
-
-               thrown.expect(AAIException.class);
-               thrown.expectMessage("No EdgeRule found for passed nodeTypes: generic-vnf, vnfc with label NA.");
-               localDbser.serializeToDb(gvnfObj, gvnf, uriQuery, null, "test");
-
-       }
-
-       @Test
-       public void serializeToDbWithLabelAndEdgeExistsTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, URISyntaxException {
-
-               DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules();
-
-               engine.startTransaction();
-               engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name", "aai-uri", "/network/vnfcs/vnfc/a-name");
-
-               Introspector relationship;
-               Introspector relationshipList;
-               List<Object> relList = new ArrayList<>();
-
-               // create generic-vnf
-               Introspector gvnfObj = loader.introspectorFromName("generic-vnf");
-               Vertex gvnf = localDbser.createNewVertex(gvnfObj);
-               gvnfObj.setValue("vnf-id", "myvnf");
-               QueryParser uriQuery = dbEngine.getQueryBuilder().createQueryFromURI(new URI("/network/generic-vnfs/generic-vnf/myvnf"));
-
-               // create relationship to vnfc
-               relationship = loader.introspectorFromName("relationship");
-               relationship.setValue("related-to", "vnfc");
-               relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
-               relList.add(relationship.getUnderlyingObject());
-               relationshipList = loader.introspectorFromName("relationship-list");
-               relationshipList.setValue("relationship", relList);
-               gvnfObj.setValue("relationship-list", relationshipList.getUnderlyingObject());
-
-               // add gvnf to graph
-               localDbser.serializeToDb(gvnfObj, gvnf, uriQuery, null, "test");
-
-               // add second relationship
-               relationship = loader.introspectorFromName("relationship");
-               relationship.setValue("related-to", "vnfc");
-               relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
-               relationship.setValue("relationship-label", "re-uses");
-               relList.add(relationship.getUnderlyingObject());
-               relationshipList = loader.introspectorFromName("relationship-list");
-               relationshipList.setValue("relationship", relList);
-               gvnfObj.setValue("relationship-list", relationshipList.getUnderlyingObject());
-
-               localDbser.serializeToDb(gvnfObj, gvnf, uriQuery, null, "test");
-
-               assertTrue("vertex with vnf-id myvnf exists", engine.tx().traversal().V().has("vnf-id", "myvnf").hasNext());
-               assertTrue("vertex with vnfc-name a-name exists", engine.tx().traversal().V().has("vnfc-name", "a-name").hasNext());
-               assertTrue("generic-vnf has  edge uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("uses").hasNext());
-               assertTrue("vnfc has  edge uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("uses").hasNext());
-               assertTrue("generic-vnf has edge re-uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("re-uses").hasNext());
-               assertTrue("vnfc has edge re-uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("re-uses").hasNext());
-               assertFalse("generic-vnf has no edge over-uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("over-uses").hasNext());
-               assertFalse("vnfc has no edge over-uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("over-uses").hasNext());
-               assertEquals("Number of edges between vertexes is 2", Long.valueOf(2), engine.tx().traversal().V().has("vnfc-name", "a-name").both().count().next());
-               assertEquals("Number of edges between vertexes is 2", Long.valueOf(2), engine.tx().traversal().V().has("vnf-id", "myvnf").both().count().next());
-
-       }
-
-       @Test
-       public void serializeToDbWithLabelDroppingRelationshipTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, URISyntaxException {
-
-               DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules();
-
-               engine.startTransaction();
-               engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name", "aai-uri", "/network/vnfcs/vnfc/a-name");
-
-
-               Introspector relationship;
-               Introspector relationshipList;
-               List<Object> relList = new ArrayList<>();
-
-               // create generic-vnf
-               Introspector gvnfObj = loader.introspectorFromName("generic-vnf");
-               Vertex gvnf = localDbser.createNewVertex(gvnfObj);
-               gvnfObj.setValue("vnf-id", "myvnf");
-               QueryParser uriQuery = dbEngine.getQueryBuilder().createQueryFromURI(new URI("/network/generic-vnfs/generic-vnf/myvnf"));
-
-               // create relationship to vnfc
-               relationship = loader.introspectorFromName("relationship");
-               relationship.setValue("related-to", "vnfc");
-               relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
-               relList.add(relationship.getUnderlyingObject());
-               // add second relationship
-               relationship = loader.introspectorFromName("relationship");
-               relationship.setValue("related-to", "vnfc");
-               relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
-               relationship.setValue("relationship-label", "re-uses");
-               relList.add(relationship.getUnderlyingObject());
-               relationshipList = loader.introspectorFromName("relationship-list");
-               relationshipList.setValue("relationship", relList);
-               gvnfObj.setValue("relationship-list", relationshipList.getUnderlyingObject());
-
-               // add gvnf to graph
-               localDbser.serializeToDb(gvnfObj, gvnf, uriQuery, null, "test");
-
-               // drop second relationship
-               relList.remove(1);
-               relationshipList = loader.introspectorFromName("relationship-list");
-               relationshipList.setValue("relationship", relList);
-               gvnfObj.setValue("relationship-list", relationshipList.getUnderlyingObject());
-
-               localDbser.serializeToDb(gvnfObj, gvnf, uriQuery, null, "test");
-
-               assertTrue("vertex with vnf-id myvnf exists", engine.tx().traversal().V().has("vnf-id", "myvnf").hasNext());
-               assertTrue("vertex with vnfc-name a-name exists", engine.tx().traversal().V().has("vnfc-name", "a-name").hasNext());
-               assertTrue("generic-vnf has  edge uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("uses").hasNext());
-               assertTrue("vnfc has  edge uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("uses").hasNext());
-               assertFalse("generic-vnf no longer has edge re-uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("re-uses").hasNext());
-               assertFalse("vnfc no longer has edge re-uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("re-uses").hasNext());
-               assertFalse("generic-vnf has no edge over-uses", engine.tx().traversal().V().has("vnf-id", "myvnf").both("over-uses").hasNext());
-               assertFalse("vnfc has no edge over-uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("over-uses").hasNext());
-               assertEquals("Number of edges between vertexes is 1", Long.valueOf(1), engine.tx().traversal().V().has("vnfc-name", "a-name").both().count().next());
-               assertEquals("Number of edges between vertexes is 1", Long.valueOf(1), engine.tx().traversal().V().has("vnf-id", "myvnf").both().count().next());
-
-       }
-
-       private DBSerializer getDBSerializerWithSpecificEdgeRules()
-                       throws NoSuchFieldException, AAIException, IllegalAccessException {
-
-
-               DBSerializer localDbser = new DBSerializer(version, engine, introspectorFactoryType, "AAI-TEST");
-               return localDbser;
-       }
+        loader = SpringContextAware.getBean(LoaderFactory.class).createLoaderForVersion(introspectorFactoryType,
+                version);
+        dbEngine = new JanusGraphDBEngine(queryStyle, type, loader);
+        spy = spy(dbEngine);
+        adminSpy = spy(dbEngine.asAdmin());
+
+        engine = new JanusGraphDBEngine(queryStyle, type, loader);
+        dbser = new DBSerializer(version, engine, introspectorFactoryType, "AAI-TEST");
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        engine.rollback();
+    }
+
+    @AfterClass
+    public static void destroy() throws Exception {
+        graph.close();
+    }
+
+    public void subnetSetup() throws AAIException {
+        /*
+         * This setus up the test graph, For future junits , add more vertices
+         * and edges
+         */
+
+        Vertex l3interipv4addresslist_1 = graph.traversal().addV("aai-node-type", "l3-interface-ipv4-address-list",
+                "l3-interface-ipv4-address", "l3-interface-ipv4-address-1").next();
+        Vertex subnet_2 = graph.traversal().addV("aai-node-type", "subnet", "subnet-id", "subnet-id-2").next();
+        Vertex l3interipv6addresslist_3 = graph.traversal().addV("aai-node-type", "l3-interface-ipv6-address-list",
+                "l3-interface-ipv6-address", "l3-interface-ipv6-address-3").next();
+        Vertex subnet_4 = graph.traversal().addV("aai-node-type", "subnet", "subnet-id", "subnet-id-4").next();
+        Vertex subnet_5 = graph.traversal().addV("aai-node-type", "subnet", "subnet-id", "subnet-id-5").next();
+        Vertex l3network_6 = graph.traversal()
+                .addV("aai-node-type", "l3-network", "network-id", "network-id-6", "network-name", "network-name-6")
+                .next();
+
+        GraphTraversalSource g = graph.traversal();
+        edgeSer.addEdge(g, l3interipv4addresslist_1, subnet_2);
+        edgeSer.addEdge(g, l3interipv6addresslist_3, subnet_4);
+        edgeSer.addTreeEdge(g, subnet_5, l3network_6);
+    }
+
+    public String testDelete(Vertex v) throws AAIException {
+
+        GraphTraversalSource traversal = graph.traversal();
+        when(spy.asAdmin()).thenReturn(adminSpy);
+        when(adminSpy.getTraversalSource()).thenReturn(traversal);
+        when(adminSpy.getReadOnlyTraversalSource()).thenReturn(traversal);
+
+        String exceptionMessage = "";
+        DBSerializer serializer = new DBSerializer(version, spy, introspectorFactoryType, "AAI_TEST");
+        try {
+            serializer.delete(v, "resourceVersion", false);
+        } catch (AAIException exception) {
+            exceptionMessage = exception.getMessage();
+        }
+        return exceptionMessage;
+
+    }
+
+    @Test
+    public void serializeToDbNewVertexAndEdgeAAIUUIDTest()
+            throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException,
+            IllegalArgumentException, IllegalAccessException, URISyntaxException {
+        String testName = new Object() {}.getClass().getEnclosingMethod().getName();
+        DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules();
+
+        engine.startTransaction();
+
+        engine.tx().addVertex("aai-node-type", "vnfc", "vnfc-name", "vnfc-" + testName, AAIProperties.AAI_URI,
+                "/network/vnfcs/vnfc/vnfc-" + testName);
+
+        Introspector relationship = loader.introspectorFromName("relationship");
+        relationship.setValue("related-to", "vnfc");
+        relationship.setValue("related-link", "/network/vnfcs/vnfc/vnfc-" + testName);
+
+        Introspector relationshipList = loader.introspectorFromName("relationship-list");
+        relationshipList.setValue("relationship", Collections.singletonList(relationship.getUnderlyingObject()));
+
+        Introspector gvnfObj = loader.introspectorFromName("generic-vnf");
+        Vertex gvnf = localDbser.createNewVertex(gvnfObj);
+        gvnfObj.setValue("relationship-list", relationshipList.getUnderlyingObject());
+        gvnfObj.setValue("vnf-id", "vnf-" + testName);
+
+        QueryParser uriQuery = dbEngine.getQueryBuilder()
+                .createQueryFromURI(new URI("/network/generic-vnfs/generic-vnf/vnf-" + testName));
+
+        localDbser.serializeToDb(gvnfObj, gvnf, uriQuery, null, "test");
+        assertTrue("Generic-vnf has uuid ", gvnf.property(AAIProperties.AAI_UUID).isPresent());
+        assertTrue("Edge has uuid ", gvnf.edges(Direction.BOTH).next().property(AAIProperties.AAI_UUID).isPresent());
+
+    }
+
+    @Test
+    public void createEdgeWithValidLabelTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException,
+            SecurityException, IllegalArgumentException, IllegalAccessException {
+
+        DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules();
+
+        engine.startTransaction();
+
+        Vertex gvnf = engine.tx().addVertex("aai-node-type", "generic-vnf", "vnf-id", "myvnf", "aai-uri",
+                "/network/generic-vnfs/generic-vnf/myvnf");
+        Vertex vnfc = engine.tx().addVertex("aai-node-type", "vnfc", "vnfc-name", "a-name", "aai-uri",
+                "/network/vnfcs/vnfc/a-name");
+
+        // sunny day case
+        Introspector relData = loader.introspectorFromName("relationship-data");
+        relData.setValue("relationship-key", "vnfc.vnfc-name");
+        relData.setValue("relationship-value", "a-name");
+        Introspector relationship = loader.introspectorFromName("relationship");
+        relationship.setValue("related-to", "vnfc");
+        relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
+        relationship.setValue("relationship-data", relData);
+        relationship.setValue("relationship-label", "over-uses");
+
+        assertTrue(localDbser.createEdge(relationship, gvnf));
+        assertTrue(engine.tx().traversal().V(gvnf).both("over-uses").hasNext());
+        assertTrue(engine.tx().traversal().V(vnfc).both("over-uses").hasNext());
+
+    }
+
+    @Test
+    public void createEdgeWithValidLabelWhenSameEdgeExistsTest() throws AAIException, UnsupportedEncodingException,
+            NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
+
+        DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules();
+        engine.startTransaction();
+
+        Vertex gvnf = engine.tx().addVertex("aai-node-type", "generic-vnf", "vnf-id", "myvnf", "aai-uri",
+                "/network/generic-vnfs/generic-vnf/myvnf");
+        Vertex vnfc = engine.tx().addVertex("aai-node-type", "vnfc", "vnfc-name", "a-name", "aai-uri",
+                "/network/vnfcs/vnfc/a-name");
+        edgeSer.addEdge(graph.traversal(), gvnf, vnfc, "re-uses");
+
+        Introspector relData = loader.introspectorFromName("relationship-data");
+        relData.setValue("relationship-key", "vnfc.vnfc-name");
+        relData.setValue("relationship-value", "a-name");
+        Introspector relationship = loader.introspectorFromName("relationship");
+        relationship.setValue("related-to", "vnfc");
+        relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
+        relationship.setValue("relationship-data", relData);
+        relationship.setValue("relationship-label", "re-uses");
+
+        assertTrue(localDbser.createEdge(relationship, gvnf));
+        assertTrue(engine.tx().traversal().V(gvnf).both("re-uses").hasNext());
+        assertTrue(engine.tx().traversal().V(vnfc).both("re-uses").hasNext());
+        assertEquals("Number of edges between vertexes is 1", Long.valueOf(1),
+                engine.tx().traversal().V(vnfc).both().count().next());
+
+    }
+
+    @Test
+    public void createEdgeWithValidLabelWhenDiffEdgeExistsTest() throws AAIException, UnsupportedEncodingException,
+            NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
+
+        DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules();
+        engine.startTransaction();
+
+        Vertex gvnf = engine.tx().addVertex("aai-node-type", "generic-vnf", "vnf-id", "myvnf", "aai-uri",
+                "/network/generic-vnfs/generic-vnf/myvnf");
+        Vertex vnfc = engine.tx().addVertex("aai-node-type", "vnfc", "vnfc-name", "a-name", "aai-uri",
+                "/network/vnfcs/vnfc/a-name");
+        edgeSer.addEdge(graph.traversal(), gvnf, vnfc, "uses");
+
+        Introspector relData = loader.introspectorFromName("relationship-data");
+        relData.setValue("relationship-key", "vnfc.vnfc-name");
+        relData.setValue("relationship-value", "a-name");
+        Introspector relationship = loader.introspectorFromName("relationship");
+        relationship.setValue("related-to", "vnfc");
+        relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
+        relationship.setValue("relationship-data", relData);
+        relationship.setValue("relationship-label", "uses");
+        localDbser.createEdge(relationship, gvnf);
+
+        relationship.setValue("relationship-label", "re-uses");
+
+        assertTrue(localDbser.createEdge(relationship, gvnf));
+        assertTrue(engine.tx().traversal().V(gvnf).both("re-uses").hasNext());
+        assertTrue(engine.tx().traversal().V(vnfc).both("re-uses").hasNext());
+        assertTrue(engine.tx().traversal().V(gvnf).both("uses").hasNext());
+        assertTrue(engine.tx().traversal().V(vnfc).both("uses").hasNext());
+        assertEquals("Number of edges between vertexes is 2", Long.valueOf(2),
+                engine.tx().traversal().V(vnfc).both().count().next());
+        assertEquals("Number of edges between vertexes is 2", Long.valueOf(2),
+                engine.tx().traversal().V(gvnf).both().count().next());
+
+    }
+
+    @Test
+    public void createEdgeWithNoLabelTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException,
+            SecurityException, IllegalArgumentException, IllegalAccessException {
+
+        DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules();
+        engine.startTransaction();
+
+        Vertex gvnf = engine.tx().addVertex("aai-node-type", "generic-vnf", "vnf-id", "myvnf", "aai-uri",
+                "/network/generic-vnfs/generic-vnf/myvnf");
+        Vertex vnfc = engine.tx().addVertex("aai-node-type", "vnfc", "vnfc-name", "a-name", "aai-uri",
+                "/network/vnfcs/vnfc/a-name");
+
+        Introspector relData = loader.introspectorFromName("relationship-data");
+        relData.setValue("relationship-key", "vnfc.vnfc-name");
+        relData.setValue("relationship-value", "a-name");
+        Introspector relationship = loader.introspectorFromName("relationship");
+        relationship.setValue("related-to", "vnfc");
+        relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
+        relationship.setValue("relationship-data", relData);
+        localDbser.createEdge(relationship, gvnf);
+
+        assertTrue(localDbser.createEdge(relationship, gvnf));
+        assertTrue(engine.tx().traversal().V(gvnf).both("uses").hasNext());
+        assertTrue(engine.tx().traversal().V(vnfc).both("uses").hasNext());
+        assertEquals("Number of edges between vertexes is 1", Long.valueOf(1),
+                engine.tx().traversal().V(vnfc).both().count().next());
+        assertEquals("Number of edges between vertexes is 1", Long.valueOf(1),
+                engine.tx().traversal().V(gvnf).both().count().next());
+
+    }
+
+    @Test
+    public void deleteEdgeWithNoLabelWhenMultipleExistsTest() throws AAIException, UnsupportedEncodingException,
+            NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
+
+        DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules();
+        engine.startTransaction();
+
+        Vertex gvnf = engine.tx().addVertex("aai-node-type", "generic-vnf", "vnf-id", "myvnf", "aai-uri",
+                "/network/generic-vnfs/generic-vnf/myvnf");
+        Vertex vnfc = engine.tx().addVertex("aai-node-type", "vnfc", "vnfc-name", "a-name", "aai-uri",
+                "/network/vnfcs/vnfc/a-name");
+        edgeSer.addEdge(graph.traversal(), gvnf, vnfc, "uses");
+        edgeSer.addEdge(graph.traversal(), gvnf, vnfc, "re-uses");
+        edgeSer.addEdge(graph.traversal(), gvnf, vnfc, "over-uses");
+
+        Introspector relData = loader.introspectorFromName("relationship-data");
+        relData.setValue("relationship-key", "vnfc.vnfc-name");
+        relData.setValue("relationship-value", "a-name");
+        Introspector relationship = loader.introspectorFromName("relationship");
+        relationship.setValue("related-to", "vnfc");
+        relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
+        relationship.setValue("relationship-data", relData);
+
+        assertTrue(localDbser.deleteEdge(relationship, gvnf));
+        assertFalse("generic-vnf has no edge uses", engine.tx().traversal().V(gvnf).both("uses").hasNext());
+        assertFalse("vnfc has no edge uses", engine.tx().traversal().V(vnfc).both("uses").hasNext());
+        assertTrue("generic-vnf has edge re-uses", engine.tx().traversal().V(gvnf).both("re-uses").hasNext());
+        assertTrue("vnfc has edge re-uses", engine.tx().traversal().V(vnfc).both("re-uses").hasNext());
+        assertTrue("generic-vnf has edge re-uses", engine.tx().traversal().V(gvnf).both("over-uses").hasNext());
+        assertTrue("vnfc has edge re-uses", engine.tx().traversal().V(vnfc).both("over-uses").hasNext());
+        assertEquals("Number of edges between vertexes is 2", Long.valueOf(2),
+                engine.tx().traversal().V(vnfc).both().count().next());
+        assertEquals("Number of edges between vertexes is 2", Long.valueOf(2),
+                engine.tx().traversal().V(gvnf).both().count().next());
+
+    }
+
+    @Test
+    public void deleteEdgeWithValidLabelWhenMultipleExistsTest() throws AAIException, UnsupportedEncodingException,
+            NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
+
+        DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules();
+
+        engine.startTransaction();
+
+        Vertex gvnf = engine.tx().addVertex("aai-node-type", "generic-vnf", "vnf-id", "myvnf", "aai-uri",
+                "/network/generic-vnfs/generic-vnf/myvnf");
+        Vertex vnfc = engine.tx().addVertex("aai-node-type", "vnfc", "vnfc-name", "a-name", "aai-uri",
+                "/network/vnfcs/vnfc/a-name");
+        edgeSer.addEdge(graph.traversal(), gvnf, vnfc, "uses");
+        edgeSer.addEdge(graph.traversal(), gvnf, vnfc, "re-uses");
+        edgeSer.addEdge(graph.traversal(), gvnf, vnfc, "over-uses");
+
+        Introspector relData = loader.introspectorFromName("relationship-data");
+        relData.setValue("relationship-key", "vnfc.vnfc-name");
+        relData.setValue("relationship-value", "a-name");
+        Introspector relationship = loader.introspectorFromName("relationship");
+        relationship.setValue("related-to", "vnfc");
+        relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
+        relationship.setValue("relationship-data", relData);
+        relationship.setValue("relationship-label", "re-uses");
+
+        assertTrue(localDbser.deleteEdge(relationship, gvnf));
+        assertTrue("generic-vnf has edge uses", engine.tx().traversal().V(gvnf).both("uses").hasNext());
+        assertTrue("vnfc has edge uses", engine.tx().traversal().V(vnfc).both("uses").hasNext());
+        assertFalse("generic-vnf has no edge re-uses", engine.tx().traversal().V(gvnf).both("re-uses").hasNext());
+        assertFalse("vnfc has no edge re-uses", engine.tx().traversal().V(vnfc).both("re-uses").hasNext());
+        assertTrue("generic-vnf has edge re-uses", engine.tx().traversal().V(gvnf).both("over-uses").hasNext());
+        assertTrue("vnfc has edge re-uses", engine.tx().traversal().V(vnfc).both("over-uses").hasNext());
+        assertEquals("Number of edges between vertexes is 2", Long.valueOf(2),
+                engine.tx().traversal().V(vnfc).both().count().next());
+        assertEquals("Number of edges between vertexes is 2", Long.valueOf(2),
+                engine.tx().traversal().V(gvnf).both().count().next());
+
+    }
+
+    @Test
+    public void deleteEdgeWithValidInvalidLabelWhenMultipleExistsTest()
+            throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException,
+            IllegalArgumentException, IllegalAccessException {
+
+        DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules();
+
+        engine.startTransaction();
+
+        Vertex gvnf = engine.tx().addVertex("aai-node-type", "generic-vnf", "vnf-id", "myvnf", "aai-uri",
+                "/network/generic-vnfs/generic-vnf/myvnf");
+        Vertex vnfc = engine.tx().addVertex("aai-node-type", "vnfc", "vnfc-name", "a-name", "aai-uri",
+                "/network/vnfcs/vnfc/a-name");
+        edgeSer.addEdge(graph.traversal(), gvnf, vnfc, "uses");
+        edgeSer.addEdge(graph.traversal(), gvnf, vnfc, "re-uses");
+        edgeSer.addEdge(graph.traversal(), gvnf, vnfc, "over-uses");
+
+        Introspector relData = loader.introspectorFromName("relationship-data");
+        relData.setValue("relationship-key", "vnfc.vnfc-name");
+        relData.setValue("relationship-value", "a-name");
+        Introspector relationship = loader.introspectorFromName("relationship");
+        relationship.setValue("related-to", "vnfc");
+        relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
+        relationship.setValue("relationship-data", relData);
+        relationship.setValue("relationship-label", "NA");
+
+        thrown.expect(AAIException.class);
+        thrown.expectMessage("No rule found");
+        thrown.expectMessage("node type: generic-vnf, node type: vnfc, label: NA, type: COUSIN");
+        localDbser.deleteEdge(relationship, gvnf);
+    }
+
+    @Test
+    public void serializeToDbWithLabelTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException,
+            SecurityException, IllegalArgumentException, IllegalAccessException, URISyntaxException {
+
+        DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules();
+
+        engine.startTransaction();
+
+        engine.tx().addVertex("aai-node-type", "vnfc", "vnfc-name", "a-name", "aai-uri", "/network/vnfcs/vnfc/a-name");
+
+        Introspector relationship = loader.introspectorFromName("relationship");
+        relationship.setValue("related-to", "vnfc");
+        relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
+        relationship.setValue("relationship-label", "re-uses");
+        Introspector relationshipList = loader.introspectorFromName("relationship-list");
+        relationshipList.setValue("relationship", Collections.singletonList(relationship.getUnderlyingObject()));
+
+        Introspector gvnfObj = loader.introspectorFromName("generic-vnf");
+        Vertex gvnf = localDbser.createNewVertex(gvnfObj);
+        gvnfObj.setValue("relationship-list", relationshipList.getUnderlyingObject());
+        gvnfObj.setValue("vnf-id", "myvnf");
+
+        QueryParser uriQuery =
+                dbEngine.getQueryBuilder().createQueryFromURI(new URI("/network/generic-vnfs/generic-vnf/myvnf"));
+
+        localDbser.serializeToDb(gvnfObj, gvnf, uriQuery, null, "test");
+
+        assertTrue("vertex with vnf-id myvnf exists", engine.tx().traversal().V().has("vnf-id", "myvnf").hasNext());
+        assertTrue("vertex with vnfc-name a-name exists",
+                engine.tx().traversal().V().has("vnfc-name", "a-name").hasNext());
+        assertFalse("generic-vnf has no edge re-uses",
+                engine.tx().traversal().V().has("vnf-id", "myvnf").both("uses").hasNext());
+        assertFalse("vnfc has no edge re-uses",
+                engine.tx().traversal().V().has("vnfc-name", "a-name").both("uses").hasNext());
+        assertTrue("generic-vnf has edge re-uses",
+                engine.tx().traversal().V().has("vnf-id", "myvnf").both("re-uses").hasNext());
+        assertTrue("vnfc has edge re-uses",
+                engine.tx().traversal().V().has("vnfc-name", "a-name").both("re-uses").hasNext());
+        assertFalse("generic-vnf has no edge re-uses",
+                engine.tx().traversal().V().has("vnf-id", "myvnf").both("over-uses").hasNext());
+        assertFalse("vnfc has no edge re-uses",
+                engine.tx().traversal().V().has("vnfc-name", "a-name").both("over-uses").hasNext());
+        assertEquals("Number of edges between vertexes is 1", Long.valueOf(1),
+                engine.tx().traversal().V().has("vnfc-name", "a-name").both().count().next());
+        assertEquals("Number of edges between vertexes is 1", Long.valueOf(1),
+                engine.tx().traversal().V().has("vnf-id", "myvnf").both().count().next());
+
+    }
+
+    @Test
+    public void serializeToDbWithoutLabelTest() throws AAIException, UnsupportedEncodingException, NoSuchFieldException,
+            SecurityException, IllegalArgumentException, IllegalAccessException, URISyntaxException {
+
+        DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules();
+
+        engine.startTransaction();
+
+        engine.tx().addVertex("aai-node-type", "vnfc", "vnfc-name", "a-name", "aai-uri", "/network/vnfcs/vnfc/a-name");
+
+        Introspector relationship = loader.introspectorFromName("relationship");
+        relationship.setValue("related-to", "vnfc");
+        relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
+
+        Introspector relationshipList = loader.introspectorFromName("relationship-list");
+        relationshipList.setValue("relationship", Collections.singletonList(relationship.getUnderlyingObject()));
+
+        Introspector gvnfObj = loader.introspectorFromName("generic-vnf");
+        Vertex gvnf = localDbser.createNewVertex(gvnfObj);
+        gvnfObj.setValue("relationship-list", relationshipList.getUnderlyingObject());
+        gvnfObj.setValue("vnf-id", "myvnf");
+
+        QueryParser uriQuery =
+                dbEngine.getQueryBuilder().createQueryFromURI(new URI("/network/generic-vnfs/generic-vnf/myvnf"));
+
+        localDbser.serializeToDb(gvnfObj, gvnf, uriQuery, null, "test");
+
+        assertTrue("vertex with vnf-id myvnf exists", engine.tx().traversal().V().has("vnf-id", "myvnf").hasNext());
+        assertTrue("vertex with vnfc-name a-name exists",
+                engine.tx().traversal().V().has("vnfc-name", "a-name").hasNext());
+        assertTrue("generic-vnf has edge uses",
+                engine.tx().traversal().V().has("vnf-id", "myvnf").both("uses").hasNext());
+        assertTrue("vnfc has edge uses", engine.tx().traversal().V().has("vnfc-name", "a-name").both("uses").hasNext());
+        assertFalse("generic-vnf has no edge re-uses",
+                engine.tx().traversal().V().has("vnf-id", "myvnf").both("re-uses").hasNext());
+        assertFalse("vnfc has no edge re-uses",
+                engine.tx().traversal().V().has("vnfc-name", "a-name").both("re-uses").hasNext());
+        assertFalse("generic-vnf has no edge over-uses",
+                engine.tx().traversal().V().has("vnf-id", "myvnf").both("over-uses").hasNext());
+        assertFalse("vnfc has no edge over-uses",
+                engine.tx().traversal().V().has("vnfc-name", "a-name").both("over-uses").hasNext());
+        assertEquals("Number of edges between vertexes is 1", Long.valueOf(1),
+                engine.tx().traversal().V().has("vnfc-name", "a-name").both().count().next());
+        assertEquals("Number of edges between vertexes is 1", Long.valueOf(1),
+                engine.tx().traversal().V().has("vnf-id", "myvnf").both().count().next());
+
+    }
+
+    @Test
+    public void serializeToDbWithInvalidLabelTest()
+            throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException,
+            IllegalArgumentException, IllegalAccessException, URISyntaxException {
+
+        DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules();
+
+        engine.startTransaction();
+
+        engine.tx().addVertex("aai-node-type", "vnfc", "vnfc-name", "a-name", "aai-uri", "/network/vnfcs/vnfc/a-name");
+
+        Introspector relationship = loader.introspectorFromName("relationship");
+        relationship.setValue("related-to", "vnfc");
+        relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
+        relationship.setValue("relationship-label", "NA");
+        Introspector relationshipList = loader.introspectorFromName("relationship-list");
+        relationshipList.setValue("relationship", Collections.singletonList(relationship.getUnderlyingObject()));
+
+        Introspector gvnfObj = loader.introspectorFromName("generic-vnf");
+        Vertex gvnf = localDbser.createNewVertex(gvnfObj);
+        gvnfObj.setValue("relationship-list", relationshipList.getUnderlyingObject());
+        gvnfObj.setValue("vnf-id", "myvnf");
+
+        QueryParser uriQuery =
+                dbEngine.getQueryBuilder().createQueryFromURI(new URI("/network/generic-vnfs/generic-vnf/myvnf"));
+
+        thrown.expect(AAIException.class);
+        thrown.expectMessage("No EdgeRule found for passed nodeTypes: generic-vnf, vnfc with label NA.");
+        localDbser.serializeToDb(gvnfObj, gvnf, uriQuery, null, "test");
+
+    }
+
+    @Test
+    public void serializeToDbWithLabelAndEdgeExistsTest()
+            throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException,
+            IllegalArgumentException, IllegalAccessException, URISyntaxException {
+
+        DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules();
+
+        engine.startTransaction();
+        engine.tx().addVertex("aai-node-type", "vnfc", "vnfc-name", "a-name", "aai-uri", "/network/vnfcs/vnfc/a-name");
+
+        Introspector relationship;
+        Introspector relationshipList;
+        List<Object> relList = new ArrayList<>();
+
+        // create generic-vnf
+        Introspector gvnfObj = loader.introspectorFromName("generic-vnf");
+        Vertex gvnf = localDbser.createNewVertex(gvnfObj);
+        gvnfObj.setValue("vnf-id", "myvnf");
+        QueryParser uriQuery =
+                dbEngine.getQueryBuilder().createQueryFromURI(new URI("/network/generic-vnfs/generic-vnf/myvnf"));
+
+        // create relationship to vnfc
+        relationship = loader.introspectorFromName("relationship");
+        relationship.setValue("related-to", "vnfc");
+        relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
+        relList.add(relationship.getUnderlyingObject());
+        relationshipList = loader.introspectorFromName("relationship-list");
+        relationshipList.setValue("relationship", relList);
+        gvnfObj.setValue("relationship-list", relationshipList.getUnderlyingObject());
+
+        // add gvnf to graph
+        localDbser.serializeToDb(gvnfObj, gvnf, uriQuery, null, "test");
+
+        // add second relationship
+        relationship = loader.introspectorFromName("relationship");
+        relationship.setValue("related-to", "vnfc");
+        relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
+        relationship.setValue("relationship-label", "re-uses");
+        relList.add(relationship.getUnderlyingObject());
+        relationshipList = loader.introspectorFromName("relationship-list");
+        relationshipList.setValue("relationship", relList);
+        gvnfObj.setValue("relationship-list", relationshipList.getUnderlyingObject());
+
+        localDbser.serializeToDb(gvnfObj, gvnf, uriQuery, null, "test");
+
+        assertTrue("vertex with vnf-id myvnf exists", engine.tx().traversal().V().has("vnf-id", "myvnf").hasNext());
+        assertTrue("vertex with vnfc-name a-name exists",
+                engine.tx().traversal().V().has("vnfc-name", "a-name").hasNext());
+        assertTrue("generic-vnf has  edge uses",
+                engine.tx().traversal().V().has("vnf-id", "myvnf").both("uses").hasNext());
+        assertTrue("vnfc has  edge uses",
+                engine.tx().traversal().V().has("vnfc-name", "a-name").both("uses").hasNext());
+        assertTrue("generic-vnf has edge re-uses",
+                engine.tx().traversal().V().has("vnf-id", "myvnf").both("re-uses").hasNext());
+        assertTrue("vnfc has edge re-uses",
+                engine.tx().traversal().V().has("vnfc-name", "a-name").both("re-uses").hasNext());
+        assertFalse("generic-vnf has no edge over-uses",
+                engine.tx().traversal().V().has("vnf-id", "myvnf").both("over-uses").hasNext());
+        assertFalse("vnfc has no edge over-uses",
+                engine.tx().traversal().V().has("vnfc-name", "a-name").both("over-uses").hasNext());
+        assertEquals("Number of edges between vertexes is 2", Long.valueOf(2),
+                engine.tx().traversal().V().has("vnfc-name", "a-name").both().count().next());
+        assertEquals("Number of edges between vertexes is 2", Long.valueOf(2),
+                engine.tx().traversal().V().has("vnf-id", "myvnf").both().count().next());
+
+    }
+
+    @Test
+    public void serializeToDbWithLabelDroppingRelationshipTest()
+            throws AAIException, UnsupportedEncodingException, NoSuchFieldException, SecurityException,
+            IllegalArgumentException, IllegalAccessException, URISyntaxException {
+
+        DBSerializer localDbser = getDBSerializerWithSpecificEdgeRules();
+
+        engine.startTransaction();
+        engine.tx().addVertex("aai-node-type", "vnfc", "vnfc-name", "a-name", "aai-uri", "/network/vnfcs/vnfc/a-name");
+
+        Introspector relationship;
+        Introspector relationshipList;
+        List<Object> relList = new ArrayList<>();
+
+        // create generic-vnf
+        Introspector gvnfObj = loader.introspectorFromName("generic-vnf");
+        Vertex gvnf = localDbser.createNewVertex(gvnfObj);
+        gvnfObj.setValue("vnf-id", "myvnf");
+        QueryParser uriQuery =
+                dbEngine.getQueryBuilder().createQueryFromURI(new URI("/network/generic-vnfs/generic-vnf/myvnf"));
+
+        // create relationship to vnfc
+        relationship = loader.introspectorFromName("relationship");
+        relationship.setValue("related-to", "vnfc");
+        relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
+        relList.add(relationship.getUnderlyingObject());
+        // add second relationship
+        relationship = loader.introspectorFromName("relationship");
+        relationship.setValue("related-to", "vnfc");
+        relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name");
+        relationship.setValue("relationship-label", "re-uses");
+        relList.add(relationship.getUnderlyingObject());
+        relationshipList = loader.introspectorFromName("relationship-list");
+        relationshipList.setValue("relationship", relList);
+        gvnfObj.setValue("relationship-list", relationshipList.getUnderlyingObject());
+
+        // add gvnf to graph
+        localDbser.serializeToDb(gvnfObj, gvnf, uriQuery, null, "test");
+
+        // drop second relationship
+        relList.remove(1);
+        relationshipList = loader.introspectorFromName("relationship-list");
+        relationshipList.setValue("relationship", relList);
+        gvnfObj.setValue("relationship-list", relationshipList.getUnderlyingObject());
+
+        localDbser.serializeToDb(gvnfObj, gvnf, uriQuery, null, "test");
+
+        assertTrue("vertex with vnf-id myvnf exists", engine.tx().traversal().V().has("vnf-id", "myvnf").hasNext());
+        assertTrue("vertex with vnfc-name a-name exists",
+                engine.tx().traversal().V().has("vnfc-name", "a-name").hasNext());
+        assertTrue("generic-vnf has  edge uses",
+                engine.tx().traversal().V().has("vnf-id", "myvnf").both("uses").hasNext());
+        assertTrue("vnfc has  edge uses",
+                engine.tx().traversal().V().has("vnfc-name", "a-name").both("uses").hasNext());
+        assertFalse("generic-vnf no longer has edge re-uses",
+                engine.tx().traversal().V().has("vnf-id", "myvnf").both("re-uses").hasNext());
+        assertFalse("vnfc no longer has edge re-uses",
+                engine.tx().traversal().V().has("vnfc-name", "a-name").both("re-uses").hasNext());
+        assertFalse("generic-vnf has no edge over-uses",
+                engine.tx().traversal().V().has("vnf-id", "myvnf").both("over-uses").hasNext());
+        assertFalse("vnfc has no edge over-uses",
+                engine.tx().traversal().V().has("vnfc-name", "a-name").both("over-uses").hasNext());
+        assertEquals("Number of edges between vertexes is 1", Long.valueOf(1),
+                engine.tx().traversal().V().has("vnfc-name", "a-name").both().count().next());
+        assertEquals("Number of edges between vertexes is 1", Long.valueOf(1),
+                engine.tx().traversal().V().has("vnf-id", "myvnf").both().count().next());
+
+    }
+
+    private DBSerializer getDBSerializerWithSpecificEdgeRules()
+            throws NoSuchFieldException, AAIException, IllegalAccessException {
+
+        DBSerializer localDbser = new DBSerializer(version, engine, introspectorFactoryType, "AAI-TEST");
+        return localDbser;
+    }
 }