blob: 57e77b2773e6581dbb48882a5b8d3783c8a7ce11 [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
mininet403d5892013-06-05 03:48:17 -07007import java.util.ArrayList;
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;
Pankaj Berde38646d62013-06-21 11:34:04 -070011import net.onrc.onos.graph.GraphDBConnection;
12import net.onrc.onos.graph.GraphDBOperation;
HIGUCHI Yuta2d011582013-06-15 01:47:11 -070013import net.onrc.onos.ofcontroller.core.ILinkStorage;
HIGUCHI Yuta20514902013-06-12 11:24:16 -070014import net.onrc.onos.ofcontroller.core.INetMapStorage.DM_OPERATION;
Naoki Shiotac88d9562013-06-18 15:21:56 -070015import net.onrc.onos.ofcontroller.core.internal.TestableGraphDBOperation.TestPortObject;
Naoki Shiota783afb72013-06-18 15:04:31 -070016import net.onrc.onos.ofcontroller.linkdiscovery.LinkInfo;
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080017
mininet37dc5892013-06-04 10:58:44 -070018import org.easymock.EasyMock;
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080019import org.junit.After;
20import org.junit.Before;
Jonathan Hartd1c5a1c2013-01-23 00:56:14 -080021import org.junit.Ignore;
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080022import org.junit.Test;
mininet37dc5892013-06-04 10:58:44 -070023import org.junit.runner.RunWith;
Naoki Shiotacae568a2013-06-05 17:53:41 -070024import org.openflow.protocol.OFPhysicalPort;
mininet403d5892013-06-05 03:48:17 -070025import org.openflow.util.HexString;
mininet37dc5892013-06-04 10:58:44 -070026import org.powermock.api.easymock.PowerMock;
27import org.powermock.core.classloader.annotations.PrepareForTest;
28import org.powermock.modules.junit4.PowerMockRunner;
Naoki Shiotac88d9562013-06-18 15:21:56 -070029import org.slf4j.Logger;
30import org.slf4j.LoggerFactory;
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080031
mininet37dc5892013-06-04 10:58:44 -070032@RunWith(PowerMockRunner.class)
Naoki Shiotac88d9562013-06-18 15:21:56 -070033@PrepareForTest({LinkStorageImpl.class, GraphDBConnection.class, GraphDBOperation.class})
Jonathan Hartd1c5a1c2013-01-23 00:56:14 -080034public class LinkStorageImplTest {
Naoki Shiotac88d9562013-06-18 15:21:56 -070035 protected static Logger log = LoggerFactory.getLogger(LinkStorageImplTest.class);
36
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080037 private static ILinkStorage linkStorage;
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080038
Naoki Shiotac88d9562013-06-18 15:21:56 -070039 // Mock GraphDBConnection (do nothing)
40 private static GraphDBConnection conn;
41
42 // Mock GraphDBOperation (mocks port-related methods only)
43 private static TestableGraphDBOperation ope;
mininet37dc5892013-06-04 10:58:44 -070044
mininet9d203de2013-06-05 08:40:45 -070045 /**
46 * Setup code called before each tests.
47 * Read test graph data and replace DB access by test graph data.
48 * @throws Exception
49 */
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080050 @Before
Jonathan Hart627f10c2013-01-16 14:20:03 -080051 public void setUp() throws Exception{
Naoki Shiotac88d9562013-06-18 15:21:56 -070052 PowerMock.mockStatic(GraphDBConnection.class);
53 PowerMock.suppress(PowerMock.constructor(GraphDBConnection.class));
54 conn = PowerMock.createNiceMock(GraphDBConnection.class);
55 EasyMock.expect(GraphDBConnection.getInstance((String)EasyMock.anyObject())).andReturn(conn).anyTimes();
56 PowerMock.replay(GraphDBConnection.class);
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080057
Naoki Shiotac88d9562013-06-18 15:21:56 -070058 ope = new TestableGraphDBOperation();
59 PowerMock.expectNew(GraphDBOperation.class, (GraphDBConnection)EasyMock.anyObject()).andReturn(ope).anyTimes();
60 PowerMock.replay(GraphDBOperation.class);
61
mininet403d5892013-06-05 03:48:17 -070062 linkStorage = new LinkStorageImpl();
Naoki Shiotac88d9562013-06-18 15:21:56 -070063 linkStorage.init("/dummy/path/to/conf");
mininet403d5892013-06-05 03:48:17 -070064
Naoki Shiotac88d9562013-06-18 15:21:56 -070065 initLinks();
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080066 }
67
mininet9d203de2013-06-05 08:40:45 -070068 /**
69 * Closing code called after each tests.
70 * Discard test graph data.
71 * @throws Exception
72 */
Jonathan Hartd1c5a1c2013-01-23 00:56:14 -080073 @After
mininet403d5892013-06-05 03:48:17 -070074 public void tearDown() throws Exception {
75 // finish code
76 linkStorage.close();
Naoki Shiotac88d9562013-06-18 15:21:56 -070077 ope.close();
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -080078 }
79
Naoki Shiotacae568a2013-06-05 17:53:41 -070080 // TODO: remove @Ignore after UPDATE method is implemented
Naoki Shiota1b972862013-06-05 19:49:09 -070081 /**
82 * Test if update() can correctly updates LinkInfo for a Link.
83 */
mininet403d5892013-06-05 03:48:17 -070084 @Ignore @Test
85 public void testUpdate_UpdateSingleLink() {
86 Link linkToUpdate= createExistingLink();
Naoki Shiotacae568a2013-06-05 17:53:41 -070087 long currentTime = System.currentTimeMillis();
88 LinkInfo infoToUpdate = createFeasibleLinkInfo(currentTime);
89 LinkInfo infoToVerify = createFeasibleLinkInfo(currentTime);
mininet403d5892013-06-05 03:48:17 -070090
91 linkStorage.update(linkToUpdate, infoToUpdate, ILinkStorage.DM_OPERATION.UPDATE);
92
Naoki Shiotacae568a2013-06-05 17:53:41 -070093 doTestLinkHasStateOf(linkToUpdate, infoToVerify);
mininet403d5892013-06-05 03:48:17 -070094 }
95
Naoki Shiota1b972862013-06-05 19:49:09 -070096 /**
97 * Test if update() can correctly creates a Link.
98 */
mininet403d5892013-06-05 03:48:17 -070099 @Test
100 public void testUpdate_CreateSingleLink() {
101 Link linkToCreate = createFeasibleLink();
102 Link linkToVerify = createFeasibleLink();
103
104 //Use the link storage API to add the link
105 linkStorage.update(linkToCreate, ILinkStorage.DM_OPERATION.CREATE);
Naoki Shiotac88d9562013-06-18 15:21:56 -0700106 doTestLinkExist(linkToVerify);
mininet403d5892013-06-05 03:48:17 -0700107 }
108
Naoki Shiota1b972862013-06-05 19:49:09 -0700109 /**
110 * Test if update() can correctly inserts a Link.
111 */
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -0800112 @Test
mininet403d5892013-06-05 03:48:17 -0700113 public void testUpdate_InsertSingleLink(){
114 Link linkToInsert = createFeasibleLink();
115 Link linkToVerify = createFeasibleLink();
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -0800116
117 //Use the link storage API to add the link
mininet403d5892013-06-05 03:48:17 -0700118 linkStorage.update(linkToInsert, ILinkStorage.DM_OPERATION.INSERT);
Naoki Shiotac88d9562013-06-18 15:21:56 -0700119 doTestLinkExist(linkToVerify);
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -0800120 }
121
Naoki Shiota1b972862013-06-05 19:49:09 -0700122 /**
123 * Test if update() can correctly deletes a Link.
124 */
mininet403d5892013-06-05 03:48:17 -0700125 @Test
126 public void testUpdate_DeleteSingleLink(){
127 Link linkToDelete = createExistingLink();
128 Link linkToVerify = createExistingLink();
129
130 // Test deletion of existing link
131 linkStorage.update(linkToDelete, DM_OPERATION.DELETE);
Naoki Shiotac88d9562013-06-18 15:21:56 -0700132 doTestLinkNotExist(linkToVerify);
mininet403d5892013-06-05 03:48:17 -0700133 }
Naoki Shiota1b972862013-06-05 19:49:09 -0700134
135 /**
136 * Test if update() can correctly creates multiple Links.
137 */
mininet403d5892013-06-05 03:48:17 -0700138 @Test
139 public void testUpdate_CreateLinks(){
140 List<Link> linksToCreate = createFeasibleLinks();
141 List<Link> linksToVerify = createFeasibleLinks();
142
143 // Test creation of new links
144 linkStorage.update(linksToCreate, ILinkStorage.DM_OPERATION.CREATE);
145 for(Link l : linksToVerify) {
Naoki Shiotac88d9562013-06-18 15:21:56 -0700146 doTestLinkExist(l);
mininet403d5892013-06-05 03:48:17 -0700147 }
148 }
149
Naoki Shiota1b972862013-06-05 19:49:09 -0700150 /**
151 * Test if update() can handle mixture of normal/abnormal input for creation of Links.
Naoki Shiotac88d9562013-06-18 15:21:56 -0700152 * Deprecated: DBOperation is responsible.
Naoki Shiota1b972862013-06-05 19:49:09 -0700153 */
Naoki Shiotac88d9562013-06-18 15:21:56 -0700154 @Ignore @Test
mininet9d203de2013-06-05 08:40:45 -0700155 public void testUpdate_CreateLinks_Mixuture(){
mininet403d5892013-06-05 03:48:17 -0700156 List<Link> linksToCreate = new ArrayList<Link>();
157 linksToCreate.add(createFeasibleLink());
158 linksToCreate.add(createExistingLink());
159
160 // Test creation of mixture of new/existing links
161 linkStorage.update(linksToCreate, ILinkStorage.DM_OPERATION.CREATE);
Naoki Shiotac88d9562013-06-18 15:21:56 -0700162 doTestLinkExist(createFeasibleLink());
163 doTestLinkExist(createExistingLink());
mininet403d5892013-06-05 03:48:17 -0700164 }
165
Naoki Shiota1b972862013-06-05 19:49:09 -0700166 /**
167 * Test if update() can correctly inserts multiple Links.
168 */
mininet403d5892013-06-05 03:48:17 -0700169 @Test
170 public void testUpdate_InsertLinks(){
171 List<Link> linksToInsert = createFeasibleLinks();
172 List<Link> linksToVerify = createFeasibleLinks();
173
174 // Test insertion of new links
175 linkStorage.update(linksToInsert, ILinkStorage.DM_OPERATION.INSERT);
176 for(Link l : linksToVerify) {
Naoki Shiotac88d9562013-06-18 15:21:56 -0700177 doTestLinkExist(l);
mininet403d5892013-06-05 03:48:17 -0700178 }
179 }
180
Naoki Shiota1b972862013-06-05 19:49:09 -0700181 /**
182 * Test if update() can handle mixture of normal/abnormal input for creation of Links.
183 */
Naoki Shiotac88d9562013-06-18 15:21:56 -0700184 @Ignore @Test
mininet9d203de2013-06-05 08:40:45 -0700185 public void testUpdate_InsertLinks_Mixuture(){
mininet403d5892013-06-05 03:48:17 -0700186 List<Link> linksToInsert = new ArrayList<Link>();
187 linksToInsert.add(createFeasibleLink());
188 linksToInsert.add(createExistingLink());
189
190 // Test insertion of mixture of new/existing links
191 linkStorage.update(linksToInsert, ILinkStorage.DM_OPERATION.INSERT);
Naoki Shiotac88d9562013-06-18 15:21:56 -0700192 doTestLinkExist(createFeasibleLink());
193 doTestLinkExist(createExistingLink());
mininet403d5892013-06-05 03:48:17 -0700194 }
195
Naoki Shiota1b972862013-06-05 19:49:09 -0700196 /**
197 * Test if update() can correctly deletes multiple Links.
198 */
mininet403d5892013-06-05 03:48:17 -0700199 @Test
200 public void testUpdate_DeleteLinks(){
201 List<Link> linksToDelete = createExistingLinks();
202 List<Link> linksToVerify = createExistingLinks();
203
204 // Test deletion of existing links
205 linkStorage.update(linksToDelete, ILinkStorage.DM_OPERATION.DELETE);
206 for(Link l : linksToVerify) {
Naoki Shiotac88d9562013-06-18 15:21:56 -0700207 doTestLinkNotExist(l);
mininet403d5892013-06-05 03:48:17 -0700208 }
209 }
210
Naoki Shiota1b972862013-06-05 19:49:09 -0700211 /**
212 * Test if update() can handle mixture of normal/abnormal input for deletion of Links.
213 */
Naoki Shiotac88d9562013-06-18 15:21:56 -0700214 @Ignore @Test
mininet9d203de2013-06-05 08:40:45 -0700215 public void testUpdate_DeleteLinks_Mixuture(){
mininet403d5892013-06-05 03:48:17 -0700216 List<Link> linksToDelete = new ArrayList<Link>();
217 linksToDelete.add(createFeasibleLink());
218 linksToDelete.add(createExistingLink());
219
220 // Test deletion of mixture of new/existing links
221 linkStorage.update(linksToDelete, ILinkStorage.DM_OPERATION.DELETE);
Naoki Shiotac88d9562013-06-18 15:21:56 -0700222 doTestLinkNotExist(createFeasibleLink());
223 doTestLinkNotExist(createExistingLink());
mininet403d5892013-06-05 03:48:17 -0700224 }
225
Naoki Shiotacae568a2013-06-05 17:53:41 -0700226 // TODO: remove @Ignore after UPDATE method is implemented
Naoki Shiota1b972862013-06-05 19:49:09 -0700227 /**
228 * Test if updateLink() can correctly updates LinkInfo for a Link.
229 */
mininet9d203de2013-06-05 08:40:45 -0700230 @Ignore @Test
Naoki Shiota1b972862013-06-05 19:49:09 -0700231 public void testUpdateLink_Update() {
mininet9d203de2013-06-05 08:40:45 -0700232 Link linkToUpdate= createExistingLink();
Naoki Shiotacae568a2013-06-05 17:53:41 -0700233 long currentTime = System.currentTimeMillis();
234 LinkInfo infoToUpdate = createFeasibleLinkInfo(currentTime);
235 LinkInfo infoToVerify = createFeasibleLinkInfo(currentTime);
mininet9d203de2013-06-05 08:40:45 -0700236
Naoki Shiota1b972862013-06-05 19:49:09 -0700237 linkStorage.updateLink(linkToUpdate, infoToUpdate, ILinkStorage.DM_OPERATION.UPDATE);
mininet9d203de2013-06-05 08:40:45 -0700238
Naoki Shiotacae568a2013-06-05 17:53:41 -0700239 doTestLinkHasStateOf(linkToUpdate, infoToVerify);
mininet403d5892013-06-05 03:48:17 -0700240 }
241
Naoki Shiota1b972862013-06-05 19:49:09 -0700242 /**
243 * Test if updateLink() can correctly creates a Link.
244 */
mininet403d5892013-06-05 03:48:17 -0700245 @Test
Naoki Shiota1b972862013-06-05 19:49:09 -0700246 public void testUpdateLink_Create() {
mininet9d203de2013-06-05 08:40:45 -0700247 Link linkToCreate = createFeasibleLink();
248 Link linkToVerify = createFeasibleLink();
mininet403d5892013-06-05 03:48:17 -0700249
mininet9d203de2013-06-05 08:40:45 -0700250 //Use the link storage API to add the link
Naoki Shiota1b972862013-06-05 19:49:09 -0700251 linkStorage.updateLink(linkToCreate, null, ILinkStorage.DM_OPERATION.CREATE);
Naoki Shiotac88d9562013-06-18 15:21:56 -0700252 doTestLinkExist(linkToVerify);
mininet403d5892013-06-05 03:48:17 -0700253 }
254
Naoki Shiota1b972862013-06-05 19:49:09 -0700255 /**
256 * Test if updateLink() can correctly inserts a Link.
257 */
mininet403d5892013-06-05 03:48:17 -0700258 @Test
Naoki Shiota1b972862013-06-05 19:49:09 -0700259 public void testUpdateLink_Insert() {
mininet9d203de2013-06-05 08:40:45 -0700260 Link linkToInsert = createFeasibleLink();
261 Link linkToVerify = createFeasibleLink();
mininet403d5892013-06-05 03:48:17 -0700262
mininet9d203de2013-06-05 08:40:45 -0700263 //Use the link storage API to add the link
Naoki Shiota1b972862013-06-05 19:49:09 -0700264 linkStorage.updateLink(linkToInsert, null, ILinkStorage.DM_OPERATION.INSERT);
mininet9d203de2013-06-05 08:40:45 -0700265
Naoki Shiotac88d9562013-06-18 15:21:56 -0700266 doTestLinkExist(linkToVerify);
mininet9d203de2013-06-05 08:40:45 -0700267 }
268
269 // TODO: Check if addOrUpdateLink() should accept DELETE operation. If not, remove this test.
Naoki Shiota1b972862013-06-05 19:49:09 -0700270 /**
271 * Test if updateLink() can correctly deletes a Link.
272 */
mininet9d203de2013-06-05 08:40:45 -0700273 @Ignore @Test
Naoki Shiota1b972862013-06-05 19:49:09 -0700274 public void testUpdateLink_Delete() {
mininet9d203de2013-06-05 08:40:45 -0700275 Link linkToDelete = createExistingLink();
276 Link linkToVerify = createExistingLink();
277
278 // Test deletion of existing link
Naoki Shiota1b972862013-06-05 19:49:09 -0700279 linkStorage.updateLink(linkToDelete, null, DM_OPERATION.DELETE);
Naoki Shiotac88d9562013-06-18 15:21:56 -0700280 doTestLinkNotExist(linkToVerify);
mininet9d203de2013-06-05 08:40:45 -0700281
282 linkToDelete = createFeasibleLink();
283 linkToVerify = createFeasibleLink();
284
285 // Test deletion of not-existing link
Naoki Shiota1b972862013-06-05 19:49:09 -0700286 linkStorage.updateLink(linkToDelete, null, DM_OPERATION.DELETE);
Naoki Shiotac88d9562013-06-18 15:21:56 -0700287 doTestLinkNotExist(linkToVerify);
mininet9d203de2013-06-05 08:40:45 -0700288 }
289
Naoki Shiota1b972862013-06-05 19:49:09 -0700290 /**
291 * Test if getLinks() can correctly return Links connected to specific DPID and port.
292 */
mininet9d203de2013-06-05 08:40:45 -0700293 @Test
294 public void testGetLinks_ByDpidPort(){
295 Link linkToVerify = createExistingLink();
296 Long dpid = linkToVerify.getSrc();
297 short port = (short)linkToVerify.getSrcPort();
298
299 List<Link> list = linkStorage.getLinks(dpid, port);
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -0800300
Jonathan Hartc86a2ea2013-01-15 22:39:42 -0800301 assertEquals(list.size(), 1);
302
303 Link l = list.get(0);
mininet403d5892013-06-05 03:48:17 -0700304 assertEquals(l.getSrc(), linkToVerify.getSrc());
305 assertEquals(l.getSrcPort(), linkToVerify.getSrcPort());
306 assertEquals(l.getDst(), linkToVerify.getDst());
307 assertEquals(l.getDstPort(), linkToVerify.getDstPort());
308
309 Link linkToVerifyNot = createFeasibleLink();
310
311 List<Link> list2 = linkStorage.getLinks(linkToVerifyNot.getSrc(), (short)linkToVerifyNot.getSrcPort());
312
313 assertEquals(list2.size(), 0);
Jonathan Hartc86a2ea2013-01-15 22:39:42 -0800314 }
315
Naoki Shiota1b972862013-06-05 19:49:09 -0700316 /**
317 * Test if getLinks() can correctly return Links connected to specific MAC address.
318 */
mininet403d5892013-06-05 03:48:17 -0700319 @Test
mininet9d203de2013-06-05 08:40:45 -0700320 public void testGetLinks_ByString() {
mininet403d5892013-06-05 03:48:17 -0700321 Link linkToVeryfy = createExistingLink();
mininet9d203de2013-06-05 08:40:45 -0700322 String dpid = HexString.toHexString(linkToVeryfy.getSrc());
Jonathan Hartc86a2ea2013-01-15 22:39:42 -0800323
mininet9d203de2013-06-05 08:40:45 -0700324 List<Link> links = linkStorage.getLinks(dpid);
mininet403d5892013-06-05 03:48:17 -0700325 assertTrue(links.contains(linkToVeryfy));
326
327 Link linkToVerifyNot = createFeasibleLink();
328 assertFalse(links.contains(linkToVerifyNot));
Jonathan Hartc86a2ea2013-01-15 22:39:42 -0800329 }
330
Naoki Shiota1b972862013-06-05 19:49:09 -0700331 /**
332 * Test if deleteLink() can correctly delete a Link.
333 */
mininet403d5892013-06-05 03:48:17 -0700334 @Test
335 public void testDeleteLink() {
336 // Deletion of existing link
337 Link linkToDelete = createExistingLink();
338 Link linkToVerify = createExistingLink();
339
340 linkStorage.deleteLink(linkToDelete);
Naoki Shiotac88d9562013-06-18 15:21:56 -0700341 doTestLinkNotExist(linkToVerify);
mininet403d5892013-06-05 03:48:17 -0700342 }
343
Naoki Shiota1b972862013-06-05 19:49:09 -0700344 /**
345 * Test if deleteLinks() can correctly delete Links.
346 */
mininet403d5892013-06-05 03:48:17 -0700347 @Test
Jonathan Hartc86a2ea2013-01-15 22:39:42 -0800348 public void testDeleteLinks(){
mininet403d5892013-06-05 03:48:17 -0700349 List<Link> linksToDelete = createExistingLinks();
350 List<Link> linksToVerify = createExistingLinks();
Jonathan Hartc86a2ea2013-01-15 22:39:42 -0800351
mininet403d5892013-06-05 03:48:17 -0700352 linkStorage.deleteLinks(linksToDelete);
353 for(Link l : linksToVerify) {
Naoki Shiotac88d9562013-06-18 15:21:56 -0700354 doTestLinkNotExist(l);
mininet403d5892013-06-05 03:48:17 -0700355 }
356 }
357
Naoki Shiota1b972862013-06-05 19:49:09 -0700358 /**
359 * Test if deleteLinks() can handle mixture of normal/abnormal input.
360 */
Naoki Shiotac88d9562013-06-18 15:21:56 -0700361 @Ignore @Test
mininet9d203de2013-06-05 08:40:45 -0700362 public void testDeleteLinks_Mixture(){
363 List<Link> linksToDelete = new ArrayList<Link>();
364 linksToDelete.add(createFeasibleLink());
365 linksToDelete.add(createExistingLink());
366
367 // Test deletion of mixture of new/existing links
368 linkStorage.deleteLinks(linksToDelete);
Naoki Shiotac88d9562013-06-18 15:21:56 -0700369 doTestLinkNotExist(createFeasibleLink());
370 doTestLinkNotExist(createExistingLink());
mininet9d203de2013-06-05 08:40:45 -0700371 }
372
Naoki Shiota1b972862013-06-05 19:49:09 -0700373 /**
374 * Test if getActiveLinks() can correctly return active Links.
375 */
mininet9d203de2013-06-05 08:40:45 -0700376 @Test
mininet403d5892013-06-05 03:48:17 -0700377 public void testGetActiveLinks() {
378 Link existingLink = createExistingLink();
379 Link notExistingLink = createFeasibleLink();
380
381 List<Link> links = linkStorage.getActiveLinks();
Jonathan Hartc86a2ea2013-01-15 22:39:42 -0800382
mininet403d5892013-06-05 03:48:17 -0700383 assertTrue(links.contains(existingLink));
384 assertFalse(links.contains(notExistingLink));
385 }
386
Naoki Shiota1b972862013-06-05 19:49:09 -0700387 /**
388 * Test if deleteLinksOnPort() can delete Links.
389 */
mininet403d5892013-06-05 03:48:17 -0700390 @Test
391 public void testDeleteLinksOnPort() {
392 Link linkToDelete = createExistingLink();
393 Link linkToVerify = createExistingLink();
394
395 linkStorage.deleteLinksOnPort(linkToDelete.getSrc(), linkToDelete.getSrcPort());
396
Naoki Shiotac88d9562013-06-18 15:21:56 -0700397 doTestLinkNotExist(linkToVerify);
mininet403d5892013-06-05 03:48:17 -0700398 }
mininet9d203de2013-06-05 08:40:45 -0700399
mininet403d5892013-06-05 03:48:17 -0700400 /**
Naoki Shiotac88d9562013-06-18 15:21:56 -0700401 * Test if specific link is existing
mininet9d203de2013-06-05 08:40:45 -0700402 * @param link
mininet403d5892013-06-05 03:48:17 -0700403 */
Naoki Shiotac88d9562013-06-18 15:21:56 -0700404 private void doTestLinkExist(Link link) {
405 assertTrue(ope.hasLinkBetween(HexString.toHexString(link.getSrc()),
406 link.getSrcPort(),
407 HexString.toHexString(link.getDst()),
408 link.getDstPort()));
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -0800409 }
410
mininet403d5892013-06-05 03:48:17 -0700411 /**
412 * Test if titanGraph doesn't have specific link
413 * @param link
414 */
Naoki Shiotac88d9562013-06-18 15:21:56 -0700415 private void doTestLinkNotExist(Link link) {
416 assertFalse(ope.hasLinkBetween(HexString.toHexString(link.getSrc()),
417 link.getSrcPort(),
418 HexString.toHexString(link.getDst()),
419 link.getDstPort()));
mininet403d5892013-06-05 03:48:17 -0700420 }
Naoki Shiotacae568a2013-06-05 17:53:41 -0700421
422 /**
423 * Test if titanGraph has specific Link with specific LinkInfo
424 * @param link
425 */
426 private void doTestLinkHasStateOf(Link link, LinkInfo info) {
Naoki Shiotacae568a2013-06-05 17:53:41 -0700427 }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700428
mininet403d5892013-06-05 03:48:17 -0700429 //----------------- Creation of test data -----------------------
Naoki Shiotac88d9562013-06-18 15:21:56 -0700430 // Assume a network shown below.
431 //
432 // [dpid1]--+--[port:1]----[port:1]--+--[dpid2]
433 // | |
434 // +--[port:2] [port:2]--+
435 // |
436 // +--[port:3] [port:1]--+--[dpid3]
437 // | |
438 // +--[port:4]----[port:2]--+
439 //
440 // dpid1 : 00:00:00:00:0a:01
441 // dpid2 : 00:00:00:00:0a:02
442 // dpid3 : 00:00:00:00:0a:03
443
444 private void initLinks() {
445 final String dpid1 = "00:00:00:00:0a:01";
446 final String dpid2 = "00:00:00:00:0a:02";
447 final String dpid3 = "00:00:00:00:0a:03";
448
449 ope.createNewSwitchForTest(dpid1).setStateForTest("ACTIVE");
450 ope.createNewSwitchForTest(dpid2).setStateForTest("ACTIVE");
451 ope.createNewSwitchForTest(dpid3).setStateForTest("ACTIVE");
452
453 TestPortObject ports1 [] = {
454 ope.createNewPortForTest(dpid1, (short)1),
455 ope.createNewPortForTest(dpid1, (short)2),
456 ope.createNewPortForTest(dpid1, (short)3),
457 ope.createNewPortForTest(dpid1, (short)4),
458 };
459
460 TestPortObject ports2 [] = {
461 ope.createNewPortForTest(dpid2, (short)1),
462 ope.createNewPortForTest(dpid2, (short)2),
463 };
464
465 TestPortObject ports3 [] = {
466 ope.createNewPortForTest(dpid3, (short)1),
467 ope.createNewPortForTest(dpid3, (short)2),
468 };
469
470 ope.setLinkBetweenPortsForTest(ports1[0], ports2[0]);
471 ope.setLinkBetweenPortsForTest(ports1[3], ports3[1]);
mininet403d5892013-06-05 03:48:17 -0700472 }
473
mininet9d203de2013-06-05 08:40:45 -0700474 /**
Naoki Shiotac88d9562013-06-18 15:21:56 -0700475 * Returns new Link object of existing link
476 * @return new Link object
477 */
478 private Link createExistingLink() {
479 return new Link(Long.decode("0x0000000000000a01"), 1, Long.decode("0x0000000000000a02"), 1);
480 }
481
482 /**
483 * Returns new Link object of not-existing but feasible link
mininet9d203de2013-06-05 08:40:45 -0700484 * @return new Link object
485 */
mininet403d5892013-06-05 03:48:17 -0700486 private Link createFeasibleLink() {
Naoki Shiotac88d9562013-06-18 15:21:56 -0700487 return new Link(Long.decode("0x0000000000000a01"), 3, Long.decode("0x0000000000000a03"), 1);
mininet403d5892013-06-05 03:48:17 -0700488 }
489
mininet9d203de2013-06-05 08:40:45 -0700490 // make NO sense while test-network data doesn't define physical network (i.e. any link is feasible)
mininet403d5892013-06-05 03:48:17 -0700491 @SuppressWarnings("unused")
492 private Link createInfeasibleLink() {
Naoki Shiotac88d9562013-06-18 15:21:56 -0700493 return new Link(Long.decode("0x0000000000000a01"), 1, Long.decode("0x0000000000000a03"), 3);
mininet403d5892013-06-05 03:48:17 -0700494 }
495
mininet9d203de2013-06-05 08:40:45 -0700496 /**
497 * Returns list of Link objects which all has information of existing link in titanGraph
498 * @return ArrayList of new Link objects
499 */
mininet403d5892013-06-05 03:48:17 -0700500 private List<Link> createExistingLinks() {
501 List<Link> links = new ArrayList<Link>();
Naoki Shiotac88d9562013-06-18 15:21:56 -0700502 links.add(new Link(Long.decode("0x0000000000000a01"), 1, Long.decode("0x0000000000000a02"), 1));
503 links.add(new Link(Long.decode("0x0000000000000a01"), 4, Long.decode("0x0000000000000a03"), 2));
mininet403d5892013-06-05 03:48:17 -0700504 return links;
505 }
506
mininet9d203de2013-06-05 08:40:45 -0700507 /**
508 * Returns list of Link objects which all has information of not-existing but feasible link
509 * @return ArrayList of new Link objects
510 */
mininet403d5892013-06-05 03:48:17 -0700511 private List<Link> createFeasibleLinks() {
512 List<Link> links = new ArrayList<Link>();
Naoki Shiotac88d9562013-06-18 15:21:56 -0700513 links.add(new Link(Long.decode("0x0000000000000a01"), 2, Long.decode("0x0000000000000a02"), 2));
514 links.add(new Link(Long.decode("0x0000000000000a01"), 3, Long.decode("0x0000000000000a03"), 1));
mininet403d5892013-06-05 03:48:17 -0700515 return links;
516 }
Naoki Shiotacae568a2013-06-05 17:53:41 -0700517
518 /**
519 * Returns new LinkInfo object with convenient values.
520 * @return LinkInfo object
521 */
522 private LinkInfo createFeasibleLinkInfo(long time) {
523 long time_first = time;
524 long time_last_lldp = time + 50;
525 long time_last_bddp = time + 100;
526 int state_src = OFPhysicalPort.OFPortState.OFPPS_STP_FORWARD.getValue();
527 int state_dst = OFPhysicalPort.OFPortState.OFPPS_STP_LISTEN.getValue();
528
529 return new LinkInfo(time_first,
530 time_last_lldp,
531 time_last_bddp,
532 state_src,
533 state_dst);
534 }
mininet403d5892013-06-05 03:48:17 -0700535 //---------------------------------------------------------------
Jonathan Hartb7e3d2c2013-01-15 18:45:19 -0800536}