diff options
author | Anonymous <no-reply@google.com> | 2021-07-07 14:01:06 -0700 |
---|---|---|
committer | Jeff Davidson <jpd@google.com> | 2021-07-07 23:09:19 +0000 |
commit | 212e7004acfdce76c900fd97070e2e5e8476be20 (patch) | |
tree | cf5d56ccdb862fd9676c855f919408ef940bc019 /src/test/java/com/android/volley/toolbox/BasicAsyncNetworkTest.java | |
parent | b47af415ba74754b442c1f9f3960b29537d07e6e (diff) | |
download | volley-android-s-beta-4.tar.gz |
Import of Volley from GitHub to AOSP.android-s-beta-5android-s-beta-4android-s-beta-3android-s-beta-5android-s-beta-4
Android.bp has been updated to account for the new source directory structure.
- 0dc50bcfd021c204a9e6c9e7e6befbdfa1027247 Refactor Volley into a multi-module project. (#418) by Jeff Davidson <jpd@google.com>
- 763c86b0bc9f66a8bb499f6a8b7fd3bdc87621a8 Remove new constructors from JsonRequests which are break... by Jeff Davidson <jpd@google.com>
- 8d1b1a59e7cd1b1d3c6d8686f8831cea08f80d1f Add @NonNull annotations to Volley (#413) by Kamal Faraj <kfaraj.dev@gmail.com>
- 5ba41f8670413973f587e435598f9f1724fa26e9 Allow sending any JSON with JsonArrayRequest & JsonObject... by Paul Smith <paulsmithkc@gmail.com>
- 784cdd755392a6080e5eb0bf94bd7bf4ea31cf17 Update SNAPSHOT version after 1.2.0 release by Jeff Davidson <jpd@google.com>
- 0d6497bab417a5f78b3c8e03ea157ada0fbfbc5d Add developers stanza to Volley POM. (#400) by Jeff Davidson <jpd@google.com>
- 36274bf515a699ae5a7fe3d321206d1b803226d8 API cleanup for Async Volley stack ahead of 1.2.0 release... by Jeff Davidson <jpd@google.com>
- 03f0144843fcf9ebafe512647c1c588975429452 Update environment variable name for snapshot pushes. (#3... by Jeff Davidson <jpd@google.com>
- 3bd1975652687d2baa1b11a7f02b135edede8523 Publish SNAPSHOT builds to OSSRH instead of OJO. (#397) by Jeff Davidson <jpd@google.com>
- 0e0c3d9cfa694f8f1400a9e9abc4bc11761fdb52 Invoke RetryPolicy#retry in the blocking executor. (#393) by Jeff Davidson <jpd@google.com>
- b51831a48f06ad28f627c3624e5edb41598a2bf8 Use a consistent timebase when evaluating soft/hard TTLs.... by Jeff Davidson <jpd@google.com>
- cd0839113b100f163df1ebd04ce6d5b9e36e9863 Migrate from Travis CI to GitHub Actions. (#381) by Jeff Davidson <jpd@google.com>
- bdc0e393199ebf9e67c4e29e665252818eed4639 Clean up cache initialization in AsyncRequestQueue. (#380) by Jeff Davidson <jpd@google.com>
- 1c0ade36edde15d02844b40351ab6f80c63b71b3 Actually allow applications to provide custom executors. by Jeff Davidson <jpd@google.com>
GitOrigin-RevId: 0dc50bcfd021c204a9e6c9e7e6befbdfa1027247
Change-Id: I4b8e4098ad5c349cb83efc867273fac1d3582a34
Diffstat (limited to 'src/test/java/com/android/volley/toolbox/BasicAsyncNetworkTest.java')
-rw-r--r-- | src/test/java/com/android/volley/toolbox/BasicAsyncNetworkTest.java | 508 |
1 files changed, 0 insertions, 508 deletions
diff --git a/src/test/java/com/android/volley/toolbox/BasicAsyncNetworkTest.java b/src/test/java/com/android/volley/toolbox/BasicAsyncNetworkTest.java deleted file mode 100644 index 91d4062..0000000 --- a/src/test/java/com/android/volley/toolbox/BasicAsyncNetworkTest.java +++ /dev/null @@ -1,508 +0,0 @@ -/* - * Copyright (C) 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.volley.toolbox; - -import static org.hamcrest.Matchers.containsInAnyOrder; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; -import static org.mockito.Mockito.*; -import static org.mockito.Mockito.any; -import static org.mockito.Mockito.doThrow; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.reset; -import static org.mockito.Mockito.verify; -import static org.mockito.MockitoAnnotations.initMocks; - -import com.android.volley.AsyncNetwork; -import com.android.volley.AuthFailureError; -import com.android.volley.Cache.Entry; -import com.android.volley.Header; -import com.android.volley.NetworkResponse; -import com.android.volley.NoConnectionError; -import com.android.volley.Request; -import com.android.volley.Response; -import com.android.volley.RetryPolicy; -import com.android.volley.ServerError; -import com.android.volley.TimeoutError; -import com.android.volley.VolleyError; -import com.android.volley.mock.MockAsyncStack; -import com.google.common.util.concurrent.MoreExecutors; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.net.HttpURLConnection; -import java.net.MalformedURLException; -import java.net.SocketTimeoutException; -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.ExecutorService; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.robolectric.RobolectricTestRunner; - -@RunWith(RobolectricTestRunner.class) -public class BasicAsyncNetworkTest { - - @Mock private RetryPolicy mMockRetryPolicy; - @Mock private AsyncNetwork.OnRequestComplete mockCallback; - private ExecutorService executor = MoreExecutors.newDirectExecutorService(); - - @Before - public void setUp() throws Exception { - initMocks(this); - } - - @Test - public void headersAndPostParams() throws Exception { - MockAsyncStack mockAsyncStack = new MockAsyncStack(); - HttpResponse fakeResponse = - new HttpResponse( - 200, - Collections.<Header>emptyList(), - "foobar".getBytes(StandardCharsets.UTF_8)); - mockAsyncStack.setResponseToReturn(fakeResponse); - BasicAsyncNetwork httpNetwork = new BasicAsyncNetwork.Builder(mockAsyncStack).build(); - httpNetwork.setBlockingExecutor(executor); - Request<String> request = buildRequest(); - Entry entry = new Entry(); - entry.etag = "foobar"; - entry.lastModified = 1503102002000L; - request.setCacheEntry(entry); - perform(request, httpNetwork).get(); - assertEquals("foo", mockAsyncStack.getLastHeaders().get("requestheader")); - assertEquals("foobar", mockAsyncStack.getLastHeaders().get("If-None-Match")); - assertEquals( - "Sat, 19 Aug 2017 00:20:02 GMT", - mockAsyncStack.getLastHeaders().get("If-Modified-Since")); - assertEquals( - "requestpost=foo&", - new String(mockAsyncStack.getLastPostBody(), StandardCharsets.UTF_8)); - } - - @Test - public void headersAndPostParamsStream() throws Exception { - MockAsyncStack mockAsyncStack = new MockAsyncStack(); - ByteArrayInputStream stream = new ByteArrayInputStream("foobar".getBytes("UTF-8")); - HttpResponse fakeResponse = - new HttpResponse(200, Collections.<Header>emptyList(), 6, stream); - mockAsyncStack.setResponseToReturn(fakeResponse); - BasicAsyncNetwork httpNetwork = new BasicAsyncNetwork.Builder(mockAsyncStack).build(); - httpNetwork.setBlockingExecutor(executor); - Request<String> request = buildRequest(); - Entry entry = new Entry(); - entry.etag = "foobar"; - entry.lastModified = 1503102002000L; - request.setCacheEntry(entry); - perform(request, httpNetwork).get(); - assertEquals("foo", mockAsyncStack.getLastHeaders().get("requestheader")); - assertEquals("foobar", mockAsyncStack.getLastHeaders().get("If-None-Match")); - assertEquals( - "Sat, 19 Aug 2017 00:20:02 GMT", - mockAsyncStack.getLastHeaders().get("If-Modified-Since")); - assertEquals( - "requestpost=foo&", - new String(mockAsyncStack.getLastPostBody(), StandardCharsets.UTF_8)); - } - - @Test - public void notModified() throws Exception { - MockAsyncStack mockAsyncStack = new MockAsyncStack(); - List<Header> headers = new ArrayList<>(); - headers.add(new Header("ServerKeyA", "ServerValueA")); - headers.add(new Header("ServerKeyB", "ServerValueB")); - headers.add(new Header("SharedKey", "ServerValueShared")); - headers.add(new Header("sharedcaseinsensitivekey", "ServerValueShared1")); - headers.add(new Header("SharedCaseInsensitiveKey", "ServerValueShared2")); - HttpResponse fakeResponse = new HttpResponse(HttpURLConnection.HTTP_NOT_MODIFIED, headers); - mockAsyncStack.setResponseToReturn(fakeResponse); - BasicAsyncNetwork httpNetwork = new BasicAsyncNetwork.Builder(mockAsyncStack).build(); - httpNetwork.setBlockingExecutor(executor); - Request<String> request = buildRequest(); - Entry entry = new Entry(); - entry.allResponseHeaders = new ArrayList<>(); - entry.allResponseHeaders.add(new Header("CachedKeyA", "CachedValueA")); - entry.allResponseHeaders.add(new Header("CachedKeyB", "CachedValueB")); - entry.allResponseHeaders.add(new Header("SharedKey", "CachedValueShared")); - entry.allResponseHeaders.add(new Header("SHAREDCASEINSENSITIVEKEY", "CachedValueShared1")); - entry.allResponseHeaders.add(new Header("shAREDcaSEinSENSITIVEkeY", "CachedValueShared2")); - request.setCacheEntry(entry); - httpNetwork.performRequest(request, mockCallback); - NetworkResponse response = perform(request, httpNetwork).get(); - List<Header> expectedHeaders = new ArrayList<>(); - // Should have all server headers + cache headers that didn't show up in server response. - expectedHeaders.add(new Header("ServerKeyA", "ServerValueA")); - expectedHeaders.add(new Header("ServerKeyB", "ServerValueB")); - expectedHeaders.add(new Header("SharedKey", "ServerValueShared")); - expectedHeaders.add(new Header("sharedcaseinsensitivekey", "ServerValueShared1")); - expectedHeaders.add(new Header("SharedCaseInsensitiveKey", "ServerValueShared2")); - expectedHeaders.add(new Header("CachedKeyA", "CachedValueA")); - expectedHeaders.add(new Header("CachedKeyB", "CachedValueB")); - assertThat(expectedHeaders, containsInAnyOrder(response.allHeaders.toArray(new Header[0]))); - } - - @Test - public void notModified_legacyCache() throws Exception { - MockAsyncStack mockAsyncStack = new MockAsyncStack(); - List<Header> headers = new ArrayList<>(); - headers.add(new Header("ServerKeyA", "ServerValueA")); - headers.add(new Header("ServerKeyB", "ServerValueB")); - headers.add(new Header("SharedKey", "ServerValueShared")); - headers.add(new Header("sharedcaseinsensitivekey", "ServerValueShared1")); - headers.add(new Header("SharedCaseInsensitiveKey", "ServerValueShared2")); - HttpResponse fakeResponse = new HttpResponse(HttpURLConnection.HTTP_NOT_MODIFIED, headers); - mockAsyncStack.setResponseToReturn(fakeResponse); - BasicAsyncNetwork httpNetwork = new BasicAsyncNetwork.Builder(mockAsyncStack).build(); - httpNetwork.setBlockingExecutor(executor); - Request<String> request = buildRequest(); - Entry entry = new Entry(); - entry.responseHeaders = new HashMap<>(); - entry.responseHeaders.put("CachedKeyA", "CachedValueA"); - entry.responseHeaders.put("CachedKeyB", "CachedValueB"); - entry.responseHeaders.put("SharedKey", "CachedValueShared"); - entry.responseHeaders.put("SHAREDCASEINSENSITIVEKEY", "CachedValueShared1"); - entry.responseHeaders.put("shAREDcaSEinSENSITIVEkeY", "CachedValueShared2"); - request.setCacheEntry(entry); - NetworkResponse response = perform(request, httpNetwork).get(); - List<Header> expectedHeaders = new ArrayList<>(); - // Should have all server headers + cache headers that didn't show up in server response. - expectedHeaders.add(new Header("ServerKeyA", "ServerValueA")); - expectedHeaders.add(new Header("ServerKeyB", "ServerValueB")); - expectedHeaders.add(new Header("SharedKey", "ServerValueShared")); - expectedHeaders.add(new Header("sharedcaseinsensitivekey", "ServerValueShared1")); - expectedHeaders.add(new Header("SharedCaseInsensitiveKey", "ServerValueShared2")); - expectedHeaders.add(new Header("CachedKeyA", "CachedValueA")); - expectedHeaders.add(new Header("CachedKeyB", "CachedValueB")); - assertThat(expectedHeaders, containsInAnyOrder(response.allHeaders.toArray(new Header[0]))); - } - - @Test - public void socketTimeout() throws Exception { - MockAsyncStack mockAsyncStack = new MockAsyncStack(); - mockAsyncStack.setExceptionToThrow(new SocketTimeoutException()); - BasicAsyncNetwork httpNetwork = new BasicAsyncNetwork.Builder(mockAsyncStack).build(); - httpNetwork.setBlockingExecutor(executor); - Request<String> request = buildRequest(); - request.setRetryPolicy(mMockRetryPolicy); - doThrow(new VolleyError()).when(mMockRetryPolicy).retry(any(VolleyError.class)); - httpNetwork.performRequest(request, mockCallback); - verify(mockCallback, times(1)).onError(any(VolleyError.class)); - verify(mockCallback, never()).onSuccess(any(NetworkResponse.class)); - // should retry socket timeouts - verify(mMockRetryPolicy).retry(any(TimeoutError.class)); - reset(mMockRetryPolicy, mockCallback); - } - - @Test - public void noConnectionDefault() throws Exception { - MockAsyncStack mockAsyncStack = new MockAsyncStack(); - mockAsyncStack.setExceptionToThrow(new IOException()); - BasicAsyncNetwork httpNetwork = new BasicAsyncNetwork.Builder(mockAsyncStack).build(); - httpNetwork.setBlockingExecutor(executor); - Request<String> request = buildRequest(); - request.setRetryPolicy(mMockRetryPolicy); - doThrow(new VolleyError()).when(mMockRetryPolicy).retry(any(VolleyError.class)); - httpNetwork.performRequest(request, mockCallback); - verify(mockCallback, times(1)).onError(any(VolleyError.class)); - verify(mockCallback, never()).onSuccess(any(NetworkResponse.class)); - // should not retry when there is no connection - verify(mMockRetryPolicy, never()).retry(any(VolleyError.class)); - reset(mMockRetryPolicy, mockCallback); - } - - @Test - public void noConnectionRetry() throws Exception { - MockAsyncStack mockAsyncStack = new MockAsyncStack(); - mockAsyncStack.setExceptionToThrow(new IOException()); - BasicAsyncNetwork httpNetwork = new BasicAsyncNetwork.Builder(mockAsyncStack).build(); - httpNetwork.setBlockingExecutor(executor); - Request<String> request = buildRequest(); - request.setRetryPolicy(mMockRetryPolicy); - request.setShouldRetryConnectionErrors(true); - doThrow(new VolleyError()).when(mMockRetryPolicy).retry(any(VolleyError.class)); - httpNetwork.performRequest(request, mockCallback); - verify(mockCallback, times(1)).onError(any(VolleyError.class)); - verify(mockCallback, never()).onSuccess(any(NetworkResponse.class)); - // should retry when there is no connection - verify(mMockRetryPolicy).retry(any(NoConnectionError.class)); - reset(mMockRetryPolicy, mockCallback); - } - - @Test - public void noConnectionNoRetry() throws Exception { - MockAsyncStack mockAsyncStack = new MockAsyncStack(); - mockAsyncStack.setExceptionToThrow(new IOException()); - BasicAsyncNetwork httpNetwork = new BasicAsyncNetwork.Builder(mockAsyncStack).build(); - httpNetwork.setBlockingExecutor(executor); - Request<String> request = buildRequest(); - request.setRetryPolicy(mMockRetryPolicy); - request.setShouldRetryConnectionErrors(false); - doThrow(new VolleyError()).when(mMockRetryPolicy).retry(any(VolleyError.class)); - httpNetwork.performRequest(request, mockCallback); - verify(mockCallback, times(1)).onError(any(VolleyError.class)); - verify(mockCallback, never()).onSuccess(any(NetworkResponse.class)); - // should not retry when there is no connection - verify(mMockRetryPolicy, never()).retry(any(VolleyError.class)); - reset(mMockRetryPolicy, mockCallback); - } - - @Test - public void unauthorized() throws Exception { - MockAsyncStack mockAsyncStack = new MockAsyncStack(); - HttpResponse fakeResponse = new HttpResponse(401, Collections.<Header>emptyList()); - mockAsyncStack.setResponseToReturn(fakeResponse); - BasicAsyncNetwork httpNetwork = new BasicAsyncNetwork.Builder(mockAsyncStack).build(); - httpNetwork.setBlockingExecutor(executor); - Request<String> request = buildRequest(); - request.setRetryPolicy(mMockRetryPolicy); - doThrow(new VolleyError()).when(mMockRetryPolicy).retry(any(VolleyError.class)); - httpNetwork.performRequest(request, mockCallback); - verify(mockCallback, times(1)).onError(any(VolleyError.class)); - verify(mockCallback, never()).onSuccess(any(NetworkResponse.class)); - // should retry in case it's an auth failure. - verify(mMockRetryPolicy).retry(any(AuthFailureError.class)); - reset(mMockRetryPolicy, mockCallback); - } - - @Test(expected = RuntimeException.class) - public void malformedUrlRequest() throws VolleyError, ExecutionException, InterruptedException { - MockAsyncStack mockAsyncStack = new MockAsyncStack(); - mockAsyncStack.setExceptionToThrow(new MalformedURLException()); - BasicAsyncNetwork httpNetwork = new BasicAsyncNetwork.Builder(mockAsyncStack).build(); - httpNetwork.setBlockingExecutor(executor); - Request<String> request = buildRequest(); - request.setRetryPolicy(mMockRetryPolicy); - doThrow(new VolleyError()).when(mMockRetryPolicy).retry(any(VolleyError.class)); - perform(request, httpNetwork).get(); - } - - @Test - public void forbidden() throws Exception { - MockAsyncStack mockAsyncStack = new MockAsyncStack(); - HttpResponse fakeResponse = new HttpResponse(403, Collections.<Header>emptyList()); - mockAsyncStack.setResponseToReturn(fakeResponse); - BasicAsyncNetwork httpNetwork = new BasicAsyncNetwork.Builder(mockAsyncStack).build(); - httpNetwork.setBlockingExecutor(executor); - Request<String> request = buildRequest(); - request.setRetryPolicy(mMockRetryPolicy); - doThrow(new VolleyError()).when(mMockRetryPolicy).retry(any(VolleyError.class)); - httpNetwork.performRequest(request, mockCallback); - verify(mockCallback, times(1)).onError(any(VolleyError.class)); - verify(mockCallback, never()).onSuccess(any(NetworkResponse.class)); - // should retry in case it's an auth failure. - verify(mMockRetryPolicy).retry(any(AuthFailureError.class)); - reset(mMockRetryPolicy, mockCallback); - } - - @Test - public void redirect() throws Exception { - for (int i = 300; i <= 399; i++) { - MockAsyncStack mockAsyncStack = new MockAsyncStack(); - HttpResponse fakeResponse = new HttpResponse(i, Collections.<Header>emptyList()); - mockAsyncStack.setResponseToReturn(fakeResponse); - BasicAsyncNetwork httpNetwork = new BasicAsyncNetwork.Builder(mockAsyncStack).build(); - httpNetwork.setBlockingExecutor(executor); - Request<String> request = buildRequest(); - request.setRetryPolicy(mMockRetryPolicy); - doThrow(new VolleyError()).when(mMockRetryPolicy).retry(any(VolleyError.class)); - httpNetwork.performRequest(request, mockCallback); - if (i != 304) { - verify(mockCallback, times(1)).onError(any(VolleyError.class)); - verify(mockCallback, never()).onSuccess(any(NetworkResponse.class)); - } else { - verify(mockCallback, never()).onError(any(VolleyError.class)); - verify(mockCallback, times(1)).onSuccess(any(NetworkResponse.class)); - } - // should not retry 300 responses. - verify(mMockRetryPolicy, never()).retry(any(VolleyError.class)); - reset(mMockRetryPolicy, mockCallback); - } - } - - @Test - public void otherClientError() throws Exception { - for (int i = 400; i <= 499; i++) { - if (i == 401 || i == 403) { - // covered above. - continue; - } - MockAsyncStack mockAsyncStack = new MockAsyncStack(); - HttpResponse fakeResponse = new HttpResponse(i, Collections.<Header>emptyList()); - mockAsyncStack.setResponseToReturn(fakeResponse); - BasicAsyncNetwork httpNetwork = new BasicAsyncNetwork.Builder(mockAsyncStack).build(); - httpNetwork.setBlockingExecutor(executor); - Request<String> request = buildRequest(); - request.setRetryPolicy(mMockRetryPolicy); - doThrow(new VolleyError()).when(mMockRetryPolicy).retry(any(VolleyError.class)); - httpNetwork.performRequest(request, mockCallback); - verify(mockCallback, times(1)).onError(any(VolleyError.class)); - verify(mockCallback, never()).onSuccess(any(NetworkResponse.class)); - // should not retry other 400 errors. - verify(mMockRetryPolicy, never()).retry(any(VolleyError.class)); - reset(mMockRetryPolicy, mockCallback); - } - } - - @Test - public void serverError_enableRetries() throws Exception { - for (int i = 500; i <= 599; i++) { - MockAsyncStack mockAsyncStack = new MockAsyncStack(); - HttpResponse fakeResponse = new HttpResponse(i, Collections.<Header>emptyList()); - mockAsyncStack.setResponseToReturn(fakeResponse); - BasicAsyncNetwork httpNetwork = - new BasicAsyncNetwork.Builder(mockAsyncStack) - .setPool(new ByteArrayPool(4096)) - .build(); - httpNetwork.setBlockingExecutor(executor); - Request<String> request = buildRequest(); - request.setRetryPolicy(mMockRetryPolicy); - request.setShouldRetryServerErrors(true); - doThrow(new VolleyError()).when(mMockRetryPolicy).retry(any(VolleyError.class)); - httpNetwork.performRequest(request, mockCallback); - verify(mockCallback, times(1)).onError(any(VolleyError.class)); - verify(mockCallback, never()).onSuccess(any(NetworkResponse.class)); - // should retry all 500 errors - verify(mMockRetryPolicy).retry(any(ServerError.class)); - reset(mMockRetryPolicy, mockCallback); - } - } - - @Test - public void serverError_disableRetries() throws Exception { - for (int i = 500; i <= 599; i++) { - MockAsyncStack mockAsyncStack = new MockAsyncStack(); - HttpResponse fakeResponse = new HttpResponse(i, Collections.<Header>emptyList()); - mockAsyncStack.setResponseToReturn(fakeResponse); - BasicAsyncNetwork httpNetwork = new BasicAsyncNetwork.Builder(mockAsyncStack).build(); - httpNetwork.setBlockingExecutor(executor); - Request<String> request = buildRequest(); - request.setRetryPolicy(mMockRetryPolicy); - doThrow(new VolleyError()).when(mMockRetryPolicy).retry(any(VolleyError.class)); - httpNetwork.performRequest(request, mockCallback); - verify(mockCallback, times(1)).onError(any(VolleyError.class)); - verify(mockCallback, never()).onSuccess(any(NetworkResponse.class)); - // should not retry any 500 error w/ HTTP 500 retries turned off (the default). - verify(mMockRetryPolicy, never()).retry(any(VolleyError.class)); - reset(mMockRetryPolicy, mockCallback); - } - } - - @Test - public void notModifiedShortCircuit() throws Exception { - MockAsyncStack mockAsyncStack = new MockAsyncStack(); - List<Header> headers = new ArrayList<>(); - headers.add(new Header("ServerKeyA", "ServerValueA")); - headers.add(new Header("ServerKeyB", "ServerValueB")); - headers.add(new Header("SharedKey", "ServerValueShared")); - headers.add(new Header("sharedcaseinsensitivekey", "ServerValueShared1")); - headers.add(new Header("SharedCaseInsensitiveKey", "ServerValueShared2")); - HttpResponse fakeResponse = new HttpResponse(HttpURLConnection.HTTP_NOT_MODIFIED, headers); - mockAsyncStack.setResponseToReturn(fakeResponse); - BasicAsyncNetwork httpNetwork = new BasicAsyncNetwork.Builder(mockAsyncStack).build(); - httpNetwork.setBlockingExecutor(executor); - Request<String> request = buildRequest(); - httpNetwork.performRequest(request, mockCallback); - verify(mockCallback, times(1)).onSuccess(any(NetworkResponse.class)); - verify(mockCallback, never()).onError(any(VolleyError.class)); - reset(mMockRetryPolicy, mockCallback); - } - - @Test - public void performRequestSuccess() throws Exception { - MockAsyncStack mockAsyncStack = new MockAsyncStack(); - HttpResponse fakeResponse = - new HttpResponse( - 200, - Collections.<Header>emptyList(), - "foobar".getBytes(StandardCharsets.UTF_8)); - mockAsyncStack.setResponseToReturn(fakeResponse); - BasicAsyncNetwork httpNetwork = new BasicAsyncNetwork.Builder(mockAsyncStack).build(); - httpNetwork.setBlockingExecutor(executor); - Request<String> request = buildRequest(); - Entry entry = new Entry(); - entry.etag = "foobar"; - entry.lastModified = 1503102002000L; - request.setCacheEntry(entry); - httpNetwork.performRequest(request, mockCallback); - verify(mockCallback, times(1)).onSuccess(any(NetworkResponse.class)); - verify(mockCallback, never()).onError(any(VolleyError.class)); - reset(mMockRetryPolicy, mockCallback); - } - - @Test(expected = IllegalStateException.class) - public void performRequestNeverSetExecutorTest() throws Exception { - MockAsyncStack mockAsyncStack = new MockAsyncStack(); - HttpResponse fakeResponse = new HttpResponse(200, Collections.<Header>emptyList()); - mockAsyncStack.setResponseToReturn(fakeResponse); - BasicAsyncNetwork httpNetwork = new BasicAsyncNetwork.Builder(mockAsyncStack).build(); - Request<String> request = buildRequest(); - perform(request, httpNetwork).get(); - } - - /** Helper functions */ - private CompletableFuture<NetworkResponse> perform(Request<?> request, AsyncNetwork network) - throws VolleyError { - final CompletableFuture<NetworkResponse> future = new CompletableFuture<>(); - network.performRequest( - request, - new AsyncNetwork.OnRequestComplete() { - @Override - public void onSuccess(NetworkResponse networkResponse) { - future.complete(networkResponse); - } - - @Override - public void onError(VolleyError volleyError) { - future.complete(null); - } - }); - return future; - } - - private static Request<String> buildRequest() { - return new Request<String>(Request.Method.GET, "http://foo", null) { - - @Override - protected Response<String> parseNetworkResponse(NetworkResponse response) { - return null; - } - - @Override - protected void deliverResponse(String response) {} - - @Override - public Map<String, String> getHeaders() { - Map<String, String> result = new HashMap<String, String>(); - result.put("requestheader", "foo"); - return result; - } - - @Override - public Map<String, String> getParams() { - Map<String, String> result = new HashMap<String, String>(); - result.put("requestpost", "foo"); - return result; - } - }; - } -} |