package org.apache.synapse.transport.pipe; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.LinkedList; import java.util.List; import java.util.Random; import junit.framework.TestCase; public class EndDelimitedProtocolTest extends TestCase { public void test() throws IOException { byte delimiter = 0; Random random = new Random(); ByteArrayOutputStream out = new ByteArrayOutputStream(); List<byte[]> messages = new LinkedList<byte[]>(); for (int i=0; i<20; i++) { int size = 64 + random.nextInt(2048); byte[] data = new byte[size]; for (int j=0; j<size; j++) { data[j] = (byte)(32 + random.nextInt(96)); } out.write(data); out.write(delimiter); messages.add(data); } EndDelimitedProtocol protocol = new EndDelimitedProtocol(); protocol.setDelimiter(delimiter); ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray()); ProtocolDecoder decoder = protocol.createProtocolDecoder(); byte[] readBuffer = new byte[1024]; while (true) { int remaining = messages.size(); while (decoder.inputRequired()) { int c = in.read(readBuffer); if (c == -1) { assertTrue("Expected " + remaining + " more messages", remaining == 0); return; } decoder.decode(readBuffer, 0, c); } assertTrue("Didn't expecte any more messages", remaining != 0); byte[] actual = decoder.getNext(); byte[] expected = messages.remove(0); assertEquals(new String(expected, "us-ascii"), new String(actual, "us-ascii")); } } }