1d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru/* 2d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * Copyright (C) 2011 The Android Open Source Project 3d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * 4d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * Licensed under the Apache License, Version 2.0 (the "License"); 5d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * you may not use this file except in compliance with the License. 6d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * You may obtain a copy of the License at 7d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * 8d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * http://www.apache.org/licenses/LICENSE-2.0 9d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * 10d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * Unless required by applicable law or agreed to in writing, software 11d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * distributed under the License is distributed on an "AS IS" BASIS, 12d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * See the License for the specific language governing permissions and 14d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru * limitations under the License. 15d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru */ 16d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru 17d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Querupackage com.android.volley; 18d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru 19d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queruimport com.android.volley.mock.MockCache; 20d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queruimport com.android.volley.mock.MockNetwork; 21d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queruimport com.android.volley.mock.MockRequest; 22d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queruimport com.android.volley.mock.MockResponseDelivery; 23d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queruimport com.android.volley.mock.WaitableQueue; 24b9b8dc3d98fb1a8c3f02c2c2fcc18cbd344c05cbFicus Kirkpatrickimport org.junit.After; 25b9b8dc3d98fb1a8c3f02c2c2fcc18cbd344c05cbFicus Kirkpatrickimport org.junit.Before; 26b9b8dc3d98fb1a8c3f02c2c2fcc18cbd344c05cbFicus Kirkpatrickimport org.junit.Test; 27b9b8dc3d98fb1a8c3f02c2c2fcc18cbd344c05cbFicus Kirkpatrickimport org.junit.runner.RunWith; 28b9b8dc3d98fb1a8c3f02c2c2fcc18cbd344c05cbFicus Kirkpatrickimport org.robolectric.RobolectricTestRunner; 29d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru 30d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queruimport java.util.Arrays; 31d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru 32b9b8dc3d98fb1a8c3f02c2c2fcc18cbd344c05cbFicus Kirkpatrickimport static org.junit.Assert.*; 33d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru 34b9b8dc3d98fb1a8c3f02c2c2fcc18cbd344c05cbFicus Kirkpatrick@RunWith(RobolectricTestRunner.class) 35b9b8dc3d98fb1a8c3f02c2c2fcc18cbd344c05cbFicus Kirkpatrickpublic class NetworkDispatcherTest { 36d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru private NetworkDispatcher mDispatcher; 37d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru private MockResponseDelivery mDelivery; 38d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru private WaitableQueue mNetworkQueue; 39d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru private MockNetwork mNetwork; 40d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru private MockCache mCache; 41d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru private MockRequest mRequest; 42d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru 43d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru private static final byte[] CANNED_DATA = "Ceci n'est pas une vraie reponse".getBytes(); 44d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru private static final long TIMEOUT_MILLIS = 5000; 45d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru 46b9b8dc3d98fb1a8c3f02c2c2fcc18cbd344c05cbFicus Kirkpatrick @Before public void setUp() throws Exception { 47d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru mDelivery = new MockResponseDelivery(); 48d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru mNetworkQueue = new WaitableQueue(); 49d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru mNetwork = new MockNetwork(); 50d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru mCache = new MockCache(); 51d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru mRequest = new MockRequest(); 52d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru mDispatcher = new NetworkDispatcher(mNetworkQueue, mNetwork, mCache, mDelivery); 53d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru mDispatcher.start(); 54d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru } 55d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru 56b9b8dc3d98fb1a8c3f02c2c2fcc18cbd344c05cbFicus Kirkpatrick @After public void tearDown() throws Exception { 57d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru mDispatcher.quit(); 58d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru mDispatcher.join(); 59d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru } 60d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru 61b9b8dc3d98fb1a8c3f02c2c2fcc18cbd344c05cbFicus Kirkpatrick @Test public void successPostsResponse() throws Exception { 62d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru mNetwork.setDataToReturn(CANNED_DATA); 63d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru mNetwork.setNumExceptionsToThrow(0); 64d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru mNetworkQueue.add(mRequest); 65d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru mNetworkQueue.waitUntilEmpty(TIMEOUT_MILLIS); 66d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru assertFalse(mDelivery.postError_called); 67d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru assertTrue(mDelivery.postResponse_called); 68d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru Response<?> response = mDelivery.responsePosted; 69d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru assertNotNull(response); 70d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru assertTrue(response.isSuccess()); 71d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru assertTrue(Arrays.equals((byte[])response.result, CANNED_DATA)); 72d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru } 73d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru 74b9b8dc3d98fb1a8c3f02c2c2fcc18cbd344c05cbFicus Kirkpatrick @Test public void exceptionPostsError() throws Exception { 75d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru mNetwork.setNumExceptionsToThrow(MockNetwork.ALWAYS_THROW_EXCEPTIONS); 76d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru mNetworkQueue.add(mRequest); 77d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru mNetworkQueue.waitUntilEmpty(TIMEOUT_MILLIS); 78d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru assertFalse(mDelivery.postResponse_called); 79d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru assertTrue(mDelivery.postError_called); 80d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru } 81d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru 82b9b8dc3d98fb1a8c3f02c2c2fcc18cbd344c05cbFicus Kirkpatrick @Test public void shouldCacheFalse() throws Exception { 83d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru mRequest.setShouldCache(false); 84d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru mNetworkQueue.add(mRequest); 85d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru mNetworkQueue.waitUntilEmpty(TIMEOUT_MILLIS); 86d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru assertFalse(mCache.putCalled); 87d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru } 88d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru 89b9b8dc3d98fb1a8c3f02c2c2fcc18cbd344c05cbFicus Kirkpatrick @Test public void shouldCacheTrue() throws Exception { 90d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru mNetwork.setDataToReturn(CANNED_DATA); 91d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru mRequest.setShouldCache(true); 92d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru mRequest.setCacheKey("bananaphone"); 93d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru mNetworkQueue.add(mRequest); 94d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru mNetworkQueue.waitUntilEmpty(TIMEOUT_MILLIS); 95d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru assertTrue(mCache.putCalled); 96d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru assertNotNull(mCache.entryPut); 97d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru assertTrue(Arrays.equals(mCache.entryPut.data, CANNED_DATA)); 98d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru assertEquals("bananaphone", mCache.keyPut); 99d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru } 100d56b88ae161057e848e7410d1b9ce5b0b8c427fcJean-Baptiste Queru} 101