Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(658)

Side by Side Diff: components/cronet/android/test/javatests/src/org/chromium/net/RequestFinishedInfoTest.java

Issue 2351793003: Implement timing metrics for UrlRequest (Closed)
Patch Set: oops Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698