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

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: Fix compile error 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 // If there are delayed headers, this flush should try to se nd them.
282 // If nothing to flush, it should not crash.
283 stream.flush();
284 super.onStreamReady(stream);
285 }
286 };
287 BidirectionalStream stream = new BidirectionalStream
288 .Builder(url, callback, callbac k.getExecutor(),
289 mTestFramework.mCronetE ngine)
290 .setHttpMethod("GET")
291 .disableAutoFlush(true)
292 .delayRequestHeadersUntilNextFl ush(i == 0)
293 .addHeader("foo", "bar")
294 .addHeader("empty", "")
295 .build();
296 // Flush before stream is started should not crash.
297 stream.flush();
298
299 stream.start();
300 callback.blockForDone();
301 assertTrue(stream.isDone());
302
303 // Flush after stream is completed is no-op. It shouldn't call into the destroyed
304 // adapter.
305 stream.flush();
306
307 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
308 assertEquals("", callback.mResponseAsString);
309 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo -foo").get(0));
310 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-em pty").get(0));
311 }
312 }
313
314 @SmallTest
315 @Feature({"Cronet"})
316 @OnlyRunNativeCronet
317 public void testSimplePostWithFlushAfterOneWrite() throws Exception {
318 // TODO(xunjieli): Use ParameterizedTest instead of the loop.
319 for (int i = 0; i < 2; i++) {
320 String url = Http2TestServer.getEchoStreamUrl();
321 TestBidirectionalStreamCallback callback = new TestBidirectionalStre amCallback();
322 callback.addWriteData("Test String".getBytes(), true);
323 BidirectionalStream stream = new BidirectionalStream
324 .Builder(url, callback, callbac k.getExecutor(),
325 mTestFramework.mCronetE ngine)
326 .disableAutoFlush(true)
327 .delayRequestHeadersUntilNextFl ush(i == 0)
328 .addHeader("foo", "bar")
329 .addHeader("empty", "")
330 .addHeader("Content-Type", "zeb ra")
331 .build();
332 stream.start();
333 callback.blockForDone();
334 assertTrue(stream.isDone());
335
336 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
337 assertEquals("Test String", callback.mResponseAsString);
338 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo -foo").get(0));
339 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-em pty").get(0));
340 assertEquals("zebra",
341 callback.mResponseInfo.getAllHeaders().get("echo-content-typ e").get(0));
342 }
343 }
344
345 @SmallTest
346 @Feature({"Cronet"})
347 @OnlyRunNativeCronet
271 public void testSimplePostWithFlushTwice() throws Exception { 348 public void testSimplePostWithFlushTwice() throws Exception {
272 String url = Http2TestServer.getEchoStreamUrl(); 349 // TODO(xunjieli): Use ParameterizedTest instead of the loop.
273 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 350 for (int i = 0; i < 2; i++) {
274 callback.addWriteData("Test String".getBytes(), false); 351 String url = Http2TestServer.getEchoStreamUrl();
275 callback.addWriteData("1234567890".getBytes(), false); 352 TestBidirectionalStreamCallback callback = new TestBidirectionalStre amCallback();
276 callback.addWriteData("woot!".getBytes(), true); 353 callback.addWriteData("Test String".getBytes(), false);
277 callback.addWriteData("Test String".getBytes(), false); 354 callback.addWriteData("1234567890".getBytes(), false);
278 callback.addWriteData("1234567890".getBytes(), false); 355 callback.addWriteData("woot!".getBytes(), true);
279 callback.addWriteData("woot!".getBytes(), true); 356 callback.addWriteData("Test String".getBytes(), false);
280 BidirectionalStream stream = new BidirectionalStream 357 callback.addWriteData("1234567890".getBytes(), false);
281 .Builder(url, callback, callback.ge tExecutor(), 358 callback.addWriteData("woot!".getBytes(), true);
282 mTestFramework.mCronetEngin e) 359 BidirectionalStream stream = new BidirectionalStream
283 .disableAutoFlush(true) 360 .Builder(url, callback, callbac k.getExecutor(),
284 .addHeader("foo", "bar") 361 mTestFramework.mCronetE ngine)
285 .addHeader("empty", "") 362 .disableAutoFlush(true)
286 .addHeader("Content-Type", "zebra") 363 .delayRequestHeadersUntilNextFl ush(i == 0)
287 .build(); 364 .addHeader("foo", "bar")
288 stream.start(); 365 .addHeader("empty", "")
289 callback.blockForDone(); 366 .addHeader("Content-Type", "zeb ra")
290 assertTrue(stream.isDone()); 367 .build();
291 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 368 stream.start();
292 assertEquals( 369 callback.blockForDone();
293 "Test String1234567890woot!Test String1234567890woot!", callback .mResponseAsString); 370 assertTrue(stream.isDone());
294 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo ").get(0)); 371 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
295 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty" ).get(0)); 372 assertEquals("Test String1234567890woot!Test String1234567890woot!",
296 assertEquals( 373 callback.mResponseAsString);
297 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten t-type").get(0)); 374 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo -foo").get(0));
375 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-em pty").get(0));
376 assertEquals("zebra",
377 callback.mResponseInfo.getAllHeaders().get("echo-content-typ e").get(0));
378 }
298 } 379 }
299 380
300 @SmallTest 381 @SmallTest
301 @Feature({"Cronet"}) 382 @Feature({"Cronet"})
302 @OnlyRunNativeCronet 383 @OnlyRunNativeCronet
303 // Tests that it is legal to call read() in onStreamReady(). 384 // Tests that it is legal to call read() in onStreamReady().
304 public void testReadDuringOnStreamReady() throws Exception { 385 public void testReadDuringOnStreamReady() throws Exception {
305 String url = Http2TestServer.getEchoStreamUrl(); 386 String url = Http2TestServer.getEchoStreamUrl();
306 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback() { 387 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback() {
307 @Override 388 @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) { 1269 private static String bufferContentsToString(ByteBuffer byteBuffer, int star t, int end) {
1189 // Use a duplicate to avoid modifying byteBuffer. 1270 // Use a duplicate to avoid modifying byteBuffer.
1190 ByteBuffer duplicate = byteBuffer.duplicate(); 1271 ByteBuffer duplicate = byteBuffer.duplicate();
1191 duplicate.position(start); 1272 duplicate.position(start);
1192 duplicate.limit(end); 1273 duplicate.limit(end);
1193 byte[] contents = new byte[duplicate.remaining()]; 1274 byte[] contents = new byte[duplicate.remaining()];
1194 duplicate.get(contents); 1275 duplicate.get(contents);
1195 return new String(contents); 1276 return new String(contents);
1196 } 1277 }
1197 } 1278 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698