blob: 8318476263e5b4ce223489ee60695f510a227620 [file] [log] [blame]
Jonathan Hartaa380972014-04-03 10:24:46 -07001package net.onrc.onos.core.intent;
Toshio Koide122e5702014-02-21 17:53:51 -08002
Jonathan Harta88fd242014-04-03 11:24:54 -07003import static org.easymock.EasyMock.createMock;
4import static org.easymock.EasyMock.expect;
5import static org.easymock.EasyMock.replay;
6import static org.junit.Assert.assertEquals;
7import static org.junit.Assert.assertTrue;
Toshio Koide122e5702014-02-21 17:53:51 -08008
9import java.util.Collection;
10
Jonathan Hartaa380972014-04-03 10:24:46 -070011import net.onrc.onos.core.intent.IntentOperation.Operator;
Jonathan Hart472062d2014-04-03 10:56:48 -070012import net.onrc.onos.core.topology.Link;
13import net.onrc.onos.core.topology.LinkEvent;
Jonathan Hart472062d2014-04-03 10:56:48 -070014import net.onrc.onos.core.topology.Port;
15import net.onrc.onos.core.topology.Switch;
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -070016import net.onrc.onos.core.util.Dpid;
Yuta HIGUCHI02ccb8c2014-07-10 11:29:45 -070017import net.onrc.onos.core.util.LinkTuple;
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -070018import net.onrc.onos.core.util.PortNumber;
Toshio Koide122e5702014-02-21 17:53:51 -080019
20import org.junit.After;
21import org.junit.Before;
22import org.junit.Test;
23
24public class PathIntentMapTest {
Yuta HIGUCHI5c8cbeb2014-06-27 11:13:48 -070025 private static final PortNumber PORT_NUMBER_1 = new PortNumber((short) 1);
26 private static final PortNumber PORT_NUMBER_3 = new PortNumber((short) 3);
27 private static final Dpid DPID_1 = new Dpid(1L);
28 private static final Dpid DPID_2 = new Dpid(2L);
29 private static final Dpid DPID_3 = new Dpid(3L);
30 private static final Dpid DPID_4 = new Dpid(4L);
Ray Milkey269ffb92014-04-03 14:43:30 -070031 Link link12, link23, link24;
32 Switch sw1, sw2, sw3, sw4;
33 Port port11, port22, port21, port23, port31, port41;
34 Path path1, path2;
35 PathIntent intent1, intent2;
Toshio Koide122e5702014-02-21 17:53:51 -080036
Ray Milkey269ffb92014-04-03 14:43:30 -070037 @Before
38 public void setUp() throws Exception {
39 sw1 = createMock(Switch.class);
40 sw2 = createMock(Switch.class);
41 sw3 = createMock(Switch.class);
42 sw4 = createMock(Switch.class);
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -070043 expect(sw1.getDpid()).andReturn(new Dpid(1L)).anyTimes();
44 expect(sw2.getDpid()).andReturn(new Dpid(2L)).anyTimes();
45 expect(sw3.getDpid()).andReturn(new Dpid(3L)).anyTimes();
46 expect(sw4.getDpid()).andReturn(new Dpid(4L)).anyTimes();
Ray Milkey269ffb92014-04-03 14:43:30 -070047 replay(sw1);
48 replay(sw2);
49 replay(sw3);
50 replay(sw4);
Toshio Koide122e5702014-02-21 17:53:51 -080051
Ray Milkey269ffb92014-04-03 14:43:30 -070052 port11 = createMock(Port.class);
53 port22 = createMock(Port.class);
54 port21 = createMock(Port.class);
55 port23 = createMock(Port.class);
56 port31 = createMock(Port.class);
57 port41 = createMock(Port.class);
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -070058 expect(port11.getNumber()).andReturn(new PortNumber((short) 1)).anyTimes();
59 expect(port22.getNumber()).andReturn(new PortNumber((short) 2)).anyTimes();
60 expect(port21.getNumber()).andReturn(new PortNumber((short) 1)).anyTimes();
61 expect(port23.getNumber()).andReturn(new PortNumber((short) 3)).anyTimes();
62 expect(port31.getNumber()).andReturn(new PortNumber((short) 1)).anyTimes();
63 expect(port41.getNumber()).andReturn(new PortNumber((short) 1)).anyTimes();
Ray Milkey269ffb92014-04-03 14:43:30 -070064 replay(port11);
65 replay(port22);
66 replay(port21);
67 replay(port23);
68 replay(port31);
69 replay(port41);
Toshio Koide122e5702014-02-21 17:53:51 -080070
Ray Milkey269ffb92014-04-03 14:43:30 -070071 link12 = createMock(Link.class);
72 link23 = createMock(Link.class);
73 link24 = createMock(Link.class);
74 expect(link12.getCapacity()).andReturn(1000.0).anyTimes();
Ray Milkey269ffb92014-04-03 14:43:30 -070075 expect(link12.getSrcSwitch()).andReturn(sw1).anyTimes();
Ray Milkey269ffb92014-04-03 14:43:30 -070076 expect(link12.getSrcPort()).andReturn(port11).anyTimes();
Ray Milkey269ffb92014-04-03 14:43:30 -070077 expect(link12.getDstSwitch()).andReturn(sw2).anyTimes();
Ray Milkey269ffb92014-04-03 14:43:30 -070078 expect(link12.getDstPort()).andReturn(port22).anyTimes();
Yuta HIGUCHI02ccb8c2014-07-10 11:29:45 -070079 expect(link12.getLinkTuple()).andReturn(
80 new LinkTuple(DPID_1, port11.getNumber(),
81 DPID_2, port22.getNumber())).anyTimes();
82
83 expect(link23.getCapacity()).andReturn(1000.0).anyTimes();
84 expect(link23.getSrcSwitch()).andReturn(sw2).anyTimes();
85 expect(link23.getSrcPort()).andReturn(port21).anyTimes();
86 expect(link23.getDstSwitch()).andReturn(sw3).anyTimes();
Ray Milkey269ffb92014-04-03 14:43:30 -070087 expect(link23.getDstPort()).andReturn(port31).anyTimes();
Yuta HIGUCHI02ccb8c2014-07-10 11:29:45 -070088 expect(link23.getLinkTuple()).andReturn(
89 new LinkTuple(DPID_2, port21.getNumber(),
90 DPID_3, port31.getNumber())).anyTimes();
91
92 expect(link24.getCapacity()).andReturn(1000.0).anyTimes();
93 expect(link24.getSrcSwitch()).andReturn(sw2).anyTimes();
94 expect(link24.getSrcPort()).andReturn(port23).anyTimes();
95 expect(link24.getDstSwitch()).andReturn(sw4).anyTimes();
Ray Milkey269ffb92014-04-03 14:43:30 -070096 expect(link24.getDstPort()).andReturn(port41).anyTimes();
Yuta HIGUCHI02ccb8c2014-07-10 11:29:45 -070097 expect(link24.getLinkTuple()).andReturn(
98 new LinkTuple(DPID_2, port23.getNumber(),
99 DPID_4, port41.getNumber())).anyTimes();
100
Ray Milkey269ffb92014-04-03 14:43:30 -0700101 replay(link12);
102 replay(link23);
103 replay(link24);
Toshio Koide122e5702014-02-21 17:53:51 -0800104
Ray Milkey269ffb92014-04-03 14:43:30 -0700105 path1 = new Path();
106 path1.add(new LinkEvent(link12));
107 path1.add(new LinkEvent(link23));
Toshio Koide122e5702014-02-21 17:53:51 -0800108
Ray Milkey269ffb92014-04-03 14:43:30 -0700109 path2 = new Path();
110 path2.add(new LinkEvent(link12));
111 path2.add(new LinkEvent(link24));
Toshio Koide122e5702014-02-21 17:53:51 -0800112
Ray Milkey269ffb92014-04-03 14:43:30 -0700113 intent1 = new PathIntent("1", path1, 400.0, new Intent("_1"));
114 intent2 = new PathIntent("2", path2, 400.0, new Intent("_2"));
115 }
Toshio Koide122e5702014-02-21 17:53:51 -0800116
Ray Milkey269ffb92014-04-03 14:43:30 -0700117 @After
118 public void tearDown() throws Exception {
119 }
Toshio Koide122e5702014-02-21 17:53:51 -0800120
Ray Milkey269ffb92014-04-03 14:43:30 -0700121 @Test
122 public void testCreate() {
123 PathIntentMap intents = new PathIntentMap();
124 assertEquals(0, intents.getAllIntents().size());
125 }
Toshio Koide122e5702014-02-21 17:53:51 -0800126
Ray Milkey269ffb92014-04-03 14:43:30 -0700127 @Test
128 public void testGetIntentsByDpid() {
129 IntentOperationList operations = new IntentOperationList();
130 operations.add(Operator.ADD, intent1);
131 operations.add(Operator.ADD, intent2);
132 assertEquals(2, operations.size());
Toshio Koide122e5702014-02-21 17:53:51 -0800133
Ray Milkey269ffb92014-04-03 14:43:30 -0700134 PathIntentMap intents = new PathIntentMap();
135 intents.executeOperations(operations);
136 assertEquals(2, intents.getAllIntents().size());
Toshio Koide122e5702014-02-21 17:53:51 -0800137
Yuta HIGUCHI5c8cbeb2014-06-27 11:13:48 -0700138 Collection<PathIntent> pathIntents = intents.getIntentsByDpid(DPID_1);
Ray Milkey269ffb92014-04-03 14:43:30 -0700139 assertEquals(2, pathIntents.size());
140 assertTrue(pathIntents.contains(intent1));
141 assertTrue(pathIntents.contains(intent2));
Toshio Koide122e5702014-02-21 17:53:51 -0800142
Yuta HIGUCHI5c8cbeb2014-06-27 11:13:48 -0700143 pathIntents = intents.getIntentsByDpid(DPID_2);
Ray Milkey269ffb92014-04-03 14:43:30 -0700144 assertEquals(2, pathIntents.size());
145 assertTrue(pathIntents.contains(intent1));
146 assertTrue(pathIntents.contains(intent2));
Toshio Koide122e5702014-02-21 17:53:51 -0800147
Yuta HIGUCHI5c8cbeb2014-06-27 11:13:48 -0700148 pathIntents = intents.getIntentsByDpid(DPID_3);
Ray Milkey269ffb92014-04-03 14:43:30 -0700149 assertEquals(1, pathIntents.size());
150 assertTrue(pathIntents.contains(intent1));
Toshio Koide122e5702014-02-21 17:53:51 -0800151
Yuta HIGUCHI5c8cbeb2014-06-27 11:13:48 -0700152 pathIntents = intents.getIntentsByDpid(DPID_4);
Ray Milkey269ffb92014-04-03 14:43:30 -0700153 assertEquals(1, pathIntents.size());
154 assertTrue(pathIntents.contains(intent2));
155 }
Toshio Koide122e5702014-02-21 17:53:51 -0800156
Ray Milkey269ffb92014-04-03 14:43:30 -0700157 @Test
158 public void testGetPathIntentsByPort() {
159 IntentOperationList operations = new IntentOperationList();
160 operations.add(Operator.ADD, intent1);
161 operations.add(Operator.ADD, intent2);
162 assertEquals(2, operations.size());
Toshio Koide122e5702014-02-21 17:53:51 -0800163
Ray Milkey269ffb92014-04-03 14:43:30 -0700164 PathIntentMap intents = new PathIntentMap();
165 intents.executeOperations(operations);
166 assertEquals(2, intents.getAllIntents().size());
Toshio Koide122e5702014-02-21 17:53:51 -0800167
Yuta HIGUCHI5c8cbeb2014-06-27 11:13:48 -0700168 Collection<PathIntent> pathIntents = intents.getIntentsByPort(DPID_1, PORT_NUMBER_1);
Ray Milkey269ffb92014-04-03 14:43:30 -0700169 assertEquals(2, pathIntents.size());
170 assertTrue(pathIntents.contains(intent1));
171 assertTrue(pathIntents.contains(intent2));
Toshio Koide122e5702014-02-21 17:53:51 -0800172
Yuta HIGUCHI5c8cbeb2014-06-27 11:13:48 -0700173 pathIntents = intents.getIntentsByPort(DPID_2, PORT_NUMBER_1);
Ray Milkey269ffb92014-04-03 14:43:30 -0700174 assertEquals(1, pathIntents.size());
175 assertTrue(pathIntents.contains(intent1));
Toshio Koide122e5702014-02-21 17:53:51 -0800176
Yuta HIGUCHI5c8cbeb2014-06-27 11:13:48 -0700177 pathIntents = intents.getIntentsByPort(DPID_2, PORT_NUMBER_3);
Ray Milkey269ffb92014-04-03 14:43:30 -0700178 assertEquals(1, pathIntents.size());
179 assertTrue(pathIntents.contains(intent2));
180 }
Toshio Koide122e5702014-02-21 17:53:51 -0800181
Ray Milkey269ffb92014-04-03 14:43:30 -0700182 @Test
183 public void testGetPathIntentsByLink() {
184 IntentOperationList operations = new IntentOperationList();
185 operations.add(Operator.ADD, intent1);
186 operations.add(Operator.ADD, intent2);
187 assertEquals(2, operations.size());
Toshio Koide122e5702014-02-21 17:53:51 -0800188
Ray Milkey269ffb92014-04-03 14:43:30 -0700189 PathIntentMap intents = new PathIntentMap();
190 intents.executeOperations(operations);
191 assertEquals(2, intents.getAllIntents().size());
Toshio Koide122e5702014-02-21 17:53:51 -0800192
Ray Milkey269ffb92014-04-03 14:43:30 -0700193 Collection<PathIntent> pathIntents = intents.getIntentsByLink(new LinkEvent(link12));
194 assertEquals(2, pathIntents.size());
195 assertTrue(pathIntents.contains(intent1));
196 assertTrue(pathIntents.contains(intent2));
Toshio Koide122e5702014-02-21 17:53:51 -0800197
Ray Milkey269ffb92014-04-03 14:43:30 -0700198 pathIntents = intents.getIntentsByLink(new LinkEvent(link23));
199 assertEquals(1, pathIntents.size());
200 assertTrue(pathIntents.contains(intent1));
Toshio Koide122e5702014-02-21 17:53:51 -0800201
Ray Milkey269ffb92014-04-03 14:43:30 -0700202 pathIntents = intents.getIntentsByLink(new LinkEvent(link24));
203 assertEquals(1, pathIntents.size());
204 assertTrue(pathIntents.contains(intent2));
205 }
Toshio Koide122e5702014-02-21 17:53:51 -0800206
Ray Milkey269ffb92014-04-03 14:43:30 -0700207 @Test
208 public void testGetAvailableBandwidth() {
209 IntentOperationList operations = new IntentOperationList();
210 operations.add(Operator.ADD, intent1);
211 operations.add(Operator.ADD, intent2);
212 assertEquals(2, operations.size());
Toshio Koide122e5702014-02-21 17:53:51 -0800213
Ray Milkey269ffb92014-04-03 14:43:30 -0700214 PathIntentMap intents = new PathIntentMap();
215 intents.executeOperations(operations);
216 assertEquals(2, intents.getAllIntents().size());
Toshio Koide122e5702014-02-21 17:53:51 -0800217
Ray Milkey269ffb92014-04-03 14:43:30 -0700218 assertEquals(200.0, intents.getAvailableBandwidth(link12), 0.0);
219 }
Toshio Koide122e5702014-02-21 17:53:51 -0800220}