Chromium Code Reviews| 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 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 132 const uint8* rtcp_data, | 132 const uint8* rtcp_data, |
| 133 int rtcp_len) | 133 int rtcp_len) |
| 134 : verify_playout_(verify_playout), | 134 : verify_playout_(verify_playout), |
| 135 transport_controller1_(cricket::ICEROLE_CONTROLLING), | 135 transport_controller1_(cricket::ICEROLE_CONTROLLING), |
| 136 transport_controller2_(cricket::ICEROLE_CONTROLLED), | 136 transport_controller2_(cricket::ICEROLE_CONTROLLED), |
| 137 media_channel1_(NULL), | 137 media_channel1_(NULL), |
| 138 media_channel2_(NULL), | 138 media_channel2_(NULL), |
| 139 rtp_packet_(reinterpret_cast<const char*>(rtp_data), rtp_len), | 139 rtp_packet_(reinterpret_cast<const char*>(rtp_data), rtp_len), |
| 140 rtcp_packet_(reinterpret_cast<const char*>(rtcp_data), rtcp_len), | 140 rtcp_packet_(reinterpret_cast<const char*>(rtcp_data), rtcp_len), |
| 141 media_info_callbacks1_(), | 141 media_info_callbacks1_(), |
| 142 media_info_callbacks2_(), | 142 media_info_callbacks2_() {} |
| 143 ssrc_(0), | |
| 144 error_(T::MediaChannel::ERROR_NONE) {} | |
| 145 | 143 |
| 146 void CreateChannels(int flags1, int flags2) { | 144 void CreateChannels(int flags1, int flags2) { |
| 147 CreateChannels(new typename T::MediaChannel(NULL, typename T::Options()), | 145 CreateChannels(new typename T::MediaChannel(NULL, typename T::Options()), |
| 148 new typename T::MediaChannel(NULL, typename T::Options()), | 146 new typename T::MediaChannel(NULL, typename T::Options()), |
| 149 flags1, flags2, rtc::Thread::Current()); | 147 flags1, flags2, rtc::Thread::Current()); |
| 150 } | 148 } |
| 151 void CreateChannels( | 149 void CreateChannels( |
| 152 typename T::MediaChannel* ch1, typename T::MediaChannel* ch2, | 150 typename T::MediaChannel* ch1, typename T::MediaChannel* ch2, |
| 153 int flags1, int flags2, rtc::Thread* thread) { | 151 int flags1, int flags2, rtc::Thread* thread) { |
| 154 media_channel1_ = ch1; | 152 media_channel1_ = ch1; |
| 155 media_channel2_ = ch2; | 153 media_channel2_ = ch2; |
| 156 channel1_.reset(CreateChannel(thread, &media_engine_, ch1, | 154 channel1_.reset(CreateChannel(thread, &media_engine_, ch1, |
| 157 &transport_controller1_, | 155 &transport_controller1_, |
| 158 (flags1 & RTCP) != 0)); | 156 (flags1 & RTCP) != 0)); |
| 159 channel2_.reset(CreateChannel(thread, &media_engine_, ch2, | 157 channel2_.reset(CreateChannel(thread, &media_engine_, ch2, |
| 160 &transport_controller2_, | 158 &transport_controller2_, |
| 161 (flags2 & RTCP) != 0)); | 159 (flags2 & RTCP) != 0)); |
| 162 channel1_->SignalMediaMonitor.connect( | 160 channel1_->SignalMediaMonitor.connect( |
| 163 this, &ChannelTest<T>::OnMediaMonitor); | 161 this, &ChannelTest<T>::OnMediaMonitor); |
| 164 channel2_->SignalMediaMonitor.connect( | 162 channel2_->SignalMediaMonitor.connect( |
| 165 this, &ChannelTest<T>::OnMediaMonitor); | 163 this, &ChannelTest<T>::OnMediaMonitor); |
| 166 channel1_->SignalMediaError.connect( | |
| 167 this, &ChannelTest<T>::OnMediaChannelError); | |
| 168 channel2_->SignalMediaError.connect( | |
| 169 this, &ChannelTest<T>::OnMediaChannelError); | |
| 170 if ((flags1 & DTLS) && (flags2 & DTLS)) { | 164 if ((flags1 & DTLS) && (flags2 & DTLS)) { |
| 171 flags1 = (flags1 & ~SECURE); | 165 flags1 = (flags1 & ~SECURE); |
| 172 flags2 = (flags2 & ~SECURE); | 166 flags2 = (flags2 & ~SECURE); |
| 173 } | 167 } |
| 174 CreateContent(flags1, kPcmuCodec, kH264Codec, | 168 CreateContent(flags1, kPcmuCodec, kH264Codec, |
| 175 &local_media_content1_); | 169 &local_media_content1_); |
| 176 CreateContent(flags2, kPcmuCodec, kH264Codec, | 170 CreateContent(flags2, kPcmuCodec, kH264Codec, |
| 177 &local_media_content2_); | 171 &local_media_content2_); |
| 178 CopyContent(local_media_content1_, &remote_media_content1_); | 172 CopyContent(local_media_content1_, &remote_media_content1_); |
| 179 CopyContent(local_media_content2_, &remote_media_content2_); | 173 CopyContent(local_media_content2_, &remote_media_content2_); |
| (...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 465 | 459 |
| 466 void OnMediaMonitor(typename T::Channel* channel, | 460 void OnMediaMonitor(typename T::Channel* channel, |
| 467 const typename T::MediaInfo& info) { | 461 const typename T::MediaInfo& info) { |
| 468 if (channel == channel1_.get()) { | 462 if (channel == channel1_.get()) { |
| 469 media_info_callbacks1_++; | 463 media_info_callbacks1_++; |
| 470 } else if (channel == channel2_.get()) { | 464 } else if (channel == channel2_.get()) { |
| 471 media_info_callbacks2_++; | 465 media_info_callbacks2_++; |
| 472 } | 466 } |
| 473 } | 467 } |
| 474 | 468 |
| 475 void OnMediaChannelError(typename T::Channel* channel, | |
| 476 uint32 ssrc, | |
| 477 typename T::MediaChannel::Error error) { | |
| 478 ssrc_ = ssrc; | |
| 479 error_ = error; | |
| 480 } | |
| 481 | |
| 482 void AddLegacyStreamInContent(uint32 ssrc, int flags, | 469 void AddLegacyStreamInContent(uint32 ssrc, int flags, |
| 483 typename T::Content* content) { | 470 typename T::Content* content) { |
| 484 // Base implementation. | 471 // Base implementation. |
| 485 } | 472 } |
| 486 | 473 |
| 487 // Tests that can be used by derived classes. | 474 // Tests that can be used by derived classes. |
| 488 | 475 |
| 489 // Basic sanity check. | 476 // Basic sanity check. |
| 490 void TestInit() { | 477 void TestInit() { |
| 491 CreateChannels(0, 0); | 478 CreateChannels(0, 0); |
| (...skipping 1178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1670 EXPECT_TRUE(send_rtcp1); | 1657 EXPECT_TRUE(send_rtcp1); |
| 1671 // The sending message is only posted. channel2_ should be empty. | 1658 // The sending message is only posted. channel2_ should be empty. |
| 1672 EXPECT_TRUE(CheckNoRtcp2()); | 1659 EXPECT_TRUE(CheckNoRtcp2()); |
| 1673 | 1660 |
| 1674 // When channel1_ is deleted, the RTCP packet should be sent out to | 1661 // When channel1_ is deleted, the RTCP packet should be sent out to |
| 1675 // channel2_. | 1662 // channel2_. |
| 1676 channel1_.reset(); | 1663 channel1_.reset(); |
| 1677 EXPECT_TRUE(CheckRtcp2()); | 1664 EXPECT_TRUE(CheckRtcp2()); |
| 1678 } | 1665 } |
| 1679 | 1666 |
| 1680 void TestChangeStateError() { | |
| 1681 CreateChannels(RTCP, RTCP); | |
| 1682 EXPECT_TRUE(SendInitiate()); | |
| 1683 media_channel2_->set_fail_set_send(true); | |
| 1684 EXPECT_TRUE(channel2_->Enable(true)); | |
| 1685 EXPECT_EQ(cricket::VoiceMediaChannel::ERROR_REC_DEVICE_OPEN_FAILED, | |
| 1686 error_); | |
| 1687 } | |
| 1688 | |
| 1689 void TestSrtpError(int pl_type) { | 1667 void TestSrtpError(int pl_type) { |
| 1690 // For Audio, only pl_type 0 is added to the bundle filter. | 1668 // For Audio, only pl_type 0 is added to the bundle filter. |
| 1691 // For Video, only pl_type 97 is added to the bundle filter. | 1669 // For Video, only pl_type 97 is added to the bundle filter. |
| 1692 // So we need to pass in pl_type so that the packet can pass through | 1670 // So we need to pass in pl_type so that the packet can pass through |
| 1693 // the bundle filter before it can be processed by the srtp filter. | 1671 // the bundle filter before it can be processed by the srtp filter. |
| 1694 // The packet is not a valid srtp packet because it is too short. | 1672 // The packet is not a valid srtp packet because it is too short. |
| 1695 unsigned const char kBadPacket[] = {0x84, | 1673 unsigned const char kBadPacket[] = {0x84, |
| 1696 static_cast<unsigned char>(pl_type), | 1674 static_cast<unsigned char>(pl_type), |
| 1697 0x00, | 1675 0x00, |
| 1698 0x01, | 1676 0x01, |
| 1699 0x00, | 1677 0x00, |
| 1700 0x00, | 1678 0x00, |
| 1701 0x00, | 1679 0x00, |
| 1702 0x00, | 1680 0x00, |
| 1703 0x00, | 1681 0x00, |
| 1704 0x00, | 1682 0x00, |
| 1705 0x00, | 1683 0x00, |
| 1706 0x01}; | 1684 0x01}; |
| 1707 CreateChannels(RTCP | SECURE, RTCP | SECURE); | 1685 CreateChannels(RTCP | SECURE, RTCP | SECURE); |
| 1708 EXPECT_FALSE(channel1_->secure()); | 1686 EXPECT_FALSE(channel1_->secure()); |
| 1709 EXPECT_FALSE(channel2_->secure()); | 1687 EXPECT_FALSE(channel2_->secure()); |
| 1710 EXPECT_TRUE(SendInitiate()); | 1688 EXPECT_TRUE(SendInitiate()); |
| 1711 EXPECT_TRUE(SendAccept()); | 1689 EXPECT_TRUE(SendAccept()); |
| 1712 EXPECT_TRUE(channel1_->secure()); | 1690 EXPECT_TRUE(channel1_->secure()); |
| 1713 EXPECT_TRUE(channel2_->secure()); | 1691 EXPECT_TRUE(channel2_->secure()); |
| 1714 channel2_->set_srtp_signal_silent_time(200); | 1692 channel2_->set_srtp_signal_silent_time(200); |
| 1715 | 1693 |
| 1716 // Testing failures in sending packets. | 1694 // Testing failures in sending packets. |
| 1717 EXPECT_FALSE(media_channel2_->SendRtp(kBadPacket, sizeof(kBadPacket))); | 1695 EXPECT_FALSE(media_channel2_->SendRtp(kBadPacket, sizeof(kBadPacket))); |
| 1718 // The first failure will trigger an error. | |
| 1719 EXPECT_EQ_WAIT(T::MediaChannel::ERROR_REC_SRTP_ERROR, error_, 500); | |
| 1720 error_ = T::MediaChannel::ERROR_NONE; | |
| 1721 // The next 1 sec failures will not trigger an error. | 1696 // The next 1 sec failures will not trigger an error. |
| 1722 EXPECT_FALSE(media_channel2_->SendRtp(kBadPacket, sizeof(kBadPacket))); | 1697 EXPECT_FALSE(media_channel2_->SendRtp(kBadPacket, sizeof(kBadPacket))); |
| 1723 // Wait for a while to ensure no message comes in. | 1698 // Wait for a while to ensure no message comes in. |
| 1724 rtc::Thread::Current()->ProcessMessages(210); | 1699 rtc::Thread::Current()->ProcessMessages(210); |
| 1725 EXPECT_EQ(T::MediaChannel::ERROR_NONE, error_); | |
| 1726 // The error will be triggered again. | 1700 // The error will be triggered again. |
| 1727 EXPECT_FALSE(media_channel2_->SendRtp(kBadPacket, sizeof(kBadPacket))); | 1701 EXPECT_FALSE(media_channel2_->SendRtp(kBadPacket, sizeof(kBadPacket))); |
| 1728 EXPECT_EQ_WAIT(T::MediaChannel::ERROR_REC_SRTP_ERROR, error_, 500); | |
| 1729 | 1702 |
| 1730 // Testing failures in receiving packets. | 1703 // Testing failures in receiving packets. |
| 1731 error_ = T::MediaChannel::ERROR_NONE; | 1704 // TODO(solenberg): !!!!! |
|
pthatcher1
2015/09/25 17:18:52
You're going to fix this right?
| |
| 1732 cricket::TransportChannel* transport_channel = | 1705 // cricket::TransportChannel* transport_channel = |
| 1733 channel2_->transport_channel(); | 1706 // channel2_->transport_channel(); |
| 1734 transport_channel->SignalReadPacket( | 1707 // transport_channel->SignalReadPacket( |
| 1735 transport_channel, reinterpret_cast<const char*>(kBadPacket), | 1708 // transport_channel, reinterpret_cast<const char*>(kBadPacket), |
| 1736 sizeof(kBadPacket), rtc::PacketTime(), 0); | 1709 // sizeof(kBadPacket), rtc::PacketTime(), 0); |
| 1737 EXPECT_EQ_WAIT(T::MediaChannel::ERROR_PLAY_SRTP_ERROR, error_, 500); | 1710 // EXPECT_EQ_WAIT(T::MediaChannel::ERROR_PLAY_SRTP_ERROR, error_, 500); |
| 1738 } | 1711 } |
| 1739 | 1712 |
| 1740 void TestOnReadyToSend() { | 1713 void TestOnReadyToSend() { |
| 1741 CreateChannels(RTCP, RTCP); | 1714 CreateChannels(RTCP, RTCP); |
| 1742 TransportChannel* rtp = channel1_->transport_channel(); | 1715 TransportChannel* rtp = channel1_->transport_channel(); |
| 1743 TransportChannel* rtcp = channel1_->rtcp_transport_channel(); | 1716 TransportChannel* rtcp = channel1_->rtcp_transport_channel(); |
| 1744 EXPECT_FALSE(media_channel1_->ready_to_send()); | 1717 EXPECT_FALSE(media_channel1_->ready_to_send()); |
| 1745 rtp->SignalReadyToSend(rtp); | 1718 rtp->SignalReadyToSend(rtp); |
| 1746 EXPECT_FALSE(media_channel1_->ready_to_send()); | 1719 EXPECT_FALSE(media_channel1_->ready_to_send()); |
| 1747 rtcp->SignalReadyToSend(rtcp); | 1720 rtcp->SignalReadyToSend(rtcp); |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1795 rtc::scoped_ptr<typename T::Channel> channel2_; | 1768 rtc::scoped_ptr<typename T::Channel> channel2_; |
| 1796 typename T::Content local_media_content1_; | 1769 typename T::Content local_media_content1_; |
| 1797 typename T::Content local_media_content2_; | 1770 typename T::Content local_media_content2_; |
| 1798 typename T::Content remote_media_content1_; | 1771 typename T::Content remote_media_content1_; |
| 1799 typename T::Content remote_media_content2_; | 1772 typename T::Content remote_media_content2_; |
| 1800 // The RTP and RTCP packets to send in the tests. | 1773 // The RTP and RTCP packets to send in the tests. |
| 1801 std::string rtp_packet_; | 1774 std::string rtp_packet_; |
| 1802 std::string rtcp_packet_; | 1775 std::string rtcp_packet_; |
| 1803 int media_info_callbacks1_; | 1776 int media_info_callbacks1_; |
| 1804 int media_info_callbacks2_; | 1777 int media_info_callbacks2_; |
| 1805 | |
| 1806 uint32 ssrc_; | |
| 1807 typename T::MediaChannel::Error error_; | |
| 1808 }; | 1778 }; |
| 1809 | 1779 |
| 1810 template<> | 1780 template<> |
| 1811 void ChannelTest<VoiceTraits>::CreateContent( | 1781 void ChannelTest<VoiceTraits>::CreateContent( |
| 1812 int flags, | 1782 int flags, |
| 1813 const cricket::AudioCodec& audio_codec, | 1783 const cricket::AudioCodec& audio_codec, |
| 1814 const cricket::VideoCodec& video_codec, | 1784 const cricket::VideoCodec& video_codec, |
| 1815 cricket::AudioContentDescription* audio) { | 1785 cricket::AudioContentDescription* audio) { |
| 1816 audio->AddCodec(audio_codec); | 1786 audio->AddCodec(audio_codec); |
| 1817 audio->set_rtcp_mux((flags & RTCP_MUX) != 0); | 1787 audio->set_rtcp_mux((flags & RTCP_MUX) != 0); |
| (...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2161 } | 2131 } |
| 2162 | 2132 |
| 2163 TEST_F(VoiceChannelTest, TestReceivePrAnswer) { | 2133 TEST_F(VoiceChannelTest, TestReceivePrAnswer) { |
| 2164 Base::TestReceivePrAnswer(); | 2134 Base::TestReceivePrAnswer(); |
| 2165 } | 2135 } |
| 2166 | 2136 |
| 2167 TEST_F(VoiceChannelTest, TestFlushRtcp) { | 2137 TEST_F(VoiceChannelTest, TestFlushRtcp) { |
| 2168 Base::TestFlushRtcp(); | 2138 Base::TestFlushRtcp(); |
| 2169 } | 2139 } |
| 2170 | 2140 |
| 2171 TEST_F(VoiceChannelTest, TestChangeStateError) { | |
| 2172 Base::TestChangeStateError(); | |
| 2173 } | |
| 2174 | |
| 2175 TEST_F(VoiceChannelTest, TestSrtpError) { | 2141 TEST_F(VoiceChannelTest, TestSrtpError) { |
| 2176 Base::TestSrtpError(kAudioPts[0]); | 2142 Base::TestSrtpError(kAudioPts[0]); |
| 2177 } | 2143 } |
| 2178 | 2144 |
| 2179 TEST_F(VoiceChannelTest, TestOnReadyToSend) { | 2145 TEST_F(VoiceChannelTest, TestOnReadyToSend) { |
| 2180 Base::TestOnReadyToSend(); | 2146 Base::TestOnReadyToSend(); |
| 2181 } | 2147 } |
| 2182 | 2148 |
| 2183 TEST_F(VoiceChannelTest, TestOnReadyToSendWithRtcpMux) { | 2149 TEST_F(VoiceChannelTest, TestOnReadyToSendWithRtcpMux) { |
| 2184 Base::TestOnReadyToSendWithRtcpMux(); | 2150 Base::TestOnReadyToSendWithRtcpMux(); |
| (...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2517 TEST_F(VideoChannelTest, SendBundleToBundleWithRtcpMux) { | 2483 TEST_F(VideoChannelTest, SendBundleToBundleWithRtcpMux) { |
| 2518 Base::SendBundleToBundle( | 2484 Base::SendBundleToBundle( |
| 2519 kVideoPts, ARRAY_SIZE(kVideoPts), true, false); | 2485 kVideoPts, ARRAY_SIZE(kVideoPts), true, false); |
| 2520 } | 2486 } |
| 2521 | 2487 |
| 2522 TEST_F(VideoChannelTest, SendBundleToBundleWithRtcpMuxSecure) { | 2488 TEST_F(VideoChannelTest, SendBundleToBundleWithRtcpMuxSecure) { |
| 2523 Base::SendBundleToBundle( | 2489 Base::SendBundleToBundle( |
| 2524 kVideoPts, ARRAY_SIZE(kVideoPts), true, true); | 2490 kVideoPts, ARRAY_SIZE(kVideoPts), true, true); |
| 2525 } | 2491 } |
| 2526 | 2492 |
| 2527 // TODO(gangji): Add VideoChannelTest.TestChangeStateError. | |
| 2528 | |
| 2529 TEST_F(VideoChannelTest, TestSrtpError) { | 2493 TEST_F(VideoChannelTest, TestSrtpError) { |
| 2530 Base::TestSrtpError(kVideoPts[0]); | 2494 Base::TestSrtpError(kVideoPts[0]); |
| 2531 } | 2495 } |
| 2532 | 2496 |
| 2533 TEST_F(VideoChannelTest, TestOnReadyToSend) { | 2497 TEST_F(VideoChannelTest, TestOnReadyToSend) { |
| 2534 Base::TestOnReadyToSend(); | 2498 Base::TestOnReadyToSend(); |
| 2535 } | 2499 } |
| 2536 | 2500 |
| 2537 TEST_F(VideoChannelTest, TestOnReadyToSendWithRtcpMux) { | 2501 TEST_F(VideoChannelTest, TestOnReadyToSendWithRtcpMux) { |
| 2538 Base::TestOnReadyToSendWithRtcpMux(); | 2502 Base::TestOnReadyToSendWithRtcpMux(); |
| (...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2802 }; | 2766 }; |
| 2803 rtc::Buffer payload(data, 3); | 2767 rtc::Buffer payload(data, 3); |
| 2804 cricket::SendDataResult result; | 2768 cricket::SendDataResult result; |
| 2805 ASSERT_TRUE(media_channel1_->SendData(params, payload, &result)); | 2769 ASSERT_TRUE(media_channel1_->SendData(params, payload, &result)); |
| 2806 EXPECT_EQ(params.ssrc, | 2770 EXPECT_EQ(params.ssrc, |
| 2807 media_channel1_->last_sent_data_params().ssrc); | 2771 media_channel1_->last_sent_data_params().ssrc); |
| 2808 EXPECT_EQ("foo", media_channel1_->last_sent_data()); | 2772 EXPECT_EQ("foo", media_channel1_->last_sent_data()); |
| 2809 } | 2773 } |
| 2810 | 2774 |
| 2811 // TODO(pthatcher): TestSetReceiver? | 2775 // TODO(pthatcher): TestSetReceiver? |
| OLD | NEW |