1/* 2 * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24/** 25 * @test 26 * @bug 6270015 27 * @library /lib/testlibrary/ 28 * @build jdk.testlibrary.SimpleSSLContext 29 * @run main/othervm Test8a 30 * @summary Light weight HTTP server 31 */ 32 33import com.sun.net.httpserver.*; 34 35import java.util.concurrent.*; 36import java.io.*; 37import java.net.*; 38import javax.net.ssl.*; 39import jdk.testlibrary.SimpleSSLContext; 40 41/** 42 * Test POST large file via fixed len encoding 43 */ 44 45public class Test8a extends Test { 46 47 public static void main (String[] args) throws Exception { 48 //Logger log = Logger.getLogger ("com.sun.net.httpserver"); 49 //ConsoleHandler h = new ConsoleHandler(); 50 //h.setLevel (Level.INFO); 51 //log.addHandler (h); 52 //log.setLevel (Level.INFO); 53 HttpsServer server = null; 54 ExecutorService executor = null; 55 try { 56 Handler handler = new Handler(); 57 InetSocketAddress addr = new InetSocketAddress (0); 58 server = HttpsServer.create (addr, 0); 59 HttpContext ctx = server.createContext ("/test", handler); 60 executor = Executors.newCachedThreadPool(); 61 SSLContext ssl = new SimpleSSLContext().get(); 62 server.setHttpsConfigurator(new HttpsConfigurator (ssl)); 63 server.setExecutor (executor); 64 server.start (); 65 66 URL url = new URL ("https://localhost:"+server.getAddress().getPort()+"/test/foo.html"); 67 System.out.print ("Test8a: " ); 68 HttpsURLConnection urlc = (HttpsURLConnection)url.openConnection (); 69 urlc.setDoOutput (true); 70 urlc.setRequestMethod ("POST"); 71 urlc.setHostnameVerifier (new DummyVerifier()); 72 urlc.setSSLSocketFactory (ssl.getSocketFactory()); 73 OutputStream os = new BufferedOutputStream (urlc.getOutputStream(), 8000); 74 for (int i=0; i<SIZE; i++) { 75 os.write (i % 250); 76 } 77 os.close(); 78 int resp = urlc.getResponseCode(); 79 if (resp != 200) { 80 throw new RuntimeException ("test failed response code"); 81 } 82 InputStream is = urlc.getInputStream (); 83 for (int i=0; i<SIZE; i++) { 84 int f = is.read(); 85 if (f != (i % 250)) { 86 System.out.println ("Setting error(" +f +")("+i+")" ); 87 error = true; 88 break; 89 } 90 } 91 is.close(); 92 } finally { 93 delay(); 94 if (server != null) server.stop(2); 95 if (executor != null) executor.shutdown(); 96 } 97 if (error) { 98 throw new RuntimeException ("test failed error"); 99 } 100 System.out.println ("OK"); 101 102 } 103 104 public static boolean error = false; 105 //final static int SIZE = 999999; 106 final static int SIZE = 9999; 107 108 static class Handler implements HttpHandler { 109 int invocation = 1; 110 public void handle (HttpExchange t) 111 throws IOException 112 { 113 System.out.println ("Handler.handle"); 114 InputStream is = t.getRequestBody(); 115 Headers map = t.getRequestHeaders(); 116 Headers rmap = t.getResponseHeaders(); 117 int c, count=0; 118 while ((c=is.read ()) != -1) { 119 if (c != (count % 250)) { 120 System.out.println ("Setting error 1"); 121 error = true; 122 break; 123 } 124 count ++; 125 } 126 if (count != SIZE) { 127 System.out.println ("Setting error 2"); 128 error = true; 129 } 130 is.close(); 131 t.sendResponseHeaders (200, SIZE); 132 System.out.println ("Sending 200 OK"); 133 OutputStream os = new BufferedOutputStream(t.getResponseBody(), 8000); 134 for (int i=0; i<SIZE; i++) { 135 os.write (i % 250); 136 } 137 os.close(); 138 System.out.println ("Finished"); 139 } 140 } 141} 142