| // 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 "src/streams.h" |
| |
| #include <functional> |
| |
| #include <gmock/gmock.h> |
| #include <gtest/gtest.h> |
| #include <weave/provider/test/fake_task_runner.h> |
| |
| #include <src/bind_lambda.h> |
| |
| namespace weave { |
| |
| TEST(Stream, CopyStreams) { |
| provider::test::FakeTaskRunner task_runner; |
| std::vector<uint8_t> test_data(1024 * 1024); |
| for (size_t i = 0; i < test_data.size(); ++i) |
| test_data[i] = static_cast<uint8_t>(std::hash<size_t>()(i)); |
| MemoryStream source{test_data, &task_runner}; |
| MemoryStream destination{{}, &task_runner}; |
| |
| bool done = false; |
| |
| auto callback = base::Bind( |
| [](std::vector<uint8_t>* test_data, bool* done, MemoryStream* destination, |
| size_t size, ErrorPtr error) { |
| EXPECT_FALSE(error); |
| *done = true; |
| EXPECT_EQ(*test_data, destination->GetData()); |
| }, |
| base::Unretained(&test_data), base::Unretained(&done), |
| base::Unretained(&destination)); |
| StreamCopier copier{&source, &destination}; |
| copier.Copy(callback); |
| |
| task_runner.Run(test_data.size()); |
| EXPECT_TRUE(done); |
| } |
| |
| } // namespace weave |