From 1352be4308b87b10c04c8c04175e23e34d449f6a Mon Sep 17 00:00:00 2001 From: Greg Wilkins Date: Mon, 12 Mar 2018 17:39:11 +1100 Subject: [PATCH] added some unit tests for part content Signed-off-by: Greg Wilkins --- .../jetty/http/MultiPartParserTest.java | 216 +++++++++++++++++- 1 file changed, 212 insertions(+), 4 deletions(-) diff --git a/jetty-http/src/test/java/org/eclipse/jetty/http/MultiPartParserTest.java b/jetty-http/src/test/java/org/eclipse/jetty/http/MultiPartParserTest.java index 31082790816..640b8fb296e 100644 --- a/jetty-http/src/test/java/org/eclipse/jetty/http/MultiPartParserTest.java +++ b/jetty-http/src/test/java/org/eclipse/jetty/http/MultiPartParserTest.java @@ -155,18 +155,16 @@ public class MultiPartParserTest List fields = new ArrayList<>(); MultiPartParser parser = new MultiPartParser(new MultiPartParser.Handler() { - @Override public void parsedHeader(String name, String value) { - new Throwable().printStackTrace(); fields.add(name+": "+value); } @Override public boolean headerComplete() { - fields.add("COMPLETE!"); + fields.add("<>"); return true; } @@ -183,10 +181,220 @@ public class MultiPartParserTest parser.parse(data,false); assertTrue(parser.isState(State.PART)); assertThat(data.remaining(),is(7)); - assertThat(fields,Matchers.contains("name0: value0","name1: value1", "name2: value 2", "COMPLETE!")); + assertThat(fields,Matchers.contains("name0: value0","name1: value1", "name2: value 2", "<>")); } + @Test + public void testFirstPartNoContent() + { + List fields = new ArrayList<>(); + List content = new ArrayList<>(); + MultiPartParser parser = new MultiPartParser(new MultiPartParser.Handler() + { + + @Override + public void parsedHeader(String name, String value) + { + fields.add(name+": "+value); + } + + @Override + public boolean headerComplete() + { + fields.add("<>"); + return true; + } + + @Override + public boolean content(ByteBuffer buffer, boolean last) + { + if (BufferUtil.hasContent(buffer)) + content.add(BufferUtil.toString(buffer)); + if (last) + content.add("<>"); + return last; + } + + },"BOUNDARY"); + ByteBuffer data = BufferUtil.toBuffer(""); + + data = BufferUtil.toBuffer("--BOUNDARY\r\n" + + "name: value\n" + + "\r\n" + + "--BOUNDARY\r\n"); + parser.parse(data,false); + assertTrue(parser.isState(State.BODY_PART)); + assertThat(data.remaining(),is(0)); + assertThat(fields,Matchers.contains("name: value", "<>")); + assertThat(content,Matchers.contains("<>")); + + + } + + + @Test + public void testFirstPartPartialContent() + { + List fields = new ArrayList<>(); + List content = new ArrayList<>(); + MultiPartParser parser = new MultiPartParser(new MultiPartParser.Handler() + { + + @Override + public void parsedHeader(String name, String value) + { + fields.add(name+": "+value); + } + + @Override + public boolean headerComplete() + { + fields.add("<>"); + return true; + } + + @Override + public boolean content(ByteBuffer buffer, boolean last) + { + if (BufferUtil.hasContent(buffer)) + content.add(BufferUtil.toString(buffer)); + if (last) + content.add("<>"); + return last; + } + + },"BOUNDARY"); + ByteBuffer data = BufferUtil.toBuffer(""); + + data = BufferUtil.toBuffer("--BOUNDARY\r\n" + + "name: value\n" + + "\r\n" + + "Hello\r\n"); + parser.parse(data,false); + assertTrue(parser.isState(State.PART)); + assertThat(data.remaining(),is(0)); + assertThat(fields,Matchers.contains("name: value", "<>")); + assertThat(content,Matchers.contains("Hello")); + + data = BufferUtil.toBuffer( + "Now is the time for all good ment to come to the aid of the party.\r\n" + + "How now brown cow.\r\n" + + "The quick brown fox jumped over the lazy dog.\r\n" + + "this is not a --BOUNDARY\r\n"); + parser.parse(data,false); + assertTrue(parser.isState(State.PART)); + assertThat(data.remaining(),is(0)); + assertThat(fields,Matchers.contains("name: value", "<>")); + assertThat(content,Matchers.contains("Hello","Now is the time for all good ment to come to the aid of the party.\r\n" + + "How now brown cow.\r\n" + + "The quick brown fox jumped over the lazy dog.\r\n" + + "this is not a --BOUNDARY\r\n")); + + + + } + + + + @Test + public void testFirstPartShortContent() + { + List fields = new ArrayList<>(); + List content = new ArrayList<>(); + MultiPartParser parser = new MultiPartParser(new MultiPartParser.Handler() + { + + @Override + public void parsedHeader(String name, String value) + { + fields.add(name+": "+value); + } + + @Override + public boolean headerComplete() + { + fields.add("<>"); + return true; + } + + @Override + public boolean content(ByteBuffer buffer, boolean last) + { + if (BufferUtil.hasContent(buffer)) + content.add(BufferUtil.toString(buffer)); + if (last) + content.add("<>"); + return last; + } + + },"BOUNDARY"); + ByteBuffer data = BufferUtil.toBuffer(""); + + data = BufferUtil.toBuffer("--BOUNDARY\r\n" + + "name: value\n" + + "\r\n" + + "Hello\r\n" + + "--BOUNDARY\r\n"); + parser.parse(data,false); + assertTrue(parser.isState(State.BODY_PART)); + assertThat(data.remaining(),is(0)); + assertThat(fields,Matchers.contains("name: value", "<>")); + assertThat(content,Matchers.contains("Hello","<>")); + + + } + + + @Test + public void testFirstPartLongContent() + { + List fields = new ArrayList<>(); + List content = new ArrayList<>(); + MultiPartParser parser = new MultiPartParser(new MultiPartParser.Handler() + { + + @Override + public void parsedHeader(String name, String value) + { + fields.add(name+": "+value); + } + + @Override + public boolean headerComplete() + { + fields.add("<>"); + return true; + } + + @Override + public boolean content(ByteBuffer buffer, boolean last) + { + if (BufferUtil.hasContent(buffer)) + content.add(BufferUtil.toString(buffer)); + if (last) + content.add("<>"); + return last; + } + + },"BOUNDARY"); + ByteBuffer data = BufferUtil.toBuffer(""); + + data = BufferUtil.toBuffer("--BOUNDARY\r\n" + + "name: value\n" + + "\r\n" + + "Now is the time for all good ment to come to the aid of the party.\r\n" + + "How now brown cow.\r\n" + + "The quick brown fox jumped over the lazy dog.\r\n" + + "--BOUNDARY\r\n"); + parser.parse(data,false); + assertTrue(parser.isState(State.BODY_PART)); + assertThat(data.remaining(),is(0)); + assertThat(fields,Matchers.contains("name: value", "<>")); + assertThat(content,Matchers.contains("Now is the time for all good ment to come to the aid of the party.\r\n" + + "How now brown cow.\r\n" + + "The quick brown fox jumped over the lazy dog.\r\n","<>")); + } }