blob: d911d2fb9ae19f2162aba2c3449e4c96e751dc87 [file] [log] [blame]
Jonathan Hartaa380972014-04-03 10:24:46 -07001package net.onrc.onos.core.intent.runtime;
Toshio Koidec87810e2014-02-11 13:03:21 -08002
Jonathan Harta88fd242014-04-03 11:24:54 -07003import static org.easymock.EasyMock.anyObject;
4import static org.easymock.EasyMock.createMock;
5import static org.easymock.EasyMock.eq;
6import static org.easymock.EasyMock.expect;
7import static org.easymock.EasyMock.expectLastCall;
8import static org.easymock.EasyMock.replay;
9import static org.easymock.EasyMock.verify;
Toshio Koide066506e2014-02-20 19:52:09 -080010
Pavlin Radoslavov74986ce2014-02-20 13:17:20 -080011import java.util.LinkedList;
Brian O'Connor12861f72014-02-19 20:40:32 -080012import java.util.List;
13import java.util.Set;
14
Toshio Koide27ffd412014-02-18 19:15:27 -080015import net.floodlightcontroller.core.module.FloodlightModuleContext;
16import net.floodlightcontroller.core.module.FloodlightModuleException;
Pavlin Radoslavov13669052014-05-13 10:33:39 -070017import net.floodlightcontroller.restserver.IRestApiService;
Jonathan Hart6df90172014-04-03 10:13:11 -070018import net.onrc.onos.core.datagrid.IDatagridService;
19import net.onrc.onos.core.datagrid.IEventChannel;
20import net.onrc.onos.core.datagrid.IEventChannelListener;
Jonathan Hartaa380972014-04-03 10:24:46 -070021import net.onrc.onos.core.intent.ConstrainedShortestPathIntent;
22import net.onrc.onos.core.intent.FlowEntry;
23import net.onrc.onos.core.intent.Intent;
Jonathan Harta88fd242014-04-03 11:24:54 -070024import net.onrc.onos.core.intent.Intent.IntentState;
25import net.onrc.onos.core.intent.IntentOperation.Operator;
Jonathan Hartaa380972014-04-03 10:24:46 -070026import net.onrc.onos.core.intent.IntentOperationList;
Jonathan Harte37e4e22014-05-13 19:12:02 -070027import net.onrc.onos.core.intent.MockTopology;
Jonathan Hartaa380972014-04-03 10:24:46 -070028import net.onrc.onos.core.intent.PathIntent;
29import net.onrc.onos.core.intent.PathIntentMap;
30import net.onrc.onos.core.intent.ShortestPathIntent;
Pavlin Radoslavov13669052014-05-13 10:33:39 -070031import net.onrc.onos.core.intent.runtime.web.IntentWebRoutable;
Jonathan Hartdeda0ba2014-04-03 11:14:12 -070032import net.onrc.onos.core.registry.IControllerRegistryService;
Jonathan Hart472062d2014-04-03 10:56:48 -070033import net.onrc.onos.core.topology.DeviceEvent;
Jonathan Harte37e4e22014-05-13 19:12:02 -070034import net.onrc.onos.core.topology.ITopologyListener;
35import net.onrc.onos.core.topology.ITopologyService;
Jonathan Hart472062d2014-04-03 10:56:48 -070036import net.onrc.onos.core.topology.LinkEvent;
Jonathan Hart472062d2014-04-03 10:56:48 -070037import net.onrc.onos.core.topology.PortEvent;
38import net.onrc.onos.core.topology.SwitchEvent;
Jonathan Harte37e4e22014-05-13 19:12:02 -070039import net.onrc.onos.core.topology.Topology;
Toshio Koidec87810e2014-02-11 13:03:21 -080040
41import org.junit.After;
42import org.junit.Before;
43import org.junit.Test;
Nick Karanatsios8abe7172014-02-19 20:31:48 -080044import org.junit.runner.RunWith;
45import org.powermock.api.easymock.PowerMock;
46import org.powermock.core.classloader.annotations.PrepareForTest;
47import org.powermock.modules.junit4.PowerMockRunner;
Toshio Koidec87810e2014-02-11 13:03:21 -080048
49/**
Toshio Koidee04a9df2014-05-01 15:49:28 -070050 * Temporary test cases for the ONS2014 demo.
51 * These test cases should be modified and be moved to appropriate classes
52 * (ex. PathCalcRuntimeModuleTest, PlanInstallModuleTest, etc.)
Toshio Koidec87810e2014-02-11 13:03:21 -080053 */
Nick Karanatsios8abe7172014-02-19 20:31:48 -080054@RunWith(PowerMockRunner.class)
55@PrepareForTest(PathCalcRuntimeModule.class)
Toshio Koidec87810e2014-02-11 13:03:21 -080056public class UseCaseTest {
Jonathan Harte37e4e22014-05-13 19:12:02 -070057 private Topology topology;
Ray Milkey269ffb92014-04-03 14:43:30 -070058 private FloodlightModuleContext modContext;
59 private IDatagridService datagridService;
Jonathan Harte37e4e22014-05-13 19:12:02 -070060 private ITopologyService topologyService;
Ray Milkey269ffb92014-04-03 14:43:30 -070061 private IControllerRegistryService controllerRegistryService;
62 private PersistIntent persistIntent;
Pavlin Radoslavov13669052014-05-13 10:33:39 -070063 private IRestApiService restApi;
Toshio Koidee04a9df2014-05-01 15:49:28 -070064 private IEventChannel<Long, IntentOperationList> intentOperationChannel;
65 private IEventChannel<Long, IntentStateList> intentStateChannel;
Toshio Koidec87810e2014-02-11 13:03:21 -080066
Yuta HIGUCHI44a0b352014-05-14 21:32:48 -070067 private static final Long LOCAL_PORT = 0xFFFEL;
Toshio Koidefe1d5d92014-02-26 20:09:48 -080068
Ray Milkey269ffb92014-04-03 14:43:30 -070069 @SuppressWarnings("unchecked")
70 @Before
71 public void setUp() throws Exception {
Yuta HIGUCHI44a0b352014-05-14 21:32:48 -070072 MockTopology mockTopology = new MockTopology();
73 mockTopology.createSampleTopology1();
74 this.topology = mockTopology;
Toshio Koide27ffd412014-02-18 19:15:27 -080075
Ray Milkey269ffb92014-04-03 14:43:30 -070076 datagridService = createMock(IDatagridService.class);
Jonathan Harte37e4e22014-05-13 19:12:02 -070077 topologyService = createMock(ITopologyService.class);
Ray Milkey269ffb92014-04-03 14:43:30 -070078 controllerRegistryService = createMock(IControllerRegistryService.class);
79 modContext = createMock(FloodlightModuleContext.class);
Toshio Koidee04a9df2014-05-01 15:49:28 -070080 intentOperationChannel = createMock(IEventChannel.class);
81 intentStateChannel = createMock(IEventChannel.class);
Ray Milkey269ffb92014-04-03 14:43:30 -070082 persistIntent = PowerMock.createMock(PersistIntent.class);
Pavlin Radoslavov13669052014-05-13 10:33:39 -070083 restApi = createMock(IRestApiService.class);
Toshio Koide798bc1b2014-02-20 14:02:40 -080084
Ray Milkey269ffb92014-04-03 14:43:30 -070085 PowerMock.expectNew(PersistIntent.class,
Pavlin Radoslavov0294e052014-04-10 13:36:45 -070086 anyObject(IControllerRegistryService.class)).andReturn(persistIntent);
Toshio Koide27ffd412014-02-18 19:15:27 -080087
Ray Milkey269ffb92014-04-03 14:43:30 -070088 expect(modContext.getServiceImpl(IDatagridService.class))
89 .andReturn(datagridService).once();
Jonathan Harte37e4e22014-05-13 19:12:02 -070090 expect(modContext.getServiceImpl(ITopologyService.class))
91 .andReturn(topologyService).once();
Ray Milkey269ffb92014-04-03 14:43:30 -070092 expect(modContext.getServiceImpl(IControllerRegistryService.class))
93 .andReturn(controllerRegistryService).once();
94 expect(persistIntent.getKey()).andReturn(1L).anyTimes();
95 expect(persistIntent.persistIfLeader(eq(1L),
96 anyObject(IntentOperationList.class))).andReturn(true).anyTimes();
Pavlin Radoslavov13669052014-05-13 10:33:39 -070097 expect(modContext.getServiceImpl(IRestApiService.class))
98 .andReturn(restApi).once();
Toshio Koide0c9106d2014-02-19 15:26:38 -080099
Yuta HIGUCHI44a0b352014-05-14 21:32:48 -0700100 expect(topologyService.getTopology()).andReturn(mockTopology).anyTimes();
Jonathan Harte37e4e22014-05-13 19:12:02 -0700101 topologyService.registerTopologyListener(anyObject(ITopologyListener.class));
Ray Milkey269ffb92014-04-03 14:43:30 -0700102 expectLastCall();
Toshio Koide0c9106d2014-02-19 15:26:38 -0800103
Ray Milkey269ffb92014-04-03 14:43:30 -0700104 expect(datagridService.createChannel("onos.pathintent", Long.class, IntentOperationList.class))
Toshio Koidee04a9df2014-05-01 15:49:28 -0700105 .andReturn(intentOperationChannel).once();
Toshio Koide27ffd412014-02-18 19:15:27 -0800106
Ray Milkey269ffb92014-04-03 14:43:30 -0700107 expect(datagridService.addListener(
108 eq("onos.pathintent_state"),
109 anyObject(IEventChannelListener.class),
110 eq(Long.class),
111 eq(IntentStateList.class)))
Toshio Koidee04a9df2014-05-01 15:49:28 -0700112 .andReturn(intentStateChannel).once();
Pavlin Radoslavov13669052014-05-13 10:33:39 -0700113 restApi.addRestletRoutable(anyObject(IntentWebRoutable.class));
Toshio Koide066506e2014-02-20 19:52:09 -0800114
Ray Milkey269ffb92014-04-03 14:43:30 -0700115 replay(datagridService);
Jonathan Harte37e4e22014-05-13 19:12:02 -0700116 replay(topologyService);
Ray Milkey269ffb92014-04-03 14:43:30 -0700117 replay(modContext);
118 replay(controllerRegistryService);
119 PowerMock.replay(persistIntent, PersistIntent.class);
Pavlin Radoslavov13669052014-05-13 10:33:39 -0700120 replay(restApi);
Ray Milkey269ffb92014-04-03 14:43:30 -0700121 }
Toshio Koidec87810e2014-02-11 13:03:21 -0800122
Ray Milkey269ffb92014-04-03 14:43:30 -0700123 @After
124 public void tearDown() {
125 verify(datagridService);
Jonathan Harte37e4e22014-05-13 19:12:02 -0700126 verify(topologyService);
Ray Milkey269ffb92014-04-03 14:43:30 -0700127 verify(modContext);
128 verify(controllerRegistryService);
129 PowerMock.verify(persistIntent, PersistIntent.class);
Pavlin Radoslavov13669052014-05-13 10:33:39 -0700130 verify(restApi);
Ray Milkey269ffb92014-04-03 14:43:30 -0700131 }
Toshio Koidec87810e2014-02-11 13:03:21 -0800132
Ray Milkey269ffb92014-04-03 14:43:30 -0700133 private void showResult(PathIntentMap intents) {
134 for (Intent intent : intents.getAllIntents()) {
135 PathIntent pathIntent = (PathIntent) intent;
136 System.out.println("Path intent:" + pathIntent);
137 System.out.println("Parent intent: " + pathIntent.getParentIntent().toString());
138 }
139 }
Toshio Koidec87810e2014-02-11 13:03:21 -0800140
Ray Milkey269ffb92014-04-03 14:43:30 -0700141 @Test
142 public void createShortestPaths() throws FloodlightModuleException {
143 // create shortest path intents
144 IntentOperationList opList = new IntentOperationList();
145 opList.add(Operator.ADD, new ShortestPathIntent("1", 1L, 12L, LOCAL_PORT, 2L, 21L, LOCAL_PORT));
146 opList.add(Operator.ADD, new ShortestPathIntent("2", 1L, 14L, LOCAL_PORT, 4L, 41L, LOCAL_PORT));
147 opList.add(Operator.ADD, new ShortestPathIntent("3", 2L, 23L, LOCAL_PORT, 3L, 32L, LOCAL_PORT));
Toshio Koidec87810e2014-02-11 13:03:21 -0800148
Ray Milkey269ffb92014-04-03 14:43:30 -0700149 // compile high-level intent operations into low-level intent operations (calculate paths)
150 PathCalcRuntimeModule runtime1 = new PathCalcRuntimeModule();
151 runtime1.init(modContext);
152 runtime1.startUp(modContext);
153 IntentOperationList pathIntentOpList = runtime1.executeIntentOperations(opList);
Toshio Koide27ffd412014-02-18 19:15:27 -0800154
Ray Milkey269ffb92014-04-03 14:43:30 -0700155 // compile low-level intents into flow entry installation plan
156 PlanCalcRuntime runtime2 = new PlanCalcRuntime();
157 List<Set<FlowEntry>> plan = runtime2.computePlan(pathIntentOpList);
Toshio Koidec87810e2014-02-11 13:03:21 -0800158
Ray Milkey269ffb92014-04-03 14:43:30 -0700159 // show results
160 showResult((PathIntentMap) runtime1.getPathIntents());
161 System.out.println(plan);
162 }
Toshio Koidec87810e2014-02-11 13:03:21 -0800163
Ray Milkey269ffb92014-04-03 14:43:30 -0700164 @Test
165 public void createConstrainedShortestPaths() throws FloodlightModuleException {
166 // create constrained shortest path intents
167 IntentOperationList opList = new IntentOperationList();
Yuta HIGUCHI91a8f502014-06-17 10:15:29 -0700168 opList.add(Operator.ADD, new ConstrainedShortestPathIntent("1", 1L, 12L,
169 LOCAL_PORT, 2L, 21L, LOCAL_PORT, 400.0));
170 opList.add(Operator.ADD, new ConstrainedShortestPathIntent("2", 1L, 14L,
171 LOCAL_PORT, 4L, 41L, LOCAL_PORT, 400.0));
172 opList.add(Operator.ADD, new ConstrainedShortestPathIntent("3", 2L, 24L,
173 LOCAL_PORT, 4L, 42L, LOCAL_PORT, 400.0));
174 opList.add(Operator.ADD, new ConstrainedShortestPathIntent("4", 2L, 23L,
175 LOCAL_PORT, 3L, 32L, LOCAL_PORT, 400.0));
176 opList.add(Operator.ADD, new ConstrainedShortestPathIntent("5", 3L, 34L,
177 LOCAL_PORT, 4L, 43L, LOCAL_PORT, 400.0));
Toshio Koidec87810e2014-02-11 13:03:21 -0800178
Ray Milkey269ffb92014-04-03 14:43:30 -0700179 // compile high-level intent operations into low-level intent operations (calculate paths)
180 PathCalcRuntimeModule runtime1 = new PathCalcRuntimeModule();
181 runtime1.init(modContext);
182 runtime1.startUp(modContext);
183 IntentOperationList pathIntentOpList = runtime1.executeIntentOperations(opList);
Toshio Koidec87810e2014-02-11 13:03:21 -0800184
Ray Milkey269ffb92014-04-03 14:43:30 -0700185 // compile low-level intents into flow entry installation plan
186 PlanCalcRuntime runtime2 = new PlanCalcRuntime();
187 List<Set<FlowEntry>> plan = runtime2.computePlan(pathIntentOpList);
Brian O'Connor7f8e3012014-02-15 23:59:29 -0800188
Ray Milkey269ffb92014-04-03 14:43:30 -0700189 // show results
190 showResult((PathIntentMap) runtime1.getPathIntents());
191 System.out.println(plan);
192 }
Toshio Koidec87810e2014-02-11 13:03:21 -0800193
Ray Milkey269ffb92014-04-03 14:43:30 -0700194 @Test
195 public void createMixedShortestPaths() throws FloodlightModuleException {
196 // create constrained & best effort shortest path intents
197 IntentOperationList opList = new IntentOperationList();
Yuta HIGUCHI91a8f502014-06-17 10:15:29 -0700198 opList.add(Operator.ADD, new ConstrainedShortestPathIntent("1", 1L, 12L,
199 LOCAL_PORT, 2L, 21L, LOCAL_PORT, 400.0));
200 opList.add(Operator.ADD, new ConstrainedShortestPathIntent("2", 1L, 14L,
201 LOCAL_PORT, 4L, 41L, LOCAL_PORT, 400.0));
202 opList.add(Operator.ADD, new ShortestPathIntent("3", 2L, 24L, LOCAL_PORT, 4L,
203 42L, LOCAL_PORT));
204 opList.add(Operator.ADD, new ShortestPathIntent("4", 2L, 23L, LOCAL_PORT, 3L,
205 32L, LOCAL_PORT));
206 opList.add(Operator.ADD, new ConstrainedShortestPathIntent("5", 3L, 34L,
207 LOCAL_PORT, 4L, 43L, LOCAL_PORT, 400.0));
Toshio Koidec87810e2014-02-11 13:03:21 -0800208
Ray Milkey269ffb92014-04-03 14:43:30 -0700209 // compile high-level intent operations into low-level intent operations (calculate paths)
210 PathCalcRuntimeModule runtime1 = new PathCalcRuntimeModule();
211 runtime1.init(modContext);
212 runtime1.startUp(modContext);
213 IntentOperationList pathIntentOpList = runtime1.executeIntentOperations(opList);
Toshio Koidec87810e2014-02-11 13:03:21 -0800214
Ray Milkey269ffb92014-04-03 14:43:30 -0700215 // compile low-level intents into flow entry installation plan
216 PlanCalcRuntime runtime2 = new PlanCalcRuntime();
217 List<Set<FlowEntry>> plan = runtime2.computePlan(pathIntentOpList);
Brian O'Connor7f8e3012014-02-15 23:59:29 -0800218
Ray Milkey269ffb92014-04-03 14:43:30 -0700219 // show results
220 showResult((PathIntentMap) runtime1.getPathIntents());
221 System.out.println(plan);
222 }
Toshio Koided9fa2a82014-02-19 17:35:18 -0800223
Ray Milkey269ffb92014-04-03 14:43:30 -0700224 @Test
225 public void rerouteShortestPaths() throws FloodlightModuleException {
226 List<SwitchEvent> addedSwitchEvents = new LinkedList<>();
227 List<SwitchEvent> removedSwitchEvents = new LinkedList<>();
228 List<PortEvent> addedPortEvents = new LinkedList<>();
229 List<PortEvent> removedPortEvents = new LinkedList<>();
230 List<LinkEvent> addedLinkEvents = new LinkedList<>();
231 List<LinkEvent> removedLinkEvents = new LinkedList<>();
232 List<DeviceEvent> addedDeviceEvents = new LinkedList<>();
233 List<DeviceEvent> removedDeviceEvents = new LinkedList<>();
Pavlin Radoslavov74986ce2014-02-20 13:17:20 -0800234
Ray Milkey269ffb92014-04-03 14:43:30 -0700235 // create shortest path intents
236 IntentOperationList opList = new IntentOperationList();
237 opList.add(Operator.ADD, new ShortestPathIntent("1", 1L, 12L, LOCAL_PORT, 2L, 21L, LOCAL_PORT));
238 opList.add(Operator.ADD, new ShortestPathIntent("2", 1L, 14L, LOCAL_PORT, 4L, 41L, LOCAL_PORT));
239 opList.add(Operator.ADD, new ShortestPathIntent("3", 2L, 23L, LOCAL_PORT, 3L, 32L, LOCAL_PORT));
Toshio Koide0c9106d2014-02-19 15:26:38 -0800240
Ray Milkey269ffb92014-04-03 14:43:30 -0700241 // compile high-level intent operations into low-level intent operations (calculate paths)
242 PathCalcRuntimeModule runtime1 = new PathCalcRuntimeModule();
243 runtime1.init(modContext);
244 runtime1.startUp(modContext);
245 IntentOperationList pathIntentOpList = runtime1.executeIntentOperations(opList);
Toshio Koide0c9106d2014-02-19 15:26:38 -0800246
Ray Milkey269ffb92014-04-03 14:43:30 -0700247 // compile low-level intents into flow entry installation plan
248 PlanCalcRuntime runtime2 = new PlanCalcRuntime();
249 List<Set<FlowEntry>> plan = runtime2.computePlan(pathIntentOpList);
Toshio Koide0c9106d2014-02-19 15:26:38 -0800250
Ray Milkey269ffb92014-04-03 14:43:30 -0700251 // show results step1
252 showResult((PathIntentMap) runtime1.getPathIntents());
253 System.out.println(plan);
Toshio Koide0c9106d2014-02-19 15:26:38 -0800254
Ray Milkey269ffb92014-04-03 14:43:30 -0700255 // TODO this state changes should be triggered by notification of plan module
256 IntentStateList states = new IntentStateList();
257 states.put("1", IntentState.INST_ACK);
258 states.put("2", IntentState.INST_ACK);
259 states.put("3", IntentState.INST_ACK);
260 runtime1.getHighLevelIntents().changeStates(states);
261 states.clear();
262 states.put("1___0", IntentState.INST_ACK);
263 states.put("2___0", IntentState.INST_ACK);
264 states.put("3___0", IntentState.INST_ACK);
265 runtime1.getPathIntents().changeStates(states);
Toshio Koidea10c0372014-02-20 17:28:10 -0800266
Ray Milkey269ffb92014-04-03 14:43:30 -0700267 // link down
Jonathan Harte37e4e22014-05-13 19:12:02 -0700268 ((MockTopology) topology).removeLink(1L, 12L, 2L, 21L); // This link is used by the intent "1"
269 ((MockTopology) topology).removeLink(2L, 21L, 1L, 12L);
Ray Milkey269ffb92014-04-03 14:43:30 -0700270 LinkEvent linkEvent1 = new LinkEvent(1L, 12L, 2L, 21L);
271 LinkEvent linkEvent2 = new LinkEvent(2L, 21L, 1L, 12L);
272 removedLinkEvents.clear();
273 removedLinkEvents.add(linkEvent1);
274 removedLinkEvents.add(linkEvent2);
Jonathan Harte37e4e22014-05-13 19:12:02 -0700275 runtime1.topologyEvents(
Ray Milkey269ffb92014-04-03 14:43:30 -0700276 addedSwitchEvents,
277 removedSwitchEvents,
278 addedPortEvents,
279 removedPortEvents,
280 addedLinkEvents,
281 removedLinkEvents,
282 addedDeviceEvents,
283 removedDeviceEvents);
Toshio Koide7d3cee02014-06-05 18:56:19 -0700284 System.out.println("*** Link goes down. ***");
285
286 // send notification
287 IntentStateList isl = new IntentStateList();
288 isl.put("1___0", IntentState.DEL_ACK);
289 isl.put("1___1", IntentState.INST_ACK);
290 isl.domainSwitchDpids.add(1L);
291 isl.domainSwitchDpids.add(2L);
292 isl.domainSwitchDpids.add(4L);
293 runtime1.entryUpdated(isl);
Toshio Koide0c9106d2014-02-19 15:26:38 -0800294
Ray Milkey269ffb92014-04-03 14:43:30 -0700295 // show results step2
296 showResult((PathIntentMap) runtime1.getPathIntents());
Toshio Koide7d3cee02014-06-05 18:56:19 -0700297
298 // link up
299 ((MockTopology) topology).addBidirectionalLinks(1L, 12L, 2L, 21L);
300 linkEvent1 = new LinkEvent(1L, 12L, 2L, 21L);
301 linkEvent2 = new LinkEvent(2L, 21L, 1L, 12L);
302 removedLinkEvents.clear();
303 addedLinkEvents.clear();
304 addedLinkEvents.add(linkEvent1);
305 addedLinkEvents.add(linkEvent2);
306 runtime1.topologyEvents(
307 addedSwitchEvents,
308 removedSwitchEvents,
309 addedPortEvents,
310 removedPortEvents,
311 addedLinkEvents,
312 removedLinkEvents,
313 addedDeviceEvents,
314 removedDeviceEvents);
315 System.out.println("*** Link goes up. ***");
316
317 // send notification
318 isl = new IntentStateList();
319 isl.put("1___1", IntentState.DEL_ACK);
320 isl.put("1___2", IntentState.INST_ACK);
321 isl.domainSwitchDpids.add(1L);
322 isl.domainSwitchDpids.add(2L);
323 isl.domainSwitchDpids.add(4L);
324 runtime1.entryUpdated(isl);
325
326 // show results step3
327 showResult((PathIntentMap) runtime1.getPathIntents());
328
Ray Milkey269ffb92014-04-03 14:43:30 -0700329 // TODO: show results of plan computation
330 }
Toshio Koidefa735a12014-03-28 10:49:07 -0700331
332
Ray Milkey269ffb92014-04-03 14:43:30 -0700333 @Test
334 public void createAndRemoveShortestPaths() throws FloodlightModuleException {
335 // create shortest path intents
336 IntentOperationList opList = new IntentOperationList();
337 opList.add(Operator.ADD, new ShortestPathIntent("1", 1L, 12L, LOCAL_PORT, 2L, 21L, LOCAL_PORT));
338 opList.add(Operator.ADD, new ShortestPathIntent("2", 1L, 14L, LOCAL_PORT, 4L, 41L, LOCAL_PORT));
339 opList.add(Operator.ADD, new ShortestPathIntent("3", 2L, 23L, LOCAL_PORT, 3L, 32L, LOCAL_PORT));
Toshio Koidefa735a12014-03-28 10:49:07 -0700340
Ray Milkey269ffb92014-04-03 14:43:30 -0700341 // compile high-level intent operations into low-level intent operations (calculate paths)
342 PathCalcRuntimeModule runtime1 = new PathCalcRuntimeModule();
343 runtime1.init(modContext);
344 runtime1.startUp(modContext);
345 IntentOperationList pathIntentOpList = runtime1.executeIntentOperations(opList);
Toshio Koidefa735a12014-03-28 10:49:07 -0700346
Ray Milkey269ffb92014-04-03 14:43:30 -0700347 // compile low-level intents into flow entry installation plan
348 PlanCalcRuntime runtime2 = new PlanCalcRuntime();
349 List<Set<FlowEntry>> plan = runtime2.computePlan(pathIntentOpList);
Toshio Koidefa735a12014-03-28 10:49:07 -0700350
Ray Milkey269ffb92014-04-03 14:43:30 -0700351 // show results
352 showResult((PathIntentMap) runtime1.getPathIntents());
353 System.out.println(plan);
Toshio Koidefa735a12014-03-28 10:49:07 -0700354
Ray Milkey269ffb92014-04-03 14:43:30 -0700355 // create remove operations
356 opList.clear();
357 opList.add(Operator.REMOVE, new Intent("1"));
358 opList.add(Operator.REMOVE, new Intent("2"));
Toshio Koidefa735a12014-03-28 10:49:07 -0700359
Ray Milkey269ffb92014-04-03 14:43:30 -0700360 // compile
361 runtime1.executeIntentOperations(opList);
Toshio Koidefa735a12014-03-28 10:49:07 -0700362
Ray Milkey269ffb92014-04-03 14:43:30 -0700363 // show results
364 showResult((PathIntentMap) runtime1.getPathIntents());
365 System.out.println(plan);
366 }
Toshio Koidefa735a12014-03-28 10:49:07 -0700367
Toshio Koidec87810e2014-02-11 13:03:21 -0800368}