package com.android.volley.toolbox; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; import static org.mockito.Mockito.when; import com.android.volley.Header; import com.android.volley.Request; import com.android.volley.mock.TestRequest; import java.io.IOException; import java.io.InputStream; import java.net.SocketTimeoutException; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.StatusLine; import org.apache.http.conn.ConnectTimeoutException; import org.apache.http.message.BasicHeader; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; @RunWith(RobolectricTestRunner.class) public class AdaptedHttpStackTest { private static final Request REQUEST = new TestRequest.Get(); private static final Map ADDITIONAL_HEADERS = Collections.emptyMap(); @Mock private HttpStack mHttpStack; @Mock private HttpResponse mHttpResponse; @Mock private StatusLine mStatusLine; @Mock private HttpEntity mHttpEntity; @Mock private InputStream mContent; private AdaptedHttpStack mAdaptedHttpStack; @Before public void setUp() { MockitoAnnotations.initMocks(this); mAdaptedHttpStack = new AdaptedHttpStack(mHttpStack); when(mHttpResponse.getStatusLine()).thenReturn(mStatusLine); } @Test(expected = SocketTimeoutException.class) public void requestTimeout() throws Exception { when(mHttpStack.performRequest(REQUEST, ADDITIONAL_HEADERS)) .thenThrow(new ConnectTimeoutException()); mAdaptedHttpStack.executeRequest(REQUEST, ADDITIONAL_HEADERS); } @Test public void emptyResponse() throws Exception { when(mHttpStack.performRequest(REQUEST, ADDITIONAL_HEADERS)).thenReturn(mHttpResponse); when(mStatusLine.getStatusCode()).thenReturn(12345); when(mHttpResponse.getAllHeaders()).thenReturn(new org.apache.http.Header[0]); com.android.volley.toolbox.HttpResponse response = mAdaptedHttpStack.executeRequest(REQUEST, ADDITIONAL_HEADERS); assertEquals(12345, response.getStatusCode()); assertEquals(Collections.emptyList(), response.getHeaders()); assertNull(response.getContent()); } @Test public void nonEmptyResponse() throws Exception { when(mHttpStack.performRequest(REQUEST, ADDITIONAL_HEADERS)).thenReturn(mHttpResponse); when(mStatusLine.getStatusCode()).thenReturn(12345); when(mHttpResponse.getAllHeaders()).thenReturn(new org.apache.http.Header[0]); when(mHttpResponse.getEntity()).thenReturn(mHttpEntity); when(mHttpEntity.getContentLength()).thenReturn((long) Integer.MAX_VALUE); when(mHttpEntity.getContent()).thenReturn(mContent); com.android.volley.toolbox.HttpResponse response = mAdaptedHttpStack.executeRequest(REQUEST, ADDITIONAL_HEADERS); assertEquals(12345, response.getStatusCode()); assertEquals(Collections.emptyList(), response.getHeaders()); assertEquals(Integer.MAX_VALUE, response.getContentLength()); assertSame(mContent, response.getContent()); } @Test(expected = IOException.class) public void responseTooBig() throws Exception { when(mHttpStack.performRequest(REQUEST, ADDITIONAL_HEADERS)).thenReturn(mHttpResponse); when(mStatusLine.getStatusCode()).thenReturn(12345); when(mHttpResponse.getAllHeaders()).thenReturn(new org.apache.http.Header[0]); when(mHttpResponse.getEntity()).thenReturn(mHttpEntity); when(mHttpEntity.getContentLength()).thenReturn(Integer.MAX_VALUE + 1L); when(mHttpEntity.getContent()).thenReturn(mContent); mAdaptedHttpStack.executeRequest(REQUEST, ADDITIONAL_HEADERS); } @Test public void responseWithHeaders() throws Exception { when(mHttpStack.performRequest(REQUEST, ADDITIONAL_HEADERS)).thenReturn(mHttpResponse); when(mStatusLine.getStatusCode()).thenReturn(12345); when(mHttpResponse.getAllHeaders()) .thenReturn( new org.apache.http.Header[] { new BasicHeader("header1", "value1_B"), new BasicHeader("header3", "value3"), new BasicHeader("HEADER2", "value2"), new BasicHeader("header1", "value1_A") }); com.android.volley.toolbox.HttpResponse response = mAdaptedHttpStack.executeRequest(REQUEST, ADDITIONAL_HEADERS); assertEquals(12345, response.getStatusCode()); assertNull(response.getContent()); List
expectedHeaders = new ArrayList<>(); expectedHeaders.add(new Header("header1", "value1_B")); expectedHeaders.add(new Header("header3", "value3")); expectedHeaders.add(new Header("HEADER2", "value2")); expectedHeaders.add(new Header("header1", "value1_A")); assertEquals(expectedHeaders, response.getHeaders()); } }