MCPcopy Create free account
hub / github.com/apache/brpc / TEST

Function TEST

test/bthread_timer_thread_unittest.cpp:107–157  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

105};
106
107TEST(TimerThreadTest, RunTasks) {
108 bthread::TimerThread timer_thread;
109 ASSERT_EQ(0, timer_thread.start(NULL));
110
111 timespec _2s_later = butil::seconds_from_now(2);
112 TimeKeeper keeper1(_2s_later, "keeper1");
113 keeper1.schedule(&timer_thread);
114
115 TimeKeeper keeper2(_2s_later, "keeper2"); // same time with keeper1
116 keeper2.schedule(&timer_thread);
117
118 timespec _1s_later = butil::seconds_from_now(1);
119 TimeKeeper keeper3(_1s_later, "keeper3");
120 keeper3.schedule(&timer_thread);
121
122 timespec _10s_later = butil::seconds_from_now(10);
123 TimeKeeper keeper4(_10s_later, "keeper4");
124 keeper4.schedule(&timer_thread);
125
126 TimeKeeper keeper5(_10s_later, "keeper5");
127 keeper5.schedule(&timer_thread);
128
129 // sleep 1 second, and unschedule task2
130 LOG(INFO) << "Sleep 1s";
131 sleep(1);
132 timer_thread.unschedule(keeper2._task_id);
133 timer_thread.unschedule(keeper4._task_id);
134
135 timespec old_time = { 0, 0 };
136 TimeKeeper keeper6(old_time, "keeper6");
137 keeper6.schedule(&timer_thread);
138 const timespec keeper6_addtime = butil::seconds_from_now(0);
139
140 // sleep 10 seconds and stop.
141 LOG(INFO) << "Sleep 2s";
142 sleep(2);
143 LOG(INFO) << "Stop timer_thread";
144 butil::Timer tm;
145 tm.start();
146 timer_thread.stop_and_join();
147 tm.stop();
148 ASSERT_LE(tm.m_elapsed(), 15);
149
150 // verify all runs in expected time range.
151 keeper1.expect_first_run();
152 keeper2.expect_not_run();
153 keeper3.expect_first_run();
154 keeper4.expect_not_run();
155 keeper5.expect_not_run();
156 keeper6.expect_first_run(keeper6_addtime);
157}
158
159// If the scheduled time is before start time, then should run it
160// immediately.

Callers

nothing calls this directly

Calls 12

seconds_from_nowFunction · 0.85
milliseconds_from_nowFunction · 0.85
clock_gettimeFunction · 0.85
unscheduleMethod · 0.80
m_elapsedMethod · 0.80
expect_first_runMethod · 0.80
expect_not_runMethod · 0.80
wakeupMethod · 0.80
startMethod · 0.45
scheduleMethod · 0.45
stop_and_joinMethod · 0.45
stopMethod · 0.45

Tested by

no test coverage detected