blob: 9a5a4dca0e051f40cc583e2418863e9bbf75a1ba [file] [log] [blame]
package org.projectfloodlight.openflow.types;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.junit.Assert.assertThat;
import org.hamcrest.Matchers;
import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.buffer.ChannelBuffers;
import org.junit.Test;
import org.projectfloodlight.openflow.protocol.OFFactories;
import org.projectfloodlight.openflow.protocol.OFFlowAdd;
import org.projectfloodlight.openflow.protocol.OFVersion;
public class OFErrorCauseDataTest {
@Test
public void testEmpty() {
OFErrorCauseData emptyCause = OFErrorCauseData.of(new byte[] {}, OFVersion.OF_13);
assertThat(emptyCause.getData(), equalTo(new byte[] {}));
assertThat(emptyCause.getParsedMessage().isPresent(), equalTo(false));
assertThat(emptyCause.toString(), Matchers.containsString("unparsed"));
}
@Test
public void testTooShort() {
OFErrorCauseData emptyCause = OFErrorCauseData.of(new byte[] {0x1, 0x2}, OFVersion.OF_13);
assertThat(emptyCause.getData(), equalTo(new byte[] {0x1, 0x2}));
assertThat(emptyCause.getParsedMessage().isPresent(), equalTo(false));
assertThat(emptyCause.toString(), Matchers.containsString("unparsed"));
assertThat(emptyCause.toString(), Matchers.containsString("01 02"));
}
byte[] truncatedFlowAddd = new byte[] {
0x04, 0x0e, // version, type
0x00, (byte) 0x80, // length
0x12, 0x34, 0x56, 0x78, // xid
(byte) 0xfe, (byte) 0xdc , (byte) 0xba, (byte) 0x98, 0x76, 0x54, 0x32, 0x10, // cookie
(byte) 0xff, 0x00, (byte) 0xff, 0x00, (byte) 0xff, 0x00, (byte) 0xff, 0x00, // cookie_mask
0x03 // table_id
// rest truncated
};
@Test
public void testTruncated() {
OFErrorCauseData emptyCause = OFErrorCauseData.of(truncatedFlowAddd, OFVersion.OF_13);
assertThat(emptyCause.getData(), equalTo(truncatedFlowAddd));
assertThat(emptyCause.getParsedMessage().isPresent(), equalTo(false));
assertThat(emptyCause.toString(), Matchers.containsString("unparsed"));
assertThat(emptyCause.toString(), Matchers.containsString("04 0e 00 80"));
}
@Test
public void testFlowAdd() {
OFFlowAdd flowAdd = OFFactories.getFactory(OFVersion.OF_13).buildFlowAdd()
.setXid(0x12345678)
.setCookie(U64.parseHex("FEDCBA9876543210"))
.setCookieMask(U64.parseHex("FF00FF00FF00FF00"))
.setTableId(TableId.of(3))
.setIdleTimeout(5)
.setHardTimeout(10)
.setPriority(6000)
.build();
ChannelBuffer bb = ChannelBuffers.dynamicBuffer();
flowAdd.writeTo(bb);
byte[] flowAddBytes = new byte[bb.readableBytes()];
bb.readBytes(flowAddBytes);
OFErrorCauseData emptyCause = OFErrorCauseData.of(flowAddBytes, OFVersion.OF_13);
assertThat(emptyCause.getData(), equalTo(flowAddBytes));
assertThat(emptyCause.getParsedMessage().isPresent(), equalTo(true));
assertThat(emptyCause.toString(), Matchers.containsString("OFFlowAdd"));
assertThat(emptyCause.toString(), Matchers.containsString("idleTimeout=5"));
}
}