-/**
+/*
* Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
-
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.NxmNxNsi;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.ofj.nxm.nx.match.nsi.grouping.NsiValues;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.ofj.nxm.nx.match.nsi.grouping.NsiValuesBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.oxm.container.match.entry.value.NsiCaseValue;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.oxm.container.match.entry.value.NsiCaseValueBuilder;
+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.NsiCaseValue;
+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.NsiCaseValueBuilder;
+import org.opendaylight.yangtools.yang.common.Uint8;
public class NsiCodecTest {
NsiCodec nsiCodec;
ByteBuf buffer;
- MatchEntry input;
- private static final int VALUE_LENGTH = 1;
- private static final int NXM_FIELD_CODE = 114;
+ private static final Short NSI_VALUE = (short) 255;
+ private static final Short NSI_MASK = 0xF0;
@Before
public void setUp() {
}
@Test
- public void serializeTest() {
- input = createMatchEntry();
- nsiCodec.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.readUnsignedByte());
+ public void serializeTestNoMask() {
+ NxExpMatchEntryValue matchEntryValue = createMatchEntryValue(NSI_VALUE, null);
+
+ nsiCodec.serializeValue(matchEntryValue, false, buffer);
+
+ assertEquals(NSI_VALUE.shortValue(), buffer.readUnsignedByte());
+ assertFalse(buffer.isReadable());
}
@Test
- public void deserializeTest() {
- createBuffer(buffer);
+ public void serializeTestMask() {
+ NxExpMatchEntryValue matchEntryValue = createMatchEntryValue(NSI_VALUE, NSI_MASK);
- input = nsiCodec.deserialize(buffer);
+ nsiCodec.serializeValue(matchEntryValue, true, buffer);
- NsiCaseValue result = ((NsiCaseValue) input.getMatchEntryValue());
-
- assertEquals(Nxm1Class.class, input.getOxmClass());
- assertEquals(NxmNxNsi.class, input.getOxmMatchField());
- assertEquals(false, input.isHasMask());
- assertEquals(2, result.getNsiValues().getNsi().shortValue());
+ assertEquals(NSI_VALUE.shortValue(), buffer.readUnsignedByte());
+ assertEquals(NSI_MASK.shortValue(), buffer.readUnsignedByte());
+ assertFalse(buffer.isReadable());
}
+ @Test
+ public void deserializeTestNoMask() {
+ writeBuffer(buffer, NSI_VALUE, null);
- private MatchEntry createMatchEntry() {
- MatchEntryBuilder matchEntryBuilder = new MatchEntryBuilder();
- NsiCaseValueBuilder caseBuilder = new NsiCaseValueBuilder();
- NsiValuesBuilder valuesBuilder = new NsiValuesBuilder();
+ NxExpMatchEntryValue value = nsiCodec.deserializeValue(buffer, false);
- matchEntryBuilder.setOxmClass(Nxm1Class.class);
- matchEntryBuilder.setOxmMatchField(NxmNxNsi.class);
- matchEntryBuilder.setHasMask(false);
+ assertEquals(Uint8.valueOf(NSI_VALUE), ((NsiCaseValue) value).getNsiValues().getNsi());
+ assertFalse(buffer.isReadable());
+ }
+
+ @Test
+ public void deserializeTestMask() {
+ writeBuffer(buffer, NSI_VALUE, NSI_MASK);
- valuesBuilder.setNsi((short)1);
+ NxExpMatchEntryValue value = nsiCodec.deserializeValue(buffer, true);
- caseBuilder.setNsiValues(valuesBuilder.build());
- matchEntryBuilder.setMatchEntryValue(caseBuilder.build());
- return matchEntryBuilder.build();
+ assertEquals(Uint8.valueOf(NSI_VALUE), ((NsiCaseValue) value).getNsiValues().getNsi());
+ assertEquals(Uint8.valueOf(NSI_MASK), ((NsiCaseValue) value).getNsiValues().getMask());
+ assertFalse(buffer.isReadable());
}
- private void createBuffer(ByteBuf message) {
- message.writeShort(OxmMatchConstants.NXM_1_CLASS);
+ private static NxExpMatchEntryValue createMatchEntryValue(Short value, Short mask) {
+ NsiValues nsiValues = new NsiValuesBuilder().setNsi(value).setMask(mask).build();
+ return new NsiCaseValueBuilder().setNsiValues(nsiValues).build();
+ }
- int fieldMask = (NXM_FIELD_CODE << 1);
- message.writeByte(fieldMask);
- message.writeByte(VALUE_LENGTH);
- message.writeByte(2);
+ private static void writeBuffer(ByteBuf message, Short value, Short mask) {
+ message.writeByte(value.intValue());
+ if (mask != null) {
+ message.writeByte(mask.intValue());
+ }
}
}