blob: ceb9135dd7802064ef112c9a28872e3def12afaa [file] [log] [blame]
Toshio Koide5f260652014-01-30 14:41:12 -08001package net.onrc.onos.ofcontroller.app;
2
3import static org.junit.Assert.*;
4
5import net.onrc.onos.ofcontroller.app.Flow.FlowState;
6
7import org.junit.After;
8import org.junit.Before;
9import org.junit.Test;
10
11/**
12 * This code is valid for the architectural study purpose only.
13 * @author Toshio Koide (t-koide@onlab.us)
14 */
15public class SimpleTrafficEngineeringTest {
16 NetworkGraph g;
17
18 @Before
19 public void setUp() {
20 g = new NetworkGraph();
21
22 // add 10 switches (24 ports switch)
23 for (Integer i=1; i<10; i++) {
24 Switch sw = g.addSwitch("v" + i.toString());
25 for (Integer j=1; j<=24; j++) {
26 sw.addPort(j);
27 }
28 }
29
30 // add loop path
31 g.addBidirectionalLinks("v1", 1, "v2", 2);
32 g.addBidirectionalLinks("v2", 1, "v3", 2);
33 g.addBidirectionalLinks("v3", 1, "v4", 2);
34 g.addBidirectionalLinks("v4", 1, "v5", 2);
35 g.addBidirectionalLinks("v5", 1, "v6", 2);
36 g.addBidirectionalLinks("v6", 1, "v7", 2);
37 g.addBidirectionalLinks("v7", 1, "v8", 2);
38 g.addBidirectionalLinks("v8", 1, "v9", 2);
39 g.addBidirectionalLinks("v9", 1, "v1", 2);
40
41 // add other links
42 g.addBidirectionalLinks("v1", 3, "v2", 3);
43 g.addBidirectionalLinks("v2", 4, "v3", 4);
44 g.addBidirectionalLinks("v4", 5, "v3", 5);
45 g.addBidirectionalLinks("v5", 6, "v6", 6);
46 g.addBidirectionalLinks("v7", 7, "v6", 7);
47 g.addBidirectionalLinks("v8", 8, "v1", 8);
48 g.addBidirectionalLinks("v9", 9, "v1", 9);
49
50 // set capacity of all links to 1000Mbps
51 for (Link link: g.getLinks()) {
52 link.setCapacity(1000.0);
53 }
54 }
55
56 @After
57 public void tearDown() {
58 }
59
60 @Test
61 public void useCase1() {
62 // load TE algorithm
63 SimpleTrafficEngineering te = new SimpleTrafficEngineering(g);
64
65 // get edge ports
66 SwitchPort srcPort = g.getSwitch("v1").getPort(20);
67 SwitchPort dstPort = g.getSwitch("v6").getPort(20);
68
69 // specify bandwidth (Mbps)
70 double bandWidth = 1000.0;
71
72 // allocate flow
73 ConstrainedFlow flow = te.allocate(srcPort, dstPort, bandWidth);
74 assertTrue(flow.isState(FlowState.PathInstalled));
75
76 // release flow
77 te.release(flow);
78 assertTrue(flow.isState(FlowState.PathRemoved));
79 }
80}