blob: b03af4eab8f63882204e6113594a787d8d26fb19 [file] [log] [blame]
HIGUCHI Yuta08137932013-06-17 14:11:50 -07001package net.onrc.onos.ofcontroller.core.internal;
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -08002
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 Hartb7e3d2c2013-01-15 18:45:19 -080010import net.floodlightcontroller.routing.Link;
HIGUCHI Yuta2d011582013-06-15 01:47:11 -070011import net.onrc.onos.ofcontroller.core.ILinkStorage;
HIGUCHI Yuta20514902013-06-12 11:24:16 -070012import net.onrc.onos.ofcontroller.core.INetMapStorage.DM_OPERATION;
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080013
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080014import org.junit.After;
15import org.junit.Before;
Jonathan Hartd1c5a1c2013-01-23 00:56:14 -080016import org.junit.Ignore;
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080017import org.junit.Test;
18
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080019import com.thinkaurelius.titan.core.TitanGraph;
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080020import com.tinkerpop.blueprints.Vertex;
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080021import com.tinkerpop.gremlin.java.GremlinPipeline;
22
Jonathan Hartd1c5a1c2013-01-23 00:56:14 -080023public class LinkStorageImplTest {
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080024 private static ILinkStorage linkStorage;
25 private static TitanGraph titanGraph;
26
Jonathan Hartc86a2ea2013-01-15 22:39:42 -080027 //TODO Future ideas:
28 //Test add links with CREATE and UPDATE
29 //Test adding existing link again
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080030
31 @Before
Jonathan Hart627f10c2013-01-16 14:20:03 -080032 public void setUp() throws Exception{
Jonathan Hart627f10c2013-01-16 14:20:03 -080033 titanGraph = TestDatabaseManager.getTestDatabase();
34 TestDatabaseManager.populateTestData(titanGraph);
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080035
Jonathan Hartc86a2ea2013-01-15 22:39:42 -080036 linkStorage = new TestableLinkStorageImpl(titanGraph);
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080037 }
38
Jonathan Hartd1c5a1c2013-01-23 00:56:14 -080039 @After
40 public void tearDown() throws Exception {
41 titanGraph.shutdown();
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080042 }
43
44 /*
45 * Add a link between port 1.102 and 2.104
46 * i.e SEA switch port 3 to LAX switch port 1
47 */
48 @Test
49 public void testAddSingleLink(){
50 Link linkToAdd = new Link(Long.decode("0x0000000000000a01"), 3, Long.decode("0x0000000000000a02"), 1);
51
52 //Use the link storage API to add the link
53 linkStorage.update(linkToAdd, ILinkStorage.DM_OPERATION.INSERT);
54
55 //Test if it was added correctly with the Gremlin API
56 GremlinPipeline<Vertex, Vertex> pipe = new GremlinPipeline<Vertex, Vertex>();
57 Iterator<Vertex> it = titanGraph.getVertices("dpid", "00:00:00:00:00:00:0a:01").iterator();
58
59 assertTrue(it.hasNext());
60 Vertex sw1 = it.next();
61 assertFalse(it.hasNext());
62
Jonathan Hartd1c5a1c2013-01-23 00:56:14 -080063 pipe.start(sw1).out("on").has("number", (short)3).out("link").in("on");
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080064
65 assertTrue(pipe.hasNext());
66 Vertex sw2 = pipe.next();
67 assertFalse(pipe.hasNext());
68
69 //Check we ended up at the right vertex
70 assertEquals((String)sw2.getProperty("dpid"), "00:00:00:00:00:00:0a:02");
71 }
72
Jonathan Hartd1c5a1c2013-01-23 00:56:14 -080073 //TODO enable once method is written
74 @Ignore @Test
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080075 public void testGetLinks(){
Jonathan Hartc86a2ea2013-01-15 22:39:42 -080076 //TODO Make sure this works when the implementation is written
Umesh Krishnaswamyf962d642013-01-23 19:04:23 -080077 List<Link> list = linkStorage.getLinks(Long.decode("0x0000000000000a01"), (short)2);
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080078
Jonathan Hartc86a2ea2013-01-15 22:39:42 -080079 assertEquals(list.size(), 1);
80
81 Link l = list.get(0);
82 assertEquals(l.getSrc(), 2561L);
83 assertEquals(l.getSrcPort(), (short)2);
84 assertEquals(l.getDst(), 2563L);
85 assertEquals(l.getDstPort(), (short)1);
86 }
87
Jonathan Hartd1c5a1c2013-01-23 00:56:14 -080088 //TODO enable once method is written
89 @Ignore @Test
Jonathan Hartc86a2ea2013-01-15 22:39:42 -080090 public void testUpdateDelete(){
Jonathan Hartc86a2ea2013-01-15 22:39:42 -080091 Link linkToDelete = new Link(Long.decode("0x0000000000000a01"), 2, Long.decode("0x0000000000000a03"), 1);
92
93 linkStorage.update(linkToDelete, DM_OPERATION.DELETE);
94
95 //Test if it was deleted correctly with the Gremlin API
96 GremlinPipeline<Vertex, Vertex> pipe = new GremlinPipeline<Vertex, Vertex>();
97 Iterator<Vertex> it = titanGraph.getVertices("dpid", "00:00:00:00:00:00:0a:01").iterator();
98
99 assertTrue(it.hasNext());
100 Vertex sw1 = it.next();
101 assertFalse(it.hasNext());
102
103 pipe.start(sw1).out("on").has("number", 2).out("link");
104
105 assertFalse(pipe.hasNext());
106 }
107
Jonathan Hartd1c5a1c2013-01-23 00:56:14 -0800108 //TODO enable once method is written
109 @Ignore @Test
Jonathan Hartc86a2ea2013-01-15 22:39:42 -0800110 public void testDeleteLinks(){
111 //TODO Make sure this works when the implementation is written
112
Umesh Krishnaswamyf962d642013-01-23 19:04:23 -0800113 linkStorage.deleteLinksOnPort(Long.decode("0x0000000000000a01"), (short)2);
Jonathan Hartc86a2ea2013-01-15 22:39:42 -0800114
115 //Test if it was deleted correctly with the Gremlin API
116 GremlinPipeline<Vertex, Vertex> pipe = new GremlinPipeline<Vertex, Vertex>();
117 Iterator<Vertex> it = titanGraph.getVertices("dpid", "00:00:00:00:00:00:0a:01").iterator();
118
119 assertTrue(it.hasNext());
120 Vertex sw1 = it.next();
121 assertFalse(it.hasNext());
122
123 pipe.start(sw1).out("on").has("number", 2).out("link");
124
125 assertFalse(pipe.hasNext());
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -0800126 }
127
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -0800128}