diff options
Diffstat (limited to 'src/test/java/com/android/volley/RequestQueueIntegrationTest.java')
-rw-r--r-- | src/test/java/com/android/volley/RequestQueueIntegrationTest.java | 114 |
1 files changed, 47 insertions, 67 deletions
diff --git a/src/test/java/com/android/volley/RequestQueueIntegrationTest.java b/src/test/java/com/android/volley/RequestQueueIntegrationTest.java index a73435c..304a1ab 100644 --- a/src/test/java/com/android/volley/RequestQueueIntegrationTest.java +++ b/src/test/java/com/android/volley/RequestQueueIntegrationTest.java @@ -22,29 +22,30 @@ import com.android.volley.mock.MockRequest; import com.android.volley.mock.ShadowSystemClock; import com.android.volley.toolbox.NoCache; import com.android.volley.utils.ImmediateResponseDelivery; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.InOrder; import org.mockito.Mock; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; -import java.util.ArrayList; -import java.util.List; -import java.util.Random; -import java.util.concurrent.Semaphore; -import java.util.concurrent.TimeUnit; - -import static org.junit.Assert.*; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.inOrder; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.timeout; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; import static org.mockito.MockitoAnnotations.initMocks; /** - * Integration tests for {@link RequestQueue}, that verify its behavior in conjunction with real dispatcher, queues and - * Requests. Network is mocked out + * Integration tests for {@link RequestQueue} that verify its behavior in conjunction with real + * dispatcher, queues and Requests. + * + * <p>The Network is mocked out. */ @RunWith(RobolectricTestRunner.class) @Config(shadows = {ShadowSystemClock.class}) @@ -52,6 +53,8 @@ public class RequestQueueIntegrationTest { private ResponseDelivery mDelivery; @Mock private Network mMockNetwork; + @Mock private RequestFinishedListener<byte[]> mMockListener; + @Mock private RequestFinishedListener<byte[]> mMockListener2; @Before public void setUp() throws Exception { mDelivery = new ImmediateResponseDelivery(); @@ -59,9 +62,10 @@ public class RequestQueueIntegrationTest { } @Test public void add_requestProcessedInCorrectOrder() throws Exception { - // Enqueue 2 requests with different cache keys, and different priorities. The second, higher priority request - // takes 20ms. - // Assert that first request is only handled after the first one has been parsed and delivered. + // Enqueue 2 requests with different cache keys, and different priorities. The second, + // higher priority request takes 20ms. + // Assert that the first request is only handled after the first one has been parsed and + // delivered. MockRequest lowerPriorityReq = new MockRequest(); MockRequest higherPriorityReq = new MockRequest(); lowerPriorityReq.setCacheKey("1"); @@ -69,7 +73,6 @@ public class RequestQueueIntegrationTest { lowerPriorityReq.setPriority(Priority.LOW); higherPriorityReq.setPriority(Priority.HIGH); - RequestFinishedListener listener = mock(RequestFinishedListener.class); Answer<NetworkResponse> delayAnswer = new Answer<NetworkResponse>() { @Override public NetworkResponse answer(InvocationOnMock invocationOnMock) throws Throwable { @@ -77,37 +80,31 @@ public class RequestQueueIntegrationTest { return mock(NetworkResponse.class); } }; - //delay only for higher request + // delay only for higher request when(mMockNetwork.performRequest(higherPriorityReq)).thenAnswer(delayAnswer); when(mMockNetwork.performRequest(lowerPriorityReq)).thenReturn(mock(NetworkResponse.class)); RequestQueue queue = new RequestQueue(new NoCache(), mMockNetwork, 1, mDelivery); - queue.addRequestFinishedListener(listener); + queue.addRequestFinishedListener(mMockListener); queue.add(lowerPriorityReq); queue.add(higherPriorityReq); queue.start(); - // you cannot do strict order verification in combination with timeouts with mockito 1.9.5 :( - // as an alternative, first verify no requests have finished, while higherPriorityReq should be processing - verifyNoMoreInteractions(listener); + InOrder inOrder = inOrder(mMockListener); // verify higherPriorityReq goes through first - verify(listener, timeout(100)).onRequestFinished(higherPriorityReq); + inOrder.verify(mMockListener, timeout(10000)).onRequestFinished(higherPriorityReq); // verify lowerPriorityReq goes last - verify(listener, timeout(10)).onRequestFinished(lowerPriorityReq); + inOrder.verify(mMockListener, timeout(10000)).onRequestFinished(lowerPriorityReq); + queue.stop(); } - /** - * Asserts that requests with same cache key are processed in order. - * - * Needs to be an integration test because relies on complex interations between various queues - */ + /** Asserts that requests with same cache key are processed in order. */ @Test public void add_dedupeByCacheKey() throws Exception { // Enqueue 2 requests with the same cache key. The first request takes 20ms. Assert that the // second request is only handled after the first one has been parsed and delivered. - Request req1 = new MockRequest(); - Request req2 = new MockRequest(); - RequestFinishedListener listener = mock(RequestFinishedListener.class); + MockRequest req1 = new MockRequest(); + MockRequest req2 = new MockRequest(); Answer<NetworkResponse> delayAnswer = new Answer<NetworkResponse>() { @Override public NetworkResponse answer(InvocationOnMock invocationOnMock) throws Throwable { @@ -120,27 +117,23 @@ public class RequestQueueIntegrationTest { when(mMockNetwork.performRequest(req2)).thenReturn(mock(NetworkResponse.class)); RequestQueue queue = new RequestQueue(new NoCache(), mMockNetwork, 3, mDelivery); - queue.addRequestFinishedListener(listener); + queue.addRequestFinishedListener(mMockListener); queue.add(req1); queue.add(req2); queue.start(); - // you cannot do strict order verification with mockito 1.9.5 :( - // as an alternative, first verify no requests have finished, then verify req1 goes through - verifyNoMoreInteractions(listener); - verify(listener, timeout(100)).onRequestFinished(req1); - verify(listener, timeout(10)).onRequestFinished(req2); + InOrder inOrder = inOrder(mMockListener); + // verify req1 goes through first + inOrder.verify(mMockListener, timeout(10000)).onRequestFinished(req1); + // verify req2 goes last + inOrder.verify(mMockListener, timeout(10000)).onRequestFinished(req2); + queue.stop(); } - /** - * Verify RequestFinishedListeners are informed when requests are canceled - * - * Needs to be an integration test because relies on Request -> dispatcher -> RequestQueue interaction - */ + /** Verify RequestFinishedListeners are informed when requests are canceled. */ @Test public void add_requestFinishedListenerCanceled() throws Exception { - RequestFinishedListener listener = mock(RequestFinishedListener.class); - Request request = new MockRequest(); + MockRequest request = new MockRequest(); Answer<NetworkResponse> delayAnswer = new Answer<NetworkResponse>() { @Override public NetworkResponse answer(InvocationOnMock invocationOnMock) throws Throwable { @@ -152,56 +145,43 @@ public class RequestQueueIntegrationTest { when(mMockNetwork.performRequest(request)).thenAnswer(delayAnswer); - queue.addRequestFinishedListener(listener); + queue.addRequestFinishedListener(mMockListener); queue.start(); queue.add(request); request.cancel(); - verify(listener, timeout(100)).onRequestFinished(request); + verify(mMockListener, timeout(10000)).onRequestFinished(request); queue.stop(); } - /** - * Verify RequestFinishedListeners are informed when requests are successfully delivered - * - * Needs to be an integration test because relies on Request -> dispatcher -> RequestQueue interaction - */ + /** Verify RequestFinishedListeners are informed when requests are successfully delivered. */ @Test public void add_requestFinishedListenerSuccess() throws Exception { - NetworkResponse response = mock(NetworkResponse.class); - Request request = new MockRequest(); - RequestFinishedListener listener = mock(RequestFinishedListener.class); - RequestFinishedListener listener2 = mock(RequestFinishedListener.class); + MockRequest request = new MockRequest(); RequestQueue queue = new RequestQueue(new NoCache(), mMockNetwork, 1, mDelivery); - queue.addRequestFinishedListener(listener); - queue.addRequestFinishedListener(listener2); + queue.addRequestFinishedListener(mMockListener); + queue.addRequestFinishedListener(mMockListener2); queue.start(); queue.add(request); - verify(listener, timeout(100)).onRequestFinished(request); - verify(listener2, timeout(100)).onRequestFinished(request); + verify(mMockListener, timeout(10000)).onRequestFinished(request); + verify(mMockListener2, timeout(10000)).onRequestFinished(request); queue.stop(); } - /** - * Verify RequestFinishedListeners are informed when request errors - * - * Needs to be an integration test because relies on Request -> dispatcher -> RequestQueue interaction - */ + /** Verify RequestFinishedListeners are informed when request errors. */ @Test public void add_requestFinishedListenerError() throws Exception { - RequestFinishedListener listener = mock(RequestFinishedListener.class); - Request request = new MockRequest(); + MockRequest request = new MockRequest(); RequestQueue queue = new RequestQueue(new NoCache(), mMockNetwork, 1, mDelivery); when(mMockNetwork.performRequest(request)).thenThrow(new VolleyError()); - queue.addRequestFinishedListener(listener); + queue.addRequestFinishedListener(mMockListener); queue.start(); queue.add(request); - verify(listener, timeout(100)).onRequestFinished(request); + verify(mMockListener, timeout(10000)).onRequestFinished(request); queue.stop(); } - } |