14615e0d5aa416ab1a8596bde68f71f7ebe431b86Vitaly Buka// Copyright 2015 The Weave Authors. All rights reserved.
2ff32458cae9b985de38c7da009783fd02b8b7cc2Vitaly Buka// Use of this source code is governed by a BSD-style license that can be
3ff32458cae9b985de38c7da009783fd02b8b7cc2Vitaly Buka// found in the LICENSE file.
4ff32458cae9b985de38c7da009783fd02b8b7cc2Vitaly Buka
5ff32458cae9b985de38c7da009783fd02b8b7cc2Vitaly Buka#include "src/streams.h"
6ff32458cae9b985de38c7da009783fd02b8b7cc2Vitaly Buka
7ff32458cae9b985de38c7da009783fd02b8b7cc2Vitaly Buka#include <functional>
834668e731bb194b443bc0e6029d6d3583f08de28Vitaly Buka
9ff32458cae9b985de38c7da009783fd02b8b7cc2Vitaly Buka#include <gmock/gmock.h>
10ff32458cae9b985de38c7da009783fd02b8b7cc2Vitaly Buka#include <gtest/gtest.h>
11ff32458cae9b985de38c7da009783fd02b8b7cc2Vitaly Buka#include <weave/provider/test/fake_task_runner.h>
12ff32458cae9b985de38c7da009783fd02b8b7cc2Vitaly Buka
13ff32458cae9b985de38c7da009783fd02b8b7cc2Vitaly Buka#include <src/bind_lambda.h>
14ff32458cae9b985de38c7da009783fd02b8b7cc2Vitaly Buka
15ff32458cae9b985de38c7da009783fd02b8b7cc2Vitaly Bukanamespace weave {
16ff32458cae9b985de38c7da009783fd02b8b7cc2Vitaly Buka
17ff32458cae9b985de38c7da009783fd02b8b7cc2Vitaly BukaTEST(Stream, CopyStreams) {
18ff32458cae9b985de38c7da009783fd02b8b7cc2Vitaly Buka  provider::test::FakeTaskRunner task_runner;
19ff32458cae9b985de38c7da009783fd02b8b7cc2Vitaly Buka  std::vector<uint8_t> test_data(1024 * 1024);
20ff32458cae9b985de38c7da009783fd02b8b7cc2Vitaly Buka  for (size_t i = 0; i < test_data.size(); ++i)
21ff32458cae9b985de38c7da009783fd02b8b7cc2Vitaly Buka    test_data[i] = static_cast<uint8_t>(std::hash<size_t>()(i));
22ff32458cae9b985de38c7da009783fd02b8b7cc2Vitaly Buka  MemoryStream source{test_data, &task_runner};
23ff32458cae9b985de38c7da009783fd02b8b7cc2Vitaly Buka  MemoryStream destination{{}, &task_runner};
24ff32458cae9b985de38c7da009783fd02b8b7cc2Vitaly Buka
25ff32458cae9b985de38c7da009783fd02b8b7cc2Vitaly Buka  bool done = false;
26ff32458cae9b985de38c7da009783fd02b8b7cc2Vitaly Buka
27747634273144e0df7b37475375ad4790b6a7b0e8Vitaly Buka  auto callback = base::Bind(
28747634273144e0df7b37475375ad4790b6a7b0e8Vitaly Buka      [&test_data, &done, &destination](size_t size, ErrorPtr error) {
29747634273144e0df7b37475375ad4790b6a7b0e8Vitaly Buka        EXPECT_FALSE(error);
30747634273144e0df7b37475375ad4790b6a7b0e8Vitaly Buka        done = true;
31747634273144e0df7b37475375ad4790b6a7b0e8Vitaly Buka        EXPECT_EQ(test_data, destination.GetData());
32747634273144e0df7b37475375ad4790b6a7b0e8Vitaly Buka      });
33ff32458cae9b985de38c7da009783fd02b8b7cc2Vitaly Buka  StreamCopier copier{&source, &destination};
34747634273144e0df7b37475375ad4790b6a7b0e8Vitaly Buka  copier.Copy(callback);
35ff32458cae9b985de38c7da009783fd02b8b7cc2Vitaly Buka
36ff32458cae9b985de38c7da009783fd02b8b7cc2Vitaly Buka  task_runner.Run(test_data.size());
37ff32458cae9b985de38c7da009783fd02b8b7cc2Vitaly Buka  EXPECT_TRUE(done);
38ff32458cae9b985de38c7da009783fd02b8b7cc2Vitaly Buka}
39ff32458cae9b985de38c7da009783fd02b8b7cc2Vitaly Buka
40ff32458cae9b985de38c7da009783fd02b8b7cc2Vitaly Buka}  // namespace weave
41