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