blob: b1b80c5b2f4fedc379fdad53a2258c7ea6cc95b0 [file] [log] [blame]
gaurav36785932016-03-10 17:24:04 +05301/*
Brian O'Connor5ab426f2016-04-09 01:19:45 -07002 * Copyright 2016-present Open Networking Laboratory
gaurav36785932016-03-10 17:24:04 +05303 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package org.onosproject.routing.impl;
17
Jonathan Hartf04b7d92016-03-29 09:39:11 -070018import com.google.common.collect.Sets;
gaurav36785932016-03-10 17:24:04 +053019import org.easymock.EasyMock;
20import org.junit.Before;
21import org.junit.Test;
22import org.onlab.packet.Ethernet;
gaurav36785932016-03-10 17:24:04 +053023import org.onlab.packet.Ip4Prefix;
24import org.onlab.packet.IpAddress;
25import org.onlab.packet.IpPrefix;
26import org.onlab.packet.MacAddress;
27import org.onlab.packet.VlanId;
28import org.onosproject.TestApplicationId;
Jonathan Hartf04b7d92016-03-29 09:39:11 -070029import org.onosproject.cfg.ComponentConfigService;
gaurav36785932016-03-10 17:24:04 +053030import org.onosproject.core.ApplicationId;
31import org.onosproject.core.CoreService;
gaurav36785932016-03-10 17:24:04 +053032import org.onosproject.incubator.net.intf.Interface;
gaurav164cf6d2016-03-25 21:43:04 +053033import org.onosproject.incubator.net.intf.InterfaceListener;
gaurav36785932016-03-10 17:24:04 +053034import org.onosproject.incubator.net.intf.InterfaceService;
gaurav164cf6d2016-03-25 21:43:04 +053035import org.onosproject.incubator.net.intf.InterfaceServiceAdapter;
Jonathan Harta2eb9ff2016-04-13 21:27:06 -070036import org.onosproject.incubator.net.routing.ResolvedRoute;
37import org.onosproject.incubator.net.routing.RouteEvent;
38import org.onosproject.incubator.net.routing.RouteListener;
39import org.onosproject.incubator.net.routing.RouteServiceAdapter;
gaurav36785932016-03-10 17:24:04 +053040import org.onosproject.net.ConnectPoint;
41import org.onosproject.net.DeviceId;
42import org.onosproject.net.PortNumber;
Charles Chand55e84d2016-03-30 17:54:24 -070043import org.onosproject.net.config.NetworkConfigRegistry;
gaurav36785932016-03-10 17:24:04 +053044import org.onosproject.net.config.NetworkConfigService;
45import org.onosproject.net.device.DeviceListener;
46import org.onosproject.net.device.DeviceService;
47import org.onosproject.net.device.DeviceServiceAdapter;
48import org.onosproject.net.flow.DefaultTrafficSelector;
49import org.onosproject.net.flow.DefaultTrafficTreatment;
50import org.onosproject.net.flow.TrafficSelector;
51import org.onosproject.net.flow.TrafficTreatment;
52import org.onosproject.net.flowobjective.DefaultForwardingObjective;
53import org.onosproject.net.flowobjective.DefaultNextObjective;
54import org.onosproject.net.flowobjective.FlowObjectiveService;
55import org.onosproject.net.flowobjective.ForwardingObjective;
56import org.onosproject.net.flowobjective.NextObjective;
57import org.onosproject.net.host.InterfaceIpAddress;
gaurav36785932016-03-10 17:24:04 +053058import org.onosproject.routing.RoutingService;
gaurav36785932016-03-10 17:24:04 +053059import org.onosproject.routing.config.RouterConfig;
Jonathan Hartf04b7d92016-03-29 09:39:11 -070060import org.osgi.service.component.ComponentContext;
61
62import java.util.ArrayList;
63import java.util.Collections;
Jonathan Hartf04b7d92016-03-29 09:39:11 -070064import java.util.List;
65import java.util.Set;
66
67import static org.easymock.EasyMock.anyObject;
Jonathan Harta2eb9ff2016-04-13 21:27:06 -070068import static org.easymock.EasyMock.anyString;
Jonathan Hartf04b7d92016-03-29 09:39:11 -070069import static org.easymock.EasyMock.createMock;
Jonathan Harta2eb9ff2016-04-13 21:27:06 -070070import static org.easymock.EasyMock.createNiceMock;
71import static org.easymock.EasyMock.eq;
Jonathan Hartf04b7d92016-03-29 09:39:11 -070072import static org.easymock.EasyMock.expect;
Jonathan Harta2eb9ff2016-04-13 21:27:06 -070073import static org.easymock.EasyMock.expectLastCall;
Jonathan Hartf04b7d92016-03-29 09:39:11 -070074import static org.easymock.EasyMock.replay;
75import static org.easymock.EasyMock.reset;
76import static org.easymock.EasyMock.verify;
gaurav36785932016-03-10 17:24:04 +053077
78/**
79 * Unit tests for SingleSwitchFibInstaller.
80 */
Jonathan Harta2eb9ff2016-04-13 21:27:06 -070081public class SingleSwitchFibInstallerTest {
gaurav36785932016-03-10 17:24:04 +053082
Jonathan Harta2eb9ff2016-04-13 21:27:06 -070083 private static final DeviceId DEVICE_ID = DeviceId.deviceId("of:0000000000000001");
84
gaurav36785932016-03-10 17:24:04 +053085 private static final ConnectPoint SW1_ETH1 = new ConnectPoint(
Jonathan Harta2eb9ff2016-04-13 21:27:06 -070086 DEVICE_ID, PortNumber.portNumber(1));
gaurav36785932016-03-10 17:24:04 +053087
Jonathan Harta2eb9ff2016-04-13 21:27:06 -070088 private static final ConnectPoint SW1_ETH2 = new ConnectPoint(
89 DEVICE_ID, PortNumber.portNumber(2));
gaurav36785932016-03-10 17:24:04 +053090
Jonathan Harta2eb9ff2016-04-13 21:27:06 -070091 private static final int NEXT_ID = 11;
gaurav36785932016-03-10 17:24:04 +053092
Jonathan Harta2eb9ff2016-04-13 21:27:06 -070093 private static final VlanId VLAN1 = VlanId.vlanId((short) 1);
94 private static final MacAddress MAC1 = MacAddress.valueOf("00:00:00:00:00:01");
95 private static final MacAddress MAC2 = MacAddress.valueOf("00:00:00:00:00:02");
gaurav36785932016-03-10 17:24:04 +053096
Jonathan Harta2eb9ff2016-04-13 21:27:06 -070097 private static final IpPrefix PREFIX1 = Ip4Prefix.valueOf("1.1.1.0/24");
98 private static final IpAddress NEXT_HOP1 = IpAddress.valueOf("192.168.10.1");
99 private static final IpAddress NEXT_HOP2 = IpAddress.valueOf("192.168.20.1");
100 private static final InterfaceIpAddress INTF1 =
101 InterfaceIpAddress.valueOf("192.168.10.2/24");
102 private static final InterfaceIpAddress INTF2 =
103 InterfaceIpAddress.valueOf("192.168.20.2/24");
104
105
gaurav36785932016-03-10 17:24:04 +0530106 private final Set<Interface> interfaces = Sets.newHashSet();
107 private InterfaceService interfaceService;
108 private NetworkConfigService networkConfigService;
Charles Chand55e84d2016-03-30 17:54:24 -0700109 private NetworkConfigRegistry networkConfigRegistry;
gaurav36785932016-03-10 17:24:04 +0530110 private FlowObjectiveService flowObjectiveService;
111 private DeviceService deviceService;
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700112 private static final ApplicationId APPID = TestApplicationId.create("foo");
113
114 private RouteListener routeListener;
gaurav36785932016-03-10 17:24:04 +0530115 private DeviceListener deviceListener;
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700116
gaurav36785932016-03-10 17:24:04 +0530117 private RouterConfig routerConfig;
gaurav164cf6d2016-03-25 21:43:04 +0530118 private SingleSwitchFibInstaller sSfibInstaller;
119 private InterfaceListener interfaceListener;
gaurav36785932016-03-10 17:24:04 +0530120
121 @Before
122 public void setUp() throws Exception {
gaurav36785932016-03-10 17:24:04 +0530123 sSfibInstaller = new SingleSwitchFibInstaller();
124
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700125 sSfibInstaller.componentConfigService = createNiceMock(ComponentConfigService.class);
gaurav36785932016-03-10 17:24:04 +0530126
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700127 ComponentContext mockContext = createNiceMock(ComponentContext.class);
gaurav36785932016-03-10 17:24:04 +0530128
gaurav36785932016-03-10 17:24:04 +0530129 routerConfig = new TestRouterConfig();
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700130 interfaceService = createMock(InterfaceService.class);
131
gaurav36785932016-03-10 17:24:04 +0530132 networkConfigService = createMock(NetworkConfigService.class);
Charles Chand55e84d2016-03-30 17:54:24 -0700133 networkConfigRegistry = createMock(NetworkConfigRegistry.class);
gaurav36785932016-03-10 17:24:04 +0530134 flowObjectiveService = createMock(FlowObjectiveService.class);
135 deviceService = new TestDeviceService();
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700136 CoreService coreService = createNiceMock(CoreService.class);
Charles Chand55e84d2016-03-30 17:54:24 -0700137 expect(coreService.registerApplication(anyString())).andReturn(APPID).anyTimes();
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700138 replay(coreService);
gaurav36785932016-03-10 17:24:04 +0530139
140 sSfibInstaller.networkConfigService = networkConfigService;
Charles Chand55e84d2016-03-30 17:54:24 -0700141 sSfibInstaller.networkConfigRegistry = networkConfigRegistry;
gaurav36785932016-03-10 17:24:04 +0530142 sSfibInstaller.interfaceService = interfaceService;
143 sSfibInstaller.flowObjectiveService = flowObjectiveService;
144 sSfibInstaller.coreService = coreService;
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700145 sSfibInstaller.routeService = new TestRouteService();
gaurav36785932016-03-10 17:24:04 +0530146 sSfibInstaller.deviceService = deviceService;
147
148 setUpNetworkConfigService();
149 setUpInterfaceService();
150 sSfibInstaller.activate(mockContext);
151 }
152
153 /**
154 * Sets up InterfaceService.
155 */
156 private void setUpInterfaceService() {
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700157 interfaceService.addListener(anyObject(InterfaceListener.class));
158 expectLastCall().andDelegateTo(new TestInterfaceService());
159
160 // Interface with no VLAN
161 Interface sw1Eth1 = new Interface("intf1", SW1_ETH1,
162 Collections.singletonList(INTF1), MAC1, VlanId.NONE);
163 expect(interfaceService.getMatchingInterface(NEXT_HOP1)).andReturn(sw1Eth1);
gaurav36785932016-03-10 17:24:04 +0530164 interfaces.add(sw1Eth1);
165
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700166 // Interface with a VLAN
167 Interface sw2Eth1 = new Interface("intf2", SW1_ETH2,
168 Collections.singletonList(INTF2), MAC2, VLAN1);
169 expect(interfaceService.getMatchingInterface(NEXT_HOP2)).andReturn(sw2Eth1);
gaurav36785932016-03-10 17:24:04 +0530170 interfaces.add(sw2Eth1);
171
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700172 expect(interfaceService.getInterfaces()).andReturn(interfaces);
gaurav36785932016-03-10 17:24:04 +0530173
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700174 replay(interfaceService);
gaurav36785932016-03-10 17:24:04 +0530175 }
176
177 /*
178 * Sets up NetworkConfigService.
Jonathan Hartf04b7d92016-03-29 09:39:11 -0700179 */
gaurav36785932016-03-10 17:24:04 +0530180 private void setUpNetworkConfigService() {
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700181 expect(networkConfigService.getConfig(
182 anyObject(ApplicationId.class), eq(RoutingService.ROUTER_CONFIG_CLASS))).
gaurav36785932016-03-10 17:24:04 +0530183 andReturn(routerConfig);
184 replay(networkConfigService);
185 }
186
187 /**
188 * Sets up FlowObjectiveService.
189 */
190 private void setUpFlowObjectiveService() {
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700191 expect(flowObjectiveService.allocateNextId()).andReturn(NEXT_ID);
gaurav36785932016-03-10 17:24:04 +0530192 replay(flowObjectiveService);
193 }
194
195 /**
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700196 * Creates a next objective with the given parameters.
gaurav36785932016-03-10 17:24:04 +0530197 *
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700198 * @param srcMac source MAC address
199 * @param dstMac destination MAC address
200 * @param port port number
201 * @param vlan vlan ID
202 * @param add whether to create an add objective or remove objective
203 * @return new next objective
gaurav36785932016-03-10 17:24:04 +0530204 */
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700205 private NextObjective createNextObjective(MacAddress srcMac,
206 MacAddress dstMac,
207 PortNumber port,
208 VlanId vlan,
209 boolean add) {
gaurav36785932016-03-10 17:24:04 +0530210 TrafficTreatment.Builder treatment = DefaultTrafficTreatment.builder()
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700211 .setEthSrc(srcMac)
212 .setEthDst(dstMac);
gaurav36785932016-03-10 17:24:04 +0530213 TrafficSelector.Builder metabuilder = null;
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700214 if (!vlan.equals(VlanId.NONE)) {
gaurav36785932016-03-10 17:24:04 +0530215 treatment.pushVlan()
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700216 .setVlanId(vlan)
217 .setVlanPcp((byte) 0);
gaurav36785932016-03-10 17:24:04 +0530218 } else {
219 metabuilder = DefaultTrafficSelector.builder();
220 metabuilder.matchVlanId(VlanId.vlanId(SingleSwitchFibInstaller.ASSIGNED_VLAN));
221 }
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700222
223 treatment.setOutput(port);
gaurav36785932016-03-10 17:24:04 +0530224 NextObjective.Builder nextBuilder = DefaultNextObjective.builder()
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700225 .withId(NEXT_ID)
gaurav36785932016-03-10 17:24:04 +0530226 .addTreatment(treatment.build())
227 .withType(NextObjective.Type.SIMPLE)
228 .fromApp(APPID);
229 if (metabuilder != null) {
230 nextBuilder.withMeta(metabuilder.build());
231 }
232
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700233 return add ? nextBuilder.add() : nextBuilder.remove();
234 }
gaurav36785932016-03-10 17:24:04 +0530235
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700236 /**
237 * Creates a new forwarding objective with the given parameters.
238 *
239 * @param prefix IP prefix
240 * @param add whether to create an add objective or a remove objective
241 * @return new forwarding objective
242 */
243 private ForwardingObjective createForwardingObjective(IpPrefix prefix,
244 boolean add) {
gaurav36785932016-03-10 17:24:04 +0530245 TrafficSelector selector = DefaultTrafficSelector.builder()
246 .matchEthType(Ethernet.TYPE_IPV4)
247 .matchIPDst(prefix)
248 .build();
249
250 int priority = prefix.prefixLength() * 5 + 100;
251 ForwardingObjective.Builder fwdBuilder = DefaultForwardingObjective.builder()
252 .fromApp(APPID)
253 .makePermanent()
254 .withSelector(selector)
255 .withPriority(priority)
256 .withFlag(ForwardingObjective.Flag.SPECIFIC);
257
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700258 if (add) {
259 fwdBuilder.nextStep(NEXT_ID);
260 } else {
261 fwdBuilder.withTreatment(DefaultTrafficTreatment.builder().build());
262 }
263
264 return add ? fwdBuilder.add() : fwdBuilder.remove();
265 }
266
267 /**
268 * Tests adding a route.
269 *
270 * We verify that the flowObjectiveService records the correct state and that the
271 * correct flow is submitted to the flowObjectiveService.
272 */
273 @Test
274 public void testRouteAdd() {
275 ResolvedRoute resolvedRoute = new ResolvedRoute(PREFIX1, NEXT_HOP1, MAC1);
276
277 // Create the next objective
278 NextObjective nextObjective = createNextObjective(MAC1, MAC1, SW1_ETH1.port(), VlanId.NONE, true);
279 flowObjectiveService.next(DEVICE_ID, nextObjective);
280
281 // Create the flow objective
282 ForwardingObjective fwd = createForwardingObjective(PREFIX1, true);
283 flowObjectiveService.forward(DEVICE_ID, fwd);
gaurav36785932016-03-10 17:24:04 +0530284 EasyMock.expectLastCall().once();
285 setUpFlowObjectiveService();
286
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700287 // Send in the add event
288 RouteEvent routeEvent = new RouteEvent(RouteEvent.Type.ROUTE_ADDED, resolvedRoute);
289 routeListener.event(routeEvent);
gaurav36785932016-03-10 17:24:04 +0530290 verify(flowObjectiveService);
291 }
292
293 /**
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700294 * Tests adding a route with to a next hop in a VLAN.
gaurav36785932016-03-10 17:24:04 +0530295 *
296 * We verify that the flowObjectiveService records the correct state and that the
297 * correct flowObjectiveService is submitted to the flowObjectiveService.
298 */
299 @Test
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700300 public void testRouteAddWithVlan() {
301 ResolvedRoute route = new ResolvedRoute(PREFIX1, NEXT_HOP2, MAC2);
gaurav36785932016-03-10 17:24:04 +0530302
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700303 // Create the next objective
304 NextObjective nextObjective = createNextObjective(MAC2, MAC2, SW1_ETH2.port(), VLAN1, true);
305 flowObjectiveService.next(DEVICE_ID, nextObjective);
gaurav36785932016-03-10 17:24:04 +0530306
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700307 // Create the flow objective
308 ForwardingObjective fwd = createForwardingObjective(PREFIX1, true);
309 flowObjectiveService.forward(DEVICE_ID, fwd);
gaurav36785932016-03-10 17:24:04 +0530310 EasyMock.expectLastCall().once();
311 setUpFlowObjectiveService();
312
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700313 // Send in the add event
314 routeListener.event(new RouteEvent(RouteEvent.Type.ROUTE_ADDED, route));
gaurav36785932016-03-10 17:24:04 +0530315
316 verify(flowObjectiveService);
317 }
318
319 /**
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700320 * Tests updating a route.
gaurav36785932016-03-10 17:24:04 +0530321 *
322 * We verify that the flowObjectiveService records the correct state and that the
323 * correct flow is submitted to the flowObjectiveService.
324 */
325 @Test
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700326 public void testRouteUpdate() {
gaurav36785932016-03-10 17:24:04 +0530327 // Firstly add a route
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700328 testRouteAdd();
gaurav36785932016-03-10 17:24:04 +0530329 reset(flowObjectiveService);
gaurav36785932016-03-10 17:24:04 +0530330
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700331 ResolvedRoute route = new ResolvedRoute(PREFIX1, NEXT_HOP2, MAC2);
gaurav36785932016-03-10 17:24:04 +0530332
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700333 // Create the next objective
334 NextObjective nextObjective = createNextObjective(MAC2, MAC2, SW1_ETH2.port(), VLAN1, true);
335 flowObjectiveService.next(DEVICE_ID, nextObjective);
gaurav36785932016-03-10 17:24:04 +0530336
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700337 // Create the flow objective
338 ForwardingObjective fwd = createForwardingObjective(PREFIX1, true);
339 flowObjectiveService.forward(DEVICE_ID, fwd);
gaurav36785932016-03-10 17:24:04 +0530340 EasyMock.expectLastCall().once();
341 setUpFlowObjectiveService();
342
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700343 // Send in the update event
344 routeListener.event(new RouteEvent(RouteEvent.Type.ROUTE_UPDATED, route));
gaurav36785932016-03-10 17:24:04 +0530345
346 verify(flowObjectiveService);
347 }
348
Jonathan Hartf04b7d92016-03-29 09:39:11 -0700349 /**
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700350 * Tests deleting a route.
gaurav36785932016-03-10 17:24:04 +0530351 *
352 * We verify that the flowObjectiveService records the correct state and that the
353 * correct flow is withdrawn from the flowObjectiveService.
354 */
gaurav36785932016-03-10 17:24:04 +0530355 @Test
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700356 public void testRouteDelete() {
gaurav36785932016-03-10 17:24:04 +0530357 // Firstly add a route
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700358 testRouteAdd();
gaurav36785932016-03-10 17:24:04 +0530359
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700360 // Construct the existing route
361 ResolvedRoute route = new ResolvedRoute(PREFIX1, null, null);
gaurav36785932016-03-10 17:24:04 +0530362
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700363 // Create the flow objective
gaurav36785932016-03-10 17:24:04 +0530364 reset(flowObjectiveService);
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700365 ForwardingObjective fwd = createForwardingObjective(PREFIX1, false);
366 flowObjectiveService.forward(DEVICE_ID, fwd);
gaurav36785932016-03-10 17:24:04 +0530367 replay(flowObjectiveService);
368
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700369 // Send in the delete event
370 routeListener.event(new RouteEvent(RouteEvent.Type.ROUTE_REMOVED, route));
gaurav36785932016-03-10 17:24:04 +0530371
372 verify(flowObjectiveService);
373 }
374
gaurav164cf6d2016-03-25 21:43:04 +0530375 private class TestInterfaceService extends InterfaceServiceAdapter {
gaurav164cf6d2016-03-25 21:43:04 +0530376 @Override
377 public void addListener(InterfaceListener listener) {
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700378 interfaceListener = listener;
gaurav164cf6d2016-03-25 21:43:04 +0530379 }
380 }
381
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700382 private class TestRouteService extends RouteServiceAdapter {
gaurav36785932016-03-10 17:24:04 +0530383 @Override
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700384 public void addListener(RouteListener listener) {
385 SingleSwitchFibInstallerTest.this.routeListener = listener;
gaurav36785932016-03-10 17:24:04 +0530386 }
387 }
388
389 private class TestRouterConfig extends RouterConfig {
390
391 @Override
392 public List<String> getInterfaces() {
393 ArrayList<String> interfaces = new ArrayList<>();
394 interfaces.add("of:0000000000000001/1");
Jonathan Harta2eb9ff2016-04-13 21:27:06 -0700395 interfaces.add("of:0000000000000001/2");
gaurav36785932016-03-10 17:24:04 +0530396 return interfaces;
397 }
398
399 @Override
400 public ConnectPoint getControlPlaneConnectPoint() {
401 return SW1_ETH1;
402 }
403
404 @Override
405 public boolean getOspfEnabled() {
406 return true;
407 }
408 }
409
410 private class TestDeviceService extends DeviceServiceAdapter {
411
412 @Override
413 public boolean isAvailable(DeviceId deviceId) {
414 return true;
415 }
416
417 @Override
418 public void addListener(DeviceListener listener) {
419 SingleSwitchFibInstallerTest.this.deviceListener = listener;
420 }
421 }
422}