From c89468a4b711f03133bd225ee55e622fd4c44a84 Mon Sep 17 00:00:00 2001 From: Tommi Date: Mon, 5 Aug 2019 15:13:20 +0200 Subject: [PATCH] Fix CallStatsUnittests to update the RTT on the process thread (as in production). Bug: webrtc:10848 Change-Id: Ib56ba887ef148188c902dee680b29809ae8cb8f6 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/148064 Reviewed-by: Magnus Flodman Commit-Queue: Tommi Cr-Commit-Position: refs/heads/master@{#28768} --- video/call_stats_unittest.cc | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/video/call_stats_unittest.cc b/video/call_stats_unittest.cc index 01bc3469a9..85b9eb951d 100644 --- a/video/call_stats_unittest.cc +++ b/video/call_stats_unittest.cc @@ -46,6 +46,13 @@ class CallStatsTest : public ::testing::Test { process_thread_->DeRegisterModule(&call_stats_); } + // Queues an rtt update call on the process thread. + void AsyncSimulateRttUpdate(int64_t rtt) { + RtcpRttStats* rtcp_rtt_stats = &call_stats_; + process_thread_->PostTask(ToQueuedTask( + [rtcp_rtt_stats, rtt] { rtcp_rtt_stats->OnRttUpdate(rtt); })); + } + protected: std::unique_ptr process_thread_{ ProcessThread::Create("CallStats")}; @@ -67,9 +74,10 @@ TEST_F(CallStatsTest, AddAndTriggerCallback) { call_stats_.RegisterStatsObserver(&stats_observer); EXPECT_EQ(-1, rtcp_rtt_stats->LastProcessedRtt()); - rtcp_rtt_stats->OnRttUpdate(kRtt); + AsyncSimulateRttUpdate(kRtt); EXPECT_TRUE(event.Wait(1000)); + EXPECT_EQ(kRtt, rtcp_rtt_stats->LastProcessedRtt()); call_stats_.DeregisterStatsObserver(&stats_observer); @@ -106,7 +114,7 @@ TEST_F(CallStatsTest, ProcessTime) { call_stats_.RegisterStatsObserver(&stats_observer); - rtcp_rtt_stats->OnRttUpdate(kRtt); + AsyncSimulateRttUpdate(kRtt); EXPECT_TRUE(event.Wait(1000)); call_stats_.DeregisterStatsObserver(&stats_observer); @@ -123,7 +131,6 @@ TEST_F(CallStatsTest, MultipleObservers) { call_stats_.RegisterStatsObserver(&stats_observer_2); call_stats_.RegisterStatsObserver(&stats_observer_2); - RtcpRttStats* rtcp_rtt_stats = &call_stats_; static constexpr const int64_t kRtt = 100; // Verify both observers are updated. @@ -137,7 +144,7 @@ TEST_F(CallStatsTest, MultipleObservers) { .Times(AnyNumber()) .WillOnce(InvokeWithoutArgs([&ev2] { ev2.Set(); })) .WillRepeatedly(Return()); - rtcp_rtt_stats->OnRttUpdate(kRtt); + AsyncSimulateRttUpdate(kRtt); ASSERT_TRUE(ev1.Wait(100)); ASSERT_TRUE(ev2.Wait(100)); @@ -150,7 +157,7 @@ TEST_F(CallStatsTest, MultipleObservers) { .WillOnce(InvokeWithoutArgs([&ev1] { ev1.Set(); })) .WillRepeatedly(Return()); EXPECT_CALL(stats_observer_2, OnRttUpdate(kRtt, kRtt)).Times(0); - rtcp_rtt_stats->OnRttUpdate(kRtt); + AsyncSimulateRttUpdate(kRtt); ASSERT_TRUE(ev1.Wait(100)); // Deregister the first observer. @@ -159,7 +166,7 @@ TEST_F(CallStatsTest, MultipleObservers) { // Now make sure we don't get any callbacks. EXPECT_CALL(stats_observer_1, OnRttUpdate(kRtt, kRtt)).Times(0); EXPECT_CALL(stats_observer_2, OnRttUpdate(kRtt, kRtt)).Times(0); - rtcp_rtt_stats->OnRttUpdate(kRtt); + AsyncSimulateRttUpdate(kRtt); // Force a call to Process(). process_thread_->WakeUp(&call_stats_); @@ -232,7 +239,7 @@ TEST_F(CallStatsTest, ChangeRtt) { .WillOnce(InvokeWithoutArgs([&event] { event.Set(); })); // Trigger the first rtt value and set off the chain of callbacks. - rtcp_rtt_stats->OnRttUpdate(kFirstRtt); // Reported at T0 (0ms). + AsyncSimulateRttUpdate(kFirstRtt); // Reported at T0 (0ms). EXPECT_TRUE(event.Wait(1000)); call_stats_.DeregisterStatsObserver(&stats_observer); @@ -279,7 +286,7 @@ TEST_F(CallStatsTest, LastProcessedRtt) { // Set a first values and verify that LastProcessedRtt initially returns the // average rtt. fake_clock_.AdvanceTimeMilliseconds(CallStats::kUpdateIntervalMs); - rtcp_rtt_stats->OnRttUpdate(kRttLow); + AsyncSimulateRttUpdate(kRttLow); EXPECT_TRUE(event.Wait(1000)); EXPECT_EQ(kAvgRtt2, rtcp_rtt_stats->LastProcessedRtt()); @@ -290,18 +297,17 @@ TEST_F(CallStatsTest, ProducesHistogramMetrics) { metrics::Reset(); rtc::Event event; static constexpr const int64_t kRtt = 123; - RtcpRttStats* rtcp_rtt_stats = &call_stats_; MockStatsObserver stats_observer; call_stats_.RegisterStatsObserver(&stats_observer); EXPECT_CALL(stats_observer, OnRttUpdate(kRtt, kRtt)) .Times(AnyNumber()) - .WillOnce(InvokeWithoutArgs([&event] { event.Set(); })) - .WillRepeatedly(Return()); + .WillRepeatedly(InvokeWithoutArgs([&event] { event.Set(); })); - rtcp_rtt_stats->OnRttUpdate(kRtt); + AsyncSimulateRttUpdate(kRtt); + EXPECT_TRUE(event.Wait(1000)); fake_clock_.AdvanceTimeMilliseconds(metrics::kMinRunTimeInSeconds * CallStats::kUpdateIntervalMs); - rtcp_rtt_stats->OnRttUpdate(kRtt); + AsyncSimulateRttUpdate(kRtt); EXPECT_TRUE(event.Wait(1000)); call_stats_.DeregisterStatsObserver(&stats_observer);