blob: 857d09188e4553b377791790d901fc8fbf459ac9 [file] [log] [blame]
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -08001package net.floodlightcontroller.linkdiscovery.internal;
2
Jonathan Hartd1c5a1c2013-01-23 00:56:14 -08003import static org.junit.Assert.assertEquals;
4import static org.junit.Assert.assertFalse;
5import static org.junit.Assert.assertTrue;
6
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -08007import java.util.Iterator;
Jonathan Hartc86a2ea2013-01-15 22:39:42 -08008import java.util.List;
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -08009
Jonathan Hart627f10c2013-01-16 14:20:03 -080010import net.floodlightcontroller.core.internal.TestDatabaseManager;
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080011import net.floodlightcontroller.routing.Link;
HIGUCHI Yuta20514902013-06-12 11:24:16 -070012import net.onrc.onos.ofcontroller.core.INetMapStorage.DM_OPERATION;
HIGUCHI Yuta80c3ab82013-06-12 13:17:05 -070013import net.onrc.onos.ofcontroller.linkdiscovery.ILinkStorage;
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080014
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080015import org.junit.After;
16import org.junit.Before;
Jonathan Hartd1c5a1c2013-01-23 00:56:14 -080017import org.junit.Ignore;
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080018import org.junit.Test;
19
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080020import com.thinkaurelius.titan.core.TitanGraph;
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080021import com.tinkerpop.blueprints.Vertex;
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080022import com.tinkerpop.gremlin.java.GremlinPipeline;
23
Jonathan Hartd1c5a1c2013-01-23 00:56:14 -080024public class LinkStorageImplTest {
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080025 private static ILinkStorage linkStorage;
26 private static TitanGraph titanGraph;
27
Jonathan Hartc86a2ea2013-01-15 22:39:42 -080028 //TODO Future ideas:
29 //Test add links with CREATE and UPDATE
30 //Test adding existing link again
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080031
32 @Before
Jonathan Hart627f10c2013-01-16 14:20:03 -080033 public void setUp() throws Exception{
Jonathan Hart627f10c2013-01-16 14:20:03 -080034 titanGraph = TestDatabaseManager.getTestDatabase();
35 TestDatabaseManager.populateTestData(titanGraph);
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080036
Jonathan Hartc86a2ea2013-01-15 22:39:42 -080037 linkStorage = new TestableLinkStorageImpl(titanGraph);
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080038 }
39
Jonathan Hartd1c5a1c2013-01-23 00:56:14 -080040 @After
41 public void tearDown() throws Exception {
42 titanGraph.shutdown();
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080043 }
44
45 /*
46 * Add a link between port 1.102 and 2.104
47 * i.e SEA switch port 3 to LAX switch port 1
48 */
49 @Test
50 public void testAddSingleLink(){
51 Link linkToAdd = new Link(Long.decode("0x0000000000000a01"), 3, Long.decode("0x0000000000000a02"), 1);
52
53 //Use the link storage API to add the link
54 linkStorage.update(linkToAdd, ILinkStorage.DM_OPERATION.INSERT);
55
56 //Test if it was added correctly with the Gremlin API
57 GremlinPipeline<Vertex, Vertex> pipe = new GremlinPipeline<Vertex, Vertex>();
58 Iterator<Vertex> it = titanGraph.getVertices("dpid", "00:00:00:00:00:00:0a:01").iterator();
59
60 assertTrue(it.hasNext());
61 Vertex sw1 = it.next();
62 assertFalse(it.hasNext());
63
Jonathan Hartd1c5a1c2013-01-23 00:56:14 -080064 pipe.start(sw1).out("on").has("number", (short)3).out("link").in("on");
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080065
66 assertTrue(pipe.hasNext());
67 Vertex sw2 = pipe.next();
68 assertFalse(pipe.hasNext());
69
70 //Check we ended up at the right vertex
71 assertEquals((String)sw2.getProperty("dpid"), "00:00:00:00:00:00:0a:02");
72 }
73
Jonathan Hartd1c5a1c2013-01-23 00:56:14 -080074 //TODO enable once method is written
75 @Ignore @Test
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080076 public void testGetLinks(){
Jonathan Hartc86a2ea2013-01-15 22:39:42 -080077 //TODO Make sure this works when the implementation is written
Umesh Krishnaswamyf962d642013-01-23 19:04:23 -080078 List<Link> list = linkStorage.getLinks(Long.decode("0x0000000000000a01"), (short)2);
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080079
Jonathan Hartc86a2ea2013-01-15 22:39:42 -080080 assertEquals(list.size(), 1);
81
82 Link l = list.get(0);
83 assertEquals(l.getSrc(), 2561L);
84 assertEquals(l.getSrcPort(), (short)2);
85 assertEquals(l.getDst(), 2563L);
86 assertEquals(l.getDstPort(), (short)1);
87 }
88
Jonathan Hartd1c5a1c2013-01-23 00:56:14 -080089 //TODO enable once method is written
90 @Ignore @Test
Jonathan Hartc86a2ea2013-01-15 22:39:42 -080091 public void testUpdateDelete(){
Jonathan Hartc86a2ea2013-01-15 22:39:42 -080092 Link linkToDelete = new Link(Long.decode("0x0000000000000a01"), 2, Long.decode("0x0000000000000a03"), 1);
93
94 linkStorage.update(linkToDelete, DM_OPERATION.DELETE);
95
96 //Test if it was deleted correctly with the Gremlin API
97 GremlinPipeline<Vertex, Vertex> pipe = new GremlinPipeline<Vertex, Vertex>();
98 Iterator<Vertex> it = titanGraph.getVertices("dpid", "00:00:00:00:00:00:0a:01").iterator();
99
100 assertTrue(it.hasNext());
101 Vertex sw1 = it.next();
102 assertFalse(it.hasNext());
103
104 pipe.start(sw1).out("on").has("number", 2).out("link");
105
106 assertFalse(pipe.hasNext());
107 }
108
Jonathan Hartd1c5a1c2013-01-23 00:56:14 -0800109 //TODO enable once method is written
110 @Ignore @Test
Jonathan Hartc86a2ea2013-01-15 22:39:42 -0800111 public void testDeleteLinks(){
112 //TODO Make sure this works when the implementation is written
113
Umesh Krishnaswamyf962d642013-01-23 19:04:23 -0800114 linkStorage.deleteLinksOnPort(Long.decode("0x0000000000000a01"), (short)2);
Jonathan Hartc86a2ea2013-01-15 22:39:42 -0800115
116 //Test if it was deleted correctly with the Gremlin API
117 GremlinPipeline<Vertex, Vertex> pipe = new GremlinPipeline<Vertex, Vertex>();
118 Iterator<Vertex> it = titanGraph.getVertices("dpid", "00:00:00:00:00:00:0a:01").iterator();
119
120 assertTrue(it.hasNext());
121 Vertex sw1 = it.next();
122 assertFalse(it.hasNext());
123
124 pipe.start(sw1).out("on").has("number", 2).out("link");
125
126 assertFalse(pipe.hasNext());
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -0800127 }
128
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -0800129}