OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright 2012 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
11 #include <memory> | 11 #include <memory> |
12 #include <string> | 12 #include <string> |
13 #include <utility> | 13 #include <utility> |
14 | 14 |
15 #include "webrtc/base/gunit.h" | 15 #include "webrtc/base/gunit.h" |
| 16 #include "webrtc/base/sigslot.h" |
16 #include "webrtc/logging/rtc_event_log/rtc_event_log.h" | 17 #include "webrtc/logging/rtc_event_log/rtc_event_log.h" |
17 #include "webrtc/media/base/fakemediaengine.h" | 18 #include "webrtc/media/base/fakemediaengine.h" |
18 #include "webrtc/media/base/mediachannel.h" | 19 #include "webrtc/media/base/mediachannel.h" |
19 #include "webrtc/media/engine/fakewebrtccall.h" | 20 #include "webrtc/media/engine/fakewebrtccall.h" |
20 #include "webrtc/p2p/base/faketransportcontroller.h" | 21 #include "webrtc/p2p/base/faketransportcontroller.h" |
21 #include "webrtc/pc/audiotrack.h" | 22 #include "webrtc/pc/audiotrack.h" |
22 #include "webrtc/pc/channelmanager.h" | 23 #include "webrtc/pc/channelmanager.h" |
23 #include "webrtc/pc/fakemediacontroller.h" | 24 #include "webrtc/pc/fakemediacontroller.h" |
24 #include "webrtc/pc/localaudiosource.h" | 25 #include "webrtc/pc/localaudiosource.h" |
25 #include "webrtc/pc/mediastream.h" | 26 #include "webrtc/pc/mediastream.h" |
(...skipping 15 matching lines...) Expand all Loading... |
41 static const char kStreamLabel1[] = "local_stream_1"; | 42 static const char kStreamLabel1[] = "local_stream_1"; |
42 static const char kVideoTrackId[] = "video_1"; | 43 static const char kVideoTrackId[] = "video_1"; |
43 static const char kAudioTrackId[] = "audio_1"; | 44 static const char kAudioTrackId[] = "audio_1"; |
44 static const uint32_t kVideoSsrc = 98; | 45 static const uint32_t kVideoSsrc = 98; |
45 static const uint32_t kVideoSsrc2 = 100; | 46 static const uint32_t kVideoSsrc2 = 100; |
46 static const uint32_t kAudioSsrc = 99; | 47 static const uint32_t kAudioSsrc = 99; |
47 static const uint32_t kAudioSsrc2 = 101; | 48 static const uint32_t kAudioSsrc2 = 101; |
48 | 49 |
49 namespace webrtc { | 50 namespace webrtc { |
50 | 51 |
51 class RtpSenderReceiverTest : public testing::Test { | 52 class RtpSenderReceiverTest : public testing::Test, |
| 53 public sigslot::has_slots<> { |
52 public: | 54 public: |
53 RtpSenderReceiverTest() | 55 RtpSenderReceiverTest() |
54 : // Create fake media engine/etc. so we can create channels to use to | 56 : // Create fake media engine/etc. so we can create channels to use to |
55 // test RtpSenders/RtpReceivers. | 57 // test RtpSenders/RtpReceivers. |
56 media_engine_(new cricket::FakeMediaEngine()), | 58 media_engine_(new cricket::FakeMediaEngine()), |
57 channel_manager_(media_engine_, | 59 channel_manager_(media_engine_, |
58 rtc::Thread::Current(), | 60 rtc::Thread::Current(), |
59 rtc::Thread::Current()), | 61 rtc::Thread::Current()), |
60 fake_call_(Call::Config(&event_log_)), | 62 fake_call_(Call::Config(&event_log_)), |
61 fake_media_controller_(&channel_manager_, &fake_call_), | 63 fake_media_controller_(&channel_manager_, &fake_call_), |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
97 video_media_channel_->AddSendStream( | 99 video_media_channel_->AddSendStream( |
98 cricket::StreamParams::CreateLegacy(kVideoSsrc)); | 100 cricket::StreamParams::CreateLegacy(kVideoSsrc)); |
99 video_media_channel_->AddRecvStream( | 101 video_media_channel_->AddRecvStream( |
100 cricket::StreamParams::CreateLegacy(kVideoSsrc)); | 102 cricket::StreamParams::CreateLegacy(kVideoSsrc)); |
101 video_media_channel_->AddSendStream( | 103 video_media_channel_->AddSendStream( |
102 cricket::StreamParams::CreateLegacy(kVideoSsrc2)); | 104 cricket::StreamParams::CreateLegacy(kVideoSsrc2)); |
103 video_media_channel_->AddRecvStream( | 105 video_media_channel_->AddRecvStream( |
104 cricket::StreamParams::CreateLegacy(kVideoSsrc2)); | 106 cricket::StreamParams::CreateLegacy(kVideoSsrc2)); |
105 } | 107 } |
106 | 108 |
107 void TearDown() override { channel_manager_.Terminate(); } | |
108 | |
109 void AddVideoTrack() { AddVideoTrack(false); } | 109 void AddVideoTrack() { AddVideoTrack(false); } |
110 | 110 |
111 void AddVideoTrack(bool is_screencast) { | 111 void AddVideoTrack(bool is_screencast) { |
112 rtc::scoped_refptr<VideoTrackSourceInterface> source( | 112 rtc::scoped_refptr<VideoTrackSourceInterface> source( |
113 FakeVideoTrackSource::Create(is_screencast)); | 113 FakeVideoTrackSource::Create(is_screencast)); |
114 video_track_ = VideoTrack::Create(kVideoTrackId, source); | 114 video_track_ = VideoTrack::Create(kVideoTrackId, source); |
115 EXPECT_TRUE(stream_->AddTrack(video_track_)); | 115 EXPECT_TRUE(stream_->AddTrack(video_track_)); |
116 } | 116 } |
117 | 117 |
118 void CreateAudioRtpSender() { CreateAudioRtpSender(nullptr); } | 118 void CreateAudioRtpSender() { CreateAudioRtpSender(nullptr); } |
119 | 119 |
120 void CreateAudioRtpSender(rtc::scoped_refptr<LocalAudioSource> source) { | 120 void CreateAudioRtpSender(rtc::scoped_refptr<LocalAudioSource> source) { |
121 audio_track_ = AudioTrack::Create(kAudioTrackId, source); | 121 audio_track_ = AudioTrack::Create(kAudioTrackId, source); |
122 EXPECT_TRUE(stream_->AddTrack(audio_track_)); | 122 EXPECT_TRUE(stream_->AddTrack(audio_track_)); |
123 audio_rtp_sender_ = | 123 audio_rtp_sender_ = |
124 new AudioRtpSender(stream_->GetAudioTracks()[0], stream_->label(), | 124 new AudioRtpSender(stream_->GetAudioTracks()[0], stream_->label(), |
125 voice_channel_, nullptr); | 125 voice_channel_, nullptr); |
126 audio_rtp_sender_->SetSsrc(kAudioSsrc); | 126 audio_rtp_sender_->SetSsrc(kAudioSsrc); |
| 127 audio_rtp_sender_->GetOnDestroyedSignal()->connect( |
| 128 this, &RtpSenderReceiverTest::OnAudioSenderDestroyed); |
127 VerifyVoiceChannelInput(); | 129 VerifyVoiceChannelInput(); |
128 } | 130 } |
129 | 131 |
| 132 void OnAudioSenderDestroyed() { audio_sender_destroyed_signal_fired_ = true; } |
| 133 |
130 void CreateVideoRtpSender() { CreateVideoRtpSender(false); } | 134 void CreateVideoRtpSender() { CreateVideoRtpSender(false); } |
131 | 135 |
132 void CreateVideoRtpSender(bool is_screencast) { | 136 void CreateVideoRtpSender(bool is_screencast) { |
133 AddVideoTrack(is_screencast); | 137 AddVideoTrack(is_screencast); |
134 video_rtp_sender_ = new VideoRtpSender(stream_->GetVideoTracks()[0], | 138 video_rtp_sender_ = new VideoRtpSender(stream_->GetVideoTracks()[0], |
135 stream_->label(), video_channel_); | 139 stream_->label(), video_channel_); |
136 video_rtp_sender_->SetSsrc(kVideoSsrc); | 140 video_rtp_sender_->SetSsrc(kVideoSsrc); |
137 VerifyVideoChannelInput(); | 141 VerifyVideoChannelInput(); |
138 } | 142 } |
139 | 143 |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
240 cricket::VideoChannel* video_channel_; | 244 cricket::VideoChannel* video_channel_; |
241 cricket::FakeVoiceMediaChannel* voice_media_channel_; | 245 cricket::FakeVoiceMediaChannel* voice_media_channel_; |
242 cricket::FakeVideoMediaChannel* video_media_channel_; | 246 cricket::FakeVideoMediaChannel* video_media_channel_; |
243 rtc::scoped_refptr<AudioRtpSender> audio_rtp_sender_; | 247 rtc::scoped_refptr<AudioRtpSender> audio_rtp_sender_; |
244 rtc::scoped_refptr<VideoRtpSender> video_rtp_sender_; | 248 rtc::scoped_refptr<VideoRtpSender> video_rtp_sender_; |
245 rtc::scoped_refptr<AudioRtpReceiver> audio_rtp_receiver_; | 249 rtc::scoped_refptr<AudioRtpReceiver> audio_rtp_receiver_; |
246 rtc::scoped_refptr<VideoRtpReceiver> video_rtp_receiver_; | 250 rtc::scoped_refptr<VideoRtpReceiver> video_rtp_receiver_; |
247 rtc::scoped_refptr<MediaStreamInterface> stream_; | 251 rtc::scoped_refptr<MediaStreamInterface> stream_; |
248 rtc::scoped_refptr<VideoTrackInterface> video_track_; | 252 rtc::scoped_refptr<VideoTrackInterface> video_track_; |
249 rtc::scoped_refptr<AudioTrackInterface> audio_track_; | 253 rtc::scoped_refptr<AudioTrackInterface> audio_track_; |
| 254 bool audio_sender_destroyed_signal_fired_ = false; |
250 }; | 255 }; |
251 | 256 |
252 // Test that |voice_channel_| is updated when an audio track is associated | 257 // Test that |voice_channel_| is updated when an audio track is associated |
253 // and disassociated with an AudioRtpSender. | 258 // and disassociated with an AudioRtpSender. |
254 TEST_F(RtpSenderReceiverTest, AddAndDestroyAudioRtpSender) { | 259 TEST_F(RtpSenderReceiverTest, AddAndDestroyAudioRtpSender) { |
255 CreateAudioRtpSender(); | 260 CreateAudioRtpSender(); |
256 DestroyAudioRtpSender(); | 261 DestroyAudioRtpSender(); |
257 } | 262 } |
258 | 263 |
259 // Test that |video_channel_| is updated when a video track is associated and | 264 // Test that |video_channel_| is updated when a video track is associated and |
(...skipping 454 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
714 | 719 |
715 // And removing the hint should go back to false (to verify that false was | 720 // And removing the hint should go back to false (to verify that false was |
716 // default correctly). | 721 // default correctly). |
717 video_track_->set_content_hint(VideoTrackInterface::ContentHint::kNone); | 722 video_track_->set_content_hint(VideoTrackInterface::ContentHint::kNone); |
718 EXPECT_EQ(rtc::Optional<bool>(false), | 723 EXPECT_EQ(rtc::Optional<bool>(false), |
719 video_media_channel_->options().is_screencast); | 724 video_media_channel_->options().is_screencast); |
720 | 725 |
721 DestroyVideoRtpSender(); | 726 DestroyVideoRtpSender(); |
722 } | 727 } |
723 | 728 |
| 729 // There are end-to-end tests for DTMF, but here just ensure the DTMF sender is |
| 730 // provided based on sender type. |
| 731 TEST_F(RtpSenderReceiverTest, AudioSenderHasDtmfSender) { |
| 732 CreateAudioRtpSender(); |
| 733 EXPECT_NE(nullptr, audio_rtp_sender_->GetDtmfSender()); |
| 734 } |
| 735 |
| 736 TEST_F(RtpSenderReceiverTest, VideoSenderDoesNotHaveDtmfSender) { |
| 737 CreateVideoRtpSender(); |
| 738 EXPECT_EQ(nullptr, video_rtp_sender_->GetDtmfSender()); |
| 739 } |
| 740 |
| 741 // Make sure the signal from "GetOnDestroyedSignal()" fires when the sender is |
| 742 // destroyed, which is needed for the DTMF sender. |
| 743 TEST_F(RtpSenderReceiverTest, TestOnDestroyedSignal) { |
| 744 CreateAudioRtpSender(); |
| 745 EXPECT_FALSE(audio_sender_destroyed_signal_fired_); |
| 746 audio_rtp_sender_ = nullptr; |
| 747 EXPECT_TRUE(audio_sender_destroyed_signal_fired_); |
| 748 } |
| 749 |
724 } // namespace webrtc | 750 } // namespace webrtc |
OLD | NEW |