xref: /aosp_15_r20/external/cronet/net/quic/test_task_runner.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2012 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker //
5*6777b538SAndroid Build Coastguard Worker // Common utilities for Quic tests
6*6777b538SAndroid Build Coastguard Worker 
7*6777b538SAndroid Build Coastguard Worker #ifndef NET_QUIC_TEST_TASK_RUNNER_H_
8*6777b538SAndroid Build Coastguard Worker #define NET_QUIC_TEST_TASK_RUNNER_H_
9*6777b538SAndroid Build Coastguard Worker 
10*6777b538SAndroid Build Coastguard Worker #include <vector>
11*6777b538SAndroid Build Coastguard Worker 
12*6777b538SAndroid Build Coastguard Worker #include "base/functional/callback.h"
13*6777b538SAndroid Build Coastguard Worker #include "base/memory/raw_ptr.h"
14*6777b538SAndroid Build Coastguard Worker #include "base/task/sequenced_task_runner.h"
15*6777b538SAndroid Build Coastguard Worker #include "base/task/task_runner.h"
16*6777b538SAndroid Build Coastguard Worker #include "base/test/test_pending_task.h"
17*6777b538SAndroid Build Coastguard Worker #include "net/third_party/quiche/src/quiche/quic/core/quic_time.h"
18*6777b538SAndroid Build Coastguard Worker 
19*6777b538SAndroid Build Coastguard Worker namespace quic {
20*6777b538SAndroid Build Coastguard Worker class MockClock;
21*6777b538SAndroid Build Coastguard Worker }  // namespace quic
22*6777b538SAndroid Build Coastguard Worker namespace net::test {
23*6777b538SAndroid Build Coastguard Worker 
24*6777b538SAndroid Build Coastguard Worker typedef base::TestPendingTask PostedTask;
25*6777b538SAndroid Build Coastguard Worker 
26*6777b538SAndroid Build Coastguard Worker class TestTaskRunner : public base::SequencedTaskRunner {
27*6777b538SAndroid Build Coastguard Worker  public:
28*6777b538SAndroid Build Coastguard Worker   explicit TestTaskRunner(quic::MockClock* clock);
29*6777b538SAndroid Build Coastguard Worker 
30*6777b538SAndroid Build Coastguard Worker   TestTaskRunner(const TestTaskRunner&) = delete;
31*6777b538SAndroid Build Coastguard Worker   TestTaskRunner& operator=(const TestTaskRunner&) = delete;
32*6777b538SAndroid Build Coastguard Worker 
33*6777b538SAndroid Build Coastguard Worker   // base::TaskRunner implementation.
34*6777b538SAndroid Build Coastguard Worker   bool PostDelayedTask(const base::Location& from_here,
35*6777b538SAndroid Build Coastguard Worker                        base::OnceClosure task,
36*6777b538SAndroid Build Coastguard Worker                        base::TimeDelta delay) override;
37*6777b538SAndroid Build Coastguard Worker   bool PostNonNestableDelayedTask(const base::Location& from_here,
38*6777b538SAndroid Build Coastguard Worker                                   base::OnceClosure task,
39*6777b538SAndroid Build Coastguard Worker                                   base::TimeDelta delay) override;
40*6777b538SAndroid Build Coastguard Worker 
41*6777b538SAndroid Build Coastguard Worker   bool RunsTasksInCurrentSequence() const override;
42*6777b538SAndroid Build Coastguard Worker 
43*6777b538SAndroid Build Coastguard Worker   const std::vector<PostedTask>& GetPostedTasks() const;
44*6777b538SAndroid Build Coastguard Worker 
45*6777b538SAndroid Build Coastguard Worker   // Returns the delay for next task to run. If there is no pending task,
46*6777b538SAndroid Build Coastguard Worker   // return QuicTime::Delta::Infinite().
47*6777b538SAndroid Build Coastguard Worker   quic::QuicTime::Delta NextPendingTaskDelay();
48*6777b538SAndroid Build Coastguard Worker 
49*6777b538SAndroid Build Coastguard Worker   // Finds the next task to run, advances the time to the correct time
50*6777b538SAndroid Build Coastguard Worker   // and then runs the task.
51*6777b538SAndroid Build Coastguard Worker   void RunNextTask();
52*6777b538SAndroid Build Coastguard Worker 
53*6777b538SAndroid Build Coastguard Worker   // Fast forwards virtual time by |delta|, causing all tasks with a remaining
54*6777b538SAndroid Build Coastguard Worker   // delay less than or equal to |delta| to be executed. |delta| must be
55*6777b538SAndroid Build Coastguard Worker   // non-negative.
56*6777b538SAndroid Build Coastguard Worker   void FastForwardBy(quic::QuicTime::Delta delta);
57*6777b538SAndroid Build Coastguard Worker 
58*6777b538SAndroid Build Coastguard Worker   // While there are posted tasks, finds the next task to run, advances the
59*6777b538SAndroid Build Coastguard Worker   // time to the correct time and then runs the task.
60*6777b538SAndroid Build Coastguard Worker   void RunUntilIdle();
61*6777b538SAndroid Build Coastguard Worker 
62*6777b538SAndroid Build Coastguard Worker  protected:
63*6777b538SAndroid Build Coastguard Worker   ~TestTaskRunner() override;
64*6777b538SAndroid Build Coastguard Worker 
65*6777b538SAndroid Build Coastguard Worker  private:
66*6777b538SAndroid Build Coastguard Worker   std::vector<PostedTask>::iterator FindNextTask();
67*6777b538SAndroid Build Coastguard Worker 
68*6777b538SAndroid Build Coastguard Worker   const raw_ptr<quic::MockClock> clock_;
69*6777b538SAndroid Build Coastguard Worker   std::vector<PostedTask> tasks_;
70*6777b538SAndroid Build Coastguard Worker };
71*6777b538SAndroid Build Coastguard Worker 
72*6777b538SAndroid Build Coastguard Worker }  // namespace net::test
73*6777b538SAndroid Build Coastguard Worker 
74*6777b538SAndroid Build Coastguard Worker #endif  // NET_QUIC_TEST_TASK_RUNNER_H_
75