// 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
