Add tests for addOrUpdateLink().
diff --git a/src/test/java/net/floodlightcontroller/linkdiscovery/internal/LinkStorageImplTest.java b/src/test/java/net/floodlightcontroller/linkdiscovery/internal/LinkStorageImplTest.java
index 4c19d0a..079715a 100644
--- a/src/test/java/net/floodlightcontroller/linkdiscovery/internal/LinkStorageImplTest.java
+++ b/src/test/java/net/floodlightcontroller/linkdiscovery/internal/LinkStorageImplTest.java
@@ -38,10 +38,11 @@
//private static IController
- //TODO Future ideas:
- //Test add links with CREATE and UPDATE
- //Test adding existing link again
-
+ /**
+ * Setup code called before each tests.
+ * Read test graph data and replace DB access by test graph data.
+ * @throws Exception
+ */
@Before
public void setUp() throws Exception{
TestDatabaseManager.deleteTestDatabase();
@@ -49,7 +50,7 @@
titanGraph = TestDatabaseManager.getTestDatabase();
TestDatabaseManager.populateTestData(titanGraph);
- // replace TitanFactory.open() return value to dummy DB
+ // replace return value of TitanFactory.open() to dummy DB created above
PowerMock.mockStatic(TitanFactory.class);
EasyMock.expect(TitanFactory.open((String)EasyMock.anyObject())).andReturn(titanGraph);
PowerMock.replay(TitanFactory.class);
@@ -60,6 +61,11 @@
linkStorage.init("/dummy/path/to/db");
}
+ /**
+ * Closing code called after each tests.
+ * Discard test graph data.
+ * @throws Exception
+ */
@After
public void tearDown() throws Exception {
// finish code
@@ -101,10 +107,6 @@
doTestLinkIsInGraph(linkToVerify);
}
- /*
- * Add a link between port 1.102 and 2.104
- * i.e SEA switch port 3 to LAX switch port 1
- */
@Test
public void testUpdate_InsertSingleLink(){
Link linkToInsert = createFeasibleLink();
@@ -145,7 +147,7 @@
public void testUpdate_UpdateLinks(){
List<Link> linksToUpdate= createExistingLinks();
- // Who calls this method like this way?
+ // TODO: Who calls update method like this way? Remove this test if unneeded.
linkStorage.update(linksToUpdate, ILinkStorage.DM_OPERATION.UPDATE);
// TODO: verification of update result
@@ -171,7 +173,7 @@
}
@Test
- public void testUpdate_CreateLinksMixuture(){
+ public void testUpdate_CreateLinks_Mixuture(){
List<Link> linksToCreate = new ArrayList<Link>();
linksToCreate.add(createFeasibleLink());
linksToCreate.add(createExistingLink());
@@ -202,7 +204,7 @@
}
@Test
- public void testUpdate_InsertLinksMixuture(){
+ public void testUpdate_InsertLinks_Mixuture(){
List<Link> linksToInsert = new ArrayList<Link>();
linksToInsert.add(createFeasibleLink());
linksToInsert.add(createExistingLink());
@@ -234,7 +236,7 @@
}
@Test
- public void testUpdate_DeleteLinksMixuture(){
+ public void testUpdate_DeleteLinks_Mixuture(){
List<Link> linksToDelete = new ArrayList<Link>();
linksToDelete.add(createFeasibleLink());
linksToDelete.add(createExistingLink());
@@ -245,29 +247,81 @@
doTestLinkIsNotInGraph(createExistingLink());
}
- @Test
- public void testAddOrUpdateLink() {
- Link linkToDelete = createExistingLink();
+ @Ignore @Test
+ public void testAddOrUpdateLink_Update() {
+ Link linkToUpdate= createExistingLink();
+ LinkInfo infoToUpdate = new LinkInfo(
+ System.currentTimeMillis(),
+ System.currentTimeMillis(),
+ System.currentTimeMillis(),
+ 0, 0);
+
+ linkStorage.addOrUpdateLink(linkToUpdate, infoToUpdate, ILinkStorage.DM_OPERATION.UPDATE);
+
+ // TODO: get LinkInfo from titanGraph and verify
}
@Test
- public void testUpdateInsertMultipleLinks() {
- List<Link> linksToAdd = createFeasibleLinks();
- List<Link> linksToVerify = createFeasibleLinks();
+ public void testAddOrUpdateLink_Create() {
+ Link linkToCreate = createFeasibleLink();
+ Link linkToVerify = createFeasibleLink();
- linkStorage.update(linksToAdd, ILinkStorage.DM_OPERATION.INSERT);
+ //Use the link storage API to add the link
+ linkStorage.addOrUpdateLink(linkToCreate, null, ILinkStorage.DM_OPERATION.CREATE);
+ doTestLinkIsInGraph(linkToVerify);
+
+ // Add same link
+ Link linkToCreateTwice = createFeasibleLink();
+ linkStorage.addOrUpdateLink(linkToCreateTwice, null, ILinkStorage.DM_OPERATION.CREATE);
- for(Link l : linksToVerify) {
- doTestLinkIsInGraph(l);
- }
+ // this occurs assertion failure if there are two links in titanGraph
+ doTestLinkIsInGraph(linkToVerify);
}
@Test
- public void testGetLinks(){
- Link linkToVerify = createExistingLink();
+ public void testAddOrUpdateLink_Insert() {
+ Link linkToInsert = createFeasibleLink();
+ Link linkToVerify = createFeasibleLink();
- List<Link> list = linkStorage.getLinks(linkToVerify.getSrc(), (short)linkToVerify.getSrcPort());
+ //Use the link storage API to add the link
+ linkStorage.addOrUpdateLink(linkToInsert, null, ILinkStorage.DM_OPERATION.INSERT);
+
+ doTestLinkIsInGraph(linkToVerify);
+
+ // Add same link
+ Link linkToInsertTwice = createFeasibleLink();
+ linkStorage.addOrUpdateLink(linkToInsertTwice, null, ILinkStorage.DM_OPERATION.INSERT);
+
+ // this occurs assertion failure if there are two links in titanGraph
+ doTestLinkIsInGraph(linkToVerify);
+ }
+
+ // TODO: Check if addOrUpdateLink() should accept DELETE operation. If not, remove this test.
+ @Ignore @Test
+ public void testAddOrUpdateLink_Delete() {
+ Link linkToDelete = createExistingLink();
+ Link linkToVerify = createExistingLink();
+
+ // Test deletion of existing link
+ linkStorage.addOrUpdateLink(linkToDelete, null, DM_OPERATION.DELETE);
+ doTestLinkIsNotInGraph(linkToVerify);
+
+ linkToDelete = createFeasibleLink();
+ linkToVerify = createFeasibleLink();
+
+ // Test deletion of not-existing link
+ linkStorage.addOrUpdateLink(linkToDelete, null, DM_OPERATION.DELETE);
+ doTestLinkIsNotInGraph(linkToVerify);
+ }
+
+ @Test
+ public void testGetLinks_ByDpidPort(){
+ Link linkToVerify = createExistingLink();
+ Long dpid = linkToVerify.getSrc();
+ short port = (short)linkToVerify.getSrcPort();
+
+ List<Link> list = linkStorage.getLinks(dpid, port);
assertEquals(list.size(), 1);
@@ -285,10 +339,11 @@
}
@Test
- public void testGetLinksByDpid() {
+ public void testGetLinks_ByString() {
Link linkToVeryfy = createExistingLink();
+ String dpid = HexString.toHexString(linkToVeryfy.getSrc());
- List<Link> links = linkStorage.getLinks(HexString.toHexString(linkToVeryfy.getSrc()));
+ List<Link> links = linkStorage.getLinks(dpid);
assertTrue(links.contains(linkToVeryfy));
Link linkToVerifyNot = createFeasibleLink();
@@ -324,6 +379,18 @@
}
@Test
+ public void testDeleteLinks_Mixture(){
+ List<Link> linksToDelete = new ArrayList<Link>();
+ linksToDelete.add(createFeasibleLink());
+ linksToDelete.add(createExistingLink());
+
+ // Test deletion of mixture of new/existing links
+ linkStorage.deleteLinks(linksToDelete);
+ doTestLinkIsNotInGraph(createFeasibleLink());
+ doTestLinkIsNotInGraph(createExistingLink());
+ }
+
+ @Test
public void testGetActiveLinks() {
Link existingLink = createExistingLink();
Link notExistingLink = createFeasibleLink();
@@ -343,10 +410,10 @@
doTestLinkIsNotInGraph(linkToVerify);
}
-
+
/**
- * Test if titanGraph has specific link (no more than one link)
- * @param link
+ * Test if titanGraph has specific link
+ * @param link
*/
private void doTestLinkIsInGraph(Link link) {
String src_dpid = HexString.toHexString(link.getSrc());
@@ -357,12 +424,14 @@
GremlinPipeline<Vertex, Vertex> pipe = new GremlinPipeline<Vertex, Vertex>();
Iterator<Vertex> it = titanGraph.getVertices("dpid", src_dpid).iterator();
+ // Test if just one switch is found in the graph
assertTrue(it.hasNext());
Vertex sw = it.next();
assertFalse(it.hasNext());
pipe.start(sw).out("on").has("number", src_port).out("link").has("number", dst_port).in("on").has("dpid", dst_dpid);
+ // Test if just one link is found in the graph
assertTrue(pipe.hasNext());
pipe.next();
assertFalse(pipe.hasNext());
@@ -381,40 +450,64 @@
GremlinPipeline<Vertex, Vertex> pipe = new GremlinPipeline<Vertex, Vertex>();
Iterator<Vertex> it = titanGraph.getVertices("dpid", src_dpid).iterator();
+ // Test if just one switch is found in the graph
assertTrue(it.hasNext());
Vertex sw = it.next();
assertFalse(it.hasNext());
pipe.start(sw).out("on").has("number", src_port).out("link").has("number", dst_port).in("on").has("dpid", dst_dpid);
+ // Test if no link is found in the graph
assertFalse(pipe.hasNext());
}
//----------------- Creation of test data -----------------------
+ /**
+ * Returns new Link object which has information of existing link in titanGraph
+ * @return new Link object
+ */
private Link createExistingLink() {
+ // Link from SEA switch port 2 to CHI switch port 1
return new Link(Long.decode("0x0000000000000a01"), 2, Long.decode("0x0000000000000a03"), 1);
}
+ /**
+ * Returns new Link object which has information of not-existing but feasible link in titanGraph
+ * @return new Link object
+ */
private Link createFeasibleLink() {
+ // Link from SEA switch port 1 to LAX switch port 1
return new Link(Long.decode("0x0000000000000a01"), 4, Long.decode("0x0000000000000a02"), 1);
}
- // make NO sense while test-network data doesn't define physical network
+ // make NO sense while test-network data doesn't define physical network (i.e. any link is feasible)
@SuppressWarnings("unused")
private Link createInfeasibleLink() {
return new Link(Long.decode("0x0000000000000a01"), 1, Long.decode("0x0000000000000a02"), 1);
}
+ /**
+ * Returns list of Link objects which all has information of existing link in titanGraph
+ * @return ArrayList of new Link objects
+ */
private List<Link> createExistingLinks() {
List<Link> links = new ArrayList<Link>();
+ // Link from SEA switch port 2 to CHI switch port 1
links.add(new Link(Long.decode("0x0000000000000a01"), 2, Long.decode("0x0000000000000a03"), 1));
+ // Link from LAX switch port 1 to SEA switch port 3
links.add(new Link(Long.decode("0x0000000000000a02"), 1, Long.decode("0x0000000000000a01"), 3));
return links;
}
+ /**
+ * Returns list of Link objects which all has information of not-existing but feasible link
+ * @return ArrayList of new Link objects
+ */
private List<Link> createFeasibleLinks() {
List<Link> links = new ArrayList<Link>();
+ // Link from CHI switch port 4 to NYC switch port 3
links.add(new Link(Long.decode("0x0000000000000a03"), 4, Long.decode("0x0000000000000a05"), 3));
+ // Link from SEA switch port 4 to LAX switch port 1
links.add(new Link(Long.decode("0x0000000000000a01"), 4, Long.decode("0x0000000000000a02"), 1));
return links;
}