1 // Copyright 2018 The Chromium Authors. All rights reserved.
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 "services/network/test_chunked_data_pipe_getter.h"
6 
7 #include "base/logging.h"
8 #include "testing/gtest/include/gtest/gtest.h"
9 
10 namespace network {
11 
12 TestChunkedDataPipeGetter::TestChunkedDataPipeGetter() = default;
13 
14 TestChunkedDataPipeGetter::~TestChunkedDataPipeGetter() = default;
15 
16 mojo::PendingRemote<mojom::ChunkedDataPipeGetter>
GetDataPipeGetterRemote()17 TestChunkedDataPipeGetter::GetDataPipeGetterRemote() {
18   EXPECT_FALSE(receiver_.is_bound());
19   return receiver_.BindNewPipeAndPassRemote();
20 }
21 
ClosePipe()22 void TestChunkedDataPipeGetter::ClosePipe() {
23   receiver_.reset();
24 }
25 
26 mojom::ChunkedDataPipeGetter::GetSizeCallback
WaitForGetSize()27 TestChunkedDataPipeGetter::WaitForGetSize() {
28   DCHECK(!get_size_run_loop_);
29 
30   if (!get_size_callback_) {
31     get_size_run_loop_ = std::make_unique<base::RunLoop>();
32     get_size_run_loop_->Run();
33     get_size_run_loop_.reset();
34   }
35 
36   EXPECT_TRUE(get_size_callback_);
37 
38   return std::move(get_size_callback_);
39 }
40 
41 mojo::ScopedDataPipeProducerHandle
WaitForStartReading()42 TestChunkedDataPipeGetter::WaitForStartReading() {
43   DCHECK(!start_reading_run_loop_);
44 
45   if (!write_pipe_.is_valid()) {
46     start_reading_run_loop_ = std::make_unique<base::RunLoop>();
47     start_reading_run_loop_->Run();
48     start_reading_run_loop_.reset();
49   }
50 
51   EXPECT_TRUE(write_pipe_.is_valid());
52 
53   return std::move(write_pipe_);
54 }
55 
GetSize(GetSizeCallback get_size_callback)56 void TestChunkedDataPipeGetter::GetSize(GetSizeCallback get_size_callback) {
57   EXPECT_FALSE(received_size_callback_);
58   EXPECT_FALSE(get_size_callback_);
59 
60   received_size_callback_ = true;
61   get_size_callback_ = std::move(get_size_callback);
62 
63   if (get_size_run_loop_)
64     get_size_run_loop_->Quit();
65 }
66 
StartReading(mojo::ScopedDataPipeProducerHandle pipe)67 void TestChunkedDataPipeGetter::StartReading(
68     mojo::ScopedDataPipeProducerHandle pipe) {
69   EXPECT_FALSE(write_pipe_.is_valid());
70   EXPECT_TRUE(received_size_callback_);
71 
72   write_pipe_ = std::move(pipe);
73 
74   if (start_reading_run_loop_)
75     start_reading_run_loop_->Quit();
76 }
77 
78 }  // namespace network
79