| OLD | NEW |
| 1 /* | 1 /* |
| 2 * libjingle | 2 * libjingle |
| 3 * Copyright 2009 Google Inc. | 3 * Copyright 2009 Google Inc. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions are met: | 6 * modification, are permitted provided that the following conditions are met: |
| 7 * | 7 * |
| 8 * 1. Redistributions of source code must retain the above copyright notice, | 8 * 1. Redistributions of source code must retain the above copyright notice, |
| 9 * this list of conditions and the following disclaimer. | 9 * this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright notice, | 10 * 2. Redistributions in binary form must reproduce the above copyright notice, |
| (...skipping 17 matching lines...) Expand all Loading... |
| 28 #include "talk/media/base/fakemediaengine.h" | 28 #include "talk/media/base/fakemediaengine.h" |
| 29 #include "talk/media/base/fakertp.h" | 29 #include "talk/media/base/fakertp.h" |
| 30 #include "talk/media/base/fakescreencapturerfactory.h" | 30 #include "talk/media/base/fakescreencapturerfactory.h" |
| 31 #include "talk/media/base/fakevideocapturer.h" | 31 #include "talk/media/base/fakevideocapturer.h" |
| 32 #include "talk/media/base/mediachannel.h" | 32 #include "talk/media/base/mediachannel.h" |
| 33 #include "talk/media/base/rtpdump.h" | 33 #include "talk/media/base/rtpdump.h" |
| 34 #include "talk/media/base/screencastid.h" | 34 #include "talk/media/base/screencastid.h" |
| 35 #include "talk/media/base/testutils.h" | 35 #include "talk/media/base/testutils.h" |
| 36 #include "webrtc/p2p/base/fakesession.h" | 36 #include "webrtc/p2p/base/fakesession.h" |
| 37 #include "talk/session/media/channel.h" | 37 #include "talk/session/media/channel.h" |
| 38 #include "talk/session/media/typingmonitor.h" | |
| 39 #include "webrtc/base/fileutils.h" | 38 #include "webrtc/base/fileutils.h" |
| 40 #include "webrtc/base/gunit.h" | 39 #include "webrtc/base/gunit.h" |
| 41 #include "webrtc/base/helpers.h" | 40 #include "webrtc/base/helpers.h" |
| 42 #include "webrtc/base/logging.h" | 41 #include "webrtc/base/logging.h" |
| 43 #include "webrtc/base/pathutils.h" | 42 #include "webrtc/base/pathutils.h" |
| 44 #include "webrtc/base/signalthread.h" | 43 #include "webrtc/base/signalthread.h" |
| 45 #include "webrtc/base/ssladapter.h" | 44 #include "webrtc/base/ssladapter.h" |
| 46 #include "webrtc/base/sslidentity.h" | 45 #include "webrtc/base/sslidentity.h" |
| 47 #include "webrtc/base/window.h" | 46 #include "webrtc/base/window.h" |
| 48 | 47 |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 129 ChannelTest(const uint8* rtp_data, int rtp_len, | 128 ChannelTest(const uint8* rtp_data, int rtp_len, |
| 130 const uint8* rtcp_data, int rtcp_len) | 129 const uint8* rtcp_data, int rtcp_len) |
| 131 : session1_(true), | 130 : session1_(true), |
| 132 session2_(false), | 131 session2_(false), |
| 133 media_channel1_(NULL), | 132 media_channel1_(NULL), |
| 134 media_channel2_(NULL), | 133 media_channel2_(NULL), |
| 135 rtp_packet_(reinterpret_cast<const char*>(rtp_data), rtp_len), | 134 rtp_packet_(reinterpret_cast<const char*>(rtp_data), rtp_len), |
| 136 rtcp_packet_(reinterpret_cast<const char*>(rtcp_data), rtcp_len), | 135 rtcp_packet_(reinterpret_cast<const char*>(rtcp_data), rtcp_len), |
| 137 media_info_callbacks1_(), | 136 media_info_callbacks1_(), |
| 138 media_info_callbacks2_(), | 137 media_info_callbacks2_(), |
| 139 mute_callback_recved_(false), | |
| 140 mute_callback_value_(false), | |
| 141 ssrc_(0), | 138 ssrc_(0), |
| 142 error_(T::MediaChannel::ERROR_NONE) { | 139 error_(T::MediaChannel::ERROR_NONE) { |
| 143 } | 140 } |
| 144 | 141 |
| 145 void CreateChannels(int flags1, int flags2) { | 142 void CreateChannels(int flags1, int flags2) { |
| 146 CreateChannels(new typename T::MediaChannel(NULL), | 143 CreateChannels(new typename T::MediaChannel(NULL), |
| 147 new typename T::MediaChannel(NULL), | 144 new typename T::MediaChannel(NULL), |
| 148 flags1, flags2, rtc::Thread::Current()); | 145 flags1, flags2, rtc::Thread::Current()); |
| 149 } | 146 } |
| 150 void CreateChannels(int flags) { | 147 void CreateChannels(int flags) { |
| (...skipping 23 matching lines...) Expand all Loading... |
| 174 channel2_.reset(CreateChannel(thread, &media_engine_, ch2, &session2_, | 171 channel2_.reset(CreateChannel(thread, &media_engine_, ch2, &session2_, |
| 175 (flags2 & RTCP) != 0)); | 172 (flags2 & RTCP) != 0)); |
| 176 channel1_->SignalMediaMonitor.connect( | 173 channel1_->SignalMediaMonitor.connect( |
| 177 this, &ChannelTest<T>::OnMediaMonitor); | 174 this, &ChannelTest<T>::OnMediaMonitor); |
| 178 channel2_->SignalMediaMonitor.connect( | 175 channel2_->SignalMediaMonitor.connect( |
| 179 this, &ChannelTest<T>::OnMediaMonitor); | 176 this, &ChannelTest<T>::OnMediaMonitor); |
| 180 channel1_->SignalMediaError.connect( | 177 channel1_->SignalMediaError.connect( |
| 181 this, &ChannelTest<T>::OnMediaChannelError); | 178 this, &ChannelTest<T>::OnMediaChannelError); |
| 182 channel2_->SignalMediaError.connect( | 179 channel2_->SignalMediaError.connect( |
| 183 this, &ChannelTest<T>::OnMediaChannelError); | 180 this, &ChannelTest<T>::OnMediaChannelError); |
| 184 channel1_->SignalAutoMuted.connect( | |
| 185 this, &ChannelTest<T>::OnMediaMuted); | |
| 186 if ((flags1 & DTLS) && (flags2 & DTLS)) { | 181 if ((flags1 & DTLS) && (flags2 & DTLS)) { |
| 187 flags1 = (flags1 & ~SECURE); | 182 flags1 = (flags1 & ~SECURE); |
| 188 flags2 = (flags2 & ~SECURE); | 183 flags2 = (flags2 & ~SECURE); |
| 189 } | 184 } |
| 190 CreateContent(flags1, kPcmuCodec, kH264Codec, | 185 CreateContent(flags1, kPcmuCodec, kH264Codec, |
| 191 &local_media_content1_); | 186 &local_media_content1_); |
| 192 CreateContent(flags2, kPcmuCodec, kH264Codec, | 187 CreateContent(flags2, kPcmuCodec, kH264Codec, |
| 193 &local_media_content2_); | 188 &local_media_content2_); |
| 194 CopyContent(local_media_content1_, &remote_media_content1_); | 189 CopyContent(local_media_content1_, &remote_media_content1_); |
| 195 CopyContent(local_media_content2_, &remote_media_content2_); | 190 CopyContent(local_media_content2_, &remote_media_content2_); |
| (...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 520 } | 515 } |
| 521 } | 516 } |
| 522 | 517 |
| 523 void OnMediaChannelError(typename T::Channel* channel, | 518 void OnMediaChannelError(typename T::Channel* channel, |
| 524 uint32 ssrc, | 519 uint32 ssrc, |
| 525 typename T::MediaChannel::Error error) { | 520 typename T::MediaChannel::Error error) { |
| 526 ssrc_ = ssrc; | 521 ssrc_ = ssrc; |
| 527 error_ = error; | 522 error_ = error; |
| 528 } | 523 } |
| 529 | 524 |
| 530 void OnMediaMuted(cricket::BaseChannel* channel, bool muted) { | |
| 531 mute_callback_recved_ = true; | |
| 532 mute_callback_value_ = muted; | |
| 533 } | |
| 534 | |
| 535 void AddLegacyStreamInContent(uint32 ssrc, int flags, | 525 void AddLegacyStreamInContent(uint32 ssrc, int flags, |
| 536 typename T::Content* content) { | 526 typename T::Content* content) { |
| 537 // Base implementation. | 527 // Base implementation. |
| 538 } | 528 } |
| 539 | 529 |
| 540 // Tests that can be used by derived classes. | 530 // Tests that can be used by derived classes. |
| 541 | 531 |
| 542 // Basic sanity check. | 532 // Basic sanity check. |
| 543 void TestInit() { | 533 void TestInit() { |
| 544 CreateChannels(0, 0); | 534 CreateChannels(0, 0); |
| (...skipping 1246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1791 rtc::scoped_ptr<typename T::Channel> channel2_; | 1781 rtc::scoped_ptr<typename T::Channel> channel2_; |
| 1792 typename T::Content local_media_content1_; | 1782 typename T::Content local_media_content1_; |
| 1793 typename T::Content local_media_content2_; | 1783 typename T::Content local_media_content2_; |
| 1794 typename T::Content remote_media_content1_; | 1784 typename T::Content remote_media_content1_; |
| 1795 typename T::Content remote_media_content2_; | 1785 typename T::Content remote_media_content2_; |
| 1796 // The RTP and RTCP packets to send in the tests. | 1786 // The RTP and RTCP packets to send in the tests. |
| 1797 std::string rtp_packet_; | 1787 std::string rtp_packet_; |
| 1798 std::string rtcp_packet_; | 1788 std::string rtcp_packet_; |
| 1799 int media_info_callbacks1_; | 1789 int media_info_callbacks1_; |
| 1800 int media_info_callbacks2_; | 1790 int media_info_callbacks2_; |
| 1801 bool mute_callback_recved_; | |
| 1802 bool mute_callback_value_; | |
| 1803 | 1791 |
| 1804 uint32 ssrc_; | 1792 uint32 ssrc_; |
| 1805 typename T::MediaChannel::Error error_; | 1793 typename T::MediaChannel::Error error_; |
| 1806 }; | 1794 }; |
| 1807 | 1795 |
| 1808 | 1796 |
| 1809 template<> | 1797 template<> |
| 1810 void ChannelTest<VoiceTraits>::CreateContent( | 1798 void ChannelTest<VoiceTraits>::CreateContent( |
| 1811 int flags, | 1799 int flags, |
| 1812 const cricket::AudioCodec& audio_codec, | 1800 const cricket::AudioCodec& audio_codec, |
| (...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2125 | 2113 |
| 2126 TEST_F(VoiceChannelTest, TestMediaMonitor) { | 2114 TEST_F(VoiceChannelTest, TestMediaMonitor) { |
| 2127 Base::TestMediaMonitor(); | 2115 Base::TestMediaMonitor(); |
| 2128 } | 2116 } |
| 2129 | 2117 |
| 2130 // Test that MuteStream properly forwards to the media channel and does | 2118 // Test that MuteStream properly forwards to the media channel and does |
| 2131 // not signal. | 2119 // not signal. |
| 2132 TEST_F(VoiceChannelTest, TestVoiceSpecificMuteStream) { | 2120 TEST_F(VoiceChannelTest, TestVoiceSpecificMuteStream) { |
| 2133 CreateChannels(0, 0); | 2121 CreateChannels(0, 0); |
| 2134 EXPECT_FALSE(media_channel1_->IsStreamMuted(0)); | 2122 EXPECT_FALSE(media_channel1_->IsStreamMuted(0)); |
| 2135 EXPECT_FALSE(mute_callback_recved_); | |
| 2136 EXPECT_TRUE(channel1_->MuteStream(0, true)); | 2123 EXPECT_TRUE(channel1_->MuteStream(0, true)); |
| 2137 EXPECT_TRUE(media_channel1_->IsStreamMuted(0)); | 2124 EXPECT_TRUE(media_channel1_->IsStreamMuted(0)); |
| 2138 EXPECT_FALSE(mute_callback_recved_); | |
| 2139 EXPECT_TRUE(channel1_->MuteStream(0, false)); | 2125 EXPECT_TRUE(channel1_->MuteStream(0, false)); |
| 2140 EXPECT_FALSE(media_channel1_->IsStreamMuted(0)); | 2126 EXPECT_FALSE(media_channel1_->IsStreamMuted(0)); |
| 2141 EXPECT_FALSE(mute_callback_recved_); | |
| 2142 } | |
| 2143 | |
| 2144 // Test that keyboard automute works correctly and signals upwards. | |
| 2145 TEST_F(VoiceChannelTest, DISABLED_TestKeyboardMute) { | |
| 2146 CreateChannels(0, 0); | |
| 2147 EXPECT_FALSE(media_channel1_->IsStreamMuted(0)); | |
| 2148 EXPECT_EQ(cricket::VoiceMediaChannel::ERROR_NONE, error_); | |
| 2149 | |
| 2150 cricket::VoiceMediaChannel::Error e = | |
| 2151 cricket::VoiceMediaChannel::ERROR_REC_TYPING_NOISE_DETECTED; | |
| 2152 | |
| 2153 // Typing doesn't mute automatically unless typing monitor has been installed | |
| 2154 media_channel1_->TriggerError(0, e); | |
| 2155 rtc::Thread::Current()->ProcessMessages(0); | |
| 2156 EXPECT_EQ(e, error_); | |
| 2157 EXPECT_FALSE(media_channel1_->IsStreamMuted(0)); | |
| 2158 EXPECT_FALSE(mute_callback_recved_); | |
| 2159 | |
| 2160 cricket::TypingMonitorOptions o = {0}; | |
| 2161 o.mute_period = 1500; | |
| 2162 channel1_->StartTypingMonitor(o); | |
| 2163 media_channel1_->TriggerError(0, e); | |
| 2164 rtc::Thread::Current()->ProcessMessages(0); | |
| 2165 EXPECT_TRUE(media_channel1_->IsStreamMuted(0)); | |
| 2166 EXPECT_TRUE(mute_callback_recved_); | |
| 2167 } | 2127 } |
| 2168 | 2128 |
| 2169 // Test that PressDTMF properly forwards to the media channel. | 2129 // Test that PressDTMF properly forwards to the media channel. |
| 2170 TEST_F(VoiceChannelTest, TestDtmf) { | 2130 TEST_F(VoiceChannelTest, TestDtmf) { |
| 2171 CreateChannels(0, 0); | 2131 CreateChannels(0, 0); |
| 2172 EXPECT_TRUE(SendInitiate()); | 2132 EXPECT_TRUE(SendInitiate()); |
| 2173 EXPECT_TRUE(SendAccept()); | 2133 EXPECT_TRUE(SendAccept()); |
| 2174 EXPECT_EQ(0U, media_channel1_->dtmf_info_queue().size()); | 2134 EXPECT_EQ(0U, media_channel1_->dtmf_info_queue().size()); |
| 2175 | 2135 |
| 2176 EXPECT_TRUE(channel1_->PressDTMF(1, true)); | 2136 EXPECT_TRUE(channel1_->PressDTMF(1, true)); |
| (...skipping 699 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2876 }; | 2836 }; |
| 2877 rtc::Buffer payload(data, 3); | 2837 rtc::Buffer payload(data, 3); |
| 2878 cricket::SendDataResult result; | 2838 cricket::SendDataResult result; |
| 2879 ASSERT_TRUE(media_channel1_->SendData(params, payload, &result)); | 2839 ASSERT_TRUE(media_channel1_->SendData(params, payload, &result)); |
| 2880 EXPECT_EQ(params.ssrc, | 2840 EXPECT_EQ(params.ssrc, |
| 2881 media_channel1_->last_sent_data_params().ssrc); | 2841 media_channel1_->last_sent_data_params().ssrc); |
| 2882 EXPECT_EQ("foo", media_channel1_->last_sent_data()); | 2842 EXPECT_EQ("foo", media_channel1_->last_sent_data()); |
| 2883 } | 2843 } |
| 2884 | 2844 |
| 2885 // TODO(pthatcher): TestSetReceiver? | 2845 // TODO(pthatcher): TestSetReceiver? |
| OLD | NEW |