Fix test race in GetStatsMultipleSendStreams.
Test now waits for stats to be filled instead of failing instantly if
they haven't been updated.
BUG=2409
R=asapersson@webrtc.org
TBR=pthatcher@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/36239004
Cr-Commit-Position: refs/heads/master@{#8441}
git-svn-id: http://webrtc.googlecode.com/svn/trunk@8441 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/talk/media/base/videoengine_unittest.h b/talk/media/base/videoengine_unittest.h
index 7b82b82..128ec80 100644
--- a/talk/media/base/videoengine_unittest.h
+++ b/talk/media/base/videoengine_unittest.h
@@ -968,7 +968,7 @@
EXPECT_FRAME_WAIT(1, DefaultCodec().width, DefaultCodec().height, kTimeout);
// Add an additional capturer, and hook up a renderer to receive it.
- cricket::FakeVideoRenderer renderer1;
+ cricket::FakeVideoRenderer renderer2;
rtc::scoped_ptr<cricket::FakeVideoCapturer> capturer(
CreateFakeVideoCapturer());
capturer->SetScreencast(true);
@@ -983,18 +983,30 @@
EXPECT_TRUE(channel_->SetCapturer(5678, capturer.get()));
EXPECT_TRUE(channel_->AddRecvStream(
cricket::StreamParams::CreateLegacy(5678)));
- EXPECT_TRUE(channel_->SetRenderer(5678, &renderer1));
+ EXPECT_TRUE(channel_->SetRenderer(5678, &renderer2));
EXPECT_TRUE(capturer->CaptureCustomFrame(
kTestWidth, kTestHeight, cricket::FOURCC_I420));
EXPECT_FRAME_ON_RENDERER_WAIT(
- renderer1, 1, kTestWidth, kTestHeight, kTimeout);
+ renderer2, 1, kTestWidth, kTestHeight, kTimeout);
- // Get stats, and make sure they are correct for two senders.
+ // Get stats, and make sure they are correct for two senders. We wait until
+ // the number of expected packets have been sent to avoid races where we
+ // check stats before it has been updated.
cricket::VideoMediaInfo info;
- EXPECT_TRUE(channel_->GetStats(cricket::StatsOptions(), &info));
- ASSERT_EQ(2U, info.senders.size());
+ for (uint32 i = 0; i < kTimeout; ++i) {
+ rtc::Thread::Current()->ProcessMessages(1);
+ EXPECT_TRUE(channel_->GetStats(cricket::StatsOptions(), &info));
+ ASSERT_EQ(2U, info.senders.size());
+ if (info.senders[0].packets_sent + info.senders[1].packets_sent ==
+ NumRtpPackets()) {
+ // Stats have been updated for both sent frames, expectations can be
+ // checked now.
+ break;
+ }
+ }
EXPECT_EQ(NumRtpPackets(),
- info.senders[0].packets_sent + info.senders[1].packets_sent);
+ info.senders[0].packets_sent + info.senders[1].packets_sent)
+ << "Timed out while waiting for packet counts for all sent packets.";
EXPECT_EQ(1U, info.senders[0].ssrcs().size());
EXPECT_EQ(1234U, info.senders[0].ssrcs()[0]);
EXPECT_EQ(DefaultCodec().width, info.senders[0].send_frame_width);