@Test public void testOutPortIds() { Condition cond = new Condition(); UUID inPort = new UUID(rand.nextLong(), rand.nextLong()); UUID outPort = new UUID(rand.nextLong(), rand.nextLong()); pktCtx.inPortId_$eq(inPort); cond.outPortIds = new HashSet<>(); cond.outPortIds.add(new UUID(rand.nextLong(), rand.nextLong())); cond.outPortIds.add(new UUID(rand.nextLong(), rand.nextLong())); // The condition should not match the packet. Assert.assertFalse(cond.matches(pktCtx)); Assert.assertFalse(cond.matches(pktCtx)); pktCtx.outPortId_$eq(outPort); Assert.assertFalse(cond.matches(pktCtx)); Assert.assertFalse(cond.matches(pktCtx)); // Verify that outPortInv causes a match. cond.outPortInv = true; Assert.assertTrue(cond.matches(pktCtx)); Assert.assertTrue(cond.matches(pktCtx)); pktCtx.outPortId_$eq(null); Assert.assertTrue(cond.matches(pktCtx)); Assert.assertTrue(cond.matches(pktCtx)); // Now add outPort to the condition - it stops matching due to invert // on forwarding elements, but stays the same on port filters. cond.outPortIds.add(outPort); pktCtx.outPortId_$eq(outPort); Assert.assertFalse(cond.matches(pktCtx)); cond.outPortInv = false; Assert.assertTrue(cond.matches(pktCtx)); }