@Override
    public void removeFlowRules(FlowRule... flowRules) {
        FlowRuleOperations.Builder builder = FlowRuleOperations.builder();
        for (FlowRule flowRule : flowRules) {
            builder.remove(flowRule);
        }
        apply(builder.build());
    }
@Test
    public void removeFlowRules() {
        FlowRule f1 = addFlowRule(1);
        FlowRule f2 = addFlowRule(2);
        FlowRule f3 = addFlowRule(3);
        assertEquals("3 rules should exist", 3, flowCount(vnetFlowRuleService1));

        FlowEntry fe1 = new DefaultFlowEntry(f1);
        FlowEntry fe2 = new DefaultFlowEntry(f2);
        FlowEntry fe3 = new DefaultFlowEntry(f3);
        providerService1.pushFlowMetrics(VDID1, ImmutableList.of(fe1, fe2, fe3));
        validateEvents(listener1, RULE_ADD_REQUESTED, RULE_ADD_REQUESTED, RULE_ADD_REQUESTED,
                       RULE_ADDED, RULE_ADDED, RULE_ADDED);

        vnetFlowRuleService1.removeFlowRules(f1, f2);
        //removing from north, so no events generated
        validateEvents(listener1, RULE_REMOVE_REQUESTED, RULE_REMOVE_REQUESTED);
        assertEquals("3 rule should exist", 3, flowCount(vnetFlowRuleService1));
        assertTrue("Entries should be pending remove.",
                   validateState(ImmutableMap.of(
                           f1, FlowEntry.FlowEntryState.PENDING_REMOVE,
                           f2, FlowEntry.FlowEntryState.PENDING_REMOVE,
                           f3, FlowEntry.FlowEntryState.ADDED)));

        vnetFlowRuleService1.removeFlowRules(f1);
        assertEquals("3 rule should still exist", 3, flowCount(vnetFlowRuleService1));
    }