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