@SmallTest
  @Feature({"Cronet"})
  public void testDisableCache() throws Exception {
    enableCache(CronetEngine.Builder.HTTP_CACHE_DISK);
    String url = NativeTestServer.getFileURL("/cacheable.txt");

    // When cache is disabled, making a request does not write to the cache.
    checkRequestCaching(
        url, false, true
        /** disable cache */
        );
    checkRequestCaching(url, false);

    // When cache is enabled, the second request is cached.
    checkRequestCaching(
        url, false, true
        /** disable cache */
        );
    checkRequestCaching(url, true);

    // Shut down the server, next request should have a cached response.
    NativeTestServer.shutdownNativeTestServer();
    checkRequestCaching(url, true);

    // Cache is disabled after server is shut down, request should fail.
    TestUrlRequestListener listener = new TestUrlRequestListener();
    UrlRequest.Builder urlRequestBuilder =
        new UrlRequest.Builder(url, listener, listener.getExecutor(), mActivity.mCronetEngine);
    urlRequestBuilder.disableCache();
    urlRequestBuilder.build().start();
    listener.blockForDone();
    assertNotNull(listener.mError);
    assertEquals(
        "Exception in CronetUrlRequest: net::ERR_CONNECTION_REFUSED", listener.mError.getMessage());
  }
 private void checkRequestCaching(String url, boolean expectCached, boolean disableCache) {
   TestUrlRequestListener listener = new TestUrlRequestListener();
   UrlRequest.Builder urlRequestBuilder =
       new UrlRequest.Builder(url, listener, listener.getExecutor(), mActivity.mCronetEngine);
   if (disableCache) {
     urlRequestBuilder.disableCache();
   }
   urlRequestBuilder.build().start();
   listener.blockForDone();
   assertEquals(expectCached, listener.mResponseInfo.wasCached());
 }