blob: 965ac456d317209a61bf275383fa7f2d65425019 [file] [log] [blame]
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"));
}
}
}