From c8866bebc48ad50d1fcfeefbba866768900e3af2 Mon Sep 17 00:00:00 2001
From: mathiasdm <mathiasdm@mail.i2p>
Date: Thu, 10 Feb 2011 07:20:40 +0000
Subject: [PATCH] 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 f50fadd3e1..163de66968 100644
--- a/apps/i2ptunnel/java/build.xml
+++ b/apps/i2ptunnel/java/build.xml
@@ -141,6 +141,52 @@
             splitindex="true" 
             windowtitle="I2PTunnel" />
     </target>
+
+    <target name="compileTest">
+        <mkdir dir="./build" />
+        <mkdir dir="./build/obj" />
+        <javac srcdir="./src:./test" debug="true" source="1.5" target="1.5" deprecation="on" destdir="./build/obj" >
+            <compilerarg line="${javac.compilerargs}" />
+            <classpath>
+                <pathelement location="../../../core/java/build/i2p.jar" />
+                <pathelement location="../../ministreaming/java/build/mstreaming.jar" />
+            </classpath>
+        </javac>
+    </target>
+    <target name="test" depends="clean, compileTest">
+        <junit printsummary="on" fork="yes">
+            <classpath>
+                <pathelement path="${classpath}" />
+                <pathelement location="./build/obj" />
+                <pathelement location="../../../core/java/build/i2p.jar" />
+            </classpath>
+            <batchtest>
+                <fileset dir="./test/">
+                    <include name="**/*Test.java" />
+                </fileset>
+            </batchtest>
+            <formatter type="xml"/>
+        </junit>
+        <mkdir dir="../../../reports/" />
+        <mkdir dir="../../../reports/i2ptunnel/" />
+        <mkdir dir="../../../reports/i2ptunnel/junit/" />
+        <delete>
+            <fileset dir="../../../reports/i2ptunnel/junit">
+                <include name="TEST-*.xml"/>
+            </fileset>
+        </delete>
+        <copy todir="../../../reports/i2ptunnel/junit">
+            <fileset dir=".">
+                <include name="TEST-*.xml"/>
+            </fileset>
+        </copy>
+        <delete>
+            <fileset dir=".">
+                <include name="TEST-*.xml"/>
+            </fileset>
+        </delete>
+    </target>
+
     <target name="clean">
         <delete dir="./build" />
         <delete dir="../jsp/WEB-INF/" />
diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPServer.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPServer.java
index 938a1ebcc7..bafa0387cf 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<String, List<String>> readHeaders(InputStream in, StringBuilder command, String[] skipHeaders, I2PAppContext ctx) throws IOException {
+    protected static Map<String, List<String>> readHeaders(InputStream in, StringBuilder command, String[] skipHeaders, I2PAppContext ctx) throws IOException {
     	HashMap<String, List<String>> headers = new HashMap<String, List<String>>();
         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 0000000000..f35787e558
--- /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<String, List<String>> 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<String, List<String>> headers = I2PTunnelHTTPServer.readHeaders(in, new StringBuilder(128), new String[0], null);
+		assertEquals(headers.size(), 1);
+		assertEquals(headers.get("someHeader").size(), 2);
+	}
+
+}
-- 
GitLab