| // 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( | 
 |       [&test_data, &done, &destination](size_t size, ErrorPtr error) { | 
 |         EXPECT_FALSE(error); | 
 |         done = true; | 
 |         EXPECT_EQ(test_data, destination.GetData()); | 
 |       }); | 
 |   StreamCopier copier{&source, &destination}; | 
 |   copier.Copy(callback); | 
 |  | 
 |   task_runner.Run(test_data.size()); | 
 |   EXPECT_TRUE(done); | 
 | } | 
 |  | 
 | }  // namespace weave |