blob: b8d9a48c034a6a1f98cc96b7d247a23ec5abdb07 [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;
17import net.onrc.onos.core.util.PortNumber;
Toshio Koide122e5702014-02-21 17:53:51 -080018
19import org.junit.After;
20import org.junit.Before;
21import org.junit.Test;
22
23public class PathIntentMapTest {
Yuta HIGUCHI5c8cbeb2014-06-27 11:13:48 -070024 private static final PortNumber PORT_NUMBER_1 = new PortNumber((short) 1);
25 private static final PortNumber PORT_NUMBER_3 = new PortNumber((short) 3);
26 private static final Dpid DPID_1 = new Dpid(1L);
27 private static final Dpid DPID_2 = new Dpid(2L);
28 private static final Dpid DPID_3 = new Dpid(3L);
29 private static final Dpid DPID_4 = new Dpid(4L);
Ray Milkey269ffb92014-04-03 14:43:30 -070030 Link link12, link23, link24;
31 Switch sw1, sw2, sw3, sw4;
32 Port port11, port22, port21, port23, port31, port41;
33 Path path1, path2;
34 PathIntent intent1, intent2;
Toshio Koide122e5702014-02-21 17:53:51 -080035
Ray Milkey269ffb92014-04-03 14:43:30 -070036 @Before
37 public void setUp() throws Exception {
38 sw1 = createMock(Switch.class);
39 sw2 = createMock(Switch.class);
40 sw3 = createMock(Switch.class);
41 sw4 = createMock(Switch.class);
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -070042 expect(sw1.getDpid()).andReturn(new Dpid(1L)).anyTimes();
43 expect(sw2.getDpid()).andReturn(new Dpid(2L)).anyTimes();
44 expect(sw3.getDpid()).andReturn(new Dpid(3L)).anyTimes();
45 expect(sw4.getDpid()).andReturn(new Dpid(4L)).anyTimes();
Ray Milkey269ffb92014-04-03 14:43:30 -070046 replay(sw1);
47 replay(sw2);
48 replay(sw3);
49 replay(sw4);
Toshio Koide122e5702014-02-21 17:53:51 -080050
Ray Milkey269ffb92014-04-03 14:43:30 -070051 port11 = createMock(Port.class);
52 port22 = createMock(Port.class);
53 port21 = createMock(Port.class);
54 port23 = createMock(Port.class);
55 port31 = createMock(Port.class);
56 port41 = createMock(Port.class);
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -070057 expect(port11.getNumber()).andReturn(new PortNumber((short) 1)).anyTimes();
58 expect(port22.getNumber()).andReturn(new PortNumber((short) 2)).anyTimes();
59 expect(port21.getNumber()).andReturn(new PortNumber((short) 1)).anyTimes();
60 expect(port23.getNumber()).andReturn(new PortNumber((short) 3)).anyTimes();
61 expect(port31.getNumber()).andReturn(new PortNumber((short) 1)).anyTimes();
62 expect(port41.getNumber()).andReturn(new PortNumber((short) 1)).anyTimes();
Ray Milkey269ffb92014-04-03 14:43:30 -070063 replay(port11);
64 replay(port22);
65 replay(port21);
66 replay(port23);
67 replay(port31);
68 replay(port41);
Toshio Koide122e5702014-02-21 17:53:51 -080069
Ray Milkey269ffb92014-04-03 14:43:30 -070070 link12 = createMock(Link.class);
71 link23 = createMock(Link.class);
72 link24 = createMock(Link.class);
73 expect(link12.getCapacity()).andReturn(1000.0).anyTimes();
74 expect(link23.getCapacity()).andReturn(1000.0).anyTimes();
75 expect(link24.getCapacity()).andReturn(1000.0).anyTimes();
76 expect(link12.getSrcSwitch()).andReturn(sw1).anyTimes();
77 expect(link23.getSrcSwitch()).andReturn(sw2).anyTimes();
78 expect(link24.getSrcSwitch()).andReturn(sw2).anyTimes();
79 expect(link12.getSrcPort()).andReturn(port11).anyTimes();
80 expect(link23.getSrcPort()).andReturn(port21).anyTimes();
81 expect(link24.getSrcPort()).andReturn(port23).anyTimes();
82 expect(link12.getDstSwitch()).andReturn(sw2).anyTimes();
83 expect(link23.getDstSwitch()).andReturn(sw3).anyTimes();
84 expect(link24.getDstSwitch()).andReturn(sw4).anyTimes();
85 expect(link12.getDstPort()).andReturn(port22).anyTimes();
86 expect(link23.getDstPort()).andReturn(port31).anyTimes();
87 expect(link24.getDstPort()).andReturn(port41).anyTimes();
88 replay(link12);
89 replay(link23);
90 replay(link24);
Toshio Koide122e5702014-02-21 17:53:51 -080091
Ray Milkey269ffb92014-04-03 14:43:30 -070092 path1 = new Path();
93 path1.add(new LinkEvent(link12));
94 path1.add(new LinkEvent(link23));
Toshio Koide122e5702014-02-21 17:53:51 -080095
Ray Milkey269ffb92014-04-03 14:43:30 -070096 path2 = new Path();
97 path2.add(new LinkEvent(link12));
98 path2.add(new LinkEvent(link24));
Toshio Koide122e5702014-02-21 17:53:51 -080099
Ray Milkey269ffb92014-04-03 14:43:30 -0700100 intent1 = new PathIntent("1", path1, 400.0, new Intent("_1"));
101 intent2 = new PathIntent("2", path2, 400.0, new Intent("_2"));
102 }
Toshio Koide122e5702014-02-21 17:53:51 -0800103
Ray Milkey269ffb92014-04-03 14:43:30 -0700104 @After
105 public void tearDown() throws Exception {
106 }
Toshio Koide122e5702014-02-21 17:53:51 -0800107
Ray Milkey269ffb92014-04-03 14:43:30 -0700108 @Test
109 public void testCreate() {
110 PathIntentMap intents = new PathIntentMap();
111 assertEquals(0, intents.getAllIntents().size());
112 }
Toshio Koide122e5702014-02-21 17:53:51 -0800113
Ray Milkey269ffb92014-04-03 14:43:30 -0700114 @Test
115 public void testGetIntentsByDpid() {
116 IntentOperationList operations = new IntentOperationList();
117 operations.add(Operator.ADD, intent1);
118 operations.add(Operator.ADD, intent2);
119 assertEquals(2, operations.size());
Toshio Koide122e5702014-02-21 17:53:51 -0800120
Ray Milkey269ffb92014-04-03 14:43:30 -0700121 PathIntentMap intents = new PathIntentMap();
122 intents.executeOperations(operations);
123 assertEquals(2, intents.getAllIntents().size());
Toshio Koide122e5702014-02-21 17:53:51 -0800124
Yuta HIGUCHI5c8cbeb2014-06-27 11:13:48 -0700125 Collection<PathIntent> pathIntents = intents.getIntentsByDpid(DPID_1);
Ray Milkey269ffb92014-04-03 14:43:30 -0700126 assertEquals(2, pathIntents.size());
127 assertTrue(pathIntents.contains(intent1));
128 assertTrue(pathIntents.contains(intent2));
Toshio Koide122e5702014-02-21 17:53:51 -0800129
Yuta HIGUCHI5c8cbeb2014-06-27 11:13:48 -0700130 pathIntents = intents.getIntentsByDpid(DPID_2);
Ray Milkey269ffb92014-04-03 14:43:30 -0700131 assertEquals(2, pathIntents.size());
132 assertTrue(pathIntents.contains(intent1));
133 assertTrue(pathIntents.contains(intent2));
Toshio Koide122e5702014-02-21 17:53:51 -0800134
Yuta HIGUCHI5c8cbeb2014-06-27 11:13:48 -0700135 pathIntents = intents.getIntentsByDpid(DPID_3);
Ray Milkey269ffb92014-04-03 14:43:30 -0700136 assertEquals(1, pathIntents.size());
137 assertTrue(pathIntents.contains(intent1));
Toshio Koide122e5702014-02-21 17:53:51 -0800138
Yuta HIGUCHI5c8cbeb2014-06-27 11:13:48 -0700139 pathIntents = intents.getIntentsByDpid(DPID_4);
Ray Milkey269ffb92014-04-03 14:43:30 -0700140 assertEquals(1, pathIntents.size());
141 assertTrue(pathIntents.contains(intent2));
142 }
Toshio Koide122e5702014-02-21 17:53:51 -0800143
Ray Milkey269ffb92014-04-03 14:43:30 -0700144 @Test
145 public void testGetPathIntentsByPort() {
146 IntentOperationList operations = new IntentOperationList();
147 operations.add(Operator.ADD, intent1);
148 operations.add(Operator.ADD, intent2);
149 assertEquals(2, operations.size());
Toshio Koide122e5702014-02-21 17:53:51 -0800150
Ray Milkey269ffb92014-04-03 14:43:30 -0700151 PathIntentMap intents = new PathIntentMap();
152 intents.executeOperations(operations);
153 assertEquals(2, intents.getAllIntents().size());
Toshio Koide122e5702014-02-21 17:53:51 -0800154
Yuta HIGUCHI5c8cbeb2014-06-27 11:13:48 -0700155 Collection<PathIntent> pathIntents = intents.getIntentsByPort(DPID_1, PORT_NUMBER_1);
Ray Milkey269ffb92014-04-03 14:43:30 -0700156 assertEquals(2, pathIntents.size());
157 assertTrue(pathIntents.contains(intent1));
158 assertTrue(pathIntents.contains(intent2));
Toshio Koide122e5702014-02-21 17:53:51 -0800159
Yuta HIGUCHI5c8cbeb2014-06-27 11:13:48 -0700160 pathIntents = intents.getIntentsByPort(DPID_2, PORT_NUMBER_1);
Ray Milkey269ffb92014-04-03 14:43:30 -0700161 assertEquals(1, pathIntents.size());
162 assertTrue(pathIntents.contains(intent1));
Toshio Koide122e5702014-02-21 17:53:51 -0800163
Yuta HIGUCHI5c8cbeb2014-06-27 11:13:48 -0700164 pathIntents = intents.getIntentsByPort(DPID_2, PORT_NUMBER_3);
Ray Milkey269ffb92014-04-03 14:43:30 -0700165 assertEquals(1, pathIntents.size());
166 assertTrue(pathIntents.contains(intent2));
167 }
Toshio Koide122e5702014-02-21 17:53:51 -0800168
Ray Milkey269ffb92014-04-03 14:43:30 -0700169 @Test
170 public void testGetPathIntentsByLink() {
171 IntentOperationList operations = new IntentOperationList();
172 operations.add(Operator.ADD, intent1);
173 operations.add(Operator.ADD, intent2);
174 assertEquals(2, operations.size());
Toshio Koide122e5702014-02-21 17:53:51 -0800175
Ray Milkey269ffb92014-04-03 14:43:30 -0700176 PathIntentMap intents = new PathIntentMap();
177 intents.executeOperations(operations);
178 assertEquals(2, intents.getAllIntents().size());
Toshio Koide122e5702014-02-21 17:53:51 -0800179
Ray Milkey269ffb92014-04-03 14:43:30 -0700180 Collection<PathIntent> pathIntents = intents.getIntentsByLink(new LinkEvent(link12));
181 assertEquals(2, pathIntents.size());
182 assertTrue(pathIntents.contains(intent1));
183 assertTrue(pathIntents.contains(intent2));
Toshio Koide122e5702014-02-21 17:53:51 -0800184
Ray Milkey269ffb92014-04-03 14:43:30 -0700185 pathIntents = intents.getIntentsByLink(new LinkEvent(link23));
186 assertEquals(1, pathIntents.size());
187 assertTrue(pathIntents.contains(intent1));
Toshio Koide122e5702014-02-21 17:53:51 -0800188
Ray Milkey269ffb92014-04-03 14:43:30 -0700189 pathIntents = intents.getIntentsByLink(new LinkEvent(link24));
190 assertEquals(1, pathIntents.size());
191 assertTrue(pathIntents.contains(intent2));
192 }
Toshio Koide122e5702014-02-21 17:53:51 -0800193
Ray Milkey269ffb92014-04-03 14:43:30 -0700194 @Test
195 public void testGetAvailableBandwidth() {
196 IntentOperationList operations = new IntentOperationList();
197 operations.add(Operator.ADD, intent1);
198 operations.add(Operator.ADD, intent2);
199 assertEquals(2, operations.size());
Toshio Koide122e5702014-02-21 17:53:51 -0800200
Ray Milkey269ffb92014-04-03 14:43:30 -0700201 PathIntentMap intents = new PathIntentMap();
202 intents.executeOperations(operations);
203 assertEquals(2, intents.getAllIntents().size());
Toshio Koide122e5702014-02-21 17:53:51 -0800204
Ray Milkey269ffb92014-04-03 14:43:30 -0700205 assertEquals(200.0, intents.getAvailableBandwidth(link12), 0.0);
206 }
Toshio Koide122e5702014-02-21 17:53:51 -0800207}