blob: 110177998d76a6035ea424559c4126f90a54798d [file] [log] [blame]
Vitaly Buka4615e0d2015-10-14 15:35:12 -07001// Copyright 2015 The Weave Authors. All rights reserved.
Alex Vakulenko5a7a7da2015-09-25 16:10:23 -07002// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include <weave/test/fake_stream.h>
6
7#include <base/bind.h>
8#include <gtest/gtest.h>
Vitaly Buka1e363672015-09-25 14:01:16 -07009#include <weave/provider/task_runner.h>
Alex Vakulenko5a7a7da2015-09-25 16:10:23 -070010
11namespace weave {
12namespace test {
13
Vitaly Buka1e363672015-09-25 14:01:16 -070014FakeStream::FakeStream(provider::TaskRunner* task_runner)
15 : task_runner_{task_runner} {}
16FakeStream::FakeStream(provider::TaskRunner* task_runner,
17 const std::string& read_data)
Alex Vakulenko5a7a7da2015-09-25 16:10:23 -070018 : task_runner_{task_runner}, read_data_{read_data} {}
19
20void FakeStream::CancelPendingOperations() {}
21
22void FakeStream::ExpectWritePacketString(base::TimeDelta,
23 const std::string& data) {
24 write_data_ += data;
25}
26
27void FakeStream::AddReadPacketString(base::TimeDelta, const std::string& data) {
28 read_data_ += data;
29}
30
31void FakeStream::Read(void* buffer,
32 size_t size_to_read,
Vitaly Buka74763422015-10-11 00:39:52 -070033 const ReadCallback& callback) {
Alex Vakulenko5a7a7da2015-09-25 16:10:23 -070034 if (read_data_.empty()) {
35 task_runner_->PostDelayedTask(
Vitaly Buka74763422015-10-11 00:39:52 -070036 FROM_HERE, base::Bind(&FakeStream::Read, base::Unretained(this), buffer,
37 size_to_read, callback),
Alex Vakulenko5a7a7da2015-09-25 16:10:23 -070038 base::TimeDelta::FromSeconds(0));
39 return;
40 }
41 size_t size = std::min(size_to_read, read_data_.size());
42 memcpy(buffer, read_data_.data(), size);
43 read_data_ = read_data_.substr(size);
Vitaly Buka74763422015-10-11 00:39:52 -070044 task_runner_->PostDelayedTask(FROM_HERE, base::Bind(callback, size, nullptr),
Alex Vakulenko5a7a7da2015-09-25 16:10:23 -070045 base::TimeDelta::FromSeconds(0));
46}
47
48void FakeStream::Write(const void* buffer,
49 size_t size_to_write,
Vitaly Buka74763422015-10-11 00:39:52 -070050 const WriteCallback& callback) {
Alex Vakulenko5a7a7da2015-09-25 16:10:23 -070051 size_t size = std::min(size_to_write, write_data_.size());
52 EXPECT_EQ(
53 write_data_.substr(0, size),
54 std::string(reinterpret_cast<const char*>(buffer), size_to_write));
55 write_data_ = write_data_.substr(size);
Vitaly Buka74763422015-10-11 00:39:52 -070056 task_runner_->PostDelayedTask(FROM_HERE, base::Bind(callback, nullptr),
Alex Vakulenko5a7a7da2015-09-25 16:10:23 -070057 base::TimeDelta::FromSeconds(0));
58}
59
60} // namespace test
61} // namespace weave