Refactor nsh fields to new encoding
[openflowplugin.git] / extension / openflowjava-extension-nicira / src / test / java / org / opendaylight / openflowjava / nx / NiciraExtensionsRegistratorTest.java
index ea35367e31941fb39c8f376e4db21cc302837d54..a04124cc9614877812e095618311ea7bf4c4d0bb 100644 (file)
@@ -16,14 +16,17 @@ import org.mockito.Mockito;
 import org.mockito.runners.MockitoJUnitRunner;
 import org.opendaylight.openflowjava.nx.api.NiciraActionDeserializerKey;
 import org.opendaylight.openflowjava.nx.api.NiciraActionSerializerKey;
+import org.opendaylight.openflowjava.nx.api.NiciraConstants;
 import org.opendaylight.openflowjava.nx.api.NiciraExtensionCodecRegistrator;
 import org.opendaylight.openflowjava.nx.codec.action.DecNshTtlCodec;
 import org.opendaylight.openflowjava.nx.codec.action.DecapCodec;
 import org.opendaylight.openflowjava.nx.codec.action.EncapCodec;
 import org.opendaylight.openflowjava.nx.codec.action.MultipathCodec;
+import org.opendaylight.openflowjava.nx.codec.action.OutputReg2Codec;
 import org.opendaylight.openflowjava.nx.codec.action.OutputRegCodec;
 import org.opendaylight.openflowjava.nx.codec.action.PopNshCodec;
 import org.opendaylight.openflowjava.nx.codec.action.PushNshCodec;
+import org.opendaylight.openflowjava.nx.codec.action.RegLoad2Codec;
 import org.opendaylight.openflowjava.nx.codec.action.RegLoadCodec;
 import org.opendaylight.openflowjava.nx.codec.action.RegMoveCodec;
 import org.opendaylight.openflowjava.nx.codec.action.ResubmitCodec;
@@ -40,6 +43,10 @@ import org.opendaylight.openflowjava.nx.codec.match.CtZoneCodec;
 import org.opendaylight.openflowjava.nx.codec.match.EthDstCodec;
 import org.opendaylight.openflowjava.nx.codec.match.EthSrcCodec;
 import org.opendaylight.openflowjava.nx.codec.match.EthTypeCodec;
+import org.opendaylight.openflowjava.nx.codec.match.NshFlagsCodec;
+import org.opendaylight.openflowjava.nx.codec.match.NshMdtypeCodec;
+import org.opendaylight.openflowjava.nx.codec.match.NshNpCodec;
+import org.opendaylight.openflowjava.nx.codec.match.NshTtlCodec;
 import org.opendaylight.openflowjava.nx.codec.match.Nshc1Codec;
 import org.opendaylight.openflowjava.nx.codec.match.Nshc2Codec;
 import org.opendaylight.openflowjava.nx.codec.match.Nshc3Codec;
@@ -66,6 +73,7 @@ import org.opendaylight.openflowjava.protocol.api.keys.MatchEntryDeserializerKey
 import org.opendaylight.openflowjava.protocol.api.keys.MatchEntrySerializerKey;
 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
 import org.opendaylight.openflowjava.protocol.api.util.OxmMatchConstants;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ExperimenterClass;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Nxm0Class;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Nxm1Class;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.action.container.action.choice.ActionConntrack;
