Extract FakeStream into a separate file
This can be used in unit tests elsewhere outside of XMPP channel.
Change-Id: Id54cede355e4c07fe5bb39ab13c99f866ebd0057
Reviewed-on: https://weave-review.googlesource.com/1172
Reviewed-by: Vitaly Buka <vitalybuka@google.com>
diff --git a/libweave/Android.mk b/libweave/Android.mk
index 215e13f..ac1185d 100644
--- a/libweave/Android.mk
+++ b/libweave/Android.mk
@@ -147,6 +147,7 @@
LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include
LOCAL_SRC_FILES := \
+ src/test/fake_stream.cc \
src/test/mock_command.cc \
src/test/mock_http_client.cc \
src/test/mock_task_runner.cc \
diff --git a/libweave/include/weave/test/fake_stream.h b/libweave/include/weave/test/fake_stream.h
new file mode 100644
index 0000000..3c21571
--- /dev/null
+++ b/libweave/include/weave/test/fake_stream.h
@@ -0,0 +1,48 @@
+// Copyright 2015 The Chromium OS Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef LIBWEAVE_INCLUDE_WEAVE_TEST_FAKE_STREAM_H_
+#define LIBWEAVE_INCLUDE_WEAVE_TEST_FAKE_STREAM_H_
+
+#include <weave/stream.h>
+
+#include <string>
+
+#include <base/time/time.h>
+#include <gmock/gmock.h>
+
+namespace weave {
+
+class TaskRunner;
+
+namespace test {
+
+class FakeStream : public Stream {
+ public:
+ explicit FakeStream(TaskRunner* task_runner);
+ FakeStream(TaskRunner* task_runner, const std::string& read_data);
+
+ void ExpectWritePacketString(base::TimeDelta, const std::string& data);
+ void AddReadPacketString(base::TimeDelta, const std::string& data);
+
+ void CancelPendingOperations() override;
+ void Read(void* buffer,
+ size_t size_to_read,
+ const ReadSuccessCallback& success_callback,
+ const ErrorCallback& error_callback) override;
+ void Write(const void* buffer,
+ size_t size_to_write,
+ const SuccessCallback& success_callback,
+ const ErrorCallback& error_callback) override;
+
+ private:
+ TaskRunner* task_runner_{nullptr};
+ std::string write_data_;
+ std::string read_data_;
+};
+
+} // namespace test
+} // namespace weave
+
+#endif // LIBWEAVE_INCLUDE_WEAVE_TEST_FAKE_STREAM_H_
diff --git a/libweave/libweave.gypi b/libweave/libweave.gypi
index 3eb64f3..544e127 100644
--- a/libweave/libweave.gypi
+++ b/libweave/libweave.gypi
@@ -53,6 +53,7 @@
'third_party/modp_b64/modp_b64.cc',
],
'weave_test_sources': [
+ 'src/test/fake_stream.cc',
'src/test/mock_command.cc',
'src/test/mock_http_client.cc',
'src/test/mock_task_runner.cc',
diff --git a/libweave/src/notification/xmpp_channel_unittest.cc b/libweave/src/notification/xmpp_channel_unittest.cc
index da555e0..a6992e9 100644
--- a/libweave/src/notification/xmpp_channel_unittest.cc
+++ b/libweave/src/notification/xmpp_channel_unittest.cc
@@ -8,6 +8,7 @@
#include <queue>
#include <gtest/gtest.h>
+#include <weave/test/fake_stream.h>
#include <weave/test/mock_network_provider.h>
#include <weave/test/mock_task_runner.h>
@@ -79,64 +80,12 @@
} // namespace
-class FakeStream : public Stream {
- public:
- explicit FakeStream(TaskRunner* task_runner) : task_runner_{task_runner} {}
-
- void CancelPendingOperations() override {}
-
- void ExpectWritePacketString(base::TimeDelta, const std::string& data) {
- write_data_ += data;
- }
-
- void AddReadPacketString(base::TimeDelta, const std::string& data) {
- read_data_ += data;
- }
-
- void Read(void* buffer,
- size_t size_to_read,
- const ReadSuccessCallback& success_callback,
- const ErrorCallback& error_callback) override {
- if (read_data_.empty()) {
- task_runner_->PostDelayedTask(
- FROM_HERE,
- base::Bind(&FakeStream::Read, base::Unretained(this), buffer,
- size_to_read, success_callback, error_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(success_callback, size),
- base::TimeDelta::FromSeconds(0));
- }
-
- void Write(const void* buffer,
- size_t size_to_write,
- const SuccessCallback& success_callback,
- const ErrorCallback& error_callback) override {
- 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, success_callback,
- base::TimeDelta::FromSeconds(0));
- }
-
- private:
- TaskRunner* task_runner_{nullptr};
- std::string write_data_;
- std::string read_data_;
-};
-
class FakeXmppChannel : public XmppChannel {
public:
explicit FakeXmppChannel(TaskRunner* task_runner,
weave::NetworkProvider* network)
: XmppChannel{kAccountName, kAccessToken, task_runner, network},
- stream_{new FakeStream{task_runner_}},
+ stream_{new test::FakeStream{task_runner_}},
fake_stream_{stream_.get()} {}
void Connect(
@@ -158,8 +107,8 @@
fake_stream_->AddReadPacketString(delta, data);
}
- std::unique_ptr<FakeStream> stream_;
- FakeStream* fake_stream_{nullptr};
+ std::unique_ptr<test::FakeStream> stream_;
+ test::FakeStream* fake_stream_{nullptr};
};
class MockNetworkProvider : public weave::test::MockNetworkProvider {
diff --git a/libweave/src/test/fake_stream.cc b/libweave/src/test/fake_stream.cc
new file mode 100644
index 0000000..5adf462
--- /dev/null
+++ b/libweave/src/test/fake_stream.cc
@@ -0,0 +1,62 @@
+// Copyright 2015 The Chromium OS 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/task_runner.h>
+
+namespace weave {
+namespace test {
+
+FakeStream::FakeStream(TaskRunner* task_runner) : task_runner_{task_runner} {}
+FakeStream::FakeStream(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 ReadSuccessCallback& success_callback,
+ const ErrorCallback& error_callback) {
+ if (read_data_.empty()) {
+ task_runner_->PostDelayedTask(
+ FROM_HERE,
+ base::Bind(&FakeStream::Read, base::Unretained(this), buffer,
+ size_to_read, success_callback, error_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(success_callback, size),
+ base::TimeDelta::FromSeconds(0));
+}
+
+void FakeStream::Write(const void* buffer,
+ size_t size_to_write,
+ const SuccessCallback& success_callback,
+ const ErrorCallback& error_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, success_callback,
+ base::TimeDelta::FromSeconds(0));
+}
+
+} // namespace test
+} // namespace weave