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 15 matching lines...) Expand all Loading... |
26 */ | 26 */ |
27 | 27 |
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/faketransportcontroller.h" | 36 #include "talk/media/webrtc/fakewebrtccall.h" |
| 37 #include "talk/app/webrtc/fakemediacontroller.h" |
37 #include "talk/session/media/channel.h" | 38 #include "talk/session/media/channel.h" |
38 #include "webrtc/base/fileutils.h" | 39 #include "webrtc/base/fileutils.h" |
39 #include "webrtc/base/gunit.h" | 40 #include "webrtc/base/gunit.h" |
40 #include "webrtc/base/helpers.h" | 41 #include "webrtc/base/helpers.h" |
41 #include "webrtc/base/logging.h" | 42 #include "webrtc/base/logging.h" |
42 #include "webrtc/base/pathutils.h" | 43 #include "webrtc/base/pathutils.h" |
43 #include "webrtc/base/signalthread.h" | 44 #include "webrtc/base/signalthread.h" |
44 #include "webrtc/base/ssladapter.h" | 45 #include "webrtc/base/ssladapter.h" |
45 #include "webrtc/base/sslidentity.h" | 46 #include "webrtc/base/sslidentity.h" |
46 #include "webrtc/base/window.h" | 47 #include "webrtc/base/window.h" |
| 48 #include "webrtc/p2p/base/faketransportcontroller.h" |
47 | 49 |
48 #define MAYBE_SKIP_TEST(feature) \ | 50 #define MAYBE_SKIP_TEST(feature) \ |
49 if (!(rtc::SSLStreamAdapter::feature())) { \ | 51 if (!(rtc::SSLStreamAdapter::feature())) { \ |
50 LOG(LS_INFO) << "Feature disabled... skipping"; \ | 52 LOG(LS_INFO) << "Feature disabled... skipping"; \ |
51 return; \ | 53 return; \ |
52 } | 54 } |
53 | 55 |
54 using cricket::CA_OFFER; | 56 using cricket::CA_OFFER; |
55 using cricket::CA_PRANSWER; | 57 using cricket::CA_PRANSWER; |
56 using cricket::CA_ANSWER; | 58 using cricket::CA_ANSWER; |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
127 DTLS = 0x10 }; | 129 DTLS = 0x10 }; |
128 | 130 |
129 ChannelTest(bool verify_playout, | 131 ChannelTest(bool verify_playout, |
130 const uint8* rtp_data, | 132 const uint8* rtp_data, |
131 int rtp_len, | 133 int rtp_len, |
132 const uint8* rtcp_data, | 134 const uint8* rtcp_data, |
133 int rtcp_len) | 135 int rtcp_len) |
134 : verify_playout_(verify_playout), | 136 : verify_playout_(verify_playout), |
135 transport_controller1_(cricket::ICEROLE_CONTROLLING), | 137 transport_controller1_(cricket::ICEROLE_CONTROLLING), |
136 transport_controller2_(cricket::ICEROLE_CONTROLLED), | 138 transport_controller2_(cricket::ICEROLE_CONTROLLED), |
| 139 call_(webrtc::Call::Config()), |
| 140 media_controller_(&call_), |
137 media_channel1_(NULL), | 141 media_channel1_(NULL), |
138 media_channel2_(NULL), | 142 media_channel2_(NULL), |
139 rtp_packet_(reinterpret_cast<const char*>(rtp_data), rtp_len), | 143 rtp_packet_(reinterpret_cast<const char*>(rtp_data), rtp_len), |
140 rtcp_packet_(reinterpret_cast<const char*>(rtcp_data), rtcp_len), | 144 rtcp_packet_(reinterpret_cast<const char*>(rtcp_data), rtcp_len), |
141 media_info_callbacks1_(), | 145 media_info_callbacks1_(), |
142 media_info_callbacks2_() {} | 146 media_info_callbacks2_() {} |
143 | 147 |
144 void CreateChannels(int flags1, int flags2) { | 148 void CreateChannels(int flags1, int flags2) { |
145 CreateChannels(new typename T::MediaChannel(NULL, typename T::Options()), | 149 CreateChannels(new typename T::MediaChannel(NULL, typename T::Options()), |
146 new typename T::MediaChannel(NULL, typename T::Options()), | 150 new typename T::MediaChannel(NULL, typename T::Options()), |
147 flags1, flags2, rtc::Thread::Current()); | 151 flags1, flags2, rtc::Thread::Current()); |
148 } | 152 } |
149 void CreateChannels( | 153 void CreateChannels( |
150 typename T::MediaChannel* ch1, typename T::MediaChannel* ch2, | 154 typename T::MediaChannel* ch1, typename T::MediaChannel* ch2, |
151 int flags1, int flags2, rtc::Thread* thread) { | 155 int flags1, int flags2, rtc::Thread* thread) { |
152 media_channel1_ = ch1; | 156 media_channel1_ = ch1; |
153 media_channel2_ = ch2; | 157 media_channel2_ = ch2; |
154 channel1_.reset(CreateChannel(thread, &media_engine_, ch1, | 158 channel1_.reset(CreateChannel(thread, &media_engine_, ch1, |
155 &transport_controller1_, | 159 &media_controller_, &transport_controller1_, |
156 (flags1 & RTCP) != 0)); | 160 (flags1 & RTCP) != 0)); |
157 channel2_.reset(CreateChannel(thread, &media_engine_, ch2, | 161 channel2_.reset(CreateChannel(thread, &media_engine_, ch2, |
158 &transport_controller2_, | 162 &media_controller_, &transport_controller2_, |
159 (flags2 & RTCP) != 0)); | 163 (flags2 & RTCP) != 0)); |
160 channel1_->SignalMediaMonitor.connect( | 164 channel1_->SignalMediaMonitor.connect( |
161 this, &ChannelTest<T>::OnMediaMonitor); | 165 this, &ChannelTest<T>::OnMediaMonitor); |
162 channel2_->SignalMediaMonitor.connect( | 166 channel2_->SignalMediaMonitor.connect( |
163 this, &ChannelTest<T>::OnMediaMonitor); | 167 this, &ChannelTest<T>::OnMediaMonitor); |
164 if ((flags1 & DTLS) && (flags2 & DTLS)) { | 168 if ((flags1 & DTLS) && (flags2 & DTLS)) { |
165 flags1 = (flags1 & ~SECURE); | 169 flags1 = (flags1 & ~SECURE); |
166 flags2 = (flags2 & ~SECURE); | 170 flags2 = (flags2 & ~SECURE); |
167 } | 171 } |
168 CreateContent(flags1, kPcmuCodec, kH264Codec, | 172 CreateContent(flags1, kPcmuCodec, kH264Codec, |
(...skipping 29 matching lines...) Expand all Loading... |
198 AddLegacyStreamInContent(kSsrc1, flags1, &remote_media_content1_); | 202 AddLegacyStreamInContent(kSsrc1, flags1, &remote_media_content1_); |
199 } | 203 } |
200 if (flags2 & SSRC_MUX) { | 204 if (flags2 & SSRC_MUX) { |
201 AddLegacyStreamInContent(kSsrc2, flags2, &remote_media_content2_); | 205 AddLegacyStreamInContent(kSsrc2, flags2, &remote_media_content2_); |
202 } | 206 } |
203 } | 207 } |
204 typename T::Channel* CreateChannel( | 208 typename T::Channel* CreateChannel( |
205 rtc::Thread* thread, | 209 rtc::Thread* thread, |
206 cricket::MediaEngineInterface* engine, | 210 cricket::MediaEngineInterface* engine, |
207 typename T::MediaChannel* ch, | 211 typename T::MediaChannel* ch, |
| 212 webrtc::MediaControllerInterface* media_controller, |
208 cricket::TransportController* transport_controller, | 213 cricket::TransportController* transport_controller, |
209 bool rtcp) { | 214 bool rtcp) { |
210 typename T::Channel* channel = new typename T::Channel( | 215 typename T::Channel* channel = |
211 thread, engine, ch, transport_controller, cricket::CN_AUDIO, rtcp); | 216 new typename T::Channel(thread, engine, ch, media_controller, |
| 217 transport_controller, cricket::CN_AUDIO, rtcp); |
212 if (!channel->Init()) { | 218 if (!channel->Init()) { |
213 delete channel; | 219 delete channel; |
214 channel = NULL; | 220 channel = NULL; |
215 } | 221 } |
216 return channel; | 222 return channel; |
217 } | 223 } |
218 | 224 |
219 bool SendInitiate() { | 225 bool SendInitiate() { |
220 bool result = channel1_->SetLocalContent(&local_media_content1_, | 226 bool result = channel1_->SetLocalContent(&local_media_content1_, |
221 CA_OFFER, NULL); | 227 CA_OFFER, NULL); |
(...skipping 1560 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1782 EXPECT_FALSE(media_channel1_->ready_to_send()); | 1788 EXPECT_FALSE(media_channel1_->ready_to_send()); |
1783 } | 1789 } |
1784 | 1790 |
1785 protected: | 1791 protected: |
1786 // TODO(pbos): Remove playout from all media channels and let renderers mute | 1792 // TODO(pbos): Remove playout from all media channels and let renderers mute |
1787 // themselves. | 1793 // themselves. |
1788 const bool verify_playout_; | 1794 const bool verify_playout_; |
1789 cricket::FakeTransportController transport_controller1_; | 1795 cricket::FakeTransportController transport_controller1_; |
1790 cricket::FakeTransportController transport_controller2_; | 1796 cricket::FakeTransportController transport_controller2_; |
1791 cricket::FakeMediaEngine media_engine_; | 1797 cricket::FakeMediaEngine media_engine_; |
| 1798 cricket::FakeCall call_; |
| 1799 cricket::FakeMediaController media_controller_; |
1792 // The media channels are owned by the voice channel objects below. | 1800 // The media channels are owned by the voice channel objects below. |
1793 typename T::MediaChannel* media_channel1_; | 1801 typename T::MediaChannel* media_channel1_; |
1794 typename T::MediaChannel* media_channel2_; | 1802 typename T::MediaChannel* media_channel2_; |
1795 rtc::scoped_ptr<typename T::Channel> channel1_; | 1803 rtc::scoped_ptr<typename T::Channel> channel1_; |
1796 rtc::scoped_ptr<typename T::Channel> channel2_; | 1804 rtc::scoped_ptr<typename T::Channel> channel2_; |
1797 typename T::Content local_media_content1_; | 1805 typename T::Content local_media_content1_; |
1798 typename T::Content local_media_content2_; | 1806 typename T::Content local_media_content2_; |
1799 typename T::Content remote_media_content1_; | 1807 typename T::Content remote_media_content1_; |
1800 typename T::Content remote_media_content2_; | 1808 typename T::Content remote_media_content2_; |
1801 // The RTP and RTCP packets to send in the tests. | 1809 // The RTP and RTCP packets to send in the tests. |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1851 kRtcpReport, | 1859 kRtcpReport, |
1852 sizeof(kRtcpReport)) {} | 1860 sizeof(kRtcpReport)) {} |
1853 }; | 1861 }; |
1854 | 1862 |
1855 // override to add NULL parameter | 1863 // override to add NULL parameter |
1856 template <> | 1864 template <> |
1857 cricket::VideoChannel* ChannelTest<VideoTraits>::CreateChannel( | 1865 cricket::VideoChannel* ChannelTest<VideoTraits>::CreateChannel( |
1858 rtc::Thread* thread, | 1866 rtc::Thread* thread, |
1859 cricket::MediaEngineInterface* engine, | 1867 cricket::MediaEngineInterface* engine, |
1860 cricket::FakeVideoMediaChannel* ch, | 1868 cricket::FakeVideoMediaChannel* ch, |
| 1869 webrtc::MediaControllerInterface* media_controller, |
1861 cricket::TransportController* transport_controller, | 1870 cricket::TransportController* transport_controller, |
1862 bool rtcp) { | 1871 bool rtcp) { |
1863 cricket::VideoChannel* channel = new cricket::VideoChannel( | 1872 cricket::VideoChannel* channel = |
1864 thread, ch, transport_controller, cricket::CN_VIDEO, rtcp); | 1873 new cricket::VideoChannel(thread, ch, media_controller, |
| 1874 transport_controller, cricket::CN_VIDEO, rtcp); |
1865 if (!channel->Init()) { | 1875 if (!channel->Init()) { |
1866 delete channel; | 1876 delete channel; |
1867 channel = NULL; | 1877 channel = NULL; |
1868 } | 1878 } |
1869 return channel; | 1879 return channel; |
1870 } | 1880 } |
1871 | 1881 |
1872 // override to add 0 parameter | 1882 // override to add 0 parameter |
1873 template<> | 1883 template<> |
1874 bool ChannelTest<VideoTraits>::AddStream1(int id) { | 1884 bool ChannelTest<VideoTraits>::AddStream1(int id) { |
(...skipping 648 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2523 } | 2533 } |
2524 | 2534 |
2525 TEST_F(VideoChannelTest, TestOnReadyToSend) { | 2535 TEST_F(VideoChannelTest, TestOnReadyToSend) { |
2526 Base::TestOnReadyToSend(); | 2536 Base::TestOnReadyToSend(); |
2527 } | 2537 } |
2528 | 2538 |
2529 TEST_F(VideoChannelTest, TestOnReadyToSendWithRtcpMux) { | 2539 TEST_F(VideoChannelTest, TestOnReadyToSendWithRtcpMux) { |
2530 Base::TestOnReadyToSendWithRtcpMux(); | 2540 Base::TestOnReadyToSendWithRtcpMux(); |
2531 } | 2541 } |
2532 | 2542 |
| 2543 TEST_F(VideoChannelTest, OnSentPacketIsCalled) { |
| 2544 Base::SendRtpToRtp(); |
| 2545 EXPECT_TRUE(call_.on_packet_sent_called()); |
| 2546 } |
| 2547 |
2533 TEST_F(VideoChannelTest, TestApplyViewRequest) { | 2548 TEST_F(VideoChannelTest, TestApplyViewRequest) { |
2534 CreateChannels(0, 0); | 2549 CreateChannels(0, 0); |
2535 cricket::StreamParams stream2; | 2550 cricket::StreamParams stream2; |
2536 stream2.id = "stream2"; | 2551 stream2.id = "stream2"; |
2537 stream2.ssrcs.push_back(2222); | 2552 stream2.ssrcs.push_back(2222); |
2538 local_media_content1_.AddStream(stream2); | 2553 local_media_content1_.AddStream(stream2); |
2539 | 2554 |
2540 EXPECT_TRUE(SendInitiate()); | 2555 EXPECT_TRUE(SendInitiate()); |
2541 EXPECT_TRUE(SendAccept()); | 2556 EXPECT_TRUE(SendAccept()); |
2542 | 2557 |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2605 kRtcpReport, | 2620 kRtcpReport, |
2606 sizeof(kRtcpReport)) {} | 2621 sizeof(kRtcpReport)) {} |
2607 }; | 2622 }; |
2608 | 2623 |
2609 // Override to avoid engine channel parameter. | 2624 // Override to avoid engine channel parameter. |
2610 template <> | 2625 template <> |
2611 cricket::DataChannel* ChannelTest<DataTraits>::CreateChannel( | 2626 cricket::DataChannel* ChannelTest<DataTraits>::CreateChannel( |
2612 rtc::Thread* thread, | 2627 rtc::Thread* thread, |
2613 cricket::MediaEngineInterface* engine, | 2628 cricket::MediaEngineInterface* engine, |
2614 cricket::FakeDataMediaChannel* ch, | 2629 cricket::FakeDataMediaChannel* ch, |
| 2630 webrtc::MediaControllerInterface* media_controller, |
2615 cricket::TransportController* transport_controller, | 2631 cricket::TransportController* transport_controller, |
2616 bool rtcp) { | 2632 bool rtcp) { |
2617 cricket::DataChannel* channel = new cricket::DataChannel( | 2633 cricket::DataChannel* channel = new cricket::DataChannel( |
2618 thread, ch, transport_controller, cricket::CN_DATA, rtcp); | 2634 thread, ch, transport_controller, cricket::CN_DATA, rtcp); |
2619 if (!channel->Init()) { | 2635 if (!channel->Init()) { |
2620 delete channel; | 2636 delete channel; |
2621 channel = NULL; | 2637 channel = NULL; |
2622 } | 2638 } |
2623 return channel; | 2639 return channel; |
2624 } | 2640 } |
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2794 }; | 2810 }; |
2795 rtc::Buffer payload(data, 3); | 2811 rtc::Buffer payload(data, 3); |
2796 cricket::SendDataResult result; | 2812 cricket::SendDataResult result; |
2797 ASSERT_TRUE(media_channel1_->SendData(params, payload, &result)); | 2813 ASSERT_TRUE(media_channel1_->SendData(params, payload, &result)); |
2798 EXPECT_EQ(params.ssrc, | 2814 EXPECT_EQ(params.ssrc, |
2799 media_channel1_->last_sent_data_params().ssrc); | 2815 media_channel1_->last_sent_data_params().ssrc); |
2800 EXPECT_EQ("foo", media_channel1_->last_sent_data()); | 2816 EXPECT_EQ("foo", media_channel1_->last_sent_data()); |
2801 } | 2817 } |
2802 | 2818 |
2803 // TODO(pthatcher): TestSetReceiver? | 2819 // TODO(pthatcher): TestSetReceiver? |
OLD | NEW |