@@ -74,9 +82,11 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev1
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.action.container.action.choice.ActionEncap;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.action.container.action.choice.ActionMultipath;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.action.container.action.choice.ActionOutputReg;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.action.container.action.choice.ActionOutputReg2;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.action.container.action.choice.ActionPopNsh;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.action.container.action.choice.ActionPushNsh;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.action.container.action.choice.ActionRegLoad;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.action.container.action.choice.ActionRegLoad2;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.action.container.action.choice.ActionRegMove;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.action.container.action.choice.ActionResubmit;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxArpSha;
@@ -86,6 +96,10 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev14
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxCtTpDst;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxCtTpSrc;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxCtZone;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxNshFlags;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxNshMdtype;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxNshNp;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxNshTtl;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxNshc1;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxNshc2;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxNshc3;
@@ -136,6 +150,12 @@ public class NiciraExtensionsRegistratorTest {
         Mockito.verify(registrator).registerActionSerializer(
                 Matchers.eq(new NiciraActionSerializerKey(EncodeConstants.OF13_VERSION_ID, ActionRegLoad.class)),
                 Matchers.any(RegLoadCodec.class));
+        Mockito.verify(registrator).registerActionDeserializer(
+                Matchers.eq(new NiciraActionDeserializerKey(EncodeConstants.OF13_VERSION_ID, 33)),
+                Matchers.any(RegLoad2Codec.class));
+        Mockito.verify(registrator).registerActionSerializer(
+                Matchers.eq(new NiciraActionSerializerKey(EncodeConstants.OF13_VERSION_ID, ActionRegLoad2.class)),
+                Matchers.any(RegLoad2Codec.class));
         Mockito.verify(registrator).registerActionDeserializer(
                 Matchers.eq(new NiciraActionDeserializerKey(EncodeConstants.OF13_VERSION_ID, 6)),
                 Matchers.any(RegMoveCodec.class));
@@ -148,6 +168,12 @@ public class NiciraExtensionsRegistratorTest {
         Mockito.verify(registrator).registerActionSerializer(
                 Matchers.eq(new NiciraActionSerializerKey(EncodeConstants.OF13_VERSION_ID, ActionOutputReg.class)),
                 Matchers.any(OutputRegCodec.class));
+        Mockito.verify(registrator).registerActionDeserializer(
+                Matchers.eq(new NiciraActionDeserializerKey(EncodeConstants.OF13_VERSION_ID, 32)),
+                Matchers.any(OutputReg2Codec.class));
+        Mockito.verify(registrator).registerActionSerializer(
+                Matchers.eq(new NiciraActionSerializerKey(EncodeConstants.OF13_VERSION_ID, ActionOutputReg2.class)),
+                Matchers.any(OutputReg2Codec.class));
         Mockito.verify(registrator).registerActionSerializer(
                 Matchers.eq(new NiciraActionSerializerKey(EncodeConstants.OF13_VERSION_ID, ActionResubmit.class)),
                 Matchers.any(ResubmitCodec.class));
@@ -289,42 +315,6 @@ public class NiciraExtensionsRegistratorTest {
         Mockito.verify(registrator).registerMatchEntryDeserializer(Matchers
                 .eq(new MatchEntryDeserializerKey(EncodeConstants.OF13_VERSION_ID, OxmMatchConstants.NXM_0_CLASS, 3)),
                 Matchers.any(EthTypeCodec.class));
-        Mockito.verify(registrator).registerMatchEntrySerializer(Matchers
-                .eq(new MatchEntrySerializerKey<>(EncodeConstants.OF13_VERSION_ID, Nxm1Class.class, NxmNxNsp.class)),
-                Matchers.any(NspCodec.class));
-        Mockito.verify(registrator).registerMatchEntryDeserializer(Matchers
-                .eq(new MatchEntryDeserializerKey(EncodeConstants.OF13_VERSION_ID, OxmMatchConstants.NXM_1_CLASS, 113)),
-                Matchers.any(NspCodec.class));
-        Mockito.verify(registrator).registerMatchEntrySerializer(Matchers
-                .eq(new MatchEntrySerializerKey<>(EncodeConstants.OF13_VERSION_ID, Nxm1Class.class, NxmNxNshc1.class)),
-                Matchers.any(Nshc1Codec.class));
-        Mockito.verify(registrator).registerMatchEntryDeserializer(Matchers
-                .eq(new MatchEntryDeserializerKey(EncodeConstants.OF13_VERSION_ID, OxmMatchConstants.NXM_1_CLASS, 115)),
-                Matchers.any(Nshc1Codec.class));
-        Mockito.verify(registrator).registerMatchEntrySerializer(Matchers
-                .eq(new MatchEntrySerializerKey<>(EncodeConstants.OF13_VERSION_ID, Nxm1Class.class, NxmNxNshc2.class)),
-                Matchers.any(Nshc2Codec.class));
-        Mockito.verify(registrator).registerMatchEntryDeserializer(Matchers
-                .eq(new MatchEntryDeserializerKey(EncodeConstants.OF13_VERSION_ID, OxmMatchConstants.NXM_1_CLASS, 116)),
-                Matchers.any(Nshc2Codec.class));
-        Mockito.verify(registrator).registerMatchEntrySerializer(Matchers
-                .eq(new MatchEntrySerializerKey<>(EncodeConstants.OF13_VERSION_ID, Nxm1Class.class, NxmNxNshc3.class)),
-                Matchers.any(Nshc3Codec.class));
-        Mockito.verify(registrator).registerMatchEntryDeserializer(Matchers
-                .eq(new MatchEntryDeserializerKey(EncodeConstants.OF13_VERSION_ID, OxmMatchConstants.NXM_1_CLASS, 117)),
-                Matchers.any(Nshc3Codec.class));
-        Mockito.verify(registrator).registerMatchEntrySerializer(Matchers
-                .eq(new MatchEntrySerializerKey<>(EncodeConstants.OF13_VERSION_ID, Nxm1Class.class, NxmNxNshc4.class)),
-                Matchers.any(Nshc4Codec.class));
-        Mockito.verify(registrator).registerMatchEntryDeserializer(Matchers
-                .eq(new MatchEntryDeserializerKey(EncodeConstants.OF13_VERSION_ID, OxmMatchConstants.NXM_1_CLASS, 118)),
-                Matchers.any(Nshc4Codec.class));
-        Mockito.verify(registrator).registerMatchEntrySerializer(Matchers
-                .eq(new MatchEntrySerializerKey<>(EncodeConstants.OF13_VERSION_ID, Nxm1Class.class, NxmNxNsi.class)),
-                Matchers.any(NsiCodec.class));
-        Mockito.verify(registrator).registerMatchEntryDeserializer(Matchers
-                .eq(new MatchEntryDeserializerKey(EncodeConstants.OF13_VERSION_ID, OxmMatchConstants.NXM_1_CLASS, 114)),
-                Matchers.any(NsiCodec.class));
         Mockito.verify(registrator).registerMatchEntrySerializer(Matchers.eq(
                 new MatchEntrySerializerKey<>(EncodeConstants.OF13_VERSION_ID, Nxm1Class.class, NxmNxTunIpv4Dst.class)),
                 Matchers.any(TunIpv4DstCodec.class));
@@ -403,6 +393,168 @@ public class NiciraExtensionsRegistratorTest {
         Mockito.verify(registrator).registerActionSerializer(
                 Matchers.eq(new NiciraActionSerializerKey(EncodeConstants.OF13_VERSION_ID, ActionDecNshTtl.class)),
                 Matchers.any(DecNshTtlCodec.class));
+
+        // experimenters
+        MatchEntrySerializerKey<ExperimenterClass, NxmNxNshFlags> nshFlagsSerializerKey = new MatchEntrySerializerKey<>(
+                EncodeConstants.OF13_VERSION_ID,
+                ExperimenterClass.class,
+                NxmNxNshFlags.class);
+        nshFlagsSerializerKey.setExperimenterId(NiciraConstants.NX_NSH_VENDOR_ID);
+        Mockito.verify(registrator).registerMatchEntrySerializer(
+                Matchers.eq(nshFlagsSerializerKey),
+                Matchers.any(NshFlagsCodec.class));
+        MatchEntryDeserializerKey nshFlagsDeserializerKey = new MatchEntryDeserializerKey(
+                EncodeConstants.OF13_VERSION_ID,
+                OxmMatchConstants.EXPERIMENTER_CLASS,
+                1);
+        nshFlagsDeserializerKey.setExperimenterId(NiciraConstants.NX_NSH_VENDOR_ID);
+        Mockito.verify(registrator).registerMatchEntryDeserializer(
+                Matchers.eq(nshFlagsDeserializerKey),
+                Matchers.any(NshFlagsCodec.class));
+        MatchEntrySerializerKey<ExperimenterClass, NxmNxNshMdtype> mdtypeSerializerKey = new MatchEntrySerializerKey<>(
+                EncodeConstants.OF13_VERSION_ID,
+                ExperimenterClass.class,
+                NxmNxNshMdtype.class);
+        mdtypeSerializerKey.setExperimenterId(NiciraConstants.NX_NSH_VENDOR_ID);
+        Mockito.verify(registrator).registerMatchEntrySerializer(
+                Matchers.eq(mdtypeSerializerKey),
+                Matchers.any(NshMdtypeCodec.class));
+        MatchEntryDeserializerKey mdtypeDeserializerKey = new MatchEntryDeserializerKey(
+                EncodeConstants.OF13_VERSION_ID,
+                OxmMatchConstants.EXPERIMENTER_CLASS,
+                2);
+        mdtypeDeserializerKey.setExperimenterId(NiciraConstants.NX_NSH_VENDOR_ID);
+        Mockito.verify(registrator).registerMatchEntryDeserializer(
+                Matchers.eq(mdtypeDeserializerKey),
+                Matchers.any(NshMdtypeCodec.class));
+        MatchEntrySerializerKey<ExperimenterClass, NxmNxNshNp> nshNpSerializerKey = new MatchEntrySerializerKey<>(
+                EncodeConstants.OF13_VERSION_ID,
+                ExperimenterClass.class,
+                NxmNxNshNp.class);
+        nshNpSerializerKey.setExperimenterId(NiciraConstants.NX_NSH_VENDOR_ID);
+        Mockito.verify(registrator).registerMatchEntrySerializer(
+                Matchers.eq(nshNpSerializerKey),
+                Matchers.any(NshNpCodec.class));
+        MatchEntryDeserializerKey nshNpDeserializerKey = new MatchEntryDeserializerKey(
+                EncodeConstants.OF13_VERSION_ID,
+                OxmMatchConstants.EXPERIMENTER_CLASS,
+                3);
+        nshNpDeserializerKey.setExperimenterId(NiciraConstants.NX_NSH_VENDOR_ID);
+        Mockito.verify(registrator).registerMatchEntryDeserializer(
+                Matchers.eq(nshNpDeserializerKey),
+                Matchers.any(NshNpCodec.class));
+        MatchEntrySerializerKey<ExperimenterClass, NxmNxNsp> nspSerializerKey = new MatchEntrySerializerKey<>(
+                EncodeConstants.OF13_VERSION_ID,
+                ExperimenterClass.class,
+                NxmNxNsp.class);
+        nspSerializerKey.setExperimenterId(NiciraConstants.NX_NSH_VENDOR_ID);
+        Mockito.verify(registrator).registerMatchEntrySerializer(
+                Matchers.eq(nspSerializerKey),
+                Matchers.any(NspCodec.class));
+        MatchEntryDeserializerKey nspDeserializerKey = new MatchEntryDeserializerKey(
+                EncodeConstants.OF13_VERSION_ID,
+                OxmMatchConstants.EXPERIMENTER_CLASS,
+                4);
+        nspDeserializerKey.setExperimenterId(NiciraConstants.NX_NSH_VENDOR_ID);
+        Mockito.verify(registrator).registerMatchEntryDeserializer(
+                Matchers.eq(nspDeserializerKey),
+                Matchers.any(NspCodec.class));
+        MatchEntrySerializerKey<ExperimenterClass, NxmNxNsi> nsiSerializerKey = new MatchEntrySerializerKey<>(
+                EncodeConstants.OF13_VERSION_ID,
+                ExperimenterClass.class,
+                NxmNxNsi.class);
+        nsiSerializerKey.setExperimenterId(NiciraConstants.NX_NSH_VENDOR_ID);
+        Mockito.verify(registrator).registerMatchEntrySerializer(
+                Matchers.eq(nsiSerializerKey),
+                Matchers.any(NsiCodec.class));
+        MatchEntryDeserializerKey nsiDeserializerKey = new MatchEntryDeserializerKey(
+                EncodeConstants.OF13_VERSION_ID,
+                OxmMatchConstants.EXPERIMENTER_CLASS,
+                5);
+        nsiDeserializerKey.setExperimenterId(NiciraConstants.NX_NSH_VENDOR_ID);
+        Mockito.verify(registrator).registerMatchEntryDeserializer(
+                Matchers.eq(nsiDeserializerKey),
+                Matchers.any(NsiCodec.class));
+        MatchEntrySerializerKey<ExperimenterClass, NxmNxNshc1> nshc1SerializerKey = new MatchEntrySerializerKey<>(
+                EncodeConstants.OF13_VERSION_ID,
+                ExperimenterClass.class,
+                NxmNxNshc1.class);
+        nshc1SerializerKey.setExperimenterId(NiciraConstants.NX_NSH_VENDOR_ID);
+        Mockito.verify(registrator).registerMatchEntrySerializer(
+                Matchers.eq(nshc1SerializerKey),
+                Matchers.any(Nshc1Codec.class));
+        MatchEntryDeserializerKey nshc1DeserializerKey = new MatchEntryDeserializerKey(
+                EncodeConstants.OF13_VERSION_ID,
+                OxmMatchConstants.EXPERIMENTER_CLASS,
+                6);
+        nshc1DeserializerKey.setExperimenterId(NiciraConstants.NX_NSH_VENDOR_ID);
+        Mockito.verify(registrator).registerMatchEntryDeserializer(
+                Matchers.eq(nshc1DeserializerKey),
+                Matchers.any(Nshc1Codec.class));
+        MatchEntrySerializerKey<ExperimenterClass, NxmNxNshc2> nshc2SerializerKey = new MatchEntrySerializerKey<>(
+                EncodeConstants.OF13_VERSION_ID,
+                ExperimenterClass.class,
+                NxmNxNshc2.class);
+        nshc2SerializerKey.setExperimenterId(NiciraConstants.NX_NSH_VENDOR_ID);
+        Mockito.verify(registrator).registerMatchEntrySerializer(
+                Matchers.eq(nshc2SerializerKey),
+                Matchers.any(Nshc2Codec.class));
+        MatchEntryDeserializerKey nshc2DeserializerKey = new MatchEntryDeserializerKey(
+                EncodeConstants.OF13_VERSION_ID,
+                OxmMatchConstants.EXPERIMENTER_CLASS,
+                7);
+        nshc2DeserializerKey.setExperimenterId(NiciraConstants.NX_NSH_VENDOR_ID);
+        Mockito.verify(registrator).registerMatchEntryDeserializer(
+                Matchers.eq(nshc2DeserializerKey),
+                Matchers.any(Nshc2Codec.class));
+        MatchEntrySerializerKey<ExperimenterClass, NxmNxNshc3> nshc3SerializerKey = new MatchEntrySerializerKey<>(
+                EncodeConstants.OF13_VERSION_ID,
+                ExperimenterClass.class,
+                NxmNxNshc3.class);
+        nshc3SerializerKey.setExperimenterId(NiciraConstants.NX_NSH_VENDOR_ID);
+        Mockito.verify(registrator).registerMatchEntrySerializer(
+                Matchers.eq(nshc3SerializerKey),
+                Matchers.any(Nshc3Codec.class));
+        MatchEntryDeserializerKey nshc3DeserializerKey = new MatchEntryDeserializerKey(
+                EncodeConstants.OF13_VERSION_ID,
+                OxmMatchConstants.EXPERIMENTER_CLASS,
+                8);
+        nshc3DeserializerKey.setExperimenterId(NiciraConstants.NX_NSH_VENDOR_ID);
+        Mockito.verify(registrator).registerMatchEntryDeserializer(
+                Matchers.eq(nshc3DeserializerKey),
+                Matchers.any(Nshc3Codec.class));
+        MatchEntrySerializerKey<ExperimenterClass, NxmNxNshc4> nshc4SerializerKey = new MatchEntrySerializerKey<>(
+                EncodeConstants.OF13_VERSION_ID,
+                ExperimenterClass.class,
+                NxmNxNshc4.class);
+        nshc4SerializerKey.setExperimenterId(NiciraConstants.NX_NSH_VENDOR_ID);
+        Mockito.verify(registrator).registerMatchEntrySerializer(
+                Matchers.eq(nshc4SerializerKey),
+                Matchers.any(Nshc4Codec.class));
+        MatchEntryDeserializerKey nshc4DeserializerKey = new MatchEntryDeserializerKey(
+                EncodeConstants.OF13_VERSION_ID,
+                OxmMatchConstants.EXPERIMENTER_CLASS,
+                9);
+        nshc4DeserializerKey.setExperimenterId(NiciraConstants.NX_NSH_VENDOR_ID);
+        Mockito.verify(registrator).registerMatchEntryDeserializer(
+                Matchers.eq(nshc4DeserializerKey),
+                Matchers.any(Nshc4Codec.class));
+        MatchEntrySerializerKey<ExperimenterClass, NxmNxNshTtl> nshTtlSerializerKey = new MatchEntrySerializerKey<>(
+                EncodeConstants.OF13_VERSION_ID,
+                ExperimenterClass.class,
+                NxmNxNshTtl.class);
+        nshTtlSerializerKey.setExperimenterId(NiciraConstants.NX_NSH_VENDOR_ID);
+        Mockito.verify(registrator).registerMatchEntrySerializer(
+                Matchers.eq(nshTtlSerializerKey),
+                Matchers.any(NshTtlCodec.class));
+        MatchEntryDeserializerKey nshTtlDeserializerKey = new MatchEntryDeserializerKey(
+                EncodeConstants.OF13_VERSION_ID,
+                OxmMatchConstants.EXPERIMENTER_CLASS,
+                10);
+        nshTtlDeserializerKey.setExperimenterId(NiciraConstants.NX_NSH_VENDOR_ID);
+        Mockito.verify(registrator).registerMatchEntryDeserializer(
+                Matchers.eq(nshTtlDeserializerKey),
+                Matchers.any(NshTtlCodec.class));
     }
 
     @Test
@@ -413,6 +565,10 @@ public class NiciraExtensionsRegistratorTest {
                 .unregisterActionDeserializer(new NiciraActionDeserializerKey(EncodeConstants.OF13_VERSION_ID, 7));
         Mockito.verify(registrator).unregisterActionSerializer(
                 new NiciraActionSerializerKey(EncodeConstants.OF13_VERSION_ID, ActionRegLoad.class));
+        Mockito.verify(registrator)
+                .unregisterActionDeserializer(new NiciraActionDeserializerKey(EncodeConstants.OF13_VERSION_ID, 33));
+        Mockito.verify(registrator).unregisterActionSerializer(
+                new NiciraActionSerializerKey(EncodeConstants.OF13_VERSION_ID, ActionRegLoad2.class));
         Mockito.verify(registrator)
                 .unregisterActionDeserializer(new NiciraActionDeserializerKey(EncodeConstants.OF13_VERSION_ID, 6));
         Mockito.verify(registrator).unregisterActionSerializer(
@@ -421,6 +577,10 @@ public class NiciraExtensionsRegistratorTest {
                 .unregisterActionDeserializer(new NiciraActionDeserializerKey(EncodeConstants.OF13_VERSION_ID, 15));
         Mockito.verify(registrator).unregisterActionSerializer(
                 new NiciraActionSerializerKey(EncodeConstants.OF13_VERSION_ID, ActionOutputReg.class));
+        Mockito.verify(registrator)
+                .unregisterActionDeserializer(new NiciraActionDeserializerKey(EncodeConstants.OF13_VERSION_ID, 32));
+        Mockito.verify(registrator).unregisterActionSerializer(
+                new NiciraActionSerializerKey(EncodeConstants.OF13_VERSION_ID, ActionOutputReg2.class));
         Mockito.verify(registrator)
                 .unregisterActionDeserializer(new NiciraActionDeserializerKey(EncodeConstants.OF13_VERSION_ID, 1));
         Mockito.verify(registrator)
@@ -521,30 +681,6 @@ public class NiciraExtensionsRegistratorTest {
                 new MatchEntrySerializerKey<>(EncodeConstants.OF13_VERSION_ID, Nxm0Class.class, NxmOfEthType.class));
         Mockito.verify(registrator).unregisterMatchEntryDeserializer(
                 new MatchEntryDeserializerKey(EncodeConstants.OF13_VERSION_ID, OxmMatchConstants.NXM_0_CLASS, 3));
-        Mockito.verify(registrator).unregisterMatchEntrySerializer(
-                new MatchEntrySerializerKey<>(EncodeConstants.OF13_VERSION_ID, Nxm1Class.class, NxmNxNsp.class));
-        Mockito.verify(registrator).unregisterMatchEntryDeserializer(
-                new MatchEntryDeserializerKey(EncodeConstants.OF13_VERSION_ID, OxmMatchConstants.NXM_1_CLASS, 113));
-        Mockito.verify(registrator).unregisterMatchEntrySerializer(
-                new MatchEntrySerializerKey<>(EncodeConstants.OF13_VERSION_ID, Nxm1Class.class, NxmNxNsi.class));
-        Mockito.verify(registrator).unregisterMatchEntryDeserializer(
-                new MatchEntryDeserializerKey(EncodeConstants.OF13_VERSION_ID, OxmMatchConstants.NXM_1_CLASS, 114));
-        Mockito.verify(registrator).unregisterMatchEntrySerializer(
-                new MatchEntrySerializerKey<>(EncodeConstants.OF13_VERSION_ID, Nxm1Class.class, NxmNxNshc1.class));
-        Mockito.verify(registrator).unregisterMatchEntryDeserializer(
-                new MatchEntryDeserializerKey(EncodeConstants.OF13_VERSION_ID, OxmMatchConstants.NXM_1_CLASS, 115));
-        Mockito.verify(registrator).unregisterMatchEntrySerializer(
-                new MatchEntrySerializerKey<>(EncodeConstants.OF13_VERSION_ID, Nxm1Class.class, NxmNxNshc2.class));
-        Mockito.verify(registrator).unregisterMatchEntryDeserializer(
-                new MatchEntryDeserializerKey(EncodeConstants.OF13_VERSION_ID, OxmMatchConstants.NXM_1_CLASS, 116));
-        Mockito.verify(registrator).unregisterMatchEntrySerializer(
-                new MatchEntrySerializerKey<>(EncodeConstants.OF13_VERSION_ID, Nxm1Class.class, NxmNxNshc3.class));
-        Mockito.verify(registrator).unregisterMatchEntryDeserializer(
-                new MatchEntryDeserializerKey(EncodeConstants.OF13_VERSION_ID, OxmMatchConstants.NXM_1_CLASS, 117));
-        Mockito.verify(registrator).unregisterMatchEntrySerializer(
-                new MatchEntrySerializerKey<>(EncodeConstants.OF13_VERSION_ID, Nxm1Class.class, NxmNxNshc4.class));
-        Mockito.verify(registrator).unregisterMatchEntryDeserializer(
-                new MatchEntryDeserializerKey(EncodeConstants.OF13_VERSION_ID, OxmMatchConstants.NXM_1_CLASS, 118));
         Mockito.verify(registrator).unregisterMatchEntrySerializer(
                 new MatchEntrySerializerKey<>(EncodeConstants.OF13_VERSION_ID, Nxm1Class.class, NxmNxTunIpv4Dst.class));
         Mockito.verify(registrator).unregisterMatchEntryDeserializer(
@@ -593,5 +729,127 @@ public class NiciraExtensionsRegistratorTest {
                 new MatchEntrySerializerKey<>(EncodeConstants.OF13_VERSION_ID, Nxm1Class.class, NxmNxPktMark.class));
         Mockito.verify(registrator).unregisterMatchEntryDeserializer(
                 new MatchEntryDeserializerKey(EncodeConstants.OF13_VERSION_ID, OxmMatchConstants.NXM_1_CLASS, 33));
+
+        // experimenters
+        MatchEntrySerializerKey<ExperimenterClass, NxmNxNshFlags> nshFlagsSerializerKey = new MatchEntrySerializerKey<>(
+                EncodeConstants.OF13_VERSION_ID,
+                ExperimenterClass.class,
+                NxmNxNshFlags.class);
+        nshFlagsSerializerKey.setExperimenterId(NiciraConstants.NX_NSH_VENDOR_ID);
+        Mockito.verify(registrator).unregisterMatchEntrySerializer(nshFlagsSerializerKey);
+        MatchEntryDeserializerKey nshFlagsDeserializerKey = new MatchEntryDeserializerKey(
+                EncodeConstants.OF13_VERSION_ID,
+                OxmMatchConstants.EXPERIMENTER_CLASS,
+                1);
+        nshFlagsDeserializerKey.setExperimenterId(NiciraConstants.NX_NSH_VENDOR_ID);
+        Mockito.verify(registrator).unregisterMatchEntryDeserializer(nshFlagsDeserializerKey);
+        MatchEntrySerializerKey<ExperimenterClass, NxmNxNshMdtype> mdtypeSerializerKey = new MatchEntrySerializerKey<>(
+                EncodeConstants.OF13_VERSION_ID,
+                ExperimenterClass.class,
+                NxmNxNshMdtype.class);
+        mdtypeSerializerKey.setExperimenterId(NiciraConstants.NX_NSH_VENDOR_ID);
+        Mockito.verify(registrator).unregisterMatchEntrySerializer(mdtypeSerializerKey);
+        MatchEntryDeserializerKey mdtypeDeserializerKey = new MatchEntryDeserializerKey(
+                EncodeConstants.OF13_VERSION_ID,
+                OxmMatchConstants.EXPERIMENTER_CLASS,
+                2);
+        mdtypeDeserializerKey.setExperimenterId(NiciraConstants.NX_NSH_VENDOR_ID);
+        Mockito.verify(registrator).unregisterMatchEntryDeserializer(mdtypeDeserializerKey);
+        MatchEntrySerializerKey<ExperimenterClass, NxmNxNshNp> nshNpSerializerKey = new MatchEntrySerializerKey<>(
+                EncodeConstants.OF13_VERSION_ID,
+                ExperimenterClass.class,
+                NxmNxNshNp.class);
+        nshNpSerializerKey.setExperimenterId(NiciraConstants.NX_NSH_VENDOR_ID);
+        Mockito.verify(registrator).unregisterMatchEntrySerializer(nshNpSerializerKey);
+        MatchEntryDeserializerKey nshNpDeserializerKey = new MatchEntryDeserializerKey(
+                EncodeConstants.OF13_VERSION_ID,
+                OxmMatchConstants.EXPERIMENTER_CLASS,
+                3);
+        nshNpDeserializerKey.setExperimenterId(NiciraConstants.NX_NSH_VENDOR_ID);
+        Mockito.verify(registrator).unregisterMatchEntryDeserializer(nshNpDeserializerKey);
+        MatchEntrySerializerKey<ExperimenterClass, NxmNxNsp> nspSerializerKey = new MatchEntrySerializerKey<>(
+                EncodeConstants.OF13_VERSION_ID,
+                ExperimenterClass.class,
+                NxmNxNsp.class);
+        nspSerializerKey.setExperimenterId(NiciraConstants.NX_NSH_VENDOR_ID);
+        Mockito.verify(registrator).unregisterMatchEntrySerializer(nspSerializerKey);
+        MatchEntryDeserializerKey nspDeserializerKey = new MatchEntryDeserializerKey(
+                EncodeConstants.OF13_VERSION_ID,
+                OxmMatchConstants.EXPERIMENTER_CLASS,
+                4);
+        nspDeserializerKey.setExperimenterId(NiciraConstants.NX_NSH_VENDOR_ID);
+        Mockito.verify(registrator).unregisterMatchEntryDeserializer(nspDeserializerKey);
+        MatchEntrySerializerKey<ExperimenterClass, NxmNxNsi> nsiSerializerKey = new MatchEntrySerializerKey<>(
+                EncodeConstants.OF13_VERSION_ID,
+                ExperimenterClass.class,
+                NxmNxNsi.class);
+        nsiSerializerKey.setExperimenterId(NiciraConstants.NX_NSH_VENDOR_ID);
+        Mockito.verify(registrator).unregisterMatchEntrySerializer(nsiSerializerKey);
+        MatchEntryDeserializerKey nsiDeserializerKey = new MatchEntryDeserializerKey(
+                EncodeConstants.OF13_VERSION_ID,
+                OxmMatchConstants.EXPERIMENTER_CLASS,
+                5);
+        nsiDeserializerKey.setExperimenterId(NiciraConstants.NX_NSH_VENDOR_ID);
+        Mockito.verify(registrator).unregisterMatchEntryDeserializer(nsiDeserializerKey);
+        MatchEntrySerializerKey<ExperimenterClass, NxmNxNshc1> nshc1SerializerKey = new MatchEntrySerializerKey<>(
+                EncodeConstants.OF13_VERSION_ID,
+                ExperimenterClass.class,
+                NxmNxNshc1.class);
+        nshc1SerializerKey.setExperimenterId(NiciraConstants.NX_NSH_VENDOR_ID);
+        Mockito.verify(registrator).unregisterMatchEntrySerializer(nshc1SerializerKey);
+        MatchEntryDeserializerKey nshc1DeserializerKey = new MatchEntryDeserializerKey(
+                EncodeConstants.OF13_VERSION_ID,
+                OxmMatchConstants.EXPERIMENTER_CLASS,
+                6);
+        nshc1DeserializerKey.setExperimenterId(NiciraConstants.NX_NSH_VENDOR_ID);
+        Mockito.verify(registrator).unregisterMatchEntryDeserializer(nshc1DeserializerKey);
+        MatchEntrySerializerKey<ExperimenterClass, NxmNxNshc2> nshc2SerializerKey = new MatchEntrySerializerKey<>(
+                EncodeConstants.OF13_VERSION_ID,
+                ExperimenterClass.class,
+                NxmNxNshc2.class);
+        nshc2SerializerKey.setExperimenterId(NiciraConstants.NX_NSH_VENDOR_ID);
+        Mockito.verify(registrator).unregisterMatchEntrySerializer(nshc2SerializerKey);
+        MatchEntryDeserializerKey nshc2DeserializerKey = new MatchEntryDeserializerKey(
+                EncodeConstants.OF13_VERSION_ID,
+                OxmMatchConstants.EXPERIMENTER_CLASS,
+                7);
+        nshc2DeserializerKey.setExperimenterId(NiciraConstants.NX_NSH_VENDOR_ID);
+        Mockito.verify(registrator).unregisterMatchEntryDeserializer(nshc2DeserializerKey);
+        MatchEntrySerializerKey<ExperimenterClass, NxmNxNshc3> nshc3SerializerKey = new MatchEntrySerializerKey<>(
+                EncodeConstants.OF13_VERSION_ID,
+                ExperimenterClass.class,
+                NxmNxNshc3.class);
+        nshc3SerializerKey.setExperimenterId(NiciraConstants.NX_NSH_VENDOR_ID);
+        Mockito.verify(registrator).unregisterMatchEntrySerializer(nshc3SerializerKey);
+        MatchEntryDeserializerKey nshc3DeserializerKey = new MatchEntryDeserializerKey(
+                EncodeConstants.OF13_VERSION_ID,
+                OxmMatchConstants.EXPERIMENTER_CLASS,
+                8);
+        nshc3DeserializerKey.setExperimenterId(NiciraConstants.NX_NSH_VENDOR_ID);
+        Mockito.verify(registrator).unregisterMatchEntryDeserializer(nshc3DeserializerKey);
+        MatchEntrySerializerKey<ExperimenterClass, NxmNxNshc4> nshc4SerializerKey = new MatchEntrySerializerKey<>(
+                EncodeConstants.OF13_VERSION_ID,
+                ExperimenterClass.class,
+                NxmNxNshc4.class);
+        nshc4SerializerKey.setExperimenterId(NiciraConstants.NX_NSH_VENDOR_ID);
+        Mockito.verify(registrator).unregisterMatchEntrySerializer(nshc1SerializerKey);
+        MatchEntryDeserializerKey nshc4DeserializerKey = new MatchEntryDeserializerKey(
+                EncodeConstants.OF13_VERSION_ID,
+                OxmMatchConstants.EXPERIMENTER_CLASS,
+                9);
+        nshc4DeserializerKey.setExperimenterId(NiciraConstants.NX_NSH_VENDOR_ID);
+        Mockito.verify(registrator).unregisterMatchEntryDeserializer(nshc4DeserializerKey);
+        MatchEntrySerializerKey<ExperimenterClass, NxmNxNshTtl> nshTtlSerializerKey = new MatchEntrySerializerKey<>(
+                EncodeConstants.OF13_VERSION_ID,
+                ExperimenterClass.class,
+                NxmNxNshTtl.class);
+        nshTtlSerializerKey.setExperimenterId(NiciraConstants.NX_NSH_VENDOR_ID);
+        Mockito.verify(registrator).unregisterMatchEntrySerializer(nshTtlSerializerKey);
+        MatchEntryDeserializerKey nshTtlDeserializerKey = new MatchEntryDeserializerKey(
+                EncodeConstants.OF13_VERSION_ID,
+                OxmMatchConstants.EXPERIMENTER_CLASS,
+                10);
+        nshTtlDeserializerKey.setExperimenterId(NiciraConstants.NX_NSH_VENDOR_ID);
+        Mockito.verify(registrator).unregisterMatchEntryDeserializer(nshTtlDeserializerKey);
     }
 }