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