Avi Drissman | 69b874f | 2022-09-15 19:11:14 | [diff] [blame^] | 1 | // Copyright 2017 The Chromium Authors |
Marijn Kruisselbrink | 2d263e6 | 2017-07-17 23:58:00 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | #include "storage/browser/test/mock_bytes_provider.h" |
| 6 | |
Francois Doray | 2ab2d8b4 | 2017-10-10 19:35:45 | [diff] [blame] | 7 | #include "base/threading/thread_restrictions.h" |
Oksana Zhuravlova | 10e8983 | 2018-03-30 21:49:14 | [diff] [blame] | 8 | #include "mojo/public/cpp/system/data_pipe_utils.h" |
Marijn Kruisselbrink | 2d263e6 | 2017-07-17 23:58:00 | [diff] [blame] | 9 | #include "testing/gtest/include/gtest/gtest.h" |
| 10 | |
| 11 | namespace storage { |
| 12 | |
| 13 | MockBytesProvider::MockBytesProvider( |
| 14 | std::vector<uint8_t> data, |
| 15 | size_t* reply_request_count, |
| 16 | size_t* stream_request_count, |
| 17 | size_t* file_request_count, |
Anton Bikineev | 3ac3d30 | 2021-05-15 17:54:01 | [diff] [blame] | 18 | absl::optional<base::Time> file_modification_time) |
Marijn Kruisselbrink | 2d263e6 | 2017-07-17 23:58:00 | [diff] [blame] | 19 | : data_(std::move(data)), |
| 20 | reply_request_count_(reply_request_count), |
| 21 | stream_request_count_(stream_request_count), |
| 22 | file_request_count_(file_request_count), |
| 23 | file_modification_time_(file_modification_time) {} |
| 24 | |
Chris Watkins | fb9a3733 | 2017-11-28 04:15:29 | [diff] [blame] | 25 | MockBytesProvider::~MockBytesProvider() = default; |
Marijn Kruisselbrink | 2d263e6 | 2017-07-17 23:58:00 | [diff] [blame] | 26 | |
| 27 | void MockBytesProvider::RequestAsReply(RequestAsReplyCallback callback) { |
| 28 | if (reply_request_count_) |
| 29 | ++*reply_request_count_; |
| 30 | std::move(callback).Run(data_); |
| 31 | } |
| 32 | |
| 33 | void MockBytesProvider::RequestAsStream( |
| 34 | mojo::ScopedDataPipeProducerHandle pipe) { |
| 35 | if (stream_request_count_) |
| 36 | ++*stream_request_count_; |
Francois Doray | 2ab2d8b4 | 2017-10-10 19:35:45 | [diff] [blame] | 37 | base::ScopedAllowBaseSyncPrimitivesForTesting allow_base_sync_primitives; |
Oksana Zhuravlova | 10e8983 | 2018-03-30 21:49:14 | [diff] [blame] | 38 | mojo::BlockingCopyFromString( |
Marijn Kruisselbrink | 2d263e6 | 2017-07-17 23:58:00 | [diff] [blame] | 39 | std::string(reinterpret_cast<const char*>(data_.data()), data_.size()), |
| 40 | pipe); |
| 41 | } |
| 42 | |
| 43 | void MockBytesProvider::RequestAsFile(uint64_t source_offset, |
| 44 | uint64_t source_size, |
| 45 | base::File file, |
| 46 | uint64_t file_offset, |
| 47 | RequestAsFileCallback callback) { |
| 48 | if (file_request_count_) |
| 49 | ++*file_request_count_; |
| 50 | EXPECT_LE(source_offset + source_size, data_.size()); |
| 51 | EXPECT_EQ(source_size, |
| 52 | static_cast<uint64_t>(file.Write( |
| 53 | file_offset, |
| 54 | reinterpret_cast<const char*>(data_.data() + source_offset), |
| 55 | source_size))); |
| 56 | EXPECT_TRUE(file.Flush()); |
| 57 | std::move(callback).Run(file_modification_time_); |
| 58 | } |
| 59 | |
| 60 | } // namespace storage |