@SmallTest
 @Feature({"Cronet"})
 public void testRealTimeNetworkQualityObservations() throws Exception {
   mActivity = launchCronetTestApp();
   TestExecutor testExecutor = new TestExecutor();
   TestNetworkQualityListener networkQualityListener = new TestNetworkQualityListener();
   mActivity.mCronetEngine.enableNetworkQualityEstimatorForTesting(true, true, testExecutor);
   mActivity.mCronetEngine.addRttListener(networkQualityListener);
   mActivity.mCronetEngine.addThroughputListener(networkQualityListener);
   TestUrlRequestListener listener = new TestUrlRequestListener();
   UrlRequest urlRequest =
       mActivity.mCronetEngine.createRequest(TEST_URL, listener, listener.getExecutor());
   urlRequest.start();
   listener.blockForDone();
   testExecutor.runAllTasks();
   assertTrue(networkQualityListener.rttObservationCount() > 0);
   assertTrue(networkQualityListener.throughputObservationCount() > 0);
   mActivity.mCronetEngine.shutdown();
 }
 @SmallTest
 @Feature({"Cronet"})
 public void testRealTimeNetworkQualityObservationsNotEnabled() throws Exception {
   mActivity = launchCronetTestApp();
   TestNetworkQualityListener networkQualityListener = new TestNetworkQualityListener();
   try {
     mActivity.mCronetEngine.addRttListener(networkQualityListener);
     fail("Should throw an exception.");
   } catch (IllegalStateException e) {
   }
   try {
     mActivity.mCronetEngine.addThroughputListener(networkQualityListener);
     fail("Should throw an exception.");
   } catch (IllegalStateException e) {
   }
   TestUrlRequestListener listener = new TestUrlRequestListener();
   UrlRequest urlRequest =
       mActivity.mCronetEngine.createRequest(TEST_URL, listener, listener.getExecutor());
   urlRequest.start();
   listener.blockForDone();
   assertEquals(0, networkQualityListener.rttObservationCount());
   assertEquals(0, networkQualityListener.throughputObservationCount());
   mActivity.mCronetEngine.shutdown();
 }