blob: bd4288407d5212eeccc19e34fa0e6e85ffc690b5 [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.)
53 *
Toshio Koidec87810e2014-02-11 13:03:21 -080054 * @author Toshio Koide (t-koide@onlab.us)
55 */
Nick Karanatsios8abe7172014-02-19 20:31:48 -080056@RunWith(PowerMockRunner.class)
57@PrepareForTest(PathCalcRuntimeModule.class)
Toshio Koidec87810e2014-02-11 13:03:21 -080058public class UseCaseTest {
Jonathan Harte37e4e22014-05-13 19:12:02 -070059 private Topology topology;
Ray Milkey269ffb92014-04-03 14:43:30 -070060 private FloodlightModuleContext modContext;
61 private IDatagridService datagridService;
Jonathan Harte37e4e22014-05-13 19:12:02 -070062 private ITopologyService topologyService;
Ray Milkey269ffb92014-04-03 14:43:30 -070063 private IControllerRegistryService controllerRegistryService;
64 private PersistIntent persistIntent;
Pavlin Radoslavov13669052014-05-13 10:33:39 -070065 private IRestApiService restApi;
Toshio Koidee04a9df2014-05-01 15:49:28 -070066 private IEventChannel<Long, IntentOperationList> intentOperationChannel;
67 private IEventChannel<Long, IntentStateList> intentStateChannel;
Toshio Koidec87810e2014-02-11 13:03:21 -080068
Yuta HIGUCHI44a0b352014-05-14 21:32:48 -070069 private static final Long LOCAL_PORT = 0xFFFEL;
Toshio Koidefe1d5d92014-02-26 20:09:48 -080070
Ray Milkey269ffb92014-04-03 14:43:30 -070071 @SuppressWarnings("unchecked")
72 @Before
73 public void setUp() throws Exception {
Yuta HIGUCHI44a0b352014-05-14 21:32:48 -070074 MockTopology mockTopology = new MockTopology();
75 mockTopology.createSampleTopology1();
76 this.topology = mockTopology;
Toshio Koide27ffd412014-02-18 19:15:27 -080077
Ray Milkey269ffb92014-04-03 14:43:30 -070078 datagridService = createMock(IDatagridService.class);
Jonathan Harte37e4e22014-05-13 19:12:02 -070079 topologyService = createMock(ITopologyService.class);
Ray Milkey269ffb92014-04-03 14:43:30 -070080 controllerRegistryService = createMock(IControllerRegistryService.class);
81 modContext = createMock(FloodlightModuleContext.class);
Toshio Koidee04a9df2014-05-01 15:49:28 -070082 intentOperationChannel = createMock(IEventChannel.class);
83 intentStateChannel = createMock(IEventChannel.class);
Ray Milkey269ffb92014-04-03 14:43:30 -070084 persistIntent = PowerMock.createMock(PersistIntent.class);
Pavlin Radoslavov13669052014-05-13 10:33:39 -070085 restApi = createMock(IRestApiService.class);
Toshio Koide798bc1b2014-02-20 14:02:40 -080086
Ray Milkey269ffb92014-04-03 14:43:30 -070087 PowerMock.expectNew(PersistIntent.class,
Pavlin Radoslavov0294e052014-04-10 13:36:45 -070088 anyObject(IControllerRegistryService.class)).andReturn(persistIntent);
Toshio Koide27ffd412014-02-18 19:15:27 -080089
Ray Milkey269ffb92014-04-03 14:43:30 -070090 expect(modContext.getServiceImpl(IDatagridService.class))
91 .andReturn(datagridService).once();
Jonathan Harte37e4e22014-05-13 19:12:02 -070092 expect(modContext.getServiceImpl(ITopologyService.class))
93 .andReturn(topologyService).once();
Ray Milkey269ffb92014-04-03 14:43:30 -070094 expect(modContext.getServiceImpl(IControllerRegistryService.class))
95 .andReturn(controllerRegistryService).once();
96 expect(persistIntent.getKey()).andReturn(1L).anyTimes();
97 expect(persistIntent.persistIfLeader(eq(1L),
98 anyObject(IntentOperationList.class))).andReturn(true).anyTimes();
Pavlin Radoslavov13669052014-05-13 10:33:39 -070099 expect(modContext.getServiceImpl(IRestApiService.class))
100 .andReturn(restApi).once();
Toshio Koide0c9106d2014-02-19 15:26:38 -0800101
Yuta HIGUCHI44a0b352014-05-14 21:32:48 -0700102 expect(topologyService.getTopology()).andReturn(mockTopology).anyTimes();
Jonathan Harte37e4e22014-05-13 19:12:02 -0700103 topologyService.registerTopologyListener(anyObject(ITopologyListener.class));
Ray Milkey269ffb92014-04-03 14:43:30 -0700104 expectLastCall();
Toshio Koide0c9106d2014-02-19 15:26:38 -0800105
Ray Milkey269ffb92014-04-03 14:43:30 -0700106 expect(datagridService.createChannel("onos.pathintent", Long.class, IntentOperationList.class))
Toshio Koidee04a9df2014-05-01 15:49:28 -0700107 .andReturn(intentOperationChannel).once();
Toshio Koide27ffd412014-02-18 19:15:27 -0800108
Ray Milkey269ffb92014-04-03 14:43:30 -0700109 expect(datagridService.addListener(
110 eq("onos.pathintent_state"),
111 anyObject(IEventChannelListener.class),
112 eq(Long.class),
113 eq(IntentStateList.class)))
Toshio Koidee04a9df2014-05-01 15:49:28 -0700114 .andReturn(intentStateChannel).once();
Pavlin Radoslavov13669052014-05-13 10:33:39 -0700115 restApi.addRestletRoutable(anyObject(IntentWebRoutable.class));
Toshio Koide066506e2014-02-20 19:52:09 -0800116
Ray Milkey269ffb92014-04-03 14:43:30 -0700117 replay(datagridService);
Jonathan Harte37e4e22014-05-13 19:12:02 -0700118 replay(topologyService);
Ray Milkey269ffb92014-04-03 14:43:30 -0700119 replay(modContext);
120 replay(controllerRegistryService);
121 PowerMock.replay(persistIntent, PersistIntent.class);
Pavlin Radoslavov13669052014-05-13 10:33:39 -0700122 replay(restApi);
Ray Milkey269ffb92014-04-03 14:43:30 -0700123 }
Toshio Koidec87810e2014-02-11 13:03:21 -0800124
Ray Milkey269ffb92014-04-03 14:43:30 -0700125 @After
126 public void tearDown() {
127 verify(datagridService);
Jonathan Harte37e4e22014-05-13 19:12:02 -0700128 verify(topologyService);
Ray Milkey269ffb92014-04-03 14:43:30 -0700129 verify(modContext);
130 verify(controllerRegistryService);
131 PowerMock.verify(persistIntent, PersistIntent.class);
Pavlin Radoslavov13669052014-05-13 10:33:39 -0700132 verify(restApi);
Ray Milkey269ffb92014-04-03 14:43:30 -0700133 }
Toshio Koidec87810e2014-02-11 13:03:21 -0800134
Ray Milkey269ffb92014-04-03 14:43:30 -0700135 private void showResult(PathIntentMap intents) {
136 for (Intent intent : intents.getAllIntents()) {
137 PathIntent pathIntent = (PathIntent) intent;
138 System.out.println("Path intent:" + pathIntent);
139 System.out.println("Parent intent: " + pathIntent.getParentIntent().toString());
140 }
141 }
Toshio Koidec87810e2014-02-11 13:03:21 -0800142
Ray Milkey269ffb92014-04-03 14:43:30 -0700143 @Test
144 public void createShortestPaths() throws FloodlightModuleException {
145 // create shortest path intents
146 IntentOperationList opList = new IntentOperationList();
147 opList.add(Operator.ADD, new ShortestPathIntent("1", 1L, 12L, LOCAL_PORT, 2L, 21L, LOCAL_PORT));
148 opList.add(Operator.ADD, new ShortestPathIntent("2", 1L, 14L, LOCAL_PORT, 4L, 41L, LOCAL_PORT));
149 opList.add(Operator.ADD, new ShortestPathIntent("3", 2L, 23L, LOCAL_PORT, 3L, 32L, LOCAL_PORT));
Toshio Koidec87810e2014-02-11 13:03:21 -0800150
Ray Milkey269ffb92014-04-03 14:43:30 -0700151 // compile high-level intent operations into low-level intent operations (calculate paths)
152 PathCalcRuntimeModule runtime1 = new PathCalcRuntimeModule();
153 runtime1.init(modContext);
154 runtime1.startUp(modContext);
155 IntentOperationList pathIntentOpList = runtime1.executeIntentOperations(opList);
Toshio Koide27ffd412014-02-18 19:15:27 -0800156
Ray Milkey269ffb92014-04-03 14:43:30 -0700157 // compile low-level intents into flow entry installation plan
158 PlanCalcRuntime runtime2 = new PlanCalcRuntime();
159 List<Set<FlowEntry>> plan = runtime2.computePlan(pathIntentOpList);
Toshio Koidec87810e2014-02-11 13:03:21 -0800160
Ray Milkey269ffb92014-04-03 14:43:30 -0700161 // show results
162 showResult((PathIntentMap) runtime1.getPathIntents());
163 System.out.println(plan);
164 }
Toshio Koidec87810e2014-02-11 13:03:21 -0800165
Ray Milkey269ffb92014-04-03 14:43:30 -0700166 @Test
167 public void createConstrainedShortestPaths() throws FloodlightModuleException {
168 // create constrained shortest path intents
169 IntentOperationList opList = new IntentOperationList();
170 opList.add(Operator.ADD, new ConstrainedShortestPathIntent("1", 1L, 12L, LOCAL_PORT, 2L, 21L, LOCAL_PORT, 400.0));
171 opList.add(Operator.ADD, new ConstrainedShortestPathIntent("2", 1L, 14L, LOCAL_PORT, 4L, 41L, LOCAL_PORT, 400.0));
172 opList.add(Operator.ADD, new ConstrainedShortestPathIntent("3", 2L, 24L, LOCAL_PORT, 4L, 42L, LOCAL_PORT, 400.0));
173 opList.add(Operator.ADD, new ConstrainedShortestPathIntent("4", 2L, 23L, LOCAL_PORT, 3L, 32L, LOCAL_PORT, 400.0));
174 opList.add(Operator.ADD, new ConstrainedShortestPathIntent("5", 3L, 34L, LOCAL_PORT, 4L, 43L, LOCAL_PORT, 400.0));
Toshio Koidec87810e2014-02-11 13:03:21 -0800175
Ray Milkey269ffb92014-04-03 14:43:30 -0700176 // compile high-level intent operations into low-level intent operations (calculate paths)
177 PathCalcRuntimeModule runtime1 = new PathCalcRuntimeModule();
178 runtime1.init(modContext);
179 runtime1.startUp(modContext);
180 IntentOperationList pathIntentOpList = runtime1.executeIntentOperations(opList);
Toshio Koidec87810e2014-02-11 13:03:21 -0800181
Ray Milkey269ffb92014-04-03 14:43:30 -0700182 // compile low-level intents into flow entry installation plan
183 PlanCalcRuntime runtime2 = new PlanCalcRuntime();
184 List<Set<FlowEntry>> plan = runtime2.computePlan(pathIntentOpList);
Brian O'Connor7f8e3012014-02-15 23:59:29 -0800185
Ray Milkey269ffb92014-04-03 14:43:30 -0700186 // show results
187 showResult((PathIntentMap) runtime1.getPathIntents());
188 System.out.println(plan);
189 }
Toshio Koidec87810e2014-02-11 13:03:21 -0800190
Ray Milkey269ffb92014-04-03 14:43:30 -0700191 @Test
192 public void createMixedShortestPaths() throws FloodlightModuleException {
193 // create constrained & best effort shortest path intents
194 IntentOperationList opList = new IntentOperationList();
195 opList.add(Operator.ADD, new ConstrainedShortestPathIntent("1", 1L, 12L, LOCAL_PORT, 2L, 21L, LOCAL_PORT, 400.0));
196 opList.add(Operator.ADD, new ConstrainedShortestPathIntent("2", 1L, 14L, LOCAL_PORT, 4L, 41L, LOCAL_PORT, 400.0));
197 opList.add(Operator.ADD, new ShortestPathIntent("3", 2L, 24L, LOCAL_PORT, 4L, 42L, LOCAL_PORT));
198 opList.add(Operator.ADD, new ShortestPathIntent("4", 2L, 23L, LOCAL_PORT, 3L, 32L, LOCAL_PORT));
199 opList.add(Operator.ADD, new ConstrainedShortestPathIntent("5", 3L, 34L, LOCAL_PORT, 4L, 43L, LOCAL_PORT, 400.0));
Toshio Koidec87810e2014-02-11 13:03:21 -0800200
Ray Milkey269ffb92014-04-03 14:43:30 -0700201 // compile high-level intent operations into low-level intent operations (calculate paths)
202 PathCalcRuntimeModule runtime1 = new PathCalcRuntimeModule();
203 runtime1.init(modContext);
204 runtime1.startUp(modContext);
205 IntentOperationList pathIntentOpList = runtime1.executeIntentOperations(opList);
Toshio Koidec87810e2014-02-11 13:03:21 -0800206
Ray Milkey269ffb92014-04-03 14:43:30 -0700207 // compile low-level intents into flow entry installation plan
208 PlanCalcRuntime runtime2 = new PlanCalcRuntime();
209 List<Set<FlowEntry>> plan = runtime2.computePlan(pathIntentOpList);
Brian O'Connor7f8e3012014-02-15 23:59:29 -0800210
Ray Milkey269ffb92014-04-03 14:43:30 -0700211 // show results
212 showResult((PathIntentMap) runtime1.getPathIntents());
213 System.out.println(plan);
214 }
Toshio Koided9fa2a82014-02-19 17:35:18 -0800215
Ray Milkey269ffb92014-04-03 14:43:30 -0700216 @Test
217 public void rerouteShortestPaths() throws FloodlightModuleException {
218 List<SwitchEvent> addedSwitchEvents = new LinkedList<>();
219 List<SwitchEvent> removedSwitchEvents = new LinkedList<>();
220 List<PortEvent> addedPortEvents = new LinkedList<>();
221 List<PortEvent> removedPortEvents = new LinkedList<>();
222 List<LinkEvent> addedLinkEvents = new LinkedList<>();
223 List<LinkEvent> removedLinkEvents = new LinkedList<>();
224 List<DeviceEvent> addedDeviceEvents = new LinkedList<>();
225 List<DeviceEvent> removedDeviceEvents = new LinkedList<>();
Pavlin Radoslavov74986ce2014-02-20 13:17:20 -0800226
Ray Milkey269ffb92014-04-03 14:43:30 -0700227 // create shortest path intents
228 IntentOperationList opList = new IntentOperationList();
229 opList.add(Operator.ADD, new ShortestPathIntent("1", 1L, 12L, LOCAL_PORT, 2L, 21L, LOCAL_PORT));
230 opList.add(Operator.ADD, new ShortestPathIntent("2", 1L, 14L, LOCAL_PORT, 4L, 41L, LOCAL_PORT));
231 opList.add(Operator.ADD, new ShortestPathIntent("3", 2L, 23L, LOCAL_PORT, 3L, 32L, LOCAL_PORT));
Toshio Koide0c9106d2014-02-19 15:26:38 -0800232
Ray Milkey269ffb92014-04-03 14:43:30 -0700233 // compile high-level intent operations into low-level intent operations (calculate paths)
234 PathCalcRuntimeModule runtime1 = new PathCalcRuntimeModule();
235 runtime1.init(modContext);
236 runtime1.startUp(modContext);
237 IntentOperationList pathIntentOpList = runtime1.executeIntentOperations(opList);
Toshio Koide0c9106d2014-02-19 15:26:38 -0800238
Ray Milkey269ffb92014-04-03 14:43:30 -0700239 // compile low-level intents into flow entry installation plan
240 PlanCalcRuntime runtime2 = new PlanCalcRuntime();
241 List<Set<FlowEntry>> plan = runtime2.computePlan(pathIntentOpList);
Toshio Koide0c9106d2014-02-19 15:26:38 -0800242
Ray Milkey269ffb92014-04-03 14:43:30 -0700243 // show results step1
244 showResult((PathIntentMap) runtime1.getPathIntents());
245 System.out.println(plan);
Toshio Koide0c9106d2014-02-19 15:26:38 -0800246
Ray Milkey269ffb92014-04-03 14:43:30 -0700247 // TODO this state changes should be triggered by notification of plan module
248 IntentStateList states = new IntentStateList();
249 states.put("1", IntentState.INST_ACK);
250 states.put("2", IntentState.INST_ACK);
251 states.put("3", IntentState.INST_ACK);
252 runtime1.getHighLevelIntents().changeStates(states);
253 states.clear();
254 states.put("1___0", IntentState.INST_ACK);
255 states.put("2___0", IntentState.INST_ACK);
256 states.put("3___0", IntentState.INST_ACK);
257 runtime1.getPathIntents().changeStates(states);
Toshio Koidea10c0372014-02-20 17:28:10 -0800258
Ray Milkey269ffb92014-04-03 14:43:30 -0700259 // link down
Jonathan Harte37e4e22014-05-13 19:12:02 -0700260 ((MockTopology) topology).removeLink(1L, 12L, 2L, 21L); // This link is used by the intent "1"
261 ((MockTopology) topology).removeLink(2L, 21L, 1L, 12L);
Ray Milkey269ffb92014-04-03 14:43:30 -0700262 LinkEvent linkEvent1 = new LinkEvent(1L, 12L, 2L, 21L);
263 LinkEvent linkEvent2 = new LinkEvent(2L, 21L, 1L, 12L);
264 removedLinkEvents.clear();
265 removedLinkEvents.add(linkEvent1);
266 removedLinkEvents.add(linkEvent2);
Jonathan Harte37e4e22014-05-13 19:12:02 -0700267 runtime1.topologyEvents(
Ray Milkey269ffb92014-04-03 14:43:30 -0700268 addedSwitchEvents,
269 removedSwitchEvents,
270 addedPortEvents,
271 removedPortEvents,
272 addedLinkEvents,
273 removedLinkEvents,
274 addedDeviceEvents,
275 removedDeviceEvents);
Toshio Koide7d3cee02014-06-05 18:56:19 -0700276 System.out.println("*** Link goes down. ***");
277
278 // send notification
279 IntentStateList isl = new IntentStateList();
280 isl.put("1___0", IntentState.DEL_ACK);
281 isl.put("1___1", IntentState.INST_ACK);
282 isl.domainSwitchDpids.add(1L);
283 isl.domainSwitchDpids.add(2L);
284 isl.domainSwitchDpids.add(4L);
285 runtime1.entryUpdated(isl);
Toshio Koide0c9106d2014-02-19 15:26:38 -0800286
Ray Milkey269ffb92014-04-03 14:43:30 -0700287 // show results step2
288 showResult((PathIntentMap) runtime1.getPathIntents());
Toshio Koide7d3cee02014-06-05 18:56:19 -0700289
290 // link up
291 ((MockTopology) topology).addBidirectionalLinks(1L, 12L, 2L, 21L);
292 linkEvent1 = new LinkEvent(1L, 12L, 2L, 21L);
293 linkEvent2 = new LinkEvent(2L, 21L, 1L, 12L);
294 removedLinkEvents.clear();
295 addedLinkEvents.clear();
296 addedLinkEvents.add(linkEvent1);
297 addedLinkEvents.add(linkEvent2);
298 runtime1.topologyEvents(
299 addedSwitchEvents,
300 removedSwitchEvents,
301 addedPortEvents,
302 removedPortEvents,
303 addedLinkEvents,
304 removedLinkEvents,
305 addedDeviceEvents,
306 removedDeviceEvents);
307 System.out.println("*** Link goes up. ***");
308
309 // send notification
310 isl = new IntentStateList();
311 isl.put("1___1", IntentState.DEL_ACK);
312 isl.put("1___2", IntentState.INST_ACK);
313 isl.domainSwitchDpids.add(1L);
314 isl.domainSwitchDpids.add(2L);
315 isl.domainSwitchDpids.add(4L);
316 runtime1.entryUpdated(isl);
317
318 // show results step3
319 showResult((PathIntentMap) runtime1.getPathIntents());
320
Ray Milkey269ffb92014-04-03 14:43:30 -0700321 // TODO: show results of plan computation
322 }
Toshio Koidefa735a12014-03-28 10:49:07 -0700323
324
Ray Milkey269ffb92014-04-03 14:43:30 -0700325 @Test
326 public void createAndRemoveShortestPaths() throws FloodlightModuleException {
327 // create shortest path intents
328 IntentOperationList opList = new IntentOperationList();
329 opList.add(Operator.ADD, new ShortestPathIntent("1", 1L, 12L, LOCAL_PORT, 2L, 21L, LOCAL_PORT));
330 opList.add(Operator.ADD, new ShortestPathIntent("2", 1L, 14L, LOCAL_PORT, 4L, 41L, LOCAL_PORT));
331 opList.add(Operator.ADD, new ShortestPathIntent("3", 2L, 23L, LOCAL_PORT, 3L, 32L, LOCAL_PORT));
Toshio Koidefa735a12014-03-28 10:49:07 -0700332
Ray Milkey269ffb92014-04-03 14:43:30 -0700333 // compile high-level intent operations into low-level intent operations (calculate paths)
334 PathCalcRuntimeModule runtime1 = new PathCalcRuntimeModule();
335 runtime1.init(modContext);
336 runtime1.startUp(modContext);
337 IntentOperationList pathIntentOpList = runtime1.executeIntentOperations(opList);
Toshio Koidefa735a12014-03-28 10:49:07 -0700338
Ray Milkey269ffb92014-04-03 14:43:30 -0700339 // compile low-level intents into flow entry installation plan
340 PlanCalcRuntime runtime2 = new PlanCalcRuntime();
341 List<Set<FlowEntry>> plan = runtime2.computePlan(pathIntentOpList);
Toshio Koidefa735a12014-03-28 10:49:07 -0700342
Ray Milkey269ffb92014-04-03 14:43:30 -0700343 // show results
344 showResult((PathIntentMap) runtime1.getPathIntents());
345 System.out.println(plan);
Toshio Koidefa735a12014-03-28 10:49:07 -0700346
Ray Milkey269ffb92014-04-03 14:43:30 -0700347 // create remove operations
348 opList.clear();
349 opList.add(Operator.REMOVE, new Intent("1"));
350 opList.add(Operator.REMOVE, new Intent("2"));
Toshio Koidefa735a12014-03-28 10:49:07 -0700351
Ray Milkey269ffb92014-04-03 14:43:30 -0700352 // compile
353 runtime1.executeIntentOperations(opList);
Toshio Koidefa735a12014-03-28 10:49:07 -0700354
Ray Milkey269ffb92014-04-03 14:43:30 -0700355 // show results
356 showResult((PathIntentMap) runtime1.getPathIntents());
357 System.out.println(plan);
358 }
Toshio Koidefa735a12014-03-28 10:49:07 -0700359
Toshio Koidec87810e2014-02-11 13:03:21 -0800360}