This is the mail archive of the
mauve-patches@sourceware.org
mailing list for the Mauve project.
FYI: New HttpURLConnection test...
- From: David Daney <ddaney at avtrex dot com>
- To: Mauve Patch List <mauve-patches at sources dot redhat dot com>
- Date: Wed, 20 Sep 2006 11:13:52 -0700
- Subject: FYI: New HttpURLConnection test...
I just committed this new test.
It will fail on classpath, see PR classpath/28661. I plan on committing
the classpath fix shortly.
2006-09-20 David Daney <ddaney@avtrex.com>
* gnu/testlet/java/net/HttpURLConnection/TestHttpServer.java
(ConnectionHandler.getHeaderFromList): New method.
* gnu/testlet/java/net/HttpURLConnection/postHeaders.java: New test.
Index: gnu/testlet/java/net/HttpURLConnection/TestHttpServer.java
===================================================================
RCS file: /cvs/mauve/mauve/gnu/testlet/java/net/HttpURLConnection/TestHttpServer.java,v
retrieving revision 1.2
diff -u -p -r1.2 TestHttpServer.java
--- gnu/testlet/java/net/HttpURLConnection/TestHttpServer.java 11 Aug 2006 20:00:50 -0000 1.2
+++ gnu/testlet/java/net/HttpURLConnection/TestHttpServer.java 20 Sep 2006 18:05:59 -0000
@@ -79,7 +79,21 @@ public final class TestHttpServer implem
*/
protected abstract boolean processConnection(List headers, byte[] body)
throws IOException;
-
+
+ protected String getHeaderFromList(List headers, String h)
+ {
+ String search = (h + ":").toLowerCase();
+ Iterator it = headers.iterator();
+ while (it.hasNext())
+ {
+ String v = (String)it.next();
+ String k = v.toLowerCase();
+ if (k.startsWith(search))
+ return v.substring(search.length()).trim();
+ }
+ return null;
+ }
+
public void run()
{
try
Index: gnu/testlet/java/net/HttpURLConnection/postHeaders.java
===================================================================
RCS file: gnu/testlet/java/net/HttpURLConnection/postHeaders.java
diff -N gnu/testlet/java/net/HttpURLConnection/postHeaders.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gnu/testlet/java/net/HttpURLConnection/postHeaders.java 20 Sep 2006 18:05:59 -0000
@@ -0,0 +1,145 @@
+//Tags: JDK1.1
+//Uses: TestHttpServer
+
+//Copyright (C) 2006 David Daney <ddaney@avtrex.com>
+
+//This file is part of Mauve.
+
+//Mauve is free software; you can redistribute it and/or modify
+//it under the terms of the GNU General Public License as published by
+//the Free Software Foundation; either version 2, or (at your option)
+//any later version.
+
+//Mauve is distributed in the hope that it will be useful,
+//but WITHOUT ANY WARRANTY; without even the implied warranty of
+//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+//GNU General Public License for more details.
+
+//You should have received a copy of the GNU General Public License
+//along with Mauve; see the file COPYING. If not, write to
+//the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+//Boston, MA, 02110-1301 USA.
+
+package gnu.testlet.java.net.HttpURLConnection;
+
+import gnu.testlet.TestHarness;
+import gnu.testlet.Testlet;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.net.HttpURLConnection;
+import java.net.Socket;
+import java.net.URL;
+import java.util.List;
+
+/**
+ * Tests that POST sends correct headers.
+ */
+public class postHeaders implements Testlet
+{
+ /**
+ * Starts an HTTP server and runs some tests
+ */
+ public void test(TestHarness h)
+ {
+ TestHttpServer server = null;
+ try
+ {
+ try
+ {
+ server = new TestHttpServer();
+ }
+ catch (IOException ioe)
+ {
+ h.debug(ioe);
+ h.fail("Could not start server");
+ return;
+ }
+
+ test_POST(h, server);
+ server.closeAllConnections();
+ }
+ finally
+ {
+ if (server != null)
+ server.killTestServer();
+ }
+ }
+
+ static class FactoryP1 implements TestHttpServer.ConnectionHandlerFactory
+ {
+ FactoryP1()
+ {
+ }
+
+ public TestHttpServer.ConnectionHandler newConnectionHandler(Socket s)
+ throws IOException
+ {
+ return new HandlerP1(s);
+ }
+ }
+
+ static class HandlerP1 extends TestHttpServer.ConnectionHandler
+ {
+ private Writer sink;
+
+ HandlerP1(Socket socket) throws IOException
+ {
+ super(socket);
+ sink = new OutputStreamWriter(output,"US-ASCII");
+ }
+
+ protected boolean processConnection(List headers, byte[] body)
+ throws IOException
+ {
+ String request = (String)headers.get(0);
+ String contentType = getHeaderFromList(headers, "content-type");
+ if (!request.startsWith("POST ")
+ || contentType == null
+ || !contentType.equals("application/x-www-form-urlencoded"))
+ {
+ sink.write("HTTP/1.1 400 Bad Request\r\n");
+ sink.write("Server: TestServer\r\n");
+ sink.write("Connection: close\r\n");
+ sink.write("\r\n");
+ sink.flush();
+ return false;
+ }
+ sink.write("HTTP/1.1 204 No Content\r\n");
+ sink.write("Server: TestServer\r\n");
+ sink.write("\r\n");
+ sink.flush();
+ return true;
+ }
+ }
+
+ public void test_POST(TestHarness h, TestHttpServer server)
+ {
+ try
+ {
+ byte data[] = new byte[] {'M', 'e', 's', 's', 'a', 'g', 'e'};
+
+ h.checkPoint("POST-1");
+ server.setConnectionHandlerFactory(new FactoryP1());
+
+ URL url = new URL("http://localhost:" + server.getPort() + "/file1");
+ HttpURLConnection conn = (HttpURLConnection) url.openConnection();
+ conn.setRequestMethod("POST");
+ conn.setDoOutput(true);
+ OutputStream os = conn.getOutputStream();
+ os.write(data);
+ os.close();
+
+ // test the responsecode
+ int code = conn.getResponseCode();
+ h.check(code, 204);
+ }
+ catch (IOException e)
+ {
+ h.debug("Unexpected IOException");
+ h.debug(e);
+ }
+ }
+}