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