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.test.suitebuilder.annotation.SmallTest; | 9 import android.test.suitebuilder.annotation.SmallTest; |
10 | 10 |
11 import org.json.JSONObject; | 11 import org.json.JSONObject; |
12 | 12 |
13 import org.chromium.base.test.util.Feature; | 13 import org.chromium.base.test.util.Feature; |
14 import org.chromium.net.CronetTestBase.OnlyRunNativeCronet; | |
15 import org.chromium.net.MetricsTestUtil.TestRequestFinishedListener; | 14 import org.chromium.net.MetricsTestUtil.TestRequestFinishedListener; |
16 | 15 |
17 import java.nio.ByteBuffer; | 16 import java.nio.ByteBuffer; |
18 import java.util.Date; | 17 import java.util.Date; |
19 import java.util.HashSet; | 18 import java.util.HashSet; |
20 | 19 |
21 /** | 20 /** |
22 * Tests functionality of BidirectionalStream's QUIC implementation. | 21 * Tests functionality of BidirectionalStream's QUIC implementation. |
23 */ | 22 */ |
24 public class BidirectionalStreamQuicTest extends CronetTestBase { | 23 public class BidirectionalStreamQuicTest extends CronetTestBase { |
25 private CronetTestFramework mTestFramework; | 24 private CronetTestFramework mTestFramework; |
26 private enum QuicBidirectionalStreams { | 25 private enum QuicBidirectionalStreams { |
27 ENABLED, | 26 ENABLED, |
28 DISABLED, | 27 DISABLED, |
29 } | 28 } |
30 | 29 |
31 private void setUp(QuicBidirectionalStreams enabled) throws Exception { | 30 private void setUp(QuicBidirectionalStreams enabled) throws Exception { |
32 // Load library first to create MockCertVerifier. | 31 // Load library first to create MockCertVerifier. |
33 System.loadLibrary("cronet_tests"); | 32 System.loadLibrary("cronet_tests"); |
34 CronetEngine.Builder builder = new CronetEngine.Builder(getContext()); | 33 ExperimentalCronetEngine.Builder builder = |
| 34 new ExperimentalCronetEngine.Builder(getContext()); |
35 | 35 |
36 QuicTestServer.startQuicTestServer(getContext()); | 36 QuicTestServer.startQuicTestServer(getContext()); |
37 | 37 |
38 builder.enableQuic(true); | 38 builder.enableQuic(true); |
39 JSONObject quicParams = new JSONObject().put("host_whitelist", "test.exa
mple.com"); | 39 JSONObject quicParams = new JSONObject().put("host_whitelist", "test.exa
mple.com"); |
40 if (enabled == QuicBidirectionalStreams.DISABLED) { | 40 if (enabled == QuicBidirectionalStreams.DISABLED) { |
41 quicParams.put("quic_disable_bidirectional_streams", true); | 41 quicParams.put("quic_disable_bidirectional_streams", true); |
42 } | 42 } |
43 JSONObject hostResolverParams = CronetTestUtil.generateHostResolverRules
(); | 43 JSONObject hostResolverParams = CronetTestUtil.generateHostResolverRules
(); |
44 JSONObject experimentalOptions = new JSONObject() | 44 JSONObject experimentalOptions = new JSONObject() |
45 .put("QUIC", quicParams) | 45 .put("QUIC", quicParams) |
46 .put("HostResolverRules", hostR
esolverParams); | 46 .put("HostResolverRules", hostR
esolverParams); |
47 builder.setExperimentalOptions(experimentalOptions.toString()); | 47 builder.setExperimentalOptions(experimentalOptions.toString()); |
48 | 48 |
49 builder.addQuicHint(QuicTestServer.getServerHost(), QuicTestServer.getSe
rverPort(), | 49 builder.addQuicHint(QuicTestServer.getServerHost(), QuicTestServer.getSe
rverPort(), |
50 QuicTestServer.getServerPort()); | 50 QuicTestServer.getServerPort()); |
51 | 51 |
52 builder.setMockCertVerifierForTesting(QuicTestServer.createMockCertVerif
ier()); | 52 CronetTestUtil.setMockCertVerifierForTesting( |
| 53 builder, QuicTestServer.createMockCertVerifier()); |
53 | 54 |
54 mTestFramework = startCronetTestFrameworkWithUrlAndCronetEngineBuilder(n
ull, builder); | 55 mTestFramework = startCronetTestFrameworkWithUrlAndCronetEngineBuilder(n
ull, builder); |
55 } | 56 } |
56 | 57 |
57 @Override | 58 @Override |
58 protected void tearDown() throws Exception { | 59 protected void tearDown() throws Exception { |
59 QuicTestServer.shutdownQuicTestServer(); | 60 QuicTestServer.shutdownQuicTestServer(); |
60 super.tearDown(); | 61 super.tearDown(); |
61 } | 62 } |
62 | 63 |
63 @SmallTest | 64 @SmallTest |
64 @Feature({"Cronet"}) | 65 @Feature({"Cronet"}) |
65 @OnlyRunNativeCronet | 66 @OnlyRunNativeCronet |
66 // Test that QUIC is negotiated. | 67 // Test that QUIC is negotiated. |
67 public void testSimpleGet() throws Exception { | 68 public void testSimpleGet() throws Exception { |
68 setUp(QuicBidirectionalStreams.ENABLED); | 69 setUp(QuicBidirectionalStreams.ENABLED); |
69 String path = "/simple.txt"; | 70 String path = "/simple.txt"; |
70 String quicURL = QuicTestServer.getServerURL() + path; | 71 String quicURL = QuicTestServer.getServerURL() + path; |
71 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 72 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
72 BidirectionalStream stream = new BidirectionalStream | 73 BidirectionalStream stream = |
73 .Builder(quicURL, callback, callbac
k.getExecutor(), | 74 mTestFramework.mCronetEngine |
74 mTestFramework.mCronetEngin
e) | 75 .newBidirectionalStreamBuilder(quicURL, callback, callba
ck.getExecutor()) |
75 .setHttpMethod("GET") | 76 .setHttpMethod("GET") |
76 .build(); | 77 .build(); |
77 stream.start(); | 78 stream.start(); |
78 callback.blockForDone(); | 79 callback.blockForDone(); |
79 assertTrue(stream.isDone()); | 80 assertTrue(stream.isDone()); |
80 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 81 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
81 assertEquals("This is a simple text file served by QUIC.\n", callback.mR
esponseAsString); | 82 assertEquals("This is a simple text file served by QUIC.\n", callback.mR
esponseAsString); |
82 assertEquals("quic/1+spdy/3", callback.mResponseInfo.getNegotiatedProtoc
ol()); | 83 assertEquals("quic/1+spdy/3", callback.mResponseInfo.getNegotiatedProtoc
ol()); |
83 } | 84 } |
84 | 85 |
85 @SmallTest | 86 @SmallTest |
86 @Feature({"Cronet"}) | 87 @Feature({"Cronet"}) |
87 @OnlyRunNativeCronet | 88 @OnlyRunNativeCronet |
88 public void testSimplePost() throws Exception { | 89 public void testSimplePost() throws Exception { |
89 setUp(QuicBidirectionalStreams.ENABLED); | 90 setUp(QuicBidirectionalStreams.ENABLED); |
90 String path = "/simple.txt"; | 91 String path = "/simple.txt"; |
91 String quicURL = QuicTestServer.getServerURL() + path; | 92 String quicURL = QuicTestServer.getServerURL() + path; |
92 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 93 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
93 // Although we have no way to verify data sent at this point, this test | 94 // Although we have no way to verify data sent at this point, this test |
94 // can make sure that onWriteCompleted is invoked appropriately. | 95 // can make sure that onWriteCompleted is invoked appropriately. |
95 callback.addWriteData("Test String".getBytes()); | 96 callback.addWriteData("Test String".getBytes()); |
96 callback.addWriteData("1234567890".getBytes()); | 97 callback.addWriteData("1234567890".getBytes()); |
97 callback.addWriteData("woot!".getBytes()); | 98 callback.addWriteData("woot!".getBytes()); |
98 TestRequestFinishedListener requestFinishedListener = new TestRequestFin
ishedListener(); | 99 TestRequestFinishedListener requestFinishedListener = new TestRequestFin
ishedListener(); |
99 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL
istener); | 100 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL
istener); |
100 BidirectionalStream stream = new BidirectionalStream | 101 BidirectionalStream stream = |
101 .Builder(quicURL, callback, callbac
k.getExecutor(), | 102 mTestFramework.mCronetEngine |
102 mTestFramework.mCronetEngin
e) | 103 .newBidirectionalStreamBuilder(quicURL, callback, callba
ck.getExecutor()) |
103 .addHeader("foo", "bar") | 104 .addHeader("foo", "bar") |
104 .addHeader("empty", "") | 105 .addHeader("empty", "") |
105 .addHeader("Content-Type", "zebra") | 106 .addHeader("Content-Type", "zebra") |
106 .addRequestAnnotation("request anno
tation") | 107 .addRequestAnnotation("request annotation") |
107 .addRequestAnnotation(this) | 108 .addRequestAnnotation(this) |
108 .build(); | 109 .build(); |
109 Date startTime = new Date(); | 110 Date startTime = new Date(); |
110 stream.start(); | 111 stream.start(); |
111 callback.blockForDone(); | 112 callback.blockForDone(); |
112 assertTrue(stream.isDone()); | 113 assertTrue(stream.isDone()); |
113 requestFinishedListener.blockUntilDone(); | 114 requestFinishedListener.blockUntilDone(); |
114 Date endTime = new Date(); | 115 Date endTime = new Date(); |
115 RequestFinishedInfo finishedInfo = requestFinishedListener.getRequestInf
o(); | 116 RequestFinishedInfo finishedInfo = requestFinishedListener.getRequestInf
o(); |
116 assertNotNull("RequestFinishedInfo.Listener must be called", finishedInf
o); | 117 assertNotNull("RequestFinishedInfo.Listener must be called", finishedInf
o); |
117 RequestFinishedInfo.Metrics metrics = finishedInfo.getMetrics(); | 118 RequestFinishedInfo.Metrics metrics = finishedInfo.getMetrics(); |
118 assertNotNull(metrics); | 119 assertNotNull(metrics); |
(...skipping 18 matching lines...) Expand all Loading... |
137 // TODO(xunjieli): Use ParameterizedTest instead of the loop. | 138 // TODO(xunjieli): Use ParameterizedTest instead of the loop. |
138 for (int i = 0; i < 2; i++) { | 139 for (int i = 0; i < 2; i++) { |
139 String path = "/simple.txt"; | 140 String path = "/simple.txt"; |
140 String quicURL = QuicTestServer.getServerURL() + path; | 141 String quicURL = QuicTestServer.getServerURL() + path; |
141 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback(); | 142 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback(); |
142 // Although we have no way to verify data sent at this point, this t
est | 143 // Although we have no way to verify data sent at this point, this t
est |
143 // can make sure that onWriteCompleted is invoked appropriately. | 144 // can make sure that onWriteCompleted is invoked appropriately. |
144 callback.addWriteData("Test String".getBytes(), false); | 145 callback.addWriteData("Test String".getBytes(), false); |
145 callback.addWriteData("1234567890".getBytes(), false); | 146 callback.addWriteData("1234567890".getBytes(), false); |
146 callback.addWriteData("woot!".getBytes(), true); | 147 callback.addWriteData("woot!".getBytes(), true); |
147 BidirectionalStream stream = new BidirectionalStream | 148 BidirectionalStream stream = mTestFramework.mCronetEngine |
148 .Builder(quicURL, callback, cal
lback.getExecutor(), | 149 .newBidirectionalStreamBuilder( |
149 mTestFramework.mCronetE
ngine) | 150 quicURL, callback, call
back.getExecutor()) |
150 .delayRequestHeadersUntilFirstF
lush(i == 0) | 151 .delayRequestHeadersUntilFirstF
lush(i == 0) |
151 .addHeader("foo", "bar") | 152 .addHeader("foo", "bar") |
152 .addHeader("empty", "") | 153 .addHeader("empty", "") |
153 .addHeader("Content-Type", "zeb
ra") | 154 .addHeader("Content-Type", "zeb
ra") |
154 .build(); | 155 .build(); |
155 stream.start(); | 156 stream.start(); |
156 callback.blockForDone(); | 157 callback.blockForDone(); |
157 assertTrue(stream.isDone()); | 158 assertTrue(stream.isDone()); |
158 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 159 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
159 assertEquals( | 160 assertEquals( |
(...skipping 13 matching lines...) Expand all Loading... |
173 String quicURL = QuicTestServer.getServerURL() + path; | 174 String quicURL = QuicTestServer.getServerURL() + path; |
174 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback(); | 175 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback(); |
175 // Although we have no way to verify data sent at this point, this t
est | 176 // Although we have no way to verify data sent at this point, this t
est |
176 // can make sure that onWriteCompleted is invoked appropriately. | 177 // can make sure that onWriteCompleted is invoked appropriately. |
177 callback.addWriteData("Test String".getBytes(), false); | 178 callback.addWriteData("Test String".getBytes(), false); |
178 callback.addWriteData("1234567890".getBytes(), false); | 179 callback.addWriteData("1234567890".getBytes(), false); |
179 callback.addWriteData("woot!".getBytes(), true); | 180 callback.addWriteData("woot!".getBytes(), true); |
180 callback.addWriteData("Test String".getBytes(), false); | 181 callback.addWriteData("Test String".getBytes(), false); |
181 callback.addWriteData("1234567890".getBytes(), false); | 182 callback.addWriteData("1234567890".getBytes(), false); |
182 callback.addWriteData("woot!".getBytes(), true); | 183 callback.addWriteData("woot!".getBytes(), true); |
183 BidirectionalStream stream = new BidirectionalStream | 184 BidirectionalStream stream = mTestFramework.mCronetEngine |
184 .Builder(quicURL, callback, cal
lback.getExecutor(), | 185 .newBidirectionalStreamBuilder( |
185 mTestFramework.mCronetE
ngine) | 186 quicURL, callback, call
back.getExecutor()) |
186 .delayRequestHeadersUntilFirstF
lush(i == 0) | 187 .delayRequestHeadersUntilFirstF
lush(i == 0) |
187 .addHeader("foo", "bar") | 188 .addHeader("foo", "bar") |
188 .addHeader("empty", "") | 189 .addHeader("empty", "") |
189 .addHeader("Content-Type", "zeb
ra") | 190 .addHeader("Content-Type", "zeb
ra") |
190 .build(); | 191 .build(); |
191 stream.start(); | 192 stream.start(); |
192 callback.blockForDone(); | 193 callback.blockForDone(); |
193 assertTrue(stream.isDone()); | 194 assertTrue(stream.isDone()); |
194 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 195 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
195 assertEquals( | 196 assertEquals( |
(...skipping 13 matching lines...) Expand all Loading... |
209 String url = QuicTestServer.getServerURL() + path; | 210 String url = QuicTestServer.getServerURL() + path; |
210 | 211 |
211 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback() { | 212 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback() { |
212 @Override | 213 @Override |
213 public void onStreamReady(BidirectionalStream stream) { | 214 public void onStreamReady(BidirectionalStream stream) { |
214 // This flush should send the delayed headers. | 215 // This flush should send the delayed headers. |
215 stream.flush(); | 216 stream.flush(); |
216 super.onStreamReady(stream); | 217 super.onStreamReady(stream); |
217 } | 218 } |
218 }; | 219 }; |
219 BidirectionalStream stream = new BidirectionalStream | 220 BidirectionalStream stream = |
220 .Builder(url, callback, callbac
k.getExecutor(), | 221 mTestFramework.mCronetEngine |
221 mTestFramework.mCronetE
ngine) | 222 .newBidirectionalStreamBuilder(url, callback, callba
ck.getExecutor()) |
222 .setHttpMethod("GET") | 223 .setHttpMethod("GET") |
223 .delayRequestHeadersUntilFirstF
lush(i == 0) | 224 .delayRequestHeadersUntilFirstFlush(i == 0) |
224 .addHeader("foo", "bar") | 225 .addHeader("foo", "bar") |
225 .addHeader("empty", "") | 226 .addHeader("empty", "") |
226 .build(); | 227 .build(); |
227 // Flush before stream is started should not crash. | 228 // Flush before stream is started should not crash. |
228 stream.flush(); | 229 stream.flush(); |
229 | 230 |
230 stream.start(); | 231 stream.start(); |
231 callback.blockForDone(); | 232 callback.blockForDone(); |
232 assertTrue(stream.isDone()); | 233 assertTrue(stream.isDone()); |
233 | 234 |
234 // Flush after stream is completed is no-op. It shouldn't call into
the destroyed | 235 // Flush after stream is completed is no-op. It shouldn't call into
the destroyed |
235 // adapter. | 236 // adapter. |
236 stream.flush(); | 237 stream.flush(); |
(...skipping 10 matching lines...) Expand all Loading... |
247 @OnlyRunNativeCronet | 248 @OnlyRunNativeCronet |
248 public void testSimplePostWithFlushAfterOneWrite() throws Exception { | 249 public void testSimplePostWithFlushAfterOneWrite() throws Exception { |
249 setUp(QuicBidirectionalStreams.ENABLED); | 250 setUp(QuicBidirectionalStreams.ENABLED); |
250 // TODO(xunjieli): Use ParameterizedTest instead of the loop. | 251 // TODO(xunjieli): Use ParameterizedTest instead of the loop. |
251 for (int i = 0; i < 2; i++) { | 252 for (int i = 0; i < 2; i++) { |
252 String path = "/simple.txt"; | 253 String path = "/simple.txt"; |
253 String url = QuicTestServer.getServerURL() + path; | 254 String url = QuicTestServer.getServerURL() + path; |
254 | 255 |
255 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback(); | 256 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback(); |
256 callback.addWriteData("Test String".getBytes(), true); | 257 callback.addWriteData("Test String".getBytes(), true); |
257 BidirectionalStream stream = new BidirectionalStream | 258 BidirectionalStream stream = |
258 .Builder(url, callback, callbac
k.getExecutor(), | 259 mTestFramework.mCronetEngine |
259 mTestFramework.mCronetE
ngine) | 260 .newBidirectionalStreamBuilder(url, callback, callba
ck.getExecutor()) |
260 .delayRequestHeadersUntilFirstF
lush(i == 0) | 261 .delayRequestHeadersUntilFirstFlush(i == 0) |
261 .addHeader("foo", "bar") | 262 .addHeader("foo", "bar") |
262 .addHeader("empty", "") | 263 .addHeader("empty", "") |
263 .addHeader("Content-Type", "zeb
ra") | 264 .addHeader("Content-Type", "zebra") |
264 .build(); | 265 .build(); |
265 stream.start(); | 266 stream.start(); |
266 callback.blockForDone(); | 267 callback.blockForDone(); |
267 assertTrue(stream.isDone()); | 268 assertTrue(stream.isDone()); |
268 | 269 |
269 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 270 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
270 assertEquals( | 271 assertEquals( |
271 "This is a simple text file served by QUIC.\n", callback.mRe
sponseAsString); | 272 "This is a simple text file served by QUIC.\n", callback.mRe
sponseAsString); |
272 assertEquals("quic/1+spdy/3", callback.mResponseInfo.getNegotiatedPr
otocol()); | 273 assertEquals("quic/1+spdy/3", callback.mResponseInfo.getNegotiatedPr
otocol()); |
273 } | 274 } |
274 } | 275 } |
275 | 276 |
276 @SmallTest | 277 @SmallTest |
277 @Feature({"Cronet"}) | 278 @Feature({"Cronet"}) |
278 @OnlyRunNativeCronet | 279 @OnlyRunNativeCronet |
279 public void testQuicBidirectionalStreamDisabled() throws Exception { | 280 public void testQuicBidirectionalStreamDisabled() throws Exception { |
280 setUp(QuicBidirectionalStreams.DISABLED); | 281 setUp(QuicBidirectionalStreams.DISABLED); |
281 String path = "/simple.txt"; | 282 String path = "/simple.txt"; |
282 String quicURL = QuicTestServer.getServerURL() + path; | 283 String quicURL = QuicTestServer.getServerURL() + path; |
283 | 284 |
284 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 285 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
285 BidirectionalStream stream = new BidirectionalStream | 286 BidirectionalStream stream = |
286 .Builder(quicURL, callback, callbac
k.getExecutor(), | 287 mTestFramework.mCronetEngine |
287 mTestFramework.mCronetEngin
e) | 288 .newBidirectionalStreamBuilder(quicURL, callback, callba
ck.getExecutor()) |
288 .setHttpMethod("GET") | 289 .setHttpMethod("GET") |
289 .build(); | 290 .build(); |
290 stream.start(); | 291 stream.start(); |
291 callback.blockForDone(); | 292 callback.blockForDone(); |
292 assertTrue(stream.isDone()); | 293 assertTrue(stream.isDone()); |
293 assertTrue(callback.mOnErrorCalled); | 294 assertTrue(callback.mOnErrorCalled); |
294 assertNull(callback.mResponseInfo); | 295 assertNull(callback.mResponseInfo); |
295 } | 296 } |
296 | 297 |
297 @SmallTest | 298 @SmallTest |
298 @Feature({"Cronet"}) | 299 @Feature({"Cronet"}) |
299 @OnlyRunNativeCronet | 300 @OnlyRunNativeCronet |
(...skipping 15 matching lines...) Expand all Loading... |
315 // Shut down the server, and the stream should error out. | 316 // Shut down the server, and the stream should error out. |
316 // The second call to shutdownQuicTestServer is no-op. | 317 // The second call to shutdownQuicTestServer is no-op. |
317 QuicTestServer.shutdownQuicTestServer(); | 318 QuicTestServer.shutdownQuicTestServer(); |
318 } | 319 } |
319 }; | 320 }; |
320 | 321 |
321 callback.addWriteData("Test String".getBytes()); | 322 callback.addWriteData("Test String".getBytes()); |
322 callback.addWriteData("1234567890".getBytes()); | 323 callback.addWriteData("1234567890".getBytes()); |
323 callback.addWriteData("woot!".getBytes()); | 324 callback.addWriteData("woot!".getBytes()); |
324 | 325 |
325 BidirectionalStream stream = new BidirectionalStream | 326 BidirectionalStream stream = |
326 .Builder(quicURL, callback, callbac
k.getExecutor(), | 327 mTestFramework.mCronetEngine |
327 mTestFramework.mCronetEngin
e) | 328 .newBidirectionalStreamBuilder(quicURL, callback, callba
ck.getExecutor()) |
328 .addHeader("foo", "bar") | 329 .addHeader("foo", "bar") |
329 .addHeader("empty", "") | 330 .addHeader("empty", "") |
330 .addHeader("Content-Type", "zebra") | 331 .addHeader("Content-Type", "zebra") |
331 .build(); | 332 .build(); |
332 stream.start(); | 333 stream.start(); |
333 callback.blockForDone(); | 334 callback.blockForDone(); |
334 assertTrue(stream.isDone()); | 335 assertTrue(stream.isDone()); |
335 // Server terminated on us, so the stream must fail. | 336 // Server terminated on us, so the stream must fail. |
336 // QUIC reports this as ERR_QUIC_PROTOCOL_ERROR. Sometimes we get ERR_CO
NNECTION_REFUSED. | 337 // QUIC reports this as ERR_QUIC_PROTOCOL_ERROR. Sometimes we get ERR_CO
NNECTION_REFUSED. |
337 assertNotNull(callback.mError); | 338 assertNotNull(callback.mError); |
338 assertTrue(NetError.ERR_QUIC_PROTOCOL_ERROR == callback.mError.getCronet
InternalErrorCode() | 339 assertTrue(NetError.ERR_QUIC_PROTOCOL_ERROR == callback.mError.getCronet
InternalErrorCode() |
339 || NetError.ERR_CONNECTION_REFUSED == callback.mError.getCronetI
nternalErrorCode()); | 340 || NetError.ERR_CONNECTION_REFUSED == callback.mError.getCronetI
nternalErrorCode()); |
340 } | 341 } |
341 | 342 |
342 @SmallTest | 343 @SmallTest |
343 @Feature({"Cronet"}) | 344 @Feature({"Cronet"}) |
344 @OnlyRunNativeCronet | 345 @OnlyRunNativeCronet |
345 // Test that certificate verify results are serialized and deserialized corr
ectly. | 346 // Test that certificate verify results are serialized and deserialized corr
ectly. |
346 public void testSerializeDeserialize() throws Exception { | 347 public void testSerializeDeserialize() throws Exception { |
347 setUp(QuicBidirectionalStreams.ENABLED); | 348 setUp(QuicBidirectionalStreams.ENABLED); |
348 String path = "/simple.txt"; | 349 String path = "/simple.txt"; |
349 String quicURL = QuicTestServer.getServerURL() + path; | 350 String quicURL = QuicTestServer.getServerURL() + path; |
350 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 351 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
351 BidirectionalStream stream = new BidirectionalStream | 352 BidirectionalStream stream = |
352 .Builder(quicURL, callback, callbac
k.getExecutor(), | 353 mTestFramework.mCronetEngine |
353 mTestFramework.mCronetEngin
e) | 354 .newBidirectionalStreamBuilder(quicURL, callback, callba
ck.getExecutor()) |
354 .setHttpMethod("GET") | 355 .setHttpMethod("GET") |
355 .build(); | 356 .build(); |
356 stream.start(); | 357 stream.start(); |
357 callback.blockForDone(); | 358 callback.blockForDone(); |
358 assertTrue(stream.isDone()); | 359 assertTrue(stream.isDone()); |
359 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 360 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
360 assertEquals("This is a simple text file served by QUIC.\n", callback.mR
esponseAsString); | 361 assertEquals("This is a simple text file served by QUIC.\n", callback.mR
esponseAsString); |
361 assertEquals("quic/1+spdy/3", callback.mResponseInfo.getNegotiatedProtoc
ol()); | 362 assertEquals("quic/1+spdy/3", callback.mResponseInfo.getNegotiatedProtoc
ol()); |
362 | 363 |
363 String serialized_data = mTestFramework.mCronetEngine.getCertVerifierDat
a(100); | 364 String serialized_data = mTestFramework.mCronetEngine.getCertVerifierDat
a(100); |
364 assertFalse(serialized_data.isEmpty()); | 365 assertFalse(serialized_data.isEmpty()); |
365 | 366 |
366 // Create a new builder and verify that the |serialized_data| is deseria
lized correctly. | 367 // Create a new builder and verify that the |serialized_data| is deseria
lized correctly. |
367 CronetEngine.Builder builder = new CronetEngine.Builder(getContext()); | 368 ExperimentalCronetEngine.Builder builder = |
| 369 new ExperimentalCronetEngine.Builder(getContext()); |
368 builder.enableQuic(true); | 370 builder.enableQuic(true); |
369 builder.setMockCertVerifierForTesting(QuicTestServer.createMockCertVerif
ier()); | 371 CronetTestUtil.setMockCertVerifierForTesting( |
| 372 builder, QuicTestServer.createMockCertVerifier()); |
370 builder.setCertVerifierData(serialized_data); | 373 builder.setCertVerifierData(serialized_data); |
371 | 374 |
372 CronetTestFramework testFramework = | 375 CronetTestFramework testFramework = |
373 startCronetTestFrameworkWithUrlAndCronetEngineBuilder(null, buil
der); | 376 startCronetTestFrameworkWithUrlAndCronetEngineBuilder(null, buil
der); |
374 String deserialized_data = testFramework.mCronetEngine.getCertVerifierDa
ta(100); | 377 String deserialized_data = testFramework.mCronetEngine.getCertVerifierDa
ta(100); |
375 assertEquals(deserialized_data, serialized_data); | 378 assertEquals(deserialized_data, serialized_data); |
376 } | 379 } |
377 } | 380 } |
OLD | NEW |