Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(560)

Side by Side Diff: components/cronet/android/test/javatests/src/org/chromium/net/BidirectionalStreamTest.java

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

Powered by Google App Engine
This is Rietveld 408576698