| 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 // 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 Loading... |
| 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 } |
| OLD | NEW |