[AETHER-998] FabricPipeliner should support L2 modification of the NextObjective

This patch allows:
- to MODIFY completely the L3 unicast chain
- to MODIFY the L2 configuration of a port

Moreover, it includes support for metadata signaling:
- to not remove the fwd classifier rules during the port
  update scenarios (dynamic config changes)
- add new unit tests for verifying the scenario

Change-Id: I54168653a730573ec0650f25ec670c36282b0419
diff --git a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricTreatmentInterpreter.java b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricTreatmentInterpreter.java
index 2da557a..de3ecbf 100644
--- a/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricTreatmentInterpreter.java
+++ b/pipelines/fabric/impl/src/main/java/org/onosproject/pipelines/fabric/impl/behaviour/FabricTreatmentInterpreter.java
@@ -241,8 +241,12 @@
     }
 
     private static boolean isNoAction(TrafficTreatment treatment) {
+        // Empty treatment OR
+        // No instructions OR
+        // Empty treatment AND writeMetadata
         return treatment.equals(DefaultTrafficTreatment.emptyTreatment()) ||
-                treatment.allInstructions().isEmpty();
+                treatment.allInstructions().isEmpty() ||
+                (treatment.allInstructions().size() == 1 && treatment.writeMetadata() != null);
     }
 
     private static boolean isFilteringPopAction(TrafficTreatment treatment) {