| 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 MetricsTestUtil.checkRequestFinishedInfo(finishedInfo, url, startTime, e
ndTime); | 263 MetricsTestUtil.checkRequestFinishedInfo(finishedInfo, url, startTime, e
ndTime); |
| 250 assertEquals(RequestFinishedInfo.SUCCEEDED, finishedInfo.getFinishedReas
on()); | 264 assertEquals(RequestFinishedInfo.SUCCEEDED, finishedInfo.getFinishedReas
on()); |
| 251 MetricsTestUtil.checkHasConnectTiming(finishedInfo.getMetrics(), startTi
me, endTime, true); | 265 MetricsTestUtil.checkHasConnectTiming(finishedInfo.getMetrics(), startTi
me, endTime, true); |
| 252 assertEquals(newHashSet("request annotation", this), | 266 assertEquals(newHashSet("request annotation", this), |
| 253 new HashSet<Object>(finishedInfo.getAnnotations())); | 267 new HashSet<Object>(finishedInfo.getAnnotations())); |
| 254 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 268 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 255 assertEquals("Test String1234567890woot!", callback.mResponseAsString); | 269 assertEquals("Test String1234567890woot!", callback.mResponseAsString); |
| 256 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo
").get(0)); | 270 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo
").get(0)); |
| 257 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty"
).get(0)); | 271 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty"
).get(0)); |
| 258 assertEquals( | 272 assertEquals( |
| 259 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten
t-type").get(0)); | 273 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten
t-type").get(0)); |
| 260 } | 274 } |
| 261 | 275 |
| 262 @SmallTest | 276 @SmallTest |
| 263 @Feature({"Cronet"}) | 277 @Feature({"Cronet"}) |
| 264 @OnlyRunNativeCronet | 278 @OnlyRunNativeCronet |
| 265 public void testSimplePostWithFlush() throws Exception { | 279 public void testSimplePostWithFlush() throws Exception { |
| 266 String url = Http2TestServer.getEchoStreamUrl(); | 280 String url = Http2TestServer.getEchoStreamUrl(); |
| 267 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 281 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 268 callback.addWriteData("Test String".getBytes(), false); | 282 callback.addWriteData("Test String".getBytes(), false); |
| 269 callback.addWriteData("1234567890".getBytes(), false); | 283 callback.addWriteData("1234567890".getBytes(), false); |
| 270 callback.addWriteData("woot!".getBytes(), true); | 284 callback.addWriteData("woot!".getBytes(), true); |
| 271 BidirectionalStream stream = new BidirectionalStream | 285 BidirectionalStream stream = |
| 272 .Builder(url, callback, callback.ge
tExecutor(), | 286 mTestFramework.mCronetEngine |
| 273 mTestFramework.mCronetEngin
e) | 287 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
| 274 .addHeader("foo", "bar") | 288 .addHeader("foo", "bar") |
| 275 .addHeader("empty", "") | 289 .addHeader("empty", "") |
| 276 .addHeader("Content-Type", "zebra") | 290 .addHeader("Content-Type", "zebra") |
| 277 .build(); | 291 .build(); |
| 278 // Flush before stream is started should not crash. | 292 // Flush before stream is started should not crash. |
| 279 stream.flush(); | 293 stream.flush(); |
| 280 | 294 |
| 281 stream.start(); | 295 stream.start(); |
| 282 callback.blockForDone(); | 296 callback.blockForDone(); |
| 283 assertTrue(stream.isDone()); | 297 assertTrue(stream.isDone()); |
| 284 | 298 |
| 285 // Flush after stream is completed is no-op. It shouldn't call into the
destroyed adapter. | 299 // Flush after stream is completed is no-op. It shouldn't call into the
destroyed adapter. |
| 286 stream.flush(); | 300 stream.flush(); |
| 287 | 301 |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 339 ((CronetBidirectionalStream) stream).getFlushDataFor
Testing().size()); | 353 ((CronetBidirectionalStream) stream).getFlushDataFor
Testing().size()); |
| 340 } | 354 } |
| 341 } | 355 } |
| 342 }; | 356 }; |
| 343 callback.addWriteData("1".getBytes(), false); | 357 callback.addWriteData("1".getBytes(), false); |
| 344 callback.addWriteData("2".getBytes(), false); | 358 callback.addWriteData("2".getBytes(), false); |
| 345 callback.addWriteData("3".getBytes(), true); | 359 callback.addWriteData("3".getBytes(), true); |
| 346 callback.addWriteData("4".getBytes(), false); | 360 callback.addWriteData("4".getBytes(), false); |
| 347 callback.addWriteData("5".getBytes(), true); | 361 callback.addWriteData("5".getBytes(), true); |
| 348 callback.addWriteData("6".getBytes(), false); | 362 callback.addWriteData("6".getBytes(), false); |
| 349 CronetBidirectionalStream stream = (CronetBidirectionalStream) new Bidir
ectionalStream | 363 CronetBidirectionalStream stream = |
| 350 .Builder(url, callback, callb
ack.getExecutor(), | 364 (CronetBidirectionalStream) mTestFramework.mCronetEngine |
| 351 mTestFramework.mCrone
tEngine) | 365 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
| 352 .addHeader("foo", "bar") | 366 .addHeader("foo", "bar") |
| 353 .addHeader("empty", "") | 367 .addHeader("empty", "") |
| 354 .addHeader("Content-Type", "z
ebra") | 368 .addHeader("Content-Type", "zebra") |
| 355 .build(); | 369 .build(); |
| 356 callback.setAutoAdvance(false); | 370 callback.setAutoAdvance(false); |
| 357 stream.start(); | 371 stream.start(); |
| 358 callback.waitForNextWriteStep(); // onStreamReady | 372 callback.waitForNextWriteStep(); // onStreamReady |
| 359 | 373 |
| 360 assertEquals(0, stream.getPendingDataForTesting().size()); | 374 assertEquals(0, stream.getPendingDataForTesting().size()); |
| 361 assertEquals(0, stream.getFlushDataForTesting().size()); | 375 assertEquals(0, stream.getFlushDataForTesting().size()); |
| 362 | 376 |
| 363 // Write 1, 2, 3 and flush(). | 377 // Write 1, 2, 3 and flush(). |
| 364 callback.startNextWrite(stream); | 378 callback.startNextWrite(stream); |
| 365 // Write 4, 5 and flush(). 4, 5 will be in flush queue. | 379 // 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... |
| 398 stream.flush(); | 412 stream.flush(); |
| 399 super.onStreamReady(stream); | 413 super.onStreamReady(stream); |
| 400 try { | 414 try { |
| 401 // Attempt to write data for GET request. | 415 // Attempt to write data for GET request. |
| 402 stream.write(ByteBuffer.wrap("dummy".getBytes()), true); | 416 stream.write(ByteBuffer.wrap("dummy".getBytes()), true); |
| 403 } catch (IllegalArgumentException e) { | 417 } catch (IllegalArgumentException e) { |
| 404 // Expected. | 418 // Expected. |
| 405 } | 419 } |
| 406 } | 420 } |
| 407 }; | 421 }; |
| 408 BidirectionalStream stream = new BidirectionalStream | 422 BidirectionalStream stream = |
| 409 .Builder(url, callback, callbac
k.getExecutor(), | 423 mTestFramework.mCronetEngine |
| 410 mTestFramework.mCronetE
ngine) | 424 .newBidirectionalStreamBuilder(url, callback, callba
ck.getExecutor()) |
| 411 .setHttpMethod("GET") | 425 .setHttpMethod("GET") |
| 412 .delayRequestHeadersUntilFirstF
lush(i == 0) | 426 .delayRequestHeadersUntilFirstFlush(i == 0) |
| 413 .addHeader("foo", "bar") | 427 .addHeader("foo", "bar") |
| 414 .addHeader("empty", "") | 428 .addHeader("empty", "") |
| 415 .build(); | 429 .build(); |
| 416 // Flush before stream is started should not crash. | 430 // Flush before stream is started should not crash. |
| 417 stream.flush(); | 431 stream.flush(); |
| 418 | 432 |
| 419 stream.start(); | 433 stream.start(); |
| 420 callback.blockForDone(); | 434 callback.blockForDone(); |
| 421 assertTrue(stream.isDone()); | 435 assertTrue(stream.isDone()); |
| 422 | 436 |
| 423 // Flush after stream is completed is no-op. It shouldn't call into
the destroyed | 437 // Flush after stream is completed is no-op. It shouldn't call into
the destroyed |
| 424 // adapter. | 438 // adapter. |
| 425 stream.flush(); | 439 stream.flush(); |
| 426 | 440 |
| 427 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 441 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 428 assertEquals("", callback.mResponseAsString); | 442 assertEquals("", callback.mResponseAsString); |
| 429 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo
-foo").get(0)); | 443 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo
-foo").get(0)); |
| 430 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-em
pty").get(0)); | 444 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-em
pty").get(0)); |
| 431 } | 445 } |
| 432 } | 446 } |
| 433 | 447 |
| 434 @SmallTest | 448 @SmallTest |
| 435 @Feature({"Cronet"}) | 449 @Feature({"Cronet"}) |
| 436 @OnlyRunNativeCronet | 450 @OnlyRunNativeCronet |
| 437 public void testSimplePostWithFlushAfterOneWrite() throws Exception { | 451 public void testSimplePostWithFlushAfterOneWrite() throws Exception { |
| 438 // TODO(xunjieli): Use ParameterizedTest instead of the loop. | 452 // TODO(xunjieli): Use ParameterizedTest instead of the loop. |
| 439 for (int i = 0; i < 2; i++) { | 453 for (int i = 0; i < 2; i++) { |
| 440 String url = Http2TestServer.getEchoStreamUrl(); | 454 String url = Http2TestServer.getEchoStreamUrl(); |
| 441 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback(); | 455 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback(); |
| 442 callback.addWriteData("Test String".getBytes(), true); | 456 callback.addWriteData("Test String".getBytes(), true); |
| 443 BidirectionalStream stream = new BidirectionalStream | 457 BidirectionalStream stream = |
| 444 .Builder(url, callback, callbac
k.getExecutor(), | 458 mTestFramework.mCronetEngine |
| 445 mTestFramework.mCronetE
ngine) | 459 .newBidirectionalStreamBuilder(url, callback, callba
ck.getExecutor()) |
| 446 .delayRequestHeadersUntilFirstF
lush(i == 0) | 460 .delayRequestHeadersUntilFirstFlush(i == 0) |
| 447 .addHeader("foo", "bar") | 461 .addHeader("foo", "bar") |
| 448 .addHeader("empty", "") | 462 .addHeader("empty", "") |
| 449 .addHeader("Content-Type", "zeb
ra") | 463 .addHeader("Content-Type", "zebra") |
| 450 .build(); | 464 .build(); |
| 451 stream.start(); | 465 stream.start(); |
| 452 callback.blockForDone(); | 466 callback.blockForDone(); |
| 453 assertTrue(stream.isDone()); | 467 assertTrue(stream.isDone()); |
| 454 | 468 |
| 455 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 469 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 456 assertEquals("Test String", callback.mResponseAsString); | 470 assertEquals("Test String", callback.mResponseAsString); |
| 457 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo
-foo").get(0)); | 471 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo
-foo").get(0)); |
| 458 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-em
pty").get(0)); | 472 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-em
pty").get(0)); |
| 459 assertEquals("zebra", | 473 assertEquals("zebra", |
| 460 callback.mResponseInfo.getAllHeaders().get("echo-content-typ
e").get(0)); | 474 callback.mResponseInfo.getAllHeaders().get("echo-content-typ
e").get(0)); |
| 461 } | 475 } |
| 462 } | 476 } |
| 463 | 477 |
| 464 @SmallTest | 478 @SmallTest |
| 465 @Feature({"Cronet"}) | 479 @Feature({"Cronet"}) |
| 466 @OnlyRunNativeCronet | 480 @OnlyRunNativeCronet |
| 467 public void testSimplePostWithFlushTwice() throws Exception { | 481 public void testSimplePostWithFlushTwice() throws Exception { |
| 468 // TODO(xunjieli): Use ParameterizedTest instead of the loop. | 482 // TODO(xunjieli): Use ParameterizedTest instead of the loop. |
| 469 for (int i = 0; i < 2; i++) { | 483 for (int i = 0; i < 2; i++) { |
| 470 String url = Http2TestServer.getEchoStreamUrl(); | 484 String url = Http2TestServer.getEchoStreamUrl(); |
| 471 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback(); | 485 TestBidirectionalStreamCallback callback = new TestBidirectionalStre
amCallback(); |
| 472 callback.addWriteData("Test String".getBytes(), false); | 486 callback.addWriteData("Test String".getBytes(), false); |
| 473 callback.addWriteData("1234567890".getBytes(), false); | 487 callback.addWriteData("1234567890".getBytes(), false); |
| 474 callback.addWriteData("woot!".getBytes(), true); | 488 callback.addWriteData("woot!".getBytes(), true); |
| 475 callback.addWriteData("Test String".getBytes(), false); | 489 callback.addWriteData("Test String".getBytes(), false); |
| 476 callback.addWriteData("1234567890".getBytes(), false); | 490 callback.addWriteData("1234567890".getBytes(), false); |
| 477 callback.addWriteData("woot!".getBytes(), true); | 491 callback.addWriteData("woot!".getBytes(), true); |
| 478 BidirectionalStream stream = new BidirectionalStream | 492 BidirectionalStream stream = |
| 479 .Builder(url, callback, callbac
k.getExecutor(), | 493 mTestFramework.mCronetEngine |
| 480 mTestFramework.mCronetE
ngine) | 494 .newBidirectionalStreamBuilder(url, callback, callba
ck.getExecutor()) |
| 481 .delayRequestHeadersUntilFirstF
lush(i == 0) | 495 .delayRequestHeadersUntilFirstFlush(i == 0) |
| 482 .addHeader("foo", "bar") | 496 .addHeader("foo", "bar") |
| 483 .addHeader("empty", "") | 497 .addHeader("empty", "") |
| 484 .addHeader("Content-Type", "zeb
ra") | 498 .addHeader("Content-Type", "zebra") |
| 485 .build(); | 499 .build(); |
| 486 stream.start(); | 500 stream.start(); |
| 487 callback.blockForDone(); | 501 callback.blockForDone(); |
| 488 assertTrue(stream.isDone()); | 502 assertTrue(stream.isDone()); |
| 489 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 503 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 490 assertEquals("Test String1234567890woot!Test String1234567890woot!", | 504 assertEquals("Test String1234567890woot!Test String1234567890woot!", |
| 491 callback.mResponseAsString); | 505 callback.mResponseAsString); |
| 492 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo
-foo").get(0)); | 506 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo
-foo").get(0)); |
| 493 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-em
pty").get(0)); | 507 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-em
pty").get(0)); |
| 494 assertEquals("zebra", | 508 assertEquals("zebra", |
| 495 callback.mResponseInfo.getAllHeaders().get("echo-content-typ
e").get(0)); | 509 callback.mResponseInfo.getAllHeaders().get("echo-content-typ
e").get(0)); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 510 } | 524 } |
| 511 @Override | 525 @Override |
| 512 public void onResponseHeadersReceived( | 526 public void onResponseHeadersReceived( |
| 513 BidirectionalStream stream, UrlResponseInfo info) { | 527 BidirectionalStream stream, UrlResponseInfo info) { |
| 514 // Do nothing. Skip readng. | 528 // Do nothing. Skip readng. |
| 515 } | 529 } |
| 516 }; | 530 }; |
| 517 callback.addWriteData("Test String".getBytes()); | 531 callback.addWriteData("Test String".getBytes()); |
| 518 callback.addWriteData("1234567890".getBytes()); | 532 callback.addWriteData("1234567890".getBytes()); |
| 519 callback.addWriteData("woot!".getBytes()); | 533 callback.addWriteData("woot!".getBytes()); |
| 520 BidirectionalStream stream = new BidirectionalStream | 534 BidirectionalStream stream = |
| 521 .Builder(url, callback, callback.ge
tExecutor(), | 535 mTestFramework.mCronetEngine |
| 522 mTestFramework.mCronetEngin
e) | 536 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
| 523 .addHeader("foo", "bar") | 537 .addHeader("foo", "bar") |
| 524 .addHeader("empty", "") | 538 .addHeader("empty", "") |
| 525 .addHeader("Content-Type", "zebra") | 539 .addHeader("Content-Type", "zebra") |
| 526 .build(); | 540 .build(); |
| 527 stream.start(); | 541 stream.start(); |
| 528 callback.blockForDone(); | 542 callback.blockForDone(); |
| 529 assertTrue(stream.isDone()); | 543 assertTrue(stream.isDone()); |
| 530 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 544 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 531 assertEquals("Test String1234567890woot!", callback.mResponseAsString); | 545 assertEquals("Test String1234567890woot!", callback.mResponseAsString); |
| 532 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo
").get(0)); | 546 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo
").get(0)); |
| 533 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty"
).get(0)); | 547 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty"
).get(0)); |
| 534 assertEquals( | 548 assertEquals( |
| 535 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten
t-type").get(0)); | 549 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten
t-type").get(0)); |
| 536 } | 550 } |
| (...skipping 13 matching lines...) Expand all Loading... |
| 550 startNextWrite(stream); | 564 startNextWrite(stream); |
| 551 assertEquals(0, numPendingWrites()); | 565 assertEquals(0, numPendingWrites()); |
| 552 } | 566 } |
| 553 }; | 567 }; |
| 554 callback.addWriteData("Test String".getBytes(), false); | 568 callback.addWriteData("Test String".getBytes(), false); |
| 555 callback.addWriteData("1234567890".getBytes(), false); | 569 callback.addWriteData("1234567890".getBytes(), false); |
| 556 callback.addWriteData("woot!".getBytes(), true); | 570 callback.addWriteData("woot!".getBytes(), true); |
| 557 callback.addWriteData("Test String".getBytes(), false); | 571 callback.addWriteData("Test String".getBytes(), false); |
| 558 callback.addWriteData("1234567890".getBytes(), false); | 572 callback.addWriteData("1234567890".getBytes(), false); |
| 559 callback.addWriteData("woot!".getBytes(), true); | 573 callback.addWriteData("woot!".getBytes(), true); |
| 560 BidirectionalStream stream = new BidirectionalStream | 574 BidirectionalStream stream = |
| 561 .Builder(url, callback, callback.ge
tExecutor(), | 575 mTestFramework.mCronetEngine |
| 562 mTestFramework.mCronetEngin
e) | 576 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
| 563 .addHeader("foo", "bar") | 577 .addHeader("foo", "bar") |
| 564 .addHeader("empty", "") | 578 .addHeader("empty", "") |
| 565 .addHeader("Content-Type", "zebra") | 579 .addHeader("Content-Type", "zebra") |
| 566 .build(); | 580 .build(); |
| 567 stream.start(); | 581 stream.start(); |
| 568 callback.blockForDone(); | 582 callback.blockForDone(); |
| 569 assertTrue(stream.isDone()); | 583 assertTrue(stream.isDone()); |
| 570 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 584 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 571 assertEquals( | 585 assertEquals( |
| 572 "Test String1234567890woot!Test String1234567890woot!", callback
.mResponseAsString); | 586 "Test String1234567890woot!Test String1234567890woot!", callback
.mResponseAsString); |
| 573 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo
").get(0)); | 587 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo
").get(0)); |
| 574 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty"
).get(0)); | 588 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty"
).get(0)); |
| 575 assertEquals( | 589 assertEquals( |
| 576 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten
t-type").get(0)); | 590 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten
t-type").get(0)); |
| 577 } | 591 } |
| 578 | 592 |
| 579 @SmallTest | 593 @SmallTest |
| 580 @Feature({"Cronet"}) | 594 @Feature({"Cronet"}) |
| 581 @OnlyRunNativeCronet | 595 @OnlyRunNativeCronet |
| 582 public void testSimplePut() throws Exception { | 596 public void testSimplePut() throws Exception { |
| 583 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 597 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 584 callback.addWriteData("Put This Data!".getBytes()); | 598 callback.addWriteData("Put This Data!".getBytes()); |
| 585 String methodName = "PUT"; | 599 String methodName = "PUT"; |
| 586 BidirectionalStream.Builder builder = | 600 BidirectionalStream.Builder builder = |
| 587 new BidirectionalStream.Builder(Http2TestServer.getServerUrl(),
callback, | 601 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 588 callback.getExecutor(), mTestFramework.mCronetEngine); | 602 Http2TestServer.getServerUrl(), callback, callback.getEx
ecutor()); |
| 589 builder.setHttpMethod(methodName); | 603 builder.setHttpMethod(methodName); |
| 590 builder.build().start(); | 604 builder.build().start(); |
| 591 callback.blockForDone(); | 605 callback.blockForDone(); |
| 592 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 606 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 593 assertEquals("Put This Data!", callback.mResponseAsString); | 607 assertEquals("Put This Data!", callback.mResponseAsString); |
| 594 assertEquals(methodName, callback.mResponseInfo.getAllHeaders().get("ech
o-method").get(0)); | 608 assertEquals(methodName, callback.mResponseInfo.getAllHeaders().get("ech
o-method").get(0)); |
| 595 } | 609 } |
| 596 | 610 |
| 597 @SmallTest | 611 @SmallTest |
| 598 @Feature({"Cronet"}) | 612 @Feature({"Cronet"}) |
| 599 @OnlyRunNativeCronet | 613 @OnlyRunNativeCronet |
| 600 public void testBadMethod() throws Exception { | 614 public void testBadMethod() throws Exception { |
| 601 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 615 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 602 BidirectionalStream.Builder builder = | 616 BidirectionalStream.Builder builder = |
| 603 new BidirectionalStream.Builder(Http2TestServer.getServerUrl(),
callback, | 617 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 604 callback.getExecutor(), mTestFramework.mCronetEngine); | 618 Http2TestServer.getServerUrl(), callback, callback.getEx
ecutor()); |
| 605 try { | 619 try { |
| 606 builder.setHttpMethod("bad:method!"); | 620 builder.setHttpMethod("bad:method!"); |
| 607 builder.build().start(); | 621 builder.build().start(); |
| 608 fail("IllegalArgumentException not thrown."); | 622 fail("IllegalArgumentException not thrown."); |
| 609 } catch (IllegalArgumentException e) { | 623 } catch (IllegalArgumentException e) { |
| 610 assertEquals("Invalid http method bad:method!", e.getMessage()); | 624 assertEquals("Invalid http method bad:method!", e.getMessage()); |
| 611 } | 625 } |
| 612 } | 626 } |
| 613 | 627 |
| 614 @SmallTest | 628 @SmallTest |
| 615 @Feature({"Cronet"}) | 629 @Feature({"Cronet"}) |
| 616 @OnlyRunNativeCronet | 630 @OnlyRunNativeCronet |
| 617 public void testBadHeaderName() throws Exception { | 631 public void testBadHeaderName() throws Exception { |
| 618 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 632 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 619 BidirectionalStream.Builder builder = | 633 BidirectionalStream.Builder builder = |
| 620 new BidirectionalStream.Builder(Http2TestServer.getServerUrl(),
callback, | 634 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 621 callback.getExecutor(), mTestFramework.mCronetEngine); | 635 Http2TestServer.getServerUrl(), callback, callback.getEx
ecutor()); |
| 622 try { | 636 try { |
| 623 builder.addHeader("goodheader1", "headervalue"); | 637 builder.addHeader("goodheader1", "headervalue"); |
| 624 builder.addHeader("header:name", "headervalue"); | 638 builder.addHeader("header:name", "headervalue"); |
| 625 builder.addHeader("goodheader2", "headervalue"); | 639 builder.addHeader("goodheader2", "headervalue"); |
| 626 builder.build().start(); | 640 builder.build().start(); |
| 627 fail("IllegalArgumentException not thrown."); | 641 fail("IllegalArgumentException not thrown."); |
| 628 } catch (IllegalArgumentException e) { | 642 } catch (IllegalArgumentException e) { |
| 629 assertEquals("Invalid header header:name=headervalue", e.getMessage(
)); | 643 assertEquals("Invalid header header:name=headervalue", e.getMessage(
)); |
| 630 } | 644 } |
| 631 } | 645 } |
| 632 | 646 |
| 633 @SmallTest | 647 @SmallTest |
| 634 @Feature({"Cronet"}) | 648 @Feature({"Cronet"}) |
| 635 @OnlyRunNativeCronet | 649 @OnlyRunNativeCronet |
| 636 public void testBadHeaderValue() throws Exception { | 650 public void testBadHeaderValue() throws Exception { |
| 637 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 651 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 638 BidirectionalStream.Builder builder = | 652 BidirectionalStream.Builder builder = |
| 639 new BidirectionalStream.Builder(Http2TestServer.getServerUrl(),
callback, | 653 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 640 callback.getExecutor(), mTestFramework.mCronetEngine); | 654 Http2TestServer.getServerUrl(), callback, callback.getEx
ecutor()); |
| 641 try { | 655 try { |
| 642 builder.addHeader("headername", "bad header\r\nvalue"); | 656 builder.addHeader("headername", "bad header\r\nvalue"); |
| 643 builder.build().start(); | 657 builder.build().start(); |
| 644 fail("IllegalArgumentException not thrown."); | 658 fail("IllegalArgumentException not thrown."); |
| 645 } catch (IllegalArgumentException e) { | 659 } catch (IllegalArgumentException e) { |
| 646 assertEquals("Invalid header headername=bad header\r\nvalue", e.getM
essage()); | 660 assertEquals("Invalid header headername=bad header\r\nvalue", e.getM
essage()); |
| 647 } | 661 } |
| 648 } | 662 } |
| 649 | 663 |
| 650 @SmallTest | 664 @SmallTest |
| 651 @Feature({"Cronet"}) | 665 @Feature({"Cronet"}) |
| 652 @OnlyRunNativeCronet | 666 @OnlyRunNativeCronet |
| 653 public void testAddHeader() throws Exception { | 667 public void testAddHeader() throws Exception { |
| 654 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 668 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 655 String headerName = "header-name"; | 669 String headerName = "header-name"; |
| 656 String headerValue = "header-value"; | 670 String headerValue = "header-value"; |
| 657 BidirectionalStream.Builder builder = | 671 BidirectionalStream.Builder builder = |
| 658 new BidirectionalStream.Builder(Http2TestServer.getEchoHeaderUrl
(headerName), | 672 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 659 callback, callback.getExecutor(), mTestFramework.mCronet
Engine); | 673 Http2TestServer.getEchoHeaderUrl(headerName), callback, |
| 674 callback.getExecutor()); |
| 660 builder.addHeader(headerName, headerValue); | 675 builder.addHeader(headerName, headerValue); |
| 661 builder.setHttpMethod("GET"); | 676 builder.setHttpMethod("GET"); |
| 662 builder.build().start(); | 677 builder.build().start(); |
| 663 callback.blockForDone(); | 678 callback.blockForDone(); |
| 664 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 679 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 665 assertEquals(headerValue, callback.mResponseAsString); | 680 assertEquals(headerValue, callback.mResponseAsString); |
| 666 } | 681 } |
| 667 | 682 |
| 668 @SmallTest | 683 @SmallTest |
| 669 @Feature({"Cronet"}) | 684 @Feature({"Cronet"}) |
| 670 @OnlyRunNativeCronet | 685 @OnlyRunNativeCronet |
| 671 public void testMultiRequestHeaders() throws Exception { | 686 public void testMultiRequestHeaders() throws Exception { |
| 672 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 687 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 673 String headerName = "header-name"; | 688 String headerName = "header-name"; |
| 674 String headerValue1 = "header-value1"; | 689 String headerValue1 = "header-value1"; |
| 675 String headerValue2 = "header-value2"; | 690 String headerValue2 = "header-value2"; |
| 676 BidirectionalStream.Builder builder = | 691 BidirectionalStream.Builder builder = |
| 677 new BidirectionalStream.Builder(Http2TestServer.getEchoAllHeader
sUrl(), callback, | 692 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 678 callback.getExecutor(), mTestFramework.mCronetEngine); | 693 Http2TestServer.getEchoAllHeadersUrl(), callback, callba
ck.getExecutor()); |
| 679 builder.addHeader(headerName, headerValue1); | 694 builder.addHeader(headerName, headerValue1); |
| 680 builder.addHeader(headerName, headerValue2); | 695 builder.addHeader(headerName, headerValue2); |
| 681 builder.setHttpMethod("GET"); | 696 builder.setHttpMethod("GET"); |
| 682 builder.build().start(); | 697 builder.build().start(); |
| 683 callback.blockForDone(); | 698 callback.blockForDone(); |
| 684 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 699 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 685 String headers = callback.mResponseAsString; | 700 String headers = callback.mResponseAsString; |
| 686 Pattern pattern = Pattern.compile(headerName + ":\\s(.*)\\r\\n"); | 701 Pattern pattern = Pattern.compile(headerName + ":\\s(.*)\\r\\n"); |
| 687 Matcher matcher = pattern.matcher(headers); | 702 Matcher matcher = pattern.matcher(headers); |
| 688 List<String> actualValues = new ArrayList<String>(); | 703 List<String> actualValues = new ArrayList<String>(); |
| 689 while (matcher.find()) { | 704 while (matcher.find()) { |
| 690 actualValues.add(matcher.group(1)); | 705 actualValues.add(matcher.group(1)); |
| 691 } | 706 } |
| 692 assertEquals(1, actualValues.size()); | 707 assertEquals(1, actualValues.size()); |
| 693 assertEquals("header-value2", actualValues.get(0)); | 708 assertEquals("header-value2", actualValues.get(0)); |
| 694 } | 709 } |
| 695 | 710 |
| 696 @SmallTest | 711 @SmallTest |
| 697 @Feature({"Cronet"}) | 712 @Feature({"Cronet"}) |
| 698 @OnlyRunNativeCronet | 713 @OnlyRunNativeCronet |
| 699 public void testEchoTrailers() throws Exception { | 714 public void testEchoTrailers() throws Exception { |
| 700 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 715 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 701 String headerName = "header-name"; | 716 String headerName = "header-name"; |
| 702 String headerValue = "header-value"; | 717 String headerValue = "header-value"; |
| 703 BidirectionalStream.Builder builder = | 718 BidirectionalStream.Builder builder = |
| 704 new BidirectionalStream.Builder(Http2TestServer.getEchoTrailersU
rl(), callback, | 719 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 705 callback.getExecutor(), mTestFramework.mCronetEngine); | 720 Http2TestServer.getEchoTrailersUrl(), callback, callback
.getExecutor()); |
| 706 builder.addHeader(headerName, headerValue); | 721 builder.addHeader(headerName, headerValue); |
| 707 builder.setHttpMethod("GET"); | 722 builder.setHttpMethod("GET"); |
| 708 builder.build().start(); | 723 builder.build().start(); |
| 709 callback.blockForDone(); | 724 callback.blockForDone(); |
| 710 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 725 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 711 assertNotNull(callback.mTrailers); | 726 assertNotNull(callback.mTrailers); |
| 712 // Verify that header value is properly echoed in trailers. | 727 // Verify that header value is properly echoed in trailers. |
| 713 assertEquals(headerValue, callback.mTrailers.getAsMap().get("echo-" + he
aderName).get(0)); | 728 assertEquals(headerValue, callback.mTrailers.getAsMap().get("echo-" + he
aderName).get(0)); |
| 714 } | 729 } |
| 715 | 730 |
| 716 @SmallTest | 731 @SmallTest |
| 717 @Feature({"Cronet"}) | 732 @Feature({"Cronet"}) |
| 718 @OnlyRunNativeCronet | 733 @OnlyRunNativeCronet |
| 719 public void testCustomUserAgent() throws Exception { | 734 public void testCustomUserAgent() throws Exception { |
| 720 String userAgentName = "User-Agent"; | 735 String userAgentName = "User-Agent"; |
| 721 String userAgentValue = "User-Agent-Value"; | 736 String userAgentValue = "User-Agent-Value"; |
| 722 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 737 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 723 BidirectionalStream.Builder builder = | 738 BidirectionalStream.Builder builder = |
| 724 new BidirectionalStream.Builder(Http2TestServer.getEchoHeaderUrl
(userAgentName), | 739 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 725 callback, callback.getExecutor(), mTestFramework.mCronet
Engine); | 740 Http2TestServer.getEchoHeaderUrl(userAgentName), callbac
k, |
| 741 callback.getExecutor()); |
| 726 builder.setHttpMethod("GET"); | 742 builder.setHttpMethod("GET"); |
| 727 builder.addHeader(userAgentName, userAgentValue); | 743 builder.addHeader(userAgentName, userAgentValue); |
| 728 builder.build().start(); | 744 builder.build().start(); |
| 729 callback.blockForDone(); | 745 callback.blockForDone(); |
| 730 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 746 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 731 assertEquals(userAgentValue, callback.mResponseAsString); | 747 assertEquals(userAgentValue, callback.mResponseAsString); |
| 732 } | 748 } |
| 733 | 749 |
| 734 @SmallTest | 750 @SmallTest |
| 735 @Feature({"Cronet"}) | 751 @Feature({"Cronet"}) |
| 736 @OnlyRunNativeCronet | 752 @OnlyRunNativeCronet |
| 737 public void testCustomCronetEngineUserAgent() throws Exception { | 753 public void testCustomCronetEngineUserAgent() throws Exception { |
| 738 String userAgentName = "User-Agent"; | 754 String userAgentName = "User-Agent"; |
| 739 String userAgentValue = "User-Agent-Value"; | 755 String userAgentValue = "User-Agent-Value"; |
| 740 CronetEngine engine = | 756 ExperimentalCronetEngine.Builder engineBuilder = |
| 741 new CronetEngine.Builder(getContext()) | 757 new ExperimentalCronetEngine.Builder(getContext()); |
| 742 .setMockCertVerifierForTesting(QuicTestServer.createMock
CertVerifier()) | 758 engineBuilder.setUserAgent(userAgentValue); |
| 743 .setUserAgent(userAgentValue) | 759 CronetTestUtil.setMockCertVerifierForTesting( |
| 744 .build(); | 760 engineBuilder, QuicTestServer.createMockCertVerifier()); |
| 761 ExperimentalCronetEngine engine = engineBuilder.build(); |
| 745 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 762 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 746 BidirectionalStream.Builder builder = | 763 BidirectionalStream.Builder builder = engine.newBidirectionalStreamBuild
er( |
| 747 new BidirectionalStream.Builder(Http2TestServer.getEchoHeaderUrl
(userAgentName), | 764 Http2TestServer.getEchoHeaderUrl(userAgentName), callback, callb
ack.getExecutor()); |
| 748 callback, callback.getExecutor(), engine); | |
| 749 builder.setHttpMethod("GET"); | 765 builder.setHttpMethod("GET"); |
| 750 builder.build().start(); | 766 builder.build().start(); |
| 751 callback.blockForDone(); | 767 callback.blockForDone(); |
| 752 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 768 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 753 assertEquals(userAgentValue, callback.mResponseAsString); | 769 assertEquals(userAgentValue, callback.mResponseAsString); |
| 754 } | 770 } |
| 755 | 771 |
| 756 @SmallTest | 772 @SmallTest |
| 757 @Feature({"Cronet"}) | 773 @Feature({"Cronet"}) |
| 758 @OnlyRunNativeCronet | 774 @OnlyRunNativeCronet |
| 759 public void testDefaultUserAgent() throws Exception { | 775 public void testDefaultUserAgent() throws Exception { |
| 760 String userAgentName = "User-Agent"; | 776 String userAgentName = "User-Agent"; |
| 761 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 777 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 762 BidirectionalStream.Builder builder = | 778 BidirectionalStream.Builder builder = |
| 763 new BidirectionalStream.Builder(Http2TestServer.getEchoHeaderUrl
(userAgentName), | 779 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 764 callback, callback.getExecutor(), mTestFramework.mCronet
Engine); | 780 Http2TestServer.getEchoHeaderUrl(userAgentName), callbac
k, |
| 781 callback.getExecutor()); |
| 765 builder.setHttpMethod("GET"); | 782 builder.setHttpMethod("GET"); |
| 766 builder.build().start(); | 783 builder.build().start(); |
| 767 callback.blockForDone(); | 784 callback.blockForDone(); |
| 768 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 785 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 769 assertEquals(new CronetEngine.Builder(getContext()).getDefaultUserAgent(
), | 786 assertEquals(new CronetEngine.Builder(getContext()).getDefaultUserAgent(
), |
| 770 callback.mResponseAsString); | 787 callback.mResponseAsString); |
| 771 } | 788 } |
| 772 | 789 |
| 773 @SmallTest | 790 @SmallTest |
| 774 @Feature({"Cronet"}) | 791 @Feature({"Cronet"}) |
| 775 @OnlyRunNativeCronet | 792 @OnlyRunNativeCronet |
| 776 public void testEchoStream() throws Exception { | 793 public void testEchoStream() throws Exception { |
| 777 String url = Http2TestServer.getEchoStreamUrl(); | 794 String url = Http2TestServer.getEchoStreamUrl(); |
| 778 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 795 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 779 String[] testData = {"Test String", createLongString("1234567890", 50000
), "woot!"}; | 796 String[] testData = {"Test String", createLongString("1234567890", 50000
), "woot!"}; |
| 780 StringBuilder stringData = new StringBuilder(); | 797 StringBuilder stringData = new StringBuilder(); |
| 781 for (String writeData : testData) { | 798 for (String writeData : testData) { |
| 782 callback.addWriteData(writeData.getBytes()); | 799 callback.addWriteData(writeData.getBytes()); |
| 783 stringData.append(writeData); | 800 stringData.append(writeData); |
| 784 } | 801 } |
| 785 // Create stream. | 802 // Create stream. |
| 786 BidirectionalStream stream = new BidirectionalStream | 803 BidirectionalStream stream = |
| 787 .Builder(url, callback, callback.ge
tExecutor(), | 804 mTestFramework.mCronetEngine |
| 788 mTestFramework.mCronetEngin
e) | 805 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
| 789 .addHeader("foo", "Value with Space
s") | 806 .addHeader("foo", "Value with Spaces") |
| 790 .addHeader("Content-Type", "zebra") | 807 .addHeader("Content-Type", "zebra") |
| 791 .build(); | 808 .build(); |
| 792 stream.start(); | 809 stream.start(); |
| 793 callback.blockForDone(); | 810 callback.blockForDone(); |
| 794 assertTrue(stream.isDone()); | 811 assertTrue(stream.isDone()); |
| 795 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 812 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 796 assertEquals(stringData.toString(), callback.mResponseAsString); | 813 assertEquals(stringData.toString(), callback.mResponseAsString); |
| 797 assertEquals( | 814 assertEquals( |
| 798 "Value with Spaces", callback.mResponseInfo.getAllHeaders().get(
"echo-foo").get(0)); | 815 "Value with Spaces", callback.mResponseInfo.getAllHeaders().get(
"echo-foo").get(0)); |
| 799 assertEquals( | 816 assertEquals( |
| 800 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten
t-type").get(0)); | 817 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten
t-type").get(0)); |
| 801 } | 818 } |
| 802 | 819 |
| 803 @SmallTest | 820 @SmallTest |
| 804 @Feature({"Cronet"}) | 821 @Feature({"Cronet"}) |
| 805 @OnlyRunNativeCronet | 822 @OnlyRunNativeCronet |
| 806 public void testEchoStreamEmptyWrite() throws Exception { | 823 public void testEchoStreamEmptyWrite() throws Exception { |
| 807 String url = Http2TestServer.getEchoStreamUrl(); | 824 String url = Http2TestServer.getEchoStreamUrl(); |
| 808 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 825 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 809 callback.addWriteData(new byte[0]); | 826 callback.addWriteData(new byte[0]); |
| 810 // Create stream. | 827 // Create stream. |
| 811 BidirectionalStream stream = new BidirectionalStream | 828 BidirectionalStream stream = |
| 812 .Builder(url, callback, callback.ge
tExecutor(), | 829 mTestFramework.mCronetEngine |
| 813 mTestFramework.mCronetEngin
e) | 830 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
| 814 .build(); | 831 .build(); |
| 815 stream.start(); | 832 stream.start(); |
| 816 callback.blockForDone(); | 833 callback.blockForDone(); |
| 817 assertTrue(stream.isDone()); | 834 assertTrue(stream.isDone()); |
| 818 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 835 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 819 assertEquals("", callback.mResponseAsString); | 836 assertEquals("", callback.mResponseAsString); |
| 820 } | 837 } |
| 821 | 838 |
| 822 @SmallTest | 839 @SmallTest |
| 823 @Feature({"Cronet"}) | 840 @Feature({"Cronet"}) |
| 824 @OnlyRunNativeCronet | 841 @OnlyRunNativeCronet |
| 825 public void testDoubleWrite() throws Exception { | 842 public void testDoubleWrite() throws Exception { |
| 826 String url = Http2TestServer.getEchoStreamUrl(); | 843 String url = Http2TestServer.getEchoStreamUrl(); |
| 827 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback() { | 844 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback() { |
| 828 @Override | 845 @Override |
| 829 public void onStreamReady(BidirectionalStream stream) { | 846 public void onStreamReady(BidirectionalStream stream) { |
| 830 // super class will call Write() once. | 847 // super class will call Write() once. |
| 831 super.onStreamReady(stream); | 848 super.onStreamReady(stream); |
| 832 // Call Write() again. | 849 // Call Write() again. |
| 833 startNextWrite(stream); | 850 startNextWrite(stream); |
| 834 // Make sure there is no pending write. | 851 // Make sure there is no pending write. |
| 835 assertEquals(0, numPendingWrites()); | 852 assertEquals(0, numPendingWrites()); |
| 836 } | 853 } |
| 837 }; | 854 }; |
| 838 callback.addWriteData("1".getBytes()); | 855 callback.addWriteData("1".getBytes()); |
| 839 callback.addWriteData("2".getBytes()); | 856 callback.addWriteData("2".getBytes()); |
| 840 // Create stream. | 857 // Create stream. |
| 841 BidirectionalStream stream = new BidirectionalStream | 858 BidirectionalStream stream = |
| 842 .Builder(url, callback, callback.ge
tExecutor(), | 859 mTestFramework.mCronetEngine |
| 843 mTestFramework.mCronetEngin
e) | 860 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
| 844 .build(); | 861 .build(); |
| 845 stream.start(); | 862 stream.start(); |
| 846 callback.blockForDone(); | 863 callback.blockForDone(); |
| 847 assertTrue(stream.isDone()); | 864 assertTrue(stream.isDone()); |
| 848 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 865 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 849 assertEquals("12", callback.mResponseAsString); | 866 assertEquals("12", callback.mResponseAsString); |
| 850 } | 867 } |
| 851 | 868 |
| 852 @SmallTest | 869 @SmallTest |
| 853 @Feature({"Cronet"}) | 870 @Feature({"Cronet"}) |
| 854 @OnlyRunNativeCronet | 871 @OnlyRunNativeCronet |
| (...skipping 11 matching lines...) Expand all Loading... |
| 866 stream.read(ByteBuffer.allocateDirect(5)); | 883 stream.read(ByteBuffer.allocateDirect(5)); |
| 867 fail("Exception is not thrown."); | 884 fail("Exception is not thrown."); |
| 868 } catch (Exception e) { | 885 } catch (Exception e) { |
| 869 assertEquals("Unexpected read attempt.", e.getMessage()); | 886 assertEquals("Unexpected read attempt.", e.getMessage()); |
| 870 } | 887 } |
| 871 } | 888 } |
| 872 }; | 889 }; |
| 873 callback.addWriteData("1".getBytes()); | 890 callback.addWriteData("1".getBytes()); |
| 874 callback.addWriteData("2".getBytes()); | 891 callback.addWriteData("2".getBytes()); |
| 875 // Create stream. | 892 // Create stream. |
| 876 BidirectionalStream stream = new BidirectionalStream | 893 BidirectionalStream stream = |
| 877 .Builder(url, callback, callback.ge
tExecutor(), | 894 mTestFramework.mCronetEngine |
| 878 mTestFramework.mCronetEngin
e) | 895 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
| 879 .build(); | 896 .build(); |
| 880 stream.start(); | 897 stream.start(); |
| 881 callback.blockForDone(); | 898 callback.blockForDone(); |
| 882 assertTrue(stream.isDone()); | 899 assertTrue(stream.isDone()); |
| 883 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 900 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 884 assertEquals("12", callback.mResponseAsString); | 901 assertEquals("12", callback.mResponseAsString); |
| 885 } | 902 } |
| 886 | 903 |
| 887 @SmallTest | 904 @SmallTest |
| 888 @Feature({"Cronet"}) | 905 @Feature({"Cronet"}) |
| 889 @OnlyRunNativeCronet | 906 @OnlyRunNativeCronet |
| 890 @DisabledTest(message = "Disabled due to timeout. See crbug.com/591112") | 907 @DisabledTest(message = "Disabled due to timeout. See crbug.com/591112") |
| 891 public void testReadAndWrite() throws Exception { | 908 public void testReadAndWrite() throws Exception { |
| 892 String url = Http2TestServer.getEchoStreamUrl(); | 909 String url = Http2TestServer.getEchoStreamUrl(); |
| 893 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback() { | 910 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback() { |
| 894 @Override | 911 @Override |
| 895 public void onResponseHeadersReceived( | 912 public void onResponseHeadersReceived( |
| 896 BidirectionalStream stream, UrlResponseInfo info) { | 913 BidirectionalStream stream, UrlResponseInfo info) { |
| 897 // Start the write, that will not complete until callback comple
tion. | 914 // Start the write, that will not complete until callback comple
tion. |
| 898 startNextWrite(stream); | 915 startNextWrite(stream); |
| 899 // Start the read. It is allowed with write in flight. | 916 // Start the read. It is allowed with write in flight. |
| 900 super.onResponseHeadersReceived(stream, info); | 917 super.onResponseHeadersReceived(stream, info); |
| 901 } | 918 } |
| 902 }; | 919 }; |
| 903 callback.setAutoAdvance(false); | 920 callback.setAutoAdvance(false); |
| 904 callback.addWriteData("1".getBytes()); | 921 callback.addWriteData("1".getBytes()); |
| 905 callback.addWriteData("2".getBytes()); | 922 callback.addWriteData("2".getBytes()); |
| 906 // Create stream. | 923 // Create stream. |
| 907 BidirectionalStream stream = new BidirectionalStream | 924 BidirectionalStream stream = |
| 908 .Builder(url, callback, callback.ge
tExecutor(), | 925 mTestFramework.mCronetEngine |
| 909 mTestFramework.mCronetEngin
e) | 926 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
| 910 .build(); | 927 .build(); |
| 911 stream.start(); | 928 stream.start(); |
| 912 callback.waitForNextWriteStep(); | 929 callback.waitForNextWriteStep(); |
| 913 callback.waitForNextReadStep(); | 930 callback.waitForNextReadStep(); |
| 914 callback.startNextRead(stream); | 931 callback.startNextRead(stream); |
| 915 callback.setAutoAdvance(true); | 932 callback.setAutoAdvance(true); |
| 916 callback.blockForDone(); | 933 callback.blockForDone(); |
| 917 assertTrue(stream.isDone()); | 934 assertTrue(stream.isDone()); |
| 918 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 935 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 919 assertEquals("12", callback.mResponseAsString); | 936 assertEquals("12", callback.mResponseAsString); |
| 920 } | 937 } |
| 921 | 938 |
| 922 @SmallTest | 939 @SmallTest |
| 923 @Feature({"Cronet"}) | 940 @Feature({"Cronet"}) |
| 924 @OnlyRunNativeCronet | 941 @OnlyRunNativeCronet |
| 925 public void testEchoStreamWriteFirst() throws Exception { | 942 public void testEchoStreamWriteFirst() throws Exception { |
| 926 String url = Http2TestServer.getEchoStreamUrl(); | 943 String url = Http2TestServer.getEchoStreamUrl(); |
| 927 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 944 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 928 callback.setAutoAdvance(false); | 945 callback.setAutoAdvance(false); |
| 929 String[] testData = {"a", "bb", "ccc", "Test String", "1234567890", "woo
t!"}; | 946 String[] testData = {"a", "bb", "ccc", "Test String", "1234567890", "woo
t!"}; |
| 930 StringBuilder stringData = new StringBuilder(); | 947 StringBuilder stringData = new StringBuilder(); |
| 931 for (String writeData : testData) { | 948 for (String writeData : testData) { |
| 932 callback.addWriteData(writeData.getBytes()); | 949 callback.addWriteData(writeData.getBytes()); |
| 933 stringData.append(writeData); | 950 stringData.append(writeData); |
| 934 } | 951 } |
| 935 // Create stream. | 952 // Create stream. |
| 936 BidirectionalStream stream = new BidirectionalStream | 953 BidirectionalStream stream = |
| 937 .Builder(url, callback, callback.ge
tExecutor(), | 954 mTestFramework.mCronetEngine |
| 938 mTestFramework.mCronetEngin
e) | 955 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
| 939 .build(); | 956 .build(); |
| 940 stream.start(); | 957 stream.start(); |
| 941 // Write first. | 958 // Write first. |
| 942 callback.waitForNextWriteStep(); // onStreamReady | 959 callback.waitForNextWriteStep(); // onStreamReady |
| 943 for (String expected : testData) { | 960 for (String expected : testData) { |
| 944 // Write next chunk of test data. | 961 // Write next chunk of test data. |
| 945 callback.startNextWrite(stream); | 962 callback.startNextWrite(stream); |
| 946 callback.waitForNextWriteStep(); // onWriteCompleted | 963 callback.waitForNextWriteStep(); // onWriteCompleted |
| 947 } | 964 } |
| 948 | 965 |
| 949 // Wait for read step, but don't read yet. | 966 // Wait for read step, but don't read yet. |
| (...skipping 21 matching lines...) Expand all Loading... |
| 971 String url = Http2TestServer.getEchoStreamUrl(); | 988 String url = Http2TestServer.getEchoStreamUrl(); |
| 972 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 989 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 973 callback.setAutoAdvance(false); | 990 callback.setAutoAdvance(false); |
| 974 String[] testData = {"a", "bb", "ccc", "Test String", "1234567890", "woo
t!"}; | 991 String[] testData = {"a", "bb", "ccc", "Test String", "1234567890", "woo
t!"}; |
| 975 StringBuilder stringData = new StringBuilder(); | 992 StringBuilder stringData = new StringBuilder(); |
| 976 for (String writeData : testData) { | 993 for (String writeData : testData) { |
| 977 callback.addWriteData(writeData.getBytes()); | 994 callback.addWriteData(writeData.getBytes()); |
| 978 stringData.append(writeData); | 995 stringData.append(writeData); |
| 979 } | 996 } |
| 980 // Create stream. | 997 // Create stream. |
| 981 BidirectionalStream stream = new BidirectionalStream | 998 BidirectionalStream stream = |
| 982 .Builder(url, callback, callback.ge
tExecutor(), | 999 mTestFramework.mCronetEngine |
| 983 mTestFramework.mCronetEngin
e) | 1000 .newBidirectionalStreamBuilder(url, callback, callback.g
etExecutor()) |
| 984 .build(); | 1001 .build(); |
| 985 stream.start(); | 1002 stream.start(); |
| 986 callback.waitForNextWriteStep(); | 1003 callback.waitForNextWriteStep(); |
| 987 callback.waitForNextReadStep(); | 1004 callback.waitForNextReadStep(); |
| 988 | 1005 |
| 989 for (String expected : testData) { | 1006 for (String expected : testData) { |
| 990 // Write next chunk of test data. | 1007 // Write next chunk of test data. |
| 991 callback.startNextWrite(stream); | 1008 callback.startNextWrite(stream); |
| 992 callback.waitForNextWriteStep(); | 1009 callback.waitForNextWriteStep(); |
| 993 | 1010 |
| 994 // Read next chunk of test data. | 1011 // Read next chunk of test data. |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1011 * Checks that the buffer is updated correctly, when starting at an offset. | 1028 * Checks that the buffer is updated correctly, when starting at an offset. |
| 1012 */ | 1029 */ |
| 1013 @SmallTest | 1030 @SmallTest |
| 1014 @Feature({"Cronet"}) | 1031 @Feature({"Cronet"}) |
| 1015 @OnlyRunNativeCronet | 1032 @OnlyRunNativeCronet |
| 1016 public void testSimpleGetBufferUpdates() throws Exception { | 1033 public void testSimpleGetBufferUpdates() throws Exception { |
| 1017 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 1034 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 1018 callback.setAutoAdvance(false); | 1035 callback.setAutoAdvance(false); |
| 1019 // Since the method is "GET", the expected response body is also "GET". | 1036 // Since the method is "GET", the expected response body is also "GET". |
| 1020 BidirectionalStream.Builder builder = | 1037 BidirectionalStream.Builder builder = |
| 1021 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl
(), callback, | 1038 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 1022 callback.getExecutor(), mTestFramework.mCronetEngine); | 1039 Http2TestServer.getEchoMethodUrl(), callback, callback.g
etExecutor()); |
| 1023 BidirectionalStream stream = builder.setHttpMethod("GET").build(); | 1040 BidirectionalStream stream = builder.setHttpMethod("GET").build(); |
| 1024 stream.start(); | 1041 stream.start(); |
| 1025 callback.waitForNextReadStep(); | 1042 callback.waitForNextReadStep(); |
| 1026 | 1043 |
| 1027 assertEquals(null, callback.mError); | 1044 assertEquals(null, callback.mError); |
| 1028 assertFalse(callback.isDone()); | 1045 assertFalse(callback.isDone()); |
| 1029 assertEquals(TestBidirectionalStreamCallback.ResponseStep.ON_RESPONSE_ST
ARTED, | 1046 assertEquals(TestBidirectionalStreamCallback.ResponseStep.ON_RESPONSE_ST
ARTED, |
| 1030 callback.mResponseStep); | 1047 callback.mResponseStep); |
| 1031 | 1048 |
| 1032 ByteBuffer readBuffer = ByteBuffer.allocateDirect(5); | 1049 ByteBuffer readBuffer = ByteBuffer.allocateDirect(5); |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1104 runSimpleGetWithExpectedReceivedBytesCount(27); | 1121 runSimpleGetWithExpectedReceivedBytesCount(27); |
| 1105 } | 1122 } |
| 1106 | 1123 |
| 1107 @SmallTest | 1124 @SmallTest |
| 1108 @Feature({"Cronet"}) | 1125 @Feature({"Cronet"}) |
| 1109 @OnlyRunNativeCronet | 1126 @OnlyRunNativeCronet |
| 1110 public void testBadBuffers() throws Exception { | 1127 public void testBadBuffers() throws Exception { |
| 1111 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 1128 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 1112 callback.setAutoAdvance(false); | 1129 callback.setAutoAdvance(false); |
| 1113 BidirectionalStream.Builder builder = | 1130 BidirectionalStream.Builder builder = |
| 1114 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl
(), callback, | 1131 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 1115 callback.getExecutor(), mTestFramework.mCronetEngine); | 1132 Http2TestServer.getEchoMethodUrl(), callback, callback.g
etExecutor()); |
| 1116 BidirectionalStream stream = builder.setHttpMethod("GET").build(); | 1133 BidirectionalStream stream = builder.setHttpMethod("GET").build(); |
| 1117 stream.start(); | 1134 stream.start(); |
| 1118 callback.waitForNextReadStep(); | 1135 callback.waitForNextReadStep(); |
| 1119 | 1136 |
| 1120 assertEquals(null, callback.mError); | 1137 assertEquals(null, callback.mError); |
| 1121 assertFalse(callback.isDone()); | 1138 assertFalse(callback.isDone()); |
| 1122 assertEquals(TestBidirectionalStreamCallback.ResponseStep.ON_RESPONSE_ST
ARTED, | 1139 assertEquals(TestBidirectionalStreamCallback.ResponseStep.ON_RESPONSE_ST
ARTED, |
| 1123 callback.mResponseStep); | 1140 callback.mResponseStep); |
| 1124 | 1141 |
| 1125 // Try to read using a full buffer. | 1142 // Try to read using a full buffer. |
| (...skipping 20 matching lines...) Expand all Loading... |
| 1146 ByteBuffer readBuffer = ByteBuffer.allocateDirect(5); | 1163 ByteBuffer readBuffer = ByteBuffer.allocateDirect(5); |
| 1147 stream.read(readBuffer); | 1164 stream.read(readBuffer); |
| 1148 callback.blockForDone(); | 1165 callback.blockForDone(); |
| 1149 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 1166 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 1150 assertEquals("GET", callback.mResponseAsString); | 1167 assertEquals("GET", callback.mResponseAsString); |
| 1151 } | 1168 } |
| 1152 | 1169 |
| 1153 private void throwOrCancel( | 1170 private void throwOrCancel( |
| 1154 FailureType failureType, ResponseStep failureStep, boolean expectErr
or) { | 1171 FailureType failureType, ResponseStep failureStep, boolean expectErr
or) { |
| 1155 // Use a fresh CronetEngine each time so Http2 session is not reused. | 1172 // Use a fresh CronetEngine each time so Http2 session is not reused. |
| 1156 CronetEngine.Builder builder = new CronetEngine.Builder(getContext()); | 1173 ExperimentalCronetEngine.Builder builder = |
| 1157 builder.setMockCertVerifierForTesting(QuicTestServer.createMockCertVerif
ier()); | 1174 new ExperimentalCronetEngine.Builder(getContext()); |
| 1175 CronetTestUtil.setMockCertVerifierForTesting( |
| 1176 builder, QuicTestServer.createMockCertVerifier()); |
| 1158 mTestFramework = startCronetTestFrameworkWithUrlAndCronetEngineBuilder(n
ull, builder); | 1177 mTestFramework = startCronetTestFrameworkWithUrlAndCronetEngineBuilder(n
ull, builder); |
| 1159 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 1178 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 1160 callback.setFailure(failureType, failureStep); | 1179 callback.setFailure(failureType, failureStep); |
| 1161 TestRequestFinishedListener requestFinishedListener = new TestRequestFin
ishedListener(); | 1180 TestRequestFinishedListener requestFinishedListener = new TestRequestFin
ishedListener(); |
| 1162 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL
istener); | 1181 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL
istener); |
| 1163 BidirectionalStream.Builder streamBuilder = | 1182 BidirectionalStream.Builder streamBuilder = |
| 1164 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl
(), callback, | 1183 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 1165 callback.getExecutor(), mTestFramework.mCronetEngine); | 1184 Http2TestServer.getEchoMethodUrl(), callback, callback.g
etExecutor()); |
| 1166 BidirectionalStream stream = streamBuilder.setHttpMethod("GET").build(); | 1185 BidirectionalStream stream = streamBuilder.setHttpMethod("GET").build(); |
| 1167 Date startTime = new Date(); | 1186 Date startTime = new Date(); |
| 1168 stream.start(); | 1187 stream.start(); |
| 1169 callback.blockForDone(); | 1188 callback.blockForDone(); |
| 1170 assertTrue(stream.isDone()); | 1189 assertTrue(stream.isDone()); |
| 1171 requestFinishedListener.blockUntilDone(); | 1190 requestFinishedListener.blockUntilDone(); |
| 1172 Date endTime = new Date(); | 1191 Date endTime = new Date(); |
| 1173 RequestFinishedInfo finishedInfo = requestFinishedListener.getRequestInf
o(); | 1192 RequestFinishedInfo finishedInfo = requestFinishedListener.getRequestInf
o(); |
| 1174 RequestFinishedInfo.Metrics metrics = finishedInfo.getMetrics(); | 1193 RequestFinishedInfo.Metrics metrics = finishedInfo.getMetrics(); |
| 1175 assertNotNull(metrics); | 1194 assertNotNull(metrics); |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1236 throwOrCancel(FailureType.THROW_SYNC, ResponseStep.ON_READ_COMPLETED, tr
ue); | 1255 throwOrCancel(FailureType.THROW_SYNC, ResponseStep.ON_READ_COMPLETED, tr
ue); |
| 1237 } | 1256 } |
| 1238 | 1257 |
| 1239 @SmallTest | 1258 @SmallTest |
| 1240 @Feature({"Cronet"}) | 1259 @Feature({"Cronet"}) |
| 1241 @OnlyRunNativeCronet | 1260 @OnlyRunNativeCronet |
| 1242 public void testThrowOnSucceeded() { | 1261 public void testThrowOnSucceeded() { |
| 1243 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 1262 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 1244 callback.setFailure(FailureType.THROW_SYNC, ResponseStep.ON_SUCCEEDED); | 1263 callback.setFailure(FailureType.THROW_SYNC, ResponseStep.ON_SUCCEEDED); |
| 1245 BidirectionalStream.Builder builder = | 1264 BidirectionalStream.Builder builder = |
| 1246 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl
(), callback, | 1265 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 1247 callback.getExecutor(), mTestFramework.mCronetEngine); | 1266 Http2TestServer.getEchoMethodUrl(), callback, callback.g
etExecutor()); |
| 1248 BidirectionalStream stream = builder.setHttpMethod("GET").build(); | 1267 BidirectionalStream stream = builder.setHttpMethod("GET").build(); |
| 1249 stream.start(); | 1268 stream.start(); |
| 1250 callback.blockForDone(); | 1269 callback.blockForDone(); |
| 1251 assertEquals(callback.mResponseStep, ResponseStep.ON_SUCCEEDED); | 1270 assertEquals(callback.mResponseStep, ResponseStep.ON_SUCCEEDED); |
| 1252 assertTrue(stream.isDone()); | 1271 assertTrue(stream.isDone()); |
| 1253 assertNotNull(callback.mResponseInfo); | 1272 assertNotNull(callback.mResponseInfo); |
| 1254 // Check that error thrown from 'onSucceeded' callback is not reported. | 1273 // Check that error thrown from 'onSucceeded' callback is not reported. |
| 1255 assertNull(callback.mError); | 1274 assertNull(callback.mError); |
| 1256 assertFalse(callback.mOnErrorCalled); | 1275 assertFalse(callback.mOnErrorCalled); |
| 1257 } | 1276 } |
| 1258 | 1277 |
| 1259 @SmallTest | 1278 @SmallTest |
| 1260 @Feature({"Cronet"}) | 1279 @Feature({"Cronet"}) |
| 1261 @OnlyRunNativeCronet | 1280 @OnlyRunNativeCronet |
| 1262 public void testExecutorShutdownBeforeStreamIsDone() { | 1281 public void testExecutorShutdownBeforeStreamIsDone() { |
| 1263 // Test that stream is destroyed even if executor is shut down and rejec
ts posting tasks. | 1282 // Test that stream is destroyed even if executor is shut down and rejec
ts posting tasks. |
| 1264 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 1283 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 1265 callback.setAutoAdvance(false); | 1284 callback.setAutoAdvance(false); |
| 1266 BidirectionalStream.Builder builder = | 1285 BidirectionalStream.Builder builder = |
| 1267 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl
(), callback, | 1286 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 1268 callback.getExecutor(), mTestFramework.mCronetEngine); | 1287 Http2TestServer.getEchoMethodUrl(), callback, callback.g
etExecutor()); |
| 1269 CronetBidirectionalStream stream = | 1288 CronetBidirectionalStream stream = |
| 1270 (CronetBidirectionalStream) builder.setHttpMethod("GET").build()
; | 1289 (CronetBidirectionalStream) builder.setHttpMethod("GET").build()
; |
| 1271 stream.start(); | 1290 stream.start(); |
| 1272 callback.waitForNextReadStep(); | 1291 callback.waitForNextReadStep(); |
| 1273 assertFalse(callback.isDone()); | 1292 assertFalse(callback.isDone()); |
| 1274 assertFalse(stream.isDone()); | 1293 assertFalse(stream.isDone()); |
| 1275 | 1294 |
| 1276 final ConditionVariable streamDestroyed = new ConditionVariable(false); | 1295 final ConditionVariable streamDestroyed = new ConditionVariable(false); |
| 1277 stream.setOnDestroyedCallbackForTesting(new Runnable() { | 1296 stream.setOnDestroyedCallbackForTesting(new Runnable() { |
| 1278 @Override | 1297 @Override |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1327 @SmallTest | 1346 @SmallTest |
| 1328 @Feature({"Cronet"}) | 1347 @Feature({"Cronet"}) |
| 1329 @OnlyRunNativeCronet | 1348 @OnlyRunNativeCronet |
| 1330 public void testCronetEngineShutdown() throws Exception { | 1349 public void testCronetEngineShutdown() throws Exception { |
| 1331 // Test that CronetEngine cannot be shut down if there are any active st
reams. | 1350 // Test that CronetEngine cannot be shut down if there are any active st
reams. |
| 1332 TestBidirectionalStreamCallback callback = new ShutdownTestBidirectional
StreamCallback(); | 1351 TestBidirectionalStreamCallback callback = new ShutdownTestBidirectional
StreamCallback(); |
| 1333 // Block callback when response starts to verify that shutdown fails | 1352 // Block callback when response starts to verify that shutdown fails |
| 1334 // if there are active streams. | 1353 // if there are active streams. |
| 1335 callback.setAutoAdvance(false); | 1354 callback.setAutoAdvance(false); |
| 1336 BidirectionalStream.Builder builder = | 1355 BidirectionalStream.Builder builder = |
| 1337 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl
(), callback, | 1356 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 1338 callback.getExecutor(), mTestFramework.mCronetEngine); | 1357 Http2TestServer.getEchoMethodUrl(), callback, callback.g
etExecutor()); |
| 1339 CronetBidirectionalStream stream = | 1358 CronetBidirectionalStream stream = |
| 1340 (CronetBidirectionalStream) builder.setHttpMethod("GET").build()
; | 1359 (CronetBidirectionalStream) builder.setHttpMethod("GET").build()
; |
| 1341 stream.start(); | 1360 stream.start(); |
| 1342 try { | 1361 try { |
| 1343 mTestFramework.mCronetEngine.shutdown(); | 1362 mTestFramework.mCronetEngine.shutdown(); |
| 1344 fail("Should throw an exception"); | 1363 fail("Should throw an exception"); |
| 1345 } catch (Exception e) { | 1364 } catch (Exception e) { |
| 1346 assertEquals("Cannot shutdown with active requests.", e.getMessage()
); | 1365 assertEquals("Cannot shutdown with active requests.", e.getMessage()
); |
| 1347 } | 1366 } |
| 1348 | 1367 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 1372 callback.blockForDone(); | 1391 callback.blockForDone(); |
| 1373 } | 1392 } |
| 1374 | 1393 |
| 1375 @SmallTest | 1394 @SmallTest |
| 1376 @Feature({"Cronet"}) | 1395 @Feature({"Cronet"}) |
| 1377 @OnlyRunNativeCronet | 1396 @OnlyRunNativeCronet |
| 1378 public void testCronetEngineShutdownAfterStreamFailure() throws Exception { | 1397 public void testCronetEngineShutdownAfterStreamFailure() throws Exception { |
| 1379 // Test that CronetEngine can be shut down after stream reports a failur
e. | 1398 // Test that CronetEngine can be shut down after stream reports a failur
e. |
| 1380 TestBidirectionalStreamCallback callback = new ShutdownTestBidirectional
StreamCallback(); | 1399 TestBidirectionalStreamCallback callback = new ShutdownTestBidirectional
StreamCallback(); |
| 1381 BidirectionalStream.Builder builder = | 1400 BidirectionalStream.Builder builder = |
| 1382 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl
(), callback, | 1401 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 1383 callback.getExecutor(), mTestFramework.mCronetEngine); | 1402 Http2TestServer.getEchoMethodUrl(), callback, callback.g
etExecutor()); |
| 1384 CronetBidirectionalStream stream = | 1403 CronetBidirectionalStream stream = |
| 1385 (CronetBidirectionalStream) builder.setHttpMethod("GET").build()
; | 1404 (CronetBidirectionalStream) builder.setHttpMethod("GET").build()
; |
| 1386 stream.start(); | 1405 stream.start(); |
| 1387 callback.setFailure(FailureType.THROW_SYNC, ResponseStep.ON_READ_COMPLET
ED); | 1406 callback.setFailure(FailureType.THROW_SYNC, ResponseStep.ON_READ_COMPLET
ED); |
| 1388 callback.blockForDone(); | 1407 callback.blockForDone(); |
| 1389 assertTrue(callback.mOnErrorCalled); | 1408 assertTrue(callback.mOnErrorCalled); |
| 1390 assertNull(mTestFramework.mCronetEngine); | 1409 assertNull(mTestFramework.mCronetEngine); |
| 1391 } | 1410 } |
| 1392 | 1411 |
| 1393 @SmallTest | 1412 @SmallTest |
| 1394 @Feature({"Cronet"}) | 1413 @Feature({"Cronet"}) |
| 1395 @OnlyRunNativeCronet | 1414 @OnlyRunNativeCronet |
| 1396 public void testCronetEngineShutdownAfterStreamCancel() throws Exception { | 1415 public void testCronetEngineShutdownAfterStreamCancel() throws Exception { |
| 1397 // Test that CronetEngine can be shut down after stream is canceled. | 1416 // Test that CronetEngine can be shut down after stream is canceled. |
| 1398 TestBidirectionalStreamCallback callback = new ShutdownTestBidirectional
StreamCallback(); | 1417 TestBidirectionalStreamCallback callback = new ShutdownTestBidirectional
StreamCallback(); |
| 1399 BidirectionalStream.Builder builder = | 1418 BidirectionalStream.Builder builder = |
| 1400 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl
(), callback, | 1419 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( |
| 1401 callback.getExecutor(), mTestFramework.mCronetEngine); | 1420 Http2TestServer.getEchoMethodUrl(), callback, callback.g
etExecutor()); |
| 1402 CronetBidirectionalStream stream = | 1421 CronetBidirectionalStream stream = |
| 1403 (CronetBidirectionalStream) builder.setHttpMethod("GET").build()
; | 1422 (CronetBidirectionalStream) builder.setHttpMethod("GET").build()
; |
| 1404 | 1423 |
| 1405 // Block callback when response starts to verify that shutdown fails | 1424 // Block callback when response starts to verify that shutdown fails |
| 1406 // if there are active requests. | 1425 // if there are active requests. |
| 1407 callback.setAutoAdvance(false); | 1426 callback.setAutoAdvance(false); |
| 1408 stream.start(); | 1427 stream.start(); |
| 1409 try { | 1428 try { |
| 1410 mTestFramework.mCronetEngine.shutdown(); | 1429 mTestFramework.mCronetEngine.shutdown(); |
| 1411 fail("Should throw an exception"); | 1430 fail("Should throw an exception"); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1425 private static String bufferContentsToString(ByteBuffer byteBuffer, int star
t, int end) { | 1444 private static String bufferContentsToString(ByteBuffer byteBuffer, int star
t, int end) { |
| 1426 // Use a duplicate to avoid modifying byteBuffer. | 1445 // Use a duplicate to avoid modifying byteBuffer. |
| 1427 ByteBuffer duplicate = byteBuffer.duplicate(); | 1446 ByteBuffer duplicate = byteBuffer.duplicate(); |
| 1428 duplicate.position(start); | 1447 duplicate.position(start); |
| 1429 duplicate.limit(end); | 1448 duplicate.limit(end); |
| 1430 byte[] contents = new byte[duplicate.remaining()]; | 1449 byte[] contents = new byte[duplicate.remaining()]; |
| 1431 duplicate.get(contents); | 1450 duplicate.get(contents); |
| 1432 return new String(contents); | 1451 return new String(contents); |
| 1433 } | 1452 } |
| 1434 } | 1453 } |
| OLD | NEW |