--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/net/URLConnection/Responses.java Sat Dec 01 00:00:00 2007 +0000
@@ -0,0 +1,172 @@
+/*
+ * Copyright 2002 Sun Microsystems, Inc. All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/*
+ * @test
+ * @bug 4635698
+ * @summary Check that HttpURLConnection.getResponseCode returns -1 for
+ * malformed status-lines in the http response.
+ */
+import java.net.*;
+import java.io.*;
+
+public class Responses {
+
+ /*
+ * Test cases :-
+ * "Response from server" expected getResponse() and
+ * getResponseMessage() results
+ */
+ static Object[][] getTests() {
+ return new Object[][] {
+ { "HTTP/1.1 200 OK", "200", "OK" },
+ { "HTTP/1.1 404 ", "404", null },
+ { "HTTP/1.1 200", "200", null },
+ { "HTTP/1.1", "-1", null },
+ { "Invalid", "-1", null },
+ { null, "-1" , null },
+ };
+ }
+
+ /*
+ * Simple http server used by test
+ *
+ * GET /<n> HTTP/1.x results in http response with the status line
+ * set to geTests()[<n>][0] -- eg: GET /2 results in a response of
+ * "HTTP/1.1 404 "
+ */
+ static class HttpServer implements Runnable {
+ ServerSocket ss;
+
+ public HttpServer() {
+ try {
+ ss = new ServerSocket(0);
+ } catch (IOException ioe) {
+ throw new Error("Unable to create ServerSocket: " + ioe);
+ }
+ }
+
+ public int port() {
+ return ss.getLocalPort();
+ }
+
+ public void shutdown() throws IOException {
+ ss.close();
+ }
+
+ public void run() {
+ Object[][] tests = getTests();
+
+ try {
+ for (;;) {
+ Socket s = ss.accept();
+
+ BufferedReader in = new BufferedReader(
+ new InputStreamReader(
+ s.getInputStream()));
+ String req = in.readLine();
+ int pos1 = req.indexOf(' ');
+ int pos2 = req.indexOf(' ', pos1+1);
+
+ int i = Integer.parseInt(req.substring(pos1+2, pos2));
+
+ PrintStream out = new PrintStream(
+ new BufferedOutputStream(
+ s.getOutputStream() ));
+
+ out.print( tests[i][0] );
+ out.print("\r\n");
+ out.print("Content-Length: 0\r\n");
+ out.print("Connection: close\r\n");
+ out.print("\r\n");
+ out.flush();
+
+ s.shutdownOutput();
+ s.close();
+ }
+ } catch (Exception e) {
+ }
+ }
+ }
+
+
+ public static void main(String args[]) throws Exception {
+
+ /* start the http server */
+ HttpServer svr = new HttpServer();
+ (new Thread(svr)).start();
+
+ int port = svr.port();
+
+ /*
+ * Iterate through each test case and check that getResponseCode
+ * returns the expected result.
+ */
+ int failures = 0;
+ Object tests[][] = getTests();
+ for (int i=0; i<tests.length; i++) {
+
+ System.out.println("******************");
+ System.out.println("Test with response: >" + tests[i][0] + "<");
+
+ URL url = new URL("http://localhost:" + port + "/" + i);
+ HttpURLConnection http = (HttpURLConnection)url.openConnection();
+
+ try {
+
+ // test getResponseCode
+ //
+ int expectedCode = Integer.parseInt((String)tests[i][1]);
+ int actualCode = http.getResponseCode();
+ if (actualCode != expectedCode) {
+ System.out.println("getResponseCode returned: " + actualCode +
+ ", expected: " + expectedCode);
+ failures++;
+ continue;
+ }
+
+ // test getResponseMessage
+ //
+ String expectedPhrase = (String)tests[i][2];
+ String actualPhrase = http.getResponseMessage();
+ if (actualPhrase == null && expectedPhrase == null) {
+ continue;
+ }
+ if (!actualPhrase.equals(expectedPhrase)) {
+ System.out.println("getResponseMessage returned: " +
+ actualPhrase + ", expected: " + expectedPhrase);
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ failures++;
+ }
+ }
+
+ /* shutdown http server */
+ svr.shutdown();
+
+ if (failures > 0) {
+ throw new Exception(failures + " sub-test(s) failed.");
+ }
+ }
+}