Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3200d086 authored by Jesse Wilson's avatar Jesse Wilson Committed by Android (Google) Code Review
Browse files

Merge "Implement the (hidden) ExtendedResponseCache interface."

parents 5c447e6b 18c227ba
Loading
Loading
Loading
Loading
+19 −1
Original line number Diff line number Diff line
@@ -22,8 +22,10 @@ import java.io.File;
import java.io.IOException;
import java.net.CacheRequest;
import java.net.CacheResponse;
import java.net.ExtendedResponseCache;
import java.net.HttpURLConnection;
import java.net.ResponseCache;
import java.net.ResponseSource;
import java.net.URI;
import java.net.URLConnection;
import java.util.List;
@@ -149,7 +151,8 @@ import org.apache.http.impl.client.DefaultHttpClient;
 *       } catch (Exception httpResponseCacheNotAvailable) {
 *       }}</pre>
 */
public final class HttpResponseCache extends ResponseCache implements Closeable {
public final class HttpResponseCache extends ResponseCache
        implements Closeable, ExtendedResponseCache {

    private final libcore.net.http.HttpResponseCache delegate;

@@ -260,6 +263,21 @@ public final class HttpResponseCache extends ResponseCache implements Closeable
        return delegate.getRequestCount();
    }

    /** @hide */
    @Override public void trackResponse(ResponseSource source) {
        delegate.trackResponse(source);
    }

    /** @hide */
    @Override public void trackConditionalCacheHit() {
        delegate.trackConditionalCacheHit();
    }

    /** @hide */
    @Override public void update(CacheResponse conditionalCacheHit, HttpURLConnection connection) {
        delegate.update(conditionalCacheHit, connection);
    }

    /**
     * Uninstalls the cache and releases any active resources. Stored contents
     * will remain on the filesystem.
+32 −0
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package android.net.http;

import com.google.mockwebserver.MockResponse;
import com.google.mockwebserver.MockWebServer;
import java.io.File;
import java.net.CacheRequest;
import java.net.CacheResponse;
@@ -30,6 +32,7 @@ import junit.framework.TestCase;
public final class HttpResponseCacheTest extends TestCase {

    private File cacheDir;
    private MockWebServer server = new MockWebServer();

    @Override public void setUp() throws Exception {
        super.setUp();
@@ -39,6 +42,7 @@ public final class HttpResponseCacheTest extends TestCase {

    @Override protected void tearDown() throws Exception {
        ResponseCache.setDefault(null);
        server.shutdown();
        super.tearDown();
    }

@@ -100,4 +104,32 @@ public final class HttpResponseCacheTest extends TestCase {
        cache.delete();
        assertNull(ResponseCache.getDefault());
    }

    /**
     * Make sure that statistics tracking are wired all the way through the
     * wrapper class. http://code.google.com/p/android/issues/detail?id=25418
     */
    public void testStatisticsTracking() throws Exception {
        HttpResponseCache cache = HttpResponseCache.install(cacheDir, 10 * 1024 * 1024);

        server.enqueue(new MockResponse()
                .addHeader("Cache-Control: max-age=60")
                .setBody("A"));
        server.play();

        URLConnection c1 = server.getUrl("/").openConnection();
        assertEquals('A', c1.getInputStream().read());
        assertEquals(1, cache.getRequestCount());
        assertEquals(1, cache.getNetworkCount());
        assertEquals(0, cache.getHitCount());

        URLConnection c2 = server.getUrl("/").openConnection();
        assertEquals('A', c2.getInputStream().read());

        URLConnection c3 = server.getUrl("/").openConnection();
        assertEquals('A', c3.getInputStream().read());
        assertEquals(3, cache.getRequestCount());
        assertEquals(1, cache.getNetworkCount());
        assertEquals(2, cache.getHitCount());
    }
}