| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package org.chromium.net; | 5 package org.chromium.net; |
| 6 | 6 |
| 7 import 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 Loading... |
| 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 Loading... |
| 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 } |
| OLD | NEW |