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

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

Issue 2892013002: [Cronet] Clean up tests (Closed)
Patch Set: address comments Created 3 years, 6 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 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.support.test.filters.SmallTest; 10 import android.support.test.filters.SmallTest;
(...skipping 14 matching lines...) Expand all
25 import java.util.HashSet; 25 import java.util.HashSet;
26 import java.util.List; 26 import java.util.List;
27 import java.util.Map; 27 import java.util.Map;
28 import java.util.regex.Matcher; 28 import java.util.regex.Matcher;
29 import java.util.regex.Pattern; 29 import java.util.regex.Pattern;
30 30
31 /** 31 /**
32 * Test functionality of BidirectionalStream interface. 32 * Test functionality of BidirectionalStream interface.
33 */ 33 */
34 public class BidirectionalStreamTest extends CronetTestBase { 34 public class BidirectionalStreamTest extends CronetTestBase {
35 private CronetTestFramework mTestFramework; 35 private ExperimentalCronetEngine mCronetEngine;
36
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 ExperimentalCronetEngine.Builder builder = 41 ExperimentalCronetEngine.Builder builder =
43 new ExperimentalCronetEngine.Builder(getContext()); 42 new ExperimentalCronetEngine.Builder(getContext());
44 CronetTestUtil.setMockCertVerifierForTesting( 43 CronetTestUtil.setMockCertVerifierForTesting(
45 builder, QuicTestServer.createMockCertVerifier()); 44 builder, QuicTestServer.createMockCertVerifier());
46 45
47 mTestFramework = startCronetTestFrameworkWithUrlAndCronetEngineBuilder(n ull, builder); 46 mCronetEngine = builder.build();
48 assertTrue(Http2TestServer.startHttp2TestServer( 47 assertTrue(Http2TestServer.startHttp2TestServer(
49 getContext(), SERVER_CERT_PEM, SERVER_KEY_PKCS8_PEM)); 48 getContext(), SERVER_CERT_PEM, SERVER_KEY_PKCS8_PEM));
50 } 49 }
51 50
52 @Override 51 @Override
53 protected void tearDown() throws Exception { 52 protected void tearDown() throws Exception {
54 assertTrue(Http2TestServer.shutdownHttp2TestServer()); 53 assertTrue(Http2TestServer.shutdownHttp2TestServer());
55 if (mTestFramework.mCronetEngine != null) { 54 if (mCronetEngine != null) {
56 mTestFramework.mCronetEngine.shutdown(); 55 mCronetEngine.shutdown();
57 } 56 }
58 super.tearDown(); 57 super.tearDown();
59 } 58 }
60 59
61 private static void checkResponseInfo(UrlResponseInfo responseInfo, String e xpectedUrl, 60 private static void checkResponseInfo(UrlResponseInfo responseInfo, String e xpectedUrl,
62 int expectedHttpStatusCode, String expectedHttpStatusText) { 61 int expectedHttpStatusCode, String expectedHttpStatusText) {
63 assertEquals(expectedUrl, responseInfo.getUrl()); 62 assertEquals(expectedUrl, responseInfo.getUrl());
64 assertEquals( 63 assertEquals(
65 expectedUrl, responseInfo.getUrlChain().get(responseInfo.getUrlC hain().size() - 1)); 64 expectedUrl, responseInfo.getUrlChain().get(responseInfo.getUrlC hain().size() - 1));
66 assertEquals(expectedHttpStatusCode, responseInfo.getHttpStatusCode()); 65 assertEquals(expectedHttpStatusCode, responseInfo.getHttpStatusCode());
(...skipping 22 matching lines...) Expand all
89 Arrays.asList(urls), statusCode, message, headersList, false, "h 2", null); 88 Arrays.asList(urls), statusCode, message, headersList, false, "h 2", null);
90 urlResponseInfo.setReceivedByteCount(receivedBytes); 89 urlResponseInfo.setReceivedByteCount(receivedBytes);
91 return urlResponseInfo; 90 return urlResponseInfo;
92 } 91 }
93 92
94 private void runSimpleGetWithExpectedReceivedByteCount(int expectedReceivedB ytes) 93 private void runSimpleGetWithExpectedReceivedByteCount(int expectedReceivedB ytes)
95 throws Exception { 94 throws Exception {
96 String url = Http2TestServer.getEchoMethodUrl(); 95 String url = Http2TestServer.getEchoMethodUrl();
97 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 96 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
98 TestRequestFinishedListener requestFinishedListener = new TestRequestFin ishedListener(); 97 TestRequestFinishedListener requestFinishedListener = new TestRequestFin ishedListener();
99 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL istener); 98 mCronetEngine.addRequestFinishedListener(requestFinishedListener);
100 // Create stream. 99 // Create stream.
101 BidirectionalStream stream = 100 BidirectionalStream stream =
102 mTestFramework.mCronetEngine 101 mCronetEngine.newBidirectionalStreamBuilder(url, callback, callb ack.getExecutor())
103 .newBidirectionalStreamBuilder(url, callback, callback.g etExecutor())
104 .setHttpMethod("GET") 102 .setHttpMethod("GET")
105 .build(); 103 .build();
106 stream.start(); 104 stream.start();
107 callback.blockForDone(); 105 callback.blockForDone();
108 assertTrue(stream.isDone()); 106 assertTrue(stream.isDone());
109 requestFinishedListener.blockUntilDone(); 107 requestFinishedListener.blockUntilDone();
110 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 108 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
111 // Default method is 'GET'. 109 // Default method is 'GET'.
112 assertEquals("GET", callback.mResponseAsString); 110 assertEquals("GET", callback.mResponseAsString);
113 UrlResponseInfo urlResponseInfo = createUrlResponseInfo( 111 UrlResponseInfo urlResponseInfo = createUrlResponseInfo(
(...skipping 10 matching lines...) Expand all
124 if (testingJavaImpl()) { 122 if (testingJavaImpl()) {
125 runBuilderCheckJavaImpl(); 123 runBuilderCheckJavaImpl();
126 } else { 124 } else {
127 runBuilderCheckNativeImpl(); 125 runBuilderCheckNativeImpl();
128 } 126 }
129 } 127 }
130 128
131 private void runBuilderCheckNativeImpl() throws Exception { 129 private void runBuilderCheckNativeImpl() throws Exception {
132 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 130 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
133 try { 131 try {
134 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( 132 mCronetEngine.newBidirectionalStreamBuilder(null, callback, callback .getExecutor());
135 null, callback, callback.getExecutor());
136 fail("URL not null-checked"); 133 fail("URL not null-checked");
137 } catch (NullPointerException e) { 134 } catch (NullPointerException e) {
138 assertEquals("URL is required.", e.getMessage()); 135 assertEquals("URL is required.", e.getMessage());
139 } 136 }
140 try { 137 try {
141 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( 138 mCronetEngine.newBidirectionalStreamBuilder(
142 Http2TestServer.getServerUrl(), null, callback.getExecutor() ); 139 Http2TestServer.getServerUrl(), null, callback.getExecutor() );
143 fail("Callback not null-checked"); 140 fail("Callback not null-checked");
144 } catch (NullPointerException e) { 141 } catch (NullPointerException e) {
145 assertEquals("Callback is required.", e.getMessage()); 142 assertEquals("Callback is required.", e.getMessage());
146 } 143 }
147 try { 144 try {
148 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( 145 mCronetEngine.newBidirectionalStreamBuilder(
149 Http2TestServer.getServerUrl(), callback, null); 146 Http2TestServer.getServerUrl(), callback, null);
150 fail("Executor not null-checked"); 147 fail("Executor not null-checked");
151 } catch (NullPointerException e) { 148 } catch (NullPointerException e) {
152 assertEquals("Executor is required.", e.getMessage()); 149 assertEquals("Executor is required.", e.getMessage());
153 } 150 }
154 // Verify successful creation doesn't throw. 151 // Verify successful creation doesn't throw.
155 BidirectionalStream.Builder builder = 152 BidirectionalStream.Builder builder = mCronetEngine.newBidirectionalStre amBuilder(
156 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( 153 Http2TestServer.getServerUrl(), callback, callback.getExecutor() );
157 Http2TestServer.getServerUrl(), callback, callback.getEx ecutor());
158 try { 154 try {
159 builder.addHeader(null, "value"); 155 builder.addHeader(null, "value");
160 fail("Header name is not null-checked"); 156 fail("Header name is not null-checked");
161 } catch (NullPointerException e) { 157 } catch (NullPointerException e) {
162 assertEquals("Invalid header name.", e.getMessage()); 158 assertEquals("Invalid header name.", e.getMessage());
163 } 159 }
164 try { 160 try {
165 builder.addHeader("name", null); 161 builder.addHeader("name", null);
166 fail("Header value is not null-checked"); 162 fail("Header value is not null-checked");
167 } catch (NullPointerException e) { 163 } catch (NullPointerException e) {
168 assertEquals("Invalid header value.", e.getMessage()); 164 assertEquals("Invalid header value.", e.getMessage());
169 } 165 }
170 try { 166 try {
171 builder.setHttpMethod(null); 167 builder.setHttpMethod(null);
172 fail("Method name is not null-checked"); 168 fail("Method name is not null-checked");
173 } catch (NullPointerException e) { 169 } catch (NullPointerException e) {
174 assertEquals("Method is required.", e.getMessage()); 170 assertEquals("Method is required.", e.getMessage());
175 } 171 }
176 } 172 }
177 173
178 private void runBuilderCheckJavaImpl() { 174 private void runBuilderCheckJavaImpl() {
179 try { 175 try {
180 TestBidirectionalStreamCallback callback = new TestBidirectionalStre amCallback(); 176 TestBidirectionalStreamCallback callback = new TestBidirectionalStre amCallback();
181 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( 177 createJavaEngineBuilder().build().newBidirectionalStreamBuilder(
182 Http2TestServer.getServerUrl(), callback, callback.getExecut or()); 178 Http2TestServer.getServerUrl(), callback, callback.getExecut or());
183 fail("JavaCronetEngine doesn't support BidirectionalStream." 179 fail("JavaCronetEngine doesn't support BidirectionalStream."
184 + " Expected UnsupportedOperationException"); 180 + " Expected UnsupportedOperationException");
185 } catch (UnsupportedOperationException e) { 181 } catch (UnsupportedOperationException e) {
186 // Expected. 182 // Expected.
187 } 183 }
188 } 184 }
189 185
190 @SmallTest 186 @SmallTest
191 @Feature({"Cronet"}) 187 @Feature({"Cronet"})
192 @OnlyRunNativeCronet 188 @OnlyRunNativeCronet
193 public void testFailPlainHttp() throws Exception { 189 public void testFailPlainHttp() throws Exception {
194 String url = "http://example.com"; 190 String url = "http://example.com";
195 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 191 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
196 // Create stream. 192 // Create stream.
197 BidirectionalStream stream = 193 BidirectionalStream stream =
198 mTestFramework.mCronetEngine 194 mCronetEngine.newBidirectionalStreamBuilder(url, callback, callb ack.getExecutor())
199 .newBidirectionalStreamBuilder(url, callback, callback.g etExecutor())
200 .build(); 195 .build();
201 stream.start(); 196 stream.start();
202 callback.blockForDone(); 197 callback.blockForDone();
203 assertTrue(stream.isDone()); 198 assertTrue(stream.isDone());
204 assertContains("Exception in BidirectionalStream: net::ERR_DISALLOWED_UR L_SCHEME", 199 assertContains("Exception in BidirectionalStream: net::ERR_DISALLOWED_UR L_SCHEME",
205 callback.mError.getMessage()); 200 callback.mError.getMessage());
206 assertEquals(-301, ((NetworkException) callback.mError).getCronetInterna lErrorCode()); 201 assertEquals(-301, ((NetworkException) callback.mError).getCronetInterna lErrorCode());
207 } 202 }
208 203
209 @SmallTest 204 @SmallTest
210 @Feature({"Cronet"}) 205 @Feature({"Cronet"})
211 @OnlyRunNativeCronet 206 @OnlyRunNativeCronet
212 public void testSimpleGet() throws Exception { 207 public void testSimpleGet() throws Exception {
213 // 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
214 // must account for an HPACK dynamic table size update. 209 // must account for an HPACK dynamic table size update.
215 runSimpleGetWithExpectedReceivedByteCount(31); 210 runSimpleGetWithExpectedReceivedByteCount(31);
216 } 211 }
217 212
218 @SmallTest 213 @SmallTest
219 @Feature({"Cronet"}) 214 @Feature({"Cronet"})
220 @OnlyRunNativeCronet 215 @OnlyRunNativeCronet
221 public void testSimpleHead() throws Exception { 216 public void testSimpleHead() throws Exception {
222 String url = Http2TestServer.getEchoMethodUrl(); 217 String url = Http2TestServer.getEchoMethodUrl();
223 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 218 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
224 // Create stream. 219 // Create stream.
225 BidirectionalStream stream = 220 BidirectionalStream stream =
226 mTestFramework.mCronetEngine 221 mCronetEngine.newBidirectionalStreamBuilder(url, callback, callb ack.getExecutor())
227 .newBidirectionalStreamBuilder(url, callback, callback.g etExecutor())
228 .setHttpMethod("HEAD") 222 .setHttpMethod("HEAD")
229 .build(); 223 .build();
230 stream.start(); 224 stream.start();
231 callback.blockForDone(); 225 callback.blockForDone();
232 assertTrue(stream.isDone()); 226 assertTrue(stream.isDone());
233 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 227 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
234 assertEquals("HEAD", callback.mResponseAsString); 228 assertEquals("HEAD", callback.mResponseAsString);
235 UrlResponseInfo urlResponseInfo = 229 UrlResponseInfo urlResponseInfo =
236 createUrlResponseInfo(new String[] {url}, "", 200, 32, ":status" , "200"); 230 createUrlResponseInfo(new String[] {url}, "", 200, 32, ":status" , "200");
237 assertResponseEquals(urlResponseInfo, callback.mResponseInfo); 231 assertResponseEquals(urlResponseInfo, callback.mResponseInfo);
238 checkResponseInfo(callback.mResponseInfo, Http2TestServer.getEchoMethodU rl(), 200, ""); 232 checkResponseInfo(callback.mResponseInfo, Http2TestServer.getEchoMethodU rl(), 200, "");
239 } 233 }
240 234
241 @SmallTest 235 @SmallTest
242 @Feature({"Cronet"}) 236 @Feature({"Cronet"})
243 @OnlyRunNativeCronet 237 @OnlyRunNativeCronet
244 public void testSimplePost() throws Exception { 238 public void testSimplePost() throws Exception {
245 String url = Http2TestServer.getEchoStreamUrl(); 239 String url = Http2TestServer.getEchoStreamUrl();
246 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 240 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
247 callback.addWriteData("Test String".getBytes()); 241 callback.addWriteData("Test String".getBytes());
248 callback.addWriteData("1234567890".getBytes()); 242 callback.addWriteData("1234567890".getBytes());
249 callback.addWriteData("woot!".getBytes()); 243 callback.addWriteData("woot!".getBytes());
250 TestRequestFinishedListener requestFinishedListener = new TestRequestFin ishedListener(); 244 TestRequestFinishedListener requestFinishedListener = new TestRequestFin ishedListener();
251 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL istener); 245 mCronetEngine.addRequestFinishedListener(requestFinishedListener);
252 // Create stream. 246 // Create stream.
253 BidirectionalStream stream = 247 BidirectionalStream stream =
254 mTestFramework.mCronetEngine 248 mCronetEngine.newBidirectionalStreamBuilder(url, callback, callb ack.getExecutor())
255 .newBidirectionalStreamBuilder(url, callback, callback.g etExecutor())
256 .addHeader("foo", "bar") 249 .addHeader("foo", "bar")
257 .addHeader("empty", "") 250 .addHeader("empty", "")
258 .addHeader("Content-Type", "zebra") 251 .addHeader("Content-Type", "zebra")
259 .addRequestAnnotation(this) 252 .addRequestAnnotation(this)
260 .addRequestAnnotation("request annotation") 253 .addRequestAnnotation("request annotation")
261 .build(); 254 .build();
262 Date startTime = new Date(); 255 Date startTime = new Date();
263 stream.start(); 256 stream.start();
264 callback.blockForDone(); 257 callback.blockForDone();
265 assertTrue(stream.isDone()); 258 assertTrue(stream.isDone());
(...skipping 16 matching lines...) Expand all
282 @SmallTest 275 @SmallTest
283 @Feature({"Cronet"}) 276 @Feature({"Cronet"})
284 @OnlyRunNativeCronet 277 @OnlyRunNativeCronet
285 public void testSimplePostWithFlush() throws Exception { 278 public void testSimplePostWithFlush() throws Exception {
286 String url = Http2TestServer.getEchoStreamUrl(); 279 String url = Http2TestServer.getEchoStreamUrl();
287 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 280 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
288 callback.addWriteData("Test String".getBytes(), false); 281 callback.addWriteData("Test String".getBytes(), false);
289 callback.addWriteData("1234567890".getBytes(), false); 282 callback.addWriteData("1234567890".getBytes(), false);
290 callback.addWriteData("woot!".getBytes(), true); 283 callback.addWriteData("woot!".getBytes(), true);
291 BidirectionalStream stream = 284 BidirectionalStream stream =
292 mTestFramework.mCronetEngine 285 mCronetEngine.newBidirectionalStreamBuilder(url, callback, callb ack.getExecutor())
293 .newBidirectionalStreamBuilder(url, callback, callback.g etExecutor())
294 .addHeader("foo", "bar") 286 .addHeader("foo", "bar")
295 .addHeader("empty", "") 287 .addHeader("empty", "")
296 .addHeader("Content-Type", "zebra") 288 .addHeader("Content-Type", "zebra")
297 .build(); 289 .build();
298 // Flush before stream is started should not crash. 290 // Flush before stream is started should not crash.
299 stream.flush(); 291 stream.flush();
300 292
301 stream.start(); 293 stream.start();
302 callback.blockForDone(); 294 callback.blockForDone();
303 assertTrue(stream.isDone()); 295 assertTrue(stream.isDone());
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
360 } 352 }
361 } 353 }
362 }; 354 };
363 callback.addWriteData("1".getBytes(), false); 355 callback.addWriteData("1".getBytes(), false);
364 callback.addWriteData("2".getBytes(), false); 356 callback.addWriteData("2".getBytes(), false);
365 callback.addWriteData("3".getBytes(), true); 357 callback.addWriteData("3".getBytes(), true);
366 callback.addWriteData("4".getBytes(), false); 358 callback.addWriteData("4".getBytes(), false);
367 callback.addWriteData("5".getBytes(), true); 359 callback.addWriteData("5".getBytes(), true);
368 callback.addWriteData("6".getBytes(), false); 360 callback.addWriteData("6".getBytes(), false);
369 CronetBidirectionalStream stream = 361 CronetBidirectionalStream stream =
370 (CronetBidirectionalStream) mTestFramework.mCronetEngine 362 (CronetBidirectionalStream) mCronetEngine
371 .newBidirectionalStreamBuilder(url, callback, callback.g etExecutor()) 363 .newBidirectionalStreamBuilder(url, callback, callback.g etExecutor())
372 .addHeader("foo", "bar") 364 .addHeader("foo", "bar")
373 .addHeader("empty", "") 365 .addHeader("empty", "")
374 .addHeader("Content-Type", "zebra") 366 .addHeader("Content-Type", "zebra")
375 .build(); 367 .build();
376 callback.setAutoAdvance(false); 368 callback.setAutoAdvance(false);
377 stream.start(); 369 stream.start();
378 callback.waitForNextWriteStep(); // onStreamReady 370 callback.waitForNextWriteStep(); // onStreamReady
379 371
380 assertEquals(0, stream.getPendingDataForTesting().size()); 372 assertEquals(0, stream.getPendingDataForTesting().size());
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
434 for (int i = 0; i < data.length; i++) { 426 for (int i = 0; i < data.length; i++) {
435 data[i] = 'x'; 427 data[i] = 'x';
436 } 428 }
437 ByteBuffer dummyData = ByteBuffer.allocateDirect(data.length); 429 ByteBuffer dummyData = ByteBuffer.allocateDirect(data.length);
438 dummyData.put(data); 430 dummyData.put(data);
439 dummyData.flip(); 431 dummyData.flip();
440 return dummyData; 432 return dummyData;
441 } 433 }
442 }; 434 };
443 CronetBidirectionalStream stream = 435 CronetBidirectionalStream stream =
444 (CronetBidirectionalStream) mTestFramework.mCronetEngine 436 (CronetBidirectionalStream) mCronetEngine
445 .newBidirectionalStreamBuilder(url, callback, callback.g etExecutor()) 437 .newBidirectionalStreamBuilder(url, callback, callback.g etExecutor())
446 .build(); 438 .build();
447 stream.start(); 439 stream.start();
448 callback.blockForDone(); 440 callback.blockForDone();
449 assertTrue(callback.mOnCanceledCalled); 441 assertTrue(callback.mOnCanceledCalled);
450 } 442 }
451 443
452 @SmallTest 444 @SmallTest
453 @Feature({"Cronet"}) 445 @Feature({"Cronet"})
454 @OnlyRunNativeCronet 446 @OnlyRunNativeCronet
(...skipping 16 matching lines...) Expand all
471 super.onStreamReady(stream); 463 super.onStreamReady(stream);
472 try { 464 try {
473 // Attempt to write data for GET request. 465 // Attempt to write data for GET request.
474 stream.write(ByteBuffer.wrap("dummy".getBytes()), true); 466 stream.write(ByteBuffer.wrap("dummy".getBytes()), true);
475 } catch (IllegalArgumentException e) { 467 } catch (IllegalArgumentException e) {
476 // Expected. 468 // Expected.
477 } 469 }
478 } 470 }
479 }; 471 };
480 BidirectionalStream stream = 472 BidirectionalStream stream =
481 mTestFramework.mCronetEngine 473 mCronetEngine
482 .newBidirectionalStreamBuilder(url, callback, callba ck.getExecutor()) 474 .newBidirectionalStreamBuilder(url, callback, callba ck.getExecutor())
483 .setHttpMethod("GET") 475 .setHttpMethod("GET")
484 .delayRequestHeadersUntilFirstFlush(i == 0) 476 .delayRequestHeadersUntilFirstFlush(i == 0)
485 .addHeader("foo", "bar") 477 .addHeader("foo", "bar")
486 .addHeader("empty", "") 478 .addHeader("empty", "")
487 .build(); 479 .build();
488 // Flush before stream is started should not crash. 480 // Flush before stream is started should not crash.
489 stream.flush(); 481 stream.flush();
490 482
491 stream.start(); 483 stream.start();
(...skipping 14 matching lines...) Expand all
506 @SmallTest 498 @SmallTest
507 @Feature({"Cronet"}) 499 @Feature({"Cronet"})
508 @OnlyRunNativeCronet 500 @OnlyRunNativeCronet
509 public void testSimplePostWithFlushAfterOneWrite() throws Exception { 501 public void testSimplePostWithFlushAfterOneWrite() throws Exception {
510 // TODO(xunjieli): Use ParameterizedTest instead of the loop. 502 // TODO(xunjieli): Use ParameterizedTest instead of the loop.
511 for (int i = 0; i < 2; i++) { 503 for (int i = 0; i < 2; i++) {
512 String url = Http2TestServer.getEchoStreamUrl(); 504 String url = Http2TestServer.getEchoStreamUrl();
513 TestBidirectionalStreamCallback callback = new TestBidirectionalStre amCallback(); 505 TestBidirectionalStreamCallback callback = new TestBidirectionalStre amCallback();
514 callback.addWriteData("Test String".getBytes(), true); 506 callback.addWriteData("Test String".getBytes(), true);
515 BidirectionalStream stream = 507 BidirectionalStream stream =
516 mTestFramework.mCronetEngine 508 mCronetEngine
517 .newBidirectionalStreamBuilder(url, callback, callba ck.getExecutor()) 509 .newBidirectionalStreamBuilder(url, callback, callba ck.getExecutor())
518 .delayRequestHeadersUntilFirstFlush(i == 0) 510 .delayRequestHeadersUntilFirstFlush(i == 0)
519 .addHeader("foo", "bar") 511 .addHeader("foo", "bar")
520 .addHeader("empty", "") 512 .addHeader("empty", "")
521 .addHeader("Content-Type", "zebra") 513 .addHeader("Content-Type", "zebra")
522 .build(); 514 .build();
523 stream.start(); 515 stream.start();
524 callback.blockForDone(); 516 callback.blockForDone();
525 assertTrue(stream.isDone()); 517 assertTrue(stream.isDone());
526 518
(...skipping 14 matching lines...) Expand all
541 for (int i = 0; i < 2; i++) { 533 for (int i = 0; i < 2; i++) {
542 String url = Http2TestServer.getEchoStreamUrl(); 534 String url = Http2TestServer.getEchoStreamUrl();
543 TestBidirectionalStreamCallback callback = new TestBidirectionalStre amCallback(); 535 TestBidirectionalStreamCallback callback = new TestBidirectionalStre amCallback();
544 callback.addWriteData("Test String".getBytes(), false); 536 callback.addWriteData("Test String".getBytes(), false);
545 callback.addWriteData("1234567890".getBytes(), false); 537 callback.addWriteData("1234567890".getBytes(), false);
546 callback.addWriteData("woot!".getBytes(), true); 538 callback.addWriteData("woot!".getBytes(), true);
547 callback.addWriteData("Test String".getBytes(), false); 539 callback.addWriteData("Test String".getBytes(), false);
548 callback.addWriteData("1234567890".getBytes(), false); 540 callback.addWriteData("1234567890".getBytes(), false);
549 callback.addWriteData("woot!".getBytes(), true); 541 callback.addWriteData("woot!".getBytes(), true);
550 BidirectionalStream stream = 542 BidirectionalStream stream =
551 mTestFramework.mCronetEngine 543 mCronetEngine
552 .newBidirectionalStreamBuilder(url, callback, callba ck.getExecutor()) 544 .newBidirectionalStreamBuilder(url, callback, callba ck.getExecutor())
553 .delayRequestHeadersUntilFirstFlush(i == 0) 545 .delayRequestHeadersUntilFirstFlush(i == 0)
554 .addHeader("foo", "bar") 546 .addHeader("foo", "bar")
555 .addHeader("empty", "") 547 .addHeader("empty", "")
556 .addHeader("Content-Type", "zebra") 548 .addHeader("Content-Type", "zebra")
557 .build(); 549 .build();
558 stream.start(); 550 stream.start();
559 callback.blockForDone(); 551 callback.blockForDone();
560 assertTrue(stream.isDone()); 552 assertTrue(stream.isDone());
561 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 553 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
(...skipping 21 matching lines...) Expand all
583 @Override 575 @Override
584 public void onResponseHeadersReceived( 576 public void onResponseHeadersReceived(
585 BidirectionalStream stream, UrlResponseInfo info) { 577 BidirectionalStream stream, UrlResponseInfo info) {
586 // Do nothing. Skip readng. 578 // Do nothing. Skip readng.
587 } 579 }
588 }; 580 };
589 callback.addWriteData("Test String".getBytes()); 581 callback.addWriteData("Test String".getBytes());
590 callback.addWriteData("1234567890".getBytes()); 582 callback.addWriteData("1234567890".getBytes());
591 callback.addWriteData("woot!".getBytes()); 583 callback.addWriteData("woot!".getBytes());
592 BidirectionalStream stream = 584 BidirectionalStream stream =
593 mTestFramework.mCronetEngine 585 mCronetEngine.newBidirectionalStreamBuilder(url, callback, callb ack.getExecutor())
594 .newBidirectionalStreamBuilder(url, callback, callback.g etExecutor())
595 .addHeader("foo", "bar") 586 .addHeader("foo", "bar")
596 .addHeader("empty", "") 587 .addHeader("empty", "")
597 .addHeader("Content-Type", "zebra") 588 .addHeader("Content-Type", "zebra")
598 .build(); 589 .build();
599 stream.start(); 590 stream.start();
600 callback.blockForDone(); 591 callback.blockForDone();
601 assertTrue(stream.isDone()); 592 assertTrue(stream.isDone());
602 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 593 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
603 assertEquals("Test String1234567890woot!", callback.mResponseAsString); 594 assertEquals("Test String1234567890woot!", callback.mResponseAsString);
604 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo ").get(0)); 595 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo ").get(0));
(...skipping 18 matching lines...) Expand all
623 assertEquals(0, numPendingWrites()); 614 assertEquals(0, numPendingWrites());
624 } 615 }
625 }; 616 };
626 callback.addWriteData("Test String".getBytes(), false); 617 callback.addWriteData("Test String".getBytes(), false);
627 callback.addWriteData("1234567890".getBytes(), false); 618 callback.addWriteData("1234567890".getBytes(), false);
628 callback.addWriteData("woot!".getBytes(), true); 619 callback.addWriteData("woot!".getBytes(), true);
629 callback.addWriteData("Test String".getBytes(), false); 620 callback.addWriteData("Test String".getBytes(), false);
630 callback.addWriteData("1234567890".getBytes(), false); 621 callback.addWriteData("1234567890".getBytes(), false);
631 callback.addWriteData("woot!".getBytes(), true); 622 callback.addWriteData("woot!".getBytes(), true);
632 BidirectionalStream stream = 623 BidirectionalStream stream =
633 mTestFramework.mCronetEngine 624 mCronetEngine.newBidirectionalStreamBuilder(url, callback, callb ack.getExecutor())
634 .newBidirectionalStreamBuilder(url, callback, callback.g etExecutor())
635 .addHeader("foo", "bar") 625 .addHeader("foo", "bar")
636 .addHeader("empty", "") 626 .addHeader("empty", "")
637 .addHeader("Content-Type", "zebra") 627 .addHeader("Content-Type", "zebra")
638 .build(); 628 .build();
639 stream.start(); 629 stream.start();
640 callback.blockForDone(); 630 callback.blockForDone();
641 assertTrue(stream.isDone()); 631 assertTrue(stream.isDone());
642 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 632 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
643 assertEquals( 633 assertEquals(
644 "Test String1234567890woot!Test String1234567890woot!", callback .mResponseAsString); 634 "Test String1234567890woot!Test String1234567890woot!", callback .mResponseAsString);
645 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo ").get(0)); 635 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo ").get(0));
646 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty" ).get(0)); 636 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty" ).get(0));
647 assertEquals( 637 assertEquals(
648 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten t-type").get(0)); 638 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten t-type").get(0));
649 } 639 }
650 640
651 @SmallTest 641 @SmallTest
652 @Feature({"Cronet"}) 642 @Feature({"Cronet"})
653 @OnlyRunNativeCronet 643 @OnlyRunNativeCronet
654 public void testSimplePut() throws Exception { 644 public void testSimplePut() throws Exception {
655 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 645 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
656 callback.addWriteData("Put This Data!".getBytes()); 646 callback.addWriteData("Put This Data!".getBytes());
657 String methodName = "PUT"; 647 String methodName = "PUT";
658 BidirectionalStream.Builder builder = 648 BidirectionalStream.Builder builder = mCronetEngine.newBidirectionalStre amBuilder(
659 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( 649 Http2TestServer.getServerUrl(), callback, callback.getExecutor() );
660 Http2TestServer.getServerUrl(), callback, callback.getEx ecutor());
661 builder.setHttpMethod(methodName); 650 builder.setHttpMethod(methodName);
662 builder.build().start(); 651 builder.build().start();
663 callback.blockForDone(); 652 callback.blockForDone();
664 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 653 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
665 assertEquals("Put This Data!", callback.mResponseAsString); 654 assertEquals("Put This Data!", callback.mResponseAsString);
666 assertEquals(methodName, callback.mResponseInfo.getAllHeaders().get("ech o-method").get(0)); 655 assertEquals(methodName, callback.mResponseInfo.getAllHeaders().get("ech o-method").get(0));
667 } 656 }
668 657
669 @SmallTest 658 @SmallTest
670 @Feature({"Cronet"}) 659 @Feature({"Cronet"})
671 @OnlyRunNativeCronet 660 @OnlyRunNativeCronet
672 public void testBadMethod() throws Exception { 661 public void testBadMethod() throws Exception {
673 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 662 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
674 BidirectionalStream.Builder builder = 663 BidirectionalStream.Builder builder = mCronetEngine.newBidirectionalStre amBuilder(
675 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( 664 Http2TestServer.getServerUrl(), callback, callback.getExecutor() );
676 Http2TestServer.getServerUrl(), callback, callback.getEx ecutor());
677 try { 665 try {
678 builder.setHttpMethod("bad:method!"); 666 builder.setHttpMethod("bad:method!");
679 builder.build().start(); 667 builder.build().start();
680 fail("IllegalArgumentException not thrown."); 668 fail("IllegalArgumentException not thrown.");
681 } catch (IllegalArgumentException e) { 669 } catch (IllegalArgumentException e) {
682 assertEquals("Invalid http method bad:method!", e.getMessage()); 670 assertEquals("Invalid http method bad:method!", e.getMessage());
683 } 671 }
684 } 672 }
685 673
686 @SmallTest 674 @SmallTest
687 @Feature({"Cronet"}) 675 @Feature({"Cronet"})
688 @OnlyRunNativeCronet 676 @OnlyRunNativeCronet
689 public void testBadHeaderName() throws Exception { 677 public void testBadHeaderName() throws Exception {
690 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 678 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
691 BidirectionalStream.Builder builder = 679 BidirectionalStream.Builder builder = mCronetEngine.newBidirectionalStre amBuilder(
692 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( 680 Http2TestServer.getServerUrl(), callback, callback.getExecutor() );
693 Http2TestServer.getServerUrl(), callback, callback.getEx ecutor());
694 try { 681 try {
695 builder.addHeader("goodheader1", "headervalue"); 682 builder.addHeader("goodheader1", "headervalue");
696 builder.addHeader("header:name", "headervalue"); 683 builder.addHeader("header:name", "headervalue");
697 builder.addHeader("goodheader2", "headervalue"); 684 builder.addHeader("goodheader2", "headervalue");
698 builder.build().start(); 685 builder.build().start();
699 fail("IllegalArgumentException not thrown."); 686 fail("IllegalArgumentException not thrown.");
700 } catch (IllegalArgumentException e) { 687 } catch (IllegalArgumentException e) {
701 assertEquals("Invalid header header:name=headervalue", e.getMessage( )); 688 assertEquals("Invalid header header:name=headervalue", e.getMessage( ));
702 } 689 }
703 } 690 }
704 691
705 @SmallTest 692 @SmallTest
706 @Feature({"Cronet"}) 693 @Feature({"Cronet"})
707 @OnlyRunNativeCronet 694 @OnlyRunNativeCronet
708 public void testBadHeaderValue() throws Exception { 695 public void testBadHeaderValue() throws Exception {
709 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 696 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
710 BidirectionalStream.Builder builder = 697 BidirectionalStream.Builder builder = mCronetEngine.newBidirectionalStre amBuilder(
711 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( 698 Http2TestServer.getServerUrl(), callback, callback.getExecutor() );
712 Http2TestServer.getServerUrl(), callback, callback.getEx ecutor());
713 try { 699 try {
714 builder.addHeader("headername", "bad header\r\nvalue"); 700 builder.addHeader("headername", "bad header\r\nvalue");
715 builder.build().start(); 701 builder.build().start();
716 fail("IllegalArgumentException not thrown."); 702 fail("IllegalArgumentException not thrown.");
717 } catch (IllegalArgumentException e) { 703 } catch (IllegalArgumentException e) {
718 assertEquals("Invalid header headername=bad header\r\nvalue", e.getM essage()); 704 assertEquals("Invalid header headername=bad header\r\nvalue", e.getM essage());
719 } 705 }
720 } 706 }
721 707
722 @SmallTest 708 @SmallTest
723 @Feature({"Cronet"}) 709 @Feature({"Cronet"})
724 @OnlyRunNativeCronet 710 @OnlyRunNativeCronet
725 public void testAddHeader() throws Exception { 711 public void testAddHeader() throws Exception {
726 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 712 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
727 String headerName = "header-name"; 713 String headerName = "header-name";
728 String headerValue = "header-value"; 714 String headerValue = "header-value";
729 BidirectionalStream.Builder builder = 715 BidirectionalStream.Builder builder = mCronetEngine.newBidirectionalStre amBuilder(
730 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( 716 Http2TestServer.getEchoHeaderUrl(headerName), callback, callback .getExecutor());
731 Http2TestServer.getEchoHeaderUrl(headerName), callback,
732 callback.getExecutor());
733 builder.addHeader(headerName, headerValue); 717 builder.addHeader(headerName, headerValue);
734 builder.setHttpMethod("GET"); 718 builder.setHttpMethod("GET");
735 builder.build().start(); 719 builder.build().start();
736 callback.blockForDone(); 720 callback.blockForDone();
737 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 721 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
738 assertEquals(headerValue, callback.mResponseAsString); 722 assertEquals(headerValue, callback.mResponseAsString);
739 } 723 }
740 724
741 @SmallTest 725 @SmallTest
742 @Feature({"Cronet"}) 726 @Feature({"Cronet"})
743 @OnlyRunNativeCronet 727 @OnlyRunNativeCronet
744 public void testMultiRequestHeaders() throws Exception { 728 public void testMultiRequestHeaders() throws Exception {
745 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 729 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
746 String headerName = "header-name"; 730 String headerName = "header-name";
747 String headerValue1 = "header-value1"; 731 String headerValue1 = "header-value1";
748 String headerValue2 = "header-value2"; 732 String headerValue2 = "header-value2";
749 BidirectionalStream.Builder builder = 733 BidirectionalStream.Builder builder = mCronetEngine.newBidirectionalStre amBuilder(
750 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( 734 Http2TestServer.getEchoAllHeadersUrl(), callback, callback.getEx ecutor());
751 Http2TestServer.getEchoAllHeadersUrl(), callback, callba ck.getExecutor());
752 builder.addHeader(headerName, headerValue1); 735 builder.addHeader(headerName, headerValue1);
753 builder.addHeader(headerName, headerValue2); 736 builder.addHeader(headerName, headerValue2);
754 builder.setHttpMethod("GET"); 737 builder.setHttpMethod("GET");
755 builder.build().start(); 738 builder.build().start();
756 callback.blockForDone(); 739 callback.blockForDone();
757 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 740 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
758 String headers = callback.mResponseAsString; 741 String headers = callback.mResponseAsString;
759 Pattern pattern = Pattern.compile(headerName + ":\\s(.*)\\r\\n"); 742 Pattern pattern = Pattern.compile(headerName + ":\\s(.*)\\r\\n");
760 Matcher matcher = pattern.matcher(headers); 743 Matcher matcher = pattern.matcher(headers);
761 List<String> actualValues = new ArrayList<String>(); 744 List<String> actualValues = new ArrayList<String>();
762 while (matcher.find()) { 745 while (matcher.find()) {
763 actualValues.add(matcher.group(1)); 746 actualValues.add(matcher.group(1));
764 } 747 }
765 assertEquals(1, actualValues.size()); 748 assertEquals(1, actualValues.size());
766 assertEquals("header-value2", actualValues.get(0)); 749 assertEquals("header-value2", actualValues.get(0));
767 } 750 }
768 751
769 @SmallTest 752 @SmallTest
770 @Feature({"Cronet"}) 753 @Feature({"Cronet"})
771 @OnlyRunNativeCronet 754 @OnlyRunNativeCronet
772 public void testEchoTrailers() throws Exception { 755 public void testEchoTrailers() throws Exception {
773 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 756 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
774 String headerName = "header-name"; 757 String headerName = "header-name";
775 String headerValue = "header-value"; 758 String headerValue = "header-value";
776 BidirectionalStream.Builder builder = 759 BidirectionalStream.Builder builder = mCronetEngine.newBidirectionalStre amBuilder(
777 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( 760 Http2TestServer.getEchoTrailersUrl(), callback, callback.getExec utor());
778 Http2TestServer.getEchoTrailersUrl(), callback, callback .getExecutor());
779 builder.addHeader(headerName, headerValue); 761 builder.addHeader(headerName, headerValue);
780 builder.setHttpMethod("GET"); 762 builder.setHttpMethod("GET");
781 builder.build().start(); 763 builder.build().start();
782 callback.blockForDone(); 764 callback.blockForDone();
783 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 765 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
784 assertNotNull(callback.mTrailers); 766 assertNotNull(callback.mTrailers);
785 // Verify that header value is properly echoed in trailers. 767 // Verify that header value is properly echoed in trailers.
786 assertEquals(headerValue, callback.mTrailers.getAsMap().get("echo-" + he aderName).get(0)); 768 assertEquals(headerValue, callback.mTrailers.getAsMap().get("echo-" + he aderName).get(0));
787 } 769 }
788 770
789 @SmallTest 771 @SmallTest
790 @Feature({"Cronet"}) 772 @Feature({"Cronet"})
791 @OnlyRunNativeCronet 773 @OnlyRunNativeCronet
792 public void testCustomUserAgent() throws Exception { 774 public void testCustomUserAgent() throws Exception {
793 String userAgentName = "User-Agent"; 775 String userAgentName = "User-Agent";
794 String userAgentValue = "User-Agent-Value"; 776 String userAgentValue = "User-Agent-Value";
795 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 777 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
796 BidirectionalStream.Builder builder = 778 BidirectionalStream.Builder builder = mCronetEngine.newBidirectionalStre amBuilder(
797 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( 779 Http2TestServer.getEchoHeaderUrl(userAgentName), callback, callb ack.getExecutor());
798 Http2TestServer.getEchoHeaderUrl(userAgentName), callbac k,
799 callback.getExecutor());
800 builder.setHttpMethod("GET"); 780 builder.setHttpMethod("GET");
801 builder.addHeader(userAgentName, userAgentValue); 781 builder.addHeader(userAgentName, userAgentValue);
802 builder.build().start(); 782 builder.build().start();
803 callback.blockForDone(); 783 callback.blockForDone();
804 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 784 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
805 assertEquals(userAgentValue, callback.mResponseAsString); 785 assertEquals(userAgentValue, callback.mResponseAsString);
806 } 786 }
807 787
808 @SmallTest 788 @SmallTest
809 @Feature({"Cronet"}) 789 @Feature({"Cronet"})
(...skipping 16 matching lines...) Expand all
826 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 806 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
827 assertEquals(userAgentValue, callback.mResponseAsString); 807 assertEquals(userAgentValue, callback.mResponseAsString);
828 } 808 }
829 809
830 @SmallTest 810 @SmallTest
831 @Feature({"Cronet"}) 811 @Feature({"Cronet"})
832 @OnlyRunNativeCronet 812 @OnlyRunNativeCronet
833 public void testDefaultUserAgent() throws Exception { 813 public void testDefaultUserAgent() throws Exception {
834 String userAgentName = "User-Agent"; 814 String userAgentName = "User-Agent";
835 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 815 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
836 BidirectionalStream.Builder builder = 816 BidirectionalStream.Builder builder = mCronetEngine.newBidirectionalStre amBuilder(
837 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( 817 Http2TestServer.getEchoHeaderUrl(userAgentName), callback, callb ack.getExecutor());
838 Http2TestServer.getEchoHeaderUrl(userAgentName), callbac k,
839 callback.getExecutor());
840 builder.setHttpMethod("GET"); 818 builder.setHttpMethod("GET");
841 builder.build().start(); 819 builder.build().start();
842 callback.blockForDone(); 820 callback.blockForDone();
843 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 821 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
844 assertEquals(new CronetEngine.Builder(getContext()).getDefaultUserAgent( ), 822 assertEquals(new CronetEngine.Builder(getContext()).getDefaultUserAgent( ),
845 callback.mResponseAsString); 823 callback.mResponseAsString);
846 } 824 }
847 825
848 @SmallTest 826 @SmallTest
849 @Feature({"Cronet"}) 827 @Feature({"Cronet"})
850 @OnlyRunNativeCronet 828 @OnlyRunNativeCronet
851 public void testEchoStream() throws Exception { 829 public void testEchoStream() throws Exception {
852 String url = Http2TestServer.getEchoStreamUrl(); 830 String url = Http2TestServer.getEchoStreamUrl();
853 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 831 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
854 String[] testData = {"Test String", createLongString("1234567890", 50000 ), "woot!"}; 832 String[] testData = {"Test String", createLongString("1234567890", 50000 ), "woot!"};
855 StringBuilder stringData = new StringBuilder(); 833 StringBuilder stringData = new StringBuilder();
856 for (String writeData : testData) { 834 for (String writeData : testData) {
857 callback.addWriteData(writeData.getBytes()); 835 callback.addWriteData(writeData.getBytes());
858 stringData.append(writeData); 836 stringData.append(writeData);
859 } 837 }
860 // Create stream. 838 // Create stream.
861 BidirectionalStream stream = 839 BidirectionalStream stream =
862 mTestFramework.mCronetEngine 840 mCronetEngine.newBidirectionalStreamBuilder(url, callback, callb ack.getExecutor())
863 .newBidirectionalStreamBuilder(url, callback, callback.g etExecutor())
864 .addHeader("foo", "Value with Spaces") 841 .addHeader("foo", "Value with Spaces")
865 .addHeader("Content-Type", "zebra") 842 .addHeader("Content-Type", "zebra")
866 .build(); 843 .build();
867 stream.start(); 844 stream.start();
868 callback.blockForDone(); 845 callback.blockForDone();
869 assertTrue(stream.isDone()); 846 assertTrue(stream.isDone());
870 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 847 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
871 assertEquals(stringData.toString(), callback.mResponseAsString); 848 assertEquals(stringData.toString(), callback.mResponseAsString);
872 assertEquals( 849 assertEquals(
873 "Value with Spaces", callback.mResponseInfo.getAllHeaders().get( "echo-foo").get(0)); 850 "Value with Spaces", callback.mResponseInfo.getAllHeaders().get( "echo-foo").get(0));
874 assertEquals( 851 assertEquals(
875 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten t-type").get(0)); 852 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten t-type").get(0));
876 } 853 }
877 854
878 @SmallTest 855 @SmallTest
879 @Feature({"Cronet"}) 856 @Feature({"Cronet"})
880 @OnlyRunNativeCronet 857 @OnlyRunNativeCronet
881 public void testEchoStreamEmptyWrite() throws Exception { 858 public void testEchoStreamEmptyWrite() throws Exception {
882 String url = Http2TestServer.getEchoStreamUrl(); 859 String url = Http2TestServer.getEchoStreamUrl();
883 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 860 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
884 callback.addWriteData(new byte[0]); 861 callback.addWriteData(new byte[0]);
885 // Create stream. 862 // Create stream.
886 BidirectionalStream stream = 863 BidirectionalStream stream =
887 mTestFramework.mCronetEngine 864 mCronetEngine.newBidirectionalStreamBuilder(url, callback, callb ack.getExecutor())
888 .newBidirectionalStreamBuilder(url, callback, callback.g etExecutor())
889 .build(); 865 .build();
890 stream.start(); 866 stream.start();
891 callback.blockForDone(); 867 callback.blockForDone();
892 assertTrue(stream.isDone()); 868 assertTrue(stream.isDone());
893 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 869 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
894 assertEquals("", callback.mResponseAsString); 870 assertEquals("", callback.mResponseAsString);
895 } 871 }
896 872
897 @SmallTest 873 @SmallTest
898 @Feature({"Cronet"}) 874 @Feature({"Cronet"})
899 @OnlyRunNativeCronet 875 @OnlyRunNativeCronet
900 public void testDoubleWrite() throws Exception { 876 public void testDoubleWrite() throws Exception {
901 String url = Http2TestServer.getEchoStreamUrl(); 877 String url = Http2TestServer.getEchoStreamUrl();
902 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback() { 878 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback() {
903 @Override 879 @Override
904 public void onStreamReady(BidirectionalStream stream) { 880 public void onStreamReady(BidirectionalStream stream) {
905 // super class will call Write() once. 881 // super class will call Write() once.
906 super.onStreamReady(stream); 882 super.onStreamReady(stream);
907 // Call Write() again. 883 // Call Write() again.
908 startNextWrite(stream); 884 startNextWrite(stream);
909 // Make sure there is no pending write. 885 // Make sure there is no pending write.
910 assertEquals(0, numPendingWrites()); 886 assertEquals(0, numPendingWrites());
911 } 887 }
912 }; 888 };
913 callback.addWriteData("1".getBytes()); 889 callback.addWriteData("1".getBytes());
914 callback.addWriteData("2".getBytes()); 890 callback.addWriteData("2".getBytes());
915 // Create stream. 891 // Create stream.
916 BidirectionalStream stream = 892 BidirectionalStream stream =
917 mTestFramework.mCronetEngine 893 mCronetEngine.newBidirectionalStreamBuilder(url, callback, callb ack.getExecutor())
918 .newBidirectionalStreamBuilder(url, callback, callback.g etExecutor())
919 .build(); 894 .build();
920 stream.start(); 895 stream.start();
921 callback.blockForDone(); 896 callback.blockForDone();
922 assertTrue(stream.isDone()); 897 assertTrue(stream.isDone());
923 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 898 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
924 assertEquals("12", callback.mResponseAsString); 899 assertEquals("12", callback.mResponseAsString);
925 } 900 }
926 901
927 @SmallTest 902 @SmallTest
928 @Feature({"Cronet"}) 903 @Feature({"Cronet"})
(...skipping 13 matching lines...) Expand all
942 fail("Exception is not thrown."); 917 fail("Exception is not thrown.");
943 } catch (Exception e) { 918 } catch (Exception e) {
944 assertEquals("Unexpected read attempt.", e.getMessage()); 919 assertEquals("Unexpected read attempt.", e.getMessage());
945 } 920 }
946 } 921 }
947 }; 922 };
948 callback.addWriteData("1".getBytes()); 923 callback.addWriteData("1".getBytes());
949 callback.addWriteData("2".getBytes()); 924 callback.addWriteData("2".getBytes());
950 // Create stream. 925 // Create stream.
951 BidirectionalStream stream = 926 BidirectionalStream stream =
952 mTestFramework.mCronetEngine 927 mCronetEngine.newBidirectionalStreamBuilder(url, callback, callb ack.getExecutor())
953 .newBidirectionalStreamBuilder(url, callback, callback.g etExecutor())
954 .build(); 928 .build();
955 stream.start(); 929 stream.start();
956 callback.blockForDone(); 930 callback.blockForDone();
957 assertTrue(stream.isDone()); 931 assertTrue(stream.isDone());
958 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 932 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
959 assertEquals("12", callback.mResponseAsString); 933 assertEquals("12", callback.mResponseAsString);
960 } 934 }
961 935
962 @SmallTest 936 @SmallTest
963 @Feature({"Cronet"}) 937 @Feature({"Cronet"})
964 @OnlyRunNativeCronet 938 @OnlyRunNativeCronet
965 @DisabledTest(message = "Disabled due to timeout. See crbug.com/591112") 939 @DisabledTest(message = "Disabled due to timeout. See crbug.com/591112")
966 public void testReadAndWrite() throws Exception { 940 public void testReadAndWrite() throws Exception {
967 String url = Http2TestServer.getEchoStreamUrl(); 941 String url = Http2TestServer.getEchoStreamUrl();
968 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback() { 942 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback() {
969 @Override 943 @Override
970 public void onResponseHeadersReceived( 944 public void onResponseHeadersReceived(
971 BidirectionalStream stream, UrlResponseInfo info) { 945 BidirectionalStream stream, UrlResponseInfo info) {
972 // Start the write, that will not complete until callback comple tion. 946 // Start the write, that will not complete until callback comple tion.
973 startNextWrite(stream); 947 startNextWrite(stream);
974 // Start the read. It is allowed with write in flight. 948 // Start the read. It is allowed with write in flight.
975 super.onResponseHeadersReceived(stream, info); 949 super.onResponseHeadersReceived(stream, info);
976 } 950 }
977 }; 951 };
978 callback.setAutoAdvance(false); 952 callback.setAutoAdvance(false);
979 callback.addWriteData("1".getBytes()); 953 callback.addWriteData("1".getBytes());
980 callback.addWriteData("2".getBytes()); 954 callback.addWriteData("2".getBytes());
981 // Create stream. 955 // Create stream.
982 BidirectionalStream stream = 956 BidirectionalStream stream =
983 mTestFramework.mCronetEngine 957 mCronetEngine.newBidirectionalStreamBuilder(url, callback, callb ack.getExecutor())
984 .newBidirectionalStreamBuilder(url, callback, callback.g etExecutor())
985 .build(); 958 .build();
986 stream.start(); 959 stream.start();
987 callback.waitForNextWriteStep(); 960 callback.waitForNextWriteStep();
988 callback.waitForNextReadStep(); 961 callback.waitForNextReadStep();
989 callback.startNextRead(stream); 962 callback.startNextRead(stream);
990 callback.setAutoAdvance(true); 963 callback.setAutoAdvance(true);
991 callback.blockForDone(); 964 callback.blockForDone();
992 assertTrue(stream.isDone()); 965 assertTrue(stream.isDone());
993 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 966 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
994 assertEquals("12", callback.mResponseAsString); 967 assertEquals("12", callback.mResponseAsString);
995 } 968 }
996 969
997 @SmallTest 970 @SmallTest
998 @Feature({"Cronet"}) 971 @Feature({"Cronet"})
999 @OnlyRunNativeCronet 972 @OnlyRunNativeCronet
1000 public void testEchoStreamWriteFirst() throws Exception { 973 public void testEchoStreamWriteFirst() throws Exception {
1001 String url = Http2TestServer.getEchoStreamUrl(); 974 String url = Http2TestServer.getEchoStreamUrl();
1002 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 975 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
1003 callback.setAutoAdvance(false); 976 callback.setAutoAdvance(false);
1004 String[] testData = {"a", "bb", "ccc", "Test String", "1234567890", "woo t!"}; 977 String[] testData = {"a", "bb", "ccc", "Test String", "1234567890", "woo t!"};
1005 StringBuilder stringData = new StringBuilder(); 978 StringBuilder stringData = new StringBuilder();
1006 for (String writeData : testData) { 979 for (String writeData : testData) {
1007 callback.addWriteData(writeData.getBytes()); 980 callback.addWriteData(writeData.getBytes());
1008 stringData.append(writeData); 981 stringData.append(writeData);
1009 } 982 }
1010 // Create stream. 983 // Create stream.
1011 BidirectionalStream stream = 984 BidirectionalStream stream =
1012 mTestFramework.mCronetEngine 985 mCronetEngine.newBidirectionalStreamBuilder(url, callback, callb ack.getExecutor())
1013 .newBidirectionalStreamBuilder(url, callback, callback.g etExecutor())
1014 .build(); 986 .build();
1015 stream.start(); 987 stream.start();
1016 // Write first. 988 // Write first.
1017 callback.waitForNextWriteStep(); // onStreamReady 989 callback.waitForNextWriteStep(); // onStreamReady
1018 for (String expected : testData) { 990 for (String expected : testData) {
1019 // Write next chunk of test data. 991 // Write next chunk of test data.
1020 callback.startNextWrite(stream); 992 callback.startNextWrite(stream);
1021 callback.waitForNextWriteStep(); // onWriteCompleted 993 callback.waitForNextWriteStep(); // onWriteCompleted
1022 } 994 }
1023 995
(...skipping 23 matching lines...) Expand all
1047 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 1019 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
1048 callback.setAutoAdvance(false); 1020 callback.setAutoAdvance(false);
1049 String[] testData = {"a", "bb", "ccc", "Test String", "1234567890", "woo t!"}; 1021 String[] testData = {"a", "bb", "ccc", "Test String", "1234567890", "woo t!"};
1050 StringBuilder stringData = new StringBuilder(); 1022 StringBuilder stringData = new StringBuilder();
1051 for (String writeData : testData) { 1023 for (String writeData : testData) {
1052 callback.addWriteData(writeData.getBytes()); 1024 callback.addWriteData(writeData.getBytes());
1053 stringData.append(writeData); 1025 stringData.append(writeData);
1054 } 1026 }
1055 // Create stream. 1027 // Create stream.
1056 BidirectionalStream stream = 1028 BidirectionalStream stream =
1057 mTestFramework.mCronetEngine 1029 mCronetEngine.newBidirectionalStreamBuilder(url, callback, callb ack.getExecutor())
1058 .newBidirectionalStreamBuilder(url, callback, callback.g etExecutor())
1059 .build(); 1030 .build();
1060 stream.start(); 1031 stream.start();
1061 callback.waitForNextWriteStep(); 1032 callback.waitForNextWriteStep();
1062 callback.waitForNextReadStep(); 1033 callback.waitForNextReadStep();
1063 1034
1064 for (String expected : testData) { 1035 for (String expected : testData) {
1065 // Write next chunk of test data. 1036 // Write next chunk of test data.
1066 callback.startNextWrite(stream); 1037 callback.startNextWrite(stream);
1067 callback.waitForNextWriteStep(); 1038 callback.waitForNextWriteStep();
1068 1039
(...skipping 16 matching lines...) Expand all
1085 /** 1056 /**
1086 * Checks that the buffer is updated correctly, when starting at an offset. 1057 * Checks that the buffer is updated correctly, when starting at an offset.
1087 */ 1058 */
1088 @SmallTest 1059 @SmallTest
1089 @Feature({"Cronet"}) 1060 @Feature({"Cronet"})
1090 @OnlyRunNativeCronet 1061 @OnlyRunNativeCronet
1091 public void testSimpleGetBufferUpdates() throws Exception { 1062 public void testSimpleGetBufferUpdates() throws Exception {
1092 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 1063 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
1093 callback.setAutoAdvance(false); 1064 callback.setAutoAdvance(false);
1094 // Since the method is "GET", the expected response body is also "GET". 1065 // Since the method is "GET", the expected response body is also "GET".
1095 BidirectionalStream.Builder builder = 1066 BidirectionalStream.Builder builder = mCronetEngine.newBidirectionalStre amBuilder(
1096 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( 1067 Http2TestServer.getEchoMethodUrl(), callback, callback.getExecut or());
1097 Http2TestServer.getEchoMethodUrl(), callback, callback.g etExecutor());
1098 BidirectionalStream stream = builder.setHttpMethod("GET").build(); 1068 BidirectionalStream stream = builder.setHttpMethod("GET").build();
1099 stream.start(); 1069 stream.start();
1100 callback.waitForNextReadStep(); 1070 callback.waitForNextReadStep();
1101 1071
1102 assertEquals(null, callback.mError); 1072 assertEquals(null, callback.mError);
1103 assertFalse(callback.isDone()); 1073 assertFalse(callback.isDone());
1104 assertEquals(TestBidirectionalStreamCallback.ResponseStep.ON_RESPONSE_ST ARTED, 1074 assertEquals(TestBidirectionalStreamCallback.ResponseStep.ON_RESPONSE_ST ARTED,
1105 callback.mResponseStep); 1075 callback.mResponseStep);
1106 1076
1107 ByteBuffer readBuffer = ByteBuffer.allocateDirect(5); 1077 ByteBuffer readBuffer = ByteBuffer.allocateDirect(5);
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
1178 // first response HEADERS frame. 1148 // first response HEADERS frame.
1179 runSimpleGetWithExpectedReceivedByteCount(27); 1149 runSimpleGetWithExpectedReceivedByteCount(27);
1180 } 1150 }
1181 1151
1182 @SmallTest 1152 @SmallTest
1183 @Feature({"Cronet"}) 1153 @Feature({"Cronet"})
1184 @OnlyRunNativeCronet 1154 @OnlyRunNativeCronet
1185 public void testBadBuffers() throws Exception { 1155 public void testBadBuffers() throws Exception {
1186 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 1156 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
1187 callback.setAutoAdvance(false); 1157 callback.setAutoAdvance(false);
1188 BidirectionalStream.Builder builder = 1158 BidirectionalStream.Builder builder = mCronetEngine.newBidirectionalStre amBuilder(
1189 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( 1159 Http2TestServer.getEchoMethodUrl(), callback, callback.getExecut or());
1190 Http2TestServer.getEchoMethodUrl(), callback, callback.g etExecutor());
1191 BidirectionalStream stream = builder.setHttpMethod("GET").build(); 1160 BidirectionalStream stream = builder.setHttpMethod("GET").build();
1192 stream.start(); 1161 stream.start();
1193 callback.waitForNextReadStep(); 1162 callback.waitForNextReadStep();
1194 1163
1195 assertEquals(null, callback.mError); 1164 assertEquals(null, callback.mError);
1196 assertFalse(callback.isDone()); 1165 assertFalse(callback.isDone());
1197 assertEquals(TestBidirectionalStreamCallback.ResponseStep.ON_RESPONSE_ST ARTED, 1166 assertEquals(TestBidirectionalStreamCallback.ResponseStep.ON_RESPONSE_ST ARTED,
1198 callback.mResponseStep); 1167 callback.mResponseStep);
1199 1168
1200 // Try to read using a full buffer. 1169 // Try to read using a full buffer.
(...skipping 24 matching lines...) Expand all
1225 assertEquals("GET", callback.mResponseAsString); 1194 assertEquals("GET", callback.mResponseAsString);
1226 } 1195 }
1227 1196
1228 private void throwOrCancel( 1197 private void throwOrCancel(
1229 FailureType failureType, ResponseStep failureStep, boolean expectErr or) { 1198 FailureType failureType, ResponseStep failureStep, boolean expectErr or) {
1230 // Use a fresh CronetEngine each time so Http2 session is not reused. 1199 // Use a fresh CronetEngine each time so Http2 session is not reused.
1231 ExperimentalCronetEngine.Builder builder = 1200 ExperimentalCronetEngine.Builder builder =
1232 new ExperimentalCronetEngine.Builder(getContext()); 1201 new ExperimentalCronetEngine.Builder(getContext());
1233 CronetTestUtil.setMockCertVerifierForTesting( 1202 CronetTestUtil.setMockCertVerifierForTesting(
1234 builder, QuicTestServer.createMockCertVerifier()); 1203 builder, QuicTestServer.createMockCertVerifier());
1235 mTestFramework = startCronetTestFrameworkWithUrlAndCronetEngineBuilder(n ull, builder); 1204 mCronetEngine = builder.build();
1236 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 1205 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
1237 callback.setFailure(failureType, failureStep); 1206 callback.setFailure(failureType, failureStep);
1238 TestRequestFinishedListener requestFinishedListener = new TestRequestFin ishedListener(); 1207 TestRequestFinishedListener requestFinishedListener = new TestRequestFin ishedListener();
1239 mTestFramework.mCronetEngine.addRequestFinishedListener(requestFinishedL istener); 1208 mCronetEngine.addRequestFinishedListener(requestFinishedListener);
1240 BidirectionalStream.Builder streamBuilder = 1209 BidirectionalStream.Builder streamBuilder = mCronetEngine.newBidirection alStreamBuilder(
1241 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( 1210 Http2TestServer.getEchoMethodUrl(), callback, callback.getExecut or());
1242 Http2TestServer.getEchoMethodUrl(), callback, callback.g etExecutor());
1243 BidirectionalStream stream = streamBuilder.setHttpMethod("GET").build(); 1211 BidirectionalStream stream = streamBuilder.setHttpMethod("GET").build();
1244 Date startTime = new Date(); 1212 Date startTime = new Date();
1245 stream.start(); 1213 stream.start();
1246 callback.blockForDone(); 1214 callback.blockForDone();
1247 assertTrue(stream.isDone()); 1215 assertTrue(stream.isDone());
1248 requestFinishedListener.blockUntilDone(); 1216 requestFinishedListener.blockUntilDone();
1249 Date endTime = new Date(); 1217 Date endTime = new Date();
1250 RequestFinishedInfo finishedInfo = requestFinishedListener.getRequestInf o(); 1218 RequestFinishedInfo finishedInfo = requestFinishedListener.getRequestInf o();
1251 RequestFinishedInfo.Metrics metrics = finishedInfo.getMetrics(); 1219 RequestFinishedInfo.Metrics metrics = finishedInfo.getMetrics();
1252 assertNotNull(metrics); 1220 assertNotNull(metrics);
(...skipping 28 matching lines...) Expand all
1281 assertNotNull(finishedInfo.getException()); 1249 assertNotNull(finishedInfo.getException());
1282 assertEquals(RequestFinishedInfo.FAILED, finishedInfo.getFinishedRea son()); 1250 assertEquals(RequestFinishedInfo.FAILED, finishedInfo.getFinishedRea son());
1283 } else { 1251 } else {
1284 assertNull(finishedInfo.getException()); 1252 assertNull(finishedInfo.getException());
1285 assertEquals(RequestFinishedInfo.CANCELED, finishedInfo.getFinishedR eason()); 1253 assertEquals(RequestFinishedInfo.CANCELED, finishedInfo.getFinishedR eason());
1286 } 1254 }
1287 assertEquals(failureType == FailureType.CANCEL_SYNC 1255 assertEquals(failureType == FailureType.CANCEL_SYNC
1288 || failureType == FailureType.CANCEL_ASYNC 1256 || failureType == FailureType.CANCEL_ASYNC
1289 || failureType == FailureType.CANCEL_ASYNC_WITHOUT_PAUSE , 1257 || failureType == FailureType.CANCEL_ASYNC_WITHOUT_PAUSE ,
1290 callback.mOnCanceledCalled); 1258 callback.mOnCanceledCalled);
1291 mTestFramework.mCronetEngine.removeRequestFinishedListener(requestFinish edListener); 1259 mCronetEngine.removeRequestFinishedListener(requestFinishedListener);
1292 } 1260 }
1293 1261
1294 @SmallTest 1262 @SmallTest
1295 @Feature({"Cronet"}) 1263 @Feature({"Cronet"})
1296 @OnlyRunNativeCronet 1264 @OnlyRunNativeCronet
1297 public void testFailures() throws Exception { 1265 public void testFailures() throws Exception {
1298 throwOrCancel(FailureType.CANCEL_SYNC, ResponseStep.ON_STREAM_READY, fal se); 1266 throwOrCancel(FailureType.CANCEL_SYNC, ResponseStep.ON_STREAM_READY, fal se);
1299 throwOrCancel(FailureType.CANCEL_ASYNC, ResponseStep.ON_STREAM_READY, fa lse); 1267 throwOrCancel(FailureType.CANCEL_ASYNC, ResponseStep.ON_STREAM_READY, fa lse);
1300 throwOrCancel(FailureType.CANCEL_ASYNC_WITHOUT_PAUSE, ResponseStep.ON_ST REAM_READY, false); 1268 throwOrCancel(FailureType.CANCEL_ASYNC_WITHOUT_PAUSE, ResponseStep.ON_ST REAM_READY, false);
1301 throwOrCancel(FailureType.THROW_SYNC, ResponseStep.ON_STREAM_READY, true ); 1269 throwOrCancel(FailureType.THROW_SYNC, ResponseStep.ON_STREAM_READY, true );
(...skipping 10 matching lines...) Expand all
1312 FailureType.CANCEL_ASYNC_WITHOUT_PAUSE, ResponseStep.ON_READ_COM PLETED, false); 1280 FailureType.CANCEL_ASYNC_WITHOUT_PAUSE, ResponseStep.ON_READ_COM PLETED, false);
1313 throwOrCancel(FailureType.THROW_SYNC, ResponseStep.ON_READ_COMPLETED, tr ue); 1281 throwOrCancel(FailureType.THROW_SYNC, ResponseStep.ON_READ_COMPLETED, tr ue);
1314 } 1282 }
1315 1283
1316 @SmallTest 1284 @SmallTest
1317 @Feature({"Cronet"}) 1285 @Feature({"Cronet"})
1318 @OnlyRunNativeCronet 1286 @OnlyRunNativeCronet
1319 public void testThrowOnSucceeded() { 1287 public void testThrowOnSucceeded() {
1320 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 1288 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
1321 callback.setFailure(FailureType.THROW_SYNC, ResponseStep.ON_SUCCEEDED); 1289 callback.setFailure(FailureType.THROW_SYNC, ResponseStep.ON_SUCCEEDED);
1322 BidirectionalStream.Builder builder = 1290 BidirectionalStream.Builder builder = mCronetEngine.newBidirectionalStre amBuilder(
1323 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( 1291 Http2TestServer.getEchoMethodUrl(), callback, callback.getExecut or());
1324 Http2TestServer.getEchoMethodUrl(), callback, callback.g etExecutor());
1325 BidirectionalStream stream = builder.setHttpMethod("GET").build(); 1292 BidirectionalStream stream = builder.setHttpMethod("GET").build();
1326 stream.start(); 1293 stream.start();
1327 callback.blockForDone(); 1294 callback.blockForDone();
1328 assertEquals(callback.mResponseStep, ResponseStep.ON_SUCCEEDED); 1295 assertEquals(callback.mResponseStep, ResponseStep.ON_SUCCEEDED);
1329 assertTrue(stream.isDone()); 1296 assertTrue(stream.isDone());
1330 assertNotNull(callback.mResponseInfo); 1297 assertNotNull(callback.mResponseInfo);
1331 // Check that error thrown from 'onSucceeded' callback is not reported. 1298 // Check that error thrown from 'onSucceeded' callback is not reported.
1332 assertNull(callback.mError); 1299 assertNull(callback.mError);
1333 assertFalse(callback.mOnErrorCalled); 1300 assertFalse(callback.mOnErrorCalled);
1334 } 1301 }
1335 1302
1336 @SmallTest 1303 @SmallTest
1337 @Feature({"Cronet"}) 1304 @Feature({"Cronet"})
1338 @OnlyRunNativeCronet 1305 @OnlyRunNativeCronet
1339 public void testExecutorShutdownBeforeStreamIsDone() { 1306 public void testExecutorShutdownBeforeStreamIsDone() {
1340 // Test that stream is destroyed even if executor is shut down and rejec ts posting tasks. 1307 // Test that stream is destroyed even if executor is shut down and rejec ts posting tasks.
1341 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 1308 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
1342 callback.setAutoAdvance(false); 1309 callback.setAutoAdvance(false);
1343 BidirectionalStream.Builder builder = 1310 BidirectionalStream.Builder builder = mCronetEngine.newBidirectionalStre amBuilder(
1344 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( 1311 Http2TestServer.getEchoMethodUrl(), callback, callback.getExecut or());
1345 Http2TestServer.getEchoMethodUrl(), callback, callback.g etExecutor());
1346 CronetBidirectionalStream stream = 1312 CronetBidirectionalStream stream =
1347 (CronetBidirectionalStream) builder.setHttpMethod("GET").build() ; 1313 (CronetBidirectionalStream) builder.setHttpMethod("GET").build() ;
1348 stream.start(); 1314 stream.start();
1349 callback.waitForNextReadStep(); 1315 callback.waitForNextReadStep();
1350 assertFalse(callback.isDone()); 1316 assertFalse(callback.isDone());
1351 assertFalse(stream.isDone()); 1317 assertFalse(stream.isDone());
1352 1318
1353 final ConditionVariable streamDestroyed = new ConditionVariable(false); 1319 final ConditionVariable streamDestroyed = new ConditionVariable(false);
1354 stream.setOnDestroyedCallbackForTesting(new Runnable() { 1320 stream.setOnDestroyedCallbackForTesting(new Runnable() {
1355 @Override 1321 @Override
(...skipping 14 matching lines...) Expand all
1370 assertTrue(stream.isDone()); 1336 assertTrue(stream.isDone());
1371 } 1337 }
1372 1338
1373 /** 1339 /**
1374 * Callback that shuts down the engine when the stream has succeeded 1340 * Callback that shuts down the engine when the stream has succeeded
1375 * or failed. 1341 * or failed.
1376 */ 1342 */
1377 private class ShutdownTestBidirectionalStreamCallback extends TestBidirectio nalStreamCallback { 1343 private class ShutdownTestBidirectionalStreamCallback extends TestBidirectio nalStreamCallback {
1378 @Override 1344 @Override
1379 public void onSucceeded(BidirectionalStream stream, UrlResponseInfo info ) { 1345 public void onSucceeded(BidirectionalStream stream, UrlResponseInfo info ) {
1380 mTestFramework.mCronetEngine.shutdown(); 1346 mCronetEngine.shutdown();
1381 // Clear mCronetEngine so it doesn't get shut down second time in te arDown(). 1347 // Clear mCronetEngine so it doesn't get shut down second time in te arDown().
1382 mTestFramework.mCronetEngine = null; 1348 mCronetEngine = null;
1383 super.onSucceeded(stream, info); 1349 super.onSucceeded(stream, info);
1384 } 1350 }
1385 1351
1386 @Override 1352 @Override
1387 public void onFailed( 1353 public void onFailed(
1388 BidirectionalStream stream, UrlResponseInfo info, CronetExceptio n error) { 1354 BidirectionalStream stream, UrlResponseInfo info, CronetExceptio n error) {
1389 mTestFramework.mCronetEngine.shutdown(); 1355 mCronetEngine.shutdown();
1390 // Clear mCronetEngine so it doesn't get shut down second time in te arDown(). 1356 // Clear mCronetEngine so it doesn't get shut down second time in te arDown().
1391 mTestFramework.mCronetEngine = null; 1357 mCronetEngine = null;
1392 super.onFailed(stream, info, error); 1358 super.onFailed(stream, info, error);
1393 } 1359 }
1394 1360
1395 @Override 1361 @Override
1396 public void onCanceled(BidirectionalStream stream, UrlResponseInfo info) { 1362 public void onCanceled(BidirectionalStream stream, UrlResponseInfo info) {
1397 mTestFramework.mCronetEngine.shutdown(); 1363 mCronetEngine.shutdown();
1398 // Clear mCronetEngine so it doesn't get shut down second time in te arDown(). 1364 // Clear mCronetEngine so it doesn't get shut down second time in te arDown().
1399 mTestFramework.mCronetEngine = null; 1365 mCronetEngine = null;
1400 super.onCanceled(stream, info); 1366 super.onCanceled(stream, info);
1401 } 1367 }
1402 } 1368 }
1403 1369
1404 @SmallTest 1370 @SmallTest
1405 @Feature({"Cronet"}) 1371 @Feature({"Cronet"})
1406 @OnlyRunNativeCronet 1372 @OnlyRunNativeCronet
1407 public void testCronetEngineShutdown() throws Exception { 1373 public void testCronetEngineShutdown() throws Exception {
1408 // Test that CronetEngine cannot be shut down if there are any active st reams. 1374 // Test that CronetEngine cannot be shut down if there are any active st reams.
1409 TestBidirectionalStreamCallback callback = new ShutdownTestBidirectional StreamCallback(); 1375 TestBidirectionalStreamCallback callback = new ShutdownTestBidirectional StreamCallback();
1410 // Block callback when response starts to verify that shutdown fails 1376 // Block callback when response starts to verify that shutdown fails
1411 // if there are active streams. 1377 // if there are active streams.
1412 callback.setAutoAdvance(false); 1378 callback.setAutoAdvance(false);
1413 BidirectionalStream.Builder builder = 1379 BidirectionalStream.Builder builder = mCronetEngine.newBidirectionalStre amBuilder(
1414 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( 1380 Http2TestServer.getEchoMethodUrl(), callback, callback.getExecut or());
1415 Http2TestServer.getEchoMethodUrl(), callback, callback.g etExecutor());
1416 CronetBidirectionalStream stream = 1381 CronetBidirectionalStream stream =
1417 (CronetBidirectionalStream) builder.setHttpMethod("GET").build() ; 1382 (CronetBidirectionalStream) builder.setHttpMethod("GET").build() ;
1418 stream.start(); 1383 stream.start();
1419 try { 1384 try {
1420 mTestFramework.mCronetEngine.shutdown(); 1385 mCronetEngine.shutdown();
1421 fail("Should throw an exception"); 1386 fail("Should throw an exception");
1422 } catch (Exception e) { 1387 } catch (Exception e) {
1423 assertEquals("Cannot shutdown with active requests.", e.getMessage() ); 1388 assertEquals("Cannot shutdown with active requests.", e.getMessage() );
1424 } 1389 }
1425 1390
1426 callback.waitForNextReadStep(); 1391 callback.waitForNextReadStep();
1427 assertEquals(ResponseStep.ON_RESPONSE_STARTED, callback.mResponseStep); 1392 assertEquals(ResponseStep.ON_RESPONSE_STARTED, callback.mResponseStep);
1428 try { 1393 try {
1429 mTestFramework.mCronetEngine.shutdown(); 1394 mCronetEngine.shutdown();
1430 fail("Should throw an exception"); 1395 fail("Should throw an exception");
1431 } catch (Exception e) { 1396 } catch (Exception e) {
1432 assertEquals("Cannot shutdown with active requests.", e.getMessage() ); 1397 assertEquals("Cannot shutdown with active requests.", e.getMessage() );
1433 } 1398 }
1434 callback.startNextRead(stream); 1399 callback.startNextRead(stream);
1435 1400
1436 callback.waitForNextReadStep(); 1401 callback.waitForNextReadStep();
1437 assertEquals(ResponseStep.ON_READ_COMPLETED, callback.mResponseStep); 1402 assertEquals(ResponseStep.ON_READ_COMPLETED, callback.mResponseStep);
1438 try { 1403 try {
1439 mTestFramework.mCronetEngine.shutdown(); 1404 mCronetEngine.shutdown();
1440 fail("Should throw an exception"); 1405 fail("Should throw an exception");
1441 } catch (Exception e) { 1406 } catch (Exception e) {
1442 assertEquals("Cannot shutdown with active requests.", e.getMessage() ); 1407 assertEquals("Cannot shutdown with active requests.", e.getMessage() );
1443 } 1408 }
1444 1409
1445 // May not have read all the data, in theory. Just enable auto-advance 1410 // May not have read all the data, in theory. Just enable auto-advance
1446 // and finish the request. 1411 // and finish the request.
1447 callback.setAutoAdvance(true); 1412 callback.setAutoAdvance(true);
1448 callback.startNextRead(stream); 1413 callback.startNextRead(stream);
1449 callback.blockForDone(); 1414 callback.blockForDone();
1450 } 1415 }
1451 1416
1452 @SmallTest 1417 @SmallTest
1453 @Feature({"Cronet"}) 1418 @Feature({"Cronet"})
1454 @OnlyRunNativeCronet 1419 @OnlyRunNativeCronet
1455 public void testCronetEngineShutdownAfterStreamFailure() throws Exception { 1420 public void testCronetEngineShutdownAfterStreamFailure() throws Exception {
1456 // Test that CronetEngine can be shut down after stream reports a failur e. 1421 // Test that CronetEngine can be shut down after stream reports a failur e.
1457 TestBidirectionalStreamCallback callback = new ShutdownTestBidirectional StreamCallback(); 1422 TestBidirectionalStreamCallback callback = new ShutdownTestBidirectional StreamCallback();
1458 BidirectionalStream.Builder builder = 1423 BidirectionalStream.Builder builder = mCronetEngine.newBidirectionalStre amBuilder(
1459 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( 1424 Http2TestServer.getEchoMethodUrl(), callback, callback.getExecut or());
1460 Http2TestServer.getEchoMethodUrl(), callback, callback.g etExecutor());
1461 CronetBidirectionalStream stream = 1425 CronetBidirectionalStream stream =
1462 (CronetBidirectionalStream) builder.setHttpMethod("GET").build() ; 1426 (CronetBidirectionalStream) builder.setHttpMethod("GET").build() ;
1463 stream.start(); 1427 stream.start();
1464 callback.setFailure(FailureType.THROW_SYNC, ResponseStep.ON_READ_COMPLET ED); 1428 callback.setFailure(FailureType.THROW_SYNC, ResponseStep.ON_READ_COMPLET ED);
1465 callback.blockForDone(); 1429 callback.blockForDone();
1466 assertTrue(callback.mOnErrorCalled); 1430 assertTrue(callback.mOnErrorCalled);
1467 assertNull(mTestFramework.mCronetEngine); 1431 assertNull(mCronetEngine);
1468 } 1432 }
1469 1433
1470 @SmallTest 1434 @SmallTest
1471 @Feature({"Cronet"}) 1435 @Feature({"Cronet"})
1472 @OnlyRunNativeCronet 1436 @OnlyRunNativeCronet
1473 public void testCronetEngineShutdownAfterStreamCancel() throws Exception { 1437 public void testCronetEngineShutdownAfterStreamCancel() throws Exception {
1474 // Test that CronetEngine can be shut down after stream is canceled. 1438 // Test that CronetEngine can be shut down after stream is canceled.
1475 TestBidirectionalStreamCallback callback = new ShutdownTestBidirectional StreamCallback(); 1439 TestBidirectionalStreamCallback callback = new ShutdownTestBidirectional StreamCallback();
1476 BidirectionalStream.Builder builder = 1440 BidirectionalStream.Builder builder = mCronetEngine.newBidirectionalStre amBuilder(
1477 mTestFramework.mCronetEngine.newBidirectionalStreamBuilder( 1441 Http2TestServer.getEchoMethodUrl(), callback, callback.getExecut or());
1478 Http2TestServer.getEchoMethodUrl(), callback, callback.g etExecutor());
1479 CronetBidirectionalStream stream = 1442 CronetBidirectionalStream stream =
1480 (CronetBidirectionalStream) builder.setHttpMethod("GET").build() ; 1443 (CronetBidirectionalStream) builder.setHttpMethod("GET").build() ;
1481 1444
1482 // Block callback when response starts to verify that shutdown fails 1445 // Block callback when response starts to verify that shutdown fails
1483 // if there are active requests. 1446 // if there are active requests.
1484 callback.setAutoAdvance(false); 1447 callback.setAutoAdvance(false);
1485 stream.start(); 1448 stream.start();
1486 try { 1449 try {
1487 mTestFramework.mCronetEngine.shutdown(); 1450 mCronetEngine.shutdown();
1488 fail("Should throw an exception"); 1451 fail("Should throw an exception");
1489 } catch (Exception e) { 1452 } catch (Exception e) {
1490 assertEquals("Cannot shutdown with active requests.", e.getMessage() ); 1453 assertEquals("Cannot shutdown with active requests.", e.getMessage() );
1491 } 1454 }
1492 callback.waitForNextReadStep(); 1455 callback.waitForNextReadStep();
1493 assertEquals(ResponseStep.ON_RESPONSE_STARTED, callback.mResponseStep); 1456 assertEquals(ResponseStep.ON_RESPONSE_STARTED, callback.mResponseStep);
1494 stream.cancel(); 1457 stream.cancel();
1495 callback.blockForDone(); 1458 callback.blockForDone();
1496 assertTrue(callback.mOnCanceledCalled); 1459 assertTrue(callback.mOnCanceledCalled);
1497 assertNull(mTestFramework.mCronetEngine); 1460 assertNull(mCronetEngine);
1498 } 1461 }
1499 1462
1500 // Returns the contents of byteBuffer, from its position() to its limit(), 1463 // Returns the contents of byteBuffer, from its position() to its limit(),
1501 // as a String. Does not modify byteBuffer's position(). 1464 // as a String. Does not modify byteBuffer's position().
1502 private static String bufferContentsToString(ByteBuffer byteBuffer, int star t, int end) { 1465 private static String bufferContentsToString(ByteBuffer byteBuffer, int star t, int end) {
1503 // Use a duplicate to avoid modifying byteBuffer. 1466 // Use a duplicate to avoid modifying byteBuffer.
1504 ByteBuffer duplicate = byteBuffer.duplicate(); 1467 ByteBuffer duplicate = byteBuffer.duplicate();
1505 duplicate.position(start); 1468 duplicate.position(start);
1506 duplicate.limit(end); 1469 duplicate.limit(end);
1507 byte[] contents = new byte[duplicate.remaining()]; 1470 byte[] contents = new byte[duplicate.remaining()];
1508 duplicate.get(contents); 1471 duplicate.get(contents);
1509 return new String(contents); 1472 return new String(contents);
1510 } 1473 }
1511 } 1474 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698