blob: 899a4b38b5f1afa900c0929c9de17bee0fa9b2e1 [file] [log] [blame]
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07001/*
2 * Copyright 2014 Open Networking Laboratory
3 *
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 */
Brian O'Connorabafb502014-12-02 22:26:20 -080016package org.onosproject.sdnip;
Pingpingfc584672014-10-23 10:51:19 -070017
18import static org.easymock.EasyMock.anyObject;
19import static org.easymock.EasyMock.createMock;
20import static org.easymock.EasyMock.expect;
21import static org.easymock.EasyMock.replay;
22import static org.easymock.EasyMock.reset;
23import static org.easymock.EasyMock.verify;
24import static org.junit.Assert.assertEquals;
25import static org.junit.Assert.assertTrue;
26
Pavlin Radoslavov248c2ae2014-12-02 09:51:25 -080027import java.util.Collections;
Pingpingfc584672014-10-23 10:51:19 -070028import java.util.HashMap;
29import java.util.HashSet;
30import java.util.Map;
31import java.util.Set;
32import java.util.concurrent.ConcurrentHashMap;
33
34import org.junit.Before;
35import org.junit.Test;
36import org.onlab.junit.TestUtils;
37import org.onlab.junit.TestUtils.TestUtilsException;
Brian O'Connorabafb502014-12-02 22:26:20 -080038import org.onosproject.core.ApplicationId;
39import org.onosproject.net.ConnectPoint;
40import org.onosproject.net.DefaultHost;
41import org.onosproject.net.DeviceId;
42import org.onosproject.net.Host;
43import org.onosproject.net.HostId;
44import org.onosproject.net.HostLocation;
45import org.onosproject.net.PortNumber;
46import org.onosproject.net.flow.DefaultTrafficSelector;
47import org.onosproject.net.flow.DefaultTrafficTreatment;
48import org.onosproject.net.flow.TrafficSelector;
49import org.onosproject.net.flow.TrafficTreatment;
50import org.onosproject.net.host.HostEvent;
51import org.onosproject.net.host.HostService;
52import org.onosproject.net.host.InterfaceIpAddress;
53import org.onosproject.net.intent.Intent;
54import org.onosproject.net.intent.IntentOperations;
55import org.onosproject.net.intent.IntentService;
56import org.onosproject.net.intent.MultiPointToSinglePointIntent;
57import org.onosproject.net.intent.AbstractIntentTest;
58import org.onosproject.net.provider.ProviderId;
59import org.onosproject.sdnip.IntentSynchronizer.IntentKey;
60import org.onosproject.sdnip.Router.InternalHostListener;
61import org.onosproject.sdnip.config.BgpPeer;
62import org.onosproject.sdnip.config.Interface;
63import org.onosproject.sdnip.config.SdnIpConfigurationService;
Pingpingfc584672014-10-23 10:51:19 -070064import org.onlab.packet.Ethernet;
65import org.onlab.packet.IpAddress;
Pavlin Radoslavov6b570732014-11-06 13:16:45 -080066import org.onlab.packet.Ip4Address;
Pingpingfc584672014-10-23 10:51:19 -070067import org.onlab.packet.IpPrefix;
Pavlin Radoslavov6b570732014-11-06 13:16:45 -080068import org.onlab.packet.Ip4Prefix;
Pingpingfc584672014-10-23 10:51:19 -070069import org.onlab.packet.MacAddress;
70import org.onlab.packet.VlanId;
71
72import com.google.common.collect.Sets;
73import com.googlecode.concurrenttrees.radix.node.concrete.DefaultByteArrayNodeFactory;
74import com.googlecode.concurrenttrees.radixinverted.ConcurrentInvertedRadixTree;
75import com.googlecode.concurrenttrees.radixinverted.InvertedRadixTree;
76
77/**
78 * This class tests adding a route, updating a route, deleting a route, and
79 * the ARP module answers the MAC address asynchronously.
80 */
Brian O'Connor520c0522014-11-23 23:50:47 -080081public class RouterTestWithAsyncArp extends AbstractIntentTest {
Pingpingfc584672014-10-23 10:51:19 -070082
Jonathan Hart9965d772014-12-02 10:28:34 -080083 private SdnIpConfigurationService sdnIpConfigService;
Pingpingfc584672014-10-23 10:51:19 -070084 private InterfaceService interfaceService;
85 private IntentService intentService;
86 private HostService hostService;
87
88 private static final ConnectPoint SW1_ETH1 = new ConnectPoint(
89 DeviceId.deviceId("of:0000000000000001"),
90 PortNumber.portNumber(1));
91
92 private static final ConnectPoint SW2_ETH1 = new ConnectPoint(
93 DeviceId.deviceId("of:0000000000000002"),
94 PortNumber.portNumber(1));
95
96 private static final ConnectPoint SW3_ETH1 = new ConnectPoint(
97 DeviceId.deviceId("of:0000000000000003"),
98 PortNumber.portNumber(1));
99
Pavlin Radoslavova071b1e2014-11-17 13:37:57 -0800100 private IntentSynchronizer intentSynchronizer;
Pingpingfc584672014-10-23 10:51:19 -0700101 private Router router;
102 private InternalHostListener internalHostListener;
103
104 private static final ApplicationId APPID = new ApplicationId() {
105 @Override
106 public short id() {
107 return 1;
108 }
109
110 @Override
111 public String name() {
112 return "SDNIP";
113 }
114 };
115
116 @Before
117 public void setUp() throws Exception {
Brian O'Connor520c0522014-11-23 23:50:47 -0800118 super.setUp();
119
Pingpingfc584672014-10-23 10:51:19 -0700120 setUpSdnIpConfigService();
121 setUpInterfaceService();
122 hostService = createMock(HostService.class);
123 intentService = createMock(IntentService.class);
124
Pavlin Radoslavova071b1e2014-11-17 13:37:57 -0800125 intentSynchronizer = new IntentSynchronizer(APPID, intentService);
126 router = new Router(APPID, intentSynchronizer,
Pavlin Radoslavova7243cc2014-11-22 21:38:02 -0800127 sdnIpConfigService, interfaceService, hostService);
Pingpingfc584672014-10-23 10:51:19 -0700128 internalHostListener = router.new InternalHostListener();
129 }
130
131 /**
132 * Sets up SdnIpConfigService.
133 */
134 private void setUpSdnIpConfigService() {
135
Jonathan Hart9965d772014-12-02 10:28:34 -0800136 sdnIpConfigService = createMock(SdnIpConfigurationService.class);
Pingpingfc584672014-10-23 10:51:19 -0700137
138 Map<IpAddress, BgpPeer> peers = new HashMap<>();
139
140 String peerSw1Eth1 = "192.168.10.1";
141 peers.put(IpAddress.valueOf(peerSw1Eth1),
142 new BgpPeer("00:00:00:00:00:00:00:01", 1, peerSw1Eth1));
143
144 // Two BGP peers are connected to switch 2 port 1.
145 String peer1Sw2Eth1 = "192.168.20.1";
146 peers.put(IpAddress.valueOf(peer1Sw2Eth1),
147 new BgpPeer("00:00:00:00:00:00:00:02", 1, peer1Sw2Eth1));
148
149 String peer2Sw2Eth1 = "192.168.20.2";
150 peers.put(IpAddress.valueOf(peer2Sw2Eth1),
151 new BgpPeer("00:00:00:00:00:00:00:02", 1, peer2Sw2Eth1));
152
153 expect(sdnIpConfigService.getBgpPeers()).andReturn(peers).anyTimes();
154 replay(sdnIpConfigService);
155 }
156
157 /**
158 * Sets up InterfaceService.
159 */
160 private void setUpInterfaceService() {
161
162 interfaceService = createMock(InterfaceService.class);
163
164 Set<Interface> interfaces = Sets.newHashSet();
165
166 Set<InterfaceIpAddress> interfaceIpAddresses1 = Sets.newHashSet();
167 interfaceIpAddresses1.add(new InterfaceIpAddress(
168 IpAddress.valueOf("192.168.10.101"),
169 IpPrefix.valueOf("192.168.10.0/24")));
170 Interface sw1Eth1 = new Interface(SW1_ETH1,
171 interfaceIpAddresses1, MacAddress.valueOf("00:00:00:00:00:01"));
172 interfaces.add(sw1Eth1);
173
174 Set<InterfaceIpAddress> interfaceIpAddresses2 = Sets.newHashSet();
175 interfaceIpAddresses2.add(new InterfaceIpAddress(
176 IpAddress.valueOf("192.168.20.101"),
177 IpPrefix.valueOf("192.168.20.0/24")));
178 Interface sw2Eth1 = new Interface(SW2_ETH1,
179 interfaceIpAddresses2, MacAddress.valueOf("00:00:00:00:00:02"));
180 interfaces.add(sw2Eth1);
181
182 Set<InterfaceIpAddress> interfaceIpAddresses3 = Sets.newHashSet();
183 interfaceIpAddresses3.add(new InterfaceIpAddress(
184 IpAddress.valueOf("192.168.30.101"),
185 IpPrefix.valueOf("192.168.30.0/24")));
186 Interface sw3Eth1 = new Interface(SW3_ETH1,
187 interfaceIpAddresses3, MacAddress.valueOf("00:00:00:00:00:03"));
188 interfaces.add(sw3Eth1);
189
190 expect(interfaceService.getInterface(SW1_ETH1)).andReturn(sw1Eth1).anyTimes();
191 expect(interfaceService.getInterface(SW2_ETH1)).andReturn(sw2Eth1).anyTimes();
192 expect(interfaceService.getInterface(SW3_ETH1)).andReturn(sw3Eth1).anyTimes();
193 expect(interfaceService.getInterfaces()).andReturn(interfaces).anyTimes();
194 replay(interfaceService);
195 }
196
197 /**
198 * This method tests adding a route entry.
199 */
Pavlin Radoslavov97e8a8b2014-11-24 17:51:28 -0800200 @Test
Pavlin Radoslavov248c2ae2014-12-02 09:51:25 -0800201 public void testRouteAdd() throws TestUtilsException {
Pingpingfc584672014-10-23 10:51:19 -0700202
203 // Construct a route entry
204 RouteEntry routeEntry = new RouteEntry(
Pavlin Radoslavov6b570732014-11-06 13:16:45 -0800205 Ip4Prefix.valueOf("1.1.1.0/24"),
206 Ip4Address.valueOf("192.168.10.1"));
Pingpingfc584672014-10-23 10:51:19 -0700207
208 // Construct a route intent
209 MultiPointToSinglePointIntent intent = staticIntentBuilder();
210
211 // Set up test expectation
212 reset(hostService);
Pavlin Radoslavov33f228a2014-10-27 19:33:16 -0700213 expect(hostService.getHostsByIp(anyObject(IpAddress.class))).andReturn(
Pingpingfc584672014-10-23 10:51:19 -0700214 new HashSet<Host>()).anyTimes();
215 hostService.startMonitoringIp(IpAddress.valueOf("192.168.10.1"));
216 replay(hostService);
217
218 reset(intentService);
Pavlin Radoslavov248c2ae2014-12-02 09:51:25 -0800219 IntentOperations.Builder builder = IntentOperations.builder(APPID);
220 builder.addSubmitOperation(intent);
221 intentService.execute(TestIntentServiceHelper.eqExceptId(
222 builder.build()));
Pingpingfc584672014-10-23 10:51:19 -0700223 replay(intentService);
224
Pavlin Radoslavov248c2ae2014-12-02 09:51:25 -0800225 // Call the processRouteUpdates() method in Router class
Pavlin Radoslavova071b1e2014-11-17 13:37:57 -0800226 intentSynchronizer.leaderChanged(true);
227 TestUtils.setField(intentSynchronizer, "isActivatedLeader", true);
Pavlin Radoslavov248c2ae2014-12-02 09:51:25 -0800228 RouteUpdate routeUpdate = new RouteUpdate(RouteUpdate.Type.UPDATE,
229 routeEntry);
230 router.processRouteUpdates(Collections.<RouteUpdate>singletonList(routeUpdate));
Pingpingfc584672014-10-23 10:51:19 -0700231
232 Host host = new DefaultHost(ProviderId.NONE, HostId.NONE,
233 MacAddress.valueOf("00:00:00:00:00:01"), VlanId.NONE,
234 new HostLocation(
235 SW1_ETH1.deviceId(),
236 SW1_ETH1.port(), 1),
Pavlin Radoslavov33f228a2014-10-27 19:33:16 -0700237 Sets.newHashSet(IpAddress.valueOf("192.168.10.1")));
Pingpingfc584672014-10-23 10:51:19 -0700238 internalHostListener.event(
239 new HostEvent(HostEvent.Type.HOST_ADDED, host));
240
241 // Verify
242 assertEquals(router.getRoutes().size(), 1);
243 assertTrue(router.getRoutes().contains(routeEntry));
Pavlin Radoslavova7243cc2014-11-22 21:38:02 -0800244 assertEquals(intentSynchronizer.getRouteIntents().size(), 1);
Pavlin Radoslavov97e8a8b2014-11-24 17:51:28 -0800245 Intent firstIntent =
246 intentSynchronizer.getRouteIntents().iterator().next();
247 IntentKey firstIntentKey = new IntentKey(firstIntent);
248 IntentKey intentKey = new IntentKey(intent);
249 assertTrue(firstIntentKey.equals(intentKey));
Pingpingfc584672014-10-23 10:51:19 -0700250 verify(intentService);
251 verify(hostService);
252
253 }
254
255 /**
256 * This method tests updating a route entry.
257 *
258 * @throws TestUtilsException
259 */
Pavlin Radoslavov97e8a8b2014-11-24 17:51:28 -0800260 @Test
Pingpingfc584672014-10-23 10:51:19 -0700261 public void testRouteUpdate() throws TestUtilsException {
262
263 // Construct the existing route entry
264 RouteEntry routeEntry = new RouteEntry(
Pavlin Radoslavov6b570732014-11-06 13:16:45 -0800265 Ip4Prefix.valueOf("1.1.1.0/24"),
266 Ip4Address.valueOf("192.168.10.1"));
Pingpingfc584672014-10-23 10:51:19 -0700267
268 // Construct the existing MultiPointToSinglePointIntent intent
269 MultiPointToSinglePointIntent intent = staticIntentBuilder();
270
271 // Set up the bgpRoutes field of Router class with existing route, and
Pavlin Radoslavova7243cc2014-11-22 21:38:02 -0800272 // routeIntents field with the corresponding existing intent
Pingpingfc584672014-10-23 10:51:19 -0700273 setBgpRoutesField(routeEntry);
Pavlin Radoslavova7243cc2014-11-22 21:38:02 -0800274 setRouteIntentsField(routeEntry, intent);
Pingpingfc584672014-10-23 10:51:19 -0700275
276 // Start to construct a new route entry and new intent
277 RouteEntry routeEntryUpdate = new RouteEntry(
Pavlin Radoslavov6b570732014-11-06 13:16:45 -0800278 Ip4Prefix.valueOf("1.1.1.0/24"),
279 Ip4Address.valueOf("192.168.20.1"));
Pingpingfc584672014-10-23 10:51:19 -0700280
281 // Construct a new MultiPointToSinglePointIntent intent
282 TrafficSelector.Builder selectorBuilderNew =
283 DefaultTrafficSelector.builder();
284 selectorBuilderNew.matchEthType(Ethernet.TYPE_IPV4).matchIPDst(
285 routeEntryUpdate.prefix());
286
287 TrafficTreatment.Builder treatmentBuilderNew =
288 DefaultTrafficTreatment.builder();
289 treatmentBuilderNew.setEthDst(MacAddress.valueOf("00:00:00:00:00:02"));
290
291 Set<ConnectPoint> ingressPointsNew = new HashSet<ConnectPoint>();
292 ingressPointsNew.add(SW1_ETH1);
293 ingressPointsNew.add(SW3_ETH1);
294
295 MultiPointToSinglePointIntent intentNew =
296 new MultiPointToSinglePointIntent(APPID,
297 selectorBuilderNew.build(),
298 treatmentBuilderNew.build(),
299 ingressPointsNew, SW2_ETH1);
300
301 // Set up test expectation
302 reset(hostService);
Pavlin Radoslavov33f228a2014-10-27 19:33:16 -0700303 expect(hostService.getHostsByIp(anyObject(IpAddress.class))).andReturn(
Pingpingfc584672014-10-23 10:51:19 -0700304 new HashSet<Host>()).anyTimes();
305 hostService.startMonitoringIp(IpAddress.valueOf("192.168.20.1"));
306 replay(hostService);
307
308 reset(intentService);
Pavlin Radoslavov248c2ae2014-12-02 09:51:25 -0800309 IntentOperations.Builder builder = IntentOperations.builder(APPID);
310 builder.addWithdrawOperation(intent.id());
311 intentService.execute(TestIntentServiceHelper.eqExceptId(
312 builder.build()));
313 builder = IntentOperations.builder(APPID);
314 builder.addSubmitOperation(intentNew);
315 intentService.execute(TestIntentServiceHelper.eqExceptId(
316 builder.build()));
Pingpingfc584672014-10-23 10:51:19 -0700317 replay(intentService);
318
Pavlin Radoslavov248c2ae2014-12-02 09:51:25 -0800319 // Call the processRouteUpdates() method in Router class
Pavlin Radoslavova071b1e2014-11-17 13:37:57 -0800320 intentSynchronizer.leaderChanged(true);
321 TestUtils.setField(intentSynchronizer, "isActivatedLeader", true);
Pavlin Radoslavov248c2ae2014-12-02 09:51:25 -0800322 RouteUpdate routeUpdate = new RouteUpdate(RouteUpdate.Type.UPDATE,
323 routeEntryUpdate);
324 router.processRouteUpdates(Collections.<RouteUpdate>singletonList(routeUpdate));
Pingpingfc584672014-10-23 10:51:19 -0700325
326 Host host = new DefaultHost(ProviderId.NONE, HostId.NONE,
327 MacAddress.valueOf("00:00:00:00:00:02"), VlanId.NONE,
328 new HostLocation(
329 SW2_ETH1.deviceId(),
330 SW2_ETH1.port(), 1),
Pavlin Radoslavov33f228a2014-10-27 19:33:16 -0700331 Sets.newHashSet(IpAddress.valueOf("192.168.20.1")));
Pingpingfc584672014-10-23 10:51:19 -0700332 internalHostListener.event(
333 new HostEvent(HostEvent.Type.HOST_ADDED, host));
334
335 // Verify
336 assertEquals(router.getRoutes().size(), 1);
337 assertTrue(router.getRoutes().contains(routeEntryUpdate));
Pavlin Radoslavova7243cc2014-11-22 21:38:02 -0800338 assertEquals(intentSynchronizer.getRouteIntents().size(), 1);
Pavlin Radoslavov97e8a8b2014-11-24 17:51:28 -0800339 Intent firstIntent =
340 intentSynchronizer.getRouteIntents().iterator().next();
341 IntentKey firstIntentKey = new IntentKey(firstIntent);
342 IntentKey intentNewKey = new IntentKey(intentNew);
343 assertTrue(firstIntentKey.equals(intentNewKey));
Pingpingfc584672014-10-23 10:51:19 -0700344 verify(intentService);
345 verify(hostService);
346 }
347
348 /**
349 * This method tests deleting a route entry.
350 */
351 @Test
Pavlin Radoslavov248c2ae2014-12-02 09:51:25 -0800352 public void testRouteDelete() throws TestUtilsException {
Pingpingfc584672014-10-23 10:51:19 -0700353
354 // Construct the existing route entry
355 RouteEntry routeEntry = new RouteEntry(
Pavlin Radoslavov6b570732014-11-06 13:16:45 -0800356 Ip4Prefix.valueOf("1.1.1.0/24"),
357 Ip4Address.valueOf("192.168.10.1"));
Pingpingfc584672014-10-23 10:51:19 -0700358
359 // Construct the existing MultiPointToSinglePointIntent intent
360 MultiPointToSinglePointIntent intent = staticIntentBuilder();
361
362 // Set up the bgpRoutes field of Router class with existing route, and
Pavlin Radoslavova7243cc2014-11-22 21:38:02 -0800363 // routeIntents field with the corresponding existing intent
Pingpingfc584672014-10-23 10:51:19 -0700364 setBgpRoutesField(routeEntry);
Pavlin Radoslavova7243cc2014-11-22 21:38:02 -0800365 setRouteIntentsField(routeEntry, intent);
Pingpingfc584672014-10-23 10:51:19 -0700366
367 // Set up expectation
368 reset(intentService);
Pavlin Radoslavov248c2ae2014-12-02 09:51:25 -0800369 IntentOperations.Builder builder = IntentOperations.builder(APPID);
370 builder.addWithdrawOperation(intent.id());
371 intentService.execute(TestIntentServiceHelper.eqExceptId(
372 builder.build()));
Pingpingfc584672014-10-23 10:51:19 -0700373 replay(intentService);
374
Pavlin Radoslavov248c2ae2014-12-02 09:51:25 -0800375 // Call the processRouteUpdates() method in Router class
Pavlin Radoslavova071b1e2014-11-17 13:37:57 -0800376 intentSynchronizer.leaderChanged(true);
377 TestUtils.setField(intentSynchronizer, "isActivatedLeader", true);
Pavlin Radoslavov248c2ae2014-12-02 09:51:25 -0800378 RouteUpdate routeUpdate = new RouteUpdate(RouteUpdate.Type.DELETE,
379 routeEntry);
380 router.processRouteUpdates(Collections.<RouteUpdate>singletonList(routeUpdate));
Pingpingfc584672014-10-23 10:51:19 -0700381
382 // Verify
383 assertEquals(router.getRoutes().size(), 0);
Pavlin Radoslavova7243cc2014-11-22 21:38:02 -0800384 assertEquals(intentSynchronizer.getRouteIntents().size(), 0);
Pingpingfc584672014-10-23 10:51:19 -0700385 verify(intentService);
386 }
387
388 /**
389 * Constructs a static MultiPointToSinglePointIntent.
390 */
391 private MultiPointToSinglePointIntent staticIntentBuilder() {
392
393 TrafficSelector.Builder selectorBuilder =
394 DefaultTrafficSelector.builder();
395 selectorBuilder.matchEthType(Ethernet.TYPE_IPV4).matchIPDst(
396 IpPrefix.valueOf("1.1.1.0/24"));
397
398 TrafficTreatment.Builder treatmentBuilder =
399 DefaultTrafficTreatment.builder();
400 treatmentBuilder.setEthDst(MacAddress.valueOf("00:00:00:00:00:01"));
401
402 Set<ConnectPoint> ingressPoints = new HashSet<ConnectPoint>();
403 ingressPoints.add(SW2_ETH1);
404 ingressPoints.add(SW3_ETH1);
405
406 MultiPointToSinglePointIntent intent =
407 new MultiPointToSinglePointIntent(APPID,
408 selectorBuilder.build(), treatmentBuilder.build(),
409 ingressPoints, SW1_ETH1);
410
411 return intent;
412 }
413
414 /**
415 * Sets bgpRoutesField in Router class.
416 *
417 * @throws TestUtilsException
418 */
419 private void setBgpRoutesField(RouteEntry routeEntry)
420 throws TestUtilsException {
421
422 InvertedRadixTree<RouteEntry> bgpRoutes =
423 new ConcurrentInvertedRadixTree<>(
424 new DefaultByteArrayNodeFactory());
425 bgpRoutes.put(RouteEntry.createBinaryString(routeEntry.prefix()),
426 routeEntry);
427 TestUtils.setField(router, "bgpRoutes", bgpRoutes);
428 }
429
430 /**
Pavlin Radoslavova7243cc2014-11-22 21:38:02 -0800431 * Sets routeIntentsField in IntentSynchronizer class.
Pingpingfc584672014-10-23 10:51:19 -0700432 *
433 * @throws TestUtilsException
434 */
Pavlin Radoslavova7243cc2014-11-22 21:38:02 -0800435 private void setRouteIntentsField(RouteEntry routeEntry,
Pingpingfc584672014-10-23 10:51:19 -0700436 MultiPointToSinglePointIntent intent)
437 throws TestUtilsException {
438
Pavlin Radoslavov6b570732014-11-06 13:16:45 -0800439 ConcurrentHashMap<Ip4Prefix, MultiPointToSinglePointIntent>
Pavlin Radoslavova7243cc2014-11-22 21:38:02 -0800440 routeIntents = new ConcurrentHashMap<>();
441 routeIntents.put(routeEntry.prefix(), intent);
442 TestUtils.setField(intentSynchronizer, "routeIntents", routeIntents);
Pingpingfc584672014-10-23 10:51:19 -0700443 }
Brian O'Connorabafb502014-12-02 22:26:20 -0800444}