blob: dbd6535f9a7a9dbb4bc113d5d3ee268c6bba2998 [file] [log] [blame]
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<String, String> 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<Header> 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());
}
}