| // Copyright 2015 The Weave Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include <weave/test/fake_stream.h> |
| |
| #include <base/bind.h> |
| #include <gtest/gtest.h> |
| #include <weave/provider/task_runner.h> |
| |
| namespace weave { |
| namespace test { |
| |
| FakeStream::FakeStream(provider::TaskRunner* task_runner) |
| : task_runner_{task_runner} {} |
| FakeStream::FakeStream(provider::TaskRunner* task_runner, |
| const std::string& read_data) |
| : task_runner_{task_runner}, read_data_{read_data} {} |
| |
| void FakeStream::CancelPendingOperations() {} |
| |
| void FakeStream::ExpectWritePacketString(base::TimeDelta, |
| const std::string& data) { |
| write_data_ += data; |
| } |
| |
| void FakeStream::AddReadPacketString(base::TimeDelta, const std::string& data) { |
| read_data_ += data; |
| } |
| |
| void FakeStream::Read(void* buffer, |
| size_t size_to_read, |
| const ReadCallback& callback) { |
| if (read_data_.empty()) { |
| task_runner_->PostDelayedTask( |
| FROM_HERE, base::Bind(&FakeStream::Read, base::Unretained(this), buffer, |
| size_to_read, callback), |
| base::TimeDelta::FromSeconds(0)); |
| return; |
| } |
| size_t size = std::min(size_to_read, read_data_.size()); |
| memcpy(buffer, read_data_.data(), size); |
| read_data_ = read_data_.substr(size); |
| task_runner_->PostDelayedTask(FROM_HERE, base::Bind(callback, size, nullptr), |
| base::TimeDelta::FromSeconds(0)); |
| } |
| |
| void FakeStream::Write(const void* buffer, |
| size_t size_to_write, |
| const WriteCallback& callback) { |
| size_t size = std::min(size_to_write, write_data_.size()); |
| EXPECT_EQ(write_data_.substr(0, size), |
| std::string(reinterpret_cast<const char*>(buffer), size_to_write)); |
| write_data_ = write_data_.substr(size); |
| task_runner_->PostDelayedTask(FROM_HERE, base::Bind(callback, nullptr), |
| base::TimeDelta::FromSeconds(0)); |
| } |
| |
| } // namespace test |
| } // namespace weave |