package net.callumtaylor.asynchttp; import android.test.AndroidTestCase; import junit.framework.Assert; import net.callumtaylor.asynchttp.response.StringResponseHandler; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import okhttp3.Cache; import okhttp3.Headers; /** * // TODO: Add class description * * @author Callum Taylor */ public class AsyncCacheTest extends AndroidTestCase { @Override protected void setUp() throws Exception { super.setUp(); } /** * Tests automatic cache controlling */ public void testGetCacheControl() throws InterruptedException { final CountDownLatch signal = new CountDownLatch(1); final long current = System.currentTimeMillis(); AsyncHttpClient.cache = new Cache(getContext().getCacheDir(), 1024 * 1024 * 1); AsyncHttpClient client = new AsyncHttpClient("http://httpbin.org/", 20000); client.get("cache/60", Headers.of("Request", "1"), new StringResponseHandler() { @Override public void onFinish() { final String firstResponse = getContent(); final int req1 = AsyncHttpClient.cache.requestCount(); final int net1 = AsyncHttpClient.cache.networkCount(); if (System.currentTimeMillis() - current < 60000) { AsyncHttpClient client = new AsyncHttpClient("http://httpbin.org/", 20000); client.get("cache/60", Headers.of("Request", "2"), new StringResponseHandler() { @Override public void onFinish() { final String secondResponse = getContent(); final int req2 = AsyncHttpClient.cache.requestCount(); final int net2 = AsyncHttpClient.cache.networkCount(); // Second response should not have first response header Assert.assertNull(getConnectionInfo().responseHeaders.get("Request")); Assert.assertNotNull(firstResponse); Assert.assertNotNull(secondResponse); Assert.assertEquals(firstResponse, secondResponse); Assert.assertTrue(net1 == net2); Assert.assertTrue(req1 < req2); Assert.assertTrue(req2 > net2); signal.countDown(); } }); } else { signal.countDown(); } } }); signal.await(60, TimeUnit.SECONDS); // Clean up AsyncHttpClient.cache = null; if (signal.getCount() > 0) { Assert.fail(); } } /** * Tests that caching is not used if cache is set to null */ public void testGetNoCacheControl() throws InterruptedException { final CountDownLatch signal = new CountDownLatch(1); final long current = System.currentTimeMillis(); AsyncHttpClient.cache = null; AsyncHttpClient client = new AsyncHttpClient("http://httpbin.org/", 20000); client.get("cache/60", Headers.of("Request", "1"), new StringResponseHandler() { @Override public void onFinish() { final String firstResponse = getContent(); if (System.currentTimeMillis() - current < 60000) { AsyncHttpClient client = new AsyncHttpClient("http://httpbin.org/", 20000); client.get("cache/60", Headers.of("Request", "2"), new StringResponseHandler() { @Override public void onFinish() { final String secondResponse = getContent(); Assert.assertNotNull(firstResponse); Assert.assertNotNull(secondResponse); // Responses should be different Assert.assertTrue(!firstResponse.equals(secondResponse)); signal.countDown(); } }); } else { Assert.fail(); signal.countDown(); } } }); signal.await(60, TimeUnit.SECONDS); if (signal.getCount() != 0) { Assert.fail(); } } }