package net.jxta.impl.endpoint.netty; import static org.junit.Assert.*; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import junit.framework.Assert; import org.jboss.netty.buffer.ChannelBuffer; import org.jboss.netty.buffer.ChannelBuffers; import org.jboss.netty.channel.ChannelEvent; import org.jboss.netty.channel.ChannelState; import org.jboss.netty.channel.DownstreamChannelStateEvent; public class NettyTestUtils { public static ByteBuffer convertReadable(ChannelBuffer b) { int startIndex = b.readerIndex(); ByteBuffer converted = ByteBuffer.allocate(b.readableBytes()); b.readBytes(converted); b.readerIndex(startIndex); converted.flip(); return converted; } public static void assertEquals(ChannelBuffer expected, ChannelBuffer actual) { if(expected.readableBytes() != actual.readableBytes()) { Assert.failNotEquals("channel buffers have differing readable sizes", expected.readableBytes(), actual.readableBytes()); } int startPositionExpected = expected.readerIndex(); int startPositionActual = actual.readerIndex(); int position = 0; while(expected.readable()) { byte expectedByte = expected.readByte(); byte actualByte = actual.readByte(); if(expectedByte != actualByte) { Assert.failNotEquals("channel buffers differ at position " + position, expectedByte, actualByte); } position++; } expected.readerIndex(startPositionExpected); actual.readerIndex(startPositionActual); } public static boolean checkEquals(ChannelBuffer expected, ChannelBuffer actual) { if(expected.readableBytes() != actual.readableBytes()) { return false; } int position = 0; while(expected.readable()) { byte expectedByte = expected.readByte(); byte actualByte = actual.readByte(); if(expectedByte != actualByte) { return false; } position++; } return true; } public static List<ChannelBuffer> splitIntoChunks(int chunkSize, ChannelBuffer... buffers) { LinkedList<ChannelBuffer> chunks = new LinkedList<ChannelBuffer>(); ArrayList<ChannelBuffer> sourceBuffers = new ArrayList<ChannelBuffer>(); Collections.addAll(sourceBuffers, buffers); Iterator<ChannelBuffer> sourceIter = sourceBuffers.iterator(); ChannelBuffer chunk = ChannelBuffers.buffer(chunkSize); while(sourceIter.hasNext()) { ChannelBuffer source = sourceIter.next(); int index = source.readerIndex(); while(source.writerIndex() > index) { int fragmentSize = Math.min(source.writerIndex() - index, chunk.writableBytes()); chunk.writeBytes(source, index, fragmentSize); if(!chunk.writable()) { chunks.add(chunk); chunk = ChannelBuffers.buffer(chunkSize); } index += fragmentSize; } } if(chunk.readable()) { chunks.add(chunk); } return chunks; } public static void checkDownstreamChannelStateEvent(ChannelEvent ev, ChannelState expectedState, Boolean expectedValue) { assertTrue(ev instanceof DownstreamChannelStateEvent); DownstreamChannelStateEvent stateEv = (DownstreamChannelStateEvent)ev; Assert.assertEquals(expectedState, stateEv.getState()); Assert.assertEquals(expectedValue, stateEv.getValue()); } }