1 // Copyright 2015 The Weave Authors. All rights reserved. 2 // 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> 9 #include <weave/provider/task_runner.h> 10 11 namespace weave { 12 namespace test { 13 14 FakeStream::FakeStream(provider::TaskRunner* task_runner) 15 : task_runner_{task_runner} {} 16 FakeStream::FakeStream(provider::TaskRunner* task_runner, 17 const std::string& read_data) 18 : task_runner_{task_runner}, read_data_{read_data} {} 19 20 void FakeStream::CancelPendingOperations() {} 21 22 void FakeStream::ExpectWritePacketString(base::TimeDelta, 23 const std::string& data) { 24 write_data_ += data; 25 } 26 27 void FakeStream::AddReadPacketString(base::TimeDelta, const std::string& data) { 28 read_data_ += data; 29 } 30 31 void FakeStream::Read(void* buffer, 32 size_t size_to_read, 33 const ReadCallback& callback) { 34 if (read_data_.empty()) { 35 task_runner_->PostDelayedTask( 36 FROM_HERE, base::Bind(&FakeStream::Read, base::Unretained(this), buffer, 37 size_to_read, callback), 38 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); 44 task_runner_->PostDelayedTask(FROM_HERE, base::Bind(callback, size, nullptr), 45 base::TimeDelta::FromSeconds(0)); 46 } 47 48 void FakeStream::Write(const void* buffer, 49 size_t size_to_write, 50 const WriteCallback& callback) { 51 size_t size = std::min(size_to_write, write_data_.size()); 52 EXPECT_EQ(write_data_.substr(0, size), 53 std::string(reinterpret_cast<const char*>(buffer), size_to_write)); 54 write_data_ = write_data_.substr(size); 55 task_runner_->PostDelayedTask(FROM_HERE, base::Bind(callback, nullptr), 56 base::TimeDelta::FromSeconds(0)); 57 } 58 59 } // namespace test 60 } // namespace weave 61