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

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: Small cleanups 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
« no previous file with comments | « components/cronet/android/test/javatests/src/org/chromium/net/QuicTest.java ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 // Block on the executor, not the listener, since blocking on the listen er doesn't work when
137 // it's created with a non-default executor.
138 testExecutor.blockUntilDone();
139 Date endTime = new Date();
118 140
119 RequestFinishedInfo requestInfo = requestFinishedListener.getRequestInfo (); 141 RequestFinishedInfo requestInfo = requestFinishedListener.getRequestInfo ();
120 assertNotNull("RequestFinishedInfo.Listener must be called", requestInfo ); 142 assertNotNull("RequestFinishedInfo.Listener must be called", requestInfo );
121 assertEquals(mUrl, requestInfo.getUrl()); 143 assertEquals(mUrl, requestInfo.getUrl());
122 assertNotNull(requestInfo.getResponseInfo()); 144 assertNotNull(requestInfo.getResponseInfo());
123 assertEquals(newHashSet("request annotation", this), // Use sets for uno rdered comparison. 145 assertEquals(newHashSet("request annotation", this), // Use sets for uno rdered comparison.
124 new HashSet<Object>(requestInfo.getAnnotations())); 146 new HashSet<Object>(requestInfo.getAnnotations()));
125 RequestFinishedInfo.Metrics metrics = requestInfo.getMetrics(); 147 RequestFinishedInfo.Metrics metrics = requestInfo.getMetrics();
126 assertNotNull("RequestFinishedInfo.getMetrics() must not be null", metri cs); 148 assertNotNull("RequestFinishedInfo.getMetrics() must not be null", metri cs);
127 assertTrue(metrics.getTotalTimeMs() > 0); 149 assertTrue(metrics.getTotalTimeMs() > 0);
128 assertTrue(metrics.getTotalTimeMs() >= metrics.getTtfbMs()); 150 assertTrue(metrics.getTotalTimeMs() >= metrics.getTtfbMs());
151 MetricsTestUtil.checkTimingMetrics(metrics, startTime, endTime);
152 MetricsTestUtil.checkHasConnectTiming(metrics, startTime, endTime, false );
129 assertTrue(metrics.getReceivedBytesCount() > 0); 153 assertTrue(metrics.getReceivedBytesCount() > 0);
130 mTestFramework.mCronetEngine.shutdown(); 154 mTestFramework.mCronetEngine.shutdown();
131 } 155 }
132 156
133 @SmallTest 157 @SmallTest
158 @OnlyRunNativeCronet
134 @Feature({"Cronet"}) 159 @Feature({"Cronet"})
135 @SuppressWarnings("deprecation") 160 @SuppressWarnings("deprecation")
136 public void testRequestFinishedListenerDifferentThreads() throws Exception { 161 public void testRequestFinishedListenerDifferentThreads() throws Exception {
137 mTestFramework = startCronetTestFramework(); 162 mTestFramework = startCronetTestFramework();
138 ThreadExecutor testExecutor = new ThreadExecutor(); 163 TestRequestFinishedListener firstListener = new TestRequestFinishedListe ner();
139 TestRequestFinishedListener firstListener = new TestRequestFinishedListe ner(testExecutor); 164 TestRequestFinishedListener secondListener = new TestRequestFinishedList ener();
140 TestRequestFinishedListener secondListener = new TestRequestFinishedList ener(testExecutor);
141 mTestFramework.mCronetEngine.addRequestFinishedListener(firstListener); 165 mTestFramework.mCronetEngine.addRequestFinishedListener(firstListener);
142 mTestFramework.mCronetEngine.addRequestFinishedListener(secondListener); 166 mTestFramework.mCronetEngine.addRequestFinishedListener(secondListener);
143 TestUrlRequestCallback callback = new TestUrlRequestCallback(); 167 TestUrlRequestCallback callback = new TestUrlRequestCallback();
144 UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder( 168 UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder(
145 mUrl, callback, callback.getExecutor(), mTestFramework.mCronetEn gine); 169 mUrl, callback, callback.getExecutor(), mTestFramework.mCronetEn gine);
170 Date startTime = new Date();
146 urlRequestBuilder.addRequestAnnotation("request annotation") 171 urlRequestBuilder.addRequestAnnotation("request annotation")
147 .addRequestAnnotation(this) 172 .addRequestAnnotation(this)
148 .build() 173 .build()
149 .start(); 174 .start();
150 callback.blockForDone(); 175 callback.blockForDone();
151 testExecutor.joinAll(); 176 firstListener.blockUntilDone();
177 secondListener.blockUntilDone();
178 Date endTime = new Date();
152 179
153 RequestFinishedInfo firstRequestInfo = firstListener.getRequestInfo(); 180 RequestFinishedInfo firstRequestInfo = firstListener.getRequestInfo();
154 RequestFinishedInfo secondRequestInfo = secondListener.getRequestInfo(); 181 RequestFinishedInfo secondRequestInfo = secondListener.getRequestInfo();
155 assertNotNull("First RequestFinishedInfo.Listener must be called", first RequestInfo); 182 assertNotNull("First RequestFinishedInfo.Listener must be called", first RequestInfo);
156 assertNotNull("Second RequestFinishedInfo.Listener must be called", seco ndRequestInfo); 183 assertNotNull("Second RequestFinishedInfo.Listener must be called", seco ndRequestInfo);
157 assertEquals(mUrl, firstRequestInfo.getUrl()); 184 assertEquals(mUrl, firstRequestInfo.getUrl());
158 assertEquals(mUrl, secondRequestInfo.getUrl()); 185 assertEquals(mUrl, secondRequestInfo.getUrl());
159 assertNotNull(firstRequestInfo.getResponseInfo()); 186 assertNotNull(firstRequestInfo.getResponseInfo());
160 assertNotNull(secondRequestInfo.getResponseInfo()); 187 assertNotNull(secondRequestInfo.getResponseInfo());
161 assertEquals(newHashSet("request annotation", this), // Use sets for uno rdered comparison. 188 assertEquals(newHashSet("request annotation", this), // Use sets for uno rdered comparison.
162 new HashSet<Object>(firstRequestInfo.getAnnotations())); 189 new HashSet<Object>(firstRequestInfo.getAnnotations()));
163 assertEquals(newHashSet("request annotation", this), 190 assertEquals(newHashSet("request annotation", this),
164 new HashSet<Object>(secondRequestInfo.getAnnotations())); 191 new HashSet<Object>(secondRequestInfo.getAnnotations()));
165 RequestFinishedInfo.Metrics firstMetrics = firstRequestInfo.getMetrics() ; 192 RequestFinishedInfo.Metrics firstMetrics = firstRequestInfo.getMetrics() ;
166 assertNotNull("RequestFinishedInfo.getMetrics() must not be null", first Metrics); 193 assertNotNull("RequestFinishedInfo.getMetrics() must not be null", first Metrics);
167 assertTrue(firstMetrics.getTotalTimeMs() > 0); 194 assertTrue(firstMetrics.getTotalTimeMs() > 0);
168 assertTrue(firstMetrics.getTotalTimeMs() >= firstMetrics.getTtfbMs()); 195 assertTrue(firstMetrics.getTotalTimeMs() >= firstMetrics.getTtfbMs());
196 MetricsTestUtil.checkTimingMetrics(firstMetrics, startTime, endTime);
197 MetricsTestUtil.checkHasConnectTiming(firstMetrics, startTime, endTime, false);
169 assertTrue(firstMetrics.getReceivedBytesCount() > 0); 198 assertTrue(firstMetrics.getReceivedBytesCount() > 0);
170 RequestFinishedInfo.Metrics secondMetrics = secondRequestInfo.getMetrics (); 199 RequestFinishedInfo.Metrics secondMetrics = secondRequestInfo.getMetrics ();
171 assertNotNull("RequestFinishedInfo.getMetrics() must not be null", secon dMetrics); 200 assertNotNull("RequestFinishedInfo.getMetrics() must not be null", secon dMetrics);
172 assertTrue(secondMetrics.getTotalTimeMs() > 0); 201 assertTrue(secondMetrics.getTotalTimeMs() > 0);
173 assertTrue(secondMetrics.getTotalTimeMs() >= secondMetrics.getTtfbMs()); 202 assertTrue(secondMetrics.getTotalTimeMs() >= secondMetrics.getTtfbMs());
203 MetricsTestUtil.checkTimingMetrics(secondMetrics, startTime, endTime);
204 MetricsTestUtil.checkHasConnectTiming(secondMetrics, startTime, endTime, false);
174 assertTrue(secondMetrics.getReceivedBytesCount() > 0); 205 assertTrue(secondMetrics.getReceivedBytesCount() > 0);
175 mTestFramework.mCronetEngine.shutdown(); 206 mTestFramework.mCronetEngine.shutdown();
176 } 207 }
177 208
178 @SmallTest 209 @SmallTest
210 @OnlyRunNativeCronet
179 @Feature({"Cronet"}) 211 @Feature({"Cronet"})
180 @SuppressWarnings("deprecation") 212 @SuppressWarnings("deprecation")
181 public void testRequestFinishedListenerFailedRequest() throws Exception { 213 public void testRequestFinishedListenerFailedRequest() throws Exception {
182 String connectionRefusedUrl = "http://127.0.0.1:3"; 214 String connectionRefusedUrl = "http://127.0.0.1:3";
183 mTestFramework = startCronetTestFramework(); 215 mTestFramework = startCronetTestFramework();
184 TestExecutor testExecutor = new TestExecutor(); 216 TestRequestFinishedListener requestFinishedListener = new TestRequestFin ishedListener();
185 TestRequestFinishedListener requestFinishedListener =
186 new TestRequestFinishedListener(testExecutor);
187 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL istener); 217 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL istener);
188 TestUrlRequestCallback callback = new TestUrlRequestCallback(); 218 TestUrlRequestCallback callback = new TestUrlRequestCallback();
189 UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder(connection RefusedUrl, 219 UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder(connection RefusedUrl,
190 callback, callback.getExecutor(), mTestFramework.mCronetEngine); 220 callback, callback.getExecutor(), mTestFramework.mCronetEngine);
221 Date startTime = new Date();
191 urlRequestBuilder.build().start(); 222 urlRequestBuilder.build().start();
192 callback.blockForDone(); 223 callback.blockForDone();
193 assertTrue(callback.mOnErrorCalled); 224 assertTrue(callback.mOnErrorCalled);
194 testExecutor.runAllTasks(); 225 requestFinishedListener.blockUntilDone();
226 Date endTime = new Date();
195 227
196 RequestFinishedInfo requestInfo = requestFinishedListener.getRequestInfo (); 228 RequestFinishedInfo requestInfo = requestFinishedListener.getRequestInfo ();
197 assertNotNull("RequestFinishedInfo.Listener must be called", requestInfo ); 229 assertNotNull("RequestFinishedInfo.Listener must be called", requestInfo );
198 assertEquals(connectionRefusedUrl, requestInfo.getUrl()); 230 assertEquals(connectionRefusedUrl, requestInfo.getUrl());
199 assertTrue(requestInfo.getAnnotations().isEmpty()); 231 assertTrue(requestInfo.getAnnotations().isEmpty());
200 RequestFinishedInfo.Metrics metrics = requestInfo.getMetrics(); 232 RequestFinishedInfo.Metrics metrics = requestInfo.getMetrics();
201 assertNotNull("RequestFinishedInfo.getMetrics() must not be null", metri cs); 233 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 234 // The failure is occasionally fast enough that time reported is 0, so j ust check for null
203 assertNotNull(metrics.getTotalTimeMs()); 235 assertNotNull(metrics.getTotalTimeMs());
204 assertNull(metrics.getTtfbMs()); 236 assertNull(metrics.getTtfbMs());
237
238 // Check the timing metrics
239 assertNotNull(metrics.getRequestStart());
240 assertTrue(metrics.getRequestStart().after(startTime));
241 MetricsTestUtil.checkNoConnectTiming(metrics);
242 assertNull(metrics.getSendingStart());
243 assertNull(metrics.getSendingEnd());
244 assertNull(metrics.getResponseStart());
245 assertNotNull(metrics.getResponseEnd());
246 assertTrue(metrics.getResponseEnd().before(endTime));
247 // Entire request should take more than 0 ms
248 assertTrue(metrics.getResponseEnd().getTime() - metrics.getRequestStart( ).getTime() > 0);
249
205 assertTrue(metrics.getReceivedBytesCount() == null || metrics.getReceive dBytesCount() == 0); 250 assertTrue(metrics.getReceivedBytesCount() == null || metrics.getReceive dBytesCount() == 0);
206 mTestFramework.mCronetEngine.shutdown(); 251 mTestFramework.mCronetEngine.shutdown();
207 } 252 }
208 253
209 @SmallTest 254 @SmallTest
255 @OnlyRunNativeCronet
210 @Feature({"Cronet"}) 256 @Feature({"Cronet"})
211 @SuppressWarnings("deprecation") 257 @SuppressWarnings("deprecation")
212 public void testRequestFinishedListenerRemoved() throws Exception { 258 public void testRequestFinishedListenerRemoved() throws Exception {
213 mTestFramework = startCronetTestFramework(); 259 mTestFramework = startCronetTestFramework();
214 TestExecutor testExecutor = new TestExecutor(); 260 TestExecutor testExecutor = new TestExecutor();
215 TestRequestFinishedListener requestFinishedListener = 261 TestRequestFinishedListener requestFinishedListener =
216 new TestRequestFinishedListener(testExecutor); 262 new TestRequestFinishedListener(testExecutor);
217 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL istener); 263 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL istener);
218 mTestFramework.mCronetEngine.removeRequestFinishedListener(requestFinish edListener);
219 TestUrlRequestCallback callback = new TestUrlRequestCallback(); 264 TestUrlRequestCallback callback = new TestUrlRequestCallback();
220 UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder( 265 UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder(
221 mUrl, callback, callback.getExecutor(), mTestFramework.mCronetEn gine); 266 mUrl, callback, callback.getExecutor(), mTestFramework.mCronetEn gine);
222 urlRequestBuilder.build().start(); 267 UrlRequest request = urlRequestBuilder.build();
268 mTestFramework.mCronetEngine.removeRequestFinishedListener(requestFinish edListener);
269 request.start();
223 callback.blockForDone(); 270 callback.blockForDone();
224 testExecutor.runAllTasks(); 271 testExecutor.runAllTasks();
225 272
226 assertNull("RequestFinishedInfo.Listener must not be called", 273 assertNull("RequestFinishedInfo.Listener must not be called",
227 requestFinishedListener.getRequestInfo()); 274 requestFinishedListener.getRequestInfo());
228 mTestFramework.mCronetEngine.shutdown(); 275 mTestFramework.mCronetEngine.shutdown();
229 } 276 }
230 277
231 @SmallTest 278 @SmallTest
279 @OnlyRunNativeCronet
280 @Feature({"Cronet"})
281 public void testRequestFinishedListenerCanceledRequest() throws Exception {
282 mTestFramework = startCronetTestFramework();
283 TestRequestFinishedListener requestFinishedListener = new TestRequestFin ishedListener();
284 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL istener);
285 TestUrlRequestCallback callback = new TestUrlRequestCallback() {
286 @Override
287 public void onResponseStarted(UrlRequest request, UrlResponseInfo in fo) {
288 super.onResponseStarted(request, info);
289 request.cancel();
290 }
291 };
292 UrlRequest.Builder urlRequestBuilder = new UrlRequest.Builder(
293 mUrl, callback, callback.getExecutor(), mTestFramework.mCronetEn gine);
294 Date startTime = new Date();
295 urlRequestBuilder.addRequestAnnotation("request annotation")
296 .addRequestAnnotation(this)
297 .build()
298 .start();
299 callback.blockForDone();
300 requestFinishedListener.blockUntilDone();
301 Date endTime = new Date();
302
303 RequestFinishedInfo requestInfo = requestFinishedListener.getRequestInfo ();
304 assertNotNull("RequestFinishedInfo.Listener must be called", requestInfo );
305 assertEquals(mUrl, requestInfo.getUrl());
306 assertNotNull(requestInfo.getResponseInfo());
307 assertEquals(newHashSet("request annotation", this), // Use sets for uno rdered comparison.
308 new HashSet<Object>(requestInfo.getAnnotations()));
309 RequestFinishedInfo.Metrics metrics = requestInfo.getMetrics();
310 assertNotNull("RequestFinishedInfo.getMetrics() must not be null", metri cs);
311 // Check old (deprecated) timing metrics
312 assertTrue(metrics.getTotalTimeMs() > 0);
313 assertTrue(metrics.getTotalTimeMs() >= metrics.getTtfbMs());
314 // Check new timing metrics
315 MetricsTestUtil.checkTimingMetrics(metrics, startTime, endTime);
316 MetricsTestUtil.checkHasConnectTiming(metrics, startTime, endTime, false );
317 assertNull(metrics.getPushStart());
318 assertNull(metrics.getPushEnd());
319 // Check data use metrics
320 assertTrue(metrics.getReceivedBytesCount() > 0);
321 mTestFramework.mCronetEngine.shutdown();
322 }
323
324 @SmallTest
232 @Feature({"Cronet"}) 325 @Feature({"Cronet"})
233 public void testMetricsGetters() throws Exception { 326 public void testMetricsGetters() throws Exception {
234 long requestStart = 1; 327 long requestStart = 1;
235 long dnsStart = 2; 328 long dnsStart = 2;
236 long dnsEnd = -1; 329 long dnsEnd = -1;
237 long connectStart = 4; 330 long connectStart = 4;
238 long connectEnd = 5; 331 long connectEnd = 5;
239 long sslStart = 6; 332 long sslStart = 6;
240 long sslEnd = 7; 333 long sslEnd = 7;
241 long sendingStart = 8; 334 long sendingStart = 8;
(...skipping 20 matching lines...) Expand all
262 assertEquals(new Date(sslEnd), metrics.getSslEnd()); 355 assertEquals(new Date(sslEnd), metrics.getSslEnd());
263 assertEquals(new Date(pushStart), metrics.getPushStart()); 356 assertEquals(new Date(pushStart), metrics.getPushStart());
264 assertEquals(new Date(pushEnd), metrics.getPushEnd()); 357 assertEquals(new Date(pushEnd), metrics.getPushEnd());
265 assertEquals(new Date(responseStart), metrics.getResponseStart()); 358 assertEquals(new Date(responseStart), metrics.getResponseStart());
266 assertEquals(new Date(responseEnd), metrics.getResponseEnd()); 359 assertEquals(new Date(responseEnd), metrics.getResponseEnd());
267 assertEquals(socketReused, metrics.getSocketReused()); 360 assertEquals(socketReused, metrics.getSocketReused());
268 assertEquals(sentBytesCount, (long) metrics.getSentBytesCount()); 361 assertEquals(sentBytesCount, (long) metrics.getSentBytesCount());
269 assertEquals(receivedBytesCount, (long) metrics.getReceivedBytesCount()) ; 362 assertEquals(receivedBytesCount, (long) metrics.getReceivedBytesCount()) ;
270 } 363 }
271 } 364 }
OLDNEW
« no previous file with comments | « components/cronet/android/test/javatests/src/org/chromium/net/QuicTest.java ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698