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