1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 package org.apache.http.impl.client;
29
30 import java.io.IOException;
31 import java.io.InputStream;
32
33 import org.apache.http.HttpEntity;
34 import org.apache.http.HttpResponse;
35 import org.apache.http.HttpVersion;
36 import org.apache.http.StatusLine;
37 import org.apache.http.client.HttpResponseException;
38 import org.apache.http.entity.StringEntity;
39 import org.apache.http.message.BasicStatusLine;
40 import org.apache.http.util.EntityUtils;
41 import org.junit.Assert;
42 import org.junit.Test;
43 import org.mockito.Mockito;
44
45
46
47
48 public class TestAbstractResponseHandler {
49
50 @Test
51 public void testSuccessfulResponse() throws Exception {
52 final StatusLine sl = new BasicStatusLine(HttpVersion.HTTP_1_1, 200, "OK");
53 final HttpResponse response = Mockito.mock(HttpResponse.class);
54 final HttpEntity entity = new StringEntity("42");
55 Mockito.when(response.getStatusLine()).thenReturn(sl);
56 Mockito.when(response.getEntity()).thenReturn(entity);
57
58 final AbstractResponseHandler<Integer> handler = new AbstractResponseHandler<Integer>() {
59
60 @Override
61 public Integer handleEntity(final HttpEntity entity) throws IOException {
62 return Integer.valueOf(EntityUtils.toString(entity));
63 }
64 };
65 final Integer number = handler.handleResponse(response);
66 Assert.assertEquals(42, number.intValue());
67 }
68
69 @SuppressWarnings("boxing")
70 @Test
71 public void testUnsuccessfulResponse() throws Exception {
72 final InputStream inStream = Mockito.mock(InputStream.class);
73 final HttpEntity entity = Mockito.mock(HttpEntity.class);
74 Mockito.when(entity.isStreaming()).thenReturn(true);
75 Mockito.when(entity.getContent()).thenReturn(inStream);
76 final StatusLine sl = new BasicStatusLine(HttpVersion.HTTP_1_1, 404, "Not Found");
77 final HttpResponse response = Mockito.mock(HttpResponse.class);
78 Mockito.when(response.getStatusLine()).thenReturn(sl);
79 Mockito.when(response.getEntity()).thenReturn(entity);
80
81 final BasicResponseHandler handler = new BasicResponseHandler();
82 try {
83 handler.handleResponse(response);
84 Assert.fail("HttpResponseException expected");
85 } catch (final HttpResponseException ex) {
86 Assert.assertEquals(404, ex.getStatusCode());
87 Assert.assertEquals("Not Found", ex.getReasonPhrase());
88 Assert.assertEquals("status code: 404, reason phrase: Not Found", ex.getMessage());
89 }
90 Mockito.verify(entity).getContent();
91 Mockito.verify(inStream).close();
92 }
93
94 @SuppressWarnings("boxing")
95 @Test
96 public void testUnsuccessfulResponseEmptyReason() throws Exception {
97 final InputStream inStream = Mockito.mock(InputStream.class);
98 final HttpEntity entity = Mockito.mock(HttpEntity.class);
99 Mockito.when(entity.isStreaming()).thenReturn(true);
100 Mockito.when(entity.getContent()).thenReturn(inStream);
101 final StatusLine sl = new BasicStatusLine(HttpVersion.HTTP_1_1, 404, null);
102 final HttpResponse response = Mockito.mock(HttpResponse.class);
103 Mockito.when(response.getStatusLine()).thenReturn(sl);
104 Mockito.when(response.getEntity()).thenReturn(entity);
105
106 final BasicResponseHandler handler = new BasicResponseHandler();
107 try {
108 handler.handleResponse(response);
109 Assert.fail("HttpResponseException expected");
110 } catch (final HttpResponseException ex) {
111 Assert.assertEquals(404, ex.getStatusCode());
112 Assert.assertNull(ex.getReasonPhrase());
113 Assert.assertEquals("status code: 404", ex.getMessage());
114 }
115 Mockito.verify(entity).getContent();
116 Mockito.verify(inStream).close();
117 }
118 }