package org.simpleframework.http.message; import junit.framework.TestCase; import org.simpleframework.common.buffer.ArrayAllocator; import org.simpleframework.http.core.DribbleCursor; import org.simpleframework.http.core.StreamCursor; import org.simpleframework.http.message.PartData; import org.simpleframework.http.message.PartSeriesConsumer; import org.simpleframework.transport.ByteCursor; public class PartSeriesConsumerTest extends TestCase { private static final String SIMPLE = "--AaB03x\r\n"+ "Content-Disposition: form-data; name='pics'; filename='file1.txt'\r\n"+ "Content-Type: text/plain\r\n\r\n"+ "example contents of file1.txt ...\r\n"+ "--AaB03x--\r\n"; private static final String NORMAL = "--AaB03x\r\n"+ "Content-Disposition: form-data; name='pics'; filename='file1.txt'\r\n"+ "Content-Type: text/plain\r\n\r\n"+ "example contents of file1.txt\r\n"+ "--AaB03x\r\n"+ "Content-Disposition: form-data; name='pics'; filename='file2.txt'\r\n"+ "Content-Type: text/plain\r\n\r\n"+ "example contents of file2.txt\r\n"+ "--AaB03x\r\n"+ "Content-Disposition: form-data; name='pics'; filename='file3.txt'\r\n"+ "Content-Type: text/plain\r\n\r\n"+ "example contents of file3.txt ...\r\n"+ "--AaB03x--\r\n"; private static final String MIXED = "--AaB03x\r\n"+ "Content-Disposition: form-data; name='pics'; filename='file1.txt'\r\n"+ "Content-Type: text/plain\r\n\r\n"+ "example contents of file1.txt\r\n"+ "--AaB03x\r\n"+ "Content-Type: multipart/mixed; boundary=BbC04y\r\n\r\n"+ "--BbC04y\r\n"+ "Content-Disposition: form-data; name='pics'; filename='file2.txt'\r\n"+ "Content-Type: text/plain\r\n\r\n"+ "example contents of file2.txt ...\r\n"+ "--BbC04y\r\n"+ "Content-Disposition: form-data; name='pics'; filename='file3.txt'\r\n"+ "Content-Type: text/plain\r\n\r\n"+ "example contents of file3.txt ...\r\n"+ "--BbC04y\r\n"+ "Content-Disposition: form-data; name='pics'; filename='file4.txt'\r\n"+ "Content-Type: text/plain\r\n\r\n"+ "example contents of file4.txt ...\r\n"+ "--BbC04y--\r\n"+ "--AaB03x--\r\n"; public void testSimple() throws Exception { PartData list = new PartData(); PartSeriesConsumer consumer = new PartSeriesConsumer(new ArrayAllocator(), list, "AaB03x".getBytes("UTF-8")); ByteCursor cursor = new StreamCursor(SIMPLE); while(!consumer.isFinished()) { consumer.consume(cursor); } assertEquals(list.getParts().size(), 1); assertEquals(list.getParts().get(0).getContentType().getPrimary(), "text"); assertEquals(list.getParts().get(0).getContentType().getSecondary(), "plain"); assertEquals(list.getParts().get(0).getHeader("Content-Disposition"), "form-data; name='pics'; filename='file1.txt'"); assertEquals(list.getParts().get(0).getContent(), "example contents of file1.txt ..."); assertEquals(cursor.ready(), -1); assertEquals(consumer.getBody().getContent(), SIMPLE); } public void testNormal() throws Exception { PartData list = new PartData(); PartSeriesConsumer consumer = new PartSeriesConsumer(new ArrayAllocator(), list, "AaB03x".getBytes("UTF-8")); ByteCursor cursor = new StreamCursor(NORMAL); while(!consumer.isFinished()) { consumer.consume(cursor); } assertEquals(list.getParts().size(), 3); assertEquals(list.getParts().get(0).getContentType().getPrimary(), "text"); assertEquals(list.getParts().get(0).getContentType().getSecondary(), "plain"); assertEquals(list.getParts().get(0).getHeader("Content-Disposition"), "form-data; name='pics'; filename='file1.txt'"); assertEquals(list.getParts().get(0).getContent(), "example contents of file1.txt"); assertEquals(list.getParts().get(1).getContentType().getPrimary(), "text"); assertEquals(list.getParts().get(1).getContentType().getSecondary(), "plain"); assertEquals(list.getParts().get(1).getHeader("Content-Disposition"), "form-data; name='pics'; filename='file2.txt'"); assertEquals(list.getParts().get(1).getContent(), "example contents of file2.txt"); assertEquals(list.getParts().get(2).getContentType().getPrimary(), "text"); assertEquals(list.getParts().get(2).getContentType().getSecondary(), "plain"); assertEquals(list.getParts().get(2).getHeader("Content-Disposition"), "form-data; name='pics'; filename='file3.txt'"); assertEquals(list.getParts().get(2).getContent(), "example contents of file3.txt ..."); assertEquals(cursor.ready(), -1); assertEquals(consumer.getBody().getContent(), NORMAL); } public void testMixed() throws Exception { PartData list = new PartData(); PartSeriesConsumer consumer = new PartSeriesConsumer(new ArrayAllocator(), list, "AaB03x".getBytes("UTF-8")); ByteCursor cursor = new StreamCursor(MIXED); while(!consumer.isFinished()) { consumer.consume(cursor); } assertEquals(list.getParts().size(), 4); assertEquals(list.getParts().get(0).getContentType().getPrimary(), "text"); assertEquals(list.getParts().get(0).getContentType().getSecondary(), "plain"); assertEquals(list.getParts().get(0).getHeader("Content-Disposition"), "form-data; name='pics'; filename='file1.txt'"); assertEquals(list.getParts().get(0).getContent(), "example contents of file1.txt"); assertEquals(list.getParts().get(1).getContentType().getPrimary(), "text"); assertEquals(list.getParts().get(1).getContentType().getSecondary(), "plain"); assertEquals(list.getParts().get(1).getHeader("Content-Disposition"), "form-data; name='pics'; filename='file2.txt'"); assertEquals(list.getParts().get(1).getContent(), "example contents of file2.txt ..."); assertEquals(list.getParts().get(2).getContentType().getPrimary(), "text"); assertEquals(list.getParts().get(2).getContentType().getSecondary(), "plain"); assertEquals(list.getParts().get(2).getHeader("Content-Disposition"), "form-data; name='pics'; filename='file3.txt'"); assertEquals(list.getParts().get(2).getContent(), "example contents of file3.txt ..."); assertEquals(list.getParts().get(3).getContentType().getPrimary(), "text"); assertEquals(list.getParts().get(3).getContentType().getSecondary(), "plain"); assertEquals(list.getParts().get(3).getHeader("Content-Disposition"), "form-data; name='pics'; filename='file4.txt'"); assertEquals(list.getParts().get(3).getContent(), "example contents of file4.txt ..."); assertEquals(cursor.ready(), -1); assertEquals(consumer.getBody().getContent(), MIXED); } public void testDribble() throws Exception { PartData list = new PartData(); PartSeriesConsumer consumer = new PartSeriesConsumer(new ArrayAllocator(), list, "AaB03x".getBytes("UTF-8")); ByteCursor cursor = new DribbleCursor(new StreamCursor(NORMAL), 1); while(!consumer.isFinished()) { consumer.consume(cursor); } assertEquals(list.getParts().size(), 3); assertEquals(list.getParts().get(0).getContentType().getPrimary(), "text"); assertEquals(list.getParts().get(0).getContentType().getSecondary(), "plain"); assertEquals(list.getParts().get(0).getHeader("Content-Disposition"), "form-data; name='pics'; filename='file1.txt'"); assertEquals(list.getParts().get(0).getContent(), "example contents of file1.txt"); assertEquals(list.getParts().get(1).getContentType().getPrimary(), "text"); assertEquals(list.getParts().get(1).getContentType().getSecondary(), "plain"); assertEquals(list.getParts().get(1).getHeader("Content-Disposition"), "form-data; name='pics'; filename='file2.txt'"); assertEquals(list.getParts().get(1).getContent(), "example contents of file2.txt"); assertEquals(list.getParts().get(2).getContentType().getPrimary(), "text"); assertEquals(list.getParts().get(2).getContentType().getSecondary(), "plain"); assertEquals(list.getParts().get(2).getHeader("Content-Disposition"), "form-data; name='pics'; filename='file3.txt'"); assertEquals(list.getParts().get(2).getContent(), "example contents of file3.txt ..."); assertEquals(cursor.ready(), -1); assertEquals(consumer.getBody().getContent(), NORMAL); } public static void main(String[] list) throws Exception { new PartSeriesConsumerTest().testMixed(); } }