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 // 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 Loading... |
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 } |
OLD | NEW |