@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());
  }
 @SmallTest
 @Feature({"Cronet"})
 public void testEnableHttpCacheDisk() throws Exception {
   enableCache(CronetEngine.Builder.HTTP_CACHE_DISK);
   String url = NativeTestServer.getFileURL("/cacheable.txt");
   checkRequestCaching(url, false);
   checkRequestCaching(url, true);
   NativeTestServer.shutdownNativeTestServer();
   checkRequestCaching(url, true);
 }
  @SmallTest
  @Feature({"Cronet"})
  public void testDataReductionProxyEnabled() throws Exception {
    mActivity = launchCronetTestAppAndSkipFactoryInit();

    // Ensure native code is loaded before trying to start test server.
    new CronetEngine.Builder(getInstrumentation().getTargetContext())
        .setLibraryName("cronet_tests")
        .build()
        .shutdown();

    assertTrue(NativeTestServer.startNativeTestServer(getInstrumentation().getTargetContext()));
    if (!NativeTestServer.isDataReductionProxySupported()) {
      return;
    }
    String serverHostPort = NativeTestServer.getHostPort();

    // Enable the Data Reduction Proxy and configure it to use the test
    // server as its primary proxy, and to check successfully that this
    // proxy is OK to use.
    CronetEngine.Builder cronetEngineBuilder =
        new CronetEngine.Builder(getInstrumentation().getTargetContext());
    cronetEngineBuilder.enableDataReductionProxy("test-key");
    cronetEngineBuilder.setDataReductionProxyOptions(
        serverHostPort,
        "unused.net:9999",
        NativeTestServer.getFileURL("/secureproxychecksuccess.txt"));
    cronetEngineBuilder.setLibraryName("cronet_tests");
    mActivity.mCronetEngine = cronetEngineBuilder.build();
    TestUrlRequestListener listener = new TestUrlRequestListener();

    // Construct and start a request that can only be returned by the test
    // server. This request will fail if the configuration logic for the
    // Data Reduction Proxy is not used.
    UrlRequest.Builder urlRequestBuilder =
        new UrlRequest.Builder(
            "http://DomainThatDoesnt.Resolve/datareductionproxysuccess.txt",
            listener,
            listener.getExecutor(),
            mActivity.mCronetEngine);
    urlRequestBuilder.build().start();
    listener.blockForDone();

    // Verify that the request is successful and that the Data Reduction
    // Proxy logic configured to use the test server as its proxy.
    assertEquals(200, listener.mResponseInfo.getHttpStatusCode());
    assertEquals(serverHostPort, listener.mResponseInfo.getProxyServer());
    assertEquals(
        "http://DomainThatDoesnt.Resolve/datareductionproxysuccess.txt",
        listener.mResponseInfo.getUrl());
  }
  @SmallTest
  @Feature({"Cronet"})
  public void testEnableHttpCacheDiskNewEngine() throws Exception {
    enableCache(CronetEngine.Builder.HTTP_CACHE_DISK);
    String url = NativeTestServer.getFileURL("/cacheable.txt");
    checkRequestCaching(url, false);
    checkRequestCaching(url, true);
    NativeTestServer.shutdownNativeTestServer();
    checkRequestCaching(url, true);

    // Shutdown original context and create another that uses the same cache.
    mActivity.mCronetEngine.shutdown();
    mActivity.mCronetEngine = mActivity.getCronetEngineBuilder().build();
    checkRequestCaching(url, true);
  }
 @SmallTest
 @Feature({"Cronet"})
 // Tests that creating a ByteBufferUploadProvider using a byte array with an
 // offset gives a ByteBuffer with position 0. crbug.com/603124.
 public void testCreateByteBufferUploadWithArrayOffset() throws Exception {
   TestUrlRequestCallback callback = new TestUrlRequestCallback();
   // This URL will trigger a rewind().
   UrlRequest.Builder builder =
       new UrlRequest.Builder(
           NativeTestServer.getRedirectToEchoBody(),
           callback,
           callback.getExecutor(),
           mTestFramework.mCronetEngine);
   builder.addHeader("Content-Type", "useless/string");
   byte[] uploadData = LOREM.getBytes("UTF-8");
   int offset = 5;
   byte[] uploadDataWithPadding = new byte[uploadData.length + offset];
   System.arraycopy(uploadData, 0, uploadDataWithPadding, offset, uploadData.length);
   UploadDataProvider dataProvider =
       UploadDataProviders.create(uploadDataWithPadding, offset, uploadData.length);
   assertEquals(uploadData.length, dataProvider.getLength());
   builder.setUploadDataProvider(dataProvider, callback.getExecutor());
   UrlRequest urlRequest = builder.build();
   urlRequest.start();
   callback.blockForDone();
   assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
   assertEquals(LOREM, callback.mResponseAsString);
 }
  @SmallTest
  @Feature({"Cronet"})
  public void testSimpleGet() throws Exception {
    String url = NativeTestServer.getEchoMethodURL();
    TestUrlRequestCallback callback = new TestUrlRequestCallback();
    callback.setAutoAdvance(false);
    UrlRequest.Builder builder =
        new UrlRequest.Builder(url, callback, callback.getExecutor(), mTestFramework.mCronetEngine);
    UrlRequest urlRequest = builder.build();
    // Calling before request is started should give Status.INVALID,
    // since the native adapter is not created.
    TestStatusListener statusListener0 = new TestStatusListener();
    urlRequest.getStatus(statusListener0);
    statusListener0.waitUntilOnStatusCalled();
    assertTrue(statusListener0.mOnStatusCalled);
    assertEquals(Status.INVALID, statusListener0.mStatus);

    urlRequest.start();

    // Should receive a valid status.
    TestStatusListener statusListener1 = new TestStatusListener();
    urlRequest.getStatus(statusListener1);
    statusListener1.waitUntilOnStatusCalled();
    assertTrue(statusListener1.mOnStatusCalled);
    assertTrue("Status is :" + statusListener1.mStatus, statusListener1.mStatus >= Status.IDLE);
    assertTrue(
        "Status is :" + statusListener1.mStatus,
        statusListener1.mStatus <= Status.READING_RESPONSE);

    callback.waitForNextStep();
    assertEquals(ResponseStep.ON_RESPONSE_STARTED, callback.mResponseStep);
    callback.startNextRead(urlRequest);

    // Should receive a valid status.
    TestStatusListener statusListener2 = new TestStatusListener();
    urlRequest.getStatus(statusListener2);
    statusListener2.waitUntilOnStatusCalled();
    assertTrue(statusListener2.mOnStatusCalled);
    assertTrue(statusListener1.mStatus >= Status.IDLE);
    assertTrue(statusListener1.mStatus <= Status.READING_RESPONSE);

    callback.waitForNextStep();
    assertEquals(ResponseStep.ON_READ_COMPLETED, callback.mResponseStep);

    callback.startNextRead(urlRequest);
    callback.blockForDone();

    // Calling after request done should give Status.INVALID, since
    // the native adapter is destroyed.
    TestStatusListener statusListener3 = new TestStatusListener();
    urlRequest.getStatus(statusListener3);
    statusListener3.waitUntilOnStatusCalled();
    assertTrue(statusListener3.mOnStatusCalled);
    assertEquals(Status.INVALID, statusListener3.mStatus);

    assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
    assertEquals("GET", callback.mResponseAsString);
  }
 @SmallTest
 @Feature({"Cronet"})
 public void testConfigUserAgent() throws Exception {
   String userAgentName = "User-Agent";
   String userAgentValue = "User-Agent-Value";
   CronetEngine.Builder cronetEngineBuilder = new CronetEngine.Builder(mActivity);
   cronetEngineBuilder.setUserAgent(userAgentValue);
   cronetEngineBuilder.setLibraryName("cronet_tests");
   String[] commandLineArgs = {CronetTestActivity.CONFIG_KEY, cronetEngineBuilder.toString()};
   mActivity = launchCronetTestAppWithUrlAndCommandLineArgs(TEST_URL, commandLineArgs);
   assertTrue(NativeTestServer.startNativeTestServer(getInstrumentation().getTargetContext()));
   TestUrlRequestListener listener = new TestUrlRequestListener();
   UrlRequest.Builder urlRequestBuilder =
       new UrlRequest.Builder(
           NativeTestServer.getEchoHeaderURL(userAgentName),
           listener,
           listener.getExecutor(),
           mActivity.mCronetEngine);
   urlRequestBuilder.build().start();
   listener.blockForDone();
   assertEquals(userAgentValue, listener.mResponseAsString);
 }
 private void enableCache(int cacheType) throws Exception {
   String cacheTypeString = "";
   if (cacheType == CronetEngine.Builder.HTTP_CACHE_DISK) {
     cacheTypeString = CronetTestActivity.CACHE_DISK;
   } else if (cacheType == CronetEngine.Builder.HTTP_CACHE_DISK_NO_HTTP) {
     cacheTypeString = CronetTestActivity.CACHE_DISK_NO_HTTP;
   } else if (cacheType == CronetEngine.Builder.HTTP_CACHE_IN_MEMORY) {
     cacheTypeString = CronetTestActivity.CACHE_IN_MEMORY;
   }
   String[] commandLineArgs = {CronetTestActivity.CACHE_KEY, cacheTypeString};
   mActivity = launchCronetTestAppWithUrlAndCommandLineArgs(null, commandLineArgs);
   assertTrue(NativeTestServer.startNativeTestServer(getInstrumentation().getTargetContext()));
 }
 @SmallTest
 @Feature({"Cronet"})
 public void testFileProvider() throws Exception {
   TestUrlRequestCallback callback = new TestUrlRequestCallback();
   UrlRequest.Builder builder =
       new UrlRequest.Builder(
           NativeTestServer.getRedirectToEchoBody(),
           callback,
           callback.getExecutor(),
           mTestFramework.mCronetEngine);
   UploadDataProvider dataProvider = UploadDataProviders.create(mFile);
   builder.setUploadDataProvider(dataProvider, callback.getExecutor());
   builder.addHeader("Content-Type", "useless/string");
   builder.build().start();
   callback.blockForDone();
   assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
   assertEquals(LOREM, callback.mResponseAsString);
 }
 @SuppressFBWarnings("DM_GC") // Used to trigger strictmode detecting leaked closeables
 @Override
 protected void tearDown() throws Exception {
   try {
     NativeTestServer.shutdownNativeTestServer();
     mTestFramework.mCronetEngine.shutdown();
     assertTrue(mFile.delete());
     // Run GC and finalizers a few times to pick up leaked closeables
     for (int i = 0; i < 10; i++) {
       System.gc();
       System.runFinalization();
     }
     System.gc();
     System.runFinalization();
     super.tearDown();
   } finally {
     StrictMode.setVmPolicy(mOldVmPolicy);
   }
 }
 @Override
 protected void setUp() throws Exception {
   super.setUp();
   mOldVmPolicy = StrictMode.getVmPolicy();
   StrictMode.setVmPolicy(
       new StrictMode.VmPolicy.Builder()
           .detectLeakedClosableObjects()
           .penaltyLog()
           .penaltyDeath()
           .build());
   mTestFramework = startCronetTestFramework();
   assertTrue(NativeTestServer.startNativeTestServer(getContext()));
   // Add url interceptors after native application context is initialized.
   MockUrlRequestJobFactory.setUp();
   mFile = new File(getContext().getCacheDir().getPath() + "/tmpfile");
   FileOutputStream fileOutputStream = new FileOutputStream(mFile);
   try {
     fileOutputStream.write(LOREM.getBytes("UTF-8"));
   } finally {
     fileOutputStream.close();
   }
 }
  @SmallTest
  @Feature({"Cronet"})
  public void testNoErrorWhenCanceledDuringStart() throws Exception {
    TestUrlRequestCallback callback = new TestUrlRequestCallback();
    UrlRequest.Builder builder =
        new UrlRequest.Builder(
            NativeTestServer.getEchoBodyURL(),
            callback,
            callback.getExecutor(),
            mTestFramework.mCronetEngine);
    final ConditionVariable first = new ConditionVariable();
    final ConditionVariable second = new ConditionVariable();
    builder.addHeader("Content-Type", "useless/string");
    builder.setUploadDataProvider(
        new UploadDataProvider() {
          @Override
          public long getLength() throws IOException {
            first.open();
            second.block();
            return 0;
          }

          @Override
          public void read(UploadDataSink uploadDataSink, ByteBuffer byteBuffer)
              throws IOException {}

          @Override
          public void rewind(UploadDataSink uploadDataSink) throws IOException {}
        },
        callback.getExecutor());
    UrlRequest urlRequest = builder.build();
    urlRequest.start();
    first.block();
    urlRequest.cancel();
    second.open();
    callback.blockForDone();
    assertTrue(callback.mOnCanceledCalled);
  }
  @SmallTest
  @Feature({"Cronet"})
  public void testNoErrorWhenExceptionDuringStart() throws Exception {
    TestUrlRequestCallback callback = new TestUrlRequestCallback();
    UrlRequest.Builder builder =
        new UrlRequest.Builder(
            NativeTestServer.getEchoBodyURL(),
            callback,
            callback.getExecutor(),
            mTestFramework.mCronetEngine);
    final ConditionVariable first = new ConditionVariable();
    final String exceptionMessage = "Bad Length";
    builder.addHeader("Content-Type", "useless/string");
    builder.setUploadDataProvider(
        new UploadDataProvider() {
          @Override
          public long getLength() throws IOException {
            first.open();
            throw new IOException(exceptionMessage);
          }

          @Override
          public void read(UploadDataSink uploadDataSink, ByteBuffer byteBuffer)
              throws IOException {}

          @Override
          public void rewind(UploadDataSink uploadDataSink) throws IOException {}
        },
        callback.getExecutor());
    UrlRequest urlRequest = builder.build();
    urlRequest.start();
    first.block();
    callback.blockForDone();
    assertFalse(callback.mOnCanceledCalled);
    assertEquals(UrlRequestError.LISTENER_EXCEPTION_THROWN, callback.mError.getErrorCode());
    assertEquals("Exception received from UploadDataProvider", callback.mError.getMessage());
    assertEquals(exceptionMessage, callback.mError.getCause().getMessage());
  }
  @SmallTest
  @Feature({"Cronet"})
  public void testBadFileDescriptorProvider() throws Exception {
    TestUrlRequestCallback callback = new TestUrlRequestCallback();
    UrlRequest.Builder builder =
        new UrlRequest.Builder(
            NativeTestServer.getRedirectToEchoBody(),
            callback,
            callback.getExecutor(),
            mTestFramework.mCronetEngine);
    ParcelFileDescriptor[] pipe = ParcelFileDescriptor.createPipe();
    try {
      UploadDataProvider dataProvider = UploadDataProviders.create(pipe[0]);
      builder.setUploadDataProvider(dataProvider, callback.getExecutor());
      builder.addHeader("Content-Type", "useless/string");
      builder.build().start();
      callback.blockForDone();

      assertTrue(callback.mError.getCause() instanceof IllegalArgumentException);
    } finally {
      pipe[1].close();
    }
  }
Beispiel #15
0
 @Override
 protected void setUp() throws Exception {
   super.setUp();
   mActivity = launchCronetTestApp();
   assertTrue(NativeTestServer.startNativeTestServer(getInstrumentation().getTargetContext()));
 }
Beispiel #16
0
 @Override
 protected void setUp() throws Exception {
   super.setUp();
   mTestFramework = startCronetTestFramework();
   assertTrue(NativeTestServer.startNativeTestServer(getContext()));
 }
Beispiel #17
0
 @Override
 protected void tearDown() throws Exception {
   NativeTestServer.shutdownNativeTestServer();
   mTestFramework.mCronetEngine.shutdown();
   super.tearDown();
 }