Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package org.chromium.net; | 5 package org.chromium.net; |
| 6 | 6 |
| 7 import static org.chromium.base.CollectionUtil.newHashSet; | 7 import static org.chromium.base.CollectionUtil.newHashSet; |
| 8 | 8 |
| 9 import android.os.ConditionVariable; | |
| 9 import android.test.suitebuilder.annotation.SmallTest; | 10 import android.test.suitebuilder.annotation.SmallTest; |
| 10 | 11 |
| 11 import org.chromium.base.test.util.Feature; | 12 import org.chromium.base.test.util.Feature; |
| 12 import org.chromium.net.MetricsTestUtil.TestExecutor; | 13 import org.chromium.net.MetricsTestUtil.TestExecutor; |
| 13 import org.chromium.net.MetricsTestUtil.TestRequestFinishedListener; | 14 import org.chromium.net.MetricsTestUtil.TestRequestFinishedListener; |
| 14 import org.chromium.net.impl.CronetMetrics; | 15 import org.chromium.net.impl.CronetMetrics; |
| 15 import org.chromium.net.test.EmbeddedTestServer; | 16 import org.chromium.net.test.EmbeddedTestServer; |
| 16 | 17 |
| 17 import java.util.ArrayList; | 18 import java.util.ArrayList; |
| 18 import java.util.Date; | 19 import java.util.Date; |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 35 mUrl = mTestServer.getURL("/echo?status=200"); | 36 mUrl = mTestServer.getURL("/echo?status=200"); |
| 36 } | 37 } |
| 37 | 38 |
| 38 @Override | 39 @Override |
| 39 protected void tearDown() throws Exception { | 40 protected void tearDown() throws Exception { |
| 40 mTestServer.stopAndDestroyServer(); | 41 mTestServer.stopAndDestroyServer(); |
| 41 super.tearDown(); | 42 super.tearDown(); |
| 42 } | 43 } |
| 43 | 44 |
| 44 static class DirectExecutor implements Executor { | 45 static class DirectExecutor implements Executor { |
| 46 private ConditionVariable mBlock = new ConditionVariable(); | |
| 47 | |
| 45 @Override | 48 @Override |
| 46 public void execute(Runnable task) { | 49 public void execute(Runnable task) { |
| 47 task.run(); | 50 task.run(); |
| 51 mBlock.open(); | |
| 52 } | |
| 53 | |
| 54 public void blockUntilDone() { | |
| 55 mBlock.block(); | |
| 48 } | 56 } |
| 49 } | 57 } |
| 50 | 58 |
| 51 static class ThreadExecutor implements Executor { | 59 static class ThreadExecutor implements Executor { |
| 52 private List<Thread> mThreads = new ArrayList<Thread>(); | 60 private List<Thread> mThreads = new ArrayList<Thread>(); |
| 53 | 61 |
| 54 @Override | 62 @Override |
| 55 public void execute(Runnable task) { | 63 public void execute(Runnable task) { |
| 56 Thread newThread = new Thread(task); | 64 Thread newThread = new Thread(task); |
| 57 mThreads.add(newThread); | 65 mThreads.add(newThread); |
| 58 newThread.start(); | 66 newThread.start(); |
| 59 } | 67 } |
| 60 | 68 |
| 61 public void joinAll() throws InterruptedException { | 69 public void joinAll() throws InterruptedException { |
| 62 for (Thread thread : mThreads) { | 70 for (Thread thread : mThreads) { |
| 63 thread.join(); | 71 thread.join(); |
| 64 } | 72 } |
| 65 } | 73 } |
| 66 } | 74 } |
| 67 | 75 |
| 68 @SmallTest | 76 @SmallTest |
| 77 @OnlyRunNativeCronet | |
| 69 @Feature({"Cronet"}) | 78 @Feature({"Cronet"}) |
| 70 @SuppressWarnings("deprecation") | 79 @SuppressWarnings("deprecation") |
| 71 public void testRequestFinishedListener() throws Exception { | 80 public void testRequestFinishedListener() throws Exception { |
| 72 mTestFramework = startCronetTestFramework(); | 81 mTestFramework = startCronetTestFramework(); |
| 73 TestExecutor testExecutor = new TestExecutor(); | 82 TestRequestFinishedListener requestFinishedListener = new TestRequestFin ishedListener(); |
| 74 TestRequestFinishedListener requestFinishedListener = | |
| 75 new TestRequestFinishedListener(testExecutor); | |
| 76 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL istener); | 83 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL istener); |
| 77 TestUrlRequestCallback callback = new TestUrlRequestCallback(); | 84 TestUrlRequestCallback callback = new TestUrlRequestCallback(); |
| 78 UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder( | 85 UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder( |
| 79 mUrl, callback, callback.getExecutor(), mTestFramework.mCronetEn gine); | 86 mUrl, callback, callback.getExecutor(), mTestFramework.mCronetEn gine); |
| 87 Date startTime = new Date(); | |
| 80 urlRequestBuilder.addRequestAnnotation("request annotation") | 88 urlRequestBuilder.addRequestAnnotation("request annotation") |
| 81 .addRequestAnnotation(this) | 89 .addRequestAnnotation(this) |
| 82 .build() | 90 .build() |
| 83 .start(); | 91 .start(); |
| 84 callback.blockForDone(); | 92 callback.blockForDone(); |
| 85 testExecutor.runAllTasks(); | 93 requestFinishedListener.blockUntilDone(); |
| 94 Date endTime = new Date(); | |
| 86 | 95 |
| 87 RequestFinishedInfo requestInfo = requestFinishedListener.getRequestInfo (); | 96 RequestFinishedInfo requestInfo = requestFinishedListener.getRequestInfo (); |
| 88 assertNotNull("RequestFinishedInfo.Listener must be called", requestInfo ); | 97 assertNotNull("RequestFinishedInfo.Listener must be called", requestInfo ); |
| 89 assertEquals(mUrl, requestInfo.getUrl()); | 98 assertEquals(mUrl, requestInfo.getUrl()); |
| 90 assertNotNull(requestInfo.getResponseInfo()); | 99 assertNotNull(requestInfo.getResponseInfo()); |
| 91 assertEquals(newHashSet("request annotation", this), // Use sets for uno rdered comparison. | 100 assertEquals(newHashSet("request annotation", this), // Use sets for uno rdered comparison. |
| 92 new HashSet<Object>(requestInfo.getAnnotations())); | 101 new HashSet<Object>(requestInfo.getAnnotations())); |
| 93 RequestFinishedInfo.Metrics metrics = requestInfo.getMetrics(); | 102 RequestFinishedInfo.Metrics metrics = requestInfo.getMetrics(); |
| 94 assertNotNull("RequestFinishedInfo.getMetrics() must not be null", metri cs); | 103 assertNotNull("RequestFinishedInfo.getMetrics() must not be null", metri cs); |
| 104 // Check old (deprecated) timing metrics | |
| 95 assertTrue(metrics.getTotalTimeMs() > 0); | 105 assertTrue(metrics.getTotalTimeMs() > 0); |
| 96 assertTrue(metrics.getTotalTimeMs() >= metrics.getTtfbMs()); | 106 assertTrue(metrics.getTotalTimeMs() >= metrics.getTtfbMs()); |
| 107 // Check new timing metrics | |
| 108 MetricsTestUtil.checkTimingMetrics(metrics, startTime, endTime); | |
| 109 MetricsTestUtil.checkHasConnectTiming(metrics, startTime, endTime, false ); | |
| 110 assertNull(metrics.getPushStart()); | |
| 111 assertNull(metrics.getPushEnd()); | |
| 112 // Check data use metrics | |
| 97 assertTrue(metrics.getReceivedBytesCount() > 0); | 113 assertTrue(metrics.getReceivedBytesCount() > 0); |
| 98 mTestFramework.mCronetEngine.shutdown(); | 114 mTestFramework.mCronetEngine.shutdown(); |
| 99 } | 115 } |
| 100 | 116 |
| 101 @SmallTest | 117 @SmallTest |
| 118 @OnlyRunNativeCronet | |
| 102 @Feature({"Cronet"}) | 119 @Feature({"Cronet"}) |
| 103 @SuppressWarnings("deprecation") | 120 @SuppressWarnings("deprecation") |
| 104 public void testRequestFinishedListenerDirectExecutor() throws Exception { | 121 public void testRequestFinishedListenerDirectExecutor() throws Exception { |
| 105 mTestFramework = startCronetTestFramework(); | 122 mTestFramework = startCronetTestFramework(); |
| 106 Executor testExecutor = new DirectExecutor(); | 123 DirectExecutor testExecutor = new DirectExecutor(); |
| 107 TestRequestFinishedListener requestFinishedListener = | 124 TestRequestFinishedListener requestFinishedListener = |
| 108 new TestRequestFinishedListener(testExecutor); | 125 new TestRequestFinishedListener(testExecutor); |
| 109 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL istener); | 126 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL istener); |
| 110 TestUrlRequestCallback callback = new TestUrlRequestCallback(); | 127 TestUrlRequestCallback callback = new TestUrlRequestCallback(); |
| 111 UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder( | 128 UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder( |
| 112 mUrl, callback, callback.getExecutor(), mTestFramework.mCronetEn gine); | 129 mUrl, callback, callback.getExecutor(), mTestFramework.mCronetEn gine); |
| 130 Date startTime = new Date(); | |
| 113 urlRequestBuilder.addRequestAnnotation("request annotation") | 131 urlRequestBuilder.addRequestAnnotation("request annotation") |
| 114 .addRequestAnnotation(this) | 132 .addRequestAnnotation(this) |
| 115 .build() | 133 .build() |
| 116 .start(); | 134 .start(); |
| 117 callback.blockForDone(); | 135 callback.blockForDone(); |
| 136 testExecutor.blockUntilDone(); | |
|
xunjieli
2016/10/04 22:29:23
Why don't we use requestFinishedListener.blockUnti
mgersh
2016/10/05 16:55:18
The point of this test is to use a direct executor
| |
| 137 Date endTime = new Date(); | |
| 118 | 138 |
| 119 RequestFinishedInfo requestInfo = requestFinishedListener.getRequestInfo (); | 139 RequestFinishedInfo requestInfo = requestFinishedListener.getRequestInfo (); |
| 120 assertNotNull("RequestFinishedInfo.Listener must be called", requestInfo ); | 140 assertNotNull("RequestFinishedInfo.Listener must be called", requestInfo ); |
| 121 assertEquals(mUrl, requestInfo.getUrl()); | 141 assertEquals(mUrl, requestInfo.getUrl()); |
| 122 assertNotNull(requestInfo.getResponseInfo()); | 142 assertNotNull(requestInfo.getResponseInfo()); |
| 123 assertEquals(newHashSet("request annotation", this), // Use sets for uno rdered comparison. | 143 assertEquals(newHashSet("request annotation", this), // Use sets for uno rdered comparison. |
| 124 new HashSet<Object>(requestInfo.getAnnotations())); | 144 new HashSet<Object>(requestInfo.getAnnotations())); |
| 125 RequestFinishedInfo.Metrics metrics = requestInfo.getMetrics(); | 145 RequestFinishedInfo.Metrics metrics = requestInfo.getMetrics(); |
| 126 assertNotNull("RequestFinishedInfo.getMetrics() must not be null", metri cs); | 146 assertNotNull("RequestFinishedInfo.getMetrics() must not be null", metri cs); |
| 127 assertTrue(metrics.getTotalTimeMs() > 0); | 147 assertTrue(metrics.getTotalTimeMs() > 0); |
| 128 assertTrue(metrics.getTotalTimeMs() >= metrics.getTtfbMs()); | 148 assertTrue(metrics.getTotalTimeMs() >= metrics.getTtfbMs()); |
| 149 MetricsTestUtil.checkTimingMetrics(metrics, startTime, endTime); | |
| 150 MetricsTestUtil.checkHasConnectTiming(metrics, startTime, endTime, false ); | |
| 129 assertTrue(metrics.getReceivedBytesCount() > 0); | 151 assertTrue(metrics.getReceivedBytesCount() > 0); |
| 130 mTestFramework.mCronetEngine.shutdown(); | 152 mTestFramework.mCronetEngine.shutdown(); |
| 131 } | 153 } |
| 132 | 154 |
| 133 @SmallTest | 155 @SmallTest |
| 156 @OnlyRunNativeCronet | |
| 134 @Feature({"Cronet"}) | 157 @Feature({"Cronet"}) |
| 135 @SuppressWarnings("deprecation") | 158 @SuppressWarnings("deprecation") |
| 136 public void testRequestFinishedListenerDifferentThreads() throws Exception { | 159 public void testRequestFinishedListenerDifferentThreads() throws Exception { |
| 137 mTestFramework = startCronetTestFramework(); | 160 mTestFramework = startCronetTestFramework(); |
| 138 ThreadExecutor testExecutor = new ThreadExecutor(); | 161 TestRequestFinishedListener firstListener = new TestRequestFinishedListe ner(); |
| 139 TestRequestFinishedListener firstListener = new TestRequestFinishedListe ner(testExecutor); | 162 TestRequestFinishedListener secondListener = new TestRequestFinishedList ener(); |
| 140 TestRequestFinishedListener secondListener = new TestRequestFinishedList ener(testExecutor); | |
| 141 mTestFramework.mCronetEngine.addRequestFinishedListener(firstListener); | 163 mTestFramework.mCronetEngine.addRequestFinishedListener(firstListener); |
| 142 mTestFramework.mCronetEngine.addRequestFinishedListener(secondListener); | 164 mTestFramework.mCronetEngine.addRequestFinishedListener(secondListener); |
| 143 TestUrlRequestCallback callback = new TestUrlRequestCallback(); | 165 TestUrlRequestCallback callback = new TestUrlRequestCallback(); |
| 144 UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder( | 166 UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder( |
| 145 mUrl, callback, callback.getExecutor(), mTestFramework.mCronetEn gine); | 167 mUrl, callback, callback.getExecutor(), mTestFramework.mCronetEn gine); |
| 168 Date startTime = new Date(); | |
| 146 urlRequestBuilder.addRequestAnnotation("request annotation") | 169 urlRequestBuilder.addRequestAnnotation("request annotation") |
| 147 .addRequestAnnotation(this) | 170 .addRequestAnnotation(this) |
| 148 .build() | 171 .build() |
| 149 .start(); | 172 .start(); |
| 150 callback.blockForDone(); | 173 callback.blockForDone(); |
| 151 testExecutor.joinAll(); | 174 firstListener.blockUntilDone(); |
| 175 secondListener.blockUntilDone(); | |
| 176 Date endTime = new Date(); | |
| 152 | 177 |
| 153 RequestFinishedInfo firstRequestInfo = firstListener.getRequestInfo(); | 178 RequestFinishedInfo firstRequestInfo = firstListener.getRequestInfo(); |
| 154 RequestFinishedInfo secondRequestInfo = secondListener.getRequestInfo(); | 179 RequestFinishedInfo secondRequestInfo = secondListener.getRequestInfo(); |
| 155 assertNotNull("First RequestFinishedInfo.Listener must be called", first RequestInfo); | 180 assertNotNull("First RequestFinishedInfo.Listener must be called", first RequestInfo); |
| 156 assertNotNull("Second RequestFinishedInfo.Listener must be called", seco ndRequestInfo); | 181 assertNotNull("Second RequestFinishedInfo.Listener must be called", seco ndRequestInfo); |
| 157 assertEquals(mUrl, firstRequestInfo.getUrl()); | 182 assertEquals(mUrl, firstRequestInfo.getUrl()); |
| 158 assertEquals(mUrl, secondRequestInfo.getUrl()); | 183 assertEquals(mUrl, secondRequestInfo.getUrl()); |
| 159 assertNotNull(firstRequestInfo.getResponseInfo()); | 184 assertNotNull(firstRequestInfo.getResponseInfo()); |
| 160 assertNotNull(secondRequestInfo.getResponseInfo()); | 185 assertNotNull(secondRequestInfo.getResponseInfo()); |
| 161 assertEquals(newHashSet("request annotation", this), // Use sets for uno rdered comparison. | 186 assertEquals(newHashSet("request annotation", this), // Use sets for uno rdered comparison. |
| 162 new HashSet<Object>(firstRequestInfo.getAnnotations())); | 187 new HashSet<Object>(firstRequestInfo.getAnnotations())); |
| 163 assertEquals(newHashSet("request annotation", this), | 188 assertEquals(newHashSet("request annotation", this), |
| 164 new HashSet<Object>(secondRequestInfo.getAnnotations())); | 189 new HashSet<Object>(secondRequestInfo.getAnnotations())); |
| 165 RequestFinishedInfo.Metrics firstMetrics = firstRequestInfo.getMetrics() ; | 190 RequestFinishedInfo.Metrics firstMetrics = firstRequestInfo.getMetrics() ; |
| 166 assertNotNull("RequestFinishedInfo.getMetrics() must not be null", first Metrics); | 191 assertNotNull("RequestFinishedInfo.getMetrics() must not be null", first Metrics); |
| 167 assertTrue(firstMetrics.getTotalTimeMs() > 0); | 192 assertTrue(firstMetrics.getTotalTimeMs() > 0); |
| 168 assertTrue(firstMetrics.getTotalTimeMs() >= firstMetrics.getTtfbMs()); | 193 assertTrue(firstMetrics.getTotalTimeMs() >= firstMetrics.getTtfbMs()); |
| 194 MetricsTestUtil.checkTimingMetrics(firstMetrics, startTime, endTime); | |
| 195 MetricsTestUtil.checkHasConnectTiming(firstMetrics, startTime, endTime, false); | |
| 169 assertTrue(firstMetrics.getReceivedBytesCount() > 0); | 196 assertTrue(firstMetrics.getReceivedBytesCount() > 0); |
| 170 RequestFinishedInfo.Metrics secondMetrics = secondRequestInfo.getMetrics (); | 197 RequestFinishedInfo.Metrics secondMetrics = secondRequestInfo.getMetrics (); |
| 171 assertNotNull("RequestFinishedInfo.getMetrics() must not be null", secon dMetrics); | 198 assertNotNull("RequestFinishedInfo.getMetrics() must not be null", secon dMetrics); |
| 172 assertTrue(secondMetrics.getTotalTimeMs() > 0); | 199 assertTrue(secondMetrics.getTotalTimeMs() > 0); |
| 173 assertTrue(secondMetrics.getTotalTimeMs() >= secondMetrics.getTtfbMs()); | 200 assertTrue(secondMetrics.getTotalTimeMs() >= secondMetrics.getTtfbMs()); |
| 201 MetricsTestUtil.checkTimingMetrics(secondMetrics, startTime, endTime); | |
| 202 MetricsTestUtil.checkHasConnectTiming(secondMetrics, startTime, endTime, false); | |
| 174 assertTrue(secondMetrics.getReceivedBytesCount() > 0); | 203 assertTrue(secondMetrics.getReceivedBytesCount() > 0); |
| 175 mTestFramework.mCronetEngine.shutdown(); | 204 mTestFramework.mCronetEngine.shutdown(); |
| 176 } | 205 } |
| 177 | 206 |
| 178 @SmallTest | 207 @SmallTest |
| 208 @OnlyRunNativeCronet | |
| 179 @Feature({"Cronet"}) | 209 @Feature({"Cronet"}) |
| 180 @SuppressWarnings("deprecation") | 210 @SuppressWarnings("deprecation") |
| 181 public void testRequestFinishedListenerFailedRequest() throws Exception { | 211 public void testRequestFinishedListenerFailedRequest() throws Exception { |
| 182 String connectionRefusedUrl = "http://127.0.0.1:3"; | 212 String connectionRefusedUrl = "http://127.0.0.1:3"; |
| 183 mTestFramework = startCronetTestFramework(); | 213 mTestFramework = startCronetTestFramework(); |
| 184 TestExecutor testExecutor = new TestExecutor(); | 214 TestRequestFinishedListener requestFinishedListener = new TestRequestFin ishedListener(); |
| 185 TestRequestFinishedListener requestFinishedListener = | |
| 186 new TestRequestFinishedListener(testExecutor); | |
| 187 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL istener); | 215 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL istener); |
| 188 TestUrlRequestCallback callback = new TestUrlRequestCallback(); | 216 TestUrlRequestCallback callback = new TestUrlRequestCallback(); |
| 189 UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder(connection RefusedUrl, | 217 UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder(connection RefusedUrl, |
| 190 callback, callback.getExecutor(), mTestFramework.mCronetEngine); | 218 callback, callback.getExecutor(), mTestFramework.mCronetEngine); |
| 219 Date startTime = new Date(); | |
| 191 urlRequestBuilder.build().start(); | 220 urlRequestBuilder.build().start(); |
| 192 callback.blockForDone(); | 221 callback.blockForDone(); |
| 193 assertTrue(callback.mOnErrorCalled); | 222 assertTrue(callback.mOnErrorCalled); |
| 194 testExecutor.runAllTasks(); | 223 requestFinishedListener.blockUntilDone(); |
| 224 Date endTime = new Date(); | |
| 195 | 225 |
| 196 RequestFinishedInfo requestInfo = requestFinishedListener.getRequestInfo (); | 226 RequestFinishedInfo requestInfo = requestFinishedListener.getRequestInfo (); |
| 197 assertNotNull("RequestFinishedInfo.Listener must be called", requestInfo ); | 227 assertNotNull("RequestFinishedInfo.Listener must be called", requestInfo ); |
| 198 assertEquals(connectionRefusedUrl, requestInfo.getUrl()); | 228 assertEquals(connectionRefusedUrl, requestInfo.getUrl()); |
| 199 assertTrue(requestInfo.getAnnotations().isEmpty()); | 229 assertTrue(requestInfo.getAnnotations().isEmpty()); |
| 200 RequestFinishedInfo.Metrics metrics = requestInfo.getMetrics(); | 230 RequestFinishedInfo.Metrics metrics = requestInfo.getMetrics(); |
| 201 assertNotNull("RequestFinishedInfo.getMetrics() must not be null", metri cs); | 231 assertNotNull("RequestFinishedInfo.getMetrics() must not be null", metri cs); |
| 202 // The failure is occasionally fast enough that time reported is 0, so j ust check for null | 232 // The failure is occasionally fast enough that time reported is 0, so j ust check for null |
| 203 assertNotNull(metrics.getTotalTimeMs()); | 233 assertNotNull(metrics.getTotalTimeMs()); |
| 204 assertNull(metrics.getTtfbMs()); | 234 assertNull(metrics.getTtfbMs()); |
| 235 | |
| 236 // Check the timing metrics | |
| 237 assertNotNull(metrics.getRequestStart()); | |
| 238 assertTrue(metrics.getRequestStart().after(startTime)); | |
| 239 MetricsTestUtil.checkNoConnectTiming(metrics); | |
| 240 assertNull(metrics.getSendingStart()); | |
| 241 assertNull(metrics.getSendingEnd()); | |
| 242 assertNull(metrics.getResponseStart()); | |
| 243 assertNotNull(metrics.getResponseEnd()); | |
| 244 assertTrue(metrics.getResponseEnd().before(endTime)); | |
| 245 // Entire request should take more than 0 ms | |
| 246 assertTrue(metrics.getResponseEnd().getTime() - metrics.getRequestStart( ).getTime() > 0); | |
| 247 | |
| 205 assertTrue(metrics.getReceivedBytesCount() == null || metrics.getReceive dBytesCount() == 0); | 248 assertTrue(metrics.getReceivedBytesCount() == null || metrics.getReceive dBytesCount() == 0); |
| 206 mTestFramework.mCronetEngine.shutdown(); | 249 mTestFramework.mCronetEngine.shutdown(); |
| 207 } | 250 } |
| 208 | 251 |
| 209 @SmallTest | 252 @SmallTest |
| 253 @OnlyRunNativeCronet | |
| 210 @Feature({"Cronet"}) | 254 @Feature({"Cronet"}) |
| 211 @SuppressWarnings("deprecation") | 255 @SuppressWarnings("deprecation") |
| 212 public void testRequestFinishedListenerRemoved() throws Exception { | 256 public void testRequestFinishedListenerRemoved() throws Exception { |
| 213 mTestFramework = startCronetTestFramework(); | 257 mTestFramework = startCronetTestFramework(); |
| 214 TestExecutor testExecutor = new TestExecutor(); | 258 TestExecutor testExecutor = new TestExecutor(); |
| 215 TestRequestFinishedListener requestFinishedListener = | 259 TestRequestFinishedListener requestFinishedListener = |
| 216 new TestRequestFinishedListener(testExecutor); | 260 new TestRequestFinishedListener(testExecutor); |
| 217 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL istener); | 261 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL istener); |
| 218 mTestFramework.mCronetEngine.removeRequestFinishedListener(requestFinish edListener); | |
| 219 TestUrlRequestCallback callback = new TestUrlRequestCallback(); | 262 TestUrlRequestCallback callback = new TestUrlRequestCallback(); |
| 220 UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder( | 263 UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder( |
| 221 mUrl, callback, callback.getExecutor(), mTestFramework.mCronetEn gine); | 264 mUrl, callback, callback.getExecutor(), mTestFramework.mCronetEn gine); |
| 222 urlRequestBuilder.build().start(); | 265 UrlRequest request = urlRequestBuilder.build(); |
| 266 mTestFramework.mCronetEngine.removeRequestFinishedListener(requestFinish edListener); | |
| 267 request.start(); | |
| 223 callback.blockForDone(); | 268 callback.blockForDone(); |
| 224 testExecutor.runAllTasks(); | 269 testExecutor.runAllTasks(); |
| 225 | 270 |
| 226 assertNull("RequestFinishedInfo.Listener must not be called", | 271 assertNull("RequestFinishedInfo.Listener must not be called", |
| 227 requestFinishedListener.getRequestInfo()); | 272 requestFinishedListener.getRequestInfo()); |
| 228 mTestFramework.mCronetEngine.shutdown(); | 273 mTestFramework.mCronetEngine.shutdown(); |
| 229 } | 274 } |
| 230 | 275 |
| 231 @SmallTest | 276 @SmallTest |
| 277 @OnlyRunNativeCronet | |
| 278 @Feature({"Cronet"}) | |
| 279 public void testRequestFinishedListenerCanceledRequest() throws Exception { | |
| 280 mTestFramework = startCronetTestFramework(); | |
| 281 TestRequestFinishedListener requestFinishedListener = new TestRequestFin ishedListener(); | |
| 282 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL istener); | |
| 283 TestUrlRequestCallback callback = new TestUrlRequestCallback() { | |
| 284 @Override | |
| 285 public void onResponseStarted(UrlRequest request, UrlResponseInfo in fo) { | |
| 286 super.onResponseStarted(request, info); | |
| 287 request.cancel(); | |
| 288 } | |
| 289 }; | |
| 290 UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder( | |
| 291 mUrl, callback, callback.getExecutor(), mTestFramework.mCronetEn gine); | |
| 292 Date startTime = new Date(); | |
| 293 urlRequestBuilder.addRequestAnnotation("request annotation") | |
| 294 .addRequestAnnotation(this) | |
| 295 .build() | |
| 296 .start(); | |
| 297 callback.blockForDone(); | |
| 298 requestFinishedListener.blockUntilDone(); | |
| 299 Date endTime = new Date(); | |
| 300 | |
| 301 RequestFinishedInfo requestInfo = requestFinishedListener.getRequestInfo (); | |
| 302 assertNotNull("RequestFinishedInfo.Listener must be called", requestInfo ); | |
| 303 assertEquals(mUrl, requestInfo.getUrl()); | |
| 304 assertNotNull(requestInfo.getResponseInfo()); | |
| 305 assertEquals(newHashSet("request annotation", this), // Use sets for uno rdered comparison. | |
| 306 new HashSet<Object>(requestInfo.getAnnotations())); | |
| 307 RequestFinishedInfo.Metrics metrics = requestInfo.getMetrics(); | |
| 308 assertNotNull("RequestFinishedInfo.getMetrics() must not be null", metri cs); | |
| 309 // Check old (deprecated) timing metrics | |
| 310 assertTrue(metrics.getTotalTimeMs() > 0); | |
| 311 assertTrue(metrics.getTotalTimeMs() >= metrics.getTtfbMs()); | |
| 312 // Check new timing metrics | |
| 313 MetricsTestUtil.checkTimingMetrics(metrics, startTime, endTime); | |
| 314 MetricsTestUtil.checkHasConnectTiming(metrics, startTime, endTime, false ); | |
| 315 assertNull(metrics.getPushStart()); | |
| 316 assertNull(metrics.getPushEnd()); | |
| 317 // Check data use metrics | |
| 318 assertTrue(metrics.getReceivedBytesCount() > 0); | |
| 319 mTestFramework.mCronetEngine.shutdown(); | |
| 320 } | |
| 321 | |
| 322 @SmallTest | |
| 232 @Feature({"Cronet"}) | 323 @Feature({"Cronet"}) |
| 233 public void testMetricsGetters() throws Exception { | 324 public void testMetricsGetters() throws Exception { |
| 234 long requestStart = 1; | 325 long requestStart = 1; |
| 235 long dnsStart = 2; | 326 long dnsStart = 2; |
| 236 long dnsEnd = -1; | 327 long dnsEnd = -1; |
| 237 long connectStart = 4; | 328 long connectStart = 4; |
| 238 long connectEnd = 5; | 329 long connectEnd = 5; |
| 239 long sslStart = 6; | 330 long sslStart = 6; |
| 240 long sslEnd = 7; | 331 long sslEnd = 7; |
| 241 long sendingStart = 8; | 332 long sendingStart = 8; |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 262 assertEquals(new Date(sslEnd), metrics.getSslEnd()); | 353 assertEquals(new Date(sslEnd), metrics.getSslEnd()); |
| 263 assertEquals(new Date(pushStart), metrics.getPushStart()); | 354 assertEquals(new Date(pushStart), metrics.getPushStart()); |
| 264 assertEquals(new Date(pushEnd), metrics.getPushEnd()); | 355 assertEquals(new Date(pushEnd), metrics.getPushEnd()); |
| 265 assertEquals(new Date(responseStart), metrics.getResponseStart()); | 356 assertEquals(new Date(responseStart), metrics.getResponseStart()); |
| 266 assertEquals(new Date(responseEnd), metrics.getResponseEnd()); | 357 assertEquals(new Date(responseEnd), metrics.getResponseEnd()); |
| 267 assertEquals(socketReused, metrics.getSocketReused()); | 358 assertEquals(socketReused, metrics.getSocketReused()); |
| 268 assertEquals(sentBytesCount, (long) metrics.getSentBytesCount()); | 359 assertEquals(sentBytesCount, (long) metrics.getSentBytesCount()); |
| 269 assertEquals(receivedBytesCount, (long) metrics.getReceivedBytesCount()) ; | 360 assertEquals(receivedBytesCount, (long) metrics.getReceivedBytesCount()) ; |
| 270 } | 361 } |
| 271 } | 362 } |
| OLD | NEW |