📄 httpservertestbase.java
字号:
os.flush(); Thread.sleep(1000); os.write(( "abcdefghij" ).getBytes()); os.flush(); Thread.sleep(1000); os.write(( "0987654321\r\n" ).getBytes()); os.flush(); int total=0; int len=0; byte[] buf=new byte[1024*64]; while(len>=0) { Thread.sleep(500); len=is.read(buf); if (len>0) total+=len; } assertTrue(total>(1024*256)); assertTrue(30000L>(System.currentTimeMillis()-start)); } finally { // Shut down server.stop(); Thread.yield(); } } /** * After several iterations, I generated some known bad fragment points. * * @throws Exception */ public void testPipeline() throws Exception { Server server=startServer(new HelloWorldHandler()); try { for (int pipeline=1;pipeline<32;pipeline++) { Socket client=new Socket(HOST,port); client.setSoTimeout(5000); OutputStream os=client.getOutputStream(); String request=""; for (int i=1;i<pipeline;i++) request+= "GET /data?writes=1&block=16&id="+i+" HTTP/1.1\r\n"+ "host: "+HOST+":"+port+"\r\n"+ "user-agent: testharness/1.0 (blah foo/bar)\r\n"+ "accept-encoding: nothing\r\n"+ "cookie: aaa=1234567890\r\n"+ "\r\n"; request+= "GET /data?writes=1&block=16 HTTP/1.1\r\n"+ "host: "+HOST+":"+port+"\r\n"+ "user-agent: testharness/1.0 (blah foo/bar)\r\n"+ "accept-encoding: nothing\r\n"+ "cookie: aaa=bbbbbb\r\n"+ "Connection: close\r\n"+ "\r\n"; os.write(request.getBytes()); os.flush(); LineNumberReader in = new LineNumberReader(new InputStreamReader(client.getInputStream())); String line = in.readLine(); int count=0; while (line!=null) { if ("HTTP/1.1 200 OK".equals(line)) count++; line = in.readLine(); } assertEquals(pipeline,count); } } finally { // Shut down server.stop(); Thread.yield(); } } public void testStoppable() throws Exception { Server server=startServer(null); server.setThreadPool(new BoundedThreadPool()); server.start(); Thread.sleep(1000); server.stop(); } /** */ public void testRecycledWriters() throws Exception { Server server=startServer(new EchoHandler()); try { long start=System.currentTimeMillis(); Socket client=new Socket(HOST,port); OutputStream os=client.getOutputStream(); InputStream is=client.getInputStream(); os.write(( "POST /echo?charset=utf-8 HTTP/1.1\r\n"+ "host: "+HOST+":"+port+"\r\n"+ "content-type: text/plain; charset=utf-8\r\n"+ "content-length: 10\r\n"+ "\r\n").getBytes("iso-8859-1")); os.write(( "123456789\n" ).getBytes("utf-8")); os.write(( "POST /echo?charset=utf-8 HTTP/1.1\r\n"+ "host: "+HOST+":"+port+"\r\n"+ "content-type: text/plain; charset=utf-8\r\n"+ "content-length: 10\r\n"+ "\r\n" ).getBytes("iso-8859-1")); os.write(( "abcdefghi\n" ).getBytes("utf-8")); String content="Wibble"; byte[] contentB=content.getBytes("utf-8"); os.write(( "POST /echo?charset=utf-16 HTTP/1.1\r\n"+ "host: "+HOST+":"+port+"\r\n"+ "content-type: text/plain; charset=utf-8\r\n"+ "content-length: "+contentB.length+"\r\n"+ "connection: close\r\n"+ "\r\n" ).getBytes("iso-8859-1")); os.write(contentB); os.flush(); ByteArrayOutputStream bout = new ByteArrayOutputStream(); IO.copy(is,bout); byte[] b=bout.toByteArray(); String in = new String(b,0,b.length,"utf-8"); assertTrue(in.indexOf("123456789")>=0); assertTrue(in.indexOf("abcdefghi")>=0); assertTrue(in.indexOf("Wibble")<0); in = new String(b,0,b.length,"utf-16"); assertTrue(in.indexOf("123456789")<0); assertTrue(in.indexOf("abcdefghi")<0); assertTrue(in.indexOf("Wibble")>=0); } finally { // Shut down server.stop(); Thread.yield(); } } /** */ public void testRecycledReaders() throws Exception { Server server=startServer(new EchoHandler()); try { long start=System.currentTimeMillis(); Socket client=new Socket(HOST,port); OutputStream os=client.getOutputStream(); InputStream is=client.getInputStream(); os.write(( "POST /echo?charset=utf-8 HTTP/1.1\r\n"+ "host: "+HOST+":"+port+"\r\n"+ "content-type: text/plain; charset=utf-8\r\n"+ "content-length: 10\r\n"+ "\r\n").getBytes("iso-8859-1")); os.write(( "123456789\n" ).getBytes("utf-8")); os.write(( "POST /echo?charset=utf-8 HTTP/1.1\r\n"+ "host: "+HOST+":"+port+"\r\n"+ "content-type: text/plain; charset=utf-8\r\n"+ "content-length: 10\r\n"+ "\r\n" ).getBytes("iso-8859-1")); os.write(( "abcdefghi\n" ).getBytes("utf-8")); String content="Wibble"; byte[] contentB=content.getBytes("utf-16"); os.write(( "POST /echo?charset=utf-8 HTTP/1.1\r\n"+ "host: "+HOST+":"+port+"\r\n"+ "content-type: text/plain; charset=utf-16\r\n"+ "content-length: "+contentB.length+"\r\n"+ "connection: close\r\n"+ "\r\n" ).getBytes("iso-8859-1")); os.write(contentB); os.flush(); String in = IO.toString(is); assertTrue(in.indexOf("123456789")>=0); assertTrue(in.indexOf("abcdefghi")>=0); assertTrue(in.indexOf("Wibble")>=0); } finally { // Shut down server.stop(); Thread.yield(); } } /** * Read entire response from the client. Close the output. * * @param client * Open client socket. * * @return The response string. * * @throws IOException */ private static String readResponse(Socket client) throws IOException { BufferedReader br=null; try { br=new BufferedReader(new InputStreamReader(client.getInputStream())); StringBuffer sb=new StringBuffer(); String line; while ((line=br.readLine())!=null) { sb.append(line); sb.append('\n'); } return sb.toString(); } finally { if (br!=null) { br.close(); } } } protected HttpServerTestBase(Connector connector) { _connector=connector; } /** * Create the server. * * @param handler * * @return Newly created server, ready to start. * * @throws Exception */ private Server startServer(Handler handler) throws Exception { Server server=new Server(); _connector.setPort(0); server.setConnectors(new Connector[] { _connector }); server.setHandler(handler); server.start(); port=_connector.getLocalPort(); return server; } private void writeFragments(byte[] bytes, int[] points, StringBuffer message, OutputStream os) throws IOException, InterruptedException { int last=0; // Write out the fragments for (int j=0; j<points.length; ++j) { int point=points[j]; os.write(bytes,last,point-last); last=point; os.flush(); Thread.sleep(PAUSE); // Update the log message message.append(" point #"+(j+1)+": "+point); } // Write the last fragment os.write(bytes,last,bytes.length-last); os.flush(); Thread.sleep(PAUSE); } // ~ Inner Classes // ---------------------------------------------------------- private static class EchoHandler extends AbstractHandler { // ~ Methods // ------------------------------------------------------------ public void handle(String target, HttpServletRequest request, HttpServletResponse response, int dispatch) throws IOException, ServletException { Request base_request=(request instanceof Request)?(Request)request:HttpConnection.getCurrentConnection().getRequest(); base_request.setHandled(true); if (request.getContentType()!=null) response.setContentType(request.getContentType()); if (request.getParameter("charset")!=null) response.setCharacterEncoding(request.getParameter("charset")); else if (request.getCharacterEncoding()!=null) response.setCharacterEncoding(request.getCharacterEncoding()); PrintWriter writer=response.getWriter(); BufferedReader reader=request.getReader(); int count=0; String line; while ((line=reader.readLine())!=null) { writer.print(line); writer.print("\n"); count+=line.length(); } if (count==0) throw new IllegalStateException("no input recieved"); // just to be difficult reader.close(); writer.close(); if (reader.read()>=0) throw new IllegalStateException("Not closed"); } } // ---------------------------------------------------------- private static class HelloWorldHandler extends AbstractHandler { // ------------------------------------------------------------ public void handle(String target, HttpServletRequest request, HttpServletResponse response, int dispatch) throws IOException, ServletException { Request base_request=(request instanceof Request)?(Request)request:HttpConnection.getCurrentConnection().getRequest(); base_request.setHandled(true); response.setStatus(200); response.getOutputStream().print("Hello world\r\n"); } } // ---------------------------------------------------------- private static class DataHandler extends AbstractHandler { // ------------------------------------------------------------ public void handle(String target, HttpServletRequest request, HttpServletResponse response, int dispatch) throws IOException, ServletException { Request base_request=(request instanceof Request)?(Request)request:HttpConnection.getCurrentConnection().getRequest(); base_request.setHandled(true); response.setStatus(200); InputStream in = request.getInputStream(); String input=IO.toString(in); String tmp = request.getParameter("writes"); int writes=Integer.parseInt(tmp==null?"10":tmp); tmp = request.getParameter("block"); int block=Integer.parseInt(tmp==null?"10":tmp); String encoding=request.getParameter("encoding"); String chars=request.getParameter("chars"); String chunk = (input+"\u0a870123456789A\u0a87CDEFGHIJKLMNOPQRSTUVWXYZ\u0250bcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz") .substring(0,block); response.setContentType("text/plain"); if (encoding==null) { byte[] bytes=chunk.getBytes("ISO-8859-1"); OutputStream out=response.getOutputStream(); for (int i=0;i<writes;i++) out.write(bytes); } else if ("true".equals(chars)) { response.setCharacterEncoding(encoding); Writer out=response.getWriter(); char[] c=chunk.toCharArray(); for (int i=0;i<writes;i++) out.write(c); } else { response.setCharacterEncoding(encoding); Writer out=response.getWriter(); for (int i=0;i<writes;i++) out.write(chunk); } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -