@Override
    public void forward(ForwardingObjective fwd) {
        Collection<FlowRule> rules = processForward(fwd);
        if (rules == null || rules.isEmpty()) {
            // Assumes fail message has already been generated to the objective
            // context. Returning here prevents spurious pass message to be
            // generated by FlowRule service for empty flowOps.
            return;
        }
        // Let's accumulate flow rules if accumulator is active and fwd objective is not versatile.
        // Otherwise send directly, without adding futher delay
        if (accumulator != null && Objects.equals(fwd.flag(), SPECIFIC)) {
            accumulator.add(Pair.of(fwd, rules));
        } else {
            sendForwards(Collections.singletonList(Pair.of(fwd, rules)));
        }
    }
@Test
    public void verifyAccumulation() {
        // Versatile are not accumulated
        ofdpa2Pipeline.forward(versatileFwd);
        assertAfter(WAIT_TIME, WAIT_TIME * 2, () -> assertEquals(1, testFlowRuleService.fops.size()));
        // Specific are delayed for MAX_IDLE
        ofdpa2Pipeline.forward(specificFwd);
        assertAfter(WAIT_TIME, WAIT_TIME * 2, () -> assertEquals(1, testFlowRuleService.fops.size()));
        assertAfter(WAIT_TIME,  MAX_IDLE + WAIT_TIME, () -> assertEquals(2, testFlowRuleService.fops.size()));
    }