13713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick/* 23713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * Copyright (C) 2011 The Android Open Source Project 33713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * 43713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * Licensed under the Apache License, Version 2.0 (the "License"); 53713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * you may not use this file except in compliance with the License. 63713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * You may obtain a copy of the License at 73713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * 83713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * http://www.apache.org/licenses/LICENSE-2.0 93713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * 103713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * Unless required by applicable law or agreed to in writing, software 113713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * distributed under the License is distributed on an "AS IS" BASIS, 123713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * See the License for the specific language governing permissions and 143713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick * limitations under the License. 153713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick */ 163713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick 173713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrickpackage com.android.volley; 183713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick 19cebf98c8edef6b3506258ddb68266febadd0db1aJeff Sharkeyimport android.test.suitebuilder.annotation.MediumTest; 20cebf98c8edef6b3506258ddb68266febadd0db1aJeff Sharkey 213713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrickimport com.android.volley.mock.MockCache; 223713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrickimport com.android.volley.mock.MockNetwork; 233713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrickimport com.android.volley.mock.MockRequest; 243713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrickimport com.android.volley.mock.MockResponseDelivery; 253713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrickimport com.android.volley.mock.WaitableQueue; 263713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick 273713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrickimport java.util.Arrays; 283713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick 293713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrickimport junit.framework.TestCase; 303713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick 31cebf98c8edef6b3506258ddb68266febadd0db1aJeff Sharkey@MediumTest 323713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrickpublic class NetworkDispatcherTest extends TestCase { 333713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick private NetworkDispatcher mDispatcher; 343713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick private MockResponseDelivery mDelivery; 353713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick private WaitableQueue mNetworkQueue; 363713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick private MockNetwork mNetwork; 373713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick private MockCache mCache; 383713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick private MockRequest mRequest; 393713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick 403713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick private static final byte[] CANNED_DATA = "Ceci n'est pas une vraie reponse".getBytes(); 413713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick private static final long TIMEOUT_MILLIS = 5000; 423713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick 433713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick @Override 443713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick protected void setUp() throws Exception { 453713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick super.setUp(); 463713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick 473713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick mDelivery = new MockResponseDelivery(); 483713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick mNetworkQueue = new WaitableQueue(); 493713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick mNetwork = new MockNetwork(); 503713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick mCache = new MockCache(); 513713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick mRequest = new MockRequest(); 523713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick mDispatcher = new NetworkDispatcher(mNetworkQueue, mNetwork, mCache, mDelivery); 533713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick mDispatcher.start(); 543713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick } 553713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick 563713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick @Override 573713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick protected void tearDown() throws Exception { 583713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick super.tearDown(); 593713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick mDispatcher.quit(); 603713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick mDispatcher.join(); 613713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick } 623713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick 633713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick public void testSuccessPostsResponse() throws Exception { 643713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick mNetwork.setDataToReturn(CANNED_DATA); 653713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick mNetwork.setNumExceptionsToThrow(0); 663713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick mNetworkQueue.add(mRequest); 673713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick mNetworkQueue.waitUntilEmpty(TIMEOUT_MILLIS); 683713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick assertFalse(mDelivery.postError_called); 693713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick assertTrue(mDelivery.postResponse_called); 703713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick Response<?> response = mDelivery.responsePosted; 713713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick assertNotNull(response); 723713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick assertTrue(response.isSuccess()); 733713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick assertTrue(Arrays.equals((byte[])response.result, CANNED_DATA)); 743713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick } 753713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick 763713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick public void testExceptionPostsError() throws Exception { 773713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick mNetwork.setNumExceptionsToThrow(MockNetwork.ALWAYS_THROW_EXCEPTIONS); 783713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick mNetworkQueue.add(mRequest); 793713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick mNetworkQueue.waitUntilEmpty(TIMEOUT_MILLIS); 803713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick assertFalse(mDelivery.postResponse_called); 813713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick assertTrue(mDelivery.postError_called); 823713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick } 833713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick 843713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick public void test_shouldCacheFalse() throws Exception { 853713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick mRequest.setShouldCache(false); 863713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick mNetworkQueue.add(mRequest); 873713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick mNetworkQueue.waitUntilEmpty(TIMEOUT_MILLIS); 883713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick assertFalse(mCache.putCalled); 893713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick } 903713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick 913713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick public void test_shouldCacheTrue() throws Exception { 923713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick mNetwork.setDataToReturn(CANNED_DATA); 933713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick mRequest.setShouldCache(true); 943713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick mRequest.setCacheKey("bananaphone"); 953713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick mNetworkQueue.add(mRequest); 963713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick mNetworkQueue.waitUntilEmpty(TIMEOUT_MILLIS); 973713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick assertTrue(mCache.putCalled); 983713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick assertNotNull(mCache.entryPut); 993713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick assertTrue(Arrays.equals(mCache.entryPut.data, CANNED_DATA)); 1003713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick assertEquals("bananaphone", mCache.keyPut); 1013713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick } 1023713094c56d25e25df2a508dbee4aea869ffdea1Ficus Kirkpatrick} 103