12cdde11355e7c249e83a8b7aaabae5977bbc3e49Phil Goodwinpackage com.xtremelabs.robolectric.tester.org.apache.http;
2bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams
3bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williamsimport com.xtremelabs.robolectric.shadows.StatusLineStub;
4ba2ab5b2c11e72a692c624cd0ac2da8ec479c98dRick Kawalaimport org.apache.http.Header;
5ba2ab5b2c11e72a692c624cd0ac2da8ec479c98dRick Kawalaimport org.apache.http.HeaderIterator;
6ba2ab5b2c11e72a692c624cd0ac2da8ec479c98dRick Kawalaimport org.apache.http.HttpEntity;
7ba2ab5b2c11e72a692c624cd0ac2da8ec479c98dRick Kawalaimport org.apache.http.HttpVersion;
8ba2ab5b2c11e72a692c624cd0ac2da8ec479c98dRick Kawalaimport org.apache.http.ProtocolVersion;
9ba2ab5b2c11e72a692c624cd0ac2da8ec479c98dRick Kawalaimport org.apache.http.StatusLine;
1088748bc70223e557208926eca76033a38dcd044bLenny Turetsky & Tim Labeeuwimport org.apache.http.params.BasicHttpParams;
1188748bc70223e557208926eca76033a38dcd044bLenny Turetsky & Tim Labeeuwimport org.apache.http.params.HttpParams;
12bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams
13bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williamsimport java.io.ByteArrayInputStream;
14bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williamsimport java.io.IOException;
15bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williamsimport java.io.InputStream;
16bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williamsimport java.io.OutputStream;
1750462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkelimport java.util.ArrayList;
18ba2ab5b2c11e72a692c624cd0ac2da8ec479c98dRick Kawalaimport java.util.Collections;
1950462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkelimport java.util.List;
2050462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkelimport java.util.NoSuchElementException;
21bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams
22bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williamspublic class TestHttpResponse extends HttpResponseStub {
23bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams
24bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams    private int statusCode;
25863bb025cb3dbe9895f69d0f8fccff051de379daLenny Turetsky & Rick Kawala    private byte[] responseBody;
26bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams    private TestStatusLine statusLine = new TestStatusLine();
27bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams    private TestHttpEntity httpEntity = new TestHttpEntity();
289088d97a59b3864cc5f0fbe87dc72568619e27ebRyan Richard    private int openEntityContentStreamCount = 0;
2939f81d70bfc70857886cfffbd91aa2ea79322ba6Ryan Richard    private Header[] headers = new Header[0];
3088748bc70223e557208926eca76033a38dcd044bLenny Turetsky & Tim Labeeuw    private HttpParams params = new BasicHttpParams();
31bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams
320b54ac63d199069248799dd2a3b3aceeabcff267Ryan Richard    public TestHttpResponse() {
330b54ac63d199069248799dd2a3b3aceeabcff267Ryan Richard        this.statusCode = 200;
34863bb025cb3dbe9895f69d0f8fccff051de379daLenny Turetsky & Rick Kawala        this.responseBody = new byte[0];
350b54ac63d199069248799dd2a3b3aceeabcff267Ryan Richard    }
360b54ac63d199069248799dd2a3b3aceeabcff267Ryan Richard
37bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams    public TestHttpResponse(int statusCode, String responseBody) {
38bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams        this.statusCode = statusCode;
39863bb025cb3dbe9895f69d0f8fccff051de379daLenny Turetsky & Rick Kawala        this.responseBody = responseBody.getBytes();
40bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams    }
41bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams
4250462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel    public TestHttpResponse(int statusCode, String responseBody, Header... headers) {
43863bb025cb3dbe9895f69d0f8fccff051de379daLenny Turetsky & Rick Kawala        this(statusCode, responseBody.getBytes(), headers);
44863bb025cb3dbe9895f69d0f8fccff051de379daLenny Turetsky & Rick Kawala    }
45863bb025cb3dbe9895f69d0f8fccff051de379daLenny Turetsky & Rick Kawala
46863bb025cb3dbe9895f69d0f8fccff051de379daLenny Turetsky & Rick Kawala    public TestHttpResponse(int statusCode, byte[] responseBody, Header... headers) {
47863bb025cb3dbe9895f69d0f8fccff051de379daLenny Turetsky & Rick Kawala        this.statusCode = statusCode;
48863bb025cb3dbe9895f69d0f8fccff051de379daLenny Turetsky & Rick Kawala        this.responseBody = responseBody.clone();
49f61111cc68263f33e6fe1d9b29de305e5004e834Mike Grafton        this.headers = headers;
506f34840c49a26f54f62ead83509e3f64bed7e0cfNeal Sanche    }
516f34840c49a26f54f62ead83509e3f64bed7e0cfNeal Sanche
520b54ac63d199069248799dd2a3b3aceeabcff267Ryan Richard    protected void setResponseBody(String responseBody) {
53863bb025cb3dbe9895f69d0f8fccff051de379daLenny Turetsky & Rick Kawala        this.responseBody = responseBody.getBytes();
540b54ac63d199069248799dd2a3b3aceeabcff267Ryan Richard    }
550b54ac63d199069248799dd2a3b3aceeabcff267Ryan Richard
56bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams    @Override public StatusLine getStatusLine() {
57bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams        return statusLine;
58bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams    }
59bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams
60bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams    @Override public HttpEntity getEntity() {
61bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams        return httpEntity;
62bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams    }
63bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams
6440b5218d7ef608099101cae10739e95d8841ac5bunknown    @Override public Header[] getAllHeaders() {
65f61111cc68263f33e6fe1d9b29de305e5004e834Mike Grafton        return headers;
6640b5218d7ef608099101cae10739e95d8841ac5bunknown    }
6740b5218d7ef608099101cae10739e95d8841ac5bunknown
6850462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel    @Override public Header getFirstHeader(String s) {
6950462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel        for (Header h : headers) {
7050462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel            if (s.equalsIgnoreCase(h.getName())) {
7150462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel                return h;
7250462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel            }
7350462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel        }
7450462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel        return null;
7550462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel    }
7650462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel
7750462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel    @Override public Header getLastHeader(String s) {
7850462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel        for (int i = headers.length -1; i >= 0; i--) {
7950462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel            if (headers[i].getName().equalsIgnoreCase(s)) {
8050462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel                return headers[i];
8150462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel            }
8250462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel        }
8350462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel        return null;
8450462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel    }
8550462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel
8650462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel    @Override public Header[] getHeaders(String s) {
8750462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel        List<Header> found = new ArrayList<Header>();
8850462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel        for (Header h : headers) {
8950462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel            if (h.getName().equalsIgnoreCase(s)) found.add(h);
9050462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel        }
9150462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel        return found.toArray(new Header[found.size()]);
9250462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel    }
9350462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel
94ba2ab5b2c11e72a692c624cd0ac2da8ec479c98dRick Kawala    @Override
95ba2ab5b2c11e72a692c624cd0ac2da8ec479c98dRick Kawala    public void addHeader(Header header) {
96ba2ab5b2c11e72a692c624cd0ac2da8ec479c98dRick Kawala        List<Header> temp = new ArrayList<Header>();
97ba2ab5b2c11e72a692c624cd0ac2da8ec479c98dRick Kawala        Collections.addAll(temp, headers);
98ba2ab5b2c11e72a692c624cd0ac2da8ec479c98dRick Kawala        temp.add(header);
99ba2ab5b2c11e72a692c624cd0ac2da8ec479c98dRick Kawala        headers = temp.toArray(new Header[temp.size()]);
100ba2ab5b2c11e72a692c624cd0ac2da8ec479c98dRick Kawala    }
101ba2ab5b2c11e72a692c624cd0ac2da8ec479c98dRick Kawala
102ba2ab5b2c11e72a692c624cd0ac2da8ec479c98dRick Kawala    @Override
103ba2ab5b2c11e72a692c624cd0ac2da8ec479c98dRick Kawala    public void setHeader(Header newHeader) {
104ba2ab5b2c11e72a692c624cd0ac2da8ec479c98dRick Kawala        for (int i = 0; i < headers.length; i++) {
105ba2ab5b2c11e72a692c624cd0ac2da8ec479c98dRick Kawala            Header header = headers[i];
106ba2ab5b2c11e72a692c624cd0ac2da8ec479c98dRick Kawala            if (header.getName().equals(newHeader.getName())) {
107ba2ab5b2c11e72a692c624cd0ac2da8ec479c98dRick Kawala                headers[i] = newHeader;
108ba2ab5b2c11e72a692c624cd0ac2da8ec479c98dRick Kawala                return;
109ba2ab5b2c11e72a692c624cd0ac2da8ec479c98dRick Kawala            }
110ba2ab5b2c11e72a692c624cd0ac2da8ec479c98dRick Kawala        }
111ba2ab5b2c11e72a692c624cd0ac2da8ec479c98dRick Kawala    }
112ba2ab5b2c11e72a692c624cd0ac2da8ec479c98dRick Kawala
11350462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel    @Override public HeaderIterator headerIterator() {
11450462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel        return new HeaderIterator() {
11550462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel            int index = 0;
11650462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel
11750462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel            @Override public boolean hasNext() {
11850462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel                return index < headers.length;
11950462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel            }
12050462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel
12150462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel            @Override public Header nextHeader() {
12250462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel                if (index >= headers.length) throw new NoSuchElementException();
12350462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel                return headers[index++];
12450462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel            }
12550462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel
12650462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel            @Override public Object next() {
12750462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel                return nextHeader();
12850462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel            }
12950462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel
13050462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel            @Override public void remove() {
13150462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel                throw new UnsupportedOperationException();
13250462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel            }
13350462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel        };
13450462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel    }
13550462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel
13650462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel
13750462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel    @Override public HeaderIterator headerIterator(final String s) {
13850462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel        return new HeaderIterator() {
13950462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel            int index = 0;
14050462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel
14150462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel            @Override public boolean hasNext() {
14250462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel                return nextIndex() != -1;
14350462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel            }
14450462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel
14550462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel            private int nextIndex() {
14650462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel                for (int i = index; i<headers.length; i++) {
14750462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel                    if (headers[i].getName().equalsIgnoreCase(s)) {
14850462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel                        return i;
14950462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel                    }
15050462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel                }
15150462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel                return -1;
15250462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel            }
15350462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel
15450462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel            @Override public Header nextHeader() {
15550462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel                index = nextIndex();
15650462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel                if (index == -1) throw new NoSuchElementException();
15750462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel                return headers[index++];
15850462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel            }
15950462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel
16050462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel            @Override public Object next() {
16150462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel                return nextHeader();
16250462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel            }
16350462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel
16450462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel            @Override public void remove() {
16550462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel                throw new UnsupportedOperationException();
16650462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel            }
16750462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel        };
16850462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel    }
16950462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel
17050462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel    @Override public boolean containsHeader(String s) {
17150462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel        return getFirstHeader(s) != null;
17250462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel
17350462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel    }
17450462c4dff2d5f6aa1f5f9683935f5f0270c8a2dJan Berkel
17588748bc70223e557208926eca76033a38dcd044bLenny Turetsky & Tim Labeeuw    @Override public HttpParams getParams() {
17688748bc70223e557208926eca76033a38dcd044bLenny Turetsky & Tim Labeeuw        return params;
17788748bc70223e557208926eca76033a38dcd044bLenny Turetsky & Tim Labeeuw    }
17888748bc70223e557208926eca76033a38dcd044bLenny Turetsky & Tim Labeeuw
17988748bc70223e557208926eca76033a38dcd044bLenny Turetsky & Tim Labeeuw    @Override public void setParams(HttpParams httpParams) {
18088748bc70223e557208926eca76033a38dcd044bLenny Turetsky & Tim Labeeuw        this.params = httpParams;
18188748bc70223e557208926eca76033a38dcd044bLenny Turetsky & Tim Labeeuw    }
18288748bc70223e557208926eca76033a38dcd044bLenny Turetsky & Tim Labeeuw
1839088d97a59b3864cc5f0fbe87dc72568619e27ebRyan Richard    public boolean entityContentStreamsHaveBeenClosed() {
1849088d97a59b3864cc5f0fbe87dc72568619e27ebRyan Richard        return openEntityContentStreamCount == 0;
1859088d97a59b3864cc5f0fbe87dc72568619e27ebRyan Richard    }
1865f52066979dd3a3eb6a0df2cd360611c50fb31ecRyan Richard
187bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams    public class TestHttpEntity extends HttpEntityStub {
1889088d97a59b3864cc5f0fbe87dc72568619e27ebRyan Richard
1899088d97a59b3864cc5f0fbe87dc72568619e27ebRyan Richard        private ByteArrayInputStream inputStream;
1909088d97a59b3864cc5f0fbe87dc72568619e27ebRyan Richard
191bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams        @Override public long getContentLength() {
192863bb025cb3dbe9895f69d0f8fccff051de379daLenny Turetsky & Rick Kawala            return responseBody.length;
193bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams        }
1946f34840c49a26f54f62ead83509e3f64bed7e0cfNeal Sanche
1956f34840c49a26f54f62ead83509e3f64bed7e0cfNeal Sanche        @Override public Header getContentType() {
19639f81d70bfc70857886cfffbd91aa2ea79322ba6Ryan Richard            for (Header header : headers) {
197f61111cc68263f33e6fe1d9b29de305e5004e834Mike Grafton                if (header.getName().equals("Content-Type")) {
198f61111cc68263f33e6fe1d9b29de305e5004e834Mike Grafton                    return header;
199f61111cc68263f33e6fe1d9b29de305e5004e834Mike Grafton                }
200f61111cc68263f33e6fe1d9b29de305e5004e834Mike Grafton            }
201f61111cc68263f33e6fe1d9b29de305e5004e834Mike Grafton            return null;
2026f34840c49a26f54f62ead83509e3f64bed7e0cfNeal Sanche        }
203a0a88eccbbff059f92bd4ab894ba8e6e9e515be7Neal Sanche
204a0a88eccbbff059f92bd4ab894ba8e6e9e515be7Neal Sanche        @Override public boolean isStreaming() {
205a0a88eccbbff059f92bd4ab894ba8e6e9e515be7Neal Sanche            return true;
206a0a88eccbbff059f92bd4ab894ba8e6e9e515be7Neal Sanche        }
207a0a88eccbbff059f92bd4ab894ba8e6e9e515be7Neal Sanche
208a0a88eccbbff059f92bd4ab894ba8e6e9e515be7Neal Sanche        @Override public boolean isRepeatable() {
209a0a88eccbbff059f92bd4ab894ba8e6e9e515be7Neal Sanche            return true;
210a0a88eccbbff059f92bd4ab894ba8e6e9e515be7Neal Sanche        }
211bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams
212bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams        @Override public InputStream getContent() throws IOException, IllegalStateException {
2139088d97a59b3864cc5f0fbe87dc72568619e27ebRyan Richard            openEntityContentStreamCount++;
214863bb025cb3dbe9895f69d0f8fccff051de379daLenny Turetsky & Rick Kawala            inputStream = new ByteArrayInputStream(responseBody) {
2159088d97a59b3864cc5f0fbe87dc72568619e27ebRyan Richard                @Override
2169088d97a59b3864cc5f0fbe87dc72568619e27ebRyan Richard                public void close() throws IOException {
2179088d97a59b3864cc5f0fbe87dc72568619e27ebRyan Richard                    openEntityContentStreamCount--;
2189088d97a59b3864cc5f0fbe87dc72568619e27ebRyan Richard                    super.close();
2199088d97a59b3864cc5f0fbe87dc72568619e27ebRyan Richard                }
2209088d97a59b3864cc5f0fbe87dc72568619e27ebRyan Richard            };
2219088d97a59b3864cc5f0fbe87dc72568619e27ebRyan Richard            return inputStream;
222bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams        }
223bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams
224bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams        @Override public void writeTo(OutputStream outputStream) throws IOException {
225863bb025cb3dbe9895f69d0f8fccff051de379daLenny Turetsky & Rick Kawala            outputStream.write(responseBody);
226bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams        }
227bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams
228bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams        @Override public void consumeContent() throws IOException {
229bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams        }
230bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams    }
231bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams
232bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams    public class TestStatusLine extends StatusLineStub {
233bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams        @Override public ProtocolVersion getProtocolVersion() {
234bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams            return new HttpVersion(1, 0);
235bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams        }
236bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams
237bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams        @Override public int getStatusCode() {
238bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams            return statusCode;
239bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams        }
240bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams
241bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams        @Override public String getReasonPhrase() {
242bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams            return "HTTP status " + statusCode;
243bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams        }
2448238e7b6e6296e967dfb2d917508d852d86c3048Jan Berkel
2458238e7b6e6296e967dfb2d917508d852d86c3048Jan Berkel        @Override public String toString() {
2468238e7b6e6296e967dfb2d917508d852d86c3048Jan Berkel            return "TestStatusLine[" + getReasonPhrase() + "]";
2478238e7b6e6296e967dfb2d917508d852d86c3048Jan Berkel        }
248bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams    }
249bc2947bf7cd4f8d61d7e456277e2ca6a2b1c2dc0Christian Williams}
250