⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 httpgeneratorclienttest.java

📁 是离开的肌肤了卡机是离开的就富利卡及是了的开发及拉考试及的福利科技阿斯利康的肌肤莱卡及时的离开福建阿斯顿发
💻 JAVA
字号:
//========================================================================//Copyright 2004-2008 Mort Bay Consulting Pty. Ltd.//------------------------------------------------------------------------//Licensed under the Apache License, Version 2.0 (the "License");//you may not use this file except in compliance with the License.//You may obtain a copy of the License at //http://www.apache.org/licenses/LICENSE-2.0//Unless required by applicable law or agreed to in writing, software//distributed under the License is distributed on an "AS IS" BASIS,//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.//See the License for the specific language governing permissions and//limitations under the License.//========================================================================package org.mortbay.jetty;import java.io.IOException;import org.mortbay.io.Buffer;import org.mortbay.io.ByteArrayBuffer;import org.mortbay.io.ByteArrayEndPoint;import org.mortbay.io.SimpleBuffers;import org.mortbay.io.View;import junit.framework.TestCase;public class HttpGeneratorClientTest extends TestCase{    public final static String CONTENT="The quick brown fox jumped over the lazy dog.\nNow is the time for all good men to come to the aid of the party\nThe moon is blue to a fish in love.\n";    public final static String[] connect={null,"keep-alive","close"};    public HttpGeneratorClientTest(String arg0)    {        super(arg0);    }    public static void main(String[] args)    {        junit.textui.TestRunner.run(HttpGeneratorTest.class);    }    public void testContentLength()        throws Exception    {        Buffer bb=new ByteArrayBuffer(8096);        Buffer sb=new ByteArrayBuffer(1500);        ByteArrayEndPoint endp = new ByteArrayEndPoint(new byte[0],4096);        HttpGenerator generator = new HttpGenerator(new SimpleBuffers(new Buffer[]{sb,bb}),endp, sb.capacity(), bb.capacity());                generator.setRequest("GET","/usr");                HttpFields fields = new HttpFields();        fields.add("Header","Value");        fields.add("Content-Type","text/plain");                String content = "The quick brown fox jumped over the lazy dog";        fields.addLongField("Content-Length",content.length());                generator.completeHeader(fields,false);                generator.addContent(new ByteArrayBuffer(content),true);        generator.flush();        generator.complete();        generator.flush();                String result=endp.getOut().toString().replace("\r\n","|").replace('\r','|').replace('\n','|');        assertEquals("GET /usr HTTP/1.1|Header: Value|Content-Type: text/plain|Content-Length: 44||"+content,result);    }    public void testAutoContentLength()        throws Exception    {        Buffer bb=new ByteArrayBuffer(8096);        Buffer sb=new ByteArrayBuffer(1500);        ByteArrayEndPoint endp = new ByteArrayEndPoint(new byte[0],4096);        HttpGenerator generator = new HttpGenerator(new SimpleBuffers(new Buffer[]{sb,bb}),endp, sb.capacity(), bb.capacity());                generator.setRequest("GET","/usr");                HttpFields fields = new HttpFields();        fields.add("Header","Value");        fields.add("Content-Type","text/plain");                String content = "The quick brown fox jumped over the lazy dog";        generator.addContent(new ByteArrayBuffer(content),true);        generator.completeHeader(fields,true);                generator.flush();        generator.complete();        generator.flush();                String result=endp.getOut().toString().replace("\r\n","|").replace('\r','|').replace('\n','|');        assertEquals("GET /usr HTTP/1.1|Header: Value|Content-Type: text/plain|Content-Length: 44||"+content,result);    }    public void testChunked()        throws Exception    {        Buffer bb=new ByteArrayBuffer(8096);        Buffer sb=new ByteArrayBuffer(1500);        ByteArrayEndPoint endp = new ByteArrayEndPoint(new byte[0],4096);        HttpGenerator generator = new HttpGenerator(new SimpleBuffers(new Buffer[]{sb,bb}),endp, sb.capacity(), bb.capacity());                generator.setRequest("GET","/usr");                HttpFields fields = new HttpFields();        fields.add("Header","Value");        fields.add("Content-Type","text/plain");                String content = "The quick brown fox jumped over the lazy dog";        generator.completeHeader(fields,false);                generator.addContent(new ByteArrayBuffer(content),false);        generator.flush();        generator.complete();        generator.flush();                String result=endp.getOut().toString().replace("\r\n","|").replace('\r','|').replace('\n','|');        assertEquals("GET /usr HTTP/1.1|Header: Value|Content-Type: text/plain|Transfer-Encoding: chunked||2C|"+content+"|0||",result);    }        public void testHTTP()        throws Exception    {        Buffer bb=new ByteArrayBuffer(8096);        Buffer sb=new ByteArrayBuffer(1500);        HttpFields fields = new HttpFields();        ByteArrayEndPoint endp = new ByteArrayEndPoint(new byte[0],4096);        HttpGenerator hb = new HttpGenerator(new SimpleBuffers(new Buffer[]{sb,bb}),endp, sb.capacity(), bb.capacity());        Handler handler = new Handler();        HttpParser parser=null;                // For HTTP version        for (int v=9;v<=11;v++)        {            // For each test result            for (int r=0;r<tr.length;r++)            {                // chunks = 1 to 3                for (int chunks=1;chunks<=6;chunks++)                {                    // For none, keep-alive, close                    for (int c=0;c<connect.length;c++)                    {                        String t="v="+v+",r="+r+",chunks="+chunks+",c="+c+",tr="+tr[r];                        // System.err.println(t);                                                hb.reset(true);                        endp.reset();                        fields.clear();                        // System.out.println("TEST: "+t);                                                try                        {                            tr[r].build(v,hb,connect[c],null,chunks, fields);                        }                        catch(IllegalStateException e)                        {                            if (v<10 || v==10 && chunks>2)                                continue;                            System.err.println(t);                            throw e;                        }                        String request=endp.getOut().toString();                        // System.out.println(request+(hb.isPersistent()?"...\n":"---\n"));                                                assertTrue(t,hb.isPersistent());                                                if (v==9)                        {                            assertEquals(t,"GET /context/path/info\r\n", request);                            continue;                        }                                                parser=new HttpParser(new ByteArrayBuffer(request.getBytes()), handler);                        try                        {                            parser.parse();                        }                        catch(IOException e)                        {                            if (tr[r].body!=null)                                throw e;                            continue;                        }                                                if (tr[r].body!=null)                            assertEquals(t,tr[r].body, this.content);                        if (v==10)                            assertTrue(t,hb.isPersistent() || tr[r].values[1]==null || c==2 || c==0);                        else                            assertTrue(t,hb.isPersistent() ||  c==2);                                                assertTrue(t,tr[r].values[1]==null || content.length()==Integer.parseInt(tr[r].values[1]));                    }                }            }        }    }        static final String[] headers= { "Content-Type","Content-Length","Connection","Transfer-Encoding","Other"};    class TR    {        String[] values=new String[headers.length];        String body;                TR(String ct, String cl ,String content)        {            values[0]=ct;            values[1]=cl;            values[4]="value";            this.body=content;        }                void build(int version,HttpGenerator hb, String connection, String te, int chunks, HttpFields fields)                throws Exception        {            values[2]=connection;            values[3]=te;            hb.setRequest(HttpMethods.GET,"/context/path/info");            hb.setVersion(version);                        for (int i=0;i<headers.length;i++)            {                if (values[i]==null)                        continue;                fields.put(new ByteArrayBuffer(headers[i]),new ByteArrayBuffer(values[i]));            }                                    if (body!=null)            {                int inc=1+body.length()/chunks;                Buffer buf=new ByteArrayBuffer(body);                View view = new View(buf);                for (int i=1;i<chunks;i++)                {                    view.setPutIndex(i*inc);                    view.setGetIndex((i-1)*inc);                    hb.addContent(view,HttpGenerator.MORE);                    if (hb.isBufferFull() && hb.isState(HttpGenerator.STATE_HEADER))                        hb.completeHeader(fields, HttpGenerator.MORE);                    if (i%2==0)                    {                        if (hb.isState(HttpGenerator.STATE_HEADER))                        {                            if (version<11)                                fields.addLongField("Content-Length",body.length());                            hb.completeHeader(fields, HttpGenerator.MORE);                        }                        hb.flush();                    }                }                view.setPutIndex(buf.putIndex());                view.setGetIndex((chunks-1)*inc);                hb.addContent(view,HttpGenerator.LAST);                if(hb.isState(HttpGenerator.STATE_HEADER))                    hb.completeHeader(fields, HttpGenerator.LAST);            }            else            {                hb.completeHeader(fields, HttpGenerator.LAST);            }            hb.complete();        }                public String toString()        {            return "["+values[0]+","+values[1]+","+(body==null?"none":"_content")+"]";        }    }        private TR[] tr =    {      /* 0 */  new TR(null,null,null),      /* 1 */  new TR(null,null,CONTENT),      /* 3 */  new TR(null,""+CONTENT.length(),CONTENT),      /* 4 */  new TR("text/html",null,null),      /* 5 */  new TR("text/html",null,CONTENT),      /* 7 */  new TR("text/html",""+CONTENT.length(),CONTENT),    };        String content;    String f0;    String f1;    String f2;    String[] hdr;    String[] val;    int h;        class Handler extends HttpParser.EventHandler    {           int index=0;                public void content(Buffer ref)        {            if (index == 0)                content= "";            content= content.substring(0, index) + ref;            index+=ref.length();        }        public void startRequest(Buffer tok0, Buffer tok1, Buffer tok2)        {            h= -1;            hdr= new String[9];            val= new String[9];            f0= tok0.toString();            f1= tok1.toString();            if (tok2!=null)                f2= tok2.toString();            else                f2=null;            index=0;            // System.out.println(f0+" "+f1+" "+f2);        }        /* (non-Javadoc)         * @see org.mortbay.jetty.EventHandler#startResponse(org.mortbay.io.Buffer, int, org.mortbay.io.Buffer)         */        public void startResponse(Buffer version, int status, Buffer reason)        {            h= -1;            hdr= new String[9];            val= new String[9];            f0= version.toString();            f1= ""+status;            if (reason!=null)                f2= reason.toString();            else                f2=null;            index=0;        }        public void parsedHeader(Buffer name,Buffer value)        {            hdr[++h]= name.toString();            val[h]= value.toString();        }        public void headerComplete()        {            content= null;        }        public void messageComplete(long contentLength)        {        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -