| 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.support.test.filters.SmallTest; | 9 import android.support.test.filters.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.MetricsTestUtil.TestRequestFinishedListener; | 14 import org.chromium.net.MetricsTestUtil.TestRequestFinishedListener; |
| 15 | 15 |
| 16 import java.nio.ByteBuffer; | 16 import java.nio.ByteBuffer; |
| 17 import java.util.Date; | 17 import java.util.Date; |
| 18 import java.util.HashSet; | 18 import java.util.HashSet; |
| 19 | 19 |
| 20 /** | 20 /** |
| 21 * Tests functionality of BidirectionalStream's QUIC implementation. | 21 * Tests functionality of BidirectionalStream's QUIC implementation. |
| 22 */ | 22 */ |
| 23 public class BidirectionalStreamQuicTest extends CronetTestBase { | 23 public class BidirectionalStreamQuicTest extends CronetTestBase { |
| 24 private CronetTestFramework mTestFramework; | 24 private ExperimentalCronetEngine mCronetEngine; |
| 25 private enum QuicBidirectionalStreams { | 25 private enum QuicBidirectionalStreams { |
| 26 ENABLED, | 26 ENABLED, |
| 27 DISABLED, | 27 DISABLED, |
| 28 } | 28 } |
| 29 | 29 |
| 30 private void setUp(QuicBidirectionalStreams enabled) throws Exception { | 30 private void setUp(QuicBidirectionalStreams enabled) throws Exception { |
| 31 // Load library first to create MockCertVerifier. | 31 // Load library first to create MockCertVerifier. |
| 32 System.loadLibrary("cronet_tests"); | 32 System.loadLibrary("cronet_tests"); |
| 33 ExperimentalCronetEngine.Builder builder = | 33 ExperimentalCronetEngine.Builder builder = |
| 34 new ExperimentalCronetEngine.Builder(getContext()); | 34 new ExperimentalCronetEngine.Builder(getContext()); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 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 CronetTestUtil.setMockCertVerifierForTesting( | 52 CronetTestUtil.setMockCertVerifierForTesting( |
| 53 builder, QuicTestServer.createMockCertVerifier()); | 53 builder, QuicTestServer.createMockCertVerifier()); |
| 54 | 54 |
| 55 mTestFramework = startCronetTestFrameworkWithUrlAndCronetEngineBuilder(n
ull, builder); | 55 mCronetEngine = builder.build(); |
| 56 } | 56 } |
| 57 | 57 |
| 58 @Override | 58 @Override |
| 59 protected void tearDown() throws Exception { | 59 protected void tearDown() throws Exception { |
| 60 QuicTestServer.shutdownQuicTestServer(); | 60 QuicTestServer.shutdownQuicTestServer(); |
| 61 super.tearDown(); | 61 super.tearDown(); |
| 62 } | 62 } |
| 63 | 63 |
| 64 @SmallTest | 64 @SmallTest |
| 65 @Feature({"Cronet"}) | 65 @Feature({"Cronet"}) |
| 66 @OnlyRunNativeCronet | 66 @OnlyRunNativeCronet |
| 67 // Test that QUIC is negotiated. | 67 // Test that QUIC is negotiated. |
| 68 public void testSimpleGet() throws Exception { | 68 public void testSimpleGet() throws Exception { |
| 69 setUp(QuicBidirectionalStreams.ENABLED); | 69 setUp(QuicBidirectionalStreams.ENABLED); |
| 70 String path = "/simple.txt"; | 70 String path = "/simple.txt"; |
| 71 String quicURL = QuicTestServer.getServerURL() + path; | 71 String quicURL = QuicTestServer.getServerURL() + path; |
| 72 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 72 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 73 BidirectionalStream stream = | 73 BidirectionalStream stream = |
| 74 mTestFramework.mCronetEngine | 74 mCronetEngine |
| 75 .newBidirectionalStreamBuilder(quicURL, callback, callba
ck.getExecutor()) | 75 .newBidirectionalStreamBuilder(quicURL, callback, callba
ck.getExecutor()) |
| 76 .setHttpMethod("GET") | 76 .setHttpMethod("GET") |
| 77 .build(); | 77 .build(); |
| 78 stream.start(); | 78 stream.start(); |
| 79 callback.blockForDone(); | 79 callback.blockForDone(); |
| 80 assertTrue(stream.isDone()); | 80 assertTrue(stream.isDone()); |
| 81 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 81 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 82 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); |
| 83 assertEquals("quic/1+spdy/3", callback.mResponseInfo.getNegotiatedProtoc
ol()); | 83 assertEquals("quic/1+spdy/3", callback.mResponseInfo.getNegotiatedProtoc
ol()); |
| 84 } | 84 } |
| 85 | 85 |
| 86 @SmallTest | 86 @SmallTest |
| 87 @Feature({"Cronet"}) | 87 @Feature({"Cronet"}) |
| 88 @OnlyRunNativeCronet | 88 @OnlyRunNativeCronet |
| 89 public void testSimplePost() throws Exception { | 89 public void testSimplePost() throws Exception { |
| 90 setUp(QuicBidirectionalStreams.ENABLED); | 90 setUp(QuicBidirectionalStreams.ENABLED); |
| 91 String path = "/simple.txt"; | 91 String path = "/simple.txt"; |
| 92 String quicURL = QuicTestServer.getServerURL() + path; | 92 String quicURL = QuicTestServer.getServerURL() + path; |
| 93 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 93 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 94 // 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 |
| 95 // can make sure that onWriteCompleted is invoked appropriately. | 95 // can make sure that onWriteCompleted is invoked appropriately. |
| 96 callback.addWriteData("Test String".getBytes()); | 96 callback.addWriteData("Test String".getBytes()); |
| 97 callback.addWriteData("1234567890".getBytes()); | 97 callback.addWriteData("1234567890".getBytes()); |
| 98 callback.addWriteData("woot!".getBytes()); | 98 callback.addWriteData("woot!".getBytes()); |
| 99 TestRequestFinishedListener requestFinishedListener = new TestRequestFin
ishedListener(); | 99 TestRequestFinishedListener requestFinishedListener = new TestRequestFin
ishedListener(); |
| 100 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL
istener); | 100 mCronetEngine.addRequestFinishedListener(requestFinishedListener); |
| 101 BidirectionalStream stream = | 101 BidirectionalStream stream = |
| 102 mTestFramework.mCronetEngine | 102 mCronetEngine |
| 103 .newBidirectionalStreamBuilder(quicURL, callback, callba
ck.getExecutor()) | 103 .newBidirectionalStreamBuilder(quicURL, callback, callba
ck.getExecutor()) |
| 104 .addHeader("foo", "bar") | 104 .addHeader("foo", "bar") |
| 105 .addHeader("empty", "") | 105 .addHeader("empty", "") |
| 106 .addHeader("Content-Type", "zebra") | 106 .addHeader("Content-Type", "zebra") |
| 107 .addRequestAnnotation("request annotation") | 107 .addRequestAnnotation("request annotation") |
| 108 .addRequestAnnotation(this) | 108 .addRequestAnnotation(this) |
| 109 .build(); | 109 .build(); |
| 110 Date startTime = new Date(); | 110 Date startTime = new Date(); |
| 111 stream.start(); | 111 stream.start(); |
| 112 callback.blockForDone(); | 112 callback.blockForDone(); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 132 // TODO(xunjieli): Use ParameterizedTest instead of the loop. | 132 // TODO(xunjieli): Use ParameterizedTest instead of the loop. |
| 133 for (int i = 0; i < 2; i++) { | 133 for (int i = 0; i < 2; i++) { |
| 134 String path = "/simple.txt"; | 134 String path = "/simple.txt"; |
| 135 String quicURL = QuicTestServer.getServerURL() + path; | 135 String quicURL = QuicTestServer.getServerURL() + path; |
| 136 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback(); | 136 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback(); |
| 137 // 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 |
| 138 // can make sure that onWriteCompleted is invoked appropriately. | 138 // can make sure that onWriteCompleted is invoked appropriately. |
| 139 callback.addWriteData("Test String".getBytes(), false); | 139 callback.addWriteData("Test String".getBytes(), false); |
| 140 callback.addWriteData("1234567890".getBytes(), false); | 140 callback.addWriteData("1234567890".getBytes(), false); |
| 141 callback.addWriteData("woot!".getBytes(), true); | 141 callback.addWriteData("woot!".getBytes(), true); |
| 142 BidirectionalStream stream = mTestFramework.mCronetEngine | 142 BidirectionalStream stream = mCronetEngine |
| 143 .newBidirectionalStreamBuilder( | 143 .newBidirectionalStreamBuilder( |
| 144 quicURL, callback, call
back.getExecutor()) | 144 quicURL, callback, call
back.getExecutor()) |
| 145 .delayRequestHeadersUntilFirstF
lush(i == 0) | 145 .delayRequestHeadersUntilFirstF
lush(i == 0) |
| 146 .addHeader("foo", "bar") | 146 .addHeader("foo", "bar") |
| 147 .addHeader("empty", "") | 147 .addHeader("empty", "") |
| 148 .addHeader("Content-Type", "zeb
ra") | 148 .addHeader("Content-Type", "zeb
ra") |
| 149 .build(); | 149 .build(); |
| 150 stream.start(); | 150 stream.start(); |
| 151 callback.blockForDone(); | 151 callback.blockForDone(); |
| 152 assertTrue(stream.isDone()); | 152 assertTrue(stream.isDone()); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 168 String quicURL = QuicTestServer.getServerURL() + path; | 168 String quicURL = QuicTestServer.getServerURL() + path; |
| 169 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback(); | 169 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback(); |
| 170 // 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 |
| 171 // can make sure that onWriteCompleted is invoked appropriately. | 171 // can make sure that onWriteCompleted is invoked appropriately. |
| 172 callback.addWriteData("Test String".getBytes(), false); | 172 callback.addWriteData("Test String".getBytes(), false); |
| 173 callback.addWriteData("1234567890".getBytes(), false); | 173 callback.addWriteData("1234567890".getBytes(), false); |
| 174 callback.addWriteData("woot!".getBytes(), true); | 174 callback.addWriteData("woot!".getBytes(), true); |
| 175 callback.addWriteData("Test String".getBytes(), false); | 175 callback.addWriteData("Test String".getBytes(), false); |
| 176 callback.addWriteData("1234567890".getBytes(), false); | 176 callback.addWriteData("1234567890".getBytes(), false); |
| 177 callback.addWriteData("woot!".getBytes(), true); | 177 callback.addWriteData("woot!".getBytes(), true); |
| 178 BidirectionalStream stream = mTestFramework.mCronetEngine | 178 BidirectionalStream stream = mCronetEngine |
| 179 .newBidirectionalStreamBuilder( | 179 .newBidirectionalStreamBuilder( |
| 180 quicURL, callback, call
back.getExecutor()) | 180 quicURL, callback, call
back.getExecutor()) |
| 181 .delayRequestHeadersUntilFirstF
lush(i == 0) | 181 .delayRequestHeadersUntilFirstF
lush(i == 0) |
| 182 .addHeader("foo", "bar") | 182 .addHeader("foo", "bar") |
| 183 .addHeader("empty", "") | 183 .addHeader("empty", "") |
| 184 .addHeader("Content-Type", "zeb
ra") | 184 .addHeader("Content-Type", "zeb
ra") |
| 185 .build(); | 185 .build(); |
| 186 stream.start(); | 186 stream.start(); |
| 187 callback.blockForDone(); | 187 callback.blockForDone(); |
| 188 assertTrue(stream.isDone()); | 188 assertTrue(stream.isDone()); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 205 | 205 |
| 206 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback() { | 206 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback() { |
| 207 @Override | 207 @Override |
| 208 public void onStreamReady(BidirectionalStream stream) { | 208 public void onStreamReady(BidirectionalStream stream) { |
| 209 // This flush should send the delayed headers. | 209 // This flush should send the delayed headers. |
| 210 stream.flush(); | 210 stream.flush(); |
| 211 super.onStreamReady(stream); | 211 super.onStreamReady(stream); |
| 212 } | 212 } |
| 213 }; | 213 }; |
| 214 BidirectionalStream stream = | 214 BidirectionalStream stream = |
| 215 mTestFramework.mCronetEngine | 215 mCronetEngine |
| 216 .newBidirectionalStreamBuilder(url, callback, callba
ck.getExecutor()) | 216 .newBidirectionalStreamBuilder(url, callback, callba
ck.getExecutor()) |
| 217 .setHttpMethod("GET") | 217 .setHttpMethod("GET") |
| 218 .delayRequestHeadersUntilFirstFlush(i == 0) | 218 .delayRequestHeadersUntilFirstFlush(i == 0) |
| 219 .addHeader("foo", "bar") | 219 .addHeader("foo", "bar") |
| 220 .addHeader("empty", "") | 220 .addHeader("empty", "") |
| 221 .build(); | 221 .build(); |
| 222 // Flush before stream is started should not crash. | 222 // Flush before stream is started should not crash. |
| 223 stream.flush(); | 223 stream.flush(); |
| 224 | 224 |
| 225 stream.start(); | 225 stream.start(); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 243 public void testSimplePostWithFlushAfterOneWrite() throws Exception { | 243 public void testSimplePostWithFlushAfterOneWrite() throws Exception { |
| 244 setUp(QuicBidirectionalStreams.ENABLED); | 244 setUp(QuicBidirectionalStreams.ENABLED); |
| 245 // TODO(xunjieli): Use ParameterizedTest instead of the loop. | 245 // TODO(xunjieli): Use ParameterizedTest instead of the loop. |
| 246 for (int i = 0; i < 2; i++) { | 246 for (int i = 0; i < 2; i++) { |
| 247 String path = "/simple.txt"; | 247 String path = "/simple.txt"; |
| 248 String url = QuicTestServer.getServerURL() + path; | 248 String url = QuicTestServer.getServerURL() + path; |
| 249 | 249 |
| 250 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback(); | 250 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback(); |
| 251 callback.addWriteData("Test String".getBytes(), true); | 251 callback.addWriteData("Test String".getBytes(), true); |
| 252 BidirectionalStream stream = | 252 BidirectionalStream stream = |
| 253 mTestFramework.mCronetEngine | 253 mCronetEngine |
| 254 .newBidirectionalStreamBuilder(url, callback, callba
ck.getExecutor()) | 254 .newBidirectionalStreamBuilder(url, callback, callba
ck.getExecutor()) |
| 255 .delayRequestHeadersUntilFirstFlush(i == 0) | 255 .delayRequestHeadersUntilFirstFlush(i == 0) |
| 256 .addHeader("foo", "bar") | 256 .addHeader("foo", "bar") |
| 257 .addHeader("empty", "") | 257 .addHeader("empty", "") |
| 258 .addHeader("Content-Type", "zebra") | 258 .addHeader("Content-Type", "zebra") |
| 259 .build(); | 259 .build(); |
| 260 stream.start(); | 260 stream.start(); |
| 261 callback.blockForDone(); | 261 callback.blockForDone(); |
| 262 assertTrue(stream.isDone()); | 262 assertTrue(stream.isDone()); |
| 263 | 263 |
| 264 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 264 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 265 assertEquals( | 265 assertEquals( |
| 266 "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); |
| 267 assertEquals("quic/1+spdy/3", callback.mResponseInfo.getNegotiatedPr
otocol()); | 267 assertEquals("quic/1+spdy/3", callback.mResponseInfo.getNegotiatedPr
otocol()); |
| 268 } | 268 } |
| 269 } | 269 } |
| 270 | 270 |
| 271 @SmallTest | 271 @SmallTest |
| 272 @Feature({"Cronet"}) | 272 @Feature({"Cronet"}) |
| 273 @OnlyRunNativeCronet | 273 @OnlyRunNativeCronet |
| 274 public void testQuicBidirectionalStreamDisabled() throws Exception { | 274 public void testQuicBidirectionalStreamDisabled() throws Exception { |
| 275 setUp(QuicBidirectionalStreams.DISABLED); | 275 setUp(QuicBidirectionalStreams.DISABLED); |
| 276 String path = "/simple.txt"; | 276 String path = "/simple.txt"; |
| 277 String quicURL = QuicTestServer.getServerURL() + path; | 277 String quicURL = QuicTestServer.getServerURL() + path; |
| 278 | 278 |
| 279 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 279 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 280 BidirectionalStream stream = | 280 BidirectionalStream stream = |
| 281 mTestFramework.mCronetEngine | 281 mCronetEngine |
| 282 .newBidirectionalStreamBuilder(quicURL, callback, callba
ck.getExecutor()) | 282 .newBidirectionalStreamBuilder(quicURL, callback, callba
ck.getExecutor()) |
| 283 .setHttpMethod("GET") | 283 .setHttpMethod("GET") |
| 284 .build(); | 284 .build(); |
| 285 stream.start(); | 285 stream.start(); |
| 286 callback.blockForDone(); | 286 callback.blockForDone(); |
| 287 assertTrue(stream.isDone()); | 287 assertTrue(stream.isDone()); |
| 288 assertTrue(callback.mOnErrorCalled); | 288 assertTrue(callback.mOnErrorCalled); |
| 289 assertNull(callback.mResponseInfo); | 289 assertNull(callback.mResponseInfo); |
| 290 } | 290 } |
| 291 | 291 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 311 // The second call to shutdownQuicTestServer is no-op. | 311 // The second call to shutdownQuicTestServer is no-op. |
| 312 QuicTestServer.shutdownQuicTestServer(); | 312 QuicTestServer.shutdownQuicTestServer(); |
| 313 } | 313 } |
| 314 }; | 314 }; |
| 315 | 315 |
| 316 callback.addWriteData("Test String".getBytes()); | 316 callback.addWriteData("Test String".getBytes()); |
| 317 callback.addWriteData("1234567890".getBytes()); | 317 callback.addWriteData("1234567890".getBytes()); |
| 318 callback.addWriteData("woot!".getBytes()); | 318 callback.addWriteData("woot!".getBytes()); |
| 319 | 319 |
| 320 BidirectionalStream stream = | 320 BidirectionalStream stream = |
| 321 mTestFramework.mCronetEngine | 321 mCronetEngine |
| 322 .newBidirectionalStreamBuilder(quicURL, callback, callba
ck.getExecutor()) | 322 .newBidirectionalStreamBuilder(quicURL, callback, callba
ck.getExecutor()) |
| 323 .addHeader("foo", "bar") | 323 .addHeader("foo", "bar") |
| 324 .addHeader("empty", "") | 324 .addHeader("empty", "") |
| 325 .addHeader("Content-Type", "zebra") | 325 .addHeader("Content-Type", "zebra") |
| 326 .build(); | 326 .build(); |
| 327 stream.start(); | 327 stream.start(); |
| 328 callback.blockForDone(); | 328 callback.blockForDone(); |
| 329 assertTrue(stream.isDone()); | 329 assertTrue(stream.isDone()); |
| 330 // Server terminated on us, so the stream must fail. | 330 // Server terminated on us, so the stream must fail. |
| 331 // 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. |
| 332 assertNotNull(callback.mError); | 332 assertNotNull(callback.mError); |
| 333 assertTrue(callback.mError instanceof NetworkException); | 333 assertTrue(callback.mError instanceof NetworkException); |
| 334 NetworkException networkError = (NetworkException) callback.mError; | 334 NetworkException networkError = (NetworkException) callback.mError; |
| 335 assertTrue(NetError.ERR_QUIC_PROTOCOL_ERROR == networkError.getCronetInt
ernalErrorCode() | 335 assertTrue(NetError.ERR_QUIC_PROTOCOL_ERROR == networkError.getCronetInt
ernalErrorCode() |
| 336 || NetError.ERR_CONNECTION_REFUSED == networkError.getCronetInte
rnalErrorCode()); | 336 || NetError.ERR_CONNECTION_REFUSED == networkError.getCronetInte
rnalErrorCode()); |
| 337 } | 337 } |
| 338 | 338 |
| 339 @SmallTest | 339 @SmallTest |
| 340 @Feature({"Cronet"}) | 340 @Feature({"Cronet"}) |
| 341 @OnlyRunNativeCronet | 341 @OnlyRunNativeCronet |
| 342 // Test that certificate verify results are serialized and deserialized corr
ectly. | 342 // Test that certificate verify results are serialized and deserialized corr
ectly. |
| 343 public void testSerializeDeserialize() throws Exception { | 343 public void testSerializeDeserialize() throws Exception { |
| 344 setUp(QuicBidirectionalStreams.ENABLED); | 344 setUp(QuicBidirectionalStreams.ENABLED); |
| 345 String path = "/simple.txt"; | 345 String path = "/simple.txt"; |
| 346 String quicURL = QuicTestServer.getServerURL() + path; | 346 String quicURL = QuicTestServer.getServerURL() + path; |
| 347 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 347 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 348 BidirectionalStream stream = | 348 BidirectionalStream stream = |
| 349 mTestFramework.mCronetEngine | 349 mCronetEngine |
| 350 .newBidirectionalStreamBuilder(quicURL, callback, callba
ck.getExecutor()) | 350 .newBidirectionalStreamBuilder(quicURL, callback, callba
ck.getExecutor()) |
| 351 .setHttpMethod("GET") | 351 .setHttpMethod("GET") |
| 352 .build(); | 352 .build(); |
| 353 stream.start(); | 353 stream.start(); |
| 354 callback.blockForDone(); | 354 callback.blockForDone(); |
| 355 assertTrue(stream.isDone()); | 355 assertTrue(stream.isDone()); |
| 356 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 356 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 357 assertEquals("This is a simple text file served by QUIC.\n", callback.mR
esponseAsString); | 357 assertEquals("This is a simple text file served by QUIC.\n", callback.mR
esponseAsString); |
| 358 assertEquals("quic/1+spdy/3", callback.mResponseInfo.getNegotiatedProtoc
ol()); | 358 assertEquals("quic/1+spdy/3", callback.mResponseInfo.getNegotiatedProtoc
ol()); |
| 359 | 359 |
| 360 String serialized_data = mTestFramework.mCronetEngine.getCertVerifierDat
a(100); | 360 String serialized_data = mCronetEngine.getCertVerifierData(100); |
| 361 assertFalse(serialized_data.isEmpty()); | 361 assertFalse(serialized_data.isEmpty()); |
| 362 | 362 |
| 363 // Create a new builder and verify that the |serialized_data| is deseria
lized correctly. | 363 // Create a new builder and verify that the |serialized_data| is deseria
lized correctly. |
| 364 ExperimentalCronetEngine.Builder builder = | 364 ExperimentalCronetEngine.Builder builder = |
| 365 new ExperimentalCronetEngine.Builder(getContext()); | 365 new ExperimentalCronetEngine.Builder(getContext()); |
| 366 builder.enableQuic(true); | 366 builder.enableQuic(true); |
| 367 CronetTestUtil.setMockCertVerifierForTesting( | 367 CronetTestUtil.setMockCertVerifierForTesting( |
| 368 builder, QuicTestServer.createMockCertVerifier()); | 368 builder, QuicTestServer.createMockCertVerifier()); |
| 369 builder.setCertVerifierData(serialized_data); | 369 builder.setCertVerifierData(serialized_data); |
| 370 | 370 |
| 371 CronetTestFramework testFramework = | 371 String deserialized_data = builder.build().getCertVerifierData(100); |
| 372 startCronetTestFrameworkWithUrlAndCronetEngineBuilder(null, buil
der); | |
| 373 String deserialized_data = testFramework.mCronetEngine.getCertVerifierDa
ta(100); | |
| 374 assertEquals(deserialized_data, serialized_data); | 372 assertEquals(deserialized_data, serialized_data); |
| 375 } | 373 } |
| 376 } | 374 } |
| OLD | NEW |