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

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

Issue 1992953004: [Cronet] Make delaying sending request headers explicit in bidirectional stream (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: correct a typo Created 4 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 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;
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 callback.addWriteData("1234567890".getBytes(), false); 243 callback.addWriteData("1234567890".getBytes(), false);
244 callback.addWriteData("woot!".getBytes(), true); 244 callback.addWriteData("woot!".getBytes(), true);
245 BidirectionalStream stream = new BidirectionalStream 245 BidirectionalStream stream = new BidirectionalStream
246 .Builder(url, callback, callback.ge tExecutor(), 246 .Builder(url, callback, callback.ge tExecutor(),
247 mTestFramework.mCronetEngin e) 247 mTestFramework.mCronetEngin e)
248 .disableAutoFlush(true) 248 .disableAutoFlush(true)
249 .addHeader("foo", "bar") 249 .addHeader("foo", "bar")
250 .addHeader("empty", "") 250 .addHeader("empty", "")
251 .addHeader("Content-Type", "zebra") 251 .addHeader("Content-Type", "zebra")
252 .build(); 252 .build();
253 // Flush before stream is started should not crash.
254 stream.flush();
255
253 stream.start(); 256 stream.start();
254 callback.blockForDone(); 257 callback.blockForDone();
255 assertTrue(stream.isDone()); 258 assertTrue(stream.isDone());
256 259
257 // Flush after stream is completed is no-op. It shouldn't call into the destroyed adapter. 260 // Flush after stream is completed is no-op. It shouldn't call into the destroyed adapter.
258 stream.flush(); 261 stream.flush();
259 262
260 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 263 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
261 assertEquals("Test String1234567890woot!", callback.mResponseAsString); 264 assertEquals("Test String1234567890woot!", callback.mResponseAsString);
262 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo ").get(0)); 265 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo ").get(0));
263 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty" ).get(0)); 266 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty" ).get(0));
264 assertEquals( 267 assertEquals(
265 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten t-type").get(0)); 268 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten t-type").get(0));
266 } 269 }
267 270
268 @SmallTest 271 @SmallTest
269 @Feature({"Cronet"}) 272 @Feature({"Cronet"})
270 @OnlyRunNativeCronet 273 @OnlyRunNativeCronet
274 public void testSimpleGetWithFlush() throws Exception {
275 // TODO(xunjieli): Use ParameterizedTest instead of the loop.
276 for (int i = 0; i < 2; i++) {
277 String url = Http2TestServer.getEchoStreamUrl();
278 TestBidirectionalStreamCallback callback = new TestBidirectionalStre amCallback() {
279 @Override
280 public void onStreamReady(BidirectionalStream stream) {
281 try {
282 // Attempt to write data for GET request.
283 stream.write(ByteBuffer.wrap("dummy".getBytes()), true);
284 } catch (IllegalArgumentException e) {
285 // Expected.
286 }
287 // If there are delayed headers, this flush should try to se nd them.
288 // If nothing to flush, it should not crash.
289 stream.flush();
290 super.onStreamReady(stream);
291 try {
292 // Attempt to write data for GET request.
293 stream.write(ByteBuffer.wrap("dummy".getBytes()), true);
294 } catch (IllegalArgumentException e) {
295 // Expected.
296 }
297 }
298 };
299 BidirectionalStream stream = new BidirectionalStream
300 .Builder(url, callback, callbac k.getExecutor(),
301 mTestFramework.mCronetE ngine)
302 .setHttpMethod("GET")
303 .disableAutoFlush(true)
304 .delayRequestHeadersUntilFirstF lush(i == 0)
305 .addHeader("foo", "bar")
306 .addHeader("empty", "")
307 .build();
308 // Flush before stream is started should not crash.
309 stream.flush();
310
311 stream.start();
312 callback.blockForDone();
313 assertTrue(stream.isDone());
314
315 // Flush after stream is completed is no-op. It shouldn't call into the destroyed
316 // adapter.
317 stream.flush();
318
319 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
320 assertEquals("", callback.mResponseAsString);
321 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo -foo").get(0));
322 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-em pty").get(0));
323 }
324 }
325
326 @SmallTest
327 @Feature({"Cronet"})
328 @OnlyRunNativeCronet
329 public void testSimplePostWithFlushAfterOneWrite() throws Exception {
330 // TODO(xunjieli): Use ParameterizedTest instead of the loop.
331 for (int i = 0; i < 2; i++) {
332 String url = Http2TestServer.getEchoStreamUrl();
333 TestBidirectionalStreamCallback callback = new TestBidirectionalStre amCallback();
334 callback.addWriteData("Test String".getBytes(), true);
335 BidirectionalStream stream = new BidirectionalStream
336 .Builder(url, callback, callbac k.getExecutor(),
337 mTestFramework.mCronetE ngine)
338 .disableAutoFlush(true)
339 .delayRequestHeadersUntilFirstF lush(i == 0)
340 .addHeader("foo", "bar")
341 .addHeader("empty", "")
342 .addHeader("Content-Type", "zeb ra")
343 .build();
344 stream.start();
345 callback.blockForDone();
346 assertTrue(stream.isDone());
347
348 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
349 assertEquals("Test String", callback.mResponseAsString);
350 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo -foo").get(0));
351 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-em pty").get(0));
352 assertEquals("zebra",
353 callback.mResponseInfo.getAllHeaders().get("echo-content-typ e").get(0));
354 }
355 }
356
357 @SmallTest
358 @Feature({"Cronet"})
359 @OnlyRunNativeCronet
271 public void testSimplePostWithFlushTwice() throws Exception { 360 public void testSimplePostWithFlushTwice() throws Exception {
272 String url = Http2TestServer.getEchoStreamUrl(); 361 // TODO(xunjieli): Use ParameterizedTest instead of the loop.
273 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 362 for (int i = 0; i < 2; i++) {
274 callback.addWriteData("Test String".getBytes(), false); 363 String url = Http2TestServer.getEchoStreamUrl();
275 callback.addWriteData("1234567890".getBytes(), false); 364 TestBidirectionalStreamCallback callback = new TestBidirectionalStre amCallback();
276 callback.addWriteData("woot!".getBytes(), true); 365 callback.addWriteData("Test String".getBytes(), false);
277 callback.addWriteData("Test String".getBytes(), false); 366 callback.addWriteData("1234567890".getBytes(), false);
278 callback.addWriteData("1234567890".getBytes(), false); 367 callback.addWriteData("woot!".getBytes(), true);
279 callback.addWriteData("woot!".getBytes(), true); 368 callback.addWriteData("Test String".getBytes(), false);
280 BidirectionalStream stream = new BidirectionalStream 369 callback.addWriteData("1234567890".getBytes(), false);
281 .Builder(url, callback, callback.ge tExecutor(), 370 callback.addWriteData("woot!".getBytes(), true);
282 mTestFramework.mCronetEngin e) 371 BidirectionalStream stream = new BidirectionalStream
283 .disableAutoFlush(true) 372 .Builder(url, callback, callbac k.getExecutor(),
284 .addHeader("foo", "bar") 373 mTestFramework.mCronetE ngine)
285 .addHeader("empty", "") 374 .disableAutoFlush(true)
286 .addHeader("Content-Type", "zebra") 375 .delayRequestHeadersUntilFirstF lush(i == 0)
287 .build(); 376 .addHeader("foo", "bar")
288 stream.start(); 377 .addHeader("empty", "")
289 callback.blockForDone(); 378 .addHeader("Content-Type", "zeb ra")
290 assertTrue(stream.isDone()); 379 .build();
291 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 380 stream.start();
292 assertEquals( 381 callback.blockForDone();
293 "Test String1234567890woot!Test String1234567890woot!", callback .mResponseAsString); 382 assertTrue(stream.isDone());
294 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo ").get(0)); 383 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
295 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty" ).get(0)); 384 assertEquals("Test String1234567890woot!Test String1234567890woot!",
296 assertEquals( 385 callback.mResponseAsString);
297 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten t-type").get(0)); 386 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo -foo").get(0));
387 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-em pty").get(0));
388 assertEquals("zebra",
389 callback.mResponseInfo.getAllHeaders().get("echo-content-typ e").get(0));
390 }
298 } 391 }
299 392
300 @SmallTest 393 @SmallTest
301 @Feature({"Cronet"}) 394 @Feature({"Cronet"})
302 @OnlyRunNativeCronet 395 @OnlyRunNativeCronet
303 // Tests that it is legal to call read() in onStreamReady(). 396 // Tests that it is legal to call read() in onStreamReady().
304 public void testReadDuringOnStreamReady() throws Exception { 397 public void testReadDuringOnStreamReady() throws Exception {
305 String url = Http2TestServer.getEchoStreamUrl(); 398 String url = Http2TestServer.getEchoStreamUrl();
306 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback() { 399 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback() {
307 @Override 400 @Override
(...skipping 880 matching lines...) Expand 10 before | Expand all | Expand 10 after
1188 private static String bufferContentsToString(ByteBuffer byteBuffer, int star t, int end) { 1281 private static String bufferContentsToString(ByteBuffer byteBuffer, int star t, int end) {
1189 // Use a duplicate to avoid modifying byteBuffer. 1282 // Use a duplicate to avoid modifying byteBuffer.
1190 ByteBuffer duplicate = byteBuffer.duplicate(); 1283 ByteBuffer duplicate = byteBuffer.duplicate();
1191 duplicate.position(start); 1284 duplicate.position(start);
1192 duplicate.limit(end); 1285 duplicate.limit(end);
1193 byte[] contents = new byte[duplicate.remaining()]; 1286 byte[] contents = new byte[duplicate.remaining()];
1194 duplicate.get(contents); 1287 duplicate.get(contents);
1195 return new String(contents); 1288 return new String(contents);
1196 } 1289 }
1197 } 1290 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698