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