| Index: media/base/seekable_buffer_unittest.cc
|
| ===================================================================
|
| --- media/base/seekable_buffer_unittest.cc (revision 17048)
|
| +++ media/base/seekable_buffer_unittest.cc (working copy)
|
| @@ -11,7 +11,15 @@
|
| namespace {
|
|
|
| class SeekableBufferTest : public testing::Test {
|
| + public:
|
| + SeekableBufferTest() : buffer_(kBufferSize, kBufferSize) {
|
| + }
|
| +
|
| protected:
|
| + static const size_t kDataSize = 409600;
|
| + static const size_t kBufferSize = 4096;
|
| + static const size_t kWriteSize = 512;
|
| +
|
| virtual void SetUp() {
|
| // Setup seed.
|
| size_t seed = static_cast<int32>(base::Time::Now().ToInternalValue());
|
| @@ -19,26 +27,17 @@
|
| LOG(INFO) << "Random seed: " << seed;
|
|
|
| // Creates a test data.
|
| - data_.reset(new uint8[kDataSize]);
|
| for (size_t i = 0; i < kDataSize; i++)
|
| - data_.get()[i] = static_cast<char>(rand());
|
| -
|
| - // Creates a temp buffer.
|
| - write_buffer_.reset(new uint8[kDataSize]);
|
| -
|
| - // Setup |buffer_|.
|
| - buffer_.reset(new media::SeekableBuffer(kBufferSize, kBufferSize));
|
| + data_[i] = static_cast<char>(rand());
|
| }
|
|
|
| size_t GetRandomInt(size_t maximum) {
|
| return rand() % maximum + 1;
|
| }
|
|
|
| - static const size_t kDataSize = 409600;
|
| - static const size_t kBufferSize = 4096;
|
| - scoped_ptr<media::SeekableBuffer> buffer_;
|
| - scoped_array<uint8> data_;
|
| - scoped_array<uint8> write_buffer_;
|
| + media::SeekableBuffer buffer_;
|
| + uint8 data_[kDataSize];
|
| + uint8 write_buffer_[kDataSize];
|
| };
|
|
|
| TEST_F(SeekableBufferTest, RandomReadWrite) {
|
| @@ -48,186 +47,156 @@
|
| // Write a random amount of data.
|
| size_t write_size = GetRandomInt(kBufferSize);
|
| write_size = std::min(write_size, kDataSize - write_position);
|
| - bool should_append =
|
| - buffer_->Append(write_size, data_.get() + write_position);
|
| + bool should_append = buffer_.Append(write_size, data_ + write_position);
|
| write_position += write_size;
|
| EXPECT_GE(write_position, read_position);
|
| - EXPECT_EQ(write_position - read_position, buffer_->forward_bytes());
|
| - EXPECT_EQ(should_append, buffer_->forward_bytes() < kBufferSize)
|
| - << "Incorrect buffer full reported";
|
| + EXPECT_EQ(write_position - read_position, buffer_.forward_bytes());
|
| + EXPECT_EQ(should_append, buffer_.forward_bytes() < kBufferSize)
|
| + << "Incorrect buffer full reported";
|
|
|
| // Read a random amount of data.
|
| size_t read_size = GetRandomInt(kBufferSize);
|
| - size_t bytes_read = buffer_->Read(read_size, write_buffer_.get());
|
| + size_t bytes_read = buffer_.Read(read_size, write_buffer_);
|
| EXPECT_GE(read_size, bytes_read);
|
| - EXPECT_EQ(0, memcmp(write_buffer_.get(),
|
| - data_.get() + read_position,
|
| - bytes_read));
|
| + EXPECT_EQ(0, memcmp(write_buffer_, data_ + read_position, bytes_read));
|
| read_position += bytes_read;
|
| EXPECT_GE(write_position, read_position);
|
| - EXPECT_EQ(write_position - read_position, buffer_->forward_bytes());
|
| + EXPECT_EQ(write_position - read_position, buffer_.forward_bytes());
|
| }
|
| }
|
|
|
| TEST_F(SeekableBufferTest, ReadWriteSeek) {
|
| - const size_t kWriteSize = 512;
|
| const size_t kReadSize = kWriteSize / 4;
|
|
|
| - size_t write_position = 0;
|
| - size_t read_position = 0;
|
| - size_t forward_bytes = 0;
|
| for (int i = 0; i < 10; ++i) {
|
| // Write until buffer is full.
|
| - for (int j = kBufferSize / kWriteSize; j > 0; --j) {
|
| - bool should_append =
|
| - buffer_->Append(kWriteSize, data_.get() + write_position);
|
| - EXPECT_EQ(j > 1, should_append) << "Incorrect buffer full reported";
|
| - write_position += kWriteSize;
|
| - forward_bytes += kWriteSize;
|
| - EXPECT_EQ(forward_bytes, buffer_->forward_bytes());
|
| + for (size_t j = 0; j < kBufferSize; j += kWriteSize) {
|
| + bool should_append = buffer_.Append(kWriteSize, data_ + j);
|
| + EXPECT_EQ(j < kBufferSize - kWriteSize, should_append)
|
| + << "Incorrect buffer full reported";
|
| + EXPECT_EQ(j + kWriteSize, buffer_.forward_bytes());
|
| }
|
|
|
| // Simulate a read and seek pattern. Each loop reads 4 times, each time
|
| // reading a quarter of |kWriteSize|.
|
| - for (size_t j = 0; j < kBufferSize / kWriteSize; ++j) {
|
| + size_t read_position = 0;
|
| + size_t forward_bytes = kBufferSize;
|
| + for (size_t j = 0; j < kBufferSize; j += kWriteSize) {
|
| // Read.
|
| - EXPECT_EQ(kReadSize, buffer_->Read(kReadSize, write_buffer_.get()));
|
| + EXPECT_EQ(kReadSize, buffer_.Read(kReadSize, write_buffer_));
|
| forward_bytes -= kReadSize;
|
| - EXPECT_EQ(forward_bytes, buffer_->forward_bytes());
|
| - EXPECT_EQ(0, memcmp(write_buffer_.get(),
|
| - data_.get() + read_position,
|
| - kReadSize));
|
| + EXPECT_EQ(forward_bytes, buffer_.forward_bytes());
|
| + EXPECT_EQ(0, memcmp(write_buffer_, data_ + read_position, kReadSize));
|
| read_position += kReadSize;
|
|
|
| // Seek forward.
|
| - EXPECT_TRUE(buffer_->Seek(2 * kReadSize));
|
| + EXPECT_TRUE(buffer_.Seek(2 * kReadSize));
|
| forward_bytes -= 2 * kReadSize;
|
| read_position += 2 * kReadSize;
|
| - EXPECT_EQ(forward_bytes, buffer_->forward_bytes());
|
| + EXPECT_EQ(forward_bytes, buffer_.forward_bytes());
|
|
|
| // Read.
|
| - EXPECT_EQ(kReadSize, buffer_->Read(kReadSize, write_buffer_.get()));
|
| + EXPECT_EQ(kReadSize, buffer_.Read(kReadSize, write_buffer_));
|
| forward_bytes -= kReadSize;
|
| - EXPECT_EQ(forward_bytes, buffer_->forward_bytes());
|
| - EXPECT_EQ(0, memcmp(write_buffer_.get(),
|
| - data_.get() + read_position,
|
| - kReadSize));
|
| + EXPECT_EQ(forward_bytes, buffer_.forward_bytes());
|
| + EXPECT_EQ(0, memcmp(write_buffer_, data_ + read_position, kReadSize));
|
| read_position += kReadSize;
|
|
|
| // Seek backward.
|
| - EXPECT_TRUE(buffer_->Seek(-3 * static_cast<int32>(kReadSize)));
|
| + EXPECT_TRUE(buffer_.Seek(-3 * static_cast<int32>(kReadSize)));
|
| forward_bytes += 3 * kReadSize;
|
| read_position -= 3 * kReadSize;
|
| - EXPECT_EQ(forward_bytes, buffer_->forward_bytes());
|
| + EXPECT_EQ(forward_bytes, buffer_.forward_bytes());
|
|
|
| // Read.
|
| - EXPECT_EQ(kReadSize, buffer_->Read(kReadSize, write_buffer_.get()));
|
| + EXPECT_EQ(kReadSize, buffer_.Read(kReadSize, write_buffer_));
|
| forward_bytes -= kReadSize;
|
| - EXPECT_EQ(forward_bytes, buffer_->forward_bytes());
|
| - EXPECT_EQ(0, memcmp(write_buffer_.get(),
|
| - data_.get() + read_position,
|
| - kReadSize));
|
| + EXPECT_EQ(forward_bytes, buffer_.forward_bytes());
|
| + EXPECT_EQ(0, memcmp(write_buffer_, data_ + read_position, kReadSize));
|
| read_position += kReadSize;
|
|
|
| // Read.
|
| - EXPECT_EQ(kReadSize, buffer_->Read(kReadSize, write_buffer_.get()));
|
| + EXPECT_EQ(kReadSize, buffer_.Read(kReadSize, write_buffer_));
|
| forward_bytes -= kReadSize;
|
| - EXPECT_EQ(forward_bytes, buffer_->forward_bytes());
|
| - EXPECT_EQ(0, memcmp(write_buffer_.get(),
|
| - data_.get() + read_position,
|
| - kReadSize));
|
| + EXPECT_EQ(forward_bytes, buffer_.forward_bytes());
|
| + EXPECT_EQ(0, memcmp(write_buffer_, data_ + read_position, kReadSize));
|
| read_position += kReadSize;
|
|
|
| // Seek forward.
|
| - EXPECT_TRUE(buffer_->Seek(kReadSize));
|
| + EXPECT_TRUE(buffer_.Seek(kReadSize));
|
| forward_bytes -= kReadSize;
|
| read_position += kReadSize;
|
| - EXPECT_EQ(forward_bytes, buffer_->forward_bytes());
|
| + EXPECT_EQ(forward_bytes, buffer_.forward_bytes());
|
| }
|
| }
|
| }
|
|
|
| TEST_F(SeekableBufferTest, BufferFull) {
|
| - const size_t kWriteSize = 512;
|
| + const size_t kMaxWriteSize = 2 * kBufferSize;
|
|
|
| // Write and expect the buffer to be not full.
|
| - size_t write_position = 0;
|
| - for (size_t i = 0; i < kBufferSize / kWriteSize - 1; ++i) {
|
| - EXPECT_TRUE(buffer_->Append(kWriteSize, data_.get() + write_position));
|
| - write_position += kWriteSize;
|
| - EXPECT_EQ(write_position, buffer_->forward_bytes());
|
| + for (size_t i = 0; i < kBufferSize - kWriteSize; i += kWriteSize) {
|
| + EXPECT_TRUE(buffer_.Append(kWriteSize, data_ + i));
|
| + EXPECT_EQ(i + kWriteSize, buffer_.forward_bytes());
|
| }
|
|
|
| - // Write 10 more times, the buffer is full.
|
| - for (int i = 0; i < 10; ++i) {
|
| - EXPECT_FALSE(buffer_->Append(kWriteSize, data_.get() + write_position));
|
| - write_position += kWriteSize;
|
| - EXPECT_EQ(write_position, buffer_->forward_bytes());
|
| + // Write until we have kMaxWriteSize bytes in the buffer. Buffer is full in
|
| + // these writes.
|
| + for (size_t i = buffer_.forward_bytes(); i < kMaxWriteSize; i += kWriteSize) {
|
| + EXPECT_FALSE(buffer_.Append(kWriteSize, data_ + i));
|
| + EXPECT_EQ(i + kWriteSize, buffer_.forward_bytes());
|
| }
|
|
|
| // Read until the buffer is empty.
|
| size_t read_position = 0;
|
| - while (buffer_->forward_bytes()) {
|
| + while (buffer_.forward_bytes()) {
|
| // Read a random amount of data.
|
| size_t read_size = GetRandomInt(kBufferSize);
|
| - size_t forward_bytes = buffer_->forward_bytes();
|
| - size_t bytes_read = buffer_->Read(read_size, write_buffer_.get());
|
| - EXPECT_EQ(0, memcmp(write_buffer_.get(),
|
| - data_.get() + read_position,
|
| - bytes_read));
|
| + size_t forward_bytes = buffer_.forward_bytes();
|
| + size_t bytes_read = buffer_.Read(read_size, write_buffer_);
|
| + EXPECT_EQ(0, memcmp(write_buffer_, data_ + read_position, bytes_read));
|
| if (read_size > forward_bytes)
|
| EXPECT_EQ(forward_bytes, bytes_read);
|
| else
|
| EXPECT_EQ(read_size, bytes_read);
|
| read_position += bytes_read;
|
| - EXPECT_GE(write_position, read_position);
|
| - EXPECT_EQ(write_position - read_position, buffer_->forward_bytes());
|
| + EXPECT_GE(kMaxWriteSize, read_position);
|
| + EXPECT_EQ(kMaxWriteSize - read_position, buffer_.forward_bytes());
|
| }
|
|
|
| - // Expect we have no bytes left.
|
| - EXPECT_EQ(0u, buffer_->forward_bytes());
|
| - EXPECT_EQ(0u, buffer_->Read(1, write_buffer_.get()));
|
| + // Expects we have no bytes left.
|
| + EXPECT_EQ(0u, buffer_.forward_bytes());
|
| + EXPECT_EQ(0u, buffer_.Read(1, write_buffer_));
|
| }
|
|
|
| TEST_F(SeekableBufferTest, SeekBackward) {
|
| - EXPECT_EQ(0u, buffer_->forward_bytes());
|
| - EXPECT_EQ(0u, buffer_->backward_bytes());
|
| - EXPECT_FALSE(buffer_->Seek(1));
|
| - EXPECT_FALSE(buffer_->Seek(-1));
|
| + EXPECT_EQ(0u, buffer_.forward_bytes());
|
| + EXPECT_EQ(0u, buffer_.backward_bytes());
|
| + EXPECT_FALSE(buffer_.Seek(1));
|
| + EXPECT_FALSE(buffer_.Seek(-1));
|
|
|
| - const size_t kWriteSize = 512;
|
| const size_t kReadSize = 256;
|
|
|
| // Write into buffer until it's full.
|
| - size_t write_position = 0;
|
| - for (size_t i = 0; i < kBufferSize / kWriteSize; ++i) {
|
| + for (size_t i = 0; i < kBufferSize; i += kWriteSize) {
|
| // Write a random amount of data.
|
| - buffer_->Append(kWriteSize, data_.get() + write_position);
|
| - write_position += kWriteSize;
|
| + buffer_.Append(kWriteSize, data_ + i);
|
| }
|
|
|
| // Read until buffer is empty.
|
| - size_t read_position = 0;
|
| - for (size_t i = 0; i < kBufferSize / kReadSize; ++i) {
|
| - EXPECT_EQ(kReadSize, buffer_->Read(kReadSize, write_buffer_.get()));
|
| - EXPECT_EQ(0, memcmp(write_buffer_.get(),
|
| - data_.get() + read_position,
|
| - kReadSize));
|
| - read_position += kReadSize;
|
| + for (size_t i = 0; i < kBufferSize; i += kReadSize) {
|
| + EXPECT_EQ(kReadSize, buffer_.Read(kReadSize, write_buffer_));
|
| + EXPECT_EQ(0, memcmp(write_buffer_, data_ + i, kReadSize));
|
| }
|
|
|
| // Seek backward.
|
| - EXPECT_TRUE(buffer_->Seek(-static_cast<int32>(kBufferSize)));
|
| - EXPECT_FALSE(buffer_->Seek(-1));
|
| + EXPECT_TRUE(buffer_.Seek(-static_cast<int32>(kBufferSize)));
|
| + EXPECT_FALSE(buffer_.Seek(-1));
|
|
|
| // Read again.
|
| - read_position = 0;
|
| - for (size_t i = 0; i < kBufferSize / kReadSize; ++i) {
|
| - EXPECT_EQ(kReadSize, buffer_->Read(kReadSize, write_buffer_.get()));
|
| - EXPECT_EQ(0, memcmp(write_buffer_.get(),
|
| - data_.get() + read_position,
|
| - kReadSize));
|
| - read_position += kReadSize;
|
| + for (size_t i = 0; i < kBufferSize; i += kReadSize) {
|
| + EXPECT_EQ(kReadSize, buffer_.Read(kReadSize, write_buffer_));
|
| + EXPECT_EQ(0, memcmp(write_buffer_, data_ + i, kReadSize));
|
| }
|
| }
|
|
|
| @@ -235,49 +204,45 @@
|
| size_t write_position = 0;
|
| size_t read_position = 0;
|
| while (read_position < kDataSize) {
|
| - for (int i = 0; i < 10; ++i) {
|
| + for (int i = 0; i < 10 && write_position < kDataSize; ++i) {
|
| // Write a random amount of data.
|
| size_t write_size = GetRandomInt(kBufferSize);
|
| write_size = std::min(write_size, kDataSize - write_position);
|
| - if (!write_size)
|
| - break;
|
| - bool should_append =
|
| - buffer_->Append(write_size, data_.get() + write_position);
|
| +
|
| + bool should_append = buffer_.Append(write_size, data_ + write_position);
|
| write_position += write_size;
|
| EXPECT_GE(write_position, read_position);
|
| - EXPECT_EQ(write_position - read_position, buffer_->forward_bytes());
|
| - EXPECT_EQ(should_append, buffer_->forward_bytes() < kBufferSize)
|
| - << "Incorrect buffer full status reported";
|
| + EXPECT_EQ(write_position - read_position, buffer_.forward_bytes());
|
| + EXPECT_EQ(should_append, buffer_.forward_bytes() < kBufferSize)
|
| + << "Incorrect buffer full status reported";
|
| }
|
|
|
| // Read a random amount of data.
|
| size_t seek_size = GetRandomInt(kBufferSize);
|
| - if (buffer_->Seek(seek_size))
|
| + if (buffer_.Seek(seek_size))
|
| read_position += seek_size;
|
| EXPECT_GE(write_position, read_position);
|
| - EXPECT_EQ(write_position - read_position, buffer_->forward_bytes());
|
| + EXPECT_EQ(write_position - read_position, buffer_.forward_bytes());
|
|
|
| // Read a random amount of data.
|
| size_t read_size = GetRandomInt(kBufferSize);
|
| - size_t bytes_read = buffer_->Read(read_size, write_buffer_.get());
|
| + size_t bytes_read = buffer_.Read(read_size, write_buffer_);
|
| EXPECT_GE(read_size, bytes_read);
|
| - EXPECT_EQ(0, memcmp(write_buffer_.get(),
|
| - data_.get() + read_position,
|
| - bytes_read));
|
| + EXPECT_EQ(0, memcmp(write_buffer_, data_ + read_position, bytes_read));
|
| read_position += bytes_read;
|
| EXPECT_GE(write_position, read_position);
|
| - EXPECT_EQ(write_position - read_position, buffer_->forward_bytes());
|
| + EXPECT_EQ(write_position - read_position, buffer_.forward_bytes());
|
| }
|
| }
|
|
|
| TEST_F(SeekableBufferTest, AllMethods) {
|
| - EXPECT_EQ(0u, buffer_->Read(0, write_buffer_.get()));
|
| - EXPECT_EQ(0u, buffer_->Read(1, write_buffer_.get()));
|
| - EXPECT_TRUE(buffer_->Seek(0));
|
| - EXPECT_FALSE(buffer_->Seek(-1));
|
| - EXPECT_FALSE(buffer_->Seek(1));
|
| - EXPECT_EQ(0u, buffer_->forward_bytes());
|
| - EXPECT_EQ(0u, buffer_->backward_bytes());
|
| + EXPECT_EQ(0u, buffer_.Read(0, write_buffer_));
|
| + EXPECT_EQ(0u, buffer_.Read(1, write_buffer_));
|
| + EXPECT_TRUE(buffer_.Seek(0));
|
| + EXPECT_FALSE(buffer_.Seek(-1));
|
| + EXPECT_FALSE(buffer_.Seek(1));
|
| + EXPECT_EQ(0u, buffer_.forward_bytes());
|
| + EXPECT_EQ(0u, buffer_.backward_bytes());
|
| }
|
|
|
| -}
|
| +} // namespace
|
|
|