| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #include "content/browser/byte_stream.h" | 5 #include "content/browser/byte_stream.h" |
| 6 | 6 |
| 7 #include <deque> | 7 #include <deque> |
| 8 #include <limits> | 8 #include <limits> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| 11 #include "base/callback.h" | 11 #include "base/callback.h" |
| 12 #include "base/memory/ref_counted.h" | 12 #include "base/memory/ref_counted.h" |
| 13 #include "base/message_loop/message_loop.h" | |
| 14 #include "base/test/test_simple_task_runner.h" | 13 #include "base/test/test_simple_task_runner.h" |
| 15 #include "net/base/io_buffer.h" | 14 #include "net/base/io_buffer.h" |
| 16 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
| 17 | 16 |
| 18 namespace content { | 17 namespace content { |
| 19 namespace { | 18 namespace { |
| 20 | 19 |
| 21 void CountCallbacks(int* counter) { | 20 void CountCallbacks(int* counter) { |
| 22 ++*counter; | 21 ++*counter; |
| 23 } | 22 } |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 97 | 96 |
| 98 ByteStreamTest::ByteStreamTest() | 97 ByteStreamTest::ByteStreamTest() |
| 99 : producing_seed_key_(0), | 98 : producing_seed_key_(0), |
| 100 consuming_seed_key_(0) { } | 99 consuming_seed_key_(0) { } |
| 101 | 100 |
| 102 // Confirm that filling and emptying the stream works properly, and that | 101 // Confirm that filling and emptying the stream works properly, and that |
| 103 // we get full triggers when we expect. | 102 // we get full triggers when we expect. |
| 104 TEST_F(ByteStreamTest, ByteStream_PushBack) { | 103 TEST_F(ByteStreamTest, ByteStream_PushBack) { |
| 105 scoped_ptr<ByteStreamWriter> byte_stream_input; | 104 scoped_ptr<ByteStreamWriter> byte_stream_input; |
| 106 scoped_ptr<ByteStreamReader> byte_stream_output; | 105 scoped_ptr<ByteStreamReader> byte_stream_output; |
| 107 CreateByteStream( | 106 CreateByteStream(message_loop_.task_runner(), message_loop_.task_runner(), |
| 108 message_loop_.message_loop_proxy(), message_loop_.message_loop_proxy(), | 107 3 * 1024, &byte_stream_input, &byte_stream_output); |
| 109 3 * 1024, &byte_stream_input, &byte_stream_output); | |
| 110 | 108 |
| 111 // Push a series of IO buffers on; test pushback happening and | 109 // Push a series of IO buffers on; test pushback happening and |
| 112 // that it's advisory. | 110 // that it's advisory. |
| 113 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); | 111 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); |
| 114 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); | 112 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); |
| 115 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); | 113 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); |
| 116 EXPECT_FALSE(Write(byte_stream_input.get(), 1)); | 114 EXPECT_FALSE(Write(byte_stream_input.get(), 1)); |
| 117 EXPECT_FALSE(Write(byte_stream_input.get(), 1024)); | 115 EXPECT_FALSE(Write(byte_stream_input.get(), 1024)); |
| 118 // Flush | 116 // Flush |
| 119 byte_stream_input->Close(0); | 117 byte_stream_input->Close(0); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 152 message_loop_.RunUntilIdle(); | 150 message_loop_.RunUntilIdle(); |
| 153 // Reader now knows that all data is read out. | 151 // Reader now knows that all data is read out. |
| 154 EXPECT_EQ(1024U, byte_stream_input->GetTotalBufferedBytes()); | 152 EXPECT_EQ(1024U, byte_stream_input->GetTotalBufferedBytes()); |
| 155 } | 153 } |
| 156 | 154 |
| 157 // Confirm that Flush() method makes the writer to send written contents to | 155 // Confirm that Flush() method makes the writer to send written contents to |
| 158 // the reader. | 156 // the reader. |
| 159 TEST_F(ByteStreamTest, ByteStream_Flush) { | 157 TEST_F(ByteStreamTest, ByteStream_Flush) { |
| 160 scoped_ptr<ByteStreamWriter> byte_stream_input; | 158 scoped_ptr<ByteStreamWriter> byte_stream_input; |
| 161 scoped_ptr<ByteStreamReader> byte_stream_output; | 159 scoped_ptr<ByteStreamReader> byte_stream_output; |
| 162 CreateByteStream( | 160 CreateByteStream(message_loop_.task_runner(), message_loop_.task_runner(), |
| 163 message_loop_.message_loop_proxy(), message_loop_.message_loop_proxy(), | 161 1024, &byte_stream_input, &byte_stream_output); |
| 164 1024, &byte_stream_input, &byte_stream_output); | |
| 165 | 162 |
| 166 EXPECT_TRUE(Write(byte_stream_input.get(), 1)); | 163 EXPECT_TRUE(Write(byte_stream_input.get(), 1)); |
| 167 message_loop_.RunUntilIdle(); | 164 message_loop_.RunUntilIdle(); |
| 168 | 165 |
| 169 scoped_refptr<net::IOBuffer> output_io_buffer; | 166 scoped_refptr<net::IOBuffer> output_io_buffer; |
| 170 size_t output_length = 0; | 167 size_t output_length = 0; |
| 171 // Check that data is not sent to the reader yet. | 168 // Check that data is not sent to the reader yet. |
| 172 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, | 169 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, |
| 173 byte_stream_output->Read(&output_io_buffer, &output_length)); | 170 byte_stream_output->Read(&output_io_buffer, &output_length)); |
| 174 | 171 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 192 EXPECT_EQ(ByteStreamReader::STREAM_COMPLETE, | 189 EXPECT_EQ(ByteStreamReader::STREAM_COMPLETE, |
| 193 byte_stream_output->Read(&output_io_buffer, &output_length)); | 190 byte_stream_output->Read(&output_io_buffer, &output_length)); |
| 194 } | 191 } |
| 195 | 192 |
| 196 // Same as above, only use knowledge of the internals to confirm | 193 // Same as above, only use knowledge of the internals to confirm |
| 197 // that we're getting pushback even when data's split across the two | 194 // that we're getting pushback even when data's split across the two |
| 198 // objects | 195 // objects |
| 199 TEST_F(ByteStreamTest, ByteStream_PushBackSplit) { | 196 TEST_F(ByteStreamTest, ByteStream_PushBackSplit) { |
| 200 scoped_ptr<ByteStreamWriter> byte_stream_input; | 197 scoped_ptr<ByteStreamWriter> byte_stream_input; |
| 201 scoped_ptr<ByteStreamReader> byte_stream_output; | 198 scoped_ptr<ByteStreamReader> byte_stream_output; |
| 202 CreateByteStream( | 199 CreateByteStream(message_loop_.task_runner(), message_loop_.task_runner(), |
| 203 message_loop_.message_loop_proxy(), message_loop_.message_loop_proxy(), | 200 9 * 1024, &byte_stream_input, &byte_stream_output); |
| 204 9 * 1024, &byte_stream_input, &byte_stream_output); | |
| 205 | 201 |
| 206 // Push a series of IO buffers on; test pushback happening and | 202 // Push a series of IO buffers on; test pushback happening and |
| 207 // that it's advisory. | 203 // that it's advisory. |
| 208 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); | 204 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); |
| 209 message_loop_.RunUntilIdle(); | 205 message_loop_.RunUntilIdle(); |
| 210 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); | 206 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); |
| 211 message_loop_.RunUntilIdle(); | 207 message_loop_.RunUntilIdle(); |
| 212 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); | 208 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); |
| 213 message_loop_.RunUntilIdle(); | 209 message_loop_.RunUntilIdle(); |
| 214 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); | 210 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 247 // Confirm that a Close() notification transmits in-order | 243 // Confirm that a Close() notification transmits in-order |
| 248 // with data on the stream. | 244 // with data on the stream. |
| 249 TEST_F(ByteStreamTest, ByteStream_CompleteTransmits) { | 245 TEST_F(ByteStreamTest, ByteStream_CompleteTransmits) { |
| 250 scoped_ptr<ByteStreamWriter> byte_stream_input; | 246 scoped_ptr<ByteStreamWriter> byte_stream_input; |
| 251 scoped_ptr<ByteStreamReader> byte_stream_output; | 247 scoped_ptr<ByteStreamReader> byte_stream_output; |
| 252 | 248 |
| 253 scoped_refptr<net::IOBuffer> output_io_buffer; | 249 scoped_refptr<net::IOBuffer> output_io_buffer; |
| 254 size_t output_length; | 250 size_t output_length; |
| 255 | 251 |
| 256 // Empty stream, non-error case. | 252 // Empty stream, non-error case. |
| 257 CreateByteStream( | 253 CreateByteStream(message_loop_.task_runner(), message_loop_.task_runner(), |
| 258 message_loop_.message_loop_proxy(), message_loop_.message_loop_proxy(), | 254 3 * 1024, &byte_stream_input, &byte_stream_output); |
| 259 3 * 1024, &byte_stream_input, &byte_stream_output); | |
| 260 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, | 255 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, |
| 261 byte_stream_output->Read(&output_io_buffer, &output_length)); | 256 byte_stream_output->Read(&output_io_buffer, &output_length)); |
| 262 byte_stream_input->Close(0); | 257 byte_stream_input->Close(0); |
| 263 message_loop_.RunUntilIdle(); | 258 message_loop_.RunUntilIdle(); |
| 264 ASSERT_EQ(ByteStreamReader::STREAM_COMPLETE, | 259 ASSERT_EQ(ByteStreamReader::STREAM_COMPLETE, |
| 265 byte_stream_output->Read(&output_io_buffer, &output_length)); | 260 byte_stream_output->Read(&output_io_buffer, &output_length)); |
| 266 EXPECT_EQ(0, byte_stream_output->GetStatus()); | 261 EXPECT_EQ(0, byte_stream_output->GetStatus()); |
| 267 | 262 |
| 268 // Non-empty stream, non-error case. | 263 // Non-empty stream, non-error case. |
| 269 CreateByteStream( | 264 CreateByteStream(message_loop_.task_runner(), message_loop_.task_runner(), |
| 270 message_loop_.message_loop_proxy(), message_loop_.message_loop_proxy(), | 265 3 * 1024, &byte_stream_input, &byte_stream_output); |
| 271 3 * 1024, &byte_stream_input, &byte_stream_output); | |
| 272 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, | 266 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, |
| 273 byte_stream_output->Read(&output_io_buffer, &output_length)); | 267 byte_stream_output->Read(&output_io_buffer, &output_length)); |
| 274 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); | 268 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); |
| 275 byte_stream_input->Close(0); | 269 byte_stream_input->Close(0); |
| 276 message_loop_.RunUntilIdle(); | 270 message_loop_.RunUntilIdle(); |
| 277 EXPECT_EQ(ByteStreamReader::STREAM_HAS_DATA, | 271 EXPECT_EQ(ByteStreamReader::STREAM_HAS_DATA, |
| 278 byte_stream_output->Read(&output_io_buffer, &output_length)); | 272 byte_stream_output->Read(&output_io_buffer, &output_length)); |
| 279 EXPECT_TRUE(ValidateIOBuffer(output_io_buffer, output_length)); | 273 EXPECT_TRUE(ValidateIOBuffer(output_io_buffer, output_length)); |
| 280 ASSERT_EQ(ByteStreamReader::STREAM_COMPLETE, | 274 ASSERT_EQ(ByteStreamReader::STREAM_COMPLETE, |
| 281 byte_stream_output->Read(&output_io_buffer, &output_length)); | 275 byte_stream_output->Read(&output_io_buffer, &output_length)); |
| 282 EXPECT_EQ(0, byte_stream_output->GetStatus()); | 276 EXPECT_EQ(0, byte_stream_output->GetStatus()); |
| 283 | 277 |
| 284 const int kFakeErrorCode = 22; | 278 const int kFakeErrorCode = 22; |
| 285 | 279 |
| 286 // Empty stream, error case. | 280 // Empty stream, error case. |
| 287 CreateByteStream( | 281 CreateByteStream(message_loop_.task_runner(), message_loop_.task_runner(), |
| 288 message_loop_.message_loop_proxy(), message_loop_.message_loop_proxy(), | 282 3 * 1024, &byte_stream_input, &byte_stream_output); |
| 289 3 * 1024, &byte_stream_input, &byte_stream_output); | |
| 290 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, | 283 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, |
| 291 byte_stream_output->Read(&output_io_buffer, &output_length)); | 284 byte_stream_output->Read(&output_io_buffer, &output_length)); |
| 292 byte_stream_input->Close(kFakeErrorCode); | 285 byte_stream_input->Close(kFakeErrorCode); |
| 293 message_loop_.RunUntilIdle(); | 286 message_loop_.RunUntilIdle(); |
| 294 ASSERT_EQ(ByteStreamReader::STREAM_COMPLETE, | 287 ASSERT_EQ(ByteStreamReader::STREAM_COMPLETE, |
| 295 byte_stream_output->Read(&output_io_buffer, &output_length)); | 288 byte_stream_output->Read(&output_io_buffer, &output_length)); |
| 296 EXPECT_EQ(kFakeErrorCode, byte_stream_output->GetStatus()); | 289 EXPECT_EQ(kFakeErrorCode, byte_stream_output->GetStatus()); |
| 297 | 290 |
| 298 // Non-empty stream, error case. | 291 // Non-empty stream, error case. |
| 299 CreateByteStream( | 292 CreateByteStream(message_loop_.task_runner(), message_loop_.task_runner(), |
| 300 message_loop_.message_loop_proxy(), message_loop_.message_loop_proxy(), | 293 3 * 1024, &byte_stream_input, &byte_stream_output); |
| 301 3 * 1024, &byte_stream_input, &byte_stream_output); | |
| 302 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, | 294 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, |
| 303 byte_stream_output->Read(&output_io_buffer, &output_length)); | 295 byte_stream_output->Read(&output_io_buffer, &output_length)); |
| 304 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); | 296 EXPECT_TRUE(Write(byte_stream_input.get(), 1024)); |
| 305 byte_stream_input->Close(kFakeErrorCode); | 297 byte_stream_input->Close(kFakeErrorCode); |
| 306 message_loop_.RunUntilIdle(); | 298 message_loop_.RunUntilIdle(); |
| 307 EXPECT_EQ(ByteStreamReader::STREAM_HAS_DATA, | 299 EXPECT_EQ(ByteStreamReader::STREAM_HAS_DATA, |
| 308 byte_stream_output->Read(&output_io_buffer, &output_length)); | 300 byte_stream_output->Read(&output_io_buffer, &output_length)); |
| 309 EXPECT_TRUE(ValidateIOBuffer(output_io_buffer, output_length)); | 301 EXPECT_TRUE(ValidateIOBuffer(output_io_buffer, output_length)); |
| 310 ASSERT_EQ(ByteStreamReader::STREAM_COMPLETE, | 302 ASSERT_EQ(ByteStreamReader::STREAM_COMPLETE, |
| 311 byte_stream_output->Read(&output_io_buffer, &output_length)); | 303 byte_stream_output->Read(&output_io_buffer, &output_length)); |
| 312 EXPECT_EQ(kFakeErrorCode, byte_stream_output->GetStatus()); | 304 EXPECT_EQ(kFakeErrorCode, byte_stream_output->GetStatus()); |
| 313 } | 305 } |
| 314 | 306 |
| 315 // Confirm that callbacks on the sink side are triggered when they should be. | 307 // Confirm that callbacks on the sink side are triggered when they should be. |
| 316 TEST_F(ByteStreamTest, ByteStream_SinkCallback) { | 308 TEST_F(ByteStreamTest, ByteStream_SinkCallback) { |
| 317 scoped_refptr<base::TestSimpleTaskRunner> task_runner( | 309 scoped_refptr<base::TestSimpleTaskRunner> task_runner( |
| 318 new base::TestSimpleTaskRunner()); | 310 new base::TestSimpleTaskRunner()); |
| 319 | 311 |
| 320 scoped_ptr<ByteStreamWriter> byte_stream_input; | 312 scoped_ptr<ByteStreamWriter> byte_stream_input; |
| 321 scoped_ptr<ByteStreamReader> byte_stream_output; | 313 scoped_ptr<ByteStreamReader> byte_stream_output; |
| 322 CreateByteStream( | 314 CreateByteStream(message_loop_.task_runner(), task_runner, 10000, |
| 323 message_loop_.message_loop_proxy(), task_runner, | 315 &byte_stream_input, &byte_stream_output); |
| 324 10000, &byte_stream_input, &byte_stream_output); | |
| 325 | 316 |
| 326 scoped_refptr<net::IOBuffer> output_io_buffer; | 317 scoped_refptr<net::IOBuffer> output_io_buffer; |
| 327 size_t output_length; | 318 size_t output_length; |
| 328 | 319 |
| 329 // Note that the specifics of when the callbacks are called with regard | 320 // Note that the specifics of when the callbacks are called with regard |
| 330 // to how much data is pushed onto the stream is not (currently) part | 321 // to how much data is pushed onto the stream is not (currently) part |
| 331 // of the interface contract. If it becomes part of the contract, the | 322 // of the interface contract. If it becomes part of the contract, the |
| 332 // tests below should get much more precise. | 323 // tests below should get much more precise. |
| 333 | 324 |
| 334 // Confirm callback called when you add more than 33% of the buffer. | 325 // Confirm callback called when you add more than 33% of the buffer. |
| (...skipping 29 matching lines...) Expand all Loading... |
| 364 } | 355 } |
| 365 | 356 |
| 366 // Confirm that callbacks on the source side are triggered when they should | 357 // Confirm that callbacks on the source side are triggered when they should |
| 367 // be. | 358 // be. |
| 368 TEST_F(ByteStreamTest, ByteStream_SourceCallback) { | 359 TEST_F(ByteStreamTest, ByteStream_SourceCallback) { |
| 369 scoped_refptr<base::TestSimpleTaskRunner> task_runner( | 360 scoped_refptr<base::TestSimpleTaskRunner> task_runner( |
| 370 new base::TestSimpleTaskRunner()); | 361 new base::TestSimpleTaskRunner()); |
| 371 | 362 |
| 372 scoped_ptr<ByteStreamWriter> byte_stream_input; | 363 scoped_ptr<ByteStreamWriter> byte_stream_input; |
| 373 scoped_ptr<ByteStreamReader> byte_stream_output; | 364 scoped_ptr<ByteStreamReader> byte_stream_output; |
| 374 CreateByteStream( | 365 CreateByteStream(task_runner, message_loop_.task_runner(), 10000, |
| 375 task_runner, message_loop_.message_loop_proxy(), | 366 &byte_stream_input, &byte_stream_output); |
| 376 10000, &byte_stream_input, &byte_stream_output); | |
| 377 | 367 |
| 378 scoped_refptr<net::IOBuffer> output_io_buffer; | 368 scoped_refptr<net::IOBuffer> output_io_buffer; |
| 379 size_t output_length; | 369 size_t output_length; |
| 380 | 370 |
| 381 // Note that the specifics of when the callbacks are called with regard | 371 // Note that the specifics of when the callbacks are called with regard |
| 382 // to how much data is pulled from the stream is not (currently) part | 372 // to how much data is pulled from the stream is not (currently) part |
| 383 // of the interface contract. If it becomes part of the contract, the | 373 // of the interface contract. If it becomes part of the contract, the |
| 384 // tests below should get much more precise. | 374 // tests below should get much more precise. |
| 385 | 375 |
| 386 // Confirm callback called when about 33% space available, and not | 376 // Confirm callback called when about 33% space available, and not |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 426 } | 416 } |
| 427 | 417 |
| 428 // Confirm that racing a change to a sink callback with a post results | 418 // Confirm that racing a change to a sink callback with a post results |
| 429 // in the new callback being called. | 419 // in the new callback being called. |
| 430 TEST_F(ByteStreamTest, ByteStream_SinkInterrupt) { | 420 TEST_F(ByteStreamTest, ByteStream_SinkInterrupt) { |
| 431 scoped_refptr<base::TestSimpleTaskRunner> task_runner( | 421 scoped_refptr<base::TestSimpleTaskRunner> task_runner( |
| 432 new base::TestSimpleTaskRunner()); | 422 new base::TestSimpleTaskRunner()); |
| 433 | 423 |
| 434 scoped_ptr<ByteStreamWriter> byte_stream_input; | 424 scoped_ptr<ByteStreamWriter> byte_stream_input; |
| 435 scoped_ptr<ByteStreamReader> byte_stream_output; | 425 scoped_ptr<ByteStreamReader> byte_stream_output; |
| 436 CreateByteStream( | 426 CreateByteStream(message_loop_.task_runner(), task_runner, 10000, |
| 437 message_loop_.message_loop_proxy(), task_runner, | 427 &byte_stream_input, &byte_stream_output); |
| 438 10000, &byte_stream_input, &byte_stream_output); | |
| 439 | 428 |
| 440 scoped_refptr<net::IOBuffer> output_io_buffer; | 429 scoped_refptr<net::IOBuffer> output_io_buffer; |
| 441 size_t output_length; | 430 size_t output_length; |
| 442 base::Closure intermediate_callback; | 431 base::Closure intermediate_callback; |
| 443 | 432 |
| 444 // Record initial state. | 433 // Record initial state. |
| 445 int num_callbacks = 0; | 434 int num_callbacks = 0; |
| 446 byte_stream_output->RegisterCallback( | 435 byte_stream_output->RegisterCallback( |
| 447 base::Bind(CountCallbacks, &num_callbacks)); | 436 base::Bind(CountCallbacks, &num_callbacks)); |
| 448 | 437 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 473 } | 462 } |
| 474 | 463 |
| 475 // Confirm that racing a change to a source callback with a post results | 464 // Confirm that racing a change to a source callback with a post results |
| 476 // in the new callback being called. | 465 // in the new callback being called. |
| 477 TEST_F(ByteStreamTest, ByteStream_SourceInterrupt) { | 466 TEST_F(ByteStreamTest, ByteStream_SourceInterrupt) { |
| 478 scoped_refptr<base::TestSimpleTaskRunner> task_runner( | 467 scoped_refptr<base::TestSimpleTaskRunner> task_runner( |
| 479 new base::TestSimpleTaskRunner()); | 468 new base::TestSimpleTaskRunner()); |
| 480 | 469 |
| 481 scoped_ptr<ByteStreamWriter> byte_stream_input; | 470 scoped_ptr<ByteStreamWriter> byte_stream_input; |
| 482 scoped_ptr<ByteStreamReader> byte_stream_output; | 471 scoped_ptr<ByteStreamReader> byte_stream_output; |
| 483 CreateByteStream( | 472 CreateByteStream(task_runner, message_loop_.task_runner(), 10000, |
| 484 task_runner, message_loop_.message_loop_proxy(), | 473 &byte_stream_input, &byte_stream_output); |
| 485 10000, &byte_stream_input, &byte_stream_output); | |
| 486 | 474 |
| 487 scoped_refptr<net::IOBuffer> output_io_buffer; | 475 scoped_refptr<net::IOBuffer> output_io_buffer; |
| 488 size_t output_length; | 476 size_t output_length; |
| 489 base::Closure intermediate_callback; | 477 base::Closure intermediate_callback; |
| 490 | 478 |
| 491 // Setup state for test. | 479 // Setup state for test. |
| 492 int num_callbacks = 0; | 480 int num_callbacks = 0; |
| 493 byte_stream_input->RegisterCallback( | 481 byte_stream_input->RegisterCallback( |
| 494 base::Bind(CountCallbacks, &num_callbacks)); | 482 base::Bind(CountCallbacks, &num_callbacks)); |
| 495 EXPECT_TRUE(Write(byte_stream_input.get(), 2000)); | 483 EXPECT_TRUE(Write(byte_stream_input.get(), 2000)); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 525 } | 513 } |
| 526 | 514 |
| 527 // Confirm that callback is called on zero data transfer but source | 515 // Confirm that callback is called on zero data transfer but source |
| 528 // complete. | 516 // complete. |
| 529 TEST_F(ByteStreamTest, ByteStream_ZeroCallback) { | 517 TEST_F(ByteStreamTest, ByteStream_ZeroCallback) { |
| 530 scoped_refptr<base::TestSimpleTaskRunner> task_runner( | 518 scoped_refptr<base::TestSimpleTaskRunner> task_runner( |
| 531 new base::TestSimpleTaskRunner()); | 519 new base::TestSimpleTaskRunner()); |
| 532 | 520 |
| 533 scoped_ptr<ByteStreamWriter> byte_stream_input; | 521 scoped_ptr<ByteStreamWriter> byte_stream_input; |
| 534 scoped_ptr<ByteStreamReader> byte_stream_output; | 522 scoped_ptr<ByteStreamReader> byte_stream_output; |
| 535 CreateByteStream( | 523 CreateByteStream(message_loop_.task_runner(), task_runner, 10000, |
| 536 message_loop_.message_loop_proxy(), task_runner, | 524 &byte_stream_input, &byte_stream_output); |
| 537 10000, &byte_stream_input, &byte_stream_output); | |
| 538 | 525 |
| 539 base::Closure intermediate_callback; | 526 base::Closure intermediate_callback; |
| 540 | 527 |
| 541 // Record initial state. | 528 // Record initial state. |
| 542 int num_callbacks = 0; | 529 int num_callbacks = 0; |
| 543 byte_stream_output->RegisterCallback( | 530 byte_stream_output->RegisterCallback( |
| 544 base::Bind(CountCallbacks, &num_callbacks)); | 531 base::Bind(CountCallbacks, &num_callbacks)); |
| 545 | 532 |
| 546 // Immediately close the stream. | 533 // Immediately close the stream. |
| 547 byte_stream_input->Close(0); | 534 byte_stream_input->Close(0); |
| 548 task_runner->RunUntilIdle(); | 535 task_runner->RunUntilIdle(); |
| 549 EXPECT_EQ(1, num_callbacks); | 536 EXPECT_EQ(1, num_callbacks); |
| 550 } | 537 } |
| 551 | 538 |
| 552 TEST_F(ByteStreamTest, ByteStream_CloseWithoutAnyWrite) { | 539 TEST_F(ByteStreamTest, ByteStream_CloseWithoutAnyWrite) { |
| 553 scoped_ptr<ByteStreamWriter> byte_stream_input; | 540 scoped_ptr<ByteStreamWriter> byte_stream_input; |
| 554 scoped_ptr<ByteStreamReader> byte_stream_output; | 541 scoped_ptr<ByteStreamReader> byte_stream_output; |
| 555 CreateByteStream( | 542 CreateByteStream(message_loop_.task_runner(), message_loop_.task_runner(), |
| 556 message_loop_.message_loop_proxy(), message_loop_.message_loop_proxy(), | 543 3 * 1024, &byte_stream_input, &byte_stream_output); |
| 557 3 * 1024, &byte_stream_input, &byte_stream_output); | |
| 558 | 544 |
| 559 byte_stream_input->Close(0); | 545 byte_stream_input->Close(0); |
| 560 message_loop_.RunUntilIdle(); | 546 message_loop_.RunUntilIdle(); |
| 561 | 547 |
| 562 scoped_refptr<net::IOBuffer> output_io_buffer; | 548 scoped_refptr<net::IOBuffer> output_io_buffer; |
| 563 size_t output_length; | 549 size_t output_length; |
| 564 EXPECT_EQ(ByteStreamReader::STREAM_COMPLETE, | 550 EXPECT_EQ(ByteStreamReader::STREAM_COMPLETE, |
| 565 byte_stream_output->Read(&output_io_buffer, &output_length)); | 551 byte_stream_output->Read(&output_io_buffer, &output_length)); |
| 566 } | 552 } |
| 567 | 553 |
| 568 TEST_F(ByteStreamTest, ByteStream_FlushWithoutAnyWrite) { | 554 TEST_F(ByteStreamTest, ByteStream_FlushWithoutAnyWrite) { |
| 569 scoped_ptr<ByteStreamWriter> byte_stream_input; | 555 scoped_ptr<ByteStreamWriter> byte_stream_input; |
| 570 scoped_ptr<ByteStreamReader> byte_stream_output; | 556 scoped_ptr<ByteStreamReader> byte_stream_output; |
| 571 CreateByteStream( | 557 CreateByteStream(message_loop_.task_runner(), message_loop_.task_runner(), |
| 572 message_loop_.message_loop_proxy(), message_loop_.message_loop_proxy(), | 558 3 * 1024, &byte_stream_input, &byte_stream_output); |
| 573 3 * 1024, &byte_stream_input, &byte_stream_output); | |
| 574 | 559 |
| 575 byte_stream_input->Flush(); | 560 byte_stream_input->Flush(); |
| 576 message_loop_.RunUntilIdle(); | 561 message_loop_.RunUntilIdle(); |
| 577 | 562 |
| 578 scoped_refptr<net::IOBuffer> output_io_buffer; | 563 scoped_refptr<net::IOBuffer> output_io_buffer; |
| 579 size_t output_length; | 564 size_t output_length; |
| 580 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, | 565 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, |
| 581 byte_stream_output->Read(&output_io_buffer, &output_length)); | 566 byte_stream_output->Read(&output_io_buffer, &output_length)); |
| 582 | 567 |
| 583 byte_stream_input->Close(0); | 568 byte_stream_input->Close(0); |
| 584 message_loop_.RunUntilIdle(); | 569 message_loop_.RunUntilIdle(); |
| 585 | 570 |
| 586 EXPECT_EQ(ByteStreamReader::STREAM_COMPLETE, | 571 EXPECT_EQ(ByteStreamReader::STREAM_COMPLETE, |
| 587 byte_stream_output->Read(&output_io_buffer, &output_length)); | 572 byte_stream_output->Read(&output_io_buffer, &output_length)); |
| 588 } | 573 } |
| 589 | 574 |
| 590 TEST_F(ByteStreamTest, ByteStream_WriteOverflow) { | 575 TEST_F(ByteStreamTest, ByteStream_WriteOverflow) { |
| 591 scoped_ptr<ByteStreamWriter> byte_stream_input; | 576 scoped_ptr<ByteStreamWriter> byte_stream_input; |
| 592 scoped_ptr<ByteStreamReader> byte_stream_output; | 577 scoped_ptr<ByteStreamReader> byte_stream_output; |
| 593 CreateByteStream( | 578 CreateByteStream(message_loop_.task_runner(), message_loop_.task_runner(), |
| 594 message_loop_.message_loop_proxy(), message_loop_.message_loop_proxy(), | 579 std::numeric_limits<size_t>::max(), &byte_stream_input, |
| 595 std::numeric_limits<size_t>::max(), | 580 &byte_stream_output); |
| 596 &byte_stream_input, &byte_stream_output); | |
| 597 | 581 |
| 598 EXPECT_TRUE(Write(byte_stream_input.get(), 1)); | 582 EXPECT_TRUE(Write(byte_stream_input.get(), 1)); |
| 599 // 1 + size_t max -> Overflow. | 583 // 1 + size_t max -> Overflow. |
| 600 scoped_refptr<net::IOBuffer> empty_io_buffer; | 584 scoped_refptr<net::IOBuffer> empty_io_buffer; |
| 601 EXPECT_FALSE(byte_stream_input->Write(empty_io_buffer, | 585 EXPECT_FALSE(byte_stream_input->Write(empty_io_buffer, |
| 602 std::numeric_limits<size_t>::max())); | 586 std::numeric_limits<size_t>::max())); |
| 603 message_loop_.RunUntilIdle(); | 587 message_loop_.RunUntilIdle(); |
| 604 | 588 |
| 605 // The first write is below PostToPeer threshold. We shouldn't get anything | 589 // The first write is below PostToPeer threshold. We shouldn't get anything |
| 606 // from the output. | 590 // from the output. |
| 607 scoped_refptr<net::IOBuffer> output_io_buffer; | 591 scoped_refptr<net::IOBuffer> output_io_buffer; |
| 608 size_t output_length; | 592 size_t output_length; |
| 609 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, | 593 EXPECT_EQ(ByteStreamReader::STREAM_EMPTY, |
| 610 byte_stream_output->Read(&output_io_buffer, &output_length)); | 594 byte_stream_output->Read(&output_io_buffer, &output_length)); |
| 611 } | 595 } |
| 612 | 596 |
| 613 } // namespace content | 597 } // namespace content |
| OLD | NEW |