diff --git a/webrtc/voice_engine/test/auto_test/fixtures/after_initialization_fixture.h b/webrtc/voice_engine/test/auto_test/fixtures/after_initialization_fixture.h index 928ec26a6..bdc871a7e 100644 --- a/webrtc/voice_engine/test/auto_test/fixtures/after_initialization_fixture.h +++ b/webrtc/voice_engine/test/auto_test/fixtures/after_initialization_fixture.h @@ -14,9 +14,11 @@ #include #include "webrtc/common_types.h" +#include "webrtc/system_wrappers/interface/atomic32.h" #include "webrtc/system_wrappers/interface/critical_section_wrapper.h" #include "webrtc/system_wrappers/interface/event_wrapper.h" #include "webrtc/system_wrappers/interface/scoped_ptr.h" +#include "webrtc/system_wrappers/interface/sleep.h" #include "webrtc/system_wrappers/interface/thread_wrapper.h" #include "webrtc/voice_engine/test/auto_test/fixtures/before_initialization_fixture.h" @@ -28,7 +30,7 @@ class LoopBackTransport : public webrtc::Transport { : crit_(webrtc::CriticalSectionWrapper::CreateCriticalSection()), packet_event_(webrtc::EventWrapper::Create()), thread_(webrtc::ThreadWrapper::CreateThread(NetworkProcess, this)), - voe_network_(voe_network) { + voe_network_(voe_network), transmitted_packets_(0) { unsigned int id; thread_->Start(id); } @@ -47,6 +49,16 @@ class LoopBackTransport : public webrtc::Transport { return static_cast(len); } + void WaitForTransmittedPackets(int32_t packet_count) { + enum { + kSleepIntervalMs = 10 + }; + int32_t limit = transmitted_packets_.Value() + packet_count; + while (transmitted_packets_.Value() < limit) { + webrtc::SleepMs(kSleepIntervalMs); + } + } + private: struct Packet { enum Type { Rtp, Rtcp, } type; @@ -106,6 +118,7 @@ class LoopBackTransport : public webrtc::Transport { voe_network_->ReceivedRTCPPacket(p.channel, p.data, p.len); break; } + ++transmitted_packets_; } return true; } @@ -115,6 +128,7 @@ class LoopBackTransport : public webrtc::Transport { webrtc::scoped_ptr thread_; std::deque packet_queue_ GUARDED_BY(crit_.get()); webrtc::VoENetwork* const voe_network_; + webrtc::Atomic32 transmitted_packets_; }; // This fixture initializes the voice engine in addition to the work diff --git a/webrtc/voice_engine/test/auto_test/fixtures/before_streaming_fixture.cc b/webrtc/voice_engine/test/auto_test/fixtures/before_streaming_fixture.cc index 8a7c4c3b4..488f4489b 100644 --- a/webrtc/voice_engine/test/auto_test/fixtures/before_streaming_fixture.cc +++ b/webrtc/voice_engine/test/auto_test/fixtures/before_streaming_fixture.cc @@ -56,6 +56,10 @@ void BeforeStreamingFixture::ResumePlaying() { EXPECT_EQ(0, voe_base_->StartSend(channel_)); } +void BeforeStreamingFixture::WaitForTransmittedPackets(int32_t packet_count) { + transport_->WaitForTransmittedPackets(packet_count); +} + void BeforeStreamingFixture::SetUpLocalPlayback() { transport_ = new LoopBackTransport(voe_network_); EXPECT_EQ(0, voe_network_->RegisterExternalTransport(channel_, *transport_)); diff --git a/webrtc/voice_engine/test/auto_test/fixtures/before_streaming_fixture.h b/webrtc/voice_engine/test/auto_test/fixtures/before_streaming_fixture.h index 6de583c7e..1348e481a 100644 --- a/webrtc/voice_engine/test/auto_test/fixtures/before_streaming_fixture.h +++ b/webrtc/voice_engine/test/auto_test/fixtures/before_streaming_fixture.h @@ -41,6 +41,9 @@ class BeforeStreamingFixture : public AfterInitializationFixture { // Resumes all sending and playout. void ResumePlaying(); + // Waits until packet_count packetes have been processed by recipient. + void WaitForTransmittedPackets(int32_t packet_count); + private: void SetUpLocalPlayback(); diff --git a/webrtc/voice_engine/test/auto_test/standard/rtp_rtcp_extensions.cc b/webrtc/voice_engine/test/auto_test/standard/rtp_rtcp_extensions.cc index c0b3011ce..7d5ebe278 100644 --- a/webrtc/voice_engine/test/auto_test/standard/rtp_rtcp_extensions.cc +++ b/webrtc/voice_engine/test/auto_test/standard/rtp_rtcp_extensions.cc @@ -74,7 +74,7 @@ class ExtensionVerifyTransport : public webrtc::Transport { while (received_packets_.Value() < kPacketsExpected) { webrtc::SleepMs(kSleepIntervalMs); } - // Check whether any where 'bad' (didn't contain an extension when they + // Check whether any were 'bad' (didn't contain an extension when they // where supposed to). return bad_packets_.Value() == 0; } @@ -183,7 +183,12 @@ class ReceiveRtpRtcpHeaderExtensionsTest : public BeforeStreamingFixture { voe_rtp_rtcp_->SetReceiveAbsoluteSenderTimeStatus(channel_, true, 11)); } + void Wait() { + WaitForTransmittedPackets(kPacketsExpected); + } + enum { + kPacketsExpected = 5, kVideoChannelId1 = 667, kVideoChannelId2 = 668 }; @@ -191,8 +196,9 @@ class ReceiveRtpRtcpHeaderExtensionsTest : public BeforeStreamingFixture { }; TEST_F(ReceiveRtpRtcpHeaderExtensionsTest, ReceiveASTDisabled) { + EXPECT_CALL(mock_network_, ReceivedBWEPacket(_, _, _, _)).Times(0); ResumePlaying(); - Sleep(500); + Wait(); } TEST_F(ReceiveRtpRtcpHeaderExtensionsTest, ReceiveASTFailSetTarget) { @@ -200,6 +206,7 @@ TEST_F(ReceiveRtpRtcpHeaderExtensionsTest, ReceiveASTFailSetTarget) { EXPECT_EQ(-1, voe_rtp_rtcp_->SetVideoEngineBWETarget(-1, &mock_network_, kVideoChannelId1)); ResumePlaying(); + Wait(); } TEST_F(ReceiveRtpRtcpHeaderExtensionsTest, ReceiveASTEnabled) { @@ -211,7 +218,7 @@ TEST_F(ReceiveRtpRtcpHeaderExtensionsTest, ReceiveASTEnabled) { EXPECT_EQ(0, voe_rtp_rtcp_->SetVideoEngineBWETarget(channel_, &mock_network_, kVideoChannelId1)); ResumePlaying(); - Sleep(500); + Wait(); EXPECT_EQ(0, voe_rtp_rtcp_->SetVideoEngineBWETarget(channel_, NULL, -1)); } @@ -226,7 +233,7 @@ TEST_F(ReceiveRtpRtcpHeaderExtensionsTest, ReceiveASTEnabledBadExtensionId) { EXPECT_EQ(0, voe_rtp_rtcp_->SetVideoEngineBWETarget(channel_, &mock_network_, kVideoChannelId1)); ResumePlaying(); - Sleep(500); + Wait(); EXPECT_EQ(0, voe_rtp_rtcp_->SetVideoEngineBWETarget(channel_, NULL, -1)); } @@ -241,7 +248,7 @@ TEST_F(ReceiveRtpRtcpHeaderExtensionsTest, ReceiveASTEnabledNotSending) { EXPECT_EQ(0, voe_rtp_rtcp_->SetVideoEngineBWETarget(channel_, &mock_network_, kVideoChannelId1)); ResumePlaying(); - Sleep(500); + Wait(); EXPECT_EQ(0, voe_rtp_rtcp_->SetVideoEngineBWETarget(channel_, NULL, -1)); } @@ -256,7 +263,7 @@ TEST_F(ReceiveRtpRtcpHeaderExtensionsTest, ReceiveASTEnabledNotReceiving) { EXPECT_EQ(0, voe_rtp_rtcp_->SetVideoEngineBWETarget(channel_, &mock_network_, kVideoChannelId1)); ResumePlaying(); - Sleep(500); + Wait(); EXPECT_EQ(0, voe_rtp_rtcp_->SetVideoEngineBWETarget(channel_, NULL, -1)); } @@ -275,10 +282,10 @@ TEST_F(ReceiveRtpRtcpHeaderExtensionsTest, ReceiveASTSwitchViENetwork) { EXPECT_EQ(0, voe_rtp_rtcp_->SetVideoEngineBWETarget(channel_, &mock_network_2, kVideoChannelId1)); ResumePlaying(); - Sleep(500); + Wait(); EXPECT_EQ(0, voe_rtp_rtcp_->SetVideoEngineBWETarget(channel_, &mock_network_, kVideoChannelId1)); - Sleep(500); + Wait(); EXPECT_EQ(0, voe_rtp_rtcp_->SetVideoEngineBWETarget(channel_, NULL, -1)); } @@ -295,9 +302,9 @@ TEST_F(ReceiveRtpRtcpHeaderExtensionsTest, ReceiveASTSwitchVideoChannel) { EXPECT_EQ(0, voe_rtp_rtcp_->SetVideoEngineBWETarget(channel_, &mock_network_, kVideoChannelId1)); ResumePlaying(); - Sleep(500); + Wait(); EXPECT_EQ(0, voe_rtp_rtcp_->SetVideoEngineBWETarget(channel_, &mock_network_, kVideoChannelId2)); - Sleep(500); + Wait(); EXPECT_EQ(0, voe_rtp_rtcp_->SetVideoEngineBWETarget(channel_, NULL, -1)); }