| 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 android.os.ConditionVariable; | 7 import android.os.ConditionVariable; |
| 8 import android.test.suitebuilder.annotation.SmallTest; | 8 import android.test.suitebuilder.annotation.SmallTest; |
| 9 | 9 |
| 10 import org.chromium.base.test.util.DisabledTest; | 10 import org.chromium.base.test.util.DisabledTest; |
| 11 import org.chromium.base.test.util.Feature; | 11 import org.chromium.base.test.util.Feature; |
| 12 import org.chromium.net.CronetTestBase.OnlyRunNativeCronet; | |
| 13 import org.chromium.net.TestBidirectionalStreamCallback.FailureType; | 12 import org.chromium.net.TestBidirectionalStreamCallback.FailureType; |
| 14 import org.chromium.net.TestBidirectionalStreamCallback.ResponseStep; | 13 import org.chromium.net.TestBidirectionalStreamCallback.ResponseStep; |
| 15 import org.chromium.net.impl.CronetBidirectionalStream; | 14 import org.chromium.net.impl.CronetBidirectionalStream; |
| 16 | 15 |
| 17 import java.nio.ByteBuffer; | 16 import java.nio.ByteBuffer; |
| 18 import java.util.AbstractMap; | 17 import java.util.AbstractMap; |
| 19 import java.util.ArrayList; | 18 import java.util.ArrayList; |
| 20 import java.util.Arrays; | 19 import java.util.Arrays; |
| 21 import java.util.List; | 20 import java.util.List; |
| 22 import java.util.Map; | 21 import java.util.Map; |
| 23 import java.util.regex.Matcher; | 22 import java.util.regex.Matcher; |
| 24 import java.util.regex.Pattern; | 23 import java.util.regex.Pattern; |
| 25 | 24 |
| 26 /** | 25 /** |
| 27 * Test functionality of BidirectionalStream interface. | 26 * Test functionality of BidirectionalStream interface. |
| 28 */ | 27 */ |
| 29 public class BidirectionalStreamTest extends CronetTestBase { | 28 public class BidirectionalStreamTest extends CronetTestBase { |
| 30 private CronetTestFramework mTestFramework; | 29 private CronetTestFramework mTestFramework; |
| 31 | 30 |
| 32 @Override | 31 @Override |
| 33 protected void setUp() throws Exception { | 32 protected void setUp() throws Exception { |
| 34 super.setUp(); | 33 super.setUp(); |
| 35 // Load library first to create MockCertVerifier. | 34 // Load library first to create MockCertVerifier. |
| 36 System.loadLibrary("cronet_tests"); | 35 System.loadLibrary("cronet_tests"); |
| 37 CronetEngine.Builder builder = new CronetEngine.Builder(getContext()); | 36 ExperimentalCronetEngine.Builder builder = |
| 38 builder.setMockCertVerifierForTesting(QuicTestServer.createMockCertVerif
ier()); | 37 new ExperimentalCronetEngine.Builder(getContext()); |
| 38 CronetTestUtil.setMockCertVerifierForTesting( |
| 39 builder, QuicTestServer.createMockCertVerifier()); |
| 39 | 40 |
| 40 mTestFramework = startCronetTestFrameworkWithUrlAndCronetEngineBuilder(n
ull, builder); | 41 mTestFramework = startCronetTestFrameworkWithUrlAndCronetEngineBuilder(n
ull, builder); |
| 41 assertTrue(Http2TestServer.startHttp2TestServer( | 42 assertTrue(Http2TestServer.startHttp2TestServer( |
| 42 getContext(), QuicTestServer.getServerCert(), QuicTestServer.get
ServerCertKey())); | 43 getContext(), QuicTestServer.getServerCert(), QuicTestServer.get
ServerCertKey())); |
| 43 } | 44 } |
| 44 | 45 |
| 45 @Override | 46 @Override |
| 46 protected void tearDown() throws Exception { | 47 protected void tearDown() throws Exception { |
| 47 assertTrue(Http2TestServer.shutdownHttp2TestServer()); | 48 assertTrue(Http2TestServer.shutdownHttp2TestServer()); |
| 48 if (mTestFramework.mCronetEngine != null) { | 49 if (mTestFramework.mCronetEngine != null) { |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 82 Arrays.asList(urls), statusCode, message, headersList, false, "h
2", null); | 83 Arrays.asList(urls), statusCode, message, headersList, false, "h
2", null); |
| 83 urlResponseInfo.setReceivedBytesCount(receivedBytes); | 84 urlResponseInfo.setReceivedBytesCount(receivedBytes); |
| 84 return urlResponseInfo; | 85 return urlResponseInfo; |
| 85 } | 86 } |
| 86 | 87 |
| 87 private void runSimpleGetWithExpectedReceivedBytesCount(int expectedReceived
Bytes) | 88 private void runSimpleGetWithExpectedReceivedBytesCount(int expectedReceived
Bytes) |
| 88 throws Exception { | 89 throws Exception { |
| 89 String url = Http2TestServer.getEchoMethodUrl(); | 90 String url = Http2TestServer.getEchoMethodUrl(); |
| 90 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 91 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 91 // Create stream. | 92 // Create stream. |
| 92 BidirectionalStream stream = new BidirectionalStream | 93 BidirectionalStream stream = |
| 93 .Builder(url, callback, callback.ge
tExecutor(), | 94 mTestFramework.mCronetEngine |
| 94 mTestFramework.mCronetEngin
e) | 95 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
| 95 .setHttpMethod("GET") | 96 .setHttpMethod("GET") |
| 96 .build(); | 97 .build(); |
| 97 stream.start(); | 98 stream.start(); |
| 98 callback.blockForDone(); | 99 callback.blockForDone(); |
| 99 assertTrue(stream.isDone()); | 100 assertTrue(stream.isDone()); |
| 100 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 101 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 101 // Default method is 'GET'. | 102 // Default method is 'GET'. |
| 102 assertEquals("GET", callback.mResponseAsString); | 103 assertEquals("GET", callback.mResponseAsString); |
| 103 UrlResponseInfo urlResponseInfo = createUrlResponseInfo( | 104 UrlResponseInfo urlResponseInfo = createUrlResponseInfo( |
| 104 new String[] {url}, "", 200, expectedReceivedBytes, ":status", "
200"); | 105 new String[] {url}, "", 200, expectedReceivedBytes, ":status", "
200"); |
| 105 assertResponseEquals(urlResponseInfo, callback.mResponseInfo); | 106 assertResponseEquals(urlResponseInfo, callback.mResponseInfo); |
| 106 checkResponseInfo(callback.mResponseInfo, Http2TestServer.getEchoMethodU
rl(), 200, ""); | 107 checkResponseInfo(callback.mResponseInfo, Http2TestServer.getEchoMethodU
rl(), 200, ""); |
| 107 } | 108 } |
| 108 | 109 |
| 109 @SmallTest | 110 @SmallTest |
| 110 @Feature({"Cronet"}) | 111 @Feature({"Cronet"}) |
| 112 @OnlyRunNativeCronet |
| 111 public void testBuilderChecks() throws Exception { | 113 public void testBuilderChecks() throws Exception { |
| 112 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 114 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 113 try { | 115 try { |
| 114 new BidirectionalStream.Builder( | 116 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 115 null, callback, callback.getExecutor(), mTestFramework.mCron
etEngine); | 117 null, callback, callback.getExecutor()); |
| 116 fail("URL not null-checked"); | 118 fail("URL not null-checked"); |
| 117 } catch (NullPointerException e) { | 119 } catch (NullPointerException e) { |
| 118 assertEquals("URL is required.", e.getMessage()); | 120 assertEquals("URL is required.", e.getMessage()); |
| 119 } | 121 } |
| 120 try { | 122 try { |
| 121 new BidirectionalStream.Builder(Http2TestServer.getServerUrl(), null
, | 123 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 122 callback.getExecutor(), mTestFramework.mCronetEngine); | 124 Http2TestServer.getServerUrl(), null, callback.getExecutor()
); |
| 123 fail("Callback not null-checked"); | 125 fail("Callback not null-checked"); |
| 124 } catch (NullPointerException e) { | 126 } catch (NullPointerException e) { |
| 125 assertEquals("Callback is required.", e.getMessage()); | 127 assertEquals("Callback is required.", e.getMessage()); |
| 126 } | 128 } |
| 127 try { | 129 try { |
| 128 new BidirectionalStream.Builder( | 130 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 129 Http2TestServer.getServerUrl(), callback, null, mTestFramewo
rk.mCronetEngine); | 131 Http2TestServer.getServerUrl(), callback, null); |
| 130 fail("Executor not null-checked"); | 132 fail("Executor not null-checked"); |
| 131 } catch (NullPointerException e) { | 133 } catch (NullPointerException e) { |
| 132 assertEquals("Executor is required.", e.getMessage()); | 134 assertEquals("Executor is required.", e.getMessage()); |
| 133 } | 135 } |
| 134 try { | |
| 135 new BidirectionalStream.Builder( | |
| 136 Http2TestServer.getServerUrl(), callback, callback.getExecut
or(), null); | |
| 137 fail("CronetEngine not null-checked"); | |
| 138 } catch (NullPointerException e) { | |
| 139 assertEquals("CronetEngine is required.", e.getMessage()); | |
| 140 } | |
| 141 // Verify successful creation doesn't throw. | 136 // Verify successful creation doesn't throw. |
| 142 BidirectionalStream.Builder builder = | 137 BidirectionalStream.Builder builder = |
| 143 new BidirectionalStream.Builder(Http2TestServer.getServerUrl(),
callback, | 138 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 144 callback.getExecutor(), mTestFramework.mCronetEngine); | 139 Http2TestServer.getServerUrl(), callback, callback.getEx
ecutor()); |
| 145 try { | 140 try { |
| 146 builder.addHeader(null, "value"); | 141 builder.addHeader(null, "value"); |
| 147 fail("Header name is not null-checked"); | 142 fail("Header name is not null-checked"); |
| 148 } catch (NullPointerException e) { | 143 } catch (NullPointerException e) { |
| 149 assertEquals("Invalid header name.", e.getMessage()); | 144 assertEquals("Invalid header name.", e.getMessage()); |
| 150 } | 145 } |
| 151 try { | 146 try { |
| 152 builder.addHeader("name", null); | 147 builder.addHeader("name", null); |
| 153 fail("Header value is not null-checked"); | 148 fail("Header value is not null-checked"); |
| 154 } catch (NullPointerException e) { | 149 } catch (NullPointerException e) { |
| 155 assertEquals("Invalid header value.", e.getMessage()); | 150 assertEquals("Invalid header value.", e.getMessage()); |
| 156 } | 151 } |
| 157 try { | 152 try { |
| 158 builder.setHttpMethod(null); | 153 builder.setHttpMethod(null); |
| 159 fail("Method name is not null-checked"); | 154 fail("Method name is not null-checked"); |
| 160 } catch (NullPointerException e) { | 155 } catch (NullPointerException e) { |
| 161 assertEquals("Method is required.", e.getMessage()); | 156 assertEquals("Method is required.", e.getMessage()); |
| 162 } | 157 } |
| 163 } | 158 } |
| 164 | 159 |
| 165 @SmallTest | 160 @SmallTest |
| 166 @Feature({"Cronet"}) | 161 @Feature({"Cronet"}) |
| 167 @OnlyRunNativeCronet | 162 @OnlyRunNativeCronet |
| 168 public void testFailPlainHttp() throws Exception { | 163 public void testFailPlainHttp() throws Exception { |
| 169 String url = "http://example.com"; | 164 String url = "http://example.com"; |
| 170 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 165 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 171 // Create stream. | 166 // Create stream. |
| 172 BidirectionalStream stream = new BidirectionalStream | 167 BidirectionalStream stream = |
| 173 .Builder(url, callback, callback.ge
tExecutor(), | 168 mTestFramework.mCronetEngine |
| 174 mTestFramework.mCronetEngin
e) | 169 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
| 175 .build(); | 170 .build(); |
| 176 stream.start(); | 171 stream.start(); |
| 177 callback.blockForDone(); | 172 callback.blockForDone(); |
| 178 assertTrue(stream.isDone()); | 173 assertTrue(stream.isDone()); |
| 179 assertEquals("Exception in BidirectionalStream: net::ERR_DISALLOWED_URL_
SCHEME", | 174 assertEquals("Exception in BidirectionalStream: net::ERR_DISALLOWED_URL_
SCHEME", |
| 180 callback.mError.getMessage()); | 175 callback.mError.getMessage()); |
| 181 assertEquals(-301, callback.mError.getCronetInternalErrorCode()); | 176 assertEquals(-301, callback.mError.getCronetInternalErrorCode()); |
| 182 } | 177 } |
| 183 | 178 |
| 184 @SmallTest | 179 @SmallTest |
| 185 @Feature({"Cronet"}) | 180 @Feature({"Cronet"}) |
| 186 @OnlyRunNativeCronet | 181 @OnlyRunNativeCronet |
| 187 public void testSimpleGet() throws Exception { | 182 public void testSimpleGet() throws Exception { |
| 188 // Since this is the first request on the connection, the expected recei
ved bytes count | 183 // Since this is the first request on the connection, the expected recei
ved bytes count |
| 189 // must account for an HPACK dynamic table size update. | 184 // must account for an HPACK dynamic table size update. |
| 190 runSimpleGetWithExpectedReceivedBytesCount(31); | 185 runSimpleGetWithExpectedReceivedBytesCount(31); |
| 191 } | 186 } |
| 192 | 187 |
| 193 @SmallTest | 188 @SmallTest |
| 194 @Feature({"Cronet"}) | 189 @Feature({"Cronet"}) |
| 195 @OnlyRunNativeCronet | 190 @OnlyRunNativeCronet |
| 196 public void testSimpleHead() throws Exception { | 191 public void testSimpleHead() throws Exception { |
| 197 String url = Http2TestServer.getEchoMethodUrl(); | 192 String url = Http2TestServer.getEchoMethodUrl(); |
| 198 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 193 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 199 // Create stream. | 194 // Create stream. |
| 200 BidirectionalStream stream = new BidirectionalStream | 195 BidirectionalStream stream = |
| 201 .Builder(url, callback, callback.ge
tExecutor(), | 196 mTestFramework.mCronetEngine |
| 202 mTestFramework.mCronetEngin
e) | 197 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
| 203 .setHttpMethod("HEAD") | 198 .setHttpMethod("HEAD") |
| 204 .build(); | 199 .build(); |
| 205 stream.start(); | 200 stream.start(); |
| 206 callback.blockForDone(); | 201 callback.blockForDone(); |
| 207 assertTrue(stream.isDone()); | 202 assertTrue(stream.isDone()); |
| 208 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 203 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 209 assertEquals("HEAD", callback.mResponseAsString); | 204 assertEquals("HEAD", callback.mResponseAsString); |
| 210 UrlResponseInfo urlResponseInfo = | 205 UrlResponseInfo urlResponseInfo = |
| 211 createUrlResponseInfo(new String[] {url}, "", 200, 32, ":status"
, "200"); | 206 createUrlResponseInfo(new String[] {url}, "", 200, 32, ":status"
, "200"); |
| 212 assertResponseEquals(urlResponseInfo, callback.mResponseInfo); | 207 assertResponseEquals(urlResponseInfo, callback.mResponseInfo); |
| 213 checkResponseInfo(callback.mResponseInfo, Http2TestServer.getEchoMethodU
rl(), 200, ""); | 208 checkResponseInfo(callback.mResponseInfo, Http2TestServer.getEchoMethodU
rl(), 200, ""); |
| 214 } | 209 } |
| 215 | 210 |
| 216 @SmallTest | 211 @SmallTest |
| 217 @Feature({"Cronet"}) | 212 @Feature({"Cronet"}) |
| 218 @OnlyRunNativeCronet | 213 @OnlyRunNativeCronet |
| 219 public void testSimplePost() throws Exception { | 214 public void testSimplePost() throws Exception { |
| 220 String url = Http2TestServer.getEchoStreamUrl(); | 215 String url = Http2TestServer.getEchoStreamUrl(); |
| 221 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 216 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 222 callback.addWriteData("Test String".getBytes()); | 217 callback.addWriteData("Test String".getBytes()); |
| 223 callback.addWriteData("1234567890".getBytes()); | 218 callback.addWriteData("1234567890".getBytes()); |
| 224 callback.addWriteData("woot!".getBytes()); | 219 callback.addWriteData("woot!".getBytes()); |
| 225 // Create stream. | 220 // Create stream. |
| 226 BidirectionalStream stream = new BidirectionalStream | 221 BidirectionalStream stream = |
| 227 .Builder(url, callback, callback.ge
tExecutor(), | 222 mTestFramework.mCronetEngine |
| 228 mTestFramework.mCronetEngin
e) | 223 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
| 229 .addHeader("foo", "bar") | 224 .addHeader("foo", "bar") |
| 230 .addHeader("empty", "") | 225 .addHeader("empty", "") |
| 231 .addHeader("Content-Type", "zebra") | 226 .addHeader("Content-Type", "zebra") |
| 232 .build(); | 227 .build(); |
| 233 stream.start(); | 228 stream.start(); |
| 234 callback.blockForDone(); | 229 callback.blockForDone(); |
| 235 assertTrue(stream.isDone()); | 230 assertTrue(stream.isDone()); |
| 236 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 231 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 237 assertEquals("Test String1234567890woot!", callback.mResponseAsString); | 232 assertEquals("Test String1234567890woot!", callback.mResponseAsString); |
| 238 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo
").get(0)); | 233 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo
").get(0)); |
| 239 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty"
).get(0)); | 234 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty"
).get(0)); |
| 240 assertEquals( | 235 assertEquals( |
| 241 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten
t-type").get(0)); | 236 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten
t-type").get(0)); |
| 242 } | 237 } |
| 243 | 238 |
| 244 @SmallTest | 239 @SmallTest |
| 245 @Feature({"Cronet"}) | 240 @Feature({"Cronet"}) |
| 246 @OnlyRunNativeCronet | 241 @OnlyRunNativeCronet |
| 247 public void testSimplePostWithFlush() throws Exception { | 242 public void testSimplePostWithFlush() throws Exception { |
| 248 String url = Http2TestServer.getEchoStreamUrl(); | 243 String url = Http2TestServer.getEchoStreamUrl(); |
| 249 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 244 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 250 callback.addWriteData("Test String".getBytes(), false); | 245 callback.addWriteData("Test String".getBytes(), false); |
| 251 callback.addWriteData("1234567890".getBytes(), false); | 246 callback.addWriteData("1234567890".getBytes(), false); |
| 252 callback.addWriteData("woot!".getBytes(), true); | 247 callback.addWriteData("woot!".getBytes(), true); |
| 253 BidirectionalStream stream = new BidirectionalStream | 248 BidirectionalStream stream = |
| 254 .Builder(url, callback, callback.ge
tExecutor(), | 249 mTestFramework.mCronetEngine |
| 255 mTestFramework.mCronetEngin
e) | 250 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
| 256 .addHeader("foo", "bar") | 251 .addHeader("foo", "bar") |
| 257 .addHeader("empty", "") | 252 .addHeader("empty", "") |
| 258 .addHeader("Content-Type", "zebra") | 253 .addHeader("Content-Type", "zebra") |
| 259 .build(); | 254 .build(); |
| 260 // Flush before stream is started should not crash. | 255 // Flush before stream is started should not crash. |
| 261 stream.flush(); | 256 stream.flush(); |
| 262 | 257 |
| 263 stream.start(); | 258 stream.start(); |
| 264 callback.blockForDone(); | 259 callback.blockForDone(); |
| 265 assertTrue(stream.isDone()); | 260 assertTrue(stream.isDone()); |
| 266 | 261 |
| 267 // Flush after stream is completed is no-op. It shouldn't call into the
destroyed adapter. | 262 // Flush after stream is completed is no-op. It shouldn't call into the
destroyed adapter. |
| 268 stream.flush(); | 263 stream.flush(); |
| 269 | 264 |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 321 ((CronetBidirectionalStream) stream).getFlushDataFor
Testing().size()); | 316 ((CronetBidirectionalStream) stream).getFlushDataFor
Testing().size()); |
| 322 } | 317 } |
| 323 } | 318 } |
| 324 }; | 319 }; |
| 325 callback.addWriteData("1".getBytes(), false); | 320 callback.addWriteData("1".getBytes(), false); |
| 326 callback.addWriteData("2".getBytes(), false); | 321 callback.addWriteData("2".getBytes(), false); |
| 327 callback.addWriteData("3".getBytes(), true); | 322 callback.addWriteData("3".getBytes(), true); |
| 328 callback.addWriteData("4".getBytes(), false); | 323 callback.addWriteData("4".getBytes(), false); |
| 329 callback.addWriteData("5".getBytes(), true); | 324 callback.addWriteData("5".getBytes(), true); |
| 330 callback.addWriteData("6".getBytes(), false); | 325 callback.addWriteData("6".getBytes(), false); |
| 331 CronetBidirectionalStream stream = (CronetBidirectionalStream) new Bidir
ectionalStream | 326 CronetBidirectionalStream stream = |
| 332 .Builder(url, callback, callb
ack.getExecutor(), | 327 (CronetBidirectionalStream) mTestFramework.mCronetEngine |
| 333 mTestFramework.mCrone
tEngine) | 328 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
| 334 .addHeader("foo", "bar") | 329 .addHeader("foo", "bar") |
| 335 .addHeader("empty", "") | 330 .addHeader("empty", "") |
| 336 .addHeader("Content-Type", "z
ebra") | 331 .addHeader("Content-Type", "zebra") |
| 337 .build(); | 332 .build(); |
| 338 callback.setAutoAdvance(false); | 333 callback.setAutoAdvance(false); |
| 339 stream.start(); | 334 stream.start(); |
| 340 callback.waitForNextWriteStep(); // onStreamReady | 335 callback.waitForNextWriteStep(); // onStreamReady |
| 341 | 336 |
| 342 assertEquals(0, stream.getPendingDataForTesting().size()); | 337 assertEquals(0, stream.getPendingDataForTesting().size()); |
| 343 assertEquals(0, stream.getFlushDataForTesting().size()); | 338 assertEquals(0, stream.getFlushDataForTesting().size()); |
| 344 | 339 |
| 345 // Write 1, 2, 3 and flush(). | 340 // Write 1, 2, 3 and flush(). |
| 346 callback.startNextWrite(stream); | 341 callback.startNextWrite(stream); |
| 347 // Write 4, 5 and flush(). 4, 5 will be in flush queue. | 342 // 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... |
| 380 stream.flush(); | 375 stream.flush(); |
| 381 super.onStreamReady(stream); | 376 super.onStreamReady(stream); |
| 382 try { | 377 try { |
| 383 // Attempt to write data for GET request. | 378 // Attempt to write data for GET request. |
| 384 stream.write(ByteBuffer.wrap("dummy".getBytes()), true); | 379 stream.write(ByteBuffer.wrap("dummy".getBytes()), true); |
| 385 } catch (IllegalArgumentException e) { | 380 } catch (IllegalArgumentException e) { |
| 386 // Expected. | 381 // Expected. |
| 387 } | 382 } |
| 388 } | 383 } |
| 389 }; | 384 }; |
| 390 BidirectionalStream stream = new BidirectionalStream | 385 BidirectionalStream stream = |
| 391 .Builder(url, callback, callbac
k.getExecutor(), | 386 mTestFramework.mCronetEngine |
| 392 mTestFramework.mCronetE
ngine) | 387 .newBidirectionalStreamBuilder(url, callback, callba
ck.getExecutor()) |
| 393 .setHttpMethod("GET") | 388 .setHttpMethod("GET") |
| 394 .delayRequestHeadersUntilFirstF
lush(i == 0) | 389 .delayRequestHeadersUntilFirstFlush(i == 0) |
| 395 .addHeader("foo", "bar") | 390 .addHeader("foo", "bar") |
| 396 .addHeader("empty", "") | 391 .addHeader("empty", "") |
| 397 .build(); | 392 .build(); |
| 398 // Flush before stream is started should not crash. | 393 // Flush before stream is started should not crash. |
| 399 stream.flush(); | 394 stream.flush(); |
| 400 | 395 |
| 401 stream.start(); | 396 stream.start(); |
| 402 callback.blockForDone(); | 397 callback.blockForDone(); |
| 403 assertTrue(stream.isDone()); | 398 assertTrue(stream.isDone()); |
| 404 | 399 |
| 405 // Flush after stream is completed is no-op. It shouldn't call into
the destroyed | 400 // Flush after stream is completed is no-op. It shouldn't call into
the destroyed |
| 406 // adapter. | 401 // adapter. |
| 407 stream.flush(); | 402 stream.flush(); |
| 408 | 403 |
| 409 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 404 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 410 assertEquals("", callback.mResponseAsString); | 405 assertEquals("", callback.mResponseAsString); |
| 411 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo
-foo").get(0)); | 406 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo
-foo").get(0)); |
| 412 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-em
pty").get(0)); | 407 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-em
pty").get(0)); |
| 413 } | 408 } |
| 414 } | 409 } |
| 415 | 410 |
| 416 @SmallTest | 411 @SmallTest |
| 417 @Feature({"Cronet"}) | 412 @Feature({"Cronet"}) |
| 418 @OnlyRunNativeCronet | 413 @OnlyRunNativeCronet |
| 419 public void testSimplePostWithFlushAfterOneWrite() throws Exception { | 414 public void testSimplePostWithFlushAfterOneWrite() throws Exception { |
| 420 // TODO(xunjieli): Use ParameterizedTest instead of the loop. | 415 // TODO(xunjieli): Use ParameterizedTest instead of the loop. |
| 421 for (int i = 0; i < 2; i++) { | 416 for (int i = 0; i < 2; i++) { |
| 422 String url = Http2TestServer.getEchoStreamUrl(); | 417 String url = Http2TestServer.getEchoStreamUrl(); |
| 423 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback(); | 418 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback(); |
| 424 callback.addWriteData("Test String".getBytes(), true); | 419 callback.addWriteData("Test String".getBytes(), true); |
| 425 BidirectionalStream stream = new BidirectionalStream | 420 BidirectionalStream stream = |
| 426 .Builder(url, callback, callbac
k.getExecutor(), | 421 mTestFramework.mCronetEngine |
| 427 mTestFramework.mCronetE
ngine) | 422 .newBidirectionalStreamBuilder(url, callback, callba
ck.getExecutor()) |
| 428 .delayRequestHeadersUntilFirstF
lush(i == 0) | 423 .delayRequestHeadersUntilFirstFlush(i == 0) |
| 429 .addHeader("foo", "bar") | 424 .addHeader("foo", "bar") |
| 430 .addHeader("empty", "") | 425 .addHeader("empty", "") |
| 431 .addHeader("Content-Type", "zeb
ra") | 426 .addHeader("Content-Type", "zebra") |
| 432 .build(); | 427 .build(); |
| 433 stream.start(); | 428 stream.start(); |
| 434 callback.blockForDone(); | 429 callback.blockForDone(); |
| 435 assertTrue(stream.isDone()); | 430 assertTrue(stream.isDone()); |
| 436 | 431 |
| 437 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 432 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 438 assertEquals("Test String", callback.mResponseAsString); | 433 assertEquals("Test String", callback.mResponseAsString); |
| 439 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo
-foo").get(0)); | 434 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo
-foo").get(0)); |
| 440 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-em
pty").get(0)); | 435 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-em
pty").get(0)); |
| 441 assertEquals("zebra", | 436 assertEquals("zebra", |
| 442 callback.mResponseInfo.getAllHeaders().get("echo-content-typ
e").get(0)); | 437 callback.mResponseInfo.getAllHeaders().get("echo-content-typ
e").get(0)); |
| 443 } | 438 } |
| 444 } | 439 } |
| 445 | 440 |
| 446 @SmallTest | 441 @SmallTest |
| 447 @Feature({"Cronet"}) | 442 @Feature({"Cronet"}) |
| 448 @OnlyRunNativeCronet | 443 @OnlyRunNativeCronet |
| 449 public void testSimplePostWithFlushTwice() throws Exception { | 444 public void testSimplePostWithFlushTwice() throws Exception { |
| 450 // TODO(xunjieli): Use ParameterizedTest instead of the loop. | 445 // TODO(xunjieli): Use ParameterizedTest instead of the loop. |
| 451 for (int i = 0; i < 2; i++) { | 446 for (int i = 0; i < 2; i++) { |
| 452 String url = Http2TestServer.getEchoStreamUrl(); | 447 String url = Http2TestServer.getEchoStreamUrl(); |
| 453 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback(); | 448 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback(); |
| 454 callback.addWriteData("Test String".getBytes(), false); | 449 callback.addWriteData("Test String".getBytes(), false); |
| 455 callback.addWriteData("1234567890".getBytes(), false); | 450 callback.addWriteData("1234567890".getBytes(), false); |
| 456 callback.addWriteData("woot!".getBytes(), true); | 451 callback.addWriteData("woot!".getBytes(), true); |
| 457 callback.addWriteData("Test String".getBytes(), false); | 452 callback.addWriteData("Test String".getBytes(), false); |
| 458 callback.addWriteData("1234567890".getBytes(), false); | 453 callback.addWriteData("1234567890".getBytes(), false); |
| 459 callback.addWriteData("woot!".getBytes(), true); | 454 callback.addWriteData("woot!".getBytes(), true); |
| 460 BidirectionalStream stream = new BidirectionalStream | 455 BidirectionalStream stream = |
| 461 .Builder(url, callback, callbac
k.getExecutor(), | 456 mTestFramework.mCronetEngine |
| 462 mTestFramework.mCronetE
ngine) | 457 .newBidirectionalStreamBuilder(url, callback, callba
ck.getExecutor()) |
| 463 .delayRequestHeadersUntilFirstF
lush(i == 0) | 458 .delayRequestHeadersUntilFirstFlush(i == 0) |
| 464 .addHeader("foo", "bar") | 459 .addHeader("foo", "bar") |
| 465 .addHeader("empty", "") | 460 .addHeader("empty", "") |
| 466 .addHeader("Content-Type", "zeb
ra") | 461 .addHeader("Content-Type", "zebra") |
| 467 .build(); | 462 .build(); |
| 468 stream.start(); | 463 stream.start(); |
| 469 callback.blockForDone(); | 464 callback.blockForDone(); |
| 470 assertTrue(stream.isDone()); | 465 assertTrue(stream.isDone()); |
| 471 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 466 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 472 assertEquals("Test String1234567890woot!Test String1234567890woot!", | 467 assertEquals("Test String1234567890woot!Test String1234567890woot!", |
| 473 callback.mResponseAsString); | 468 callback.mResponseAsString); |
| 474 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo
-foo").get(0)); | 469 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo
-foo").get(0)); |
| 475 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-em
pty").get(0)); | 470 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-em
pty").get(0)); |
| 476 assertEquals("zebra", | 471 assertEquals("zebra", |
| 477 callback.mResponseInfo.getAllHeaders().get("echo-content-typ
e").get(0)); | 472 callback.mResponseInfo.getAllHeaders().get("echo-content-typ
e").get(0)); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 492 } | 487 } |
| 493 @Override | 488 @Override |
| 494 public void onResponseHeadersReceived( | 489 public void onResponseHeadersReceived( |
| 495 BidirectionalStream stream, UrlResponseInfo info) { | 490 BidirectionalStream stream, UrlResponseInfo info) { |
| 496 // Do nothing. Skip readng. | 491 // Do nothing. Skip readng. |
| 497 } | 492 } |
| 498 }; | 493 }; |
| 499 callback.addWriteData("Test String".getBytes()); | 494 callback.addWriteData("Test String".getBytes()); |
| 500 callback.addWriteData("1234567890".getBytes()); | 495 callback.addWriteData("1234567890".getBytes()); |
| 501 callback.addWriteData("woot!".getBytes()); | 496 callback.addWriteData("woot!".getBytes()); |
| 502 BidirectionalStream stream = new BidirectionalStream | 497 BidirectionalStream stream = |
| 503 .Builder(url, callback, callback.ge
tExecutor(), | 498 mTestFramework.mCronetEngine |
| 504 mTestFramework.mCronetEngin
e) | 499 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
| 505 .addHeader("foo", "bar") | 500 .addHeader("foo", "bar") |
| 506 .addHeader("empty", "") | 501 .addHeader("empty", "") |
| 507 .addHeader("Content-Type", "zebra") | 502 .addHeader("Content-Type", "zebra") |
| 508 .build(); | 503 .build(); |
| 509 stream.start(); | 504 stream.start(); |
| 510 callback.blockForDone(); | 505 callback.blockForDone(); |
| 511 assertTrue(stream.isDone()); | 506 assertTrue(stream.isDone()); |
| 512 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 507 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 513 assertEquals("Test String1234567890woot!", callback.mResponseAsString); | 508 assertEquals("Test String1234567890woot!", callback.mResponseAsString); |
| 514 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo
").get(0)); | 509 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo
").get(0)); |
| 515 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty"
).get(0)); | 510 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty"
).get(0)); |
| 516 assertEquals( | 511 assertEquals( |
| 517 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten
t-type").get(0)); | 512 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten
t-type").get(0)); |
| 518 } | 513 } |
| (...skipping 13 matching lines...) Expand all Loading... |
| 532 startNextWrite(stream); | 527 startNextWrite(stream); |
| 533 assertEquals(0, numPendingWrites()); | 528 assertEquals(0, numPendingWrites()); |
| 534 } | 529 } |
| 535 }; | 530 }; |
| 536 callback.addWriteData("Test String".getBytes(), false); | 531 callback.addWriteData("Test String".getBytes(), false); |
| 537 callback.addWriteData("1234567890".getBytes(), false); | 532 callback.addWriteData("1234567890".getBytes(), false); |
| 538 callback.addWriteData("woot!".getBytes(), true); | 533 callback.addWriteData("woot!".getBytes(), true); |
| 539 callback.addWriteData("Test String".getBytes(), false); | 534 callback.addWriteData("Test String".getBytes(), false); |
| 540 callback.addWriteData("1234567890".getBytes(), false); | 535 callback.addWriteData("1234567890".getBytes(), false); |
| 541 callback.addWriteData("woot!".getBytes(), true); | 536 callback.addWriteData("woot!".getBytes(), true); |
| 542 BidirectionalStream stream = new BidirectionalStream | 537 BidirectionalStream stream = |
| 543 .Builder(url, callback, callback.ge
tExecutor(), | 538 mTestFramework.mCronetEngine |
| 544 mTestFramework.mCronetEngin
e) | 539 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
| 545 .addHeader("foo", "bar") | 540 .addHeader("foo", "bar") |
| 546 .addHeader("empty", "") | 541 .addHeader("empty", "") |
| 547 .addHeader("Content-Type", "zebra") | 542 .addHeader("Content-Type", "zebra") |
| 548 .build(); | 543 .build(); |
| 549 stream.start(); | 544 stream.start(); |
| 550 callback.blockForDone(); | 545 callback.blockForDone(); |
| 551 assertTrue(stream.isDone()); | 546 assertTrue(stream.isDone()); |
| 552 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 547 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 553 assertEquals( | 548 assertEquals( |
| 554 "Test String1234567890woot!Test String1234567890woot!", callback
.mResponseAsString); | 549 "Test String1234567890woot!Test String1234567890woot!", callback
.mResponseAsString); |
| 555 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo
").get(0)); | 550 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo
").get(0)); |
| 556 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty"
).get(0)); | 551 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty"
).get(0)); |
| 557 assertEquals( | 552 assertEquals( |
| 558 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten
t-type").get(0)); | 553 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten
t-type").get(0)); |
| 559 } | 554 } |
| 560 | 555 |
| 561 @SmallTest | 556 @SmallTest |
| 562 @Feature({"Cronet"}) | 557 @Feature({"Cronet"}) |
| 563 @OnlyRunNativeCronet | 558 @OnlyRunNativeCronet |
| 564 public void testSimplePut() throws Exception { | 559 public void testSimplePut() throws Exception { |
| 565 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 560 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 566 callback.addWriteData("Put This Data!".getBytes()); | 561 callback.addWriteData("Put This Data!".getBytes()); |
| 567 String methodName = "PUT"; | 562 String methodName = "PUT"; |
| 568 BidirectionalStream.Builder builder = | 563 BidirectionalStream.Builder builder = |
| 569 new BidirectionalStream.Builder(Http2TestServer.getServerUrl(),
callback, | 564 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 570 callback.getExecutor(), mTestFramework.mCronetEngine); | 565 Http2TestServer.getServerUrl(), callback, callback.getEx
ecutor()); |
| 571 builder.setHttpMethod(methodName); | 566 builder.setHttpMethod(methodName); |
| 572 builder.build().start(); | 567 builder.build().start(); |
| 573 callback.blockForDone(); | 568 callback.blockForDone(); |
| 574 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 569 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 575 assertEquals("Put This Data!", callback.mResponseAsString); | 570 assertEquals("Put This Data!", callback.mResponseAsString); |
| 576 assertEquals(methodName, callback.mResponseInfo.getAllHeaders().get("ech
o-method").get(0)); | 571 assertEquals(methodName, callback.mResponseInfo.getAllHeaders().get("ech
o-method").get(0)); |
| 577 } | 572 } |
| 578 | 573 |
| 579 @SmallTest | 574 @SmallTest |
| 580 @Feature({"Cronet"}) | 575 @Feature({"Cronet"}) |
| 581 @OnlyRunNativeCronet | 576 @OnlyRunNativeCronet |
| 582 public void testBadMethod() throws Exception { | 577 public void testBadMethod() throws Exception { |
| 583 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 578 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 584 BidirectionalStream.Builder builder = | 579 BidirectionalStream.Builder builder = |
| 585 new BidirectionalStream.Builder(Http2TestServer.getServerUrl(),
callback, | 580 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 586 callback.getExecutor(), mTestFramework.mCronetEngine); | 581 Http2TestServer.getServerUrl(), callback, callback.getEx
ecutor()); |
| 587 try { | 582 try { |
| 588 builder.setHttpMethod("bad:method!"); | 583 builder.setHttpMethod("bad:method!"); |
| 589 builder.build().start(); | 584 builder.build().start(); |
| 590 fail("IllegalArgumentException not thrown."); | 585 fail("IllegalArgumentException not thrown."); |
| 591 } catch (IllegalArgumentException e) { | 586 } catch (IllegalArgumentException e) { |
| 592 assertEquals("Invalid http method bad:method!", e.getMessage()); | 587 assertEquals("Invalid http method bad:method!", e.getMessage()); |
| 593 } | 588 } |
| 594 } | 589 } |
| 595 | 590 |
| 596 @SmallTest | 591 @SmallTest |
| 597 @Feature({"Cronet"}) | 592 @Feature({"Cronet"}) |
| 598 @OnlyRunNativeCronet | 593 @OnlyRunNativeCronet |
| 599 public void testBadHeaderName() throws Exception { | 594 public void testBadHeaderName() throws Exception { |
| 600 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 595 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 601 BidirectionalStream.Builder builder = | 596 BidirectionalStream.Builder builder = |
| 602 new BidirectionalStream.Builder(Http2TestServer.getServerUrl(),
callback, | 597 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 603 callback.getExecutor(), mTestFramework.mCronetEngine); | 598 Http2TestServer.getServerUrl(), callback, callback.getEx
ecutor()); |
| 604 try { | 599 try { |
| 605 builder.addHeader("goodheader1", "headervalue"); | 600 builder.addHeader("goodheader1", "headervalue"); |
| 606 builder.addHeader("header:name", "headervalue"); | 601 builder.addHeader("header:name", "headervalue"); |
| 607 builder.addHeader("goodheader2", "headervalue"); | 602 builder.addHeader("goodheader2", "headervalue"); |
| 608 builder.build().start(); | 603 builder.build().start(); |
| 609 fail("IllegalArgumentException not thrown."); | 604 fail("IllegalArgumentException not thrown."); |
| 610 } catch (IllegalArgumentException e) { | 605 } catch (IllegalArgumentException e) { |
| 611 assertEquals("Invalid header header:name=headervalue", e.getMessage(
)); | 606 assertEquals("Invalid header header:name=headervalue", e.getMessage(
)); |
| 612 } | 607 } |
| 613 } | 608 } |
| 614 | 609 |
| 615 @SmallTest | 610 @SmallTest |
| 616 @Feature({"Cronet"}) | 611 @Feature({"Cronet"}) |
| 617 @OnlyRunNativeCronet | 612 @OnlyRunNativeCronet |
| 618 public void testBadHeaderValue() throws Exception { | 613 public void testBadHeaderValue() throws Exception { |
| 619 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 614 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 620 BidirectionalStream.Builder builder = | 615 BidirectionalStream.Builder builder = |
| 621 new BidirectionalStream.Builder(Http2TestServer.getServerUrl(),
callback, | 616 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 622 callback.getExecutor(), mTestFramework.mCronetEngine); | 617 Http2TestServer.getServerUrl(), callback, callback.getEx
ecutor()); |
| 623 try { | 618 try { |
| 624 builder.addHeader("headername", "bad header\r\nvalue"); | 619 builder.addHeader("headername", "bad header\r\nvalue"); |
| 625 builder.build().start(); | 620 builder.build().start(); |
| 626 fail("IllegalArgumentException not thrown."); | 621 fail("IllegalArgumentException not thrown."); |
| 627 } catch (IllegalArgumentException e) { | 622 } catch (IllegalArgumentException e) { |
| 628 assertEquals("Invalid header headername=bad header\r\nvalue", e.getM
essage()); | 623 assertEquals("Invalid header headername=bad header\r\nvalue", e.getM
essage()); |
| 629 } | 624 } |
| 630 } | 625 } |
| 631 | 626 |
| 632 @SmallTest | 627 @SmallTest |
| 633 @Feature({"Cronet"}) | 628 @Feature({"Cronet"}) |
| 634 @OnlyRunNativeCronet | 629 @OnlyRunNativeCronet |
| 635 public void testAddHeader() throws Exception { | 630 public void testAddHeader() throws Exception { |
| 636 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 631 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 637 String headerName = "header-name"; | 632 String headerName = "header-name"; |
| 638 String headerValue = "header-value"; | 633 String headerValue = "header-value"; |
| 639 BidirectionalStream.Builder builder = | 634 BidirectionalStream.Builder builder = |
| 640 new BidirectionalStream.Builder(Http2TestServer.getEchoHeaderUrl
(headerName), | 635 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 641 callback, callback.getExecutor(), mTestFramework.mCronet
Engine); | 636 Http2TestServer.getEchoHeaderUrl(headerName), callback, |
| 637 callback.getExecutor()); |
| 642 builder.addHeader(headerName, headerValue); | 638 builder.addHeader(headerName, headerValue); |
| 643 builder.setHttpMethod("GET"); | 639 builder.setHttpMethod("GET"); |
| 644 builder.build().start(); | 640 builder.build().start(); |
| 645 callback.blockForDone(); | 641 callback.blockForDone(); |
| 646 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 642 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 647 assertEquals(headerValue, callback.mResponseAsString); | 643 assertEquals(headerValue, callback.mResponseAsString); |
| 648 } | 644 } |
| 649 | 645 |
| 650 @SmallTest | 646 @SmallTest |
| 651 @Feature({"Cronet"}) | 647 @Feature({"Cronet"}) |
| 652 @OnlyRunNativeCronet | 648 @OnlyRunNativeCronet |
| 653 public void testMultiRequestHeaders() throws Exception { | 649 public void testMultiRequestHeaders() throws Exception { |
| 654 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 650 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 655 String headerName = "header-name"; | 651 String headerName = "header-name"; |
| 656 String headerValue1 = "header-value1"; | 652 String headerValue1 = "header-value1"; |
| 657 String headerValue2 = "header-value2"; | 653 String headerValue2 = "header-value2"; |
| 658 BidirectionalStream.Builder builder = | 654 BidirectionalStream.Builder builder = |
| 659 new BidirectionalStream.Builder(Http2TestServer.getEchoAllHeader
sUrl(), callback, | 655 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 660 callback.getExecutor(), mTestFramework.mCronetEngine); | 656 Http2TestServer.getEchoAllHeadersUrl(), callback, callba
ck.getExecutor()); |
| 661 builder.addHeader(headerName, headerValue1); | 657 builder.addHeader(headerName, headerValue1); |
| 662 builder.addHeader(headerName, headerValue2); | 658 builder.addHeader(headerName, headerValue2); |
| 663 builder.setHttpMethod("GET"); | 659 builder.setHttpMethod("GET"); |
| 664 builder.build().start(); | 660 builder.build().start(); |
| 665 callback.blockForDone(); | 661 callback.blockForDone(); |
| 666 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 662 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 667 String headers = callback.mResponseAsString; | 663 String headers = callback.mResponseAsString; |
| 668 Pattern pattern = Pattern.compile(headerName + ":\\s(.*)\\r\\n"); | 664 Pattern pattern = Pattern.compile(headerName + ":\\s(.*)\\r\\n"); |
| 669 Matcher matcher = pattern.matcher(headers); | 665 Matcher matcher = pattern.matcher(headers); |
| 670 List<String> actualValues = new ArrayList<String>(); | 666 List<String> actualValues = new ArrayList<String>(); |
| 671 while (matcher.find()) { | 667 while (matcher.find()) { |
| 672 actualValues.add(matcher.group(1)); | 668 actualValues.add(matcher.group(1)); |
| 673 } | 669 } |
| 674 assertEquals(1, actualValues.size()); | 670 assertEquals(1, actualValues.size()); |
| 675 assertEquals("header-value2", actualValues.get(0)); | 671 assertEquals("header-value2", actualValues.get(0)); |
| 676 } | 672 } |
| 677 | 673 |
| 678 @SmallTest | 674 @SmallTest |
| 679 @Feature({"Cronet"}) | 675 @Feature({"Cronet"}) |
| 680 @OnlyRunNativeCronet | 676 @OnlyRunNativeCronet |
| 681 public void testEchoTrailers() throws Exception { | 677 public void testEchoTrailers() throws Exception { |
| 682 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 678 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 683 String headerName = "header-name"; | 679 String headerName = "header-name"; |
| 684 String headerValue = "header-value"; | 680 String headerValue = "header-value"; |
| 685 BidirectionalStream.Builder builder = | 681 BidirectionalStream.Builder builder = |
| 686 new BidirectionalStream.Builder(Http2TestServer.getEchoTrailersU
rl(), callback, | 682 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 687 callback.getExecutor(), mTestFramework.mCronetEngine); | 683 Http2TestServer.getEchoTrailersUrl(), callback, callback
.getExecutor()); |
| 688 builder.addHeader(headerName, headerValue); | 684 builder.addHeader(headerName, headerValue); |
| 689 builder.setHttpMethod("GET"); | 685 builder.setHttpMethod("GET"); |
| 690 builder.build().start(); | 686 builder.build().start(); |
| 691 callback.blockForDone(); | 687 callback.blockForDone(); |
| 692 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 688 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 693 assertNotNull(callback.mTrailers); | 689 assertNotNull(callback.mTrailers); |
| 694 // Verify that header value is properly echoed in trailers. | 690 // Verify that header value is properly echoed in trailers. |
| 695 assertEquals(headerValue, callback.mTrailers.getAsMap().get("echo-" + he
aderName).get(0)); | 691 assertEquals(headerValue, callback.mTrailers.getAsMap().get("echo-" + he
aderName).get(0)); |
| 696 } | 692 } |
| 697 | 693 |
| 698 @SmallTest | 694 @SmallTest |
| 699 @Feature({"Cronet"}) | 695 @Feature({"Cronet"}) |
| 700 @OnlyRunNativeCronet | 696 @OnlyRunNativeCronet |
| 701 public void testCustomUserAgent() throws Exception { | 697 public void testCustomUserAgent() throws Exception { |
| 702 String userAgentName = "User-Agent"; | 698 String userAgentName = "User-Agent"; |
| 703 String userAgentValue = "User-Agent-Value"; | 699 String userAgentValue = "User-Agent-Value"; |
| 704 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 700 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 705 BidirectionalStream.Builder builder = | 701 BidirectionalStream.Builder builder = |
| 706 new BidirectionalStream.Builder(Http2TestServer.getEchoHeaderUrl
(userAgentName), | 702 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 707 callback, callback.getExecutor(), mTestFramework.mCronet
Engine); | 703 Http2TestServer.getEchoHeaderUrl(userAgentName), callbac
k, |
| 704 callback.getExecutor()); |
| 708 builder.setHttpMethod("GET"); | 705 builder.setHttpMethod("GET"); |
| 709 builder.addHeader(userAgentName, userAgentValue); | 706 builder.addHeader(userAgentName, userAgentValue); |
| 710 builder.build().start(); | 707 builder.build().start(); |
| 711 callback.blockForDone(); | 708 callback.blockForDone(); |
| 712 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 709 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 713 assertEquals(userAgentValue, callback.mResponseAsString); | 710 assertEquals(userAgentValue, callback.mResponseAsString); |
| 714 } | 711 } |
| 715 | 712 |
| 716 @SmallTest | 713 @SmallTest |
| 717 @Feature({"Cronet"}) | 714 @Feature({"Cronet"}) |
| 718 @OnlyRunNativeCronet | 715 @OnlyRunNativeCronet |
| 719 public void testCustomCronetEngineUserAgent() throws Exception { | 716 public void testCustomCronetEngineUserAgent() throws Exception { |
| 720 String userAgentName = "User-Agent"; | 717 String userAgentName = "User-Agent"; |
| 721 String userAgentValue = "User-Agent-Value"; | 718 String userAgentValue = "User-Agent-Value"; |
| 722 CronetEngine engine = | 719 ExperimentalCronetEngine.Builder engineBuilder = |
| 723 new CronetEngine.Builder(getContext()) | 720 new ExperimentalCronetEngine.Builder(getContext()); |
| 724 .setMockCertVerifierForTesting(QuicTestServer.createMock
CertVerifier()) | 721 engineBuilder.setUserAgent(userAgentValue); |
| 725 .setUserAgent(userAgentValue) | 722 CronetTestUtil.setMockCertVerifierForTesting( |
| 726 .build(); | 723 engineBuilder, QuicTestServer.createMockCertVerifier()); |
| 724 ExperimentalCronetEngine engine = engineBuilder.build(); |
| 727 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 725 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 728 BidirectionalStream.Builder builder = | 726 BidirectionalStream.Builder builder = engine.newBidirectionalStreamBuild
er( |
| 729 new BidirectionalStream.Builder(Http2TestServer.getEchoHeaderUrl
(userAgentName), | 727 Http2TestServer.getEchoHeaderUrl(userAgentName), callback, callb
ack.getExecutor()); |
| 730 callback, callback.getExecutor(), engine); | |
| 731 builder.setHttpMethod("GET"); | 728 builder.setHttpMethod("GET"); |
| 732 builder.build().start(); | 729 builder.build().start(); |
| 733 callback.blockForDone(); | 730 callback.blockForDone(); |
| 734 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 731 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 735 assertEquals(userAgentValue, callback.mResponseAsString); | 732 assertEquals(userAgentValue, callback.mResponseAsString); |
| 736 } | 733 } |
| 737 | 734 |
| 738 @SmallTest | 735 @SmallTest |
| 739 @Feature({"Cronet"}) | 736 @Feature({"Cronet"}) |
| 740 @OnlyRunNativeCronet | 737 @OnlyRunNativeCronet |
| 741 public void testDefaultUserAgent() throws Exception { | 738 public void testDefaultUserAgent() throws Exception { |
| 742 String userAgentName = "User-Agent"; | 739 String userAgentName = "User-Agent"; |
| 743 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 740 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 744 BidirectionalStream.Builder builder = | 741 BidirectionalStream.Builder builder = |
| 745 new BidirectionalStream.Builder(Http2TestServer.getEchoHeaderUrl
(userAgentName), | 742 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 746 callback, callback.getExecutor(), mTestFramework.mCronet
Engine); | 743 Http2TestServer.getEchoHeaderUrl(userAgentName), callbac
k, |
| 744 callback.getExecutor()); |
| 747 builder.setHttpMethod("GET"); | 745 builder.setHttpMethod("GET"); |
| 748 builder.build().start(); | 746 builder.build().start(); |
| 749 callback.blockForDone(); | 747 callback.blockForDone(); |
| 750 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 748 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 751 assertEquals(new CronetEngine.Builder(getContext()).getDefaultUserAgent(
), | 749 assertEquals(new CronetEngine.Builder(getContext()).getDefaultUserAgent(
), |
| 752 callback.mResponseAsString); | 750 callback.mResponseAsString); |
| 753 } | 751 } |
| 754 | 752 |
| 755 @SmallTest | 753 @SmallTest |
| 756 @Feature({"Cronet"}) | 754 @Feature({"Cronet"}) |
| 757 @OnlyRunNativeCronet | 755 @OnlyRunNativeCronet |
| 758 public void testEchoStream() throws Exception { | 756 public void testEchoStream() throws Exception { |
| 759 String url = Http2TestServer.getEchoStreamUrl(); | 757 String url = Http2TestServer.getEchoStreamUrl(); |
| 760 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 758 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 761 String[] testData = {"Test String", createLongString("1234567890", 50000
), "woot!"}; | 759 String[] testData = {"Test String", createLongString("1234567890", 50000
), "woot!"}; |
| 762 StringBuilder stringData = new StringBuilder(); | 760 StringBuilder stringData = new StringBuilder(); |
| 763 for (String writeData : testData) { | 761 for (String writeData : testData) { |
| 764 callback.addWriteData(writeData.getBytes()); | 762 callback.addWriteData(writeData.getBytes()); |
| 765 stringData.append(writeData); | 763 stringData.append(writeData); |
| 766 } | 764 } |
| 767 // Create stream. | 765 // Create stream. |
| 768 BidirectionalStream stream = new BidirectionalStream | 766 BidirectionalStream stream = |
| 769 .Builder(url, callback, callback.ge
tExecutor(), | 767 mTestFramework.mCronetEngine |
| 770 mTestFramework.mCronetEngin
e) | 768 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
| 771 .addHeader("foo", "Value with Space
s") | 769 .addHeader("foo", "Value with Spaces") |
| 772 .addHeader("Content-Type", "zebra") | 770 .addHeader("Content-Type", "zebra") |
| 773 .build(); | 771 .build(); |
| 774 stream.start(); | 772 stream.start(); |
| 775 callback.blockForDone(); | 773 callback.blockForDone(); |
| 776 assertTrue(stream.isDone()); | 774 assertTrue(stream.isDone()); |
| 777 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 775 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 778 assertEquals(stringData.toString(), callback.mResponseAsString); | 776 assertEquals(stringData.toString(), callback.mResponseAsString); |
| 779 assertEquals( | 777 assertEquals( |
| 780 "Value with Spaces", callback.mResponseInfo.getAllHeaders().get(
"echo-foo").get(0)); | 778 "Value with Spaces", callback.mResponseInfo.getAllHeaders().get(
"echo-foo").get(0)); |
| 781 assertEquals( | 779 assertEquals( |
| 782 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten
t-type").get(0)); | 780 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten
t-type").get(0)); |
| 783 } | 781 } |
| 784 | 782 |
| 785 @SmallTest | 783 @SmallTest |
| 786 @Feature({"Cronet"}) | 784 @Feature({"Cronet"}) |
| 787 @OnlyRunNativeCronet | 785 @OnlyRunNativeCronet |
| 788 public void testEchoStreamEmptyWrite() throws Exception { | 786 public void testEchoStreamEmptyWrite() throws Exception { |
| 789 String url = Http2TestServer.getEchoStreamUrl(); | 787 String url = Http2TestServer.getEchoStreamUrl(); |
| 790 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 788 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 791 callback.addWriteData(new byte[0]); | 789 callback.addWriteData(new byte[0]); |
| 792 // Create stream. | 790 // Create stream. |
| 793 BidirectionalStream stream = new BidirectionalStream | 791 BidirectionalStream stream = |
| 794 .Builder(url, callback, callback.ge
tExecutor(), | 792 mTestFramework.mCronetEngine |
| 795 mTestFramework.mCronetEngin
e) | 793 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
| 796 .build(); | 794 .build(); |
| 797 stream.start(); | 795 stream.start(); |
| 798 callback.blockForDone(); | 796 callback.blockForDone(); |
| 799 assertTrue(stream.isDone()); | 797 assertTrue(stream.isDone()); |
| 800 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 798 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 801 assertEquals("", callback.mResponseAsString); | 799 assertEquals("", callback.mResponseAsString); |
| 802 } | 800 } |
| 803 | 801 |
| 804 @SmallTest | 802 @SmallTest |
| 805 @Feature({"Cronet"}) | 803 @Feature({"Cronet"}) |
| 806 @OnlyRunNativeCronet | 804 @OnlyRunNativeCronet |
| 807 public void testDoubleWrite() throws Exception { | 805 public void testDoubleWrite() throws Exception { |
| 808 String url = Http2TestServer.getEchoStreamUrl(); | 806 String url = Http2TestServer.getEchoStreamUrl(); |
| 809 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback() { | 807 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback() { |
| 810 @Override | 808 @Override |
| 811 public void onStreamReady(BidirectionalStream stream) { | 809 public void onStreamReady(BidirectionalStream stream) { |
| 812 // super class will call Write() once. | 810 // super class will call Write() once. |
| 813 super.onStreamReady(stream); | 811 super.onStreamReady(stream); |
| 814 // Call Write() again. | 812 // Call Write() again. |
| 815 startNextWrite(stream); | 813 startNextWrite(stream); |
| 816 // Make sure there is no pending write. | 814 // Make sure there is no pending write. |
| 817 assertEquals(0, numPendingWrites()); | 815 assertEquals(0, numPendingWrites()); |
| 818 } | 816 } |
| 819 }; | 817 }; |
| 820 callback.addWriteData("1".getBytes()); | 818 callback.addWriteData("1".getBytes()); |
| 821 callback.addWriteData("2".getBytes()); | 819 callback.addWriteData("2".getBytes()); |
| 822 // Create stream. | 820 // Create stream. |
| 823 BidirectionalStream stream = new BidirectionalStream | 821 BidirectionalStream stream = |
| 824 .Builder(url, callback, callback.ge
tExecutor(), | 822 mTestFramework.mCronetEngine |
| 825 mTestFramework.mCronetEngin
e) | 823 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
| 826 .build(); | 824 .build(); |
| 827 stream.start(); | 825 stream.start(); |
| 828 callback.blockForDone(); | 826 callback.blockForDone(); |
| 829 assertTrue(stream.isDone()); | 827 assertTrue(stream.isDone()); |
| 830 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 828 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 831 assertEquals("12", callback.mResponseAsString); | 829 assertEquals("12", callback.mResponseAsString); |
| 832 } | 830 } |
| 833 | 831 |
| 834 @SmallTest | 832 @SmallTest |
| 835 @Feature({"Cronet"}) | 833 @Feature({"Cronet"}) |
| 836 @OnlyRunNativeCronet | 834 @OnlyRunNativeCronet |
| (...skipping 11 matching lines...) Expand all Loading... |
| 848 stream.read(ByteBuffer.allocateDirect(5)); | 846 stream.read(ByteBuffer.allocateDirect(5)); |
| 849 fail("Exception is not thrown."); | 847 fail("Exception is not thrown."); |
| 850 } catch (Exception e) { | 848 } catch (Exception e) { |
| 851 assertEquals("Unexpected read attempt.", e.getMessage()); | 849 assertEquals("Unexpected read attempt.", e.getMessage()); |
| 852 } | 850 } |
| 853 } | 851 } |
| 854 }; | 852 }; |
| 855 callback.addWriteData("1".getBytes()); | 853 callback.addWriteData("1".getBytes()); |
| 856 callback.addWriteData("2".getBytes()); | 854 callback.addWriteData("2".getBytes()); |
| 857 // Create stream. | 855 // Create stream. |
| 858 BidirectionalStream stream = new BidirectionalStream | 856 BidirectionalStream stream = |
| 859 .Builder(url, callback, callback.ge
tExecutor(), | 857 mTestFramework.mCronetEngine |
| 860 mTestFramework.mCronetEngin
e) | 858 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
| 861 .build(); | 859 .build(); |
| 862 stream.start(); | 860 stream.start(); |
| 863 callback.blockForDone(); | 861 callback.blockForDone(); |
| 864 assertTrue(stream.isDone()); | 862 assertTrue(stream.isDone()); |
| 865 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 863 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 866 assertEquals("12", callback.mResponseAsString); | 864 assertEquals("12", callback.mResponseAsString); |
| 867 } | 865 } |
| 868 | 866 |
| 869 @SmallTest | 867 @SmallTest |
| 870 @Feature({"Cronet"}) | 868 @Feature({"Cronet"}) |
| 871 @OnlyRunNativeCronet | 869 @OnlyRunNativeCronet |
| 872 @DisabledTest(message = "Disabled due to timeout. See crbug.com/591112") | 870 @DisabledTest(message = "Disabled due to timeout. See crbug.com/591112") |
| 873 public void testReadAndWrite() throws Exception { | 871 public void testReadAndWrite() throws Exception { |
| 874 String url = Http2TestServer.getEchoStreamUrl(); | 872 String url = Http2TestServer.getEchoStreamUrl(); |
| 875 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback() { | 873 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback() { |
| 876 @Override | 874 @Override |
| 877 public void onResponseHeadersReceived( | 875 public void onResponseHeadersReceived( |
| 878 BidirectionalStream stream, UrlResponseInfo info) { | 876 BidirectionalStream stream, UrlResponseInfo info) { |
| 879 // Start the write, that will not complete until callback comple
tion. | 877 // Start the write, that will not complete until callback comple
tion. |
| 880 startNextWrite(stream); | 878 startNextWrite(stream); |
| 881 // Start the read. It is allowed with write in flight. | 879 // Start the read. It is allowed with write in flight. |
| 882 super.onResponseHeadersReceived(stream, info); | 880 super.onResponseHeadersReceived(stream, info); |
| 883 } | 881 } |
| 884 }; | 882 }; |
| 885 callback.setAutoAdvance(false); | 883 callback.setAutoAdvance(false); |
| 886 callback.addWriteData("1".getBytes()); | 884 callback.addWriteData("1".getBytes()); |
| 887 callback.addWriteData("2".getBytes()); | 885 callback.addWriteData("2".getBytes()); |
| 888 // Create stream. | 886 // Create stream. |
| 889 BidirectionalStream stream = new BidirectionalStream | 887 BidirectionalStream stream = |
| 890 .Builder(url, callback, callback.ge
tExecutor(), | 888 mTestFramework.mCronetEngine |
| 891 mTestFramework.mCronetEngin
e) | 889 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
| 892 .build(); | 890 .build(); |
| 893 stream.start(); | 891 stream.start(); |
| 894 callback.waitForNextWriteStep(); | 892 callback.waitForNextWriteStep(); |
| 895 callback.waitForNextReadStep(); | 893 callback.waitForNextReadStep(); |
| 896 callback.startNextRead(stream); | 894 callback.startNextRead(stream); |
| 897 callback.setAutoAdvance(true); | 895 callback.setAutoAdvance(true); |
| 898 callback.blockForDone(); | 896 callback.blockForDone(); |
| 899 assertTrue(stream.isDone()); | 897 assertTrue(stream.isDone()); |
| 900 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 898 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 901 assertEquals("12", callback.mResponseAsString); | 899 assertEquals("12", callback.mResponseAsString); |
| 902 } | 900 } |
| 903 | 901 |
| 904 @SmallTest | 902 @SmallTest |
| 905 @Feature({"Cronet"}) | 903 @Feature({"Cronet"}) |
| 906 @OnlyRunNativeCronet | 904 @OnlyRunNativeCronet |
| 907 public void testEchoStreamWriteFirst() throws Exception { | 905 public void testEchoStreamWriteFirst() throws Exception { |
| 908 String url = Http2TestServer.getEchoStreamUrl(); | 906 String url = Http2TestServer.getEchoStreamUrl(); |
| 909 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 907 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 910 callback.setAutoAdvance(false); | 908 callback.setAutoAdvance(false); |
| 911 String[] testData = {"a", "bb", "ccc", "Test String", "1234567890", "woo
t!"}; | 909 String[] testData = {"a", "bb", "ccc", "Test String", "1234567890", "woo
t!"}; |
| 912 StringBuilder stringData = new StringBuilder(); | 910 StringBuilder stringData = new StringBuilder(); |
| 913 for (String writeData : testData) { | 911 for (String writeData : testData) { |
| 914 callback.addWriteData(writeData.getBytes()); | 912 callback.addWriteData(writeData.getBytes()); |
| 915 stringData.append(writeData); | 913 stringData.append(writeData); |
| 916 } | 914 } |
| 917 // Create stream. | 915 // Create stream. |
| 918 BidirectionalStream stream = new BidirectionalStream | 916 BidirectionalStream stream = |
| 919 .Builder(url, callback, callback.ge
tExecutor(), | 917 mTestFramework.mCronetEngine |
| 920 mTestFramework.mCronetEngin
e) | 918 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
| 921 .build(); | 919 .build(); |
| 922 stream.start(); | 920 stream.start(); |
| 923 // Write first. | 921 // Write first. |
| 924 callback.waitForNextWriteStep(); // onStreamReady | 922 callback.waitForNextWriteStep(); // onStreamReady |
| 925 for (String expected : testData) { | 923 for (String expected : testData) { |
| 926 // Write next chunk of test data. | 924 // Write next chunk of test data. |
| 927 callback.startNextWrite(stream); | 925 callback.startNextWrite(stream); |
| 928 callback.waitForNextWriteStep(); // onWriteCompleted | 926 callback.waitForNextWriteStep(); // onWriteCompleted |
| 929 } | 927 } |
| 930 | 928 |
| 931 // Wait for read step, but don't read yet. | 929 // Wait for read step, but don't read yet. |
| (...skipping 21 matching lines...) Expand all Loading... |
| 953 String url = Http2TestServer.getEchoStreamUrl(); | 951 String url = Http2TestServer.getEchoStreamUrl(); |
| 954 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 952 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 955 callback.setAutoAdvance(false); | 953 callback.setAutoAdvance(false); |
| 956 String[] testData = {"a", "bb", "ccc", "Test String", "1234567890", "woo
t!"}; | 954 String[] testData = {"a", "bb", "ccc", "Test String", "1234567890", "woo
t!"}; |
| 957 StringBuilder stringData = new StringBuilder(); | 955 StringBuilder stringData = new StringBuilder(); |
| 958 for (String writeData : testData) { | 956 for (String writeData : testData) { |
| 959 callback.addWriteData(writeData.getBytes()); | 957 callback.addWriteData(writeData.getBytes()); |
| 960 stringData.append(writeData); | 958 stringData.append(writeData); |
| 961 } | 959 } |
| 962 // Create stream. | 960 // Create stream. |
| 963 BidirectionalStream stream = new BidirectionalStream | 961 BidirectionalStream stream = |
| 964 .Builder(url, callback, callback.ge
tExecutor(), | 962 mTestFramework.mCronetEngine |
| 965 mTestFramework.mCronetEngin
e) | 963 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
| 966 .build(); | 964 .build(); |
| 967 stream.start(); | 965 stream.start(); |
| 968 callback.waitForNextWriteStep(); | 966 callback.waitForNextWriteStep(); |
| 969 callback.waitForNextReadStep(); | 967 callback.waitForNextReadStep(); |
| 970 | 968 |
| 971 for (String expected : testData) { | 969 for (String expected : testData) { |
| 972 // Write next chunk of test data. | 970 // Write next chunk of test data. |
| 973 callback.startNextWrite(stream); | 971 callback.startNextWrite(stream); |
| 974 callback.waitForNextWriteStep(); | 972 callback.waitForNextWriteStep(); |
| 975 | 973 |
| 976 // Read next chunk of test data. | 974 // Read next chunk of test data. |
| (...skipping 16 matching lines...) Expand all Loading... |
| 993 * Checks that the buffer is updated correctly, when starting at an offset. | 991 * Checks that the buffer is updated correctly, when starting at an offset. |
| 994 */ | 992 */ |
| 995 @SmallTest | 993 @SmallTest |
| 996 @Feature({"Cronet"}) | 994 @Feature({"Cronet"}) |
| 997 @OnlyRunNativeCronet | 995 @OnlyRunNativeCronet |
| 998 public void testSimpleGetBufferUpdates() throws Exception { | 996 public void testSimpleGetBufferUpdates() throws Exception { |
| 999 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 997 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 1000 callback.setAutoAdvance(false); | 998 callback.setAutoAdvance(false); |
| 1001 // Since the method is "GET", the expected response body is also "GET". | 999 // Since the method is "GET", the expected response body is also "GET". |
| 1002 BidirectionalStream.Builder builder = | 1000 BidirectionalStream.Builder builder = |
| 1003 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl
(), callback, | 1001 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 1004 callback.getExecutor(), mTestFramework.mCronetEngine); | 1002 Http2TestServer.getEchoMethodUrl(), callback, callback.g
etExecutor()); |
| 1005 BidirectionalStream stream = builder.setHttpMethod("GET").build(); | 1003 BidirectionalStream stream = builder.setHttpMethod("GET").build(); |
| 1006 stream.start(); | 1004 stream.start(); |
| 1007 callback.waitForNextReadStep(); | 1005 callback.waitForNextReadStep(); |
| 1008 | 1006 |
| 1009 assertEquals(null, callback.mError); | 1007 assertEquals(null, callback.mError); |
| 1010 assertFalse(callback.isDone()); | 1008 assertFalse(callback.isDone()); |
| 1011 assertEquals(TestBidirectionalStreamCallback.ResponseStep.ON_RESPONSE_ST
ARTED, | 1009 assertEquals(TestBidirectionalStreamCallback.ResponseStep.ON_RESPONSE_ST
ARTED, |
| 1012 callback.mResponseStep); | 1010 callback.mResponseStep); |
| 1013 | 1011 |
| 1014 ByteBuffer readBuffer = ByteBuffer.allocateDirect(5); | 1012 ByteBuffer readBuffer = ByteBuffer.allocateDirect(5); |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1086 runSimpleGetWithExpectedReceivedBytesCount(27); | 1084 runSimpleGetWithExpectedReceivedBytesCount(27); |
| 1087 } | 1085 } |
| 1088 | 1086 |
| 1089 @SmallTest | 1087 @SmallTest |
| 1090 @Feature({"Cronet"}) | 1088 @Feature({"Cronet"}) |
| 1091 @OnlyRunNativeCronet | 1089 @OnlyRunNativeCronet |
| 1092 public void testBadBuffers() throws Exception { | 1090 public void testBadBuffers() throws Exception { |
| 1093 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 1091 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 1094 callback.setAutoAdvance(false); | 1092 callback.setAutoAdvance(false); |
| 1095 BidirectionalStream.Builder builder = | 1093 BidirectionalStream.Builder builder = |
| 1096 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl
(), callback, | 1094 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 1097 callback.getExecutor(), mTestFramework.mCronetEngine); | 1095 Http2TestServer.getEchoMethodUrl(), callback, callback.g
etExecutor()); |
| 1098 BidirectionalStream stream = builder.setHttpMethod("GET").build(); | 1096 BidirectionalStream stream = builder.setHttpMethod("GET").build(); |
| 1099 stream.start(); | 1097 stream.start(); |
| 1100 callback.waitForNextReadStep(); | 1098 callback.waitForNextReadStep(); |
| 1101 | 1099 |
| 1102 assertEquals(null, callback.mError); | 1100 assertEquals(null, callback.mError); |
| 1103 assertFalse(callback.isDone()); | 1101 assertFalse(callback.isDone()); |
| 1104 assertEquals(TestBidirectionalStreamCallback.ResponseStep.ON_RESPONSE_ST
ARTED, | 1102 assertEquals(TestBidirectionalStreamCallback.ResponseStep.ON_RESPONSE_ST
ARTED, |
| 1105 callback.mResponseStep); | 1103 callback.mResponseStep); |
| 1106 | 1104 |
| 1107 // Try to read using a full buffer. | 1105 // Try to read using a full buffer. |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1130 callback.blockForDone(); | 1128 callback.blockForDone(); |
| 1131 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 1129 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 1132 assertEquals("GET", callback.mResponseAsString); | 1130 assertEquals("GET", callback.mResponseAsString); |
| 1133 } | 1131 } |
| 1134 | 1132 |
| 1135 private void throwOrCancel( | 1133 private void throwOrCancel( |
| 1136 FailureType failureType, ResponseStep failureStep, boolean expectErr
or) { | 1134 FailureType failureType, ResponseStep failureStep, boolean expectErr
or) { |
| 1137 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 1135 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 1138 callback.setFailure(failureType, failureStep); | 1136 callback.setFailure(failureType, failureStep); |
| 1139 BidirectionalStream.Builder builder = | 1137 BidirectionalStream.Builder builder = |
| 1140 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl
(), callback, | 1138 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 1141 callback.getExecutor(), mTestFramework.mCronetEngine); | 1139 Http2TestServer.getEchoMethodUrl(), callback, callback.g
etExecutor()); |
| 1142 BidirectionalStream stream = builder.setHttpMethod("GET").build(); | 1140 BidirectionalStream stream = builder.setHttpMethod("GET").build(); |
| 1143 stream.start(); | 1141 stream.start(); |
| 1144 callback.blockForDone(); | 1142 callback.blockForDone(); |
| 1145 // assertEquals(callback.mResponseStep, failureStep); | 1143 // assertEquals(callback.mResponseStep, failureStep); |
| 1146 assertTrue(stream.isDone()); | 1144 assertTrue(stream.isDone()); |
| 1147 // Cancellation when stream is ready does not guarantee that | 1145 // Cancellation when stream is ready does not guarantee that |
| 1148 // mResponseInfo is null because there might be a | 1146 // mResponseInfo is null because there might be a |
| 1149 // onResponseHeadersReceived already queued in the executor. | 1147 // onResponseHeadersReceived already queued in the executor. |
| 1150 // See crbug.com/594432. | 1148 // See crbug.com/594432. |
| 1151 if (failureStep != ResponseStep.ON_STREAM_READY) { | 1149 if (failureStep != ResponseStep.ON_STREAM_READY) { |
| (...skipping 29 matching lines...) Expand all Loading... |
| 1181 throwOrCancel(FailureType.THROW_SYNC, ResponseStep.ON_READ_COMPLETED, tr
ue); | 1179 throwOrCancel(FailureType.THROW_SYNC, ResponseStep.ON_READ_COMPLETED, tr
ue); |
| 1182 } | 1180 } |
| 1183 | 1181 |
| 1184 @SmallTest | 1182 @SmallTest |
| 1185 @Feature({"Cronet"}) | 1183 @Feature({"Cronet"}) |
| 1186 @OnlyRunNativeCronet | 1184 @OnlyRunNativeCronet |
| 1187 public void testThrowOnSucceeded() { | 1185 public void testThrowOnSucceeded() { |
| 1188 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 1186 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 1189 callback.setFailure(FailureType.THROW_SYNC, ResponseStep.ON_SUCCEEDED); | 1187 callback.setFailure(FailureType.THROW_SYNC, ResponseStep.ON_SUCCEEDED); |
| 1190 BidirectionalStream.Builder builder = | 1188 BidirectionalStream.Builder builder = |
| 1191 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl
(), callback, | 1189 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 1192 callback.getExecutor(), mTestFramework.mCronetEngine); | 1190 Http2TestServer.getEchoMethodUrl(), callback, callback.g
etExecutor()); |
| 1193 BidirectionalStream stream = builder.setHttpMethod("GET").build(); | 1191 BidirectionalStream stream = builder.setHttpMethod("GET").build(); |
| 1194 stream.start(); | 1192 stream.start(); |
| 1195 callback.blockForDone(); | 1193 callback.blockForDone(); |
| 1196 assertEquals(callback.mResponseStep, ResponseStep.ON_SUCCEEDED); | 1194 assertEquals(callback.mResponseStep, ResponseStep.ON_SUCCEEDED); |
| 1197 assertTrue(stream.isDone()); | 1195 assertTrue(stream.isDone()); |
| 1198 assertNotNull(callback.mResponseInfo); | 1196 assertNotNull(callback.mResponseInfo); |
| 1199 // Check that error thrown from 'onSucceeded' callback is not reported. | 1197 // Check that error thrown from 'onSucceeded' callback is not reported. |
| 1200 assertNull(callback.mError); | 1198 assertNull(callback.mError); |
| 1201 assertFalse(callback.mOnErrorCalled); | 1199 assertFalse(callback.mOnErrorCalled); |
| 1202 } | 1200 } |
| 1203 | 1201 |
| 1204 @SmallTest | 1202 @SmallTest |
| 1205 @Feature({"Cronet"}) | 1203 @Feature({"Cronet"}) |
| 1206 @OnlyRunNativeCronet | 1204 @OnlyRunNativeCronet |
| 1207 public void testExecutorShutdownBeforeStreamIsDone() { | 1205 public void testExecutorShutdownBeforeStreamIsDone() { |
| 1208 // Test that stream is destroyed even if executor is shut down and rejec
ts posting tasks. | 1206 // Test that stream is destroyed even if executor is shut down and rejec
ts posting tasks. |
| 1209 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 1207 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 1210 callback.setAutoAdvance(false); | 1208 callback.setAutoAdvance(false); |
| 1211 BidirectionalStream.Builder builder = | 1209 BidirectionalStream.Builder builder = |
| 1212 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl
(), callback, | 1210 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 1213 callback.getExecutor(), mTestFramework.mCronetEngine); | 1211 Http2TestServer.getEchoMethodUrl(), callback, callback.g
etExecutor()); |
| 1214 CronetBidirectionalStream stream = | 1212 CronetBidirectionalStream stream = |
| 1215 (CronetBidirectionalStream) builder.setHttpMethod("GET").build()
; | 1213 (CronetBidirectionalStream) builder.setHttpMethod("GET").build()
; |
| 1216 stream.start(); | 1214 stream.start(); |
| 1217 callback.waitForNextReadStep(); | 1215 callback.waitForNextReadStep(); |
| 1218 assertFalse(callback.isDone()); | 1216 assertFalse(callback.isDone()); |
| 1219 assertFalse(stream.isDone()); | 1217 assertFalse(stream.isDone()); |
| 1220 | 1218 |
| 1221 final ConditionVariable streamDestroyed = new ConditionVariable(false); | 1219 final ConditionVariable streamDestroyed = new ConditionVariable(false); |
| 1222 stream.setOnDestroyedCallbackForTesting(new Runnable() { | 1220 stream.setOnDestroyedCallbackForTesting(new Runnable() { |
| 1223 @Override | 1221 @Override |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1272 @SmallTest | 1270 @SmallTest |
| 1273 @Feature({"Cronet"}) | 1271 @Feature({"Cronet"}) |
| 1274 @OnlyRunNativeCronet | 1272 @OnlyRunNativeCronet |
| 1275 public void testCronetEngineShutdown() throws Exception { | 1273 public void testCronetEngineShutdown() throws Exception { |
| 1276 // Test that CronetEngine cannot be shut down if there are any active st
reams. | 1274 // Test that CronetEngine cannot be shut down if there are any active st
reams. |
| 1277 TestBidirectionalStreamCallback callback = new ShutdownTestBidirectional
StreamCallback(); | 1275 TestBidirectionalStreamCallback callback = new ShutdownTestBidirectional
StreamCallback(); |
| 1278 // Block callback when response starts to verify that shutdown fails | 1276 // Block callback when response starts to verify that shutdown fails |
| 1279 // if there are active streams. | 1277 // if there are active streams. |
| 1280 callback.setAutoAdvance(false); | 1278 callback.setAutoAdvance(false); |
| 1281 BidirectionalStream.Builder builder = | 1279 BidirectionalStream.Builder builder = |
| 1282 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl
(), callback, | 1280 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 1283 callback.getExecutor(), mTestFramework.mCronetEngine); | 1281 Http2TestServer.getEchoMethodUrl(), callback, callback.g
etExecutor()); |
| 1284 CronetBidirectionalStream stream = | 1282 CronetBidirectionalStream stream = |
| 1285 (CronetBidirectionalStream) builder.setHttpMethod("GET").build()
; | 1283 (CronetBidirectionalStream) builder.setHttpMethod("GET").build()
; |
| 1286 stream.start(); | 1284 stream.start(); |
| 1287 try { | 1285 try { |
| 1288 mTestFramework.mCronetEngine.shutdown(); | 1286 mTestFramework.mCronetEngine.shutdown(); |
| 1289 fail("Should throw an exception"); | 1287 fail("Should throw an exception"); |
| 1290 } catch (Exception e) { | 1288 } catch (Exception e) { |
| 1291 assertEquals("Cannot shutdown with active requests.", e.getMessage()
); | 1289 assertEquals("Cannot shutdown with active requests.", e.getMessage()
); |
| 1292 } | 1290 } |
| 1293 | 1291 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 1317 callback.blockForDone(); | 1315 callback.blockForDone(); |
| 1318 } | 1316 } |
| 1319 | 1317 |
| 1320 @SmallTest | 1318 @SmallTest |
| 1321 @Feature({"Cronet"}) | 1319 @Feature({"Cronet"}) |
| 1322 @OnlyRunNativeCronet | 1320 @OnlyRunNativeCronet |
| 1323 public void testCronetEngineShutdownAfterStreamFailure() throws Exception { | 1321 public void testCronetEngineShutdownAfterStreamFailure() throws Exception { |
| 1324 // Test that CronetEngine can be shut down after stream reports a failur
e. | 1322 // Test that CronetEngine can be shut down after stream reports a failur
e. |
| 1325 TestBidirectionalStreamCallback callback = new ShutdownTestBidirectional
StreamCallback(); | 1323 TestBidirectionalStreamCallback callback = new ShutdownTestBidirectional
StreamCallback(); |
| 1326 BidirectionalStream.Builder builder = | 1324 BidirectionalStream.Builder builder = |
| 1327 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl
(), callback, | 1325 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 1328 callback.getExecutor(), mTestFramework.mCronetEngine); | 1326 Http2TestServer.getEchoMethodUrl(), callback, callback.g
etExecutor()); |
| 1329 CronetBidirectionalStream stream = | 1327 CronetBidirectionalStream stream = |
| 1330 (CronetBidirectionalStream) builder.setHttpMethod("GET").build()
; | 1328 (CronetBidirectionalStream) builder.setHttpMethod("GET").build()
; |
| 1331 stream.start(); | 1329 stream.start(); |
| 1332 callback.setFailure(FailureType.THROW_SYNC, ResponseStep.ON_READ_COMPLET
ED); | 1330 callback.setFailure(FailureType.THROW_SYNC, ResponseStep.ON_READ_COMPLET
ED); |
| 1333 callback.blockForDone(); | 1331 callback.blockForDone(); |
| 1334 assertTrue(callback.mOnErrorCalled); | 1332 assertTrue(callback.mOnErrorCalled); |
| 1335 assertNull(mTestFramework.mCronetEngine); | 1333 assertNull(mTestFramework.mCronetEngine); |
| 1336 } | 1334 } |
| 1337 | 1335 |
| 1338 @SmallTest | 1336 @SmallTest |
| 1339 @Feature({"Cronet"}) | 1337 @Feature({"Cronet"}) |
| 1340 @OnlyRunNativeCronet | 1338 @OnlyRunNativeCronet |
| 1341 public void testCronetEngineShutdownAfterStreamCancel() throws Exception { | 1339 public void testCronetEngineShutdownAfterStreamCancel() throws Exception { |
| 1342 // Test that CronetEngine can be shut down after stream is canceled. | 1340 // Test that CronetEngine can be shut down after stream is canceled. |
| 1343 TestBidirectionalStreamCallback callback = new ShutdownTestBidirectional
StreamCallback(); | 1341 TestBidirectionalStreamCallback callback = new ShutdownTestBidirectional
StreamCallback(); |
| 1344 BidirectionalStream.Builder builder = | 1342 BidirectionalStream.Builder builder = |
| 1345 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl
(), callback, | 1343 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 1346 callback.getExecutor(), mTestFramework.mCronetEngine); | 1344 Http2TestServer.getEchoMethodUrl(), callback, callback.g
etExecutor()); |
| 1347 CronetBidirectionalStream stream = | 1345 CronetBidirectionalStream stream = |
| 1348 (CronetBidirectionalStream) builder.setHttpMethod("GET").build()
; | 1346 (CronetBidirectionalStream) builder.setHttpMethod("GET").build()
; |
| 1349 | 1347 |
| 1350 // Block callback when response starts to verify that shutdown fails | 1348 // Block callback when response starts to verify that shutdown fails |
| 1351 // if there are active requests. | 1349 // if there are active requests. |
| 1352 callback.setAutoAdvance(false); | 1350 callback.setAutoAdvance(false); |
| 1353 stream.start(); | 1351 stream.start(); |
| 1354 try { | 1352 try { |
| 1355 mTestFramework.mCronetEngine.shutdown(); | 1353 mTestFramework.mCronetEngine.shutdown(); |
| 1356 fail("Should throw an exception"); | 1354 fail("Should throw an exception"); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1370 private static String bufferContentsToString(ByteBuffer byteBuffer, int star
t, int end) { | 1368 private static String bufferContentsToString(ByteBuffer byteBuffer, int star
t, int end) { |
| 1371 // Use a duplicate to avoid modifying byteBuffer. | 1369 // Use a duplicate to avoid modifying byteBuffer. |
| 1372 ByteBuffer duplicate = byteBuffer.duplicate(); | 1370 ByteBuffer duplicate = byteBuffer.duplicate(); |
| 1373 duplicate.position(start); | 1371 duplicate.position(start); |
| 1374 duplicate.limit(end); | 1372 duplicate.limit(end); |
| 1375 byte[] contents = new byte[duplicate.remaining()]; | 1373 byte[] contents = new byte[duplicate.remaining()]; |
| 1376 duplicate.get(contents); | 1374 duplicate.get(contents); |
| 1377 return new String(contents); | 1375 return new String(contents); |
| 1378 } | 1376 } |
| 1379 } | 1377 } |
| OLD | NEW |