blob: 307447c89ca082135da841cd3819509757d75311 [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 Hartc86a2ea2013-01-15 22:39:42 -080010import net.floodlightcontroller.core.INetMapStorage.DM_OPERATION;
Jonathan Hart627f10c2013-01-16 14:20:03 -080011import net.floodlightcontroller.core.internal.TestDatabaseManager;
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080012import net.floodlightcontroller.linkdiscovery.ILinkStorage;
13import net.floodlightcontroller.routing.Link;
mininet37dc5892013-06-04 10:58:44 -070014import net.onrc.onos.util.GraphDBConnection;
15import net.onrc.onos.util.IDBUtils;
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080016
mininet37dc5892013-06-04 10:58:44 -070017import org.easymock.EasyMock;
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080018import org.junit.After;
19import org.junit.Before;
Jonathan Hartd1c5a1c2013-01-23 00:56:14 -080020import org.junit.Ignore;
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080021import org.junit.Test;
mininet37dc5892013-06-04 10:58:44 -070022import org.junit.runner.RunWith;
23import org.powermock.api.easymock.PowerMock;
24import org.powermock.core.classloader.annotations.PrepareForTest;
25import org.powermock.modules.junit4.PowerMockRunner;
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080026
mininet37dc5892013-06-04 10:58:44 -070027import com.thinkaurelius.titan.core.TitanFactory;
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080028import com.thinkaurelius.titan.core.TitanGraph;
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080029import com.tinkerpop.blueprints.Vertex;
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080030import com.tinkerpop.gremlin.java.GremlinPipeline;
31
mininet37dc5892013-06-04 10:58:44 -070032@RunWith(PowerMockRunner.class)
33@PrepareForTest({TitanFactory.class})
Jonathan Hartd1c5a1c2013-01-23 00:56:14 -080034public class LinkStorageImplTest {
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080035 private static ILinkStorage linkStorage;
36 private static TitanGraph titanGraph;
37
mininet37dc5892013-06-04 10:58:44 -070038 //private static IController
39
Jonathan Hartc86a2ea2013-01-15 22:39:42 -080040 //TODO Future ideas:
41 //Test add links with CREATE and UPDATE
42 //Test adding existing link again
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080043
44 @Before
Jonathan Hart627f10c2013-01-16 14:20:03 -080045 public void setUp() throws Exception{
Jonathan Hart627f10c2013-01-16 14:20:03 -080046 titanGraph = TestDatabaseManager.getTestDatabase();
47 TestDatabaseManager.populateTestData(titanGraph);
mininet37dc5892013-06-04 10:58:44 -070048
49 linkStorage = new LinkStorageImpl();
50
51 // replace TitanFactory.open() to mock method
52 PowerMock.mockStatic(TitanFactory.class);
53 EasyMock.expect(TitanFactory.open((String)EasyMock.anyObject())).andReturn(titanGraph);
54 PowerMock.replay(TitanFactory.class);
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080055
mininet37dc5892013-06-04 10:58:44 -070056 linkStorage.init("/dummy/path/to/db");
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080057 }
58
Jonathan Hartd1c5a1c2013-01-23 00:56:14 -080059 @After
60 public void tearDown() throws Exception {
mininet37dc5892013-06-04 10:58:44 -070061// dbConnection.close();
Jonathan Hartd1c5a1c2013-01-23 00:56:14 -080062 titanGraph.shutdown();
mininet37dc5892013-06-04 10:58:44 -070063 TestDatabaseManager.deleteTestDatabase();
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080064 }
65
66 /*
67 * Add a link between port 1.102 and 2.104
68 * i.e SEA switch port 3 to LAX switch port 1
69 */
70 @Test
71 public void testAddSingleLink(){
72 Link linkToAdd = new Link(Long.decode("0x0000000000000a01"), 3, Long.decode("0x0000000000000a02"), 1);
73
74 //Use the link storage API to add the link
75 linkStorage.update(linkToAdd, ILinkStorage.DM_OPERATION.INSERT);
76
77 //Test if it was added correctly with the Gremlin API
78 GremlinPipeline<Vertex, Vertex> pipe = new GremlinPipeline<Vertex, Vertex>();
79 Iterator<Vertex> it = titanGraph.getVertices("dpid", "00:00:00:00:00:00:0a:01").iterator();
80
81 assertTrue(it.hasNext());
82 Vertex sw1 = it.next();
83 assertFalse(it.hasNext());
84
Jonathan Hartd1c5a1c2013-01-23 00:56:14 -080085 pipe.start(sw1).out("on").has("number", (short)3).out("link").in("on");
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080086
87 assertTrue(pipe.hasNext());
88 Vertex sw2 = pipe.next();
89 assertFalse(pipe.hasNext());
90
91 //Check we ended up at the right vertex
92 assertEquals((String)sw2.getProperty("dpid"), "00:00:00:00:00:00:0a:02");
93 }
94
Jonathan Hartd1c5a1c2013-01-23 00:56:14 -080095 //TODO enable once method is written
96 @Ignore @Test
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080097 public void testGetLinks(){
Jonathan Hartc86a2ea2013-01-15 22:39:42 -080098 //TODO Make sure this works when the implementation is written
Umesh Krishnaswamyf962d642013-01-23 19:04:23 -080099 List<Link> list = linkStorage.getLinks(Long.decode("0x0000000000000a01"), (short)2);
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -0800100
Jonathan Hartc86a2ea2013-01-15 22:39:42 -0800101 assertEquals(list.size(), 1);
102
103 Link l = list.get(0);
104 assertEquals(l.getSrc(), 2561L);
105 assertEquals(l.getSrcPort(), (short)2);
106 assertEquals(l.getDst(), 2563L);
107 assertEquals(l.getDstPort(), (short)1);
108 }
109
Jonathan Hartd1c5a1c2013-01-23 00:56:14 -0800110 //TODO enable once method is written
111 @Ignore @Test
Jonathan Hartc86a2ea2013-01-15 22:39:42 -0800112 public void testUpdateDelete(){
Jonathan Hartc86a2ea2013-01-15 22:39:42 -0800113 Link linkToDelete = new Link(Long.decode("0x0000000000000a01"), 2, Long.decode("0x0000000000000a03"), 1);
114
115 linkStorage.update(linkToDelete, DM_OPERATION.DELETE);
116
117 //Test if it was deleted correctly with the Gremlin API
118 GremlinPipeline<Vertex, Vertex> pipe = new GremlinPipeline<Vertex, Vertex>();
119 Iterator<Vertex> it = titanGraph.getVertices("dpid", "00:00:00:00:00:00:0a:01").iterator();
120
121 assertTrue(it.hasNext());
122 Vertex sw1 = it.next();
123 assertFalse(it.hasNext());
124
125 pipe.start(sw1).out("on").has("number", 2).out("link");
126
127 assertFalse(pipe.hasNext());
128 }
129
Jonathan Hartd1c5a1c2013-01-23 00:56:14 -0800130 //TODO enable once method is written
131 @Ignore @Test
Jonathan Hartc86a2ea2013-01-15 22:39:42 -0800132 public void testDeleteLinks(){
133 //TODO Make sure this works when the implementation is written
134
Umesh Krishnaswamyf962d642013-01-23 19:04:23 -0800135 linkStorage.deleteLinksOnPort(Long.decode("0x0000000000000a01"), (short)2);
Jonathan Hartc86a2ea2013-01-15 22:39:42 -0800136
137 //Test if it was deleted correctly with the Gremlin API
138 GremlinPipeline<Vertex, Vertex> pipe = new GremlinPipeline<Vertex, Vertex>();
139 Iterator<Vertex> it = titanGraph.getVertices("dpid", "00:00:00:00:00:00:0a:01").iterator();
140
141 assertTrue(it.hasNext());
142 Vertex sw1 = it.next();
143 assertFalse(it.hasNext());
144
145 pipe.start(sw1).out("on").has("number", 2).out("link");
146
147 assertFalse(pipe.hasNext());
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -0800148 }
149
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -0800150}