Merge "Refactor nsh fields to new encoding"
[openflowplugin.git] / extension / openflowjava-extension-nicira / src / test / java / org / opendaylight / openflowjava / nx / codec / match / NspCodecTest.java
index de50c402c8582951b84eb9bf846d471e680acee0..a6f70aa57ad3340877f67aefef29111f65849238 100644 (file)
@@ -9,28 +9,25 @@
 package org.opendaylight.openflowjava.nx.codec.match;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.ByteBufAllocator;
 import org.junit.Before;
 import org.junit.Test;
-import org.opendaylight.openflowjava.protocol.api.util.OxmMatchConstants;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Nxm1Class;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntry;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntryBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxNsp;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.ofj.nxm.nx.match.nsp.grouping.NspValues;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.ofj.nxm.nx.match.nsp.grouping.NspValuesBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.oxm.container.match.entry.value.NspCaseValue;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.oxm.container.match.entry.value.NspCaseValueBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.oxm.container.match.entry.value.experimenter.id._case.NxExpMatchEntryValue;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.oxm.container.match.entry.value.experimenter.id._case.nx.exp.match.entry.value.NspCaseValue;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.oxm.container.match.entry.value.experimenter.id._case.nx.exp.match.entry.value.NspCaseValueBuilder;
 
 public class NspCodecTest {
 
-    NspCodec nspCodec;
-    ByteBuf buffer;
-    MatchEntry input;
+    private NspCodec nspCodec;
+    private ByteBuf buffer;
 
-    private static final int VALUE_LENGTH = 4;
-    private static final int NXM_FIELD_CODE = 113;
+    private static final Long NSP_VALUE = 10L;
+    private static final Long NSP_MASK = 0xFL;
 
     @Before
     public void setUp() {
@@ -39,55 +36,57 @@ public class NspCodecTest {
     }
 
     @Test
-    public void serializeTest() {
-        input = createMatchEntry();
-        nspCodec.serialize(input, buffer);
-
-        assertEquals(OxmMatchConstants.NXM_1_CLASS, buffer.readUnsignedShort());
-        short fieldMask = buffer.readUnsignedByte();
-        assertEquals(NXM_FIELD_CODE, fieldMask >> 1);
-        assertEquals(0, fieldMask & 1);
-        assertEquals(VALUE_LENGTH, buffer.readUnsignedByte());
-        assertEquals(1, buffer.readUnsignedInt());
+    public void serializeTestNoMask() {
+        NxExpMatchEntryValue matchEntryValue = createMatchEntryValue(NSP_VALUE, null);
+
+        nspCodec.serializeValue(matchEntryValue, false, buffer);
+
+        assertEquals(NSP_VALUE.longValue(), buffer.readUnsignedInt());
+        assertFalse(buffer.isReadable());
     }
 
     @Test
-    public void deserializeTest() {
-        createBuffer(buffer);
-
-        input = nspCodec.deserialize(buffer);
+    public void serializeTestMask() {
+        NxExpMatchEntryValue matchEntryValue = createMatchEntryValue(NSP_VALUE, NSP_MASK);
 
-        NspCaseValue result = ((NspCaseValue) input.getMatchEntryValue());
+        nspCodec.serializeValue(matchEntryValue, true, buffer);
 
-        assertEquals(Nxm1Class.class, input.getOxmClass());
-        assertEquals(NxmNxNsp.class, input.getOxmMatchField());
-        assertEquals(false, input.isHasMask());
-        assertEquals(2, result.getNspValues().getNsp().intValue());
+        assertEquals(NSP_VALUE.longValue(), buffer.readUnsignedInt());
+        assertEquals(NSP_MASK.longValue(), buffer.readUnsignedInt());
+        assertFalse(buffer.isReadable());
     }
 
+    @Test
+    public void deserializeTestNoMask() {
+        writeBuffer(buffer, NSP_VALUE, null);
 
-    private MatchEntry createMatchEntry() {
-        MatchEntryBuilder matchEntryBuilder = new MatchEntryBuilder();
-        NspCaseValueBuilder caseBuilder = new NspCaseValueBuilder();
-        NspValuesBuilder valuesBuilder = new NspValuesBuilder();
+        NxExpMatchEntryValue value = nspCodec.deserializeValue(buffer, false);
 
-        matchEntryBuilder.setOxmClass(Nxm1Class.class);
-        matchEntryBuilder.setOxmMatchField(NxmNxNsp.class);
-        matchEntryBuilder.setHasMask(false);
+        assertEquals(NSP_VALUE, ((NspCaseValue) value).getNspValues().getNsp());
+        assertFalse(buffer.isReadable());
+    }
 
-        valuesBuilder.setNsp((long)1);
+    @Test
+    public void deserializeTestMask() {
+        writeBuffer(buffer, NSP_VALUE, NSP_MASK);
+
+        NxExpMatchEntryValue value = nspCodec.deserializeValue(buffer, true);
 
-        caseBuilder.setNspValues(valuesBuilder.build());
-        matchEntryBuilder.setMatchEntryValue(caseBuilder.build());
-        return matchEntryBuilder.build();
+        assertEquals(NSP_VALUE, ((NspCaseValue) value).getNspValues().getNsp());
+        assertEquals(NSP_MASK, ((NspCaseValue) value).getNspValues().getMask());
+        assertFalse(buffer.isReadable());
     }
 
-    private void createBuffer(ByteBuf message) {
-        message.writeShort(OxmMatchConstants.NXM_1_CLASS);
 
-        int fieldMask = (NXM_FIELD_CODE << 1);
-        message.writeByte(fieldMask);
-        message.writeByte(VALUE_LENGTH);
-        message.writeInt(2);
+    private NxExpMatchEntryValue createMatchEntryValue(Long value, Long mask) {
+        NspValues nspValues = new NspValuesBuilder().setNsp(value).setMask(mask).build();
+        return new NspCaseValueBuilder().setNspValues(nspValues).build();
+    }
+
+    private void writeBuffer(ByteBuf message, Long value, Long mask) {
+        message.writeInt(value.intValue());
+        if (mask != null) {
+            message.writeInt(mask.intValue());
+        }
     }
 }