Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1271)

Unified Diff: talk/media/webrtc/webrtcvoiceengine_unittest.cc

Issue 1309903007: Revert of Revert "Move test cases for more natural ordering" (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « talk/media/webrtc/webrtcvoiceengine.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: talk/media/webrtc/webrtcvoiceengine_unittest.cc
diff --git a/talk/media/webrtc/webrtcvoiceengine_unittest.cc b/talk/media/webrtc/webrtcvoiceengine_unittest.cc
index ef87c74e5814bbccb3ac02fc6f9de3e68e901d51..1daf58d3770a3cce2f584822e246dfa41333bbdb 100644
--- a/talk/media/webrtc/webrtcvoiceengine_unittest.cc
+++ b/talk/media/webrtc/webrtcvoiceengine_unittest.cc
@@ -24,11 +24,6 @@
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-
-#ifdef WIN32
-#include "webrtc/base/win32.h"
-#include <objbase.h>
-#endif
#include "webrtc/base/byteorder.h"
#include "webrtc/base/gunit.h"
@@ -3135,16 +3130,6 @@
EXPECT_EQ(rtc::DSCP_DEFAULT, network_interface->dscp());
}
-TEST(WebRtcVoiceEngineTest, TestDefaultOptionsBeforeInit) {
- cricket::WebRtcVoiceEngine engine;
- cricket::AudioOptions options = engine.GetOptions();
- // The default options should have at least a few things set. We purposefully
- // don't check the option values here, though.
- EXPECT_TRUE(options.echo_cancellation.IsSet());
- EXPECT_TRUE(options.auto_gain_control.IsSet());
- EXPECT_TRUE(options.noise_suppression.IsSet());
-}
-
// Test that GetReceiveChannelNum returns the default channel for the first
// recv stream in 1-1 calls.
TEST_F(WebRtcVoiceEngineTestFake, TestGetReceiveChannelNumIn1To1Calls) {
@@ -3194,7 +3179,328 @@
EXPECT_DOUBLE_EQ(1, right);
}
+TEST_F(WebRtcVoiceEngineTestFake, SetsSyncGroupFromSyncLabel) {
+ cricket::FakeCall call((webrtc::Call::Config()));
+ const uint32 kAudioSsrc = 123;
+ const std::string kSyncLabel = "AvSyncLabel";
+
+ EXPECT_TRUE(SetupEngine());
+ cricket::WebRtcVoiceMediaChannel* media_channel =
+ static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_);
+ media_channel->SetCall(&call);
+ cricket::StreamParams sp = cricket::StreamParams::CreateLegacy(kAudioSsrc);
+ sp.sync_label = kSyncLabel;
+ // Creating two channels to make sure that sync label is set properly for both
+ // the default voice channel and following ones.
+ EXPECT_TRUE(channel_->AddRecvStream(sp));
+ sp.ssrcs[0] += 1;
+ EXPECT_TRUE(channel_->AddRecvStream(sp));
+
+ ASSERT_EQ(2, call.GetAudioReceiveStreams().size());
+ EXPECT_EQ(kSyncLabel,
+ call.GetAudioReceiveStream(kAudioSsrc)->GetConfig().sync_group)
+ << "SyncGroup should be set based on sync_label";
+ EXPECT_EQ(kSyncLabel,
+ call.GetAudioReceiveStream(kAudioSsrc + 1)->GetConfig().sync_group)
+ << "SyncGroup should be set based on sync_label";
+
+ media_channel->SetCall(nullptr);
+}
+
+TEST_F(WebRtcVoiceEngineTestFake, CanChangeCombinedBweOption) {
+ // Test that changing the combined_audio_video_bwe option results in the
+ // expected state changes on an associated Call.
+ cricket::FakeCall call((webrtc::Call::Config()));
+ const uint32 kAudioSsrc1 = 223;
+ const uint32 kAudioSsrc2 = 224;
+
+ EXPECT_TRUE(SetupEngine());
+ cricket::WebRtcVoiceMediaChannel* media_channel =
+ static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_);
+ const auto& rtp_extensions = engine_.rtp_header_extensions();
+ media_channel->SetRecvRtpHeaderExtensions(rtp_extensions);
+ media_channel->SetCall(&call);
+ EXPECT_TRUE(media_channel->AddRecvStream(
+ cricket::StreamParams::CreateLegacy(kAudioSsrc1)));
+ EXPECT_TRUE(media_channel->AddRecvStream(
+ cricket::StreamParams::CreateLegacy(kAudioSsrc2)));
+
+ // Combined BWE should not be set up yet.
+ EXPECT_EQ(2, call.GetAudioReceiveStreams().size());
+ EXPECT_FALSE(call.GetAudioReceiveStream(kAudioSsrc1)
+ ->GetConfig()
+ .combined_audio_video_bwe);
+ EXPECT_FALSE(call.GetAudioReceiveStream(kAudioSsrc2)
+ ->GetConfig()
+ .combined_audio_video_bwe);
+
+ // Enable combined BWE option - now it should be set up.
+ cricket::AudioOptions options;
+ options.combined_audio_video_bwe.Set(true);
+ EXPECT_TRUE(media_channel->SetOptions(options));
+ EXPECT_EQ(2, call.GetAudioReceiveStreams().size());
+ EXPECT_TRUE(call.GetAudioReceiveStream(kAudioSsrc1)
+ ->GetConfig()
+ .combined_audio_video_bwe);
+ EXPECT_TRUE(call.GetAudioReceiveStream(kAudioSsrc2)
+ ->GetConfig()
+ .combined_audio_video_bwe);
+
+ // Disable combined BWE option - should be disabled again.
+ options.combined_audio_video_bwe.Set(false);
+ EXPECT_TRUE(media_channel->SetOptions(options));
+ EXPECT_EQ(2, call.GetAudioReceiveStreams().size());
+ EXPECT_FALSE(call.GetAudioReceiveStream(kAudioSsrc1)
+ ->GetConfig()
+ .combined_audio_video_bwe);
+ EXPECT_FALSE(call.GetAudioReceiveStream(kAudioSsrc2)
+ ->GetConfig()
+ .combined_audio_video_bwe);
+
+ media_channel->SetCall(nullptr);
+}
+
+TEST_F(WebRtcVoiceEngineTestFake, SetCallConfiguresAudioReceiveChannels) {
+ // Test that calling SetCall() on the voice media channel results in the
+ // expected state changes in Call.
+ cricket::FakeCall call((webrtc::Call::Config()));
+ cricket::FakeCall call2((webrtc::Call::Config()));
+ const uint32 kAudioSsrc1 = 223;
+ const uint32 kAudioSsrc2 = 224;
+
+ EXPECT_TRUE(SetupEngine());
+ cricket::WebRtcVoiceMediaChannel* media_channel =
+ static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_);
+ EXPECT_TRUE(media_channel->AddRecvStream(
+ cricket::StreamParams::CreateLegacy(kAudioSsrc1)));
+ EXPECT_TRUE(media_channel->AddRecvStream(
+ cricket::StreamParams::CreateLegacy(kAudioSsrc2)));
+
+ // Combined BWE should not be set up yet.
+ EXPECT_EQ(0, call.GetAudioReceiveStreams().size());
+
+ // Register - should be enabled.
+ media_channel->SetCall(&call);
+ EXPECT_EQ(2, call.GetAudioReceiveStreams().size());
+ EXPECT_NE(nullptr, call.GetAudioReceiveStream(kAudioSsrc1));
+ EXPECT_NE(nullptr, call.GetAudioReceiveStream(kAudioSsrc2));
+
+ // Re-register - should now be enabled on new call.
+ media_channel->SetCall(&call2);
+ EXPECT_EQ(0, call.GetAudioReceiveStreams().size());
+ EXPECT_EQ(2, call2.GetAudioReceiveStreams().size());
+ EXPECT_NE(nullptr, call2.GetAudioReceiveStream(kAudioSsrc1));
+ EXPECT_NE(nullptr, call2.GetAudioReceiveStream(kAudioSsrc2));
+
+ // Unregister - should be disabled again.
+ media_channel->SetCall(nullptr);
+ EXPECT_EQ(0, call.GetAudioReceiveStreams().size());
+}
+
+TEST_F(WebRtcVoiceEngineTestFake, ConfigureCombinedBweForNewRecvStreams) {
+ // Test that adding receive streams after enabling combined bandwidth
+ // estimation will correctly configure each channel.
+ cricket::FakeCall call((webrtc::Call::Config()));
+
+ EXPECT_TRUE(SetupEngine());
+ cricket::WebRtcVoiceMediaChannel* media_channel =
+ static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_);
+ media_channel->SetCall(&call);
+ cricket::AudioOptions options;
+ options.combined_audio_video_bwe.Set(true);
+ EXPECT_TRUE(media_channel->SetOptions(options));
+
+ static const uint32 kSsrcs[] = {1, 2, 3, 4};
+ for (unsigned int i = 0; i < ARRAY_SIZE(kSsrcs); ++i) {
+ EXPECT_TRUE(media_channel->AddRecvStream(
+ cricket::StreamParams::CreateLegacy(kSsrcs[i])));
+ EXPECT_NE(nullptr, call.GetAudioReceiveStream(kSsrcs[i]));
+ EXPECT_TRUE(call.GetAudioReceiveStream(kSsrcs[i])
+ ->GetConfig()
+ .combined_audio_video_bwe);
+ }
+ EXPECT_EQ(ARRAY_SIZE(kSsrcs), call.GetAudioReceiveStreams().size());
+
+ media_channel->SetCall(nullptr);
+ EXPECT_EQ(0, call.GetAudioReceiveStreams().size());
+}
+
+TEST_F(WebRtcVoiceEngineTestFake, ConfiguresAudioReceiveStreamRtpExtensions) {
+ // Test that setting the header extensions results in the expected state
+ // changes on an associated Call.
+ cricket::FakeCall call((webrtc::Call::Config()));
+ std::vector<uint32> ssrcs;
+ ssrcs.push_back(223);
+ ssrcs.push_back(224);
+
+ EXPECT_TRUE(SetupEngine());
+ cricket::WebRtcVoiceMediaChannel* media_channel =
+ static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_);
+ media_channel->SetCall(&call);
+ for (uint32 ssrc : ssrcs) {
+ EXPECT_TRUE(media_channel->AddRecvStream(
+ cricket::StreamParams::CreateLegacy(ssrc)));
+ }
+
+ // Combined BWE should be set up, but with no configured extensions.
+ EXPECT_EQ(2, call.GetAudioReceiveStreams().size());
+ for (uint32 ssrc : ssrcs) {
+ const auto* s = call.GetAudioReceiveStream(ssrc);
+ EXPECT_NE(nullptr, s);
+ EXPECT_EQ(0, s->GetConfig().rtp.extensions.size());
+ }
+
+ // Set up receive extensions.
+ const auto& e_exts = engine_.rtp_header_extensions();
+ channel_->SetRecvRtpHeaderExtensions(e_exts);
+ EXPECT_EQ(2, call.GetAudioReceiveStreams().size());
+ for (uint32 ssrc : ssrcs) {
+ const auto* s = call.GetAudioReceiveStream(ssrc);
+ EXPECT_NE(nullptr, s);
+ const auto& s_exts = s->GetConfig().rtp.extensions;
+ EXPECT_EQ(e_exts.size(), s_exts.size());
+ for (const auto& e_ext : e_exts) {
+ for (const auto& s_ext : s_exts) {
+ if (e_ext.id == s_ext.id) {
+ EXPECT_EQ(e_ext.uri, s_ext.name);
+ }
+ }
+ }
+ }
+
+ // Disable receive extensions.
+ std::vector<cricket::RtpHeaderExtension> extensions;
+ channel_->SetRecvRtpHeaderExtensions(extensions);
+ for (uint32 ssrc : ssrcs) {
+ const auto* s = call.GetAudioReceiveStream(ssrc);
+ EXPECT_NE(nullptr, s);
+ EXPECT_EQ(0, s->GetConfig().rtp.extensions.size());
+ }
+
+ media_channel->SetCall(nullptr);
+}
+
+TEST_F(WebRtcVoiceEngineTestFake, DeliverAudioPacket_Call) {
+ // Test that packets are forwarded to the Call when configured accordingly.
+ cricket::FakeCall call((webrtc::Call::Config()));
+ const uint32 kAudioSsrc = 1;
+ rtc::Buffer kPcmuPacket(kPcmuFrame, sizeof(kPcmuFrame));
+ static const unsigned char kRtcp[] = {
+ 0x80, 0xc9, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ };
+ rtc::Buffer kRtcpPacket(kRtcp, sizeof(kRtcp));
+
+ EXPECT_TRUE(SetupEngine());
+ cricket::WebRtcVoiceMediaChannel* media_channel =
+ static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_);
+ cricket::AudioOptions options;
+ options.combined_audio_video_bwe.Set(true);
+ EXPECT_TRUE(media_channel->SetOptions(options));
+ EXPECT_TRUE(media_channel->AddRecvStream(
+ cricket::StreamParams::CreateLegacy(kAudioSsrc)));
+
+ // Call not set on media channel, so no packets can be forwarded.
+ EXPECT_EQ(0, call.GetAudioReceiveStreams().size());
+ channel_->OnPacketReceived(&kPcmuPacket, rtc::PacketTime());
+ channel_->OnRtcpReceived(&kRtcpPacket, rtc::PacketTime());
+ EXPECT_EQ(0, call.GetAudioReceiveStreams().size());
+
+ // Set Call, now there should be a receive stream which is forwarded packets.
+ media_channel->SetCall(&call);
+ EXPECT_EQ(1, call.GetAudioReceiveStreams().size());
+ const cricket::FakeAudioReceiveStream* s =
+ call.GetAudioReceiveStream(kAudioSsrc);
+ EXPECT_EQ(0, s->received_packets());
+ channel_->OnPacketReceived(&kPcmuPacket, rtc::PacketTime());
+ EXPECT_EQ(1, s->received_packets());
+ channel_->OnRtcpReceived(&kRtcpPacket, rtc::PacketTime());
+ EXPECT_EQ(2, s->received_packets());
+
+ media_channel->SetCall(nullptr);
+}
+
+// Associate channel should not set on 1:1 call, since the receive channel also
+// sends RTCP SR.
+TEST_F(WebRtcVoiceEngineTestFake, AssociateChannelUnset1On1) {
+ EXPECT_TRUE(SetupEngine());
+ EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1)));
+ int recv_ch = voe_.GetLastChannel();
+ EXPECT_EQ(voe_.GetAssociateSendChannel(recv_ch), -1);
+}
+
+// This test is an extension of AssociateChannelUnset1On1. We create two receive
+// channels. The second should be associated with the default channel, since it
+// does not send RTCP SR.
+TEST_F(WebRtcVoiceEngineTestFake, AssociateDefaultChannelOnSecondRecvChannel) {
+ EXPECT_TRUE(SetupEngine());
+ cricket::WebRtcVoiceMediaChannel* media_channel =
+ static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_);
+ int default_channel = media_channel->voe_channel();
+ EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1)));
+ int recv_ch_1 = voe_.GetLastChannel();
+ EXPECT_EQ(recv_ch_1, default_channel);
+ EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2)));
+ int recv_ch_2 = voe_.GetLastChannel();
+ EXPECT_EQ(voe_.GetAssociateSendChannel(recv_ch_1), -1);
+ EXPECT_EQ(voe_.GetAssociateSendChannel(recv_ch_2), default_channel);
+ // Add send stream, the association remains.
+ EXPECT_TRUE(channel_->AddSendStream(cricket::StreamParams::CreateLegacy(3)));
+ EXPECT_EQ(voe_.GetAssociateSendChannel(recv_ch_1), -1);
+ EXPECT_EQ(voe_.GetAssociateSendChannel(recv_ch_2), default_channel);
+}
+
+// In conference mode, all receive channels should be associated with the
+// default channel, since they do not send RTCP SR.
+TEST_F(WebRtcVoiceEngineTestFake, AssociateDefaultChannelOnConference) {
+ EXPECT_TRUE(SetupEngine());
+ EXPECT_TRUE(channel_->SetOptions(options_conference_));
+ cricket::WebRtcVoiceMediaChannel* media_channel =
+ static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_);
+ int default_channel = media_channel->voe_channel();
+ EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1)));
+ int recv_ch = voe_.GetLastChannel();
+ EXPECT_NE(recv_ch, default_channel);
+ EXPECT_EQ(voe_.GetAssociateSendChannel(recv_ch), default_channel);
+ EXPECT_TRUE(channel_->AddSendStream(cricket::StreamParams::CreateLegacy(2)));
+ EXPECT_EQ(voe_.GetAssociateSendChannel(recv_ch), default_channel);
+}
+
+TEST_F(WebRtcVoiceEngineTestFake, AssociateChannelResetUponDeleteChannnel) {
+ EXPECT_TRUE(SetupEngine());
+ EXPECT_TRUE(channel_->SetOptions(options_conference_));
+
+ EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1)));
+ int recv_ch = voe_.GetLastChannel();
+
+ EXPECT_TRUE(channel_->AddSendStream(cricket::StreamParams::CreateLegacy(2)));
+ int send_ch = voe_.GetLastChannel();
+
+ // Manually associate |recv_ch| to |send_ch|. This test is to verify a
+ // deleting logic, i.e., deleting |send_ch| will reset the associate send
+ // channel of |recv_ch|.This is not a common case, since, normally, only the
+ // default channel can be associated. However, the default is not deletable.
+ // So we force the |recv_ch| to associate with a non-default channel.
+ EXPECT_EQ(0, voe_.AssociateSendChannel(recv_ch, send_ch));
+ EXPECT_EQ(voe_.GetAssociateSendChannel(recv_ch), send_ch);
+
+ EXPECT_TRUE(channel_->RemoveSendStream(2));
+ EXPECT_EQ(voe_.GetAssociateSendChannel(recv_ch), -1);
+}
+
// Tests for the actual WebRtc VoE library.
+
+TEST(WebRtcVoiceEngineTest, TestDefaultOptionsBeforeInit) {
+ cricket::WebRtcVoiceEngine engine;
+ cricket::AudioOptions options = engine.GetOptions();
+ // The default options should have at least a few things set. We purposefully
+ // don't check the option values here, though.
+ EXPECT_TRUE(options.echo_cancellation.IsSet());
+ EXPECT_TRUE(options.auto_gain_control.IsSet());
+ EXPECT_TRUE(options.noise_suppression.IsSet());
+}
// Tests that the library initializes and shuts down properly.
TEST(WebRtcVoiceEngineTest, StartupShutdown) {
@@ -3325,341 +3631,3 @@
cricket::WebRtcVoiceMediaChannel channel(&engine);
EXPECT_TRUE(channel.SetRecvCodecs(engine.codecs()));
}
-
-#ifdef WIN32
-// Test our workarounds to WebRtc VoE' munging of the coinit count
-TEST(WebRtcVoiceEngineTest, CoInitialize) {
- cricket::WebRtcVoiceEngine* engine = new cricket::WebRtcVoiceEngine();
-
- // Initial refcount should be 0.
- EXPECT_EQ(S_OK, CoInitializeEx(NULL, COINIT_MULTITHREADED));
-
- // Engine should start even with COM already inited.
- EXPECT_TRUE(engine->Init(rtc::Thread::Current()));
- engine->Terminate();
- EXPECT_TRUE(engine->Init(rtc::Thread::Current()));
- engine->Terminate();
-
- // Refcount after terminate should be 1 (in reality 3); test if it is nonzero.
- EXPECT_EQ(S_FALSE, CoInitializeEx(NULL, COINIT_MULTITHREADED));
- // Decrement refcount to (hopefully) 0.
- CoUninitialize();
- CoUninitialize();
- delete engine;
-
- // Ensure refcount is 0.
- EXPECT_EQ(S_OK, CoInitializeEx(NULL, COINIT_MULTITHREADED));
- CoUninitialize();
-}
-#endif
-
-TEST_F(WebRtcVoiceEngineTestFake, SetsSyncGroupFromSyncLabel) {
- cricket::FakeCall call((webrtc::Call::Config()));
- const uint32 kAudioSsrc = 123;
- const std::string kSyncLabel = "AvSyncLabel";
-
- EXPECT_TRUE(SetupEngine());
- cricket::WebRtcVoiceMediaChannel* media_channel =
- static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_);
- media_channel->SetCall(&call);
- cricket::StreamParams sp = cricket::StreamParams::CreateLegacy(kAudioSsrc);
- sp.sync_label = kSyncLabel;
- // Creating two channels to make sure that sync label is set properly for both
- // the default voice channel and following ones.
- EXPECT_TRUE(channel_->AddRecvStream(sp));
- sp.ssrcs[0] += 1;
- EXPECT_TRUE(channel_->AddRecvStream(sp));
-
- ASSERT_EQ(2, call.GetAudioReceiveStreams().size());
- EXPECT_EQ(kSyncLabel,
- call.GetAudioReceiveStream(kAudioSsrc)->GetConfig().sync_group)
- << "SyncGroup should be set based on sync_label";
- EXPECT_EQ(kSyncLabel,
- call.GetAudioReceiveStream(kAudioSsrc + 1)->GetConfig().sync_group)
- << "SyncGroup should be set based on sync_label";
-
- media_channel->SetCall(nullptr);
-}
-
-TEST_F(WebRtcVoiceEngineTestFake, CanChangeCombinedBweOption) {
- // Test that changing the combined_audio_video_bwe option results in the
- // expected state changes on an associated Call.
- cricket::FakeCall call((webrtc::Call::Config()));
- const uint32 kAudioSsrc1 = 223;
- const uint32 kAudioSsrc2 = 224;
-
- EXPECT_TRUE(SetupEngine());
- cricket::WebRtcVoiceMediaChannel* media_channel =
- static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_);
- const auto& rtp_extensions = engine_.rtp_header_extensions();
- media_channel->SetRecvRtpHeaderExtensions(rtp_extensions);
- media_channel->SetCall(&call);
- EXPECT_TRUE(media_channel->AddRecvStream(
- cricket::StreamParams::CreateLegacy(kAudioSsrc1)));
- EXPECT_TRUE(media_channel->AddRecvStream(
- cricket::StreamParams::CreateLegacy(kAudioSsrc2)));
-
- // Combined BWE should not be set up yet.
- EXPECT_EQ(2, call.GetAudioReceiveStreams().size());
- EXPECT_FALSE(call.GetAudioReceiveStream(kAudioSsrc1)
- ->GetConfig()
- .combined_audio_video_bwe);
- EXPECT_FALSE(call.GetAudioReceiveStream(kAudioSsrc2)
- ->GetConfig()
- .combined_audio_video_bwe);
-
- // Enable combined BWE option - now it should be set up.
- cricket::AudioOptions options;
- options.combined_audio_video_bwe.Set(true);
- EXPECT_TRUE(media_channel->SetOptions(options));
- EXPECT_EQ(2, call.GetAudioReceiveStreams().size());
- EXPECT_TRUE(call.GetAudioReceiveStream(kAudioSsrc1)
- ->GetConfig()
- .combined_audio_video_bwe);
- EXPECT_TRUE(call.GetAudioReceiveStream(kAudioSsrc2)
- ->GetConfig()
- .combined_audio_video_bwe);
-
- // Disable combined BWE option - should be disabled again.
- options.combined_audio_video_bwe.Set(false);
- EXPECT_TRUE(media_channel->SetOptions(options));
- EXPECT_EQ(2, call.GetAudioReceiveStreams().size());
- EXPECT_FALSE(call.GetAudioReceiveStream(kAudioSsrc1)
- ->GetConfig()
- .combined_audio_video_bwe);
- EXPECT_FALSE(call.GetAudioReceiveStream(kAudioSsrc2)
- ->GetConfig()
- .combined_audio_video_bwe);
-
- media_channel->SetCall(nullptr);
-}
-
-TEST_F(WebRtcVoiceEngineTestFake, SetCallConfiguresAudioReceiveChannels) {
- // Test that calling SetCall() on the voice media channel results in the
- // expected state changes in Call.
- cricket::FakeCall call((webrtc::Call::Config()));
- cricket::FakeCall call2((webrtc::Call::Config()));
- const uint32 kAudioSsrc1 = 223;
- const uint32 kAudioSsrc2 = 224;
-
- EXPECT_TRUE(SetupEngine());
- cricket::WebRtcVoiceMediaChannel* media_channel =
- static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_);
- EXPECT_TRUE(media_channel->AddRecvStream(
- cricket::StreamParams::CreateLegacy(kAudioSsrc1)));
- EXPECT_TRUE(media_channel->AddRecvStream(
- cricket::StreamParams::CreateLegacy(kAudioSsrc2)));
-
- // Combined BWE should not be set up yet.
- EXPECT_EQ(0, call.GetAudioReceiveStreams().size());
-
- // Register - should be enabled.
- media_channel->SetCall(&call);
- EXPECT_EQ(2, call.GetAudioReceiveStreams().size());
- EXPECT_NE(nullptr, call.GetAudioReceiveStream(kAudioSsrc1));
- EXPECT_NE(nullptr, call.GetAudioReceiveStream(kAudioSsrc2));
-
- // Re-register - should now be enabled on new call.
- media_channel->SetCall(&call2);
- EXPECT_EQ(0, call.GetAudioReceiveStreams().size());
- EXPECT_EQ(2, call2.GetAudioReceiveStreams().size());
- EXPECT_NE(nullptr, call2.GetAudioReceiveStream(kAudioSsrc1));
- EXPECT_NE(nullptr, call2.GetAudioReceiveStream(kAudioSsrc2));
-
- // Unregister - should be disabled again.
- media_channel->SetCall(nullptr);
- EXPECT_EQ(0, call.GetAudioReceiveStreams().size());
-}
-
-TEST_F(WebRtcVoiceEngineTestFake, ConfigureCombinedBweForNewRecvStreams) {
- // Test that adding receive streams after enabling combined bandwidth
- // estimation will correctly configure each channel.
- cricket::FakeCall call((webrtc::Call::Config()));
-
- EXPECT_TRUE(SetupEngine());
- cricket::WebRtcVoiceMediaChannel* media_channel =
- static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_);
- media_channel->SetCall(&call);
- cricket::AudioOptions options;
- options.combined_audio_video_bwe.Set(true);
- EXPECT_TRUE(media_channel->SetOptions(options));
-
- static const uint32 kSsrcs[] = {1, 2, 3, 4};
- for (unsigned int i = 0; i < ARRAY_SIZE(kSsrcs); ++i) {
- EXPECT_TRUE(media_channel->AddRecvStream(
- cricket::StreamParams::CreateLegacy(kSsrcs[i])));
- EXPECT_NE(nullptr, call.GetAudioReceiveStream(kSsrcs[i]));
- EXPECT_TRUE(call.GetAudioReceiveStream(kSsrcs[i])
- ->GetConfig()
- .combined_audio_video_bwe);
- }
- EXPECT_EQ(ARRAY_SIZE(kSsrcs), call.GetAudioReceiveStreams().size());
-
- media_channel->SetCall(nullptr);
- EXPECT_EQ(0, call.GetAudioReceiveStreams().size());
-}
-
-TEST_F(WebRtcVoiceEngineTestFake, ConfiguresAudioReceiveStreamRtpExtensions) {
- // Test that setting the header extensions results in the expected state
- // changes on an associated Call.
- cricket::FakeCall call((webrtc::Call::Config()));
- std::vector<uint32> ssrcs;
- ssrcs.push_back(223);
- ssrcs.push_back(224);
-
- EXPECT_TRUE(SetupEngine());
- cricket::WebRtcVoiceMediaChannel* media_channel =
- static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_);
- media_channel->SetCall(&call);
- for (uint32 ssrc : ssrcs) {
- EXPECT_TRUE(media_channel->AddRecvStream(
- cricket::StreamParams::CreateLegacy(ssrc)));
- }
-
- // Combined BWE should be set up, but with no configured extensions.
- EXPECT_EQ(2, call.GetAudioReceiveStreams().size());
- for (uint32 ssrc : ssrcs) {
- const auto* s = call.GetAudioReceiveStream(ssrc);
- EXPECT_NE(nullptr, s);
- EXPECT_EQ(0, s->GetConfig().rtp.extensions.size());
- }
-
- // Set up receive extensions.
- const auto& e_exts = engine_.rtp_header_extensions();
- channel_->SetRecvRtpHeaderExtensions(e_exts);
- EXPECT_EQ(2, call.GetAudioReceiveStreams().size());
- for (uint32 ssrc : ssrcs) {
- const auto* s = call.GetAudioReceiveStream(ssrc);
- EXPECT_NE(nullptr, s);
- const auto& s_exts = s->GetConfig().rtp.extensions;
- EXPECT_EQ(e_exts.size(), s_exts.size());
- for (const auto& e_ext : e_exts) {
- for (const auto& s_ext : s_exts) {
- if (e_ext.id == s_ext.id) {
- EXPECT_EQ(e_ext.uri, s_ext.name);
- }
- }
- }
- }
-
- // Disable receive extensions.
- std::vector<cricket::RtpHeaderExtension> extensions;
- channel_->SetRecvRtpHeaderExtensions(extensions);
- for (uint32 ssrc : ssrcs) {
- const auto* s = call.GetAudioReceiveStream(ssrc);
- EXPECT_NE(nullptr, s);
- EXPECT_EQ(0, s->GetConfig().rtp.extensions.size());
- }
-
- media_channel->SetCall(nullptr);
-}
-
-TEST_F(WebRtcVoiceEngineTestFake, DeliverAudioPacket_Call) {
- // Test that packets are forwarded to the Call when configured accordingly.
- cricket::FakeCall call((webrtc::Call::Config()));
- const uint32 kAudioSsrc = 1;
- rtc::Buffer kPcmuPacket(kPcmuFrame, sizeof(kPcmuFrame));
- static const unsigned char kRtcp[] = {
- 0x80, 0xc9, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02,
- 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- };
- rtc::Buffer kRtcpPacket(kRtcp, sizeof(kRtcp));
-
- EXPECT_TRUE(SetupEngine());
- cricket::WebRtcVoiceMediaChannel* media_channel =
- static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_);
- cricket::AudioOptions options;
- options.combined_audio_video_bwe.Set(true);
- EXPECT_TRUE(media_channel->SetOptions(options));
- EXPECT_TRUE(media_channel->AddRecvStream(
- cricket::StreamParams::CreateLegacy(kAudioSsrc)));
-
- // Call not set on media channel, so no packets can be forwarded.
- EXPECT_EQ(0, call.GetAudioReceiveStreams().size());
- channel_->OnPacketReceived(&kPcmuPacket, rtc::PacketTime());
- channel_->OnRtcpReceived(&kRtcpPacket, rtc::PacketTime());
- EXPECT_EQ(0, call.GetAudioReceiveStreams().size());
-
- // Set Call, now there should be a receive stream which is forwarded packets.
- media_channel->SetCall(&call);
- EXPECT_EQ(1, call.GetAudioReceiveStreams().size());
- const cricket::FakeAudioReceiveStream* s =
- call.GetAudioReceiveStream(kAudioSsrc);
- EXPECT_EQ(0, s->received_packets());
- channel_->OnPacketReceived(&kPcmuPacket, rtc::PacketTime());
- EXPECT_EQ(1, s->received_packets());
- channel_->OnRtcpReceived(&kRtcpPacket, rtc::PacketTime());
- EXPECT_EQ(2, s->received_packets());
-
- media_channel->SetCall(nullptr);
-}
-
-// Associate channel should not set on 1:1 call, since the receive channel also
-// sends RTCP SR.
-TEST_F(WebRtcVoiceEngineTestFake, AssociateChannelUnset1On1) {
- EXPECT_TRUE(SetupEngine());
- EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1)));
- int recv_ch = voe_.GetLastChannel();
- EXPECT_EQ(voe_.GetAssociateSendChannel(recv_ch), -1);
-}
-
-// This test is an extension of AssociateChannelUnset1On1. We create two receive
-// channels. The second should be associated with the default channel, since it
-// does not send RTCP SR.
-TEST_F(WebRtcVoiceEngineTestFake, AssociateDefaultChannelOnSecondRecvChannel) {
- EXPECT_TRUE(SetupEngine());
- cricket::WebRtcVoiceMediaChannel* media_channel =
- static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_);
- int default_channel = media_channel->voe_channel();
- EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1)));
- int recv_ch_1 = voe_.GetLastChannel();
- EXPECT_EQ(recv_ch_1, default_channel);
- EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(2)));
- int recv_ch_2 = voe_.GetLastChannel();
- EXPECT_EQ(voe_.GetAssociateSendChannel(recv_ch_1), -1);
- EXPECT_EQ(voe_.GetAssociateSendChannel(recv_ch_2), default_channel);
- // Add send stream, the association remains.
- EXPECT_TRUE(channel_->AddSendStream(cricket::StreamParams::CreateLegacy(3)));
- EXPECT_EQ(voe_.GetAssociateSendChannel(recv_ch_1), -1);
- EXPECT_EQ(voe_.GetAssociateSendChannel(recv_ch_2), default_channel);
-}
-
-// In conference mode, all receive channels should be associated with the
-// default channel, since they do not send RTCP SR.
-TEST_F(WebRtcVoiceEngineTestFake, AssociateDefaultChannelOnConference) {
- EXPECT_TRUE(SetupEngine());
- EXPECT_TRUE(channel_->SetOptions(options_conference_));
- cricket::WebRtcVoiceMediaChannel* media_channel =
- static_cast<cricket::WebRtcVoiceMediaChannel*>(channel_);
- int default_channel = media_channel->voe_channel();
- EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1)));
- int recv_ch = voe_.GetLastChannel();
- EXPECT_NE(recv_ch, default_channel);
- EXPECT_EQ(voe_.GetAssociateSendChannel(recv_ch), default_channel);
- EXPECT_TRUE(channel_->AddSendStream(cricket::StreamParams::CreateLegacy(2)));
- EXPECT_EQ(voe_.GetAssociateSendChannel(recv_ch), default_channel);
-}
-
-TEST_F(WebRtcVoiceEngineTestFake, AssociateChannelResetUponDeleteChannnel) {
- EXPECT_TRUE(SetupEngine());
- EXPECT_TRUE(channel_->SetOptions(options_conference_));
-
- EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1)));
- int recv_ch = voe_.GetLastChannel();
-
- EXPECT_TRUE(channel_->AddSendStream(cricket::StreamParams::CreateLegacy(2)));
- int send_ch = voe_.GetLastChannel();
-
- // Manually associate |recv_ch| to |send_ch|. This test is to verify a
- // deleting logic, i.e., deleting |send_ch| will reset the associate send
- // channel of |recv_ch|.This is not a common case, since, normally, only the
- // default channel can be associated. However, the default is not deletable.
- // So we force the |recv_ch| to associate with a non-default channel.
- EXPECT_EQ(0, voe_.AssociateSendChannel(recv_ch, send_ch));
- EXPECT_EQ(voe_.GetAssociateSendChannel(recv_ch), send_ch);
-
- EXPECT_TRUE(channel_->RemoveSendStream(2));
- EXPECT_EQ(voe_.GetAssociateSendChannel(recv_ch), -1);
-}
« no previous file with comments | « talk/media/webrtc/webrtcvoiceengine.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698