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 MetricsTestUtil.checkRequestFinishedInfo(finishedInfo, quicURL, startTim
e, endTime); | 117 MetricsTestUtil.checkRequestFinishedInfo(finishedInfo, quicURL, startTim
e, endTime); |
117 assertEquals(RequestFinishedInfo.SUCCEEDED, finishedInfo.getFinishedReas
on()); | 118 assertEquals(RequestFinishedInfo.SUCCEEDED, finishedInfo.getFinishedReas
on()); |
118 MetricsTestUtil.checkHasConnectTiming(finishedInfo.getMetrics(), startTi
me, endTime, true); | 119 MetricsTestUtil.checkHasConnectTiming(finishedInfo.getMetrics(), startTi
me, endTime, true); |
(...skipping 12 matching lines...) Expand all Loading... |
131 // TODO(xunjieli): Use ParameterizedTest instead of the loop. | 132 // TODO(xunjieli): Use ParameterizedTest instead of the loop. |
132 for (int i = 0; i < 2; i++) { | 133 for (int i = 0; i < 2; i++) { |
133 String path = "/simple.txt"; | 134 String path = "/simple.txt"; |
134 String quicURL = QuicTestServer.getServerURL() + path; | 135 String quicURL = QuicTestServer.getServerURL() + path; |
135 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback(); | 136 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback(); |
136 // Although we have no way to verify data sent at this point, this t
est | 137 // Although we have no way to verify data sent at this point, this t
est |
137 // can make sure that onWriteCompleted is invoked appropriately. | 138 // can make sure that onWriteCompleted is invoked appropriately. |
138 callback.addWriteData("Test String".getBytes(), false); | 139 callback.addWriteData("Test String".getBytes(), false); |
139 callback.addWriteData("1234567890".getBytes(), false); | 140 callback.addWriteData("1234567890".getBytes(), false); |
140 callback.addWriteData("woot!".getBytes(), true); | 141 callback.addWriteData("woot!".getBytes(), true); |
141 BidirectionalStream stream = new BidirectionalStream | 142 BidirectionalStream stream = mTestFramework.mCronetEngine |
142 .Builder(quicURL, callback, cal
lback.getExecutor(), | 143 .newBidirectionalStreamBuilder( |
143 mTestFramework.mCronetE
ngine) | 144 quicURL, callback, call
back.getExecutor()) |
144 .delayRequestHeadersUntilFirstF
lush(i == 0) | 145 .delayRequestHeadersUntilFirstF
lush(i == 0) |
145 .addHeader("foo", "bar") | 146 .addHeader("foo", "bar") |
146 .addHeader("empty", "") | 147 .addHeader("empty", "") |
147 .addHeader("Content-Type", "zeb
ra") | 148 .addHeader("Content-Type", "zeb
ra") |
148 .build(); | 149 .build(); |
149 stream.start(); | 150 stream.start(); |
150 callback.blockForDone(); | 151 callback.blockForDone(); |
151 assertTrue(stream.isDone()); | 152 assertTrue(stream.isDone()); |
152 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 153 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
153 assertEquals( | 154 assertEquals( |
(...skipping 13 matching lines...) Expand all Loading... |
167 String quicURL = QuicTestServer.getServerURL() + path; | 168 String quicURL = QuicTestServer.getServerURL() + path; |
168 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback(); | 169 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback(); |
169 // Although we have no way to verify data sent at this point, this t
est | 170 // Although we have no way to verify data sent at this point, this t
est |
170 // can make sure that onWriteCompleted is invoked appropriately. | 171 // can make sure that onWriteCompleted is invoked appropriately. |
171 callback.addWriteData("Test String".getBytes(), false); | 172 callback.addWriteData("Test String".getBytes(), false); |
172 callback.addWriteData("1234567890".getBytes(), false); | 173 callback.addWriteData("1234567890".getBytes(), false); |
173 callback.addWriteData("woot!".getBytes(), true); | 174 callback.addWriteData("woot!".getBytes(), true); |
174 callback.addWriteData("Test String".getBytes(), false); | 175 callback.addWriteData("Test String".getBytes(), false); |
175 callback.addWriteData("1234567890".getBytes(), false); | 176 callback.addWriteData("1234567890".getBytes(), false); |
176 callback.addWriteData("woot!".getBytes(), true); | 177 callback.addWriteData("woot!".getBytes(), true); |
177 BidirectionalStream stream = new BidirectionalStream | 178 BidirectionalStream stream = mTestFramework.mCronetEngine |
178 .Builder(quicURL, callback, cal
lback.getExecutor(), | 179 .newBidirectionalStreamBuilder( |
179 mTestFramework.mCronetE
ngine) | 180 quicURL, callback, call
back.getExecutor()) |
180 .delayRequestHeadersUntilFirstF
lush(i == 0) | 181 .delayRequestHeadersUntilFirstF
lush(i == 0) |
181 .addHeader("foo", "bar") | 182 .addHeader("foo", "bar") |
182 .addHeader("empty", "") | 183 .addHeader("empty", "") |
183 .addHeader("Content-Type", "zeb
ra") | 184 .addHeader("Content-Type", "zeb
ra") |
184 .build(); | 185 .build(); |
185 stream.start(); | 186 stream.start(); |
186 callback.blockForDone(); | 187 callback.blockForDone(); |
187 assertTrue(stream.isDone()); | 188 assertTrue(stream.isDone()); |
188 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 189 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
189 assertEquals( | 190 assertEquals( |
(...skipping 13 matching lines...) Expand all Loading... |
203 String url = QuicTestServer.getServerURL() + path; | 204 String url = QuicTestServer.getServerURL() + path; |
204 | 205 |
205 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback() { | 206 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback() { |
206 @Override | 207 @Override |
207 public void onStreamReady(BidirectionalStream stream) { | 208 public void onStreamReady(BidirectionalStream stream) { |
208 // This flush should send the delayed headers. | 209 // This flush should send the delayed headers. |
209 stream.flush(); | 210 stream.flush(); |
210 super.onStreamReady(stream); | 211 super.onStreamReady(stream); |
211 } | 212 } |
212 }; | 213 }; |
213 BidirectionalStream stream = new BidirectionalStream | 214 BidirectionalStream stream = |
214 .Builder(url, callback, callbac
k.getExecutor(), | 215 mTestFramework.mCronetEngine |
215 mTestFramework.mCronetE
ngine) | 216 .newBidirectionalStreamBuilder(url, callback, callba
ck.getExecutor()) |
216 .setHttpMethod("GET") | 217 .setHttpMethod("GET") |
217 .delayRequestHeadersUntilFirstF
lush(i == 0) | 218 .delayRequestHeadersUntilFirstFlush(i == 0) |
218 .addHeader("foo", "bar") | 219 .addHeader("foo", "bar") |
219 .addHeader("empty", "") | 220 .addHeader("empty", "") |
220 .build(); | 221 .build(); |
221 // Flush before stream is started should not crash. | 222 // Flush before stream is started should not crash. |
222 stream.flush(); | 223 stream.flush(); |
223 | 224 |
224 stream.start(); | 225 stream.start(); |
225 callback.blockForDone(); | 226 callback.blockForDone(); |
226 assertTrue(stream.isDone()); | 227 assertTrue(stream.isDone()); |
227 | 228 |
228 // Flush after stream is completed is no-op. It shouldn't call into
the destroyed | 229 // Flush after stream is completed is no-op. It shouldn't call into
the destroyed |
229 // adapter. | 230 // adapter. |
230 stream.flush(); | 231 stream.flush(); |
(...skipping 10 matching lines...) Expand all Loading... |
241 @OnlyRunNativeCronet | 242 @OnlyRunNativeCronet |
242 public void testSimplePostWithFlushAfterOneWrite() throws Exception { | 243 public void testSimplePostWithFlushAfterOneWrite() throws Exception { |
243 setUp(QuicBidirectionalStreams.ENABLED); | 244 setUp(QuicBidirectionalStreams.ENABLED); |
244 // TODO(xunjieli): Use ParameterizedTest instead of the loop. | 245 // TODO(xunjieli): Use ParameterizedTest instead of the loop. |
245 for (int i = 0; i < 2; i++) { | 246 for (int i = 0; i < 2; i++) { |
246 String path = "/simple.txt"; | 247 String path = "/simple.txt"; |
247 String url = QuicTestServer.getServerURL() + path; | 248 String url = QuicTestServer.getServerURL() + path; |
248 | 249 |
249 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback(); | 250 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback(); |
250 callback.addWriteData("Test String".getBytes(), true); | 251 callback.addWriteData("Test String".getBytes(), true); |
251 BidirectionalStream stream = new BidirectionalStream | 252 BidirectionalStream stream = |
252 .Builder(url, callback, callbac
k.getExecutor(), | 253 mTestFramework.mCronetEngine |
253 mTestFramework.mCronetE
ngine) | 254 .newBidirectionalStreamBuilder(url, callback, callba
ck.getExecutor()) |
254 .delayRequestHeadersUntilFirstF
lush(i == 0) | 255 .delayRequestHeadersUntilFirstFlush(i == 0) |
255 .addHeader("foo", "bar") | 256 .addHeader("foo", "bar") |
256 .addHeader("empty", "") | 257 .addHeader("empty", "") |
257 .addHeader("Content-Type", "zeb
ra") | 258 .addHeader("Content-Type", "zebra") |
258 .build(); | 259 .build(); |
259 stream.start(); | 260 stream.start(); |
260 callback.blockForDone(); | 261 callback.blockForDone(); |
261 assertTrue(stream.isDone()); | 262 assertTrue(stream.isDone()); |
262 | 263 |
263 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 264 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
264 assertEquals( | 265 assertEquals( |
265 "This is a simple text file served by QUIC.\n", callback.mRe
sponseAsString); | 266 "This is a simple text file served by QUIC.\n", callback.mRe
sponseAsString); |
266 assertEquals("quic/1+spdy/3", callback.mResponseInfo.getNegotiatedPr
otocol()); | 267 assertEquals("quic/1+spdy/3", callback.mResponseInfo.getNegotiatedPr
otocol()); |
267 } | 268 } |
268 } | 269 } |
269 | 270 |
270 @SmallTest | 271 @SmallTest |
271 @Feature({"Cronet"}) | 272 @Feature({"Cronet"}) |
272 @OnlyRunNativeCronet | 273 @OnlyRunNativeCronet |
273 public void testQuicBidirectionalStreamDisabled() throws Exception { | 274 public void testQuicBidirectionalStreamDisabled() throws Exception { |
274 setUp(QuicBidirectionalStreams.DISABLED); | 275 setUp(QuicBidirectionalStreams.DISABLED); |
275 String path = "/simple.txt"; | 276 String path = "/simple.txt"; |
276 String quicURL = QuicTestServer.getServerURL() + path; | 277 String quicURL = QuicTestServer.getServerURL() + path; |
277 | 278 |
278 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 279 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
279 BidirectionalStream stream = new BidirectionalStream | 280 BidirectionalStream stream = |
280 .Builder(quicURL, callback, callbac
k.getExecutor(), | 281 mTestFramework.mCronetEngine |
281 mTestFramework.mCronetEngin
e) | 282 .newBidirectionalStreamBuilder(quicURL, callback, callba
ck.getExecutor()) |
282 .setHttpMethod("GET") | 283 .setHttpMethod("GET") |
283 .build(); | 284 .build(); |
284 stream.start(); | 285 stream.start(); |
285 callback.blockForDone(); | 286 callback.blockForDone(); |
286 assertTrue(stream.isDone()); | 287 assertTrue(stream.isDone()); |
287 assertTrue(callback.mOnErrorCalled); | 288 assertTrue(callback.mOnErrorCalled); |
288 assertNull(callback.mResponseInfo); | 289 assertNull(callback.mResponseInfo); |
289 } | 290 } |
290 | 291 |
291 @SmallTest | 292 @SmallTest |
292 @Feature({"Cronet"}) | 293 @Feature({"Cronet"}) |
293 @OnlyRunNativeCronet | 294 @OnlyRunNativeCronet |
(...skipping 15 matching lines...) Expand all Loading... |
309 // Shut down the server, and the stream should error out. | 310 // Shut down the server, and the stream should error out. |
310 // The second call to shutdownQuicTestServer is no-op. | 311 // The second call to shutdownQuicTestServer is no-op. |
311 QuicTestServer.shutdownQuicTestServer(); | 312 QuicTestServer.shutdownQuicTestServer(); |
312 } | 313 } |
313 }; | 314 }; |
314 | 315 |
315 callback.addWriteData("Test String".getBytes()); | 316 callback.addWriteData("Test String".getBytes()); |
316 callback.addWriteData("1234567890".getBytes()); | 317 callback.addWriteData("1234567890".getBytes()); |
317 callback.addWriteData("woot!".getBytes()); | 318 callback.addWriteData("woot!".getBytes()); |
318 | 319 |
319 BidirectionalStream stream = new BidirectionalStream | 320 BidirectionalStream stream = |
320 .Builder(quicURL, callback, callbac
k.getExecutor(), | 321 mTestFramework.mCronetEngine |
321 mTestFramework.mCronetEngin
e) | 322 .newBidirectionalStreamBuilder(quicURL, callback, callba
ck.getExecutor()) |
322 .addHeader("foo", "bar") | 323 .addHeader("foo", "bar") |
323 .addHeader("empty", "") | 324 .addHeader("empty", "") |
324 .addHeader("Content-Type", "zebra") | 325 .addHeader("Content-Type", "zebra") |
325 .build(); | 326 .build(); |
326 stream.start(); | 327 stream.start(); |
327 callback.blockForDone(); | 328 callback.blockForDone(); |
328 assertTrue(stream.isDone()); | 329 assertTrue(stream.isDone()); |
329 // Server terminated on us, so the stream must fail. | 330 // Server terminated on us, so the stream must fail. |
330 // QUIC reports this as ERR_QUIC_PROTOCOL_ERROR. Sometimes we get ERR_CO
NNECTION_REFUSED. | 331 // QUIC reports this as ERR_QUIC_PROTOCOL_ERROR. Sometimes we get ERR_CO
NNECTION_REFUSED. |
331 assertNotNull(callback.mError); | 332 assertNotNull(callback.mError); |
332 assertTrue(NetError.ERR_QUIC_PROTOCOL_ERROR == callback.mError.getCronet
InternalErrorCode() | 333 assertTrue(NetError.ERR_QUIC_PROTOCOL_ERROR == callback.mError.getCronet
InternalErrorCode() |
333 || NetError.ERR_CONNECTION_REFUSED == callback.mError.getCronetI
nternalErrorCode()); | 334 || NetError.ERR_CONNECTION_REFUSED == callback.mError.getCronetI
nternalErrorCode()); |
334 } | 335 } |
335 | 336 |
336 @SmallTest | 337 @SmallTest |
337 @Feature({"Cronet"}) | 338 @Feature({"Cronet"}) |
338 @OnlyRunNativeCronet | 339 @OnlyRunNativeCronet |
339 // Test that certificate verify results are serialized and deserialized corr
ectly. | 340 // Test that certificate verify results are serialized and deserialized corr
ectly. |
340 public void testSerializeDeserialize() throws Exception { | 341 public void testSerializeDeserialize() throws Exception { |
341 setUp(QuicBidirectionalStreams.ENABLED); | 342 setUp(QuicBidirectionalStreams.ENABLED); |
342 String path = "/simple.txt"; | 343 String path = "/simple.txt"; |
343 String quicURL = QuicTestServer.getServerURL() + path; | 344 String quicURL = QuicTestServer.getServerURL() + path; |
344 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 345 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
345 BidirectionalStream stream = new BidirectionalStream | 346 BidirectionalStream stream = |
346 .Builder(quicURL, callback, callbac
k.getExecutor(), | 347 mTestFramework.mCronetEngine |
347 mTestFramework.mCronetEngin
e) | 348 .newBidirectionalStreamBuilder(quicURL, callback, callba
ck.getExecutor()) |
348 .setHttpMethod("GET") | 349 .setHttpMethod("GET") |
349 .build(); | 350 .build(); |
350 stream.start(); | 351 stream.start(); |
351 callback.blockForDone(); | 352 callback.blockForDone(); |
352 assertTrue(stream.isDone()); | 353 assertTrue(stream.isDone()); |
353 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 354 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
354 assertEquals("This is a simple text file served by QUIC.\n", callback.mR
esponseAsString); | 355 assertEquals("This is a simple text file served by QUIC.\n", callback.mR
esponseAsString); |
355 assertEquals("quic/1+spdy/3", callback.mResponseInfo.getNegotiatedProtoc
ol()); | 356 assertEquals("quic/1+spdy/3", callback.mResponseInfo.getNegotiatedProtoc
ol()); |
356 | 357 |
357 String serialized_data = mTestFramework.mCronetEngine.getCertVerifierDat
a(100); | 358 String serialized_data = mTestFramework.mCronetEngine.getCertVerifierDat
a(100); |
358 assertFalse(serialized_data.isEmpty()); | 359 assertFalse(serialized_data.isEmpty()); |
359 | 360 |
360 // Create a new builder and verify that the |serialized_data| is deseria
lized correctly. | 361 // Create a new builder and verify that the |serialized_data| is deseria
lized correctly. |
361 CronetEngine.Builder builder = new CronetEngine.Builder(getContext()); | 362 ExperimentalCronetEngine.Builder builder = |
| 363 new ExperimentalCronetEngine.Builder(getContext()); |
362 builder.enableQuic(true); | 364 builder.enableQuic(true); |
363 builder.setMockCertVerifierForTesting(QuicTestServer.createMockCertVerif
ier()); | 365 CronetTestUtil.setMockCertVerifierForTesting( |
| 366 builder, QuicTestServer.createMockCertVerifier()); |
364 builder.setCertVerifierData(serialized_data); | 367 builder.setCertVerifierData(serialized_data); |
365 | 368 |
366 CronetTestFramework testFramework = | 369 CronetTestFramework testFramework = |
367 startCronetTestFrameworkWithUrlAndCronetEngineBuilder(null, buil
der); | 370 startCronetTestFrameworkWithUrlAndCronetEngineBuilder(null, buil
der); |
368 String deserialized_data = testFramework.mCronetEngine.getCertVerifierDa
ta(100); | 371 String deserialized_data = testFramework.mCronetEngine.getCertVerifierDa
ta(100); |
369 assertEquals(deserialized_data, serialized_data); | 372 assertEquals(deserialized_data, serialized_data); |
370 } | 373 } |
371 } | 374 } |
OLD | NEW |