| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package org.chromium.net; | 5 package org.chromium.net; |
| 6 | 6 |
| 7 import static org.chromium.base.CollectionUtil.newHashSet; | 7 import static org.chromium.base.CollectionUtil.newHashSet; |
| 8 | 8 |
| 9 import android.os.ConditionVariable; | 9 import android.os.ConditionVariable; |
| 10 import android.test.suitebuilder.annotation.SmallTest; | 10 import android.test.suitebuilder.annotation.SmallTest; |
| 11 | 11 |
| 12 import org.chromium.base.test.util.DisabledTest; | 12 import org.chromium.base.test.util.DisabledTest; |
| 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 import org.chromium.net.TestBidirectionalStreamCallback.FailureType; | 15 import org.chromium.net.TestBidirectionalStreamCallback.FailureType; |
| 17 import org.chromium.net.TestBidirectionalStreamCallback.ResponseStep; | 16 import org.chromium.net.TestBidirectionalStreamCallback.ResponseStep; |
| 18 import org.chromium.net.impl.CronetBidirectionalStream; | 17 import org.chromium.net.impl.CronetBidirectionalStream; |
| 19 | 18 |
| 20 import java.nio.ByteBuffer; | 19 import java.nio.ByteBuffer; |
| 21 import java.util.AbstractMap; | 20 import java.util.AbstractMap; |
| 22 import java.util.ArrayList; | 21 import java.util.ArrayList; |
| 23 import java.util.Arrays; | 22 import java.util.Arrays; |
| 24 import java.util.Date; | 23 import java.util.Date; |
| 25 import java.util.HashSet; | 24 import java.util.HashSet; |
| 26 import java.util.List; | 25 import java.util.List; |
| 27 import java.util.Map; | 26 import java.util.Map; |
| 28 import java.util.regex.Matcher; | 27 import java.util.regex.Matcher; |
| 29 import java.util.regex.Pattern; | 28 import java.util.regex.Pattern; |
| 30 | 29 |
| 31 /** | 30 /** |
| 32 * Test functionality of BidirectionalStream interface. | 31 * Test functionality of BidirectionalStream interface. |
| 33 */ | 32 */ |
| 34 public class BidirectionalStreamTest extends CronetTestBase { | 33 public class BidirectionalStreamTest extends CronetTestBase { |
| 35 private CronetTestFramework mTestFramework; | 34 private CronetTestFramework mTestFramework; |
| 36 | 35 |
| 37 @Override | 36 @Override |
| 38 protected void setUp() throws Exception { | 37 protected void setUp() throws Exception { |
| 39 super.setUp(); | 38 super.setUp(); |
| 40 // Load library first to create MockCertVerifier. | 39 // Load library first to create MockCertVerifier. |
| 41 System.loadLibrary("cronet_tests"); | 40 System.loadLibrary("cronet_tests"); |
| 42 CronetEngine.Builder builder = new CronetEngine.Builder(getContext()); | 41 ExperimentalCronetEngine.Builder builder = |
| 43 builder.setMockCertVerifierForTesting(QuicTestServer.createMockCertVerif
ier()); | 42 new ExperimentalCronetEngine.Builder(getContext()); |
| 43 CronetTestUtil.setMockCertVerifierForTesting( |
| 44 builder, QuicTestServer.createMockCertVerifier()); |
| 44 | 45 |
| 45 mTestFramework = startCronetTestFrameworkWithUrlAndCronetEngineBuilder(n
ull, builder); | 46 mTestFramework = startCronetTestFrameworkWithUrlAndCronetEngineBuilder(n
ull, builder); |
| 46 assertTrue(Http2TestServer.startHttp2TestServer( | 47 assertTrue(Http2TestServer.startHttp2TestServer( |
| 47 getContext(), QuicTestServer.getServerCert(), QuicTestServer.get
ServerCertKey())); | 48 getContext(), QuicTestServer.getServerCert(), QuicTestServer.get
ServerCertKey())); |
| 48 } | 49 } |
| 49 | 50 |
| 50 @Override | 51 @Override |
| 51 protected void tearDown() throws Exception { | 52 protected void tearDown() throws Exception { |
| 52 assertTrue(Http2TestServer.shutdownHttp2TestServer()); | 53 assertTrue(Http2TestServer.shutdownHttp2TestServer()); |
| 53 if (mTestFramework.mCronetEngine != null) { | 54 if (mTestFramework.mCronetEngine != null) { |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 87 Arrays.asList(urls), statusCode, message, headersList, false, "h
2", null); | 88 Arrays.asList(urls), statusCode, message, headersList, false, "h
2", null); |
| 88 urlResponseInfo.setReceivedBytesCount(receivedBytes); | 89 urlResponseInfo.setReceivedBytesCount(receivedBytes); |
| 89 return urlResponseInfo; | 90 return urlResponseInfo; |
| 90 } | 91 } |
| 91 | 92 |
| 92 private void runSimpleGetWithExpectedReceivedBytesCount(int expectedReceived
Bytes) | 93 private void runSimpleGetWithExpectedReceivedBytesCount(int expectedReceived
Bytes) |
| 93 throws Exception { | 94 throws Exception { |
| 94 String url = Http2TestServer.getEchoMethodUrl(); | 95 String url = Http2TestServer.getEchoMethodUrl(); |
| 95 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 96 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 96 // Create stream. | 97 // Create stream. |
| 97 BidirectionalStream stream = new BidirectionalStream | 98 BidirectionalStream stream = |
| 98 .Builder(url, callback, callback.ge
tExecutor(), | 99 mTestFramework.mCronetEngine |
| 99 mTestFramework.mCronetEngin
e) | 100 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
| 100 .setHttpMethod("GET") | 101 .setHttpMethod("GET") |
| 101 .build(); | 102 .build(); |
| 102 stream.start(); | 103 stream.start(); |
| 103 callback.blockForDone(); | 104 callback.blockForDone(); |
| 104 assertTrue(stream.isDone()); | 105 assertTrue(stream.isDone()); |
| 105 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 106 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 106 // Default method is 'GET'. | 107 // Default method is 'GET'. |
| 107 assertEquals("GET", callback.mResponseAsString); | 108 assertEquals("GET", callback.mResponseAsString); |
| 108 UrlResponseInfo urlResponseInfo = createUrlResponseInfo( | 109 UrlResponseInfo urlResponseInfo = createUrlResponseInfo( |
| 109 new String[] {url}, "", 200, expectedReceivedBytes, ":status", "
200"); | 110 new String[] {url}, "", 200, expectedReceivedBytes, ":status", "
200"); |
| 110 assertResponseEquals(urlResponseInfo, callback.mResponseInfo); | 111 assertResponseEquals(urlResponseInfo, callback.mResponseInfo); |
| 111 checkResponseInfo(callback.mResponseInfo, Http2TestServer.getEchoMethodU
rl(), 200, ""); | 112 checkResponseInfo(callback.mResponseInfo, Http2TestServer.getEchoMethodU
rl(), 200, ""); |
| 112 } | 113 } |
| 113 | 114 |
| 114 @SmallTest | 115 @SmallTest |
| 115 @Feature({"Cronet"}) | 116 @Feature({"Cronet"}) |
| 116 public void testBuilderChecks() throws Exception { | 117 public void testBuilderCheck() throws Exception { |
| 118 if (testingJavaImpl()) { |
| 119 testBuilderCheckJavaImpl(); |
| 120 } else { |
| 121 testBuilderCheckNativeImpl(); |
| 122 } |
| 123 } |
| 124 |
| 125 private void testBuilderCheckNativeImpl() throws Exception { |
| 117 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 126 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 118 try { | 127 try { |
| 119 new BidirectionalStream.Builder( | 128 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 120 null, callback, callback.getExecutor(), mTestFramework.mCron
etEngine); | 129 null, callback, callback.getExecutor()); |
| 121 fail("URL not null-checked"); | 130 fail("URL not null-checked"); |
| 122 } catch (NullPointerException e) { | 131 } catch (NullPointerException e) { |
| 123 assertEquals("URL is required.", e.getMessage()); | 132 assertEquals("URL is required.", e.getMessage()); |
| 124 } | 133 } |
| 125 try { | 134 try { |
| 126 new BidirectionalStream.Builder(Http2TestServer.getServerUrl(), null
, | 135 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 127 callback.getExecutor(), mTestFramework.mCronetEngine); | 136 Http2TestServer.getServerUrl(), null, callback.getExecutor()
); |
| 128 fail("Callback not null-checked"); | 137 fail("Callback not null-checked"); |
| 129 } catch (NullPointerException e) { | 138 } catch (NullPointerException e) { |
| 130 assertEquals("Callback is required.", e.getMessage()); | 139 assertEquals("Callback is required.", e.getMessage()); |
| 131 } | 140 } |
| 132 try { | 141 try { |
| 133 new BidirectionalStream.Builder( | 142 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 134 Http2TestServer.getServerUrl(), callback, null, mTestFramewo
rk.mCronetEngine); | 143 Http2TestServer.getServerUrl(), callback, null); |
| 135 fail("Executor not null-checked"); | 144 fail("Executor not null-checked"); |
| 136 } catch (NullPointerException e) { | 145 } catch (NullPointerException e) { |
| 137 assertEquals("Executor is required.", e.getMessage()); | 146 assertEquals("Executor is required.", e.getMessage()); |
| 138 } | 147 } |
| 139 try { | |
| 140 new BidirectionalStream.Builder( | |
| 141 Http2TestServer.getServerUrl(), callback, callback.getExecut
or(), null); | |
| 142 fail("CronetEngine not null-checked"); | |
| 143 } catch (NullPointerException e) { | |
| 144 assertEquals("CronetEngine is required.", e.getMessage()); | |
| 145 } | |
| 146 // Verify successful creation doesn't throw. | 148 // Verify successful creation doesn't throw. |
| 147 BidirectionalStream.Builder builder = | 149 BidirectionalStream.Builder builder = |
| 148 new BidirectionalStream.Builder(Http2TestServer.getServerUrl(),
callback, | 150 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 149 callback.getExecutor(), mTestFramework.mCronetEngine); | 151 Http2TestServer.getServerUrl(), callback, callback.getEx
ecutor()); |
| 150 try { | 152 try { |
| 151 builder.addHeader(null, "value"); | 153 builder.addHeader(null, "value"); |
| 152 fail("Header name is not null-checked"); | 154 fail("Header name is not null-checked"); |
| 153 } catch (NullPointerException e) { | 155 } catch (NullPointerException e) { |
| 154 assertEquals("Invalid header name.", e.getMessage()); | 156 assertEquals("Invalid header name.", e.getMessage()); |
| 155 } | 157 } |
| 156 try { | 158 try { |
| 157 builder.addHeader("name", null); | 159 builder.addHeader("name", null); |
| 158 fail("Header value is not null-checked"); | 160 fail("Header value is not null-checked"); |
| 159 } catch (NullPointerException e) { | 161 } catch (NullPointerException e) { |
| 160 assertEquals("Invalid header value.", e.getMessage()); | 162 assertEquals("Invalid header value.", e.getMessage()); |
| 161 } | 163 } |
| 162 try { | 164 try { |
| 163 builder.setHttpMethod(null); | 165 builder.setHttpMethod(null); |
| 164 fail("Method name is not null-checked"); | 166 fail("Method name is not null-checked"); |
| 165 } catch (NullPointerException e) { | 167 } catch (NullPointerException e) { |
| 166 assertEquals("Method is required.", e.getMessage()); | 168 assertEquals("Method is required.", e.getMessage()); |
| 167 } | 169 } |
| 168 } | 170 } |
| 169 | 171 |
| 172 private void testBuilderCheckJavaImpl() { |
| 173 try { |
| 174 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback(); |
| 175 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 176 Http2TestServer.getServerUrl(), callback, callback.getExecut
or()); |
| 177 fail("JavaCronetEngine doesn't support BidirectionalStream." |
| 178 + " Expected UnsupportedOperationException"); |
| 179 } catch (UnsupportedOperationException e) { |
| 180 // Expected. |
| 181 } |
| 182 } |
| 183 |
| 170 @SmallTest | 184 @SmallTest |
| 171 @Feature({"Cronet"}) | 185 @Feature({"Cronet"}) |
| 172 @OnlyRunNativeCronet | 186 @OnlyRunNativeCronet |
| 173 public void testFailPlainHttp() throws Exception { | 187 public void testFailPlainHttp() throws Exception { |
| 174 String url = "http://example.com"; | 188 String url = "http://example.com"; |
| 175 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 189 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 176 // Create stream. | 190 // Create stream. |
| 177 BidirectionalStream stream = new BidirectionalStream | 191 BidirectionalStream stream = |
| 178 .Builder(url, callback, callback.ge
tExecutor(), | 192 mTestFramework.mCronetEngine |
| 179 mTestFramework.mCronetEngin
e) | 193 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
| 180 .build(); | 194 .build(); |
| 181 stream.start(); | 195 stream.start(); |
| 182 callback.blockForDone(); | 196 callback.blockForDone(); |
| 183 assertTrue(stream.isDone()); | 197 assertTrue(stream.isDone()); |
| 184 assertEquals("Exception in BidirectionalStream: net::ERR_DISALLOWED_URL_
SCHEME", | 198 assertEquals("Exception in BidirectionalStream: net::ERR_DISALLOWED_URL_
SCHEME", |
| 185 callback.mError.getMessage()); | 199 callback.mError.getMessage()); |
| 186 assertEquals(-301, callback.mError.getCronetInternalErrorCode()); | 200 assertEquals(-301, callback.mError.getCronetInternalErrorCode()); |
| 187 } | 201 } |
| 188 | 202 |
| 189 @SmallTest | 203 @SmallTest |
| 190 @Feature({"Cronet"}) | 204 @Feature({"Cronet"}) |
| 191 @OnlyRunNativeCronet | 205 @OnlyRunNativeCronet |
| 192 public void testSimpleGet() throws Exception { | 206 public void testSimpleGet() throws Exception { |
| 193 // Since this is the first request on the connection, the expected recei
ved bytes count | 207 // Since this is the first request on the connection, the expected recei
ved bytes count |
| 194 // must account for an HPACK dynamic table size update. | 208 // must account for an HPACK dynamic table size update. |
| 195 runSimpleGetWithExpectedReceivedBytesCount(31); | 209 runSimpleGetWithExpectedReceivedBytesCount(31); |
| 196 } | 210 } |
| 197 | 211 |
| 198 @SmallTest | 212 @SmallTest |
| 199 @Feature({"Cronet"}) | 213 @Feature({"Cronet"}) |
| 200 @OnlyRunNativeCronet | 214 @OnlyRunNativeCronet |
| 201 public void testSimpleHead() throws Exception { | 215 public void testSimpleHead() throws Exception { |
| 202 String url = Http2TestServer.getEchoMethodUrl(); | 216 String url = Http2TestServer.getEchoMethodUrl(); |
| 203 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 217 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 204 // Create stream. | 218 // Create stream. |
| 205 BidirectionalStream stream = new BidirectionalStream | 219 BidirectionalStream stream = |
| 206 .Builder(url, callback, callback.ge
tExecutor(), | 220 mTestFramework.mCronetEngine |
| 207 mTestFramework.mCronetEngin
e) | 221 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
| 208 .setHttpMethod("HEAD") | 222 .setHttpMethod("HEAD") |
| 209 .build(); | 223 .build(); |
| 210 stream.start(); | 224 stream.start(); |
| 211 callback.blockForDone(); | 225 callback.blockForDone(); |
| 212 assertTrue(stream.isDone()); | 226 assertTrue(stream.isDone()); |
| 213 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 227 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 214 assertEquals("HEAD", callback.mResponseAsString); | 228 assertEquals("HEAD", callback.mResponseAsString); |
| 215 UrlResponseInfo urlResponseInfo = | 229 UrlResponseInfo urlResponseInfo = |
| 216 createUrlResponseInfo(new String[] {url}, "", 200, 32, ":status"
, "200"); | 230 createUrlResponseInfo(new String[] {url}, "", 200, 32, ":status"
, "200"); |
| 217 assertResponseEquals(urlResponseInfo, callback.mResponseInfo); | 231 assertResponseEquals(urlResponseInfo, callback.mResponseInfo); |
| 218 checkResponseInfo(callback.mResponseInfo, Http2TestServer.getEchoMethodU
rl(), 200, ""); | 232 checkResponseInfo(callback.mResponseInfo, Http2TestServer.getEchoMethodU
rl(), 200, ""); |
| 219 } | 233 } |
| 220 | 234 |
| 221 @SmallTest | 235 @SmallTest |
| 222 @Feature({"Cronet"}) | 236 @Feature({"Cronet"}) |
| 223 @OnlyRunNativeCronet | 237 @OnlyRunNativeCronet |
| 224 public void testSimplePost() throws Exception { | 238 public void testSimplePost() throws Exception { |
| 225 String url = Http2TestServer.getEchoStreamUrl(); | 239 String url = Http2TestServer.getEchoStreamUrl(); |
| 226 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 240 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 227 callback.addWriteData("Test String".getBytes()); | 241 callback.addWriteData("Test String".getBytes()); |
| 228 callback.addWriteData("1234567890".getBytes()); | 242 callback.addWriteData("1234567890".getBytes()); |
| 229 callback.addWriteData("woot!".getBytes()); | 243 callback.addWriteData("woot!".getBytes()); |
| 230 TestRequestFinishedListener requestFinishedListener = new TestRequestFin
ishedListener(); | 244 TestRequestFinishedListener requestFinishedListener = new TestRequestFin
ishedListener(); |
| 231 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL
istener); | 245 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL
istener); |
| 232 // Create stream. | 246 // Create stream. |
| 233 BidirectionalStream stream = new BidirectionalStream | 247 BidirectionalStream stream = |
| 234 .Builder(url, callback, callback.ge
tExecutor(), | 248 mTestFramework.mCronetEngine |
| 235 mTestFramework.mCronetEngin
e) | 249 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
| 236 .addHeader("foo", "bar") | 250 .addHeader("foo", "bar") |
| 237 .addHeader("empty", "") | 251 .addHeader("empty", "") |
| 238 .addHeader("Content-Type", "zebra") | 252 .addHeader("Content-Type", "zebra") |
| 239 .addRequestAnnotation(this) | 253 .addRequestAnnotation(this) |
| 240 .addRequestAnnotation("request anno
tation") | 254 .addRequestAnnotation("request annotation") |
| 241 .build(); | 255 .build(); |
| 242 Date startTime = new Date(); | 256 Date startTime = new Date(); |
| 243 stream.start(); | 257 stream.start(); |
| 244 callback.blockForDone(); | 258 callback.blockForDone(); |
| 245 assertTrue(stream.isDone()); | 259 assertTrue(stream.isDone()); |
| 246 requestFinishedListener.blockUntilDone(); | 260 requestFinishedListener.blockUntilDone(); |
| 247 Date endTime = new Date(); | 261 Date endTime = new Date(); |
| 248 RequestFinishedInfo finishedInfo = requestFinishedListener.getRequestInf
o(); | 262 RequestFinishedInfo finishedInfo = requestFinishedListener.getRequestInf
o(); |
| 249 assertNotNull("RequestFinishedInfo.Listener must be called", finishedInf
o); | 263 assertNotNull("RequestFinishedInfo.Listener must be called", finishedInf
o); |
| 250 RequestFinishedInfo.Metrics metrics = finishedInfo.getMetrics(); | 264 RequestFinishedInfo.Metrics metrics = finishedInfo.getMetrics(); |
| 251 assertNotNull(metrics); | 265 assertNotNull(metrics); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 267 | 281 |
| 268 @SmallTest | 282 @SmallTest |
| 269 @Feature({"Cronet"}) | 283 @Feature({"Cronet"}) |
| 270 @OnlyRunNativeCronet | 284 @OnlyRunNativeCronet |
| 271 public void testSimplePostWithFlush() throws Exception { | 285 public void testSimplePostWithFlush() throws Exception { |
| 272 String url = Http2TestServer.getEchoStreamUrl(); | 286 String url = Http2TestServer.getEchoStreamUrl(); |
| 273 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 287 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 274 callback.addWriteData("Test String".getBytes(), false); | 288 callback.addWriteData("Test String".getBytes(), false); |
| 275 callback.addWriteData("1234567890".getBytes(), false); | 289 callback.addWriteData("1234567890".getBytes(), false); |
| 276 callback.addWriteData("woot!".getBytes(), true); | 290 callback.addWriteData("woot!".getBytes(), true); |
| 277 BidirectionalStream stream = new BidirectionalStream | 291 BidirectionalStream stream = |
| 278 .Builder(url, callback, callback.ge
tExecutor(), | 292 mTestFramework.mCronetEngine |
| 279 mTestFramework.mCronetEngin
e) | 293 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
| 280 .addHeader("foo", "bar") | 294 .addHeader("foo", "bar") |
| 281 .addHeader("empty", "") | 295 .addHeader("empty", "") |
| 282 .addHeader("Content-Type", "zebra") | 296 .addHeader("Content-Type", "zebra") |
| 283 .build(); | 297 .build(); |
| 284 // Flush before stream is started should not crash. | 298 // Flush before stream is started should not crash. |
| 285 stream.flush(); | 299 stream.flush(); |
| 286 | 300 |
| 287 stream.start(); | 301 stream.start(); |
| 288 callback.blockForDone(); | 302 callback.blockForDone(); |
| 289 assertTrue(stream.isDone()); | 303 assertTrue(stream.isDone()); |
| 290 | 304 |
| 291 // Flush after stream is completed is no-op. It shouldn't call into the
destroyed adapter. | 305 // Flush after stream is completed is no-op. It shouldn't call into the
destroyed adapter. |
| 292 stream.flush(); | 306 stream.flush(); |
| 293 | 307 |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 345 ((CronetBidirectionalStream) stream).getFlushDataFor
Testing().size()); | 359 ((CronetBidirectionalStream) stream).getFlushDataFor
Testing().size()); |
| 346 } | 360 } |
| 347 } | 361 } |
| 348 }; | 362 }; |
| 349 callback.addWriteData("1".getBytes(), false); | 363 callback.addWriteData("1".getBytes(), false); |
| 350 callback.addWriteData("2".getBytes(), false); | 364 callback.addWriteData("2".getBytes(), false); |
| 351 callback.addWriteData("3".getBytes(), true); | 365 callback.addWriteData("3".getBytes(), true); |
| 352 callback.addWriteData("4".getBytes(), false); | 366 callback.addWriteData("4".getBytes(), false); |
| 353 callback.addWriteData("5".getBytes(), true); | 367 callback.addWriteData("5".getBytes(), true); |
| 354 callback.addWriteData("6".getBytes(), false); | 368 callback.addWriteData("6".getBytes(), false); |
| 355 CronetBidirectionalStream stream = (CronetBidirectionalStream) new Bidir
ectionalStream | 369 CronetBidirectionalStream stream = |
| 356 .Builder(url, callback, callb
ack.getExecutor(), | 370 (CronetBidirectionalStream) mTestFramework.mCronetEngine |
| 357 mTestFramework.mCrone
tEngine) | 371 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
| 358 .addHeader("foo", "bar") | 372 .addHeader("foo", "bar") |
| 359 .addHeader("empty", "") | 373 .addHeader("empty", "") |
| 360 .addHeader("Content-Type", "z
ebra") | 374 .addHeader("Content-Type", "zebra") |
| 361 .build(); | 375 .build(); |
| 362 callback.setAutoAdvance(false); | 376 callback.setAutoAdvance(false); |
| 363 stream.start(); | 377 stream.start(); |
| 364 callback.waitForNextWriteStep(); // onStreamReady | 378 callback.waitForNextWriteStep(); // onStreamReady |
| 365 | 379 |
| 366 assertEquals(0, stream.getPendingDataForTesting().size()); | 380 assertEquals(0, stream.getPendingDataForTesting().size()); |
| 367 assertEquals(0, stream.getFlushDataForTesting().size()); | 381 assertEquals(0, stream.getFlushDataForTesting().size()); |
| 368 | 382 |
| 369 // Write 1, 2, 3 and flush(). | 383 // Write 1, 2, 3 and flush(). |
| 370 callback.startNextWrite(stream); | 384 callback.startNextWrite(stream); |
| 371 // Write 4, 5 and flush(). 4, 5 will be in flush queue. | 385 // Write 4, 5 and flush(). 4, 5 will be in flush queue. |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 404 stream.flush(); | 418 stream.flush(); |
| 405 super.onStreamReady(stream); | 419 super.onStreamReady(stream); |
| 406 try { | 420 try { |
| 407 // Attempt to write data for GET request. | 421 // Attempt to write data for GET request. |
| 408 stream.write(ByteBuffer.wrap("dummy".getBytes()), true); | 422 stream.write(ByteBuffer.wrap("dummy".getBytes()), true); |
| 409 } catch (IllegalArgumentException e) { | 423 } catch (IllegalArgumentException e) { |
| 410 // Expected. | 424 // Expected. |
| 411 } | 425 } |
| 412 } | 426 } |
| 413 }; | 427 }; |
| 414 BidirectionalStream stream = new BidirectionalStream | 428 BidirectionalStream stream = |
| 415 .Builder(url, callback, callbac
k.getExecutor(), | 429 mTestFramework.mCronetEngine |
| 416 mTestFramework.mCronetE
ngine) | 430 .newBidirectionalStreamBuilder(url, callback, callba
ck.getExecutor()) |
| 417 .setHttpMethod("GET") | 431 .setHttpMethod("GET") |
| 418 .delayRequestHeadersUntilFirstF
lush(i == 0) | 432 .delayRequestHeadersUntilFirstFlush(i == 0) |
| 419 .addHeader("foo", "bar") | 433 .addHeader("foo", "bar") |
| 420 .addHeader("empty", "") | 434 .addHeader("empty", "") |
| 421 .build(); | 435 .build(); |
| 422 // Flush before stream is started should not crash. | 436 // Flush before stream is started should not crash. |
| 423 stream.flush(); | 437 stream.flush(); |
| 424 | 438 |
| 425 stream.start(); | 439 stream.start(); |
| 426 callback.blockForDone(); | 440 callback.blockForDone(); |
| 427 assertTrue(stream.isDone()); | 441 assertTrue(stream.isDone()); |
| 428 | 442 |
| 429 // Flush after stream is completed is no-op. It shouldn't call into
the destroyed | 443 // Flush after stream is completed is no-op. It shouldn't call into
the destroyed |
| 430 // adapter. | 444 // adapter. |
| 431 stream.flush(); | 445 stream.flush(); |
| 432 | 446 |
| 433 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 447 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 434 assertEquals("", callback.mResponseAsString); | 448 assertEquals("", callback.mResponseAsString); |
| 435 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo
-foo").get(0)); | 449 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo
-foo").get(0)); |
| 436 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-em
pty").get(0)); | 450 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-em
pty").get(0)); |
| 437 } | 451 } |
| 438 } | 452 } |
| 439 | 453 |
| 440 @SmallTest | 454 @SmallTest |
| 441 @Feature({"Cronet"}) | 455 @Feature({"Cronet"}) |
| 442 @OnlyRunNativeCronet | 456 @OnlyRunNativeCronet |
| 443 public void testSimplePostWithFlushAfterOneWrite() throws Exception { | 457 public void testSimplePostWithFlushAfterOneWrite() throws Exception { |
| 444 // TODO(xunjieli): Use ParameterizedTest instead of the loop. | 458 // TODO(xunjieli): Use ParameterizedTest instead of the loop. |
| 445 for (int i = 0; i < 2; i++) { | 459 for (int i = 0; i < 2; i++) { |
| 446 String url = Http2TestServer.getEchoStreamUrl(); | 460 String url = Http2TestServer.getEchoStreamUrl(); |
| 447 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback(); | 461 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback(); |
| 448 callback.addWriteData("Test String".getBytes(), true); | 462 callback.addWriteData("Test String".getBytes(), true); |
| 449 BidirectionalStream stream = new BidirectionalStream | 463 BidirectionalStream stream = |
| 450 .Builder(url, callback, callbac
k.getExecutor(), | 464 mTestFramework.mCronetEngine |
| 451 mTestFramework.mCronetE
ngine) | 465 .newBidirectionalStreamBuilder(url, callback, callba
ck.getExecutor()) |
| 452 .delayRequestHeadersUntilFirstF
lush(i == 0) | 466 .delayRequestHeadersUntilFirstFlush(i == 0) |
| 453 .addHeader("foo", "bar") | 467 .addHeader("foo", "bar") |
| 454 .addHeader("empty", "") | 468 .addHeader("empty", "") |
| 455 .addHeader("Content-Type", "zeb
ra") | 469 .addHeader("Content-Type", "zebra") |
| 456 .build(); | 470 .build(); |
| 457 stream.start(); | 471 stream.start(); |
| 458 callback.blockForDone(); | 472 callback.blockForDone(); |
| 459 assertTrue(stream.isDone()); | 473 assertTrue(stream.isDone()); |
| 460 | 474 |
| 461 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 475 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 462 assertEquals("Test String", callback.mResponseAsString); | 476 assertEquals("Test String", callback.mResponseAsString); |
| 463 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo
-foo").get(0)); | 477 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo
-foo").get(0)); |
| 464 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-em
pty").get(0)); | 478 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-em
pty").get(0)); |
| 465 assertEquals("zebra", | 479 assertEquals("zebra", |
| 466 callback.mResponseInfo.getAllHeaders().get("echo-content-typ
e").get(0)); | 480 callback.mResponseInfo.getAllHeaders().get("echo-content-typ
e").get(0)); |
| 467 } | 481 } |
| 468 } | 482 } |
| 469 | 483 |
| 470 @SmallTest | 484 @SmallTest |
| 471 @Feature({"Cronet"}) | 485 @Feature({"Cronet"}) |
| 472 @OnlyRunNativeCronet | 486 @OnlyRunNativeCronet |
| 473 public void testSimplePostWithFlushTwice() throws Exception { | 487 public void testSimplePostWithFlushTwice() throws Exception { |
| 474 // TODO(xunjieli): Use ParameterizedTest instead of the loop. | 488 // TODO(xunjieli): Use ParameterizedTest instead of the loop. |
| 475 for (int i = 0; i < 2; i++) { | 489 for (int i = 0; i < 2; i++) { |
| 476 String url = Http2TestServer.getEchoStreamUrl(); | 490 String url = Http2TestServer.getEchoStreamUrl(); |
| 477 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback(); | 491 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback(); |
| 478 callback.addWriteData("Test String".getBytes(), false); | 492 callback.addWriteData("Test String".getBytes(), false); |
| 479 callback.addWriteData("1234567890".getBytes(), false); | 493 callback.addWriteData("1234567890".getBytes(), false); |
| 480 callback.addWriteData("woot!".getBytes(), true); | 494 callback.addWriteData("woot!".getBytes(), true); |
| 481 callback.addWriteData("Test String".getBytes(), false); | 495 callback.addWriteData("Test String".getBytes(), false); |
| 482 callback.addWriteData("1234567890".getBytes(), false); | 496 callback.addWriteData("1234567890".getBytes(), false); |
| 483 callback.addWriteData("woot!".getBytes(), true); | 497 callback.addWriteData("woot!".getBytes(), true); |
| 484 BidirectionalStream stream = new BidirectionalStream | 498 BidirectionalStream stream = |
| 485 .Builder(url, callback, callbac
k.getExecutor(), | 499 mTestFramework.mCronetEngine |
| 486 mTestFramework.mCronetE
ngine) | 500 .newBidirectionalStreamBuilder(url, callback, callba
ck.getExecutor()) |
| 487 .delayRequestHeadersUntilFirstF
lush(i == 0) | 501 .delayRequestHeadersUntilFirstFlush(i == 0) |
| 488 .addHeader("foo", "bar") | 502 .addHeader("foo", "bar") |
| 489 .addHeader("empty", "") | 503 .addHeader("empty", "") |
| 490 .addHeader("Content-Type", "zeb
ra") | 504 .addHeader("Content-Type", "zebra") |
| 491 .build(); | 505 .build(); |
| 492 stream.start(); | 506 stream.start(); |
| 493 callback.blockForDone(); | 507 callback.blockForDone(); |
| 494 assertTrue(stream.isDone()); | 508 assertTrue(stream.isDone()); |
| 495 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 509 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 496 assertEquals("Test String1234567890woot!Test String1234567890woot!", | 510 assertEquals("Test String1234567890woot!Test String1234567890woot!", |
| 497 callback.mResponseAsString); | 511 callback.mResponseAsString); |
| 498 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo
-foo").get(0)); | 512 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo
-foo").get(0)); |
| 499 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-em
pty").get(0)); | 513 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-em
pty").get(0)); |
| 500 assertEquals("zebra", | 514 assertEquals("zebra", |
| 501 callback.mResponseInfo.getAllHeaders().get("echo-content-typ
e").get(0)); | 515 callback.mResponseInfo.getAllHeaders().get("echo-content-typ
e").get(0)); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 516 } | 530 } |
| 517 @Override | 531 @Override |
| 518 public void onResponseHeadersReceived( | 532 public void onResponseHeadersReceived( |
| 519 BidirectionalStream stream, UrlResponseInfo info) { | 533 BidirectionalStream stream, UrlResponseInfo info) { |
| 520 // Do nothing. Skip readng. | 534 // Do nothing. Skip readng. |
| 521 } | 535 } |
| 522 }; | 536 }; |
| 523 callback.addWriteData("Test String".getBytes()); | 537 callback.addWriteData("Test String".getBytes()); |
| 524 callback.addWriteData("1234567890".getBytes()); | 538 callback.addWriteData("1234567890".getBytes()); |
| 525 callback.addWriteData("woot!".getBytes()); | 539 callback.addWriteData("woot!".getBytes()); |
| 526 BidirectionalStream stream = new BidirectionalStream | 540 BidirectionalStream stream = |
| 527 .Builder(url, callback, callback.ge
tExecutor(), | 541 mTestFramework.mCronetEngine |
| 528 mTestFramework.mCronetEngin
e) | 542 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
| 529 .addHeader("foo", "bar") | 543 .addHeader("foo", "bar") |
| 530 .addHeader("empty", "") | 544 .addHeader("empty", "") |
| 531 .addHeader("Content-Type", "zebra") | 545 .addHeader("Content-Type", "zebra") |
| 532 .build(); | 546 .build(); |
| 533 stream.start(); | 547 stream.start(); |
| 534 callback.blockForDone(); | 548 callback.blockForDone(); |
| 535 assertTrue(stream.isDone()); | 549 assertTrue(stream.isDone()); |
| 536 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 550 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 537 assertEquals("Test String1234567890woot!", callback.mResponseAsString); | 551 assertEquals("Test String1234567890woot!", callback.mResponseAsString); |
| 538 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo
").get(0)); | 552 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo
").get(0)); |
| 539 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty"
).get(0)); | 553 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty"
).get(0)); |
| 540 assertEquals( | 554 assertEquals( |
| 541 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten
t-type").get(0)); | 555 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten
t-type").get(0)); |
| 542 } | 556 } |
| (...skipping 13 matching lines...) Expand all Loading... |
| 556 startNextWrite(stream); | 570 startNextWrite(stream); |
| 557 assertEquals(0, numPendingWrites()); | 571 assertEquals(0, numPendingWrites()); |
| 558 } | 572 } |
| 559 }; | 573 }; |
| 560 callback.addWriteData("Test String".getBytes(), false); | 574 callback.addWriteData("Test String".getBytes(), false); |
| 561 callback.addWriteData("1234567890".getBytes(), false); | 575 callback.addWriteData("1234567890".getBytes(), false); |
| 562 callback.addWriteData("woot!".getBytes(), true); | 576 callback.addWriteData("woot!".getBytes(), true); |
| 563 callback.addWriteData("Test String".getBytes(), false); | 577 callback.addWriteData("Test String".getBytes(), false); |
| 564 callback.addWriteData("1234567890".getBytes(), false); | 578 callback.addWriteData("1234567890".getBytes(), false); |
| 565 callback.addWriteData("woot!".getBytes(), true); | 579 callback.addWriteData("woot!".getBytes(), true); |
| 566 BidirectionalStream stream = new BidirectionalStream | 580 BidirectionalStream stream = |
| 567 .Builder(url, callback, callback.ge
tExecutor(), | 581 mTestFramework.mCronetEngine |
| 568 mTestFramework.mCronetEngin
e) | 582 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
| 569 .addHeader("foo", "bar") | 583 .addHeader("foo", "bar") |
| 570 .addHeader("empty", "") | 584 .addHeader("empty", "") |
| 571 .addHeader("Content-Type", "zebra") | 585 .addHeader("Content-Type", "zebra") |
| 572 .build(); | 586 .build(); |
| 573 stream.start(); | 587 stream.start(); |
| 574 callback.blockForDone(); | 588 callback.blockForDone(); |
| 575 assertTrue(stream.isDone()); | 589 assertTrue(stream.isDone()); |
| 576 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 590 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 577 assertEquals( | 591 assertEquals( |
| 578 "Test String1234567890woot!Test String1234567890woot!", callback
.mResponseAsString); | 592 "Test String1234567890woot!Test String1234567890woot!", callback
.mResponseAsString); |
| 579 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo
").get(0)); | 593 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo
").get(0)); |
| 580 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty"
).get(0)); | 594 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty"
).get(0)); |
| 581 assertEquals( | 595 assertEquals( |
| 582 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten
t-type").get(0)); | 596 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten
t-type").get(0)); |
| 583 } | 597 } |
| 584 | 598 |
| 585 @SmallTest | 599 @SmallTest |
| 586 @Feature({"Cronet"}) | 600 @Feature({"Cronet"}) |
| 587 @OnlyRunNativeCronet | 601 @OnlyRunNativeCronet |
| 588 public void testSimplePut() throws Exception { | 602 public void testSimplePut() throws Exception { |
| 589 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 603 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 590 callback.addWriteData("Put This Data!".getBytes()); | 604 callback.addWriteData("Put This Data!".getBytes()); |
| 591 String methodName = "PUT"; | 605 String methodName = "PUT"; |
| 592 BidirectionalStream.Builder builder = | 606 BidirectionalStream.Builder builder = |
| 593 new BidirectionalStream.Builder(Http2TestServer.getServerUrl(),
callback, | 607 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 594 callback.getExecutor(), mTestFramework.mCronetEngine); | 608 Http2TestServer.getServerUrl(), callback, callback.getEx
ecutor()); |
| 595 builder.setHttpMethod(methodName); | 609 builder.setHttpMethod(methodName); |
| 596 builder.build().start(); | 610 builder.build().start(); |
| 597 callback.blockForDone(); | 611 callback.blockForDone(); |
| 598 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 612 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 599 assertEquals("Put This Data!", callback.mResponseAsString); | 613 assertEquals("Put This Data!", callback.mResponseAsString); |
| 600 assertEquals(methodName, callback.mResponseInfo.getAllHeaders().get("ech
o-method").get(0)); | 614 assertEquals(methodName, callback.mResponseInfo.getAllHeaders().get("ech
o-method").get(0)); |
| 601 } | 615 } |
| 602 | 616 |
| 603 @SmallTest | 617 @SmallTest |
| 604 @Feature({"Cronet"}) | 618 @Feature({"Cronet"}) |
| 605 @OnlyRunNativeCronet | 619 @OnlyRunNativeCronet |
| 606 public void testBadMethod() throws Exception { | 620 public void testBadMethod() throws Exception { |
| 607 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 621 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 608 BidirectionalStream.Builder builder = | 622 BidirectionalStream.Builder builder = |
| 609 new BidirectionalStream.Builder(Http2TestServer.getServerUrl(),
callback, | 623 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 610 callback.getExecutor(), mTestFramework.mCronetEngine); | 624 Http2TestServer.getServerUrl(), callback, callback.getEx
ecutor()); |
| 611 try { | 625 try { |
| 612 builder.setHttpMethod("bad:method!"); | 626 builder.setHttpMethod("bad:method!"); |
| 613 builder.build().start(); | 627 builder.build().start(); |
| 614 fail("IllegalArgumentException not thrown."); | 628 fail("IllegalArgumentException not thrown."); |
| 615 } catch (IllegalArgumentException e) { | 629 } catch (IllegalArgumentException e) { |
| 616 assertEquals("Invalid http method bad:method!", e.getMessage()); | 630 assertEquals("Invalid http method bad:method!", e.getMessage()); |
| 617 } | 631 } |
| 618 } | 632 } |
| 619 | 633 |
| 620 @SmallTest | 634 @SmallTest |
| 621 @Feature({"Cronet"}) | 635 @Feature({"Cronet"}) |
| 622 @OnlyRunNativeCronet | 636 @OnlyRunNativeCronet |
| 623 public void testBadHeaderName() throws Exception { | 637 public void testBadHeaderName() throws Exception { |
| 624 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 638 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 625 BidirectionalStream.Builder builder = | 639 BidirectionalStream.Builder builder = |
| 626 new BidirectionalStream.Builder(Http2TestServer.getServerUrl(),
callback, | 640 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 627 callback.getExecutor(), mTestFramework.mCronetEngine); | 641 Http2TestServer.getServerUrl(), callback, callback.getEx
ecutor()); |
| 628 try { | 642 try { |
| 629 builder.addHeader("goodheader1", "headervalue"); | 643 builder.addHeader("goodheader1", "headervalue"); |
| 630 builder.addHeader("header:name", "headervalue"); | 644 builder.addHeader("header:name", "headervalue"); |
| 631 builder.addHeader("goodheader2", "headervalue"); | 645 builder.addHeader("goodheader2", "headervalue"); |
| 632 builder.build().start(); | 646 builder.build().start(); |
| 633 fail("IllegalArgumentException not thrown."); | 647 fail("IllegalArgumentException not thrown."); |
| 634 } catch (IllegalArgumentException e) { | 648 } catch (IllegalArgumentException e) { |
| 635 assertEquals("Invalid header header:name=headervalue", e.getMessage(
)); | 649 assertEquals("Invalid header header:name=headervalue", e.getMessage(
)); |
| 636 } | 650 } |
| 637 } | 651 } |
| 638 | 652 |
| 639 @SmallTest | 653 @SmallTest |
| 640 @Feature({"Cronet"}) | 654 @Feature({"Cronet"}) |
| 641 @OnlyRunNativeCronet | 655 @OnlyRunNativeCronet |
| 642 public void testBadHeaderValue() throws Exception { | 656 public void testBadHeaderValue() throws Exception { |
| 643 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 657 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 644 BidirectionalStream.Builder builder = | 658 BidirectionalStream.Builder builder = |
| 645 new BidirectionalStream.Builder(Http2TestServer.getServerUrl(),
callback, | 659 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 646 callback.getExecutor(), mTestFramework.mCronetEngine); | 660 Http2TestServer.getServerUrl(), callback, callback.getEx
ecutor()); |
| 647 try { | 661 try { |
| 648 builder.addHeader("headername", "bad header\r\nvalue"); | 662 builder.addHeader("headername", "bad header\r\nvalue"); |
| 649 builder.build().start(); | 663 builder.build().start(); |
| 650 fail("IllegalArgumentException not thrown."); | 664 fail("IllegalArgumentException not thrown."); |
| 651 } catch (IllegalArgumentException e) { | 665 } catch (IllegalArgumentException e) { |
| 652 assertEquals("Invalid header headername=bad header\r\nvalue", e.getM
essage()); | 666 assertEquals("Invalid header headername=bad header\r\nvalue", e.getM
essage()); |
| 653 } | 667 } |
| 654 } | 668 } |
| 655 | 669 |
| 656 @SmallTest | 670 @SmallTest |
| 657 @Feature({"Cronet"}) | 671 @Feature({"Cronet"}) |
| 658 @OnlyRunNativeCronet | 672 @OnlyRunNativeCronet |
| 659 public void testAddHeader() throws Exception { | 673 public void testAddHeader() throws Exception { |
| 660 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 674 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 661 String headerName = "header-name"; | 675 String headerName = "header-name"; |
| 662 String headerValue = "header-value"; | 676 String headerValue = "header-value"; |
| 663 BidirectionalStream.Builder builder = | 677 BidirectionalStream.Builder builder = |
| 664 new BidirectionalStream.Builder(Http2TestServer.getEchoHeaderUrl
(headerName), | 678 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 665 callback, callback.getExecutor(), mTestFramework.mCronet
Engine); | 679 Http2TestServer.getEchoHeaderUrl(headerName), callback, |
| 680 callback.getExecutor()); |
| 666 builder.addHeader(headerName, headerValue); | 681 builder.addHeader(headerName, headerValue); |
| 667 builder.setHttpMethod("GET"); | 682 builder.setHttpMethod("GET"); |
| 668 builder.build().start(); | 683 builder.build().start(); |
| 669 callback.blockForDone(); | 684 callback.blockForDone(); |
| 670 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 685 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 671 assertEquals(headerValue, callback.mResponseAsString); | 686 assertEquals(headerValue, callback.mResponseAsString); |
| 672 } | 687 } |
| 673 | 688 |
| 674 @SmallTest | 689 @SmallTest |
| 675 @Feature({"Cronet"}) | 690 @Feature({"Cronet"}) |
| 676 @OnlyRunNativeCronet | 691 @OnlyRunNativeCronet |
| 677 public void testMultiRequestHeaders() throws Exception { | 692 public void testMultiRequestHeaders() throws Exception { |
| 678 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 693 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 679 String headerName = "header-name"; | 694 String headerName = "header-name"; |
| 680 String headerValue1 = "header-value1"; | 695 String headerValue1 = "header-value1"; |
| 681 String headerValue2 = "header-value2"; | 696 String headerValue2 = "header-value2"; |
| 682 BidirectionalStream.Builder builder = | 697 BidirectionalStream.Builder builder = |
| 683 new BidirectionalStream.Builder(Http2TestServer.getEchoAllHeader
sUrl(), callback, | 698 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 684 callback.getExecutor(), mTestFramework.mCronetEngine); | 699 Http2TestServer.getEchoAllHeadersUrl(), callback, callba
ck.getExecutor()); |
| 685 builder.addHeader(headerName, headerValue1); | 700 builder.addHeader(headerName, headerValue1); |
| 686 builder.addHeader(headerName, headerValue2); | 701 builder.addHeader(headerName, headerValue2); |
| 687 builder.setHttpMethod("GET"); | 702 builder.setHttpMethod("GET"); |
| 688 builder.build().start(); | 703 builder.build().start(); |
| 689 callback.blockForDone(); | 704 callback.blockForDone(); |
| 690 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 705 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 691 String headers = callback.mResponseAsString; | 706 String headers = callback.mResponseAsString; |
| 692 Pattern pattern = Pattern.compile(headerName + ":\\s(.*)\\r\\n"); | 707 Pattern pattern = Pattern.compile(headerName + ":\\s(.*)\\r\\n"); |
| 693 Matcher matcher = pattern.matcher(headers); | 708 Matcher matcher = pattern.matcher(headers); |
| 694 List<String> actualValues = new ArrayList<String>(); | 709 List<String> actualValues = new ArrayList<String>(); |
| 695 while (matcher.find()) { | 710 while (matcher.find()) { |
| 696 actualValues.add(matcher.group(1)); | 711 actualValues.add(matcher.group(1)); |
| 697 } | 712 } |
| 698 assertEquals(1, actualValues.size()); | 713 assertEquals(1, actualValues.size()); |
| 699 assertEquals("header-value2", actualValues.get(0)); | 714 assertEquals("header-value2", actualValues.get(0)); |
| 700 } | 715 } |
| 701 | 716 |
| 702 @SmallTest | 717 @SmallTest |
| 703 @Feature({"Cronet"}) | 718 @Feature({"Cronet"}) |
| 704 @OnlyRunNativeCronet | 719 @OnlyRunNativeCronet |
| 705 public void testEchoTrailers() throws Exception { | 720 public void testEchoTrailers() throws Exception { |
| 706 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 721 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 707 String headerName = "header-name"; | 722 String headerName = "header-name"; |
| 708 String headerValue = "header-value"; | 723 String headerValue = "header-value"; |
| 709 BidirectionalStream.Builder builder = | 724 BidirectionalStream.Builder builder = |
| 710 new BidirectionalStream.Builder(Http2TestServer.getEchoTrailersU
rl(), callback, | 725 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 711 callback.getExecutor(), mTestFramework.mCronetEngine); | 726 Http2TestServer.getEchoTrailersUrl(), callback, callback
.getExecutor()); |
| 712 builder.addHeader(headerName, headerValue); | 727 builder.addHeader(headerName, headerValue); |
| 713 builder.setHttpMethod("GET"); | 728 builder.setHttpMethod("GET"); |
| 714 builder.build().start(); | 729 builder.build().start(); |
| 715 callback.blockForDone(); | 730 callback.blockForDone(); |
| 716 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 731 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 717 assertNotNull(callback.mTrailers); | 732 assertNotNull(callback.mTrailers); |
| 718 // Verify that header value is properly echoed in trailers. | 733 // Verify that header value is properly echoed in trailers. |
| 719 assertEquals(headerValue, callback.mTrailers.getAsMap().get("echo-" + he
aderName).get(0)); | 734 assertEquals(headerValue, callback.mTrailers.getAsMap().get("echo-" + he
aderName).get(0)); |
| 720 } | 735 } |
| 721 | 736 |
| 722 @SmallTest | 737 @SmallTest |
| 723 @Feature({"Cronet"}) | 738 @Feature({"Cronet"}) |
| 724 @OnlyRunNativeCronet | 739 @OnlyRunNativeCronet |
| 725 public void testCustomUserAgent() throws Exception { | 740 public void testCustomUserAgent() throws Exception { |
| 726 String userAgentName = "User-Agent"; | 741 String userAgentName = "User-Agent"; |
| 727 String userAgentValue = "User-Agent-Value"; | 742 String userAgentValue = "User-Agent-Value"; |
| 728 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 743 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 729 BidirectionalStream.Builder builder = | 744 BidirectionalStream.Builder builder = |
| 730 new BidirectionalStream.Builder(Http2TestServer.getEchoHeaderUrl
(userAgentName), | 745 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 731 callback, callback.getExecutor(), mTestFramework.mCronet
Engine); | 746 Http2TestServer.getEchoHeaderUrl(userAgentName), callbac
k, |
| 747 callback.getExecutor()); |
| 732 builder.setHttpMethod("GET"); | 748 builder.setHttpMethod("GET"); |
| 733 builder.addHeader(userAgentName, userAgentValue); | 749 builder.addHeader(userAgentName, userAgentValue); |
| 734 builder.build().start(); | 750 builder.build().start(); |
| 735 callback.blockForDone(); | 751 callback.blockForDone(); |
| 736 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 752 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 737 assertEquals(userAgentValue, callback.mResponseAsString); | 753 assertEquals(userAgentValue, callback.mResponseAsString); |
| 738 } | 754 } |
| 739 | 755 |
| 740 @SmallTest | 756 @SmallTest |
| 741 @Feature({"Cronet"}) | 757 @Feature({"Cronet"}) |
| 742 @OnlyRunNativeCronet | 758 @OnlyRunNativeCronet |
| 743 public void testCustomCronetEngineUserAgent() throws Exception { | 759 public void testCustomCronetEngineUserAgent() throws Exception { |
| 744 String userAgentName = "User-Agent"; | 760 String userAgentName = "User-Agent"; |
| 745 String userAgentValue = "User-Agent-Value"; | 761 String userAgentValue = "User-Agent-Value"; |
| 746 CronetEngine engine = | 762 ExperimentalCronetEngine.Builder engineBuilder = |
| 747 new CronetEngine.Builder(getContext()) | 763 new ExperimentalCronetEngine.Builder(getContext()); |
| 748 .setMockCertVerifierForTesting(QuicTestServer.createMock
CertVerifier()) | 764 engineBuilder.setUserAgent(userAgentValue); |
| 749 .setUserAgent(userAgentValue) | 765 CronetTestUtil.setMockCertVerifierForTesting( |
| 750 .build(); | 766 engineBuilder, QuicTestServer.createMockCertVerifier()); |
| 767 ExperimentalCronetEngine engine = engineBuilder.build(); |
| 751 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 768 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 752 BidirectionalStream.Builder builder = | 769 BidirectionalStream.Builder builder = engine.newBidirectionalStreamBuild
er( |
| 753 new BidirectionalStream.Builder(Http2TestServer.getEchoHeaderUrl
(userAgentName), | 770 Http2TestServer.getEchoHeaderUrl(userAgentName), callback, callb
ack.getExecutor()); |
| 754 callback, callback.getExecutor(), engine); | |
| 755 builder.setHttpMethod("GET"); | 771 builder.setHttpMethod("GET"); |
| 756 builder.build().start(); | 772 builder.build().start(); |
| 757 callback.blockForDone(); | 773 callback.blockForDone(); |
| 758 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 774 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 759 assertEquals(userAgentValue, callback.mResponseAsString); | 775 assertEquals(userAgentValue, callback.mResponseAsString); |
| 760 } | 776 } |
| 761 | 777 |
| 762 @SmallTest | 778 @SmallTest |
| 763 @Feature({"Cronet"}) | 779 @Feature({"Cronet"}) |
| 764 @OnlyRunNativeCronet | 780 @OnlyRunNativeCronet |
| 765 public void testDefaultUserAgent() throws Exception { | 781 public void testDefaultUserAgent() throws Exception { |
| 766 String userAgentName = "User-Agent"; | 782 String userAgentName = "User-Agent"; |
| 767 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 783 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 768 BidirectionalStream.Builder builder = | 784 BidirectionalStream.Builder builder = |
| 769 new BidirectionalStream.Builder(Http2TestServer.getEchoHeaderUrl
(userAgentName), | 785 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 770 callback, callback.getExecutor(), mTestFramework.mCronet
Engine); | 786 Http2TestServer.getEchoHeaderUrl(userAgentName), callbac
k, |
| 787 callback.getExecutor()); |
| 771 builder.setHttpMethod("GET"); | 788 builder.setHttpMethod("GET"); |
| 772 builder.build().start(); | 789 builder.build().start(); |
| 773 callback.blockForDone(); | 790 callback.blockForDone(); |
| 774 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 791 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 775 assertEquals(new CronetEngine.Builder(getContext()).getDefaultUserAgent(
), | 792 assertEquals(new CronetEngine.Builder(getContext()).getDefaultUserAgent(
), |
| 776 callback.mResponseAsString); | 793 callback.mResponseAsString); |
| 777 } | 794 } |
| 778 | 795 |
| 779 @SmallTest | 796 @SmallTest |
| 780 @Feature({"Cronet"}) | 797 @Feature({"Cronet"}) |
| 781 @OnlyRunNativeCronet | 798 @OnlyRunNativeCronet |
| 782 public void testEchoStream() throws Exception { | 799 public void testEchoStream() throws Exception { |
| 783 String url = Http2TestServer.getEchoStreamUrl(); | 800 String url = Http2TestServer.getEchoStreamUrl(); |
| 784 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 801 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 785 String[] testData = {"Test String", createLongString("1234567890", 50000
), "woot!"}; | 802 String[] testData = {"Test String", createLongString("1234567890", 50000
), "woot!"}; |
| 786 StringBuilder stringData = new StringBuilder(); | 803 StringBuilder stringData = new StringBuilder(); |
| 787 for (String writeData : testData) { | 804 for (String writeData : testData) { |
| 788 callback.addWriteData(writeData.getBytes()); | 805 callback.addWriteData(writeData.getBytes()); |
| 789 stringData.append(writeData); | 806 stringData.append(writeData); |
| 790 } | 807 } |
| 791 // Create stream. | 808 // Create stream. |
| 792 BidirectionalStream stream = new BidirectionalStream | 809 BidirectionalStream stream = |
| 793 .Builder(url, callback, callback.ge
tExecutor(), | 810 mTestFramework.mCronetEngine |
| 794 mTestFramework.mCronetEngin
e) | 811 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
| 795 .addHeader("foo", "Value with Space
s") | 812 .addHeader("foo", "Value with Spaces") |
| 796 .addHeader("Content-Type", "zebra") | 813 .addHeader("Content-Type", "zebra") |
| 797 .build(); | 814 .build(); |
| 798 stream.start(); | 815 stream.start(); |
| 799 callback.blockForDone(); | 816 callback.blockForDone(); |
| 800 assertTrue(stream.isDone()); | 817 assertTrue(stream.isDone()); |
| 801 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 818 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 802 assertEquals(stringData.toString(), callback.mResponseAsString); | 819 assertEquals(stringData.toString(), callback.mResponseAsString); |
| 803 assertEquals( | 820 assertEquals( |
| 804 "Value with Spaces", callback.mResponseInfo.getAllHeaders().get(
"echo-foo").get(0)); | 821 "Value with Spaces", callback.mResponseInfo.getAllHeaders().get(
"echo-foo").get(0)); |
| 805 assertEquals( | 822 assertEquals( |
| 806 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten
t-type").get(0)); | 823 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten
t-type").get(0)); |
| 807 } | 824 } |
| 808 | 825 |
| 809 @SmallTest | 826 @SmallTest |
| 810 @Feature({"Cronet"}) | 827 @Feature({"Cronet"}) |
| 811 @OnlyRunNativeCronet | 828 @OnlyRunNativeCronet |
| 812 public void testEchoStreamEmptyWrite() throws Exception { | 829 public void testEchoStreamEmptyWrite() throws Exception { |
| 813 String url = Http2TestServer.getEchoStreamUrl(); | 830 String url = Http2TestServer.getEchoStreamUrl(); |
| 814 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 831 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 815 callback.addWriteData(new byte[0]); | 832 callback.addWriteData(new byte[0]); |
| 816 // Create stream. | 833 // Create stream. |
| 817 BidirectionalStream stream = new BidirectionalStream | 834 BidirectionalStream stream = |
| 818 .Builder(url, callback, callback.ge
tExecutor(), | 835 mTestFramework.mCronetEngine |
| 819 mTestFramework.mCronetEngin
e) | 836 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
| 820 .build(); | 837 .build(); |
| 821 stream.start(); | 838 stream.start(); |
| 822 callback.blockForDone(); | 839 callback.blockForDone(); |
| 823 assertTrue(stream.isDone()); | 840 assertTrue(stream.isDone()); |
| 824 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 841 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 825 assertEquals("", callback.mResponseAsString); | 842 assertEquals("", callback.mResponseAsString); |
| 826 } | 843 } |
| 827 | 844 |
| 828 @SmallTest | 845 @SmallTest |
| 829 @Feature({"Cronet"}) | 846 @Feature({"Cronet"}) |
| 830 @OnlyRunNativeCronet | 847 @OnlyRunNativeCronet |
| 831 public void testDoubleWrite() throws Exception { | 848 public void testDoubleWrite() throws Exception { |
| 832 String url = Http2TestServer.getEchoStreamUrl(); | 849 String url = Http2TestServer.getEchoStreamUrl(); |
| 833 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback() { | 850 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback() { |
| 834 @Override | 851 @Override |
| 835 public void onStreamReady(BidirectionalStream stream) { | 852 public void onStreamReady(BidirectionalStream stream) { |
| 836 // super class will call Write() once. | 853 // super class will call Write() once. |
| 837 super.onStreamReady(stream); | 854 super.onStreamReady(stream); |
| 838 // Call Write() again. | 855 // Call Write() again. |
| 839 startNextWrite(stream); | 856 startNextWrite(stream); |
| 840 // Make sure there is no pending write. | 857 // Make sure there is no pending write. |
| 841 assertEquals(0, numPendingWrites()); | 858 assertEquals(0, numPendingWrites()); |
| 842 } | 859 } |
| 843 }; | 860 }; |
| 844 callback.addWriteData("1".getBytes()); | 861 callback.addWriteData("1".getBytes()); |
| 845 callback.addWriteData("2".getBytes()); | 862 callback.addWriteData("2".getBytes()); |
| 846 // Create stream. | 863 // Create stream. |
| 847 BidirectionalStream stream = new BidirectionalStream | 864 BidirectionalStream stream = |
| 848 .Builder(url, callback, callback.ge
tExecutor(), | 865 mTestFramework.mCronetEngine |
| 849 mTestFramework.mCronetEngin
e) | 866 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
| 850 .build(); | 867 .build(); |
| 851 stream.start(); | 868 stream.start(); |
| 852 callback.blockForDone(); | 869 callback.blockForDone(); |
| 853 assertTrue(stream.isDone()); | 870 assertTrue(stream.isDone()); |
| 854 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 871 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 855 assertEquals("12", callback.mResponseAsString); | 872 assertEquals("12", callback.mResponseAsString); |
| 856 } | 873 } |
| 857 | 874 |
| 858 @SmallTest | 875 @SmallTest |
| 859 @Feature({"Cronet"}) | 876 @Feature({"Cronet"}) |
| 860 @OnlyRunNativeCronet | 877 @OnlyRunNativeCronet |
| (...skipping 11 matching lines...) Expand all Loading... |
| 872 stream.read(ByteBuffer.allocateDirect(5)); | 889 stream.read(ByteBuffer.allocateDirect(5)); |
| 873 fail("Exception is not thrown."); | 890 fail("Exception is not thrown."); |
| 874 } catch (Exception e) { | 891 } catch (Exception e) { |
| 875 assertEquals("Unexpected read attempt.", e.getMessage()); | 892 assertEquals("Unexpected read attempt.", e.getMessage()); |
| 876 } | 893 } |
| 877 } | 894 } |
| 878 }; | 895 }; |
| 879 callback.addWriteData("1".getBytes()); | 896 callback.addWriteData("1".getBytes()); |
| 880 callback.addWriteData("2".getBytes()); | 897 callback.addWriteData("2".getBytes()); |
| 881 // Create stream. | 898 // Create stream. |
| 882 BidirectionalStream stream = new BidirectionalStream | 899 BidirectionalStream stream = |
| 883 .Builder(url, callback, callback.ge
tExecutor(), | 900 mTestFramework.mCronetEngine |
| 884 mTestFramework.mCronetEngin
e) | 901 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
| 885 .build(); | 902 .build(); |
| 886 stream.start(); | 903 stream.start(); |
| 887 callback.blockForDone(); | 904 callback.blockForDone(); |
| 888 assertTrue(stream.isDone()); | 905 assertTrue(stream.isDone()); |
| 889 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 906 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 890 assertEquals("12", callback.mResponseAsString); | 907 assertEquals("12", callback.mResponseAsString); |
| 891 } | 908 } |
| 892 | 909 |
| 893 @SmallTest | 910 @SmallTest |
| 894 @Feature({"Cronet"}) | 911 @Feature({"Cronet"}) |
| 895 @OnlyRunNativeCronet | 912 @OnlyRunNativeCronet |
| 896 @DisabledTest(message = "Disabled due to timeout. See crbug.com/591112") | 913 @DisabledTest(message = "Disabled due to timeout. See crbug.com/591112") |
| 897 public void testReadAndWrite() throws Exception { | 914 public void testReadAndWrite() throws Exception { |
| 898 String url = Http2TestServer.getEchoStreamUrl(); | 915 String url = Http2TestServer.getEchoStreamUrl(); |
| 899 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback() { | 916 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback() { |
| 900 @Override | 917 @Override |
| 901 public void onResponseHeadersReceived( | 918 public void onResponseHeadersReceived( |
| 902 BidirectionalStream stream, UrlResponseInfo info) { | 919 BidirectionalStream stream, UrlResponseInfo info) { |
| 903 // Start the write, that will not complete until callback comple
tion. | 920 // Start the write, that will not complete until callback comple
tion. |
| 904 startNextWrite(stream); | 921 startNextWrite(stream); |
| 905 // Start the read. It is allowed with write in flight. | 922 // Start the read. It is allowed with write in flight. |
| 906 super.onResponseHeadersReceived(stream, info); | 923 super.onResponseHeadersReceived(stream, info); |
| 907 } | 924 } |
| 908 }; | 925 }; |
| 909 callback.setAutoAdvance(false); | 926 callback.setAutoAdvance(false); |
| 910 callback.addWriteData("1".getBytes()); | 927 callback.addWriteData("1".getBytes()); |
| 911 callback.addWriteData("2".getBytes()); | 928 callback.addWriteData("2".getBytes()); |
| 912 // Create stream. | 929 // Create stream. |
| 913 BidirectionalStream stream = new BidirectionalStream | 930 BidirectionalStream stream = |
| 914 .Builder(url, callback, callback.ge
tExecutor(), | 931 mTestFramework.mCronetEngine |
| 915 mTestFramework.mCronetEngin
e) | 932 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
| 916 .build(); | 933 .build(); |
| 917 stream.start(); | 934 stream.start(); |
| 918 callback.waitForNextWriteStep(); | 935 callback.waitForNextWriteStep(); |
| 919 callback.waitForNextReadStep(); | 936 callback.waitForNextReadStep(); |
| 920 callback.startNextRead(stream); | 937 callback.startNextRead(stream); |
| 921 callback.setAutoAdvance(true); | 938 callback.setAutoAdvance(true); |
| 922 callback.blockForDone(); | 939 callback.blockForDone(); |
| 923 assertTrue(stream.isDone()); | 940 assertTrue(stream.isDone()); |
| 924 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 941 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 925 assertEquals("12", callback.mResponseAsString); | 942 assertEquals("12", callback.mResponseAsString); |
| 926 } | 943 } |
| 927 | 944 |
| 928 @SmallTest | 945 @SmallTest |
| 929 @Feature({"Cronet"}) | 946 @Feature({"Cronet"}) |
| 930 @OnlyRunNativeCronet | 947 @OnlyRunNativeCronet |
| 931 public void testEchoStreamWriteFirst() throws Exception { | 948 public void testEchoStreamWriteFirst() throws Exception { |
| 932 String url = Http2TestServer.getEchoStreamUrl(); | 949 String url = Http2TestServer.getEchoStreamUrl(); |
| 933 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 950 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 934 callback.setAutoAdvance(false); | 951 callback.setAutoAdvance(false); |
| 935 String[] testData = {"a", "bb", "ccc", "Test String", "1234567890", "woo
t!"}; | 952 String[] testData = {"a", "bb", "ccc", "Test String", "1234567890", "woo
t!"}; |
| 936 StringBuilder stringData = new StringBuilder(); | 953 StringBuilder stringData = new StringBuilder(); |
| 937 for (String writeData : testData) { | 954 for (String writeData : testData) { |
| 938 callback.addWriteData(writeData.getBytes()); | 955 callback.addWriteData(writeData.getBytes()); |
| 939 stringData.append(writeData); | 956 stringData.append(writeData); |
| 940 } | 957 } |
| 941 // Create stream. | 958 // Create stream. |
| 942 BidirectionalStream stream = new BidirectionalStream | 959 BidirectionalStream stream = |
| 943 .Builder(url, callback, callback.ge
tExecutor(), | 960 mTestFramework.mCronetEngine |
| 944 mTestFramework.mCronetEngin
e) | 961 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
| 945 .build(); | 962 .build(); |
| 946 stream.start(); | 963 stream.start(); |
| 947 // Write first. | 964 // Write first. |
| 948 callback.waitForNextWriteStep(); // onStreamReady | 965 callback.waitForNextWriteStep(); // onStreamReady |
| 949 for (String expected : testData) { | 966 for (String expected : testData) { |
| 950 // Write next chunk of test data. | 967 // Write next chunk of test data. |
| 951 callback.startNextWrite(stream); | 968 callback.startNextWrite(stream); |
| 952 callback.waitForNextWriteStep(); // onWriteCompleted | 969 callback.waitForNextWriteStep(); // onWriteCompleted |
| 953 } | 970 } |
| 954 | 971 |
| 955 // Wait for read step, but don't read yet. | 972 // Wait for read step, but don't read yet. |
| (...skipping 21 matching lines...) Expand all Loading... |
| 977 String url = Http2TestServer.getEchoStreamUrl(); | 994 String url = Http2TestServer.getEchoStreamUrl(); |
| 978 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 995 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 979 callback.setAutoAdvance(false); | 996 callback.setAutoAdvance(false); |
| 980 String[] testData = {"a", "bb", "ccc", "Test String", "1234567890", "woo
t!"}; | 997 String[] testData = {"a", "bb", "ccc", "Test String", "1234567890", "woo
t!"}; |
| 981 StringBuilder stringData = new StringBuilder(); | 998 StringBuilder stringData = new StringBuilder(); |
| 982 for (String writeData : testData) { | 999 for (String writeData : testData) { |
| 983 callback.addWriteData(writeData.getBytes()); | 1000 callback.addWriteData(writeData.getBytes()); |
| 984 stringData.append(writeData); | 1001 stringData.append(writeData); |
| 985 } | 1002 } |
| 986 // Create stream. | 1003 // Create stream. |
| 987 BidirectionalStream stream = new BidirectionalStream | 1004 BidirectionalStream stream = |
| 988 .Builder(url, callback, callback.ge
tExecutor(), | 1005 mTestFramework.mCronetEngine |
| 989 mTestFramework.mCronetEngin
e) | 1006 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
| 990 .build(); | 1007 .build(); |
| 991 stream.start(); | 1008 stream.start(); |
| 992 callback.waitForNextWriteStep(); | 1009 callback.waitForNextWriteStep(); |
| 993 callback.waitForNextReadStep(); | 1010 callback.waitForNextReadStep(); |
| 994 | 1011 |
| 995 for (String expected : testData) { | 1012 for (String expected : testData) { |
| 996 // Write next chunk of test data. | 1013 // Write next chunk of test data. |
| 997 callback.startNextWrite(stream); | 1014 callback.startNextWrite(stream); |
| 998 callback.waitForNextWriteStep(); | 1015 callback.waitForNextWriteStep(); |
| 999 | 1016 |
| 1000 // Read next chunk of test data. | 1017 // Read next chunk of test data. |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1017 * Checks that the buffer is updated correctly, when starting at an offset. | 1034 * Checks that the buffer is updated correctly, when starting at an offset. |
| 1018 */ | 1035 */ |
| 1019 @SmallTest | 1036 @SmallTest |
| 1020 @Feature({"Cronet"}) | 1037 @Feature({"Cronet"}) |
| 1021 @OnlyRunNativeCronet | 1038 @OnlyRunNativeCronet |
| 1022 public void testSimpleGetBufferUpdates() throws Exception { | 1039 public void testSimpleGetBufferUpdates() throws Exception { |
| 1023 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 1040 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 1024 callback.setAutoAdvance(false); | 1041 callback.setAutoAdvance(false); |
| 1025 // Since the method is "GET", the expected response body is also "GET". | 1042 // Since the method is "GET", the expected response body is also "GET". |
| 1026 BidirectionalStream.Builder builder = | 1043 BidirectionalStream.Builder builder = |
| 1027 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl
(), callback, | 1044 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 1028 callback.getExecutor(), mTestFramework.mCronetEngine); | 1045 Http2TestServer.getEchoMethodUrl(), callback, callback.g
etExecutor()); |
| 1029 BidirectionalStream stream = builder.setHttpMethod("GET").build(); | 1046 BidirectionalStream stream = builder.setHttpMethod("GET").build(); |
| 1030 stream.start(); | 1047 stream.start(); |
| 1031 callback.waitForNextReadStep(); | 1048 callback.waitForNextReadStep(); |
| 1032 | 1049 |
| 1033 assertEquals(null, callback.mError); | 1050 assertEquals(null, callback.mError); |
| 1034 assertFalse(callback.isDone()); | 1051 assertFalse(callback.isDone()); |
| 1035 assertEquals(TestBidirectionalStreamCallback.ResponseStep.ON_RESPONSE_ST
ARTED, | 1052 assertEquals(TestBidirectionalStreamCallback.ResponseStep.ON_RESPONSE_ST
ARTED, |
| 1036 callback.mResponseStep); | 1053 callback.mResponseStep); |
| 1037 | 1054 |
| 1038 ByteBuffer readBuffer = ByteBuffer.allocateDirect(5); | 1055 ByteBuffer readBuffer = ByteBuffer.allocateDirect(5); |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1110 runSimpleGetWithExpectedReceivedBytesCount(27); | 1127 runSimpleGetWithExpectedReceivedBytesCount(27); |
| 1111 } | 1128 } |
| 1112 | 1129 |
| 1113 @SmallTest | 1130 @SmallTest |
| 1114 @Feature({"Cronet"}) | 1131 @Feature({"Cronet"}) |
| 1115 @OnlyRunNativeCronet | 1132 @OnlyRunNativeCronet |
| 1116 public void testBadBuffers() throws Exception { | 1133 public void testBadBuffers() throws Exception { |
| 1117 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 1134 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 1118 callback.setAutoAdvance(false); | 1135 callback.setAutoAdvance(false); |
| 1119 BidirectionalStream.Builder builder = | 1136 BidirectionalStream.Builder builder = |
| 1120 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl
(), callback, | 1137 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 1121 callback.getExecutor(), mTestFramework.mCronetEngine); | 1138 Http2TestServer.getEchoMethodUrl(), callback, callback.g
etExecutor()); |
| 1122 BidirectionalStream stream = builder.setHttpMethod("GET").build(); | 1139 BidirectionalStream stream = builder.setHttpMethod("GET").build(); |
| 1123 stream.start(); | 1140 stream.start(); |
| 1124 callback.waitForNextReadStep(); | 1141 callback.waitForNextReadStep(); |
| 1125 | 1142 |
| 1126 assertEquals(null, callback.mError); | 1143 assertEquals(null, callback.mError); |
| 1127 assertFalse(callback.isDone()); | 1144 assertFalse(callback.isDone()); |
| 1128 assertEquals(TestBidirectionalStreamCallback.ResponseStep.ON_RESPONSE_ST
ARTED, | 1145 assertEquals(TestBidirectionalStreamCallback.ResponseStep.ON_RESPONSE_ST
ARTED, |
| 1129 callback.mResponseStep); | 1146 callback.mResponseStep); |
| 1130 | 1147 |
| 1131 // Try to read using a full buffer. | 1148 // Try to read using a full buffer. |
| (...skipping 20 matching lines...) Expand all Loading... |
| 1152 ByteBuffer readBuffer = ByteBuffer.allocateDirect(5); | 1169 ByteBuffer readBuffer = ByteBuffer.allocateDirect(5); |
| 1153 stream.read(readBuffer); | 1170 stream.read(readBuffer); |
| 1154 callback.blockForDone(); | 1171 callback.blockForDone(); |
| 1155 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 1172 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 1156 assertEquals("GET", callback.mResponseAsString); | 1173 assertEquals("GET", callback.mResponseAsString); |
| 1157 } | 1174 } |
| 1158 | 1175 |
| 1159 private void throwOrCancel( | 1176 private void throwOrCancel( |
| 1160 FailureType failureType, ResponseStep failureStep, boolean expectErr
or) { | 1177 FailureType failureType, ResponseStep failureStep, boolean expectErr
or) { |
| 1161 // Use a fresh CronetEngine each time so Http2 session is not reused. | 1178 // Use a fresh CronetEngine each time so Http2 session is not reused. |
| 1162 CronetEngine.Builder builder = new CronetEngine.Builder(getContext()); | 1179 ExperimentalCronetEngine.Builder builder = |
| 1163 builder.setMockCertVerifierForTesting(QuicTestServer.createMockCertVerif
ier()); | 1180 new ExperimentalCronetEngine.Builder(getContext()); |
| 1181 CronetTestUtil.setMockCertVerifierForTesting( |
| 1182 builder, QuicTestServer.createMockCertVerifier()); |
| 1164 mTestFramework = startCronetTestFrameworkWithUrlAndCronetEngineBuilder(n
ull, builder); | 1183 mTestFramework = startCronetTestFrameworkWithUrlAndCronetEngineBuilder(n
ull, builder); |
| 1165 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 1184 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 1166 callback.setFailure(failureType, failureStep); | 1185 callback.setFailure(failureType, failureStep); |
| 1167 TestRequestFinishedListener requestFinishedListener = new TestRequestFin
ishedListener(); | 1186 TestRequestFinishedListener requestFinishedListener = new TestRequestFin
ishedListener(); |
| 1168 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL
istener); | 1187 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL
istener); |
| 1169 BidirectionalStream.Builder streamBuilder = | 1188 BidirectionalStream.Builder streamBuilder = |
| 1170 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl
(), callback, | 1189 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 1171 callback.getExecutor(), mTestFramework.mCronetEngine); | 1190 Http2TestServer.getEchoMethodUrl(), callback, callback.g
etExecutor()); |
| 1172 BidirectionalStream stream = streamBuilder.setHttpMethod("GET").build(); | 1191 BidirectionalStream stream = streamBuilder.setHttpMethod("GET").build(); |
| 1173 Date startTime = new Date(); | 1192 Date startTime = new Date(); |
| 1174 stream.start(); | 1193 stream.start(); |
| 1175 callback.blockForDone(); | 1194 callback.blockForDone(); |
| 1176 assertTrue(stream.isDone()); | 1195 assertTrue(stream.isDone()); |
| 1177 requestFinishedListener.blockUntilDone(); | 1196 requestFinishedListener.blockUntilDone(); |
| 1178 Date endTime = new Date(); | 1197 Date endTime = new Date(); |
| 1179 RequestFinishedInfo finishedInfo = requestFinishedListener.getRequestInf
o(); | 1198 RequestFinishedInfo finishedInfo = requestFinishedListener.getRequestInf
o(); |
| 1180 RequestFinishedInfo.Metrics metrics = finishedInfo.getMetrics(); | 1199 RequestFinishedInfo.Metrics metrics = finishedInfo.getMetrics(); |
| 1181 assertNotNull(metrics); | 1200 assertNotNull(metrics); |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1246 throwOrCancel(FailureType.THROW_SYNC, ResponseStep.ON_READ_COMPLETED, tr
ue); | 1265 throwOrCancel(FailureType.THROW_SYNC, ResponseStep.ON_READ_COMPLETED, tr
ue); |
| 1247 } | 1266 } |
| 1248 | 1267 |
| 1249 @SmallTest | 1268 @SmallTest |
| 1250 @Feature({"Cronet"}) | 1269 @Feature({"Cronet"}) |
| 1251 @OnlyRunNativeCronet | 1270 @OnlyRunNativeCronet |
| 1252 public void testThrowOnSucceeded() { | 1271 public void testThrowOnSucceeded() { |
| 1253 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 1272 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 1254 callback.setFailure(FailureType.THROW_SYNC, ResponseStep.ON_SUCCEEDED); | 1273 callback.setFailure(FailureType.THROW_SYNC, ResponseStep.ON_SUCCEEDED); |
| 1255 BidirectionalStream.Builder builder = | 1274 BidirectionalStream.Builder builder = |
| 1256 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl
(), callback, | 1275 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 1257 callback.getExecutor(), mTestFramework.mCronetEngine); | 1276 Http2TestServer.getEchoMethodUrl(), callback, callback.g
etExecutor()); |
| 1258 BidirectionalStream stream = builder.setHttpMethod("GET").build(); | 1277 BidirectionalStream stream = builder.setHttpMethod("GET").build(); |
| 1259 stream.start(); | 1278 stream.start(); |
| 1260 callback.blockForDone(); | 1279 callback.blockForDone(); |
| 1261 assertEquals(callback.mResponseStep, ResponseStep.ON_SUCCEEDED); | 1280 assertEquals(callback.mResponseStep, ResponseStep.ON_SUCCEEDED); |
| 1262 assertTrue(stream.isDone()); | 1281 assertTrue(stream.isDone()); |
| 1263 assertNotNull(callback.mResponseInfo); | 1282 assertNotNull(callback.mResponseInfo); |
| 1264 // Check that error thrown from 'onSucceeded' callback is not reported. | 1283 // Check that error thrown from 'onSucceeded' callback is not reported. |
| 1265 assertNull(callback.mError); | 1284 assertNull(callback.mError); |
| 1266 assertFalse(callback.mOnErrorCalled); | 1285 assertFalse(callback.mOnErrorCalled); |
| 1267 } | 1286 } |
| 1268 | 1287 |
| 1269 @SmallTest | 1288 @SmallTest |
| 1270 @Feature({"Cronet"}) | 1289 @Feature({"Cronet"}) |
| 1271 @OnlyRunNativeCronet | 1290 @OnlyRunNativeCronet |
| 1272 public void testExecutorShutdownBeforeStreamIsDone() { | 1291 public void testExecutorShutdownBeforeStreamIsDone() { |
| 1273 // Test that stream is destroyed even if executor is shut down and rejec
ts posting tasks. | 1292 // Test that stream is destroyed even if executor is shut down and rejec
ts posting tasks. |
| 1274 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 1293 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 1275 callback.setAutoAdvance(false); | 1294 callback.setAutoAdvance(false); |
| 1276 BidirectionalStream.Builder builder = | 1295 BidirectionalStream.Builder builder = |
| 1277 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl
(), callback, | 1296 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 1278 callback.getExecutor(), mTestFramework.mCronetEngine); | 1297 Http2TestServer.getEchoMethodUrl(), callback, callback.g
etExecutor()); |
| 1279 CronetBidirectionalStream stream = | 1298 CronetBidirectionalStream stream = |
| 1280 (CronetBidirectionalStream) builder.setHttpMethod("GET").build()
; | 1299 (CronetBidirectionalStream) builder.setHttpMethod("GET").build()
; |
| 1281 stream.start(); | 1300 stream.start(); |
| 1282 callback.waitForNextReadStep(); | 1301 callback.waitForNextReadStep(); |
| 1283 assertFalse(callback.isDone()); | 1302 assertFalse(callback.isDone()); |
| 1284 assertFalse(stream.isDone()); | 1303 assertFalse(stream.isDone()); |
| 1285 | 1304 |
| 1286 final ConditionVariable streamDestroyed = new ConditionVariable(false); | 1305 final ConditionVariable streamDestroyed = new ConditionVariable(false); |
| 1287 stream.setOnDestroyedCallbackForTesting(new Runnable() { | 1306 stream.setOnDestroyedCallbackForTesting(new Runnable() { |
| 1288 @Override | 1307 @Override |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1337 @SmallTest | 1356 @SmallTest |
| 1338 @Feature({"Cronet"}) | 1357 @Feature({"Cronet"}) |
| 1339 @OnlyRunNativeCronet | 1358 @OnlyRunNativeCronet |
| 1340 public void testCronetEngineShutdown() throws Exception { | 1359 public void testCronetEngineShutdown() throws Exception { |
| 1341 // Test that CronetEngine cannot be shut down if there are any active st
reams. | 1360 // Test that CronetEngine cannot be shut down if there are any active st
reams. |
| 1342 TestBidirectionalStreamCallback callback = new ShutdownTestBidirectional
StreamCallback(); | 1361 TestBidirectionalStreamCallback callback = new ShutdownTestBidirectional
StreamCallback(); |
| 1343 // Block callback when response starts to verify that shutdown fails | 1362 // Block callback when response starts to verify that shutdown fails |
| 1344 // if there are active streams. | 1363 // if there are active streams. |
| 1345 callback.setAutoAdvance(false); | 1364 callback.setAutoAdvance(false); |
| 1346 BidirectionalStream.Builder builder = | 1365 BidirectionalStream.Builder builder = |
| 1347 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl
(), callback, | 1366 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 1348 callback.getExecutor(), mTestFramework.mCronetEngine); | 1367 Http2TestServer.getEchoMethodUrl(), callback, callback.g
etExecutor()); |
| 1349 CronetBidirectionalStream stream = | 1368 CronetBidirectionalStream stream = |
| 1350 (CronetBidirectionalStream) builder.setHttpMethod("GET").build()
; | 1369 (CronetBidirectionalStream) builder.setHttpMethod("GET").build()
; |
| 1351 stream.start(); | 1370 stream.start(); |
| 1352 try { | 1371 try { |
| 1353 mTestFramework.mCronetEngine.shutdown(); | 1372 mTestFramework.mCronetEngine.shutdown(); |
| 1354 fail("Should throw an exception"); | 1373 fail("Should throw an exception"); |
| 1355 } catch (Exception e) { | 1374 } catch (Exception e) { |
| 1356 assertEquals("Cannot shutdown with active requests.", e.getMessage()
); | 1375 assertEquals("Cannot shutdown with active requests.", e.getMessage()
); |
| 1357 } | 1376 } |
| 1358 | 1377 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 1382 callback.blockForDone(); | 1401 callback.blockForDone(); |
| 1383 } | 1402 } |
| 1384 | 1403 |
| 1385 @SmallTest | 1404 @SmallTest |
| 1386 @Feature({"Cronet"}) | 1405 @Feature({"Cronet"}) |
| 1387 @OnlyRunNativeCronet | 1406 @OnlyRunNativeCronet |
| 1388 public void testCronetEngineShutdownAfterStreamFailure() throws Exception { | 1407 public void testCronetEngineShutdownAfterStreamFailure() throws Exception { |
| 1389 // Test that CronetEngine can be shut down after stream reports a failur
e. | 1408 // Test that CronetEngine can be shut down after stream reports a failur
e. |
| 1390 TestBidirectionalStreamCallback callback = new ShutdownTestBidirectional
StreamCallback(); | 1409 TestBidirectionalStreamCallback callback = new ShutdownTestBidirectional
StreamCallback(); |
| 1391 BidirectionalStream.Builder builder = | 1410 BidirectionalStream.Builder builder = |
| 1392 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl
(), callback, | 1411 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 1393 callback.getExecutor(), mTestFramework.mCronetEngine); | 1412 Http2TestServer.getEchoMethodUrl(), callback, callback.g
etExecutor()); |
| 1394 CronetBidirectionalStream stream = | 1413 CronetBidirectionalStream stream = |
| 1395 (CronetBidirectionalStream) builder.setHttpMethod("GET").build()
; | 1414 (CronetBidirectionalStream) builder.setHttpMethod("GET").build()
; |
| 1396 stream.start(); | 1415 stream.start(); |
| 1397 callback.setFailure(FailureType.THROW_SYNC, ResponseStep.ON_READ_COMPLET
ED); | 1416 callback.setFailure(FailureType.THROW_SYNC, ResponseStep.ON_READ_COMPLET
ED); |
| 1398 callback.blockForDone(); | 1417 callback.blockForDone(); |
| 1399 assertTrue(callback.mOnErrorCalled); | 1418 assertTrue(callback.mOnErrorCalled); |
| 1400 assertNull(mTestFramework.mCronetEngine); | 1419 assertNull(mTestFramework.mCronetEngine); |
| 1401 } | 1420 } |
| 1402 | 1421 |
| 1403 @SmallTest | 1422 @SmallTest |
| 1404 @Feature({"Cronet"}) | 1423 @Feature({"Cronet"}) |
| 1405 @OnlyRunNativeCronet | 1424 @OnlyRunNativeCronet |
| 1406 public void testCronetEngineShutdownAfterStreamCancel() throws Exception { | 1425 public void testCronetEngineShutdownAfterStreamCancel() throws Exception { |
| 1407 // Test that CronetEngine can be shut down after stream is canceled. | 1426 // Test that CronetEngine can be shut down after stream is canceled. |
| 1408 TestBidirectionalStreamCallback callback = new ShutdownTestBidirectional
StreamCallback(); | 1427 TestBidirectionalStreamCallback callback = new ShutdownTestBidirectional
StreamCallback(); |
| 1409 BidirectionalStream.Builder builder = | 1428 BidirectionalStream.Builder builder = |
| 1410 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl
(), callback, | 1429 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 1411 callback.getExecutor(), mTestFramework.mCronetEngine); | 1430 Http2TestServer.getEchoMethodUrl(), callback, callback.g
etExecutor()); |
| 1412 CronetBidirectionalStream stream = | 1431 CronetBidirectionalStream stream = |
| 1413 (CronetBidirectionalStream) builder.setHttpMethod("GET").build()
; | 1432 (CronetBidirectionalStream) builder.setHttpMethod("GET").build()
; |
| 1414 | 1433 |
| 1415 // Block callback when response starts to verify that shutdown fails | 1434 // Block callback when response starts to verify that shutdown fails |
| 1416 // if there are active requests. | 1435 // if there are active requests. |
| 1417 callback.setAutoAdvance(false); | 1436 callback.setAutoAdvance(false); |
| 1418 stream.start(); | 1437 stream.start(); |
| 1419 try { | 1438 try { |
| 1420 mTestFramework.mCronetEngine.shutdown(); | 1439 mTestFramework.mCronetEngine.shutdown(); |
| 1421 fail("Should throw an exception"); | 1440 fail("Should throw an exception"); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1435 private static String bufferContentsToString(ByteBuffer byteBuffer, int star
t, int end) { | 1454 private static String bufferContentsToString(ByteBuffer byteBuffer, int star
t, int end) { |
| 1436 // Use a duplicate to avoid modifying byteBuffer. | 1455 // Use a duplicate to avoid modifying byteBuffer. |
| 1437 ByteBuffer duplicate = byteBuffer.duplicate(); | 1456 ByteBuffer duplicate = byteBuffer.duplicate(); |
| 1438 duplicate.position(start); | 1457 duplicate.position(start); |
| 1439 duplicate.limit(end); | 1458 duplicate.limit(end); |
| 1440 byte[] contents = new byte[duplicate.remaining()]; | 1459 byte[] contents = new byte[duplicate.remaining()]; |
| 1441 duplicate.get(contents); | 1460 duplicate.get(contents); |
| 1442 return new String(contents); | 1461 return new String(contents); |
| 1443 } | 1462 } |
| 1444 } | 1463 } |
| OLD | NEW |