// 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