@Test public void testGetForwardingActionSilentHost() throws Exception { expect(vRtrManager.findSubnetOwner(EasyMock.anyObject(IPV4Subnet.class))) .andReturn("t2|r2") .times(2); expect(vRtrManager.findSubnetOwner(EasyMock.anyObject(IPV4Subnet.class))) .andReturn(null) .once(); vRtrManager.addSubnetOwner( EasyMock.anyObject(IPV4Subnet.class), EasyMock.anyObject(String.class)); expectLastCall().times(3); vRtrManager.addIfaceIpMap(EasyMock.anyInt(), EasyMock.anyObject(VRouterInterface.class)); expectLastCall().anyTimes(); replay(vRtrManager); vr.createInterface("if1", "t1|netVirt1", null, true); vr.createInterface("if2", "t1|netVirt2", null, true); vr.createInterface("ifs", null, "system|rs", true); vr.assignInterfaceAddr("if1", "10.1.1.1", "0.0.0.255"); vr.assignInterfaceAddr("if2", "10.1.2.1", "0.0.0.255"); VRouterImpl vr2 = new VRouterImpl("r2", "t2", vMac1, vRtrManager); vr2.createInterface("if1", "t2|netVirt1", null, true); vr2.createInterface("if2", "t2|netVirt2", null, true); vr2.createInterface("ifs", null, "system|rs", true); vr2.assignInterfaceAddr("if1", "10.2.1.1", "0.0.0.255"); /* External tenant router */ VRouterImpl vrx = new VRouterImpl("rx", "tx", vMac1, vRtrManager); vrx.createInterface("if1", "tx|netVirtx", null, true); vrx.createInterface("ifs", null, "system|rs", true); /* System Router */ VRouterImpl vrs = new VRouterImpl("rs", "system", vMac1, vRtrManager); vrs.createInterface("if1", null, "t1|r1", true); vrs.createInterface("if2", null, "t2|r2", true); vrs.createInterface("ifx", null, "tx|rx", true); VNS netVirtA1 = new VNS("t1|netVirt1"); int ip1, ip2, ip3; ip1 = IPv4.toIPv4Address("10.1.1.2"); ip2 = IPv4.toIPv4Address("10.1.2.2"); ip3 = IPv4.toIPv4Address("10.2.1.2"); ForwardingAction action; /* Allow host 10.1.1.2 to talk to all other hosts */ vr.addRoutingRule( null, null, "10.1.1.2", "0.0.0.0", null, null, "255.255.255.255", "255.255.255.255", null, null, "permit"); /* Testing for a silent host. The dest device entity is null */ action = vr.getForwardingAction("t1|netVirt1", netVirtA1, ip1, null, ip2); assertEquals(RoutingAction.FORWARD, action.getAction()); assertEquals(null, action.getNextRtrName()); assertEquals(ip2, action.getNextHopIp()); assertEquals("t1|netVirt2", action.getDstNetVirtName()); assertEquals(vMac1.longValue(), action.getNewSrcMac()); assertEquals(null, action.getNextHopGatewayPool()); assertEquals(null, action.getNextHopGatewayPoolRouter()); action = vr.getForwardingAction("t1|netVirt1", netVirtA1, ip1, null, ip3); assertEquals(RoutingAction.FORWARD, action.getAction()); assertEquals("system|rs", action.getNextRtrName()); assertEquals(ip3, action.getNextHopIp()); assertEquals(null, action.getDstNetVirtName()); assertEquals(0, action.getNewSrcMac()); assertEquals(null, action.getNextHopGatewayPool()); assertEquals(null, action.getNextHopGatewayPoolRouter()); /* Allow all hosts in NetVirtA1 subnet to talk to any other hosts */ vrs.addRoutingRule( null, null, "10.1.1.0", "0.0.0.255", null, null, "0.0.0.0", "255.255.255.255", null, null, "permit"); action = vrs.getForwardingAction("t1|r1", netVirtA1, ip1, null, ip3); assertEquals(RoutingAction.FORWARD, action.getAction()); assertEquals("t2|r2", action.getNextRtrName()); assertEquals(ip3, action.getNextHopIp()); assertEquals(null, action.getDstNetVirtName()); assertEquals(0, action.getNewSrcMac()); assertEquals(null, action.getNextHopGatewayPool()); assertEquals(null, action.getNextHopGatewayPoolRouter()); /* Send a packet to an unknown subnet and see that it is dropped * Note that we have set the vRtrManager object to return null for the * call to findSubnetOwner after the second time. */ ip3 = IPv4.toIPv4Address("192.168.0.1"); action = vrs.getForwardingAction("t1|r1", netVirtA1, ip1, null, ip3); assertEquals(RoutingAction.DROP, action.getAction()); verify(vRtrManager); }