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

Unified Diff: webrtc/pc/rtpsenderreceiver_unittest.cc

Issue 2666853002: Move DTMF sender to RtpSender (as opposed to WebRtcSession). (Closed)
Patch Set: Merge with master Created 3 years, 11 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 | « webrtc/pc/rtpsender.cc ('k') | webrtc/pc/webrtcsession.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/pc/rtpsenderreceiver_unittest.cc
diff --git a/webrtc/pc/rtpsenderreceiver_unittest.cc b/webrtc/pc/rtpsenderreceiver_unittest.cc
index 86c06121149fc632ac935880795b3cc8cc15002e..508a417733d7197484e5672df0631d25844ab92f 100644
--- a/webrtc/pc/rtpsenderreceiver_unittest.cc
+++ b/webrtc/pc/rtpsenderreceiver_unittest.cc
@@ -13,6 +13,7 @@
#include <utility>
#include "webrtc/base/gunit.h"
+#include "webrtc/base/sigslot.h"
#include "webrtc/logging/rtc_event_log/rtc_event_log.h"
#include "webrtc/media/base/fakemediaengine.h"
#include "webrtc/media/base/mediachannel.h"
@@ -38,6 +39,8 @@ using ::testing::Exactly;
using ::testing::InvokeWithoutArgs;
using ::testing::Return;
+namespace {
+
static const char kStreamLabel1[] = "local_stream_1";
static const char kVideoTrackId[] = "video_1";
static const char kAudioTrackId[] = "audio_1";
@@ -45,10 +48,14 @@ static const uint32_t kVideoSsrc = 98;
static const uint32_t kVideoSsrc2 = 100;
static const uint32_t kAudioSsrc = 99;
static const uint32_t kAudioSsrc2 = 101;
+static const int kDefaultTimeout = 10000; // 10 seconds.
+
+} // namespace
namespace webrtc {
-class RtpSenderReceiverTest : public testing::Test {
+class RtpSenderReceiverTest : public testing::Test,
+ public sigslot::has_slots<> {
public:
RtpSenderReceiverTest()
: // Create fake media engine/etc. so we can create channels to use to
@@ -75,6 +82,8 @@ class RtpSenderReceiverTest : public testing::Test {
&fake_media_controller_, rtp_transport, nullptr, rtc::Thread::Current(),
cricket::CN_VIDEO, nullptr, rtcp_mux_required, srtp_required,
cricket::VideoOptions());
+ voice_channel_->Enable(true);
+ video_channel_->Enable(true);
voice_media_channel_ = media_engine_->GetVoiceChannel(0);
video_media_channel_ = media_engine_->GetVideoChannel(0);
RTC_CHECK(voice_channel_);
@@ -104,7 +113,14 @@ class RtpSenderReceiverTest : public testing::Test {
cricket::StreamParams::CreateLegacy(kVideoSsrc2));
}
- void TearDown() override { channel_manager_.Terminate(); }
+ // Needed to use DTMF sender.
+ void AddDtmfCodec() {
+ cricket::AudioSendParameters params;
+ const cricket::AudioCodec kTelephoneEventCodec(106, "telephone-event", 8000,
+ 0, 1);
+ params.codecs.push_back(kTelephoneEventCodec);
+ voice_media_channel_->SetSendParameters(params);
+ }
void AddVideoTrack() { AddVideoTrack(false); }
@@ -124,9 +140,13 @@ class RtpSenderReceiverTest : public testing::Test {
new AudioRtpSender(stream_->GetAudioTracks()[0], stream_->label(),
voice_channel_, nullptr);
audio_rtp_sender_->SetSsrc(kAudioSsrc);
+ audio_rtp_sender_->GetOnDestroyedSignal()->connect(
+ this, &RtpSenderReceiverTest::OnAudioSenderDestroyed);
VerifyVoiceChannelInput();
}
+ void OnAudioSenderDestroyed() { audio_sender_destroyed_signal_fired_ = true; }
+
void CreateVideoRtpSender() { CreateVideoRtpSender(false); }
void CreateVideoRtpSender(bool is_screencast) {
@@ -247,6 +267,7 @@ class RtpSenderReceiverTest : public testing::Test {
rtc::scoped_refptr<MediaStreamInterface> stream_;
rtc::scoped_refptr<VideoTrackInterface> video_track_;
rtc::scoped_refptr<AudioTrackInterface> audio_track_;
+ bool audio_sender_destroyed_signal_fired_ = false;
};
// Test that |voice_channel_| is updated when an audio track is associated
@@ -721,4 +742,66 @@ TEST_F(RtpSenderReceiverTest,
DestroyVideoRtpSender();
}
+TEST_F(RtpSenderReceiverTest, AudioSenderHasDtmfSender) {
+ CreateAudioRtpSender();
+ EXPECT_NE(nullptr, audio_rtp_sender_->GetDtmfSender());
+}
+
+TEST_F(RtpSenderReceiverTest, VideoSenderDoesNotHaveDtmfSender) {
+ CreateVideoRtpSender();
+ EXPECT_EQ(nullptr, video_rtp_sender_->GetDtmfSender());
+}
+
+// Test that the DTMF sender is really using |voice_channel_|, and thus returns
+// true/false from CanSendDtmf based on what |voice_channel_| returns.
+TEST_F(RtpSenderReceiverTest, CanInsertDtmf) {
+ AddDtmfCodec();
+ CreateAudioRtpSender();
+ auto dtmf_sender = audio_rtp_sender_->GetDtmfSender();
+ ASSERT_NE(nullptr, dtmf_sender);
+ EXPECT_TRUE(dtmf_sender->CanInsertDtmf());
+}
+
+TEST_F(RtpSenderReceiverTest, CanNotInsertDtmf) {
+ CreateAudioRtpSender();
+ auto dtmf_sender = audio_rtp_sender_->GetDtmfSender();
+ ASSERT_NE(nullptr, dtmf_sender);
+ // DTMF codec has not been added, as it was in the above test.
+ EXPECT_FALSE(dtmf_sender->CanInsertDtmf());
+}
+
+TEST_F(RtpSenderReceiverTest, InsertDtmf) {
+ AddDtmfCodec();
+ CreateAudioRtpSender();
+ auto dtmf_sender = audio_rtp_sender_->GetDtmfSender();
+ ASSERT_NE(nullptr, dtmf_sender);
+
+ EXPECT_EQ(0U, voice_media_channel_->dtmf_info_queue().size());
+
+ // Insert DTMF
+ const int expected_duration = 90;
+ dtmf_sender->InsertDtmf("012", expected_duration, 100);
+
+ // Verify
+ ASSERT_EQ_WAIT(3U, voice_media_channel_->dtmf_info_queue().size(),
+ kDefaultTimeout);
+ const uint32_t send_ssrc =
+ voice_media_channel_->send_streams()[0].first_ssrc();
+ EXPECT_TRUE(CompareDtmfInfo(voice_media_channel_->dtmf_info_queue()[0],
+ send_ssrc, 0, expected_duration));
+ EXPECT_TRUE(CompareDtmfInfo(voice_media_channel_->dtmf_info_queue()[1],
+ send_ssrc, 1, expected_duration));
+ EXPECT_TRUE(CompareDtmfInfo(voice_media_channel_->dtmf_info_queue()[2],
+ send_ssrc, 2, expected_duration));
+}
+
+// Make sure the signal from "GetOnDestroyedSignal()" fires when the sender is
+// destroyed, which is needed for the DTMF sender.
+TEST_F(RtpSenderReceiverTest, TestOnDestroyedSignal) {
+ CreateAudioRtpSender();
+ EXPECT_FALSE(audio_sender_destroyed_signal_fired_);
+ audio_rtp_sender_ = nullptr;
+ EXPECT_TRUE(audio_sender_destroyed_signal_fired_);
+}
+
} // namespace webrtc
« no previous file with comments | « webrtc/pc/rtpsender.cc ('k') | webrtc/pc/webrtcsession.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698