Correctly initialize routes with multiple next hops
- Solve an issue where next hops are available on both leaf switch but one still pointing to its pair through the spines
- Improve unit tests
Change-Id: I94fe79bd9289efe544d82b858928d65201a0b0b2
diff --git a/app/src/test/java/org/onosproject/segmentrouting/RouteHandlerTest.java b/app/src/test/java/org/onosproject/segmentrouting/RouteHandlerTest.java
index ef4c2aa..bdf056e 100644
--- a/app/src/test/java/org/onosproject/segmentrouting/RouteHandlerTest.java
+++ b/app/src/test/java/org/onosproject/segmentrouting/RouteHandlerTest.java
@@ -75,6 +75,7 @@
private static final Map<ConnectPoint, Set<IpPrefix>> SUBNET_TABLE = Maps.newConcurrentMap();
// Mocked Next Id
private static final Map<Integer, TrafficTreatment> NEXT_TABLE = Maps.newConcurrentMap();
+ private static final Map<IpPrefix, Set<ResolvedRoute>> ROUTE_STORE = Maps.newConcurrentMap();
private static final IpPrefix P1 = IpPrefix.valueOf("10.0.0.0/24");
@@ -167,7 +168,7 @@
hostService = new MockHostService(HOSTS);
srManager.hostService = hostService;
srManager.cfgService = mockNetworkConfigRegistry;
- srManager.routeService = new MockRouteService(ROUTING_TABLE);
+ srManager.routeService = new MockRouteService(ROUTE_STORE);
routeHandler = new RouteHandler(srManager) {
// routeEventCache is not necessary for unit tests
@@ -184,9 +185,7 @@
@Test
public void init() {
- MockRoutingTableKey rtk = new MockRoutingTableKey(CP1.deviceId(), P1);
- MockRoutingTableValue rtv = new MockRoutingTableValue(CP1.port(), M1, V1);
- ROUTING_TABLE.put(rtk, rtv);
+ ROUTE_STORE.put(P1, Sets.newHashSet(RR1));
routeHandler.init(CP1.deviceId());
@@ -201,6 +200,27 @@
}
@Test
+ public void initTwoNextHops() {
+ ROUTE_STORE.put(P1, Sets.newHashSet(RR1, RR2));
+
+ routeHandler.init(CP1.deviceId());
+
+ assertEquals(2, ROUTING_TABLE.size());
+ MockRoutingTableValue rtv1 = ROUTING_TABLE.get(new MockRoutingTableKey(CP1.deviceId(), P1));
+ assertEquals(M1, rtv1.macAddress);
+ assertEquals(V1, rtv1.vlanId);
+ assertEquals(CP1.port(), rtv1.portNumber);
+ MockRoutingTableValue rtv2 = ROUTING_TABLE.get(new MockRoutingTableKey(CP2.deviceId(), P1));
+ assertEquals(M2, rtv2.macAddress);
+ assertEquals(V2, rtv2.vlanId);
+ assertEquals(CP2.port(), rtv2.portNumber);
+
+ assertEquals(2, SUBNET_TABLE.size());
+ assertTrue(SUBNET_TABLE.get(CP1).contains(P1));
+ assertTrue(SUBNET_TABLE.get(CP2).contains(P1));
+ }
+
+ @Test
public void processRouteAdded() {
reset(srManager.deviceConfiguration);
srManager.deviceConfiguration.addSubnet(CP1, P1);
@@ -390,6 +410,8 @@
public void testDualHomedSingleLocationFail() {
testOneDualHomedAdded();
+ ROUTE_STORE.put(P1, Sets.newHashSet(RR3));
+
HostEvent he = new HostEvent(HostEvent.Type.HOST_MOVED, H3S, H3D);
routeHandler.processHostMovedEvent(he);