blob: ba5386392261bf7b84639f8dc8ef6005e64aebeb [file] [log] [blame]
[email protected]fe57eb22012-02-09 05:59:401// Copyright (c) 2012 The Chromium Authors. All rights reserved.
[email protected]47a881b2011-08-29 22:59:212// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "net/base/mock_file_stream.h"
6
dchengc7eeda422015-12-26 03:56:487#include <utility>
8
[email protected]52c41b42014-03-14 17:56:489#include "base/bind.h"
skyostil4891b25b2015-06-11 11:43:4510#include "base/location.h"
Patrick Monette643cdf62021-10-15 19:13:4211#include "base/task/single_thread_task_runner.h"
gabf767595f2016-05-11 18:50:3512#include "base/threading/thread_task_runner_handle.h"
[email protected]52c41b42014-03-14 17:56:4813
Tsuyoshi Horo4f516be2022-06-14 11:53:1314namespace net::testing {
[email protected]47a881b2011-08-29 22:59:2115
[email protected]671e95fd2014-04-30 11:21:3616MockFileStream::MockFileStream(
17 const scoped_refptr<base::TaskRunner>& task_runner)
Tsuyoshi Horo432981d52022-06-09 09:50:1318 : FileStream(task_runner) {}
[email protected]52c41b42014-03-14 17:56:4819
20MockFileStream::MockFileStream(
[email protected]be6fb60b2014-04-03 18:33:5821 base::File file,
[email protected]52c41b42014-03-14 17:56:4822 const scoped_refptr<base::TaskRunner>& task_runner)
Tsuyoshi Horo432981d52022-06-09 09:50:1323 : FileStream(std::move(file), task_runner) {}
[email protected]52c41b42014-03-14 17:56:4824
Chris Watkins68b15032017-12-01 03:07:1325MockFileStream::~MockFileStream() = default;
[email protected]52c41b42014-03-14 17:56:4826
Matt Menkedadd6c72018-01-30 23:07:2527int MockFileStream::Seek(int64_t offset, Int64CompletionOnceCallback callback) {
28 Int64CompletionOnceCallback wrapped_callback =
29 base::BindOnce(&MockFileStream::DoCallback64, weak_factory_.GetWeakPtr(),
30 std::move(callback));
ttuttle859dc7a2015-04-23 19:42:2931 if (forced_error_ == OK)
Matt Menkedadd6c72018-01-30 23:07:2532 return FileStream::Seek(offset, std::move(wrapped_callback));
33 return ErrorCallback64(std::move(wrapped_callback));
[email protected]cf02541b2012-04-11 08:02:1734}
35
[email protected]9f49afb2012-02-16 09:59:2036int MockFileStream::Read(IOBuffer* buf,
[email protected]5eb431e22011-10-12 08:51:3837 int buf_len,
Matt Menkedadd6c72018-01-30 23:07:2538 CompletionOnceCallback callback) {
39 CompletionOnceCallback wrapped_callback =
40 base::BindOnce(&MockFileStream::DoCallback, weak_factory_.GetWeakPtr(),
41 std::move(callback));
ttuttle859dc7a2015-04-23 19:42:2942 if (forced_error_ == OK)
Matt Menkedadd6c72018-01-30 23:07:2543 return FileStream::Read(buf, buf_len, std::move(wrapped_callback));
44 return ErrorCallback(std::move(wrapped_callback));
[email protected]47a881b2011-08-29 22:59:2145}
46
[email protected]9f49afb2012-02-16 09:59:2047int MockFileStream::Write(IOBuffer* buf,
[email protected]5eb431e22011-10-12 08:51:3848 int buf_len,
Matt Menkedadd6c72018-01-30 23:07:2549 CompletionOnceCallback callback) {
50 CompletionOnceCallback wrapped_callback =
51 base::BindOnce(&MockFileStream::DoCallback, weak_factory_.GetWeakPtr(),
52 std::move(callback));
ttuttle859dc7a2015-04-23 19:42:2953 if (forced_error_ == OK)
Matt Menkedadd6c72018-01-30 23:07:2554 return FileStream::Write(buf, buf_len, std::move(wrapped_callback));
55 return ErrorCallback(std::move(wrapped_callback));
[email protected]47a881b2011-08-29 22:59:2156}
57
Matt Menkedadd6c72018-01-30 23:07:2558int MockFileStream::Flush(CompletionOnceCallback callback) {
59 CompletionOnceCallback wrapped_callback =
60 base::BindOnce(&MockFileStream::DoCallback, weak_factory_.GetWeakPtr(),
61 std::move(callback));
ttuttle859dc7a2015-04-23 19:42:2962 if (forced_error_ == OK)
Matt Menkedadd6c72018-01-30 23:07:2563 return FileStream::Flush(std::move(wrapped_callback));
64 return ErrorCallback(std::move(wrapped_callback));
[email protected]a95ce0762012-10-01 05:54:2665}
66
[email protected]52c41b42014-03-14 17:56:4867void MockFileStream::ThrottleCallbacks() {
68 CHECK(!throttled_);
69 throttled_ = true;
70}
71
72void MockFileStream::ReleaseCallbacks() {
73 CHECK(throttled_);
74 throttled_ = false;
75
76 if (!throttled_task_.is_null()) {
Matt Menkedadd6c72018-01-30 23:07:2577 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE,
78 std::move(throttled_task_));
[email protected]52c41b42014-03-14 17:56:4879 }
80}
81
Matt Menkedadd6c72018-01-30 23:07:2582void MockFileStream::DoCallback(CompletionOnceCallback callback, int result) {
[email protected]52c41b42014-03-14 17:56:4883 if (!throttled_) {
Matt Menkedadd6c72018-01-30 23:07:2584 std::move(callback).Run(result);
[email protected]52c41b42014-03-14 17:56:4885 return;
86 }
87 CHECK(throttled_task_.is_null());
Matt Menkedadd6c72018-01-30 23:07:2588 throttled_task_ = base::BindOnce(std::move(callback), result);
[email protected]52c41b42014-03-14 17:56:4889}
90
Matt Menkedadd6c72018-01-30 23:07:2591void MockFileStream::DoCallback64(Int64CompletionOnceCallback callback,
wtc69f8ea82015-06-04 00:08:1392 int64_t result) {
[email protected]52c41b42014-03-14 17:56:4893 if (!throttled_) {
Matt Menkedadd6c72018-01-30 23:07:2594 std::move(callback).Run(result);
[email protected]52c41b42014-03-14 17:56:4895 return;
96 }
97 CHECK(throttled_task_.is_null());
Matt Menkedadd6c72018-01-30 23:07:2598 throttled_task_ = base::BindOnce(std::move(callback), result);
[email protected]52c41b42014-03-14 17:56:4899}
100
Matt Menkedadd6c72018-01-30 23:07:25101int MockFileStream::ErrorCallback(CompletionOnceCallback callback) {
ttuttle859dc7a2015-04-23 19:42:29102 CHECK_NE(OK, forced_error_);
[email protected]52c41b42014-03-14 17:56:48103 if (async_error_) {
skyostil4891b25b2015-06-11 11:43:45104 base::ThreadTaskRunnerHandle::Get()->PostTask(
Matt Menkedadd6c72018-01-30 23:07:25105 FROM_HERE, base::BindOnce(std::move(callback), forced_error_));
[email protected]52c41b42014-03-14 17:56:48106 clear_forced_error();
ttuttle859dc7a2015-04-23 19:42:29107 return ERR_IO_PENDING;
[email protected]52c41b42014-03-14 17:56:48108 }
109 int ret = forced_error_;
110 clear_forced_error();
111 return ret;
112}
113
Matt Menkedadd6c72018-01-30 23:07:25114int64_t MockFileStream::ErrorCallback64(Int64CompletionOnceCallback callback) {
ttuttle859dc7a2015-04-23 19:42:29115 CHECK_NE(OK, forced_error_);
[email protected]52c41b42014-03-14 17:56:48116 if (async_error_) {
skyostil4891b25b2015-06-11 11:43:45117 base::ThreadTaskRunnerHandle::Get()->PostTask(
Matt Menkedadd6c72018-01-30 23:07:25118 FROM_HERE, base::BindOnce(std::move(callback), forced_error_));
[email protected]52c41b42014-03-14 17:56:48119 clear_forced_error();
ttuttle859dc7a2015-04-23 19:42:29120 return ERR_IO_PENDING;
[email protected]52c41b42014-03-14 17:56:48121 }
wtc69f8ea82015-06-04 00:08:13122 int64_t ret = forced_error_;
[email protected]52c41b42014-03-14 17:56:48123 clear_forced_error();
124 return ret;
125}
126
Tsuyoshi Horo4f516be2022-06-14 11:53:13127} // namespace net::testing