From c8866bebc48ad50d1fcfeefbba866768900e3af2 Mon Sep 17 00:00:00 2001 From: mathiasdm Date: Thu, 10 Feb 2011 07:20:40 +0000 Subject: [PATCH 1/2] Added tests to fix HTTPTunnelServer header fix. --- apps/i2ptunnel/java/build.xml | 46 +++++++++++++++++++ .../i2p/i2ptunnel/I2PTunnelHTTPServer.java | 2 +- .../i2ptunnel/I2PTunnelHTTPServerTest.java | 45 ++++++++++++++++++ 3 files changed, 92 insertions(+), 1 deletion(-) create mode 100644 apps/i2ptunnel/java/test/net/i2p/i2ptunnel/I2PTunnelHTTPServerTest.java diff --git a/apps/i2ptunnel/java/build.xml b/apps/i2ptunnel/java/build.xml index f50fadd3e..163de6696 100644 --- a/apps/i2ptunnel/java/build.xml +++ b/apps/i2ptunnel/java/build.xml @@ -141,6 +141,52 @@ splitindex="true" windowtitle="I2PTunnel" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPServer.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPServer.java index 938a1ebcc..bafa0387c 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPServer.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPServer.java @@ -418,7 +418,7 @@ public class I2PTunnelHTTPServer extends I2PTunnelServer { } } - private static Map> readHeaders(InputStream in, StringBuilder command, String[] skipHeaders, I2PAppContext ctx) throws IOException { + protected static Map> readHeaders(InputStream in, StringBuilder command, String[] skipHeaders, I2PAppContext ctx) throws IOException { HashMap> headers = new HashMap>(); StringBuilder buf = new StringBuilder(128); diff --git a/apps/i2ptunnel/java/test/net/i2p/i2ptunnel/I2PTunnelHTTPServerTest.java b/apps/i2ptunnel/java/test/net/i2p/i2ptunnel/I2PTunnelHTTPServerTest.java new file mode 100644 index 000000000..f35787e55 --- /dev/null +++ b/apps/i2ptunnel/java/test/net/i2p/i2ptunnel/I2PTunnelHTTPServerTest.java @@ -0,0 +1,45 @@ +package net.i2p.i2ptunnel; + +import java.io.BufferedWriter; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStreamWriter; +import java.util.Map; +import java.util.List; + +import junit.framework.TestCase; + +public class I2PTunnelHTTPServerTest extends TestCase { + + public InputStream fillInputStream(String headers) throws IOException { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(baos)); + bw.write(headers); + bw.flush(); + byte[] bytes = baos.toByteArray(); + return new ByteArrayInputStream(bytes); + } + + public void testSimpleHeader() throws IOException { + String headerString = "GET /blah HTTP/1.1\r\n"; + headerString += "BLAH: something\r\n"; + headerString += "\r\n"; + InputStream in = fillInputStream(headerString); + Map> headers = I2PTunnelHTTPServer.readHeaders(in, new StringBuilder(128), new String[0], null); + assertEquals(headers.size(), 1); //One header + } + + public void testDuplicateHeader() throws IOException { + String headerString = "GET /something HTTP/1.1\r\n"; + headerString += "someHeader: blabla bla bloooo\r\n"; + headerString += "someHeader: oh my, duplication!\r\n"; + headerString += "\r\n"; + InputStream in = fillInputStream(headerString); + Map> headers = I2PTunnelHTTPServer.readHeaders(in, new StringBuilder(128), new String[0], null); + assertEquals(headers.size(), 1); + assertEquals(headers.get("someHeader").size(), 2); + } + +} From 29028342b4c8a12ee0654527bf5660cbc688c091 Mon Sep 17 00:00:00 2001 From: mathiasdm Date: Thu, 10 Feb 2011 17:09:18 +0000 Subject: [PATCH 2/2] Extra test to check if headers with the same key are maintained. --- .../net/i2p/i2ptunnel/I2PTunnelHTTPServer.java | 2 +- .../i2p/i2ptunnel/I2PTunnelHTTPServerTest.java | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPServer.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPServer.java index bafa0387c..4e8fdf6c9 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPServer.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPServer.java @@ -365,7 +365,7 @@ public class I2PTunnelHTTPServer extends I2PTunnelServer { } } - private static String formatHeaders(Map> headers, StringBuilder command) { + protected static String formatHeaders(Map> headers, StringBuilder command) { StringBuilder buf = new StringBuilder(command.length() + headers.size() * 64); buf.append(command.toString().trim()).append("\r\n"); for (Iterator iter = headers.keySet().iterator(); iter.hasNext(); ) { diff --git a/apps/i2ptunnel/java/test/net/i2p/i2ptunnel/I2PTunnelHTTPServerTest.java b/apps/i2ptunnel/java/test/net/i2p/i2ptunnel/I2PTunnelHTTPServerTest.java index f35787e55..8cd7cf322 100644 --- a/apps/i2ptunnel/java/test/net/i2p/i2ptunnel/I2PTunnelHTTPServerTest.java +++ b/apps/i2ptunnel/java/test/net/i2p/i2ptunnel/I2PTunnelHTTPServerTest.java @@ -41,5 +41,21 @@ public class I2PTunnelHTTPServerTest extends TestCase { assertEquals(headers.size(), 1); assertEquals(headers.get("someHeader").size(), 2); } + + public void testDuplicateHeadersFormat() throws IOException { + String headerString = "GET /something HTTP/1.1\r\n"; + headerString += "abc: def\r\n"; + headerString += "abc: blaaah\r\n"; + headerString += "manamana: toe toe toedoedoe\r\n"; + headerString += "\r\n"; + InputStream in = fillInputStream(headerString); + StringBuilder builder = new StringBuilder(128); + Map> headers = I2PTunnelHTTPServer.readHeaders(in, builder, new String[0], null); + String result = I2PTunnelHTTPServer.formatHeaders(headers, builder); + int first = result.indexOf("abc"); + assertTrue(first >= 0); + int second = result.indexOf("abc", first); + assertTrue(second >= 0); + } }