10e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// libjingle 20e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Copyright 2009 Google Inc. 30e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// 40e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Redistribution and use in source and binary forms, with or without 50e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// modification, are permitted provided that the following conditions are met: 60e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// 70e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// 1. Redistributions of source code must retain the above copyright notice, 80e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// this list of conditions and the following disclaimer. 90e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// 2. Redistributions in binary form must reproduce the above copyright notice, 100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// this list of conditions and the following disclaimer in the documentation 110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// and/or other materials provided with the distribution. 120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// 3. The name of the author may not be used to endorse or promote products 130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// derived from this software without specific prior written permission. 140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// 150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/media/base/fakemediaengine.h" 270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/media/base/fakertp.h" 28cf81adffe15fa8ea0f333432e41f6d504148f18abuildbot@webrtc.org#include "talk/media/base/fakescreencapturerfactory.h" 290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/media/base/fakevideocapturer.h" 300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/media/base/mediachannel.h" 310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/media/base/rtpdump.h" 320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/media/base/screencastid.h" 330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/media/base/testutils.h" 340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/p2p/base/fakesession.h" 350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/session/media/channel.h" 360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/session/media/mediamessages.h" 370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/session/media/mediarecorder.h" 380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/session/media/mediasessionclient.h" 390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/session/media/typingmonitor.h" 40c7416745e9d35902e62517d1bddcd546623e1c34buildbot@webrtc.org#include "webrtc/base/fileutils.h" 41c7416745e9d35902e62517d1bddcd546623e1c34buildbot@webrtc.org#include "webrtc/base/gunit.h" 42c7416745e9d35902e62517d1bddcd546623e1c34buildbot@webrtc.org#include "webrtc/base/helpers.h" 43c7416745e9d35902e62517d1bddcd546623e1c34buildbot@webrtc.org#include "webrtc/base/logging.h" 44c7416745e9d35902e62517d1bddcd546623e1c34buildbot@webrtc.org#include "webrtc/base/pathutils.h" 45c7416745e9d35902e62517d1bddcd546623e1c34buildbot@webrtc.org#include "webrtc/base/signalthread.h" 46c7416745e9d35902e62517d1bddcd546623e1c34buildbot@webrtc.org#include "webrtc/base/ssladapter.h" 47c7416745e9d35902e62517d1bddcd546623e1c34buildbot@webrtc.org#include "webrtc/base/sslidentity.h" 48c7416745e9d35902e62517d1bddcd546623e1c34buildbot@webrtc.org#include "webrtc/base/window.h" 490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#define MAYBE_SKIP_TEST(feature) \ 512a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org if (!(rtc::SSLStreamAdapter::feature())) { \ 520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org LOG(LS_INFO) << "Feature disabled... skipping"; \ 530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return; \ 540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgusing cricket::CA_OFFER; 570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgusing cricket::CA_PRANSWER; 580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgusing cricket::CA_ANSWER; 590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgusing cricket::CA_UPDATE; 600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgusing cricket::FakeVoiceMediaChannel; 610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgusing cricket::ScreencastId; 620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgusing cricket::StreamParams; 630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgusing cricket::TransportChannel; 642a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.orgusing rtc::WindowId; 650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgstatic const cricket::AudioCodec kPcmuCodec(0, "PCMU", 64000, 8000, 1, 0); 670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgstatic const cricket::AudioCodec kPcmaCodec(8, "PCMA", 64000, 8000, 1, 0); 680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgstatic const cricket::AudioCodec kIsacCodec(103, "ISAC", 40000, 16000, 1, 0); 690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgstatic const cricket::VideoCodec kH264Codec(97, "H264", 640, 400, 30, 0); 700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgstatic const cricket::VideoCodec kH264SvcCodec(99, "H264-SVC", 320, 200, 15, 0); 710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgstatic const cricket::DataCodec kGoogleDataCodec(101, "google-data", 0); 720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgstatic const uint32 kSsrc1 = 0x1111; 730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgstatic const uint32 kSsrc2 = 0x2222; 740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgstatic const uint32 kSsrc3 = 0x3333; 75907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.orgstatic const int kAudioPts[] = {0, 8}; 76907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.orgstatic const int kVideoPts[] = {97, 99}; 770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgtemplate<class ChannelT, 790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org class MediaChannelT, 800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org class ContentT, 810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org class CodecT, 820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org class MediaInfoT> 830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass Traits { 840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public: 850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typedef ChannelT Channel; 860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typedef MediaChannelT MediaChannel; 870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typedef ContentT Content; 880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typedef CodecT Codec; 890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typedef MediaInfoT MediaInfo; 900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Controls how long we wait for a session to send messages that we 930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// expect, in milliseconds. We put it high to avoid flaky tests. 940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgstatic const int kEventTimeout = 5000; 950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass VoiceTraits : public Traits<cricket::VoiceChannel, 970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::FakeVoiceMediaChannel, 980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::AudioContentDescription, 990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::AudioCodec, 1000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::VoiceMediaInfo> { 1010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 1020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass VideoTraits : public Traits<cricket::VideoChannel, 1040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::FakeVideoMediaChannel, 1050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::VideoContentDescription, 1060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::VideoCodec, 1070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::VideoMediaInfo> { 1080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 1090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass DataTraits : public Traits<cricket::DataChannel, 1110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::FakeDataMediaChannel, 1120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::DataContentDescription, 1130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::DataCodec, 1140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::DataMediaInfo> { 1150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 1160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1182a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.orgrtc::StreamInterface* Open(const std::string& path) { 1192a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org return rtc::Filesystem::OpenFile( 1202a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::Pathname(path), "wb"); 1210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 1220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Base class for Voice/VideoChannel tests 1240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgtemplate<class T> 1250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass ChannelTest : public testing::Test, public sigslot::has_slots<> { 1260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public: 1270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org enum Flags { RTCP = 0x1, RTCP_MUX = 0x2, SECURE = 0x4, SSRC_MUX = 0x8, 1280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org DTLS = 0x10 }; 1290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ChannelTest(const uint8* rtp_data, int rtp_len, 1310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const uint8* rtcp_data, int rtcp_len) 1320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org : session1_(true), 1330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org session2_(false), 1340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org media_channel1_(NULL), 1350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org media_channel2_(NULL), 1360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org rtp_packet_(reinterpret_cast<const char*>(rtp_data), rtp_len), 1370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org rtcp_packet_(reinterpret_cast<const char*>(rtcp_data), rtcp_len), 1380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org media_info_callbacks1_(), 1390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org media_info_callbacks2_(), 1400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org mute_callback_recved_(false), 1410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org mute_callback_value_(false), 1420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ssrc_(0), 1430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org error_(T::MediaChannel::ERROR_NONE) { 1440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static void SetUpTestCase() { 1472a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::InitializeSSL(); 1480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1507162d28d68ad58802a5a52eca0df59150ee7b9d4henrike@webrtc.org static void TearDownTestCase() { 1512a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::CleanupSSL(); 1527162d28d68ad58802a5a52eca0df59150ee7b9d4henrike@webrtc.org } 1537162d28d68ad58802a5a52eca0df59150ee7b9d4henrike@webrtc.org 1540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void CreateChannels(int flags1, int flags2) { 1550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(new typename T::MediaChannel(NULL), 1560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org new typename T::MediaChannel(NULL), 1572a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org flags1, flags2, rtc::Thread::Current()); 1580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void CreateChannels(int flags) { 1600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(new typename T::MediaChannel(NULL), 1610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org new typename T::MediaChannel(NULL), 1622a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org flags, rtc::Thread::Current()); 1630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void CreateChannels(int flags1, int flags2, 1652a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::Thread* thread) { 1660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(new typename T::MediaChannel(NULL), 1670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org new typename T::MediaChannel(NULL), 1680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org flags1, flags2, thread); 1690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void CreateChannels(int flags, 1712a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::Thread* thread) { 1720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(new typename T::MediaChannel(NULL), 1730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org new typename T::MediaChannel(NULL), 1740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org flags, thread); 1750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void CreateChannels( 1770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typename T::MediaChannel* ch1, typename T::MediaChannel* ch2, 1782a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org int flags1, int flags2, rtc::Thread* thread) { 1790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org media_channel1_ = ch1; 1800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org media_channel2_ = ch2; 1810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel1_.reset(CreateChannel(thread, &media_engine_, ch1, &session1_, 1820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org (flags1 & RTCP) != 0)); 1830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel2_.reset(CreateChannel(thread, &media_engine_, ch2, &session2_, 1840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org (flags2 & RTCP) != 0)); 1850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel1_->SignalMediaMonitor.connect( 1860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org this, &ChannelTest<T>::OnMediaMonitor); 1870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel2_->SignalMediaMonitor.connect( 1880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org this, &ChannelTest<T>::OnMediaMonitor); 1890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel1_->SignalMediaError.connect( 1900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org this, &ChannelTest<T>::OnMediaChannelError); 1910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel2_->SignalMediaError.connect( 1920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org this, &ChannelTest<T>::OnMediaChannelError); 1930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel1_->SignalAutoMuted.connect( 1940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org this, &ChannelTest<T>::OnMediaMuted); 1958841d7bf4010478a4b3978ff2d181d9504b2bbe3mallinath@webrtc.org if ((flags1 & DTLS) && (flags2 & DTLS)) { 1968841d7bf4010478a4b3978ff2d181d9504b2bbe3mallinath@webrtc.org flags1 = (flags1 & ~SECURE); 1978841d7bf4010478a4b3978ff2d181d9504b2bbe3mallinath@webrtc.org flags2 = (flags2 & ~SECURE); 1988841d7bf4010478a4b3978ff2d181d9504b2bbe3mallinath@webrtc.org } 1990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateContent(flags1, kPcmuCodec, kH264Codec, 2000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org &local_media_content1_); 2010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateContent(flags2, kPcmuCodec, kH264Codec, 2020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org &local_media_content2_); 2030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CopyContent(local_media_content1_, &remote_media_content1_); 2040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CopyContent(local_media_content2_, &remote_media_content2_); 2050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (flags1 & DTLS) { 2072a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org identity1_.reset(rtc::SSLIdentity::Generate("session1")); 2080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org session1_.set_ssl_identity(identity1_.get()); 2090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 2100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (flags2 & DTLS) { 2112a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org identity2_.reset(rtc::SSLIdentity::Generate("session2")); 2120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org session2_.set_ssl_identity(identity2_.get()); 2130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 2140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Add stream information (SSRC) to the local content but not to the remote 2160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // content. This means that we per default know the SSRC of what we send but 2170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // not what we receive. 2180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AddLegacyStreamInContent(kSsrc1, flags1, &local_media_content1_); 2190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AddLegacyStreamInContent(kSsrc2, flags2, &local_media_content2_); 2200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // If SSRC_MUX is used we also need to know the SSRC of the incoming stream. 2220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (flags1 & SSRC_MUX) { 2230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AddLegacyStreamInContent(kSsrc1, flags1, &remote_media_content1_); 2240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 2250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (flags2 & SSRC_MUX) { 2260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AddLegacyStreamInContent(kSsrc2, flags2, &remote_media_content2_); 2270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 2280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 2290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void CreateChannels( 2310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typename T::MediaChannel* ch1, typename T::MediaChannel* ch2, 2322a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org int flags, rtc::Thread* thread) { 2330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org media_channel1_ = ch1; 2340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org media_channel2_ = ch2; 2350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel1_.reset(CreateChannel(thread, &media_engine_, ch1, &session1_, 2370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org (flags & RTCP) != 0)); 2380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel2_.reset(CreateChannel(thread, &media_engine_, ch2, &session1_, 2390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org (flags & RTCP) != 0)); 2400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel1_->SignalMediaMonitor.connect( 2410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org this, &ChannelTest<T>::OnMediaMonitor); 2420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel2_->SignalMediaMonitor.connect( 2430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org this, &ChannelTest<T>::OnMediaMonitor); 2440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel2_->SignalMediaError.connect( 2450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org this, &ChannelTest<T>::OnMediaChannelError); 2460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateContent(flags, kPcmuCodec, kH264Codec, 2470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org &local_media_content1_); 2480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateContent(flags, kPcmuCodec, kH264Codec, 2490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org &local_media_content2_); 2500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CopyContent(local_media_content1_, &remote_media_content1_); 2510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CopyContent(local_media_content2_, &remote_media_content2_); 2520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Add stream information (SSRC) to the local content but not to the remote 2530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // content. This means that we per default know the SSRC of what we send but 2540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // not what we receive. 2550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AddLegacyStreamInContent(kSsrc1, flags, &local_media_content1_); 2560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AddLegacyStreamInContent(kSsrc2, flags, &local_media_content2_); 2570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // If SSRC_MUX is used we also need to know the SSRC of the incoming stream. 2590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (flags & SSRC_MUX) { 2600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AddLegacyStreamInContent(kSsrc1, flags, &remote_media_content1_); 2610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AddLegacyStreamInContent(kSsrc2, flags, &remote_media_content2_); 2620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 2630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 2640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2652a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org typename T::Channel* CreateChannel(rtc::Thread* thread, 2660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::MediaEngineInterface* engine, 2670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typename T::MediaChannel* ch, 2680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::BaseSession* session, 2690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool rtcp) { 2700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typename T::Channel* channel = new typename T::Channel( 2710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org thread, engine, ch, session, cricket::CN_AUDIO, rtcp); 2720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (!channel->Init()) { 2730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org delete channel; 2740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel = NULL; 2750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 2760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return channel; 2770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 2780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool SendInitiate() { 280f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org bool result = channel1_->SetLocalContent(&local_media_content1_, 281f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org CA_OFFER, NULL); 2820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (result) { 2830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel1_->Enable(true); 284f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org result = channel2_->SetRemoteContent(&remote_media_content1_, 285f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org CA_OFFER, NULL); 2860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (result) { 2870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org session1_.Connect(&session2_); 2880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 289f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org result = channel2_->SetLocalContent(&local_media_content2_, 290f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org CA_ANSWER, NULL); 2910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 2920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 2930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return result; 2940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 2950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool SendAccept() { 2970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel2_->Enable(true); 298f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org return channel1_->SetRemoteContent(&remote_media_content2_, 299f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org CA_ANSWER, NULL); 3000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 3020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool SendOffer() { 303f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org bool result = channel1_->SetLocalContent(&local_media_content1_, 304f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org CA_OFFER, NULL); 3050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (result) { 3060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel1_->Enable(true); 307f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org result = channel2_->SetRemoteContent(&remote_media_content1_, 308f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org CA_OFFER, NULL); 3090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return result; 3110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 3130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool SendProvisionalAnswer() { 3140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool result = channel2_->SetLocalContent(&local_media_content2_, 315f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org CA_PRANSWER, NULL); 3160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (result) { 3170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel2_->Enable(true); 3180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org result = channel1_->SetRemoteContent(&remote_media_content2_, 319f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org CA_PRANSWER, NULL); 3200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org session1_.Connect(&session2_); 3210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return result; 3230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 3250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool SendFinalAnswer() { 326f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org bool result = channel2_->SetLocalContent(&local_media_content2_, 327f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org CA_ANSWER, NULL); 3280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (result) 329f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org result = channel1_->SetRemoteContent(&remote_media_content2_, 330f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org CA_ANSWER, NULL); 3310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return result; 3320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 3340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool SendTerminate() { 3350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel1_.reset(); 3360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel2_.reset(); 3370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return true; 3380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 3400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool AddStream1(int id) { 3410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return channel1_->AddRecvStream(cricket::StreamParams::CreateLegacy(id)); 3420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool RemoveStream1(int id) { 3440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return channel1_->RemoveRecvStream(id); 3450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 3470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::FakeTransport* GetTransport1() { 3480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return session1_.GetTransport(channel1_->content_name()); 3490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::FakeTransport* GetTransport2() { 3510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return session2_.GetTransport(channel2_->content_name()); 3520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 3540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool SendRtp1() { 3551a04b881e0ef480802fb01b4fbe9bcd5388d2c69henrike@webrtc.org return media_channel1_->SendRtp(rtp_packet_.c_str(), 3561a04b881e0ef480802fb01b4fbe9bcd5388d2c69henrike@webrtc.org static_cast<int>(rtp_packet_.size())); 3570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool SendRtp2() { 3591a04b881e0ef480802fb01b4fbe9bcd5388d2c69henrike@webrtc.org return media_channel2_->SendRtp(rtp_packet_.c_str(), 3601a04b881e0ef480802fb01b4fbe9bcd5388d2c69henrike@webrtc.org static_cast<int>(rtp_packet_.size())); 3610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool SendRtcp1() { 3631a04b881e0ef480802fb01b4fbe9bcd5388d2c69henrike@webrtc.org return media_channel1_->SendRtcp(rtcp_packet_.c_str(), 3641a04b881e0ef480802fb01b4fbe9bcd5388d2c69henrike@webrtc.org static_cast<int>(rtcp_packet_.size())); 3650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool SendRtcp2() { 3671a04b881e0ef480802fb01b4fbe9bcd5388d2c69henrike@webrtc.org return media_channel2_->SendRtcp(rtcp_packet_.c_str(), 3681a04b881e0ef480802fb01b4fbe9bcd5388d2c69henrike@webrtc.org static_cast<int>(rtcp_packet_.size())); 3690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Methods to send custom data. 371907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org bool SendCustomRtp1(uint32 ssrc, int sequence_number, int pl_type = -1) { 372907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org std::string data(CreateRtpData(ssrc, sequence_number, pl_type)); 3731a04b881e0ef480802fb01b4fbe9bcd5388d2c69henrike@webrtc.org return media_channel1_->SendRtp(data.c_str(), 3741a04b881e0ef480802fb01b4fbe9bcd5388d2c69henrike@webrtc.org static_cast<int>(data.size())); 3750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 376907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org bool SendCustomRtp2(uint32 ssrc, int sequence_number, int pl_type = -1) { 377907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org std::string data(CreateRtpData(ssrc, sequence_number, pl_type)); 3781a04b881e0ef480802fb01b4fbe9bcd5388d2c69henrike@webrtc.org return media_channel2_->SendRtp(data.c_str(), 3791a04b881e0ef480802fb01b4fbe9bcd5388d2c69henrike@webrtc.org static_cast<int>(data.size())); 3800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool SendCustomRtcp1(uint32 ssrc) { 3820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string data(CreateRtcpData(ssrc)); 3831a04b881e0ef480802fb01b4fbe9bcd5388d2c69henrike@webrtc.org return media_channel1_->SendRtcp(data.c_str(), 3841a04b881e0ef480802fb01b4fbe9bcd5388d2c69henrike@webrtc.org static_cast<int>(data.size())); 3850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool SendCustomRtcp2(uint32 ssrc) { 3870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string data(CreateRtcpData(ssrc)); 3881a04b881e0ef480802fb01b4fbe9bcd5388d2c69henrike@webrtc.org return media_channel2_->SendRtcp(data.c_str(), 3891a04b881e0ef480802fb01b4fbe9bcd5388d2c69henrike@webrtc.org static_cast<int>(data.size())); 3900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool CheckRtp1() { 3921a04b881e0ef480802fb01b4fbe9bcd5388d2c69henrike@webrtc.org return media_channel1_->CheckRtp(rtp_packet_.c_str(), 3931a04b881e0ef480802fb01b4fbe9bcd5388d2c69henrike@webrtc.org static_cast<int>(rtp_packet_.size())); 3940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool CheckRtp2() { 3961a04b881e0ef480802fb01b4fbe9bcd5388d2c69henrike@webrtc.org return media_channel2_->CheckRtp(rtp_packet_.c_str(), 3971a04b881e0ef480802fb01b4fbe9bcd5388d2c69henrike@webrtc.org static_cast<int>(rtp_packet_.size())); 3980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool CheckRtcp1() { 4000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return media_channel1_->CheckRtcp(rtcp_packet_.c_str(), 4011a04b881e0ef480802fb01b4fbe9bcd5388d2c69henrike@webrtc.org static_cast<int>(rtcp_packet_.size())); 4020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool CheckRtcp2() { 4040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return media_channel2_->CheckRtcp(rtcp_packet_.c_str(), 4051a04b881e0ef480802fb01b4fbe9bcd5388d2c69henrike@webrtc.org static_cast<int>(rtcp_packet_.size())); 4060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Methods to check custom data. 408907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org bool CheckCustomRtp1(uint32 ssrc, int sequence_number, int pl_type = -1 ) { 409907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org std::string data(CreateRtpData(ssrc, sequence_number, pl_type)); 4101a04b881e0ef480802fb01b4fbe9bcd5388d2c69henrike@webrtc.org return media_channel1_->CheckRtp(data.c_str(), 4111a04b881e0ef480802fb01b4fbe9bcd5388d2c69henrike@webrtc.org static_cast<int>(data.size())); 4120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 413907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org bool CheckCustomRtp2(uint32 ssrc, int sequence_number, int pl_type = -1) { 414907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org std::string data(CreateRtpData(ssrc, sequence_number, pl_type)); 4151a04b881e0ef480802fb01b4fbe9bcd5388d2c69henrike@webrtc.org return media_channel2_->CheckRtp(data.c_str(), 4161a04b881e0ef480802fb01b4fbe9bcd5388d2c69henrike@webrtc.org static_cast<int>(data.size())); 4170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool CheckCustomRtcp1(uint32 ssrc) { 4190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string data(CreateRtcpData(ssrc)); 4201a04b881e0ef480802fb01b4fbe9bcd5388d2c69henrike@webrtc.org return media_channel1_->CheckRtcp(data.c_str(), 4211a04b881e0ef480802fb01b4fbe9bcd5388d2c69henrike@webrtc.org static_cast<int>(data.size())); 4220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool CheckCustomRtcp2(uint32 ssrc) { 4240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string data(CreateRtcpData(ssrc)); 4251a04b881e0ef480802fb01b4fbe9bcd5388d2c69henrike@webrtc.org return media_channel2_->CheckRtcp(data.c_str(), 4261a04b881e0ef480802fb01b4fbe9bcd5388d2c69henrike@webrtc.org static_cast<int>(data.size())); 4270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 428907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org std::string CreateRtpData(uint32 ssrc, int sequence_number, int pl_type) { 4290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string data(rtp_packet_); 4300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Set SSRC in the rtp packet copy. 4312a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::SetBE32(const_cast<char*>(data.c_str()) + 8, ssrc); 4322a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::SetBE16(const_cast<char*>(data.c_str()) + 2, sequence_number); 433907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org if (pl_type >= 0) { 4342a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::Set8(const_cast<char*>(data.c_str()), 1, pl_type); 435907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org } 4360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return data; 4370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string CreateRtcpData(uint32 ssrc) { 4390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string data(rtcp_packet_); 4400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Set SSRC in the rtcp packet copy. 4412a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::SetBE32(const_cast<char*>(data.c_str()) + 4, ssrc); 4420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return data; 4430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 4450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool CheckNoRtp1() { 4460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return media_channel1_->CheckNoRtp(); 4470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool CheckNoRtp2() { 4490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return media_channel2_->CheckNoRtp(); 4500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool CheckNoRtcp1() { 4520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return media_channel1_->CheckNoRtcp(); 4530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool CheckNoRtcp2() { 4550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return media_channel2_->CheckNoRtcp(); 4560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 4580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void CreateContent(int flags, 4590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const cricket::AudioCodec& audio_codec, 4600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const cricket::VideoCodec& video_codec, 4610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typename T::Content* content) { 4620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // overridden in specialized classes 4630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void CopyContent(const typename T::Content& source, 4650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typename T::Content* content) { 4660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // overridden in specialized classes 4670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 4690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Creates a cricket::SessionDescription with one MediaContent and one stream. 4700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // kPcmuCodec is used as audio codec and kH264Codec is used as video codec. 4710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::SessionDescription* CreateSessionDescriptionWithStream(uint32 ssrc) { 4720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typename T::Content content; 4730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::SessionDescription* sdesc = new cricket::SessionDescription(); 4740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateContent(SECURE, kPcmuCodec, kH264Codec, &content); 4750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AddLegacyStreamInContent(ssrc, 0, &content); 4760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org sdesc->AddContent("DUMMY_CONTENT_NAME", 4770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::NS_JINGLE_RTP, content.Copy()); 4780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return sdesc; 4790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 4812a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org class CallThread : public rtc::SignalThread { 4820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public: 4830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typedef bool (ChannelTest<T>::*Method)(); 4840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CallThread(ChannelTest<T>* obj, Method method, bool* result) 4850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org : obj_(obj), 4860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org method_(method), 4870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org result_(result) { 4880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org *result = false; 4890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void DoWork() { 4910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool result = (*obj_.*method_)(); 4920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (result_) { 4930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org *result_ = result; 4940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org private: 4970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ChannelTest<T>* obj_; 4980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Method method_; 4990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool* result_; 5000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org }; 5010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void CallOnThread(typename CallThread::Method method, bool* result) { 5020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CallThread* thread = new CallThread(this, method, result); 5030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org thread->Start(); 5040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org thread->Release(); 5050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 5060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 5070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void CallOnThreadAndWaitForDone(typename CallThread::Method method, 5080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool* result) { 5090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CallThread* thread = new CallThread(this, method, result); 5100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org thread->Start(); 5110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org thread->Destroy(true); 5120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 5130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 5140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool CodecMatches(const typename T::Codec& c1, const typename T::Codec& c2) { 5150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return false; // overridden in specialized classes 5160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 5170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 5180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void OnMediaMonitor(typename T::Channel* channel, 5190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const typename T::MediaInfo& info) { 5200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (channel == channel1_.get()) { 5210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org media_info_callbacks1_++; 5220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } else if (channel == channel2_.get()) { 5230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org media_info_callbacks2_++; 5240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 5250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 5260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 5270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void OnMediaChannelError(typename T::Channel* channel, 5280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org uint32 ssrc, 5290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typename T::MediaChannel::Error error) { 5300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ssrc_ = ssrc; 5310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org error_ = error; 5320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 5330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 5340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void OnMediaMuted(cricket::BaseChannel* channel, bool muted) { 5350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org mute_callback_recved_ = true; 5360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org mute_callback_value_ = muted; 5370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 5380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 5390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void AddLegacyStreamInContent(uint32 ssrc, int flags, 5400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typename T::Content* content) { 5410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Base implementation. 5420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 5430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 5440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Tests that can be used by derived classes. 5450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 5460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Basic sanity check. 5470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void TestInit() { 5480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(0, 0); 5490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(channel1_->secure()); 5500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel1_->sending()); 5510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel1_->playout()); 5520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->codecs().empty()); 5530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->recv_streams().empty()); 5540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->rtp_packets().empty()); 5550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->rtcp_packets().empty()); 5560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 5570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 5580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Test that SetLocalContent and SetRemoteContent properly configure 5590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // the codecs. 5600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void TestSetContents() { 5610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(0, 0); 5620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typename T::Content content; 5630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateContent(0, kPcmuCodec, kH264Codec, &content); 564f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel1_->SetLocalContent(&content, CA_OFFER, NULL)); 5650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(0U, media_channel1_->codecs().size()); 566f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel1_->SetRemoteContent(&content, CA_ANSWER, NULL)); 5670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ASSERT_EQ(1U, media_channel1_->codecs().size()); 5680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CodecMatches(content.codecs()[0], 5690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org media_channel1_->codecs()[0])); 5700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 5710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 5720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Test that SetLocalContent and SetRemoteContent properly deals 5730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // with an empty offer. 5740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void TestSetContentsNullOffer() { 5750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(0, 0); 5760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typename T::Content content; 577f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel1_->SetLocalContent(&content, CA_OFFER, NULL)); 5780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateContent(0, kPcmuCodec, kH264Codec, &content); 5790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(0U, media_channel1_->codecs().size()); 580f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel1_->SetRemoteContent(&content, CA_ANSWER, NULL)); 5810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ASSERT_EQ(1U, media_channel1_->codecs().size()); 5820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CodecMatches(content.codecs()[0], 5830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org media_channel1_->codecs()[0])); 5840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 5850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 5860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Test that SetLocalContent and SetRemoteContent properly set RTCP 5870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // mux. 5880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void TestSetContentsRtcpMux() { 5890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(RTCP, RTCP); 5900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel1_->rtcp_transport_channel() != NULL); 5910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel2_->rtcp_transport_channel() != NULL); 5920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typename T::Content content; 5930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateContent(0, kPcmuCodec, kH264Codec, &content); 5940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Both sides agree on mux. Should no longer be a separate RTCP channel. 5950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org content.set_rtcp_mux(true); 596f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel1_->SetLocalContent(&content, CA_OFFER, NULL)); 597f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel1_->SetRemoteContent(&content, CA_ANSWER, NULL)); 5980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel1_->rtcp_transport_channel() == NULL); 5990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Only initiator supports mux. Should still have a separate RTCP channel. 600f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel2_->SetLocalContent(&content, CA_OFFER, NULL)); 6010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org content.set_rtcp_mux(false); 602f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel2_->SetRemoteContent(&content, CA_ANSWER, NULL)); 6030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel2_->rtcp_transport_channel() != NULL); 6040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 6050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 6060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Test that SetLocalContent and SetRemoteContent properly set RTCP 6070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // mux when a provisional answer is received. 6080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void TestSetContentsRtcpMuxWithPrAnswer() { 6090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(RTCP, RTCP); 6100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel1_->rtcp_transport_channel() != NULL); 6110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel2_->rtcp_transport_channel() != NULL); 6120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typename T::Content content; 6130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateContent(0, kPcmuCodec, kH264Codec, &content); 6140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org content.set_rtcp_mux(true); 615f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel1_->SetLocalContent(&content, CA_OFFER, NULL)); 616f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel1_->SetRemoteContent(&content, CA_PRANSWER, NULL)); 6170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel1_->rtcp_transport_channel() != NULL); 618f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel1_->SetRemoteContent(&content, CA_ANSWER, NULL)); 6190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Both sides agree on mux. Should no longer be a separate RTCP channel. 6200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel1_->rtcp_transport_channel() == NULL); 6210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Only initiator supports mux. Should still have a separate RTCP channel. 622f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel2_->SetLocalContent(&content, CA_OFFER, NULL)); 6230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org content.set_rtcp_mux(false); 624f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel2_->SetRemoteContent(&content, CA_PRANSWER, NULL)); 625f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel2_->SetRemoteContent(&content, CA_ANSWER, NULL)); 6260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel2_->rtcp_transport_channel() != NULL); 6270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 6280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 6290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Test that SetLocalContent and SetRemoteContent properly set 6300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // video options to the media channel. 6310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void TestSetContentsVideoOptions() { 6320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(0, 0); 6330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typename T::Content content; 6340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateContent(0, kPcmuCodec, kH264Codec, &content); 6350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org content.set_buffered_mode_latency(101); 636f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel1_->SetLocalContent(&content, CA_OFFER, NULL)); 6370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(0U, media_channel1_->codecs().size()); 6380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::VideoOptions options; 6390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ASSERT_TRUE(media_channel1_->GetOptions(&options)); 6400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int latency = 0; 6410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(options.buffered_mode_latency.Get(&latency)); 6420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(101, latency); 6430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org content.set_buffered_mode_latency(102); 644f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel1_->SetRemoteContent(&content, CA_ANSWER, NULL)); 6450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ASSERT_EQ(1U, media_channel1_->codecs().size()); 6460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CodecMatches(content.codecs()[0], 6470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org media_channel1_->codecs()[0])); 6480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ASSERT_TRUE(media_channel1_->GetOptions(&options)); 6490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(options.buffered_mode_latency.Get(&latency)); 6500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(102, latency); 6510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 6520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 6530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Test that SetRemoteContent properly deals with a content update. 6540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void TestSetRemoteContentUpdate() { 6550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(0, 0); 6560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typename T::Content content; 6570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateContent(RTCP | RTCP_MUX | SECURE, 6580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kPcmuCodec, kH264Codec, 6590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org &content); 6600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(0U, media_channel1_->codecs().size()); 661f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel1_->SetLocalContent(&content, CA_OFFER, NULL)); 662f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel1_->SetRemoteContent(&content, CA_ANSWER, NULL)); 6630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ASSERT_EQ(1U, media_channel1_->codecs().size()); 6640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CodecMatches(content.codecs()[0], 6650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org media_channel1_->codecs()[0])); 6660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Now update with other codecs. 6670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typename T::Content update_content; 6680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org update_content.set_partial(true); 6690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateContent(0, kIsacCodec, kH264SvcCodec, 6700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org &update_content); 671f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel1_->SetRemoteContent(&update_content, CA_UPDATE, NULL)); 6720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ASSERT_EQ(1U, media_channel1_->codecs().size()); 6730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CodecMatches(update_content.codecs()[0], 6740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org media_channel1_->codecs()[0])); 6750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Now update without any codecs. This is ignored. 6760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typename T::Content empty_content; 6770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org empty_content.set_partial(true); 678f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel1_->SetRemoteContent(&empty_content, CA_UPDATE, NULL)); 6790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ASSERT_EQ(1U, media_channel1_->codecs().size()); 6800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CodecMatches(update_content.codecs()[0], 6810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org media_channel1_->codecs()[0])); 6820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 6830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 6840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Test that Add/RemoveStream properly forward to the media channel. 6850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void TestStreams() { 6860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(0, 0); 6870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(AddStream1(1)); 6880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(AddStream1(2)); 6890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(2U, media_channel1_->recv_streams().size()); 6900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(RemoveStream1(2)); 6910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(1U, media_channel1_->recv_streams().size()); 6920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(RemoveStream1(1)); 6930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(0U, media_channel1_->recv_streams().size()); 6940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 6950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 6960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Test that SetLocalContent properly handles adding and removing StreamParams 6970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // to the local content description. 6980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // This test uses the CA_UPDATE action that don't require a full 6990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // MediaContentDescription to do an update. 7000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void TestUpdateStreamsInLocalContent() { 7010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::StreamParams stream1; 7020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stream1.groupid = "group1"; 7030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stream1.id = "stream1"; 7040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stream1.ssrcs.push_back(kSsrc1); 7050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stream1.cname = "stream1_cname"; 7060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 7070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::StreamParams stream2; 7080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stream2.groupid = "group2"; 7090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stream2.id = "stream2"; 7100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stream2.ssrcs.push_back(kSsrc2); 7110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stream2.cname = "stream2_cname"; 7120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 7130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::StreamParams stream3; 7140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stream3.groupid = "group3"; 7150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stream3.id = "stream3"; 7160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stream3.ssrcs.push_back(kSsrc3); 7170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stream3.cname = "stream3_cname"; 7180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 7190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(0, 0); 7200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typename T::Content content1; 7210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateContent(0, kPcmuCodec, kH264Codec, &content1); 7220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org content1.AddStream(stream1); 7230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(0u, media_channel1_->send_streams().size()); 724f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel1_->SetLocalContent(&content1, CA_OFFER, NULL)); 7250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 7260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ASSERT_EQ(1u, media_channel1_->send_streams().size()); 7270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(stream1, media_channel1_->send_streams()[0]); 7280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 7290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Update the local streams by adding another sending stream. 7300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Use a partial updated session description. 7310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typename T::Content content2; 7320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org content2.AddStream(stream2); 7330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org content2.AddStream(stream3); 7340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org content2.set_partial(true); 735f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel1_->SetLocalContent(&content2, CA_UPDATE, NULL)); 7360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ASSERT_EQ(3u, media_channel1_->send_streams().size()); 7370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(stream1, media_channel1_->send_streams()[0]); 7380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(stream2, media_channel1_->send_streams()[1]); 7390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(stream3, media_channel1_->send_streams()[2]); 7400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 7410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Update the local streams by removing the first sending stream. 7420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // This is done by removing all SSRCS for this particular stream. 7430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typename T::Content content3; 7440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stream1.ssrcs.clear(); 7450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org content3.AddStream(stream1); 7460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org content3.set_partial(true); 747f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel1_->SetLocalContent(&content3, CA_UPDATE, NULL)); 7480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ASSERT_EQ(2u, media_channel1_->send_streams().size()); 7490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(stream2, media_channel1_->send_streams()[0]); 7500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(stream3, media_channel1_->send_streams()[1]); 7510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 7520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Update the local streams with a stream that does not change. 7530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // THe update is ignored. 7540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typename T::Content content4; 7550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org content4.AddStream(stream2); 7560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org content4.set_partial(true); 757f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel1_->SetLocalContent(&content4, CA_UPDATE, NULL)); 7580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ASSERT_EQ(2u, media_channel1_->send_streams().size()); 7590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(stream2, media_channel1_->send_streams()[0]); 7600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(stream3, media_channel1_->send_streams()[1]); 7610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 7620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 7630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Test that SetRemoteContent properly handles adding and removing 7640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // StreamParams to the remote content description. 7650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // This test uses the CA_UPDATE action that don't require a full 7660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // MediaContentDescription to do an update. 7670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void TestUpdateStreamsInRemoteContent() { 7680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::StreamParams stream1; 7690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stream1.id = "Stream1"; 7700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stream1.groupid = "1"; 7710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stream1.ssrcs.push_back(kSsrc1); 7720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stream1.cname = "stream1_cname"; 7730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 7740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::StreamParams stream2; 7750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stream2.id = "Stream2"; 7760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stream2.groupid = "2"; 7770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stream2.ssrcs.push_back(kSsrc2); 7780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stream2.cname = "stream2_cname"; 7790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 7800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::StreamParams stream3; 7810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stream3.id = "Stream3"; 7820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stream3.groupid = "3"; 7830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stream3.ssrcs.push_back(kSsrc3); 7840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stream3.cname = "stream3_cname"; 7850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 7860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(0, 0); 7870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typename T::Content content1; 7880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateContent(0, kPcmuCodec, kH264Codec, &content1); 7890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org content1.AddStream(stream1); 7900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(0u, media_channel1_->recv_streams().size()); 791f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel1_->SetRemoteContent(&content1, CA_OFFER, NULL)); 7920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 7930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ASSERT_EQ(1u, media_channel1_->codecs().size()); 7940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ASSERT_EQ(1u, media_channel1_->recv_streams().size()); 7950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(stream1, media_channel1_->recv_streams()[0]); 7960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 7970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Update the remote streams by adding another sending stream. 7980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Use a partial updated session description. 7990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typename T::Content content2; 8000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org content2.AddStream(stream2); 8010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org content2.AddStream(stream3); 8020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org content2.set_partial(true); 803f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel1_->SetRemoteContent(&content2, CA_UPDATE, NULL)); 8040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ASSERT_EQ(3u, media_channel1_->recv_streams().size()); 8050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(stream1, media_channel1_->recv_streams()[0]); 8060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(stream2, media_channel1_->recv_streams()[1]); 8070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(stream3, media_channel1_->recv_streams()[2]); 8080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 8090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Update the remote streams by removing the first stream. 8100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // This is done by removing all SSRCS for this particular stream. 8110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typename T::Content content3; 8120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stream1.ssrcs.clear(); 8130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org content3.AddStream(stream1); 8140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org content3.set_partial(true); 815f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel1_->SetRemoteContent(&content3, CA_UPDATE, NULL)); 8160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ASSERT_EQ(2u, media_channel1_->recv_streams().size()); 8170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(stream2, media_channel1_->recv_streams()[0]); 8180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(stream3, media_channel1_->recv_streams()[1]); 8190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 8200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Update the remote streams with a stream that does not change. 8210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // The update is ignored. 8220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typename T::Content content4; 8230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org content4.AddStream(stream2); 8240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org content4.set_partial(true); 825f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel1_->SetRemoteContent(&content4, CA_UPDATE, NULL)); 8260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ASSERT_EQ(2u, media_channel1_->recv_streams().size()); 8270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(stream2, media_channel1_->recv_streams()[0]); 8280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(stream3, media_channel1_->recv_streams()[1]); 8290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 8300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 8310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Test that SetLocalContent and SetRemoteContent properly 8320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // handles adding and removing StreamParams when the action is a full 8330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // CA_OFFER / CA_ANSWER. 8340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void TestChangeStreamParamsInContent() { 8350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::StreamParams stream1; 8360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stream1.groupid = "group1"; 8370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stream1.id = "stream1"; 8380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stream1.ssrcs.push_back(kSsrc1); 8390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stream1.cname = "stream1_cname"; 8400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 8410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::StreamParams stream2; 8420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stream2.groupid = "group1"; 8430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stream2.id = "stream2"; 8440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stream2.ssrcs.push_back(kSsrc2); 8450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stream2.cname = "stream2_cname"; 8460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 8470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Setup a call where channel 1 send |stream1| to channel 2. 8480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(0, 0); 8490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typename T::Content content1; 8500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateContent(0, kPcmuCodec, kH264Codec, &content1); 8510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org content1.AddStream(stream1); 852f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel1_->SetLocalContent(&content1, CA_OFFER, NULL)); 8530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel1_->Enable(true)); 8540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(1u, media_channel1_->send_streams().size()); 8550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 856f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel2_->SetRemoteContent(&content1, CA_OFFER, NULL)); 8570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(1u, media_channel2_->recv_streams().size()); 8580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org session1_.Connect(&session2_); 8590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 8600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Channel 2 do not send anything. 8610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typename T::Content content2; 8620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateContent(0, kPcmuCodec, kH264Codec, &content2); 863f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel1_->SetRemoteContent(&content2, CA_ANSWER, NULL)); 8640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(0u, media_channel1_->recv_streams().size()); 865f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel2_->SetLocalContent(&content2, CA_ANSWER, NULL)); 8660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel2_->Enable(true)); 8670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(0u, media_channel2_->send_streams().size()); 8680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 8690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendCustomRtp1(kSsrc1, 0)); 8700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckCustomRtp2(kSsrc1, 0)); 8710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 8720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Let channel 2 update the content by sending |stream2| and enable SRTP. 8730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typename T::Content content3; 8740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateContent(SECURE, kPcmuCodec, kH264Codec, &content3); 8750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org content3.AddStream(stream2); 876f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel2_->SetLocalContent(&content3, CA_OFFER, NULL)); 8770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ASSERT_EQ(1u, media_channel2_->send_streams().size()); 8780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(stream2, media_channel2_->send_streams()[0]); 8790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 880f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel1_->SetRemoteContent(&content3, CA_OFFER, NULL)); 8810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ASSERT_EQ(1u, media_channel1_->recv_streams().size()); 8820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(stream2, media_channel1_->recv_streams()[0]); 8830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 8840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Channel 1 replies but stop sending stream1. 8850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typename T::Content content4; 8860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateContent(SECURE, kPcmuCodec, kH264Codec, &content4); 887f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel1_->SetLocalContent(&content4, CA_ANSWER, NULL)); 8880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(0u, media_channel1_->send_streams().size()); 8890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 890f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel2_->SetRemoteContent(&content4, CA_ANSWER, NULL)); 8910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(0u, media_channel2_->recv_streams().size()); 8920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 8930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel1_->secure()); 8940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel2_->secure()); 8950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendCustomRtp2(kSsrc2, 0)); 8960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckCustomRtp1(kSsrc2, 0)); 8970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 8980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 8990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Test that we only start playout and sending at the right times. 9000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void TestPlayoutAndSendingStates() { 9010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(0, 0); 9020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel1_->playout()); 9030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel1_->sending()); 9040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel2_->playout()); 9050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel2_->sending()); 9060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel1_->Enable(true)); 9070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel1_->playout()); 9080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel1_->sending()); 909f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel1_->SetLocalContent(&local_media_content1_, 910f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org CA_OFFER, NULL)); 9110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->playout()); 9120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel1_->sending()); 913f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel2_->SetRemoteContent(&local_media_content1_, 914f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org CA_OFFER, NULL)); 9150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel2_->playout()); 9160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel2_->sending()); 917f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel2_->SetLocalContent(&local_media_content2_, 918f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org CA_ANSWER, NULL)); 9190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel2_->playout()); 9200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel2_->sending()); 9210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org session1_.Connect(&session2_); 9220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->playout()); 9230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel1_->sending()); 9240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel2_->playout()); 9250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel2_->sending()); 9260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel2_->Enable(true)); 9270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel2_->playout()); 9280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel2_->sending()); 929f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel1_->SetRemoteContent(&local_media_content2_, 930f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org CA_ANSWER, NULL)); 9310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->playout()); 9320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->sending()); 9330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 9340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 9350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void TestMuteStream() { 9360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(0, 0); 9370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Test that we can Mute the default channel even though the sending SSRC is 9380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // unknown. 9390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel1_->IsStreamMuted(0)); 9400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel1_->MuteStream(0, true)); 9410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->IsStreamMuted(0)); 9420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel1_->MuteStream(0, false)); 9430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel1_->IsStreamMuted(0)); 9440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 9450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Test that we can not mute an unknown SSRC. 9460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(channel1_->MuteStream(kSsrc1, true)); 9470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 9480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org SendInitiate(); 9490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // After the local session description has been set, we can mute a stream 9500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // with its SSRC. 9510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel1_->MuteStream(kSsrc1, true)); 9520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->IsStreamMuted(kSsrc1)); 9530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel1_->MuteStream(kSsrc1, false)); 9540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel1_->IsStreamMuted(kSsrc1)); 9550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 9560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 9570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Test that changing the MediaContentDirection in the local and remote 9580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // session description start playout and sending at the right time. 9590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void TestMediaContentDirection() { 9600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(0, 0); 9610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typename T::Content content1; 9620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateContent(0, kPcmuCodec, kH264Codec, &content1); 9630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typename T::Content content2; 9640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateContent(0, kPcmuCodec, kH264Codec, &content2); 9650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Set |content2| to be InActive. 9660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org content2.set_direction(cricket::MD_INACTIVE); 9670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 9680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel1_->Enable(true)); 9690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel2_->Enable(true)); 9700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel1_->playout()); 9710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel1_->sending()); 9720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel2_->playout()); 9730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel2_->sending()); 9740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 975f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel1_->SetLocalContent(&content1, CA_OFFER, NULL)); 976f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel2_->SetRemoteContent(&content1, CA_OFFER, NULL)); 977f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel2_->SetLocalContent(&content2, CA_PRANSWER, NULL)); 978f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel1_->SetRemoteContent(&content2, CA_PRANSWER, NULL)); 9790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org session1_.Connect(&session2_); 9800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 9810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->playout()); 9820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel1_->sending()); // remote InActive 9830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel2_->playout()); // local InActive 9840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel2_->sending()); // local InActive 9850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 9860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Update |content2| to be RecvOnly. 9870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org content2.set_direction(cricket::MD_RECVONLY); 988f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel2_->SetLocalContent(&content2, CA_PRANSWER, NULL)); 989f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel1_->SetRemoteContent(&content2, CA_PRANSWER, NULL)); 9900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 9910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->playout()); 9920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->sending()); 9930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel2_->playout()); // local RecvOnly 9940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel2_->sending()); // local RecvOnly 9950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 9960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Update |content2| to be SendRecv. 9970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org content2.set_direction(cricket::MD_SENDRECV); 998f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel2_->SetLocalContent(&content2, CA_ANSWER, NULL)); 999f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel1_->SetRemoteContent(&content2, CA_ANSWER, NULL)); 10000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 10010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->playout()); 10020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->sending()); 10030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel2_->playout()); 10040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel2_->sending()); 10050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 10060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 10070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Test setting up a call. 10080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void TestCallSetup() { 10090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(0, 0); 10100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(channel1_->secure()); 10110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendInitiate()); 10120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->playout()); 10130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel1_->sending()); 10140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendAccept()); 10150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(channel1_->secure()); 10160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->sending()); 10170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(1U, media_channel1_->codecs().size()); 10180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel2_->playout()); 10190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel2_->sending()); 10200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(1U, media_channel2_->codecs().size()); 10210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 10220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 10230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Test that we don't crash if packets are sent during call teardown 10240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // when RTCP mux is enabled. This is a regression test against a specific 10250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // race condition that would only occur when a RTCP packet was sent during 10260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // teardown of a channel on which RTCP mux was enabled. 10270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void TestCallTeardownRtcpMux() { 10280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org class LastWordMediaChannel : public T::MediaChannel { 10290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public: 10300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org LastWordMediaChannel() : T::MediaChannel(NULL) {} 10310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ~LastWordMediaChannel() { 10320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org T::MediaChannel::SendRtp(kPcmuFrame, sizeof(kPcmuFrame)); 10330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org T::MediaChannel::SendRtcp(kRtcpReport, sizeof(kRtcpReport)); 10340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 10350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org }; 10360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(new LastWordMediaChannel(), new LastWordMediaChannel(), 10370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org RTCP | RTCP_MUX, RTCP | RTCP_MUX, 10382a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::Thread::Current()); 10390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendInitiate()); 10400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendAccept()); 10410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendTerminate()); 10420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 10430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 10440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Send voice RTP data to the other side and ensure it gets there. 10450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void SendRtpToRtp() { 10460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(0, 0); 10470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendInitiate()); 10480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendAccept()); 10490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(1U, GetTransport1()->channels().size()); 10500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(1U, GetTransport2()->channels().size()); 10510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendRtp1()); 10520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendRtp2()); 10530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckRtp1()); 10540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckRtp2()); 10550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtp1()); 10560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtp2()); 10570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 10580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 10590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Check that RTCP is not transmitted if both sides don't support RTCP. 10600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void SendNoRtcpToNoRtcp() { 10610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(0, 0); 10620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendInitiate()); 10630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendAccept()); 10640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(1U, GetTransport1()->channels().size()); 10650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(1U, GetTransport2()->channels().size()); 10660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(SendRtcp1()); 10670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(SendRtcp2()); 10680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtcp1()); 10690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtcp2()); 10700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 10710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 10720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Check that RTCP is not transmitted if the callee doesn't support RTCP. 10730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void SendNoRtcpToRtcp() { 10740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(0, RTCP); 10750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendInitiate()); 10760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendAccept()); 10770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(1U, GetTransport1()->channels().size()); 10780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(2U, GetTransport2()->channels().size()); 10790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(SendRtcp1()); 10800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(SendRtcp2()); 10810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtcp1()); 10820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtcp2()); 10830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 10840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 10850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Check that RTCP is not transmitted if the caller doesn't support RTCP. 10860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void SendRtcpToNoRtcp() { 10870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(RTCP, 0); 10880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendInitiate()); 10890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendAccept()); 10900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(2U, GetTransport1()->channels().size()); 10910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(1U, GetTransport2()->channels().size()); 10920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(SendRtcp1()); 10930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(SendRtcp2()); 10940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtcp1()); 10950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtcp2()); 10960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 10970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 10980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Check that RTCP is transmitted if both sides support RTCP. 10990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void SendRtcpToRtcp() { 11000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(RTCP, RTCP); 11010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendInitiate()); 11020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendAccept()); 11030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(2U, GetTransport1()->channels().size()); 11040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(2U, GetTransport2()->channels().size()); 11050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendRtcp1()); 11060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendRtcp2()); 11070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckRtcp1()); 11080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckRtcp2()); 11090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtcp1()); 11100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtcp2()); 11110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 11120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 11130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Check that RTCP is transmitted if only the initiator supports mux. 11140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void SendRtcpMuxToRtcp() { 11150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(RTCP | RTCP_MUX, RTCP); 11160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendInitiate()); 11170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendAccept()); 11180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(2U, GetTransport1()->channels().size()); 11190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(2U, GetTransport2()->channels().size()); 11200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendRtcp1()); 11210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendRtcp2()); 11220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckRtcp1()); 11230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckRtcp2()); 11240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtcp1()); 11250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtcp2()); 11260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 11270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 11280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Check that RTP and RTCP are transmitted ok when both sides support mux. 11290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void SendRtcpMuxToRtcpMux() { 11300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(RTCP | RTCP_MUX, RTCP | RTCP_MUX); 11310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendInitiate()); 11320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(2U, GetTransport1()->channels().size()); 11330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(1U, GetTransport2()->channels().size()); 11340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendAccept()); 11350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(1U, GetTransport1()->channels().size()); 11360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendRtp1()); 11370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendRtp2()); 11380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendRtcp1()); 11390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendRtcp2()); 11400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckRtp1()); 11410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckRtp2()); 11420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtp1()); 11430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtp2()); 11440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckRtcp1()); 11450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckRtcp2()); 11460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtcp1()); 11470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtcp2()); 11480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 11490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 11500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Check that RTCP data sent by the initiator before the accept is not muxed. 11510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void SendEarlyRtcpMuxToRtcp() { 11520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(RTCP | RTCP_MUX, RTCP); 11530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendInitiate()); 11540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(2U, GetTransport1()->channels().size()); 11550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(2U, GetTransport2()->channels().size()); 11560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 11570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // RTCP can be sent before the call is accepted, if the transport is ready. 11580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // It should not be muxed though, as the remote side doesn't support mux. 11590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendRtcp1()); 11600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtp2()); 11610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckRtcp2()); 11620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 11630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Send RTCP packet from callee and verify that it is received. 11640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendRtcp2()); 11650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtp1()); 11660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckRtcp1()); 11670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 11680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Complete call setup and ensure everything is still OK. 11690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendAccept()); 11700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(2U, GetTransport1()->channels().size()); 11710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendRtcp1()); 11720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckRtcp2()); 11730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendRtcp2()); 11740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckRtcp1()); 11750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 11760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 11770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 11780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Check that RTCP data is not muxed until both sides have enabled muxing, 11790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // but that we properly demux before we get the accept message, since there 11800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // is a race between RTP data and the jingle accept. 11810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void SendEarlyRtcpMuxToRtcpMux() { 11820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(RTCP | RTCP_MUX, RTCP | RTCP_MUX); 11830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendInitiate()); 11840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(2U, GetTransport1()->channels().size()); 11850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(1U, GetTransport2()->channels().size()); 11860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 11870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // RTCP can't be sent yet, since the RTCP transport isn't writable, and 11880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // we haven't yet received the accept that says we should mux. 11890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(SendRtcp1()); 11900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 11910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Send muxed RTCP packet from callee and verify that it is received. 11920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendRtcp2()); 11930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtp1()); 11940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckRtcp1()); 11950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 11960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Complete call setup and ensure everything is still OK. 11970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendAccept()); 11980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(1U, GetTransport1()->channels().size()); 11990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendRtcp1()); 12000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckRtcp2()); 12010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendRtcp2()); 12020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckRtcp1()); 12030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 12040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 12050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Test that we properly send SRTP with RTCP in both directions. 12060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // You can pass in DTLS and/or RTCP_MUX as flags. 12070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void SendSrtpToSrtp(int flags1_in = 0, int flags2_in = 0) { 12080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ASSERT((flags1_in & ~(RTCP_MUX | DTLS)) == 0); 12090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ASSERT((flags2_in & ~(RTCP_MUX | DTLS)) == 0); 12100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 12110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int flags1 = RTCP | SECURE | flags1_in; 12120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int flags2 = RTCP | SECURE | flags2_in; 12130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool dtls1 = !!(flags1_in & DTLS); 12140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool dtls2 = !!(flags2_in & DTLS); 12150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(flags1, flags2); 12160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(channel1_->secure()); 12170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(channel2_->secure()); 12180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendInitiate()); 12190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE_WAIT(channel1_->writable(), kEventTimeout); 12200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE_WAIT(channel2_->writable(), kEventTimeout); 12210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendAccept()); 12220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel1_->secure()); 12230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel2_->secure()); 12240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(dtls1 && dtls2, channel1_->secure_dtls()); 12250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(dtls1 && dtls2, channel2_->secure_dtls()); 12260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendRtp1()); 12270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendRtp2()); 12280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendRtcp1()); 12290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendRtcp2()); 12300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckRtp1()); 12310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckRtp2()); 12320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtp1()); 12330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtp2()); 12340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckRtcp1()); 12350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckRtcp2()); 12360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtcp1()); 12370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtcp2()); 12380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 12390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 12400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Test that we properly handling SRTP negotiating down to RTP. 12410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void SendSrtpToRtp() { 12420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(RTCP | SECURE, RTCP); 12430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(channel1_->secure()); 12440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(channel2_->secure()); 12450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendInitiate()); 12460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendAccept()); 12470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(channel1_->secure()); 12480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(channel2_->secure()); 12490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendRtp1()); 12500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendRtp2()); 12510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendRtcp1()); 12520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendRtcp2()); 12530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckRtp1()); 12540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckRtp2()); 12550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtp1()); 12560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtp2()); 12570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckRtcp1()); 12580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckRtcp2()); 12590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtcp1()); 12600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtcp2()); 12610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 12620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 12630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Test that we can send and receive early media when a provisional answer is 12640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // sent and received. The test uses SRTP, RTCP mux and SSRC mux. 12650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void SendEarlyMediaUsingRtcpMuxSrtp() { 12660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int sequence_number1_1 = 0, sequence_number2_2 = 0; 12670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 12680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(SSRC_MUX | RTCP | RTCP_MUX | SECURE, 12690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org SSRC_MUX | RTCP | RTCP_MUX | SECURE); 12700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendOffer()); 12710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendProvisionalAnswer()); 12720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel1_->secure()); 12730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel2_->secure()); 12740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(2U, GetTransport1()->channels().size()); 12750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(2U, GetTransport2()->channels().size()); 12760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendCustomRtcp1(kSsrc1)); 12770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckCustomRtcp2(kSsrc1)); 12780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendCustomRtp1(kSsrc1, ++sequence_number1_1)); 12790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckCustomRtp2(kSsrc1, sequence_number1_1)); 12800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 12810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Send packets from callee and verify that it is received. 12820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendCustomRtcp2(kSsrc2)); 12830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckCustomRtcp1(kSsrc2)); 12840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendCustomRtp2(kSsrc2, ++sequence_number2_2)); 12850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckCustomRtp1(kSsrc2, sequence_number2_2)); 12860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 12870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Complete call setup and ensure everything is still OK. 12880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendFinalAnswer()); 12890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(1U, GetTransport1()->channels().size()); 12900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(1U, GetTransport2()->channels().size()); 12910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel1_->secure()); 12920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel2_->secure()); 12930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendCustomRtcp1(kSsrc1)); 12940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckCustomRtcp2(kSsrc1)); 12950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendCustomRtp1(kSsrc1, ++sequence_number1_1)); 12960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckCustomRtp2(kSsrc1, sequence_number1_1)); 12970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendCustomRtcp2(kSsrc2)); 12980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckCustomRtcp1(kSsrc2)); 12990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendCustomRtp2(kSsrc2, ++sequence_number2_2)); 13000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckCustomRtp1(kSsrc2, sequence_number2_2)); 13010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 13020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 13030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Test that we properly send RTP without SRTP from a thread. 13040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void SendRtpToRtpOnThread() { 13057634b1949e4b3a288a6c908ccbf422134ab45f97buildbot@webrtc.org bool sent_rtp1, sent_rtp2, sent_rtcp1, sent_rtcp2; 13067634b1949e4b3a288a6c908ccbf422134ab45f97buildbot@webrtc.org CreateChannels(RTCP, RTCP); 13070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendInitiate()); 13080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendAccept()); 13090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CallOnThread(&ChannelTest<T>::SendRtp1, &sent_rtp1); 13100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CallOnThread(&ChannelTest<T>::SendRtp2, &sent_rtp2); 13117634b1949e4b3a288a6c908ccbf422134ab45f97buildbot@webrtc.org CallOnThread(&ChannelTest<T>::SendRtcp1, &sent_rtcp1); 13127634b1949e4b3a288a6c908ccbf422134ab45f97buildbot@webrtc.org CallOnThread(&ChannelTest<T>::SendRtcp2, &sent_rtcp2); 13130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE_WAIT(CheckRtp1(), 1000); 13140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE_WAIT(CheckRtp2(), 1000); 13150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE_WAIT(sent_rtp1, 1000); 13160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE_WAIT(sent_rtp2, 1000); 13170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtp1()); 13180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtp2()); 13190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE_WAIT(CheckRtcp1(), 1000); 13200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE_WAIT(CheckRtcp2(), 1000); 13210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE_WAIT(sent_rtcp1, 1000); 13220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE_WAIT(sent_rtcp2, 1000); 13230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtcp1()); 13240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtcp2()); 13250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 13260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 13270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Test that we properly send SRTP with RTCP from a thread. 13280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void SendSrtpToSrtpOnThread() { 13290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool sent_rtp1, sent_rtp2, sent_rtcp1, sent_rtcp2; 13300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(RTCP | SECURE, RTCP | SECURE); 13310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendInitiate()); 13320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendAccept()); 13330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CallOnThread(&ChannelTest<T>::SendRtp1, &sent_rtp1); 13340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CallOnThread(&ChannelTest<T>::SendRtp2, &sent_rtp2); 13350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CallOnThread(&ChannelTest<T>::SendRtcp1, &sent_rtcp1); 13360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CallOnThread(&ChannelTest<T>::SendRtcp2, &sent_rtcp2); 13370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE_WAIT(CheckRtp1(), 1000); 13380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE_WAIT(CheckRtp2(), 1000); 13390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE_WAIT(sent_rtp1, 1000); 13400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE_WAIT(sent_rtp2, 1000); 13410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtp1()); 13420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtp2()); 13430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE_WAIT(CheckRtcp1(), 1000); 13440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE_WAIT(CheckRtcp2(), 1000); 13450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE_WAIT(sent_rtcp1, 1000); 13460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE_WAIT(sent_rtcp2, 1000); 13470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtcp1()); 13480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtcp2()); 13490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 13500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 13510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Test that the mediachannel retains its sending state after the transport 13520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // becomes non-writable. 13530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void SendWithWritabilityLoss() { 13540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(0, 0); 13550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendInitiate()); 13560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendAccept()); 13570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(1U, GetTransport1()->channels().size()); 13580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(1U, GetTransport2()->channels().size()); 13590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendRtp1()); 13600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendRtp2()); 13610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckRtp1()); 13620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckRtp2()); 13630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtp1()); 13640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtp2()); 13650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 13665c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org // Lose writability, which should fail. 13670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org GetTransport1()->SetWritable(false); 13680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(SendRtp1()); 13690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendRtp2()); 13700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckRtp1()); 13710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtp2()); 13720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 13730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Regain writability 13740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org GetTransport1()->SetWritable(true); 13750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->sending()); 13760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendRtp1()); 13770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendRtp2()); 13780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckRtp1()); 13790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckRtp2()); 13800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtp1()); 13810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtp2()); 13820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 13830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Lose writability completely 13840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org GetTransport1()->SetDestination(NULL); 13850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->sending()); 13860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 13875c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org // Should fail also. 13880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(SendRtp1()); 13890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendRtp2()); 13900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckRtp1()); 13910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtp2()); 13920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 13930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Gain writability back 13940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org GetTransport1()->SetDestination(GetTransport2()); 13950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->sending()); 13960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendRtp1()); 13970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendRtp2()); 13980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckRtp1()); 13990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckRtp2()); 14000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtp1()); 14010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtp2()); 14020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 14030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1404907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org void SendBundleToBundle( 1405907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org const int* pl_types, int len, bool rtcp_mux, bool secure) { 1406907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org ASSERT_EQ(2, len); 14070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int sequence_number1_1 = 0, sequence_number2_2 = 0; 1408907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org // Only pl_type1 was added to the bundle filter for both |channel1_| 1409907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org // and |channel2_|. 1410907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org int pl_type1 = pl_types[0]; 1411907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org int pl_type2 = pl_types[1]; 1412907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org int flags = SSRC_MUX | RTCP; 1413907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org if (secure) flags |= SECURE; 1414907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org uint32 expected_channels = 2U; 1415907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org if (rtcp_mux) { 1416907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org flags |= RTCP_MUX; 1417907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org expected_channels = 1U; 1418907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org } 1419907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org CreateChannels(flags, flags); 14200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendInitiate()); 14210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(2U, GetTransport1()->channels().size()); 1422907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org EXPECT_EQ(expected_channels, GetTransport2()->channels().size()); 14230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendAccept()); 1424907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org EXPECT_EQ(expected_channels, GetTransport1()->channels().size()); 1425907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org EXPECT_EQ(expected_channels, GetTransport2()->channels().size()); 1426907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org EXPECT_TRUE(channel1_->bundle_filter()->FindPayloadType(pl_type1)); 1427907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org EXPECT_TRUE(channel2_->bundle_filter()->FindPayloadType(pl_type1)); 1428907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org EXPECT_FALSE(channel1_->bundle_filter()->FindPayloadType(pl_type2)); 1429907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org EXPECT_FALSE(channel2_->bundle_filter()->FindPayloadType(pl_type2)); 1430907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org // channel1 - should only have media_content2 as remote. i.e. kSsrc2 1431907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org EXPECT_TRUE(channel1_->bundle_filter()->FindStream(kSsrc2)); 1432907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org EXPECT_FALSE(channel1_->bundle_filter()->FindStream(kSsrc1)); 1433907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org // channel2 - should only have media_content1 as remote. i.e. kSsrc1 1434907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org EXPECT_TRUE(channel2_->bundle_filter()->FindStream(kSsrc1)); 1435907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org EXPECT_FALSE(channel2_->bundle_filter()->FindStream(kSsrc2)); 1436907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org 1437907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org // Both channels can receive pl_type1 only. 1438907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org EXPECT_TRUE(SendCustomRtp1(kSsrc1, ++sequence_number1_1, pl_type1)); 1439907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org EXPECT_TRUE(CheckCustomRtp2(kSsrc1, sequence_number1_1, pl_type1)); 1440907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org EXPECT_TRUE(SendCustomRtp2(kSsrc2, ++sequence_number2_2, pl_type1)); 1441907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org EXPECT_TRUE(CheckCustomRtp1(kSsrc2, sequence_number2_2, pl_type1)); 14420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtp1()); 14430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtp2()); 1444907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org 1445907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org // RTCP test 1446907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org EXPECT_TRUE(SendCustomRtp1(kSsrc1, ++sequence_number1_1, pl_type2)); 1447907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org EXPECT_FALSE(CheckCustomRtp2(kSsrc1, sequence_number1_1, pl_type2)); 1448907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org EXPECT_TRUE(SendCustomRtp2(kSsrc2, ++sequence_number2_2, pl_type2)); 1449907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org EXPECT_FALSE(CheckCustomRtp1(kSsrc2, sequence_number2_2, pl_type2)); 1450907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org 1451907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org EXPECT_TRUE(SendCustomRtcp1(kSsrc1)); 1452907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org EXPECT_TRUE(SendCustomRtcp2(kSsrc2)); 14530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckCustomRtcp1(kSsrc2)); 14540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtcp1()); 14550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckCustomRtcp2(kSsrc1)); 14560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtcp2()); 14570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1458907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org EXPECT_TRUE(SendCustomRtcp1(kSsrc2)); 1459907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org EXPECT_TRUE(SendCustomRtcp2(kSsrc1)); 14600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(CheckCustomRtcp1(kSsrc1)); 14610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(CheckCustomRtcp2(kSsrc2)); 14620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 14630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 14640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Test that the media monitor can be run and gives timely callbacks. 14650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void TestMediaMonitor() { 14660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const int kTimeout = 500; 14670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(0, 0); 14680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendInitiate()); 14690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendAccept()); 14700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel1_->StartMediaMonitor(100); 14710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel2_->StartMediaMonitor(100); 14720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Ensure we get callbacks and stop. 14730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE_WAIT(media_info_callbacks1_ > 0, kTimeout); 14740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE_WAIT(media_info_callbacks2_ > 0, kTimeout); 14750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel1_->StopMediaMonitor(); 14760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel2_->StopMediaMonitor(); 14770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Ensure a restart of a stopped monitor works. 14780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel1_->StartMediaMonitor(100); 14790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE_WAIT(media_info_callbacks1_ > 0, kTimeout); 14800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel1_->StopMediaMonitor(); 14810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Ensure stopping a stopped monitor is OK. 14820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel1_->StopMediaMonitor(); 14830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 14840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 14850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void TestMediaSinks() { 14860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(0, 0); 14870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendInitiate()); 14880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendAccept()); 14890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(channel1_->HasSendSinks(cricket::SINK_POST_CRYPTO)); 14900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(channel1_->HasRecvSinks(cricket::SINK_POST_CRYPTO)); 14910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(channel1_->HasSendSinks(cricket::SINK_PRE_CRYPTO)); 14920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(channel1_->HasRecvSinks(cricket::SINK_PRE_CRYPTO)); 14930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 14942a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::Pathname path; 14952a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org EXPECT_TRUE(rtc::Filesystem::GetTemporaryFolder(path, true, NULL)); 14960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org path.SetFilename("sink-test.rtpdump"); 14972a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::scoped_ptr<cricket::RtpDumpSink> sink( 14980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org new cricket::RtpDumpSink(Open(path.pathname()))); 14990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org sink->set_packet_filter(cricket::PF_ALL); 15000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(sink->Enable(true)); 15010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel1_->RegisterSendSink( 15020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org sink.get(), &cricket::RtpDumpSink::OnPacket, cricket::SINK_POST_CRYPTO); 15030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel1_->HasSendSinks(cricket::SINK_POST_CRYPTO)); 15040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(channel1_->HasRecvSinks(cricket::SINK_POST_CRYPTO)); 15050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(channel1_->HasSendSinks(cricket::SINK_PRE_CRYPTO)); 15060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(channel1_->HasRecvSinks(cricket::SINK_PRE_CRYPTO)); 15070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 15080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // The first packet is recorded with header + data. 15090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendRtp1()); 15100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // The second packet is recorded with header only. 15110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org sink->set_packet_filter(cricket::PF_RTPHEADER); 15120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendRtp1()); 15130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // The third packet is not recorded since sink is disabled. 15140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(sink->Enable(false)); 15150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendRtp1()); 15160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // The fourth packet is not recorded since sink is unregistered. 15170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(sink->Enable(true)); 15180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel1_->UnregisterSendSink(sink.get(), cricket::SINK_POST_CRYPTO); 15190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendRtp1()); 15200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org sink.reset(); // This will close the file. 15210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 15220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Read the recorded file and verify two packets. 15232a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::scoped_ptr<rtc::StreamInterface> stream( 15242a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::Filesystem::OpenFile(path, "rb")); 15250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 15260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::RtpDumpReader reader(stream.get()); 15270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::RtpDumpPacket packet; 15282a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org EXPECT_EQ(rtc::SR_SUCCESS, reader.ReadPacket(&packet)); 15290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string read_packet(reinterpret_cast<const char*>(&packet.data[0]), 15300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org packet.data.size()); 15310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(rtp_packet_, read_packet); 15320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 15332a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org EXPECT_EQ(rtc::SR_SUCCESS, reader.ReadPacket(&packet)); 15340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org size_t len = 0; 15350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org packet.GetRtpHeaderLen(&len); 15360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(len, packet.data.size()); 15370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(0, memcmp(&packet.data[0], rtp_packet_.c_str(), len)); 15380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 15392a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org EXPECT_EQ(rtc::SR_EOS, reader.ReadPacket(&packet)); 15400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 15410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Delete the file for media recording. 15420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stream.reset(); 15432a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org EXPECT_TRUE(rtc::Filesystem::DeleteFile(path)); 15440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 15450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 15460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void TestSetContentFailure() { 15470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(0, 0); 15480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typename T::Content content; 15490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::SessionDescription* sdesc_loc = new cricket::SessionDescription(); 15500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::SessionDescription* sdesc_rem = new cricket::SessionDescription(); 15510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 15520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Set up the session description. 15530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateContent(0, kPcmuCodec, kH264Codec, &content); 15540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org sdesc_loc->AddContent(cricket::CN_AUDIO, cricket::NS_JINGLE_RTP, 15550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org new cricket::AudioContentDescription()); 15560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org sdesc_loc->AddContent(cricket::CN_VIDEO, cricket::NS_JINGLE_RTP, 15570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org new cricket::VideoContentDescription()); 155832a0ac7e336c6132d7a48aa08fe2c912c0eb749etommi@webrtc.org session1_.set_local_description(sdesc_loc); 15590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org sdesc_rem->AddContent(cricket::CN_AUDIO, cricket::NS_JINGLE_RTP, 15600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org new cricket::AudioContentDescription()); 15610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org sdesc_rem->AddContent(cricket::CN_VIDEO, cricket::NS_JINGLE_RTP, 15620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org new cricket::VideoContentDescription()); 156332a0ac7e336c6132d7a48aa08fe2c912c0eb749etommi@webrtc.org session1_.set_remote_description(sdesc_rem); 15640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 15650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Test failures in SetLocalContent. 15660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org media_channel1_->set_fail_set_recv_codecs(true); 1567f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org session1_.SetError(cricket::BaseSession::ERROR_NONE, ""); 15680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org session1_.SetState(cricket::Session::STATE_SENTINITIATE); 15690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(cricket::BaseSession::ERROR_CONTENT, session1_.error()); 15700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org media_channel1_->set_fail_set_recv_codecs(true); 1571f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org session1_.SetError(cricket::BaseSession::ERROR_NONE, ""); 15720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org session1_.SetState(cricket::Session::STATE_SENTACCEPT); 15730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(cricket::BaseSession::ERROR_CONTENT, session1_.error()); 15740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 15750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Test failures in SetRemoteContent. 15760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org media_channel1_->set_fail_set_send_codecs(true); 1577f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org session1_.SetError(cricket::BaseSession::ERROR_NONE, ""); 15780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org session1_.SetState(cricket::Session::STATE_RECEIVEDINITIATE); 15790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(cricket::BaseSession::ERROR_CONTENT, session1_.error()); 15800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org media_channel1_->set_fail_set_send_codecs(true); 1581f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org session1_.SetError(cricket::BaseSession::ERROR_NONE, ""); 15820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org session1_.SetState(cricket::Session::STATE_RECEIVEDACCEPT); 15830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(cricket::BaseSession::ERROR_CONTENT, session1_.error()); 15840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 15850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 15860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void TestSendTwoOffers() { 15870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(0, 0); 15880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 15890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Set up the initial session description. 15900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::SessionDescription* sdesc = CreateSessionDescriptionWithStream(1); 159132a0ac7e336c6132d7a48aa08fe2c912c0eb749etommi@webrtc.org session1_.set_local_description(sdesc); 15920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1593f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org session1_.SetError(cricket::BaseSession::ERROR_NONE, ""); 15940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org session1_.SetState(cricket::Session::STATE_SENTINITIATE); 15950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(cricket::BaseSession::ERROR_NONE, session1_.error()); 15960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->HasSendStream(1)); 15970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 15980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Update the local description and set the state again. 15990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org sdesc = CreateSessionDescriptionWithStream(2); 160032a0ac7e336c6132d7a48aa08fe2c912c0eb749etommi@webrtc.org session1_.set_local_description(sdesc); 16010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 16020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org session1_.SetState(cricket::Session::STATE_SENTINITIATE); 16030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(cricket::BaseSession::ERROR_NONE, session1_.error()); 16040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel1_->HasSendStream(1)); 16050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->HasSendStream(2)); 16060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 16070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 16080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void TestReceiveTwoOffers() { 16090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(0, 0); 16100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 16110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Set up the initial session description. 16120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::SessionDescription* sdesc = CreateSessionDescriptionWithStream(1); 161332a0ac7e336c6132d7a48aa08fe2c912c0eb749etommi@webrtc.org session1_.set_remote_description(sdesc); 16140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1615f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org session1_.SetError(cricket::BaseSession::ERROR_NONE, ""); 16160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org session1_.SetState(cricket::Session::STATE_RECEIVEDINITIATE); 16170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(cricket::BaseSession::ERROR_NONE, session1_.error()); 16180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->HasRecvStream(1)); 16190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 16200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org sdesc = CreateSessionDescriptionWithStream(2); 162132a0ac7e336c6132d7a48aa08fe2c912c0eb749etommi@webrtc.org session1_.set_remote_description(sdesc); 16220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org session1_.SetState(cricket::Session::STATE_RECEIVEDINITIATE); 16230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(cricket::BaseSession::ERROR_NONE, session1_.error()); 16240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel1_->HasRecvStream(1)); 16250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->HasRecvStream(2)); 16260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 16270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 16280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void TestSendPrAnswer() { 16290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(0, 0); 16300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 16310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Set up the initial session description. 16320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::SessionDescription* sdesc = CreateSessionDescriptionWithStream(1); 163332a0ac7e336c6132d7a48aa08fe2c912c0eb749etommi@webrtc.org session1_.set_remote_description(sdesc); 16340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1635f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org session1_.SetError(cricket::BaseSession::ERROR_NONE, ""); 16360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org session1_.SetState(cricket::Session::STATE_RECEIVEDINITIATE); 16370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(cricket::BaseSession::ERROR_NONE, session1_.error()); 16380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->HasRecvStream(1)); 16390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 16400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Send PRANSWER 16410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org sdesc = CreateSessionDescriptionWithStream(2); 164232a0ac7e336c6132d7a48aa08fe2c912c0eb749etommi@webrtc.org session1_.set_local_description(sdesc); 16430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 16440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org session1_.SetState(cricket::Session::STATE_SENTPRACCEPT); 16450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(cricket::BaseSession::ERROR_NONE, session1_.error()); 16460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->HasRecvStream(1)); 16470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->HasSendStream(2)); 16480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 16490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Send ACCEPT 16500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org sdesc = CreateSessionDescriptionWithStream(3); 165132a0ac7e336c6132d7a48aa08fe2c912c0eb749etommi@webrtc.org session1_.set_local_description(sdesc); 16520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 16530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org session1_.SetState(cricket::Session::STATE_SENTACCEPT); 16540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(cricket::BaseSession::ERROR_NONE, session1_.error()); 16550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->HasRecvStream(1)); 16560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel1_->HasSendStream(2)); 16570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->HasSendStream(3)); 16580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 16590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 16600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void TestReceivePrAnswer() { 16610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(0, 0); 16620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 16630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Set up the initial session description. 16640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::SessionDescription* sdesc = CreateSessionDescriptionWithStream(1); 166532a0ac7e336c6132d7a48aa08fe2c912c0eb749etommi@webrtc.org session1_.set_local_description(sdesc); 16660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1667f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org session1_.SetError(cricket::BaseSession::ERROR_NONE, ""); 16680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org session1_.SetState(cricket::Session::STATE_SENTINITIATE); 16690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(cricket::BaseSession::ERROR_NONE, session1_.error()); 16700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->HasSendStream(1)); 16710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 16720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Receive PRANSWER 16730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org sdesc = CreateSessionDescriptionWithStream(2); 167432a0ac7e336c6132d7a48aa08fe2c912c0eb749etommi@webrtc.org session1_.set_remote_description(sdesc); 16750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 16760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org session1_.SetState(cricket::Session::STATE_RECEIVEDPRACCEPT); 16770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(cricket::BaseSession::ERROR_NONE, session1_.error()); 16780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->HasSendStream(1)); 16790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->HasRecvStream(2)); 16800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 16810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Receive ACCEPT 16820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org sdesc = CreateSessionDescriptionWithStream(3); 168332a0ac7e336c6132d7a48aa08fe2c912c0eb749etommi@webrtc.org session1_.set_remote_description(sdesc); 16840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 16850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org session1_.SetState(cricket::Session::STATE_RECEIVEDACCEPT); 16860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(cricket::BaseSession::ERROR_NONE, session1_.error()); 16870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->HasSendStream(1)); 16880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel1_->HasRecvStream(2)); 16890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->HasRecvStream(3)); 16900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 16910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 16920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void TestFlushRtcp() { 16930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool send_rtcp1; 16940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 16950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(RTCP, RTCP); 16960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendInitiate()); 16970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendAccept()); 16980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(2U, GetTransport1()->channels().size()); 16990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(2U, GetTransport2()->channels().size()); 17000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 17010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Send RTCP1 from a different thread. 17020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CallOnThreadAndWaitForDone(&ChannelTest<T>::SendRtcp1, &send_rtcp1); 17030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(send_rtcp1); 17040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // The sending message is only posted. channel2_ should be empty. 17050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckNoRtcp2()); 17060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 17070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // When channel1_ is deleted, the RTCP packet should be sent out to 17080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // channel2_. 17090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel1_.reset(); 17100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CheckRtcp2()); 17110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 17120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 17130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void TestChangeStateError() { 17140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(RTCP, RTCP); 17150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendInitiate()); 17160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org media_channel2_->set_fail_set_send(true); 17170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel2_->Enable(true)); 17180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(cricket::VoiceMediaChannel::ERROR_REC_DEVICE_OPEN_FAILED, 17190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org error_); 17200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 17210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1722907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org void TestSrtpError(int pl_type) { 1723907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org // For Audio, only pl_type 0 is added to the bundle filter. 1724907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org // For Video, only pl_type 97 is added to the bundle filter. 1725907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org // So we need to pass in pl_type so that the packet can pass through 1726907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org // the bundle filter before it can be processed by the srtp filter. 1727907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org // The packet is not a valid srtp packet because it is too short. 1728ffd44a8cc44412332ba4da7b5ace22217bd74983pbos@webrtc.org unsigned const char kBadPacket[] = {0x84, 1729ffd44a8cc44412332ba4da7b5ace22217bd74983pbos@webrtc.org static_cast<unsigned char>(pl_type), 1730ffd44a8cc44412332ba4da7b5ace22217bd74983pbos@webrtc.org 0x00, 1731ffd44a8cc44412332ba4da7b5ace22217bd74983pbos@webrtc.org 0x01, 1732ffd44a8cc44412332ba4da7b5ace22217bd74983pbos@webrtc.org 0x00, 1733ffd44a8cc44412332ba4da7b5ace22217bd74983pbos@webrtc.org 0x00, 1734ffd44a8cc44412332ba4da7b5ace22217bd74983pbos@webrtc.org 0x00, 1735ffd44a8cc44412332ba4da7b5ace22217bd74983pbos@webrtc.org 0x00, 1736ffd44a8cc44412332ba4da7b5ace22217bd74983pbos@webrtc.org 0x00, 1737ffd44a8cc44412332ba4da7b5ace22217bd74983pbos@webrtc.org 0x00, 1738ffd44a8cc44412332ba4da7b5ace22217bd74983pbos@webrtc.org 0x00, 1739ffd44a8cc44412332ba4da7b5ace22217bd74983pbos@webrtc.org 0x01}; 17400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(RTCP | SECURE, RTCP | SECURE); 17410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(channel1_->secure()); 17420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(channel2_->secure()); 17430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendInitiate()); 17440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendAccept()); 17450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel1_->secure()); 17460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel2_->secure()); 17470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel2_->set_srtp_signal_silent_time(200); 17480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 17490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Testing failures in sending packets. 17500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel2_->SendRtp(kBadPacket, sizeof(kBadPacket))); 17510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // The first failure will trigger an error. 17520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ_WAIT(T::MediaChannel::ERROR_REC_SRTP_ERROR, error_, 500); 17530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org error_ = T::MediaChannel::ERROR_NONE; 17540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // The next 1 sec failures will not trigger an error. 17550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel2_->SendRtp(kBadPacket, sizeof(kBadPacket))); 17560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Wait for a while to ensure no message comes in. 17572a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::Thread::Current()->ProcessMessages(210); 17580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(T::MediaChannel::ERROR_NONE, error_); 17590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // The error will be triggered again. 17600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel2_->SendRtp(kBadPacket, sizeof(kBadPacket))); 17610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ_WAIT(T::MediaChannel::ERROR_REC_SRTP_ERROR, error_, 500); 17620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 17630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Testing failures in receiving packets. 17640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org error_ = T::MediaChannel::ERROR_NONE; 17650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::TransportChannel* transport_channel = 17660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel2_->transport_channel(); 17670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org transport_channel->SignalReadPacket( 17680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org transport_channel, reinterpret_cast<const char*>(kBadPacket), 17692a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org sizeof(kBadPacket), rtc::PacketTime(), 0); 1770569e45bc77872e360a1d114fda34f9690069ca01mallinath@webrtc.org EXPECT_EQ_WAIT(T::MediaChannel::ERROR_PLAY_SRTP_ERROR, error_, 500); 17710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 17720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 17730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void TestOnReadyToSend() { 17740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(RTCP, RTCP); 17750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TransportChannel* rtp = channel1_->transport_channel(); 17760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TransportChannel* rtcp = channel1_->rtcp_transport_channel(); 17770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel1_->ready_to_send()); 17780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org rtp->SignalReadyToSend(rtp); 17790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel1_->ready_to_send()); 17800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org rtcp->SignalReadyToSend(rtcp); 17810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // MediaChannel::OnReadyToSend only be called when both rtp and rtcp 17820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // channel are ready to send. 17830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->ready_to_send()); 17840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 17850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // rtp channel becomes not ready to send will be propagated to mediachannel 17860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel1_->SetReadyToSend(rtp, false); 17870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel1_->ready_to_send()); 17880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel1_->SetReadyToSend(rtp, true); 17890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->ready_to_send()); 17900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 17910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // rtcp channel becomes not ready to send will be propagated to mediachannel 17920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel1_->SetReadyToSend(rtcp, false); 17930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel1_->ready_to_send()); 17940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel1_->SetReadyToSend(rtcp, true); 17950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->ready_to_send()); 17960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 17970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 17980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void TestOnReadyToSendWithRtcpMux() { 17990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(RTCP, RTCP); 18000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typename T::Content content; 18010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateContent(0, kPcmuCodec, kH264Codec, &content); 18020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Both sides agree on mux. Should no longer be a separate RTCP channel. 18030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org content.set_rtcp_mux(true); 1804f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel1_->SetLocalContent(&content, CA_OFFER, NULL)); 1805f32dd31e14521d7f845e7776af6d44d411573370sergeyu@chromium.org EXPECT_TRUE(channel1_->SetRemoteContent(&content, CA_ANSWER, NULL)); 18060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel1_->rtcp_transport_channel() == NULL); 18070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TransportChannel* rtp = channel1_->transport_channel(); 18080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel1_->ready_to_send()); 18090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // In the case of rtcp mux, the SignalReadyToSend() from rtp channel 18100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // should trigger the MediaChannel's OnReadyToSend. 18110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org rtp->SignalReadyToSend(rtp); 18120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->ready_to_send()); 18130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel1_->SetReadyToSend(rtp, false); 18140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel1_->ready_to_send()); 18150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 18160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 18170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org protected: 18180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::FakeSession session1_; 18190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::FakeSession session2_; 18200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::FakeMediaEngine media_engine_; 18210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // The media channels are owned by the voice channel objects below. 18220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typename T::MediaChannel* media_channel1_; 18230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typename T::MediaChannel* media_channel2_; 18242a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::scoped_ptr<typename T::Channel> channel1_; 18252a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::scoped_ptr<typename T::Channel> channel2_; 18260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typename T::Content local_media_content1_; 18270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typename T::Content local_media_content2_; 18280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typename T::Content remote_media_content1_; 18290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typename T::Content remote_media_content2_; 18302a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::scoped_ptr<rtc::SSLIdentity> identity1_; 18312a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::scoped_ptr<rtc::SSLIdentity> identity2_; 18320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // The RTP and RTCP packets to send in the tests. 18330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string rtp_packet_; 18340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string rtcp_packet_; 18350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int media_info_callbacks1_; 18360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int media_info_callbacks2_; 18370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool mute_callback_recved_; 18380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool mute_callback_value_; 18390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 18400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org uint32 ssrc_; 18410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typename T::MediaChannel::Error error_; 18420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 18430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 18440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 18450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgtemplate<> 18460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgvoid ChannelTest<VoiceTraits>::CreateContent( 18470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int flags, 18480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const cricket::AudioCodec& audio_codec, 18490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const cricket::VideoCodec& video_codec, 18500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::AudioContentDescription* audio) { 18510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org audio->AddCodec(audio_codec); 18520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org audio->set_rtcp_mux((flags & RTCP_MUX) != 0); 18530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (flags & SECURE) { 18540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org audio->AddCrypto(cricket::CryptoParams( 18550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1, cricket::CS_AES_CM_128_HMAC_SHA1_32, 18562a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org "inline:" + rtc::CreateRandomString(40), "")); 18570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 18580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 18590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 18600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgtemplate<> 18610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgvoid ChannelTest<VoiceTraits>::CopyContent( 18620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const cricket::AudioContentDescription& source, 18630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::AudioContentDescription* audio) { 18640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org *audio = source; 18650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 18660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 18670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgtemplate<> 18680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgbool ChannelTest<VoiceTraits>::CodecMatches(const cricket::AudioCodec& c1, 18690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const cricket::AudioCodec& c2) { 18700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return c1.name == c2.name && c1.clockrate == c2.clockrate && 18710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org c1.bitrate == c2.bitrate && c1.channels == c2.channels; 18720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 18730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 18740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgtemplate<> 18750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgvoid ChannelTest<VoiceTraits>::AddLegacyStreamInContent( 18760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org uint32 ssrc, int flags, cricket::AudioContentDescription* audio) { 18770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org audio->AddLegacyStream(ssrc); 18780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 18790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 18800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass VoiceChannelTest 18810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org : public ChannelTest<VoiceTraits> { 18820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public: 18830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typedef ChannelTest<VoiceTraits> 18840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base; 18850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org VoiceChannelTest() : Base(kPcmuFrame, sizeof(kPcmuFrame), 18860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kRtcpReport, sizeof(kRtcpReport)) { 18870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 18880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 18890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void TestSetChannelOptions() { 18900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(0, 0); 18910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 18920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::AudioOptions options1; 18930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org options1.echo_cancellation.Set(false); 18940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::AudioOptions options2; 18950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org options2.echo_cancellation.Set(true); 18960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 18970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel1_->SetChannelOptions(options1); 18980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel2_->SetChannelOptions(options1); 18990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::AudioOptions actual_options; 19000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ASSERT_TRUE(media_channel1_->GetOptions(&actual_options)); 19010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(options1, actual_options); 19020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ASSERT_TRUE(media_channel2_->GetOptions(&actual_options)); 19030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(options1, actual_options); 19040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 19050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel1_->SetChannelOptions(options2); 19060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel2_->SetChannelOptions(options2); 19070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ASSERT_TRUE(media_channel1_->GetOptions(&actual_options)); 19080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(options2, actual_options); 19090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ASSERT_TRUE(media_channel2_->GetOptions(&actual_options)); 19100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(options2, actual_options); 19110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 19120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 19130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 19140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// override to add NULL parameter 19150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgtemplate<> 19160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgcricket::VideoChannel* ChannelTest<VideoTraits>::CreateChannel( 19172a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::Thread* thread, cricket::MediaEngineInterface* engine, 19180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::FakeVideoMediaChannel* ch, cricket::BaseSession* session, 19190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool rtcp) { 19200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::VideoChannel* channel = new cricket::VideoChannel( 19210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org thread, engine, ch, session, cricket::CN_VIDEO, rtcp, NULL); 19220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (!channel->Init()) { 19230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org delete channel; 19240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel = NULL; 19250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 19260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return channel; 19270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 19280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 19290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// override to add 0 parameter 19300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgtemplate<> 19310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgbool ChannelTest<VideoTraits>::AddStream1(int id) { 19320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return channel1_->AddRecvStream(cricket::StreamParams::CreateLegacy(id)); 19330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 19340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 19350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgtemplate<> 19360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgvoid ChannelTest<VideoTraits>::CreateContent( 19370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int flags, 19380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const cricket::AudioCodec& audio_codec, 19390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const cricket::VideoCodec& video_codec, 19400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::VideoContentDescription* video) { 19410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org video->AddCodec(video_codec); 19420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org video->set_rtcp_mux((flags & RTCP_MUX) != 0); 19430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (flags & SECURE) { 19440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org video->AddCrypto(cricket::CryptoParams( 19450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1, cricket::CS_AES_CM_128_HMAC_SHA1_80, 19462a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org "inline:" + rtc::CreateRandomString(40), "")); 19470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 19480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 19490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 19500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgtemplate<> 19510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgvoid ChannelTest<VideoTraits>::CopyContent( 19520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const cricket::VideoContentDescription& source, 19530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::VideoContentDescription* video) { 19540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org *video = source; 19550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 19560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 19570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgtemplate<> 19580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgbool ChannelTest<VideoTraits>::CodecMatches(const cricket::VideoCodec& c1, 19590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const cricket::VideoCodec& c2) { 19600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return c1.name == c2.name && c1.width == c2.width && c1.height == c2.height && 19610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org c1.framerate == c2.framerate; 19620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 19630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 19640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgtemplate<> 19650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgvoid ChannelTest<VideoTraits>::AddLegacyStreamInContent( 19660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org uint32 ssrc, int flags, cricket::VideoContentDescription* video) { 19670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org video->AddLegacyStream(ssrc); 19680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 19690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 19700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass VideoChannelTest 19710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org : public ChannelTest<VideoTraits> { 19720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public: 19730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typedef ChannelTest<VideoTraits> 19740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base; 19750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org VideoChannelTest() : Base(kH264Packet, sizeof(kH264Packet), 19760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kRtcpReport, sizeof(kRtcpReport)) { 19770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 19780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 19790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void TestSetChannelOptions() { 19800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(0, 0); 19810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 19820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::VideoOptions o1, o2; 19830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org o1.video_noise_reduction.Set(true); 19840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 19850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel1_->SetChannelOptions(o1); 19860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel2_->SetChannelOptions(o1); 19870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->GetOptions(&o2)); 19880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(o1, o2); 19890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel2_->GetOptions(&o2)); 19900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(o1, o2); 19910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 19920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org o1.video_leaky_bucket.Set(true); 19930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel1_->SetChannelOptions(o1); 19940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel2_->SetChannelOptions(o1); 19950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->GetOptions(&o2)); 19960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(o1, o2); 19970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel2_->GetOptions(&o2)); 19980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(o1, o2); 19990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 20000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 20010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 20020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 20030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// VoiceChannelTest 20040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 20050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, TestInit) { 20060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestInit(); 20070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel1_->IsStreamMuted(0)); 20080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->dtmf_info_queue().empty()); 20090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 20100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 20110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, TestSetContents) { 20120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestSetContents(); 20130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 20140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 20150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, TestSetContentsNullOffer) { 20160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestSetContentsNullOffer(); 20170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 20180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 20190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, TestSetContentsRtcpMux) { 20200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestSetContentsRtcpMux(); 20210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 20220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 20230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, TestSetContentsRtcpMuxWithPrAnswer) { 20240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestSetContentsRtcpMux(); 20250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 20260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 20270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, TestSetRemoteContentUpdate) { 20280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestSetRemoteContentUpdate(); 20290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 20300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 20310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, TestStreams) { 20320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestStreams(); 20330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 20340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 20350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, TestUpdateStreamsInLocalContent) { 20360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestUpdateStreamsInLocalContent(); 20370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 20380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 20390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, TestUpdateRemoteStreamsInContent) { 20400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestUpdateStreamsInRemoteContent(); 20410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 20420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 20430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, TestChangeStreamParamsInContent) { 20440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestChangeStreamParamsInContent(); 20450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 20460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 20470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, TestPlayoutAndSendingStates) { 20480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestPlayoutAndSendingStates(); 20490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 20500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 20510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, TestMuteStream) { 20520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestMuteStream(); 20530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 20540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 20550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, TestMediaContentDirection) { 20560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestMediaContentDirection(); 20570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 20580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 20590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, TestCallSetup) { 20600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestCallSetup(); 20610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 20620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 20630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, TestCallTeardownRtcpMux) { 20640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestCallTeardownRtcpMux(); 20650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 20660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 20670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, SendRtpToRtp) { 20680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendRtpToRtp(); 20690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 20700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 20710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, SendNoRtcpToNoRtcp) { 20720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendNoRtcpToNoRtcp(); 20730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 20740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 20750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, SendNoRtcpToRtcp) { 20760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendNoRtcpToRtcp(); 20770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 20780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 20790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, SendRtcpToNoRtcp) { 20800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendRtcpToNoRtcp(); 20810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 20820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 20830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, SendRtcpToRtcp) { 20840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendRtcpToRtcp(); 20850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 20860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 20870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, SendRtcpMuxToRtcp) { 20880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendRtcpMuxToRtcp(); 20890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 20900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 20910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, SendRtcpMuxToRtcpMux) { 20920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendRtcpMuxToRtcpMux(); 20930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 20940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 20950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, SendEarlyRtcpMuxToRtcp) { 20960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendEarlyRtcpMuxToRtcp(); 20970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 20980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 20990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, SendEarlyRtcpMuxToRtcpMux) { 21000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendEarlyRtcpMuxToRtcpMux(); 21010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 21020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 21030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, SendSrtpToSrtpRtcpMux) { 21040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendSrtpToSrtp(RTCP_MUX, RTCP_MUX); 21050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 21060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 21070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, SendSrtpToRtp) { 21080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendSrtpToSrtp(); 21090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 21100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 21110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, SendSrtcpMux) { 21120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendSrtpToSrtp(RTCP_MUX, RTCP_MUX); 21130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 21140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 21150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, SendDtlsSrtpToSrtp) { 21160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org MAYBE_SKIP_TEST(HaveDtlsSrtp); 21170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendSrtpToSrtp(DTLS, 0); 21180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 21190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 21200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, SendDtlsSrtpToDtlsSrtp) { 21210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org MAYBE_SKIP_TEST(HaveDtlsSrtp); 21220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendSrtpToSrtp(DTLS, DTLS); 21230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 21240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 21250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, SendDtlsSrtpToDtlsSrtpRtcpMux) { 21260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org MAYBE_SKIP_TEST(HaveDtlsSrtp); 21270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendSrtpToSrtp(DTLS | RTCP_MUX, DTLS | RTCP_MUX); 21280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 21290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 21300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, SendEarlyMediaUsingRtcpMuxSrtp) { 21310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendEarlyMediaUsingRtcpMuxSrtp(); 21320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 21330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 21340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, SendRtpToRtpOnThread) { 21350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendRtpToRtpOnThread(); 21360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 21370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 21380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, SendSrtpToSrtpOnThread) { 21390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendSrtpToSrtpOnThread(); 21400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 21410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 21420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, SendWithWritabilityLoss) { 21430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendWithWritabilityLoss(); 21440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 21450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 21460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, TestMediaMonitor) { 21470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestMediaMonitor(); 21480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 21490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 21500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Test that MuteStream properly forwards to the media channel and does 21510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// not signal. 21520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, TestVoiceSpecificMuteStream) { 21530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(0, 0); 21540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel1_->IsStreamMuted(0)); 21550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(mute_callback_recved_); 21560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel1_->MuteStream(0, true)); 21570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->IsStreamMuted(0)); 21580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(mute_callback_recved_); 21590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel1_->MuteStream(0, false)); 21600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel1_->IsStreamMuted(0)); 21610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(mute_callback_recved_); 21620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 21630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 21640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Test that keyboard automute works correctly and signals upwards. 21657262c0074086d60e77a075d336d2594fa0234b92asapersson@webrtc.orgTEST_F(VoiceChannelTest, DISABLED_TestKeyboardMute) { 21660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(0, 0); 21670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel1_->IsStreamMuted(0)); 21680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(cricket::VoiceMediaChannel::ERROR_NONE, error_); 21690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 21700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::VoiceMediaChannel::Error e = 21710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::VoiceMediaChannel::ERROR_REC_TYPING_NOISE_DETECTED; 21720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 21730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Typing doesn't mute automatically unless typing monitor has been installed 21740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org media_channel1_->TriggerError(0, e); 21752a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::Thread::Current()->ProcessMessages(0); 21760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(e, error_); 21770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel1_->IsStreamMuted(0)); 21780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(mute_callback_recved_); 21790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 21800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::TypingMonitorOptions o = {0}; 21810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org o.mute_period = 1500; 21820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel1_->StartTypingMonitor(o); 21830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org media_channel1_->TriggerError(0, e); 21842a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::Thread::Current()->ProcessMessages(0); 21850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->IsStreamMuted(0)); 21860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(mute_callback_recved_); 21870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 21880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 21890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Test that PressDTMF properly forwards to the media channel. 21900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, TestDtmf) { 21910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(0, 0); 21920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendInitiate()); 21930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendAccept()); 21940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(0U, media_channel1_->dtmf_info_queue().size()); 21950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 21960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel1_->PressDTMF(1, true)); 21970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel1_->PressDTMF(8, false)); 21980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 21990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ASSERT_EQ(2U, media_channel1_->dtmf_info_queue().size()); 22000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CompareDtmfInfo(media_channel1_->dtmf_info_queue()[0], 22010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 0, 1, 160, cricket::DF_PLAY | cricket::DF_SEND)); 22020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CompareDtmfInfo(media_channel1_->dtmf_info_queue()[1], 22030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 0, 8, 160, cricket::DF_SEND)); 22040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 22050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 22060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Test that InsertDtmf properly forwards to the media channel. 22070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, TestInsertDtmf) { 22080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(0, 0); 22090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendInitiate()); 22100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendAccept()); 22110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(0U, media_channel1_->dtmf_info_queue().size()); 22120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 22130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel1_->InsertDtmf(1, 3, 100, cricket::DF_SEND)); 22140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel1_->InsertDtmf(2, 5, 110, cricket::DF_PLAY)); 22150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel1_->InsertDtmf(3, 7, 120, 22160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::DF_PLAY | cricket::DF_SEND)); 22170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2218692d748e58db01318ef10a7a19147da601e13e93henrike@webrtc.org ASSERT_EQ(3U, media_channel1_->dtmf_info_queue().size()); 22190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(CompareDtmfInfo(media_channel1_->dtmf_info_queue()[0], 22200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1, 3, 100, cricket::DF_SEND)); 2221692d748e58db01318ef10a7a19147da601e13e93henrike@webrtc.org EXPECT_TRUE(CompareDtmfInfo(media_channel1_->dtmf_info_queue()[1], 22220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2, 5, 110, cricket::DF_PLAY)); 2223692d748e58db01318ef10a7a19147da601e13e93henrike@webrtc.org EXPECT_TRUE(CompareDtmfInfo(media_channel1_->dtmf_info_queue()[2], 22240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 3, 7, 120, cricket::DF_PLAY | cricket::DF_SEND)); 22250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 22260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 22270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, TestMediaSinks) { 22280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestMediaSinks(); 22290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 22300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 22310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, TestSetContentFailure) { 22320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestSetContentFailure(); 22330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 22340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 22350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, TestSendTwoOffers) { 22360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestSendTwoOffers(); 22370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 22380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 22390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, TestReceiveTwoOffers) { 22400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestReceiveTwoOffers(); 22410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 22420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 22430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, TestSendPrAnswer) { 22440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestSendPrAnswer(); 22450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 22460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 22470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, TestReceivePrAnswer) { 22480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestReceivePrAnswer(); 22490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 22500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 22510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, TestFlushRtcp) { 22520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestFlushRtcp(); 22530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 22540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 22550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, TestChangeStateError) { 22560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestChangeStateError(); 22570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 22580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 22590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, TestSrtpError) { 2260907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org Base::TestSrtpError(kAudioPts[0]); 22610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 22620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 22630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, TestOnReadyToSend) { 22640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestOnReadyToSend(); 22650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 22660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 22670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, TestOnReadyToSendWithRtcpMux) { 22680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestOnReadyToSendWithRtcpMux(); 22690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 22700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 22710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Test that we can play a ringback tone properly. 22720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, TestRingbackTone) { 22730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(RTCP, RTCP); 22740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel1_->ringback_tone_play()); 22750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel1_->SetRingbackTone("RIFF", 4)); 22760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendInitiate()); 22770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendAccept()); 22780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Play ringback tone, no loop. 22790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel1_->PlayRingbackTone(0, true, false)); 22800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(0U, media_channel1_->ringback_tone_ssrc()); 22810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->ringback_tone_play()); 22820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel1_->ringback_tone_loop()); 22830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Stop the ringback tone. 22840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel1_->PlayRingbackTone(0, false, false)); 22850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel1_->ringback_tone_play()); 22860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Add a stream. 22870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(AddStream1(1)); 22880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Play ringback tone, looping, on the new stream. 22890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel1_->PlayRingbackTone(1, true, true)); 22900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(1U, media_channel1_->ringback_tone_ssrc()); 22910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->ringback_tone_play()); 22920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->ringback_tone_loop()); 22930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Stop the ringback tone. 22940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel1_->PlayRingbackTone(1, false, false)); 22950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel1_->ringback_tone_play()); 22960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 22970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 22980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Test that we can scale the output volume properly for 1:1 calls. 22990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, TestScaleVolume1to1Call) { 23000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(RTCP, RTCP); 23010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendInitiate()); 23020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendAccept()); 23030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org double left, right; 23040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 23050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Default is (1.0, 1.0). 23060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->GetOutputScaling(0, &left, &right)); 23070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_DOUBLE_EQ(1.0, left); 23080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_DOUBLE_EQ(1.0, right); 23090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // invalid ssrc. 23100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel1_->GetOutputScaling(3, &left, &right)); 23110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 23120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Set scale to (1.5, 0.5). 23130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel1_->SetOutputScaling(0, 1.5, 0.5)); 23140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->GetOutputScaling(0, &left, &right)); 23150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_DOUBLE_EQ(1.5, left); 23160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_DOUBLE_EQ(0.5, right); 23170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 23180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Set scale to (0, 0). 23190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel1_->SetOutputScaling(0, 0.0, 0.0)); 23200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->GetOutputScaling(0, &left, &right)); 23210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_DOUBLE_EQ(0.0, left); 23220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_DOUBLE_EQ(0.0, right); 23230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 23240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 23250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Test that we can scale the output volume properly for multiway calls. 23260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, TestScaleVolumeMultiwayCall) { 23270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(RTCP, RTCP); 23280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendInitiate()); 23290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendAccept()); 23300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(AddStream1(1)); 23310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(AddStream1(2)); 23320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 23330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org double left, right; 23340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Default is (1.0, 1.0). 23350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->GetOutputScaling(0, &left, &right)); 23360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_DOUBLE_EQ(1.0, left); 23370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_DOUBLE_EQ(1.0, right); 23380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->GetOutputScaling(1, &left, &right)); 23390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_DOUBLE_EQ(1.0, left); 23400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_DOUBLE_EQ(1.0, right); 23410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->GetOutputScaling(2, &left, &right)); 23420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_DOUBLE_EQ(1.0, left); 23430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_DOUBLE_EQ(1.0, right); 23440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // invalid ssrc. 23450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel1_->GetOutputScaling(3, &left, &right)); 23460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 23470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Set scale to (1.5, 0.5) for ssrc = 1. 23480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel1_->SetOutputScaling(1, 1.5, 0.5)); 23490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->GetOutputScaling(1, &left, &right)); 23500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_DOUBLE_EQ(1.5, left); 23510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_DOUBLE_EQ(0.5, right); 23520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->GetOutputScaling(2, &left, &right)); 23530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_DOUBLE_EQ(1.0, left); 23540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_DOUBLE_EQ(1.0, right); 23550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->GetOutputScaling(0, &left, &right)); 23560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_DOUBLE_EQ(1.0, left); 23570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_DOUBLE_EQ(1.0, right); 23580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 23590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Set scale to (0, 0) for all ssrcs. 23600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel1_->SetOutputScaling(0, 0.0, 0.0)); 23610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->GetOutputScaling(0, &left, &right)); 23620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_DOUBLE_EQ(0.0, left); 23630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_DOUBLE_EQ(0.0, right); 23640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->GetOutputScaling(1, &left, &right)); 23650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_DOUBLE_EQ(0.0, left); 23660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_DOUBLE_EQ(0.0, right); 23670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->GetOutputScaling(2, &left, &right)); 23680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_DOUBLE_EQ(0.0, left); 23690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_DOUBLE_EQ(0.0, right); 23700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 23710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2372907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.orgTEST_F(VoiceChannelTest, SendBundleToBundle) { 2373907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org Base::SendBundleToBundle(kAudioPts, ARRAY_SIZE(kAudioPts), false, false); 23740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 23750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2376907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.orgTEST_F(VoiceChannelTest, SendBundleToBundleSecure) { 2377907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org Base::SendBundleToBundle(kAudioPts, ARRAY_SIZE(kAudioPts), false, true); 2378907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org} 2379907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org 2380907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.orgTEST_F(VoiceChannelTest, SendBundleToBundleWithRtcpMux) { 2381907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org Base::SendBundleToBundle( 2382907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org kAudioPts, ARRAY_SIZE(kAudioPts), true, false); 2383907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org} 2384907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org 2385907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.orgTEST_F(VoiceChannelTest, SendBundleToBundleWithRtcpMuxSecure) { 2386907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org Base::SendBundleToBundle( 2387907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org kAudioPts, ARRAY_SIZE(kAudioPts), true, true); 23880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 23890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 23900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VoiceChannelTest, TestSetChannelOptions) { 23910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TestSetChannelOptions(); 23920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 23930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 23940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// VideoChannelTest 23950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, TestInit) { 23960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestInit(); 23970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 23980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 23990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, TestSetContents) { 24000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestSetContents(); 24010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 24020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 24030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, TestSetContentsNullOffer) { 24040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestSetContentsNullOffer(); 24050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 24060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 24070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, TestSetContentsRtcpMux) { 24080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestSetContentsRtcpMux(); 24090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 24100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 24110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, TestSetContentsRtcpMuxWithPrAnswer) { 24120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestSetContentsRtcpMux(); 24130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 24140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 24150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, TestSetContentsVideoOptions) { 24160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestSetContentsVideoOptions(); 24170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 24180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 24190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, TestSetRemoteContentUpdate) { 24200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestSetRemoteContentUpdate(); 24210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 24220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 24230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, TestStreams) { 24240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestStreams(); 24250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 24260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 24270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, TestScreencastEvents) { 24280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const int kTimeoutMs = 500; 24290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TestInit(); 24300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::ScreencastEventCatcher catcher; 24310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel1_->SignalScreencastWindowEvent.connect( 24320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org &catcher, 24330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org &cricket::ScreencastEventCatcher::OnEvent); 2434c7416745e9d35902e62517d1bddcd546623e1c34buildbot@webrtc.org 2435c7416745e9d35902e62517d1bddcd546623e1c34buildbot@webrtc.org rtc::scoped_ptr<cricket::FakeScreenCapturerFactory> 2436c7416745e9d35902e62517d1bddcd546623e1c34buildbot@webrtc.org screen_capturer_factory(new cricket::FakeScreenCapturerFactory()); 2437c7416745e9d35902e62517d1bddcd546623e1c34buildbot@webrtc.org cricket::VideoCapturer* screen_capturer = screen_capturer_factory->Create( 2438c7416745e9d35902e62517d1bddcd546623e1c34buildbot@webrtc.org ScreencastId(WindowId(0))); 2439c7416745e9d35902e62517d1bddcd546623e1c34buildbot@webrtc.org ASSERT_TRUE(screen_capturer != NULL); 2440c7416745e9d35902e62517d1bddcd546623e1c34buildbot@webrtc.org 2441c7416745e9d35902e62517d1bddcd546623e1c34buildbot@webrtc.org EXPECT_TRUE(channel1_->AddScreencast(0, screen_capturer)); 2442c7416745e9d35902e62517d1bddcd546623e1c34buildbot@webrtc.org EXPECT_EQ_WAIT(cricket::CS_STOPPED, screen_capturer_factory->capture_state(), 24430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kTimeoutMs); 2444c7416745e9d35902e62517d1bddcd546623e1c34buildbot@webrtc.org 2445c7416745e9d35902e62517d1bddcd546623e1c34buildbot@webrtc.org screen_capturer->SignalStateChange(screen_capturer, cricket::CS_PAUSED); 24462a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org EXPECT_EQ_WAIT(rtc::WE_MINIMIZE, catcher.event(), kTimeoutMs); 2447c7416745e9d35902e62517d1bddcd546623e1c34buildbot@webrtc.org 2448c7416745e9d35902e62517d1bddcd546623e1c34buildbot@webrtc.org screen_capturer->SignalStateChange(screen_capturer, cricket::CS_RUNNING); 24492a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org EXPECT_EQ_WAIT(rtc::WE_RESTORE, catcher.event(), kTimeoutMs); 2450c7416745e9d35902e62517d1bddcd546623e1c34buildbot@webrtc.org 2451c7416745e9d35902e62517d1bddcd546623e1c34buildbot@webrtc.org screen_capturer->SignalStateChange(screen_capturer, cricket::CS_STOPPED); 24522a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org EXPECT_EQ_WAIT(rtc::WE_CLOSE, catcher.event(), kTimeoutMs); 2453c7416745e9d35902e62517d1bddcd546623e1c34buildbot@webrtc.org 24540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel1_->RemoveScreencast(0)); 24550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 24560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 24570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, TestUpdateStreamsInLocalContent) { 24580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestUpdateStreamsInLocalContent(); 24590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 24600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 24610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, TestUpdateRemoteStreamsInContent) { 24620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestUpdateStreamsInRemoteContent(); 24630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 24640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 24650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, TestChangeStreamParamsInContent) { 24660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestChangeStreamParamsInContent(); 24670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 24680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 24690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, TestPlayoutAndSendingStates) { 24700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestPlayoutAndSendingStates(); 24710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 24720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 24730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, TestMuteStream) { 24740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestMuteStream(); 24750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 24760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 24770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, TestMediaContentDirection) { 24780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestMediaContentDirection(); 24790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 24800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 24810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, TestCallSetup) { 24820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestCallSetup(); 24830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 24840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 24850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, TestCallTeardownRtcpMux) { 24860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestCallTeardownRtcpMux(); 24870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 24880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 24890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, SendRtpToRtp) { 24900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendRtpToRtp(); 24910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 24920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 24930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, SendNoRtcpToNoRtcp) { 24940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendNoRtcpToNoRtcp(); 24950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 24960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 24970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, SendNoRtcpToRtcp) { 24980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendNoRtcpToRtcp(); 24990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 25000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 25010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, SendRtcpToNoRtcp) { 25020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendRtcpToNoRtcp(); 25030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 25040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 25050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, SendRtcpToRtcp) { 25060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendRtcpToRtcp(); 25070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 25080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 25090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, SendRtcpMuxToRtcp) { 25100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendRtcpMuxToRtcp(); 25110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 25120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 25130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, SendRtcpMuxToRtcpMux) { 25140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendRtcpMuxToRtcpMux(); 25150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 25160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 25170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, SendEarlyRtcpMuxToRtcp) { 25180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendEarlyRtcpMuxToRtcp(); 25190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 25200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 25210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, SendEarlyRtcpMuxToRtcpMux) { 25220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendEarlyRtcpMuxToRtcpMux(); 25230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 25240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 25250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, SendSrtpToSrtp) { 25260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendSrtpToSrtp(); 25270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 25280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 25290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, SendSrtpToRtp) { 25300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendSrtpToSrtp(); 25310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 25320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 25330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, SendDtlsSrtpToSrtp) { 25340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org MAYBE_SKIP_TEST(HaveDtlsSrtp); 25350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendSrtpToSrtp(DTLS, 0); 25360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 25370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 25380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, SendDtlsSrtpToDtlsSrtp) { 25390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org MAYBE_SKIP_TEST(HaveDtlsSrtp); 25400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendSrtpToSrtp(DTLS, DTLS); 25410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 25420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 25430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, SendDtlsSrtpToDtlsSrtpRtcpMux) { 25440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org MAYBE_SKIP_TEST(HaveDtlsSrtp); 25450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendSrtpToSrtp(DTLS | RTCP_MUX, DTLS | RTCP_MUX); 25460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 25470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 25480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, SendSrtcpMux) { 25490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendSrtpToSrtp(RTCP_MUX, RTCP_MUX); 25500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 25510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 25520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, SendEarlyMediaUsingRtcpMuxSrtp) { 25530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendEarlyMediaUsingRtcpMuxSrtp(); 25540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 25550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 25560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, SendRtpToRtpOnThread) { 25570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendRtpToRtpOnThread(); 25580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 25590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 25600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, SendSrtpToSrtpOnThread) { 25610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendSrtpToSrtpOnThread(); 25620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 25630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 25640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, SendWithWritabilityLoss) { 25650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendWithWritabilityLoss(); 25660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 25670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 25680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, TestMediaMonitor) { 25690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestMediaMonitor(); 25700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 25710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 25720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, TestMediaSinks) { 25730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestMediaSinks(); 25740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 25750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 25760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, TestSetContentFailure) { 25770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestSetContentFailure(); 25780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 25790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 25800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, TestSendTwoOffers) { 25810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestSendTwoOffers(); 25820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 25830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 25840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, TestReceiveTwoOffers) { 25850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestReceiveTwoOffers(); 25860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 25870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 25880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, TestSendPrAnswer) { 25890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestSendPrAnswer(); 25900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 25910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 25920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, TestReceivePrAnswer) { 25930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestReceivePrAnswer(); 25940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 25950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 25960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, TestFlushRtcp) { 25970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestFlushRtcp(); 25980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 25990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2600907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.orgTEST_F(VideoChannelTest, SendBundleToBundle) { 2601907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org Base::SendBundleToBundle(kVideoPts, ARRAY_SIZE(kVideoPts), false, false); 2602907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org} 2603907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org 2604907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.orgTEST_F(VideoChannelTest, SendBundleToBundleSecure) { 2605907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org Base::SendBundleToBundle(kVideoPts, ARRAY_SIZE(kVideoPts), false, true); 2606907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org} 2607907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org 2608907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.orgTEST_F(VideoChannelTest, SendBundleToBundleWithRtcpMux) { 2609907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org Base::SendBundleToBundle( 2610907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org kVideoPts, ARRAY_SIZE(kVideoPts), true, false); 26110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 26120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2613907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.orgTEST_F(VideoChannelTest, SendBundleToBundleWithRtcpMuxSecure) { 2614907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org Base::SendBundleToBundle( 2615907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org kVideoPts, ARRAY_SIZE(kVideoPts), true, true); 26160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 26170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 26180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// TODO(gangji): Add VideoChannelTest.TestChangeStateError. 26190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 26200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, TestSrtpError) { 2621907f45cd2b5d7872266db6d855e5de08bed77c75buildbot@webrtc.org Base::TestSrtpError(kVideoPts[0]); 26220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 26230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 26240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, TestOnReadyToSend) { 26250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestOnReadyToSend(); 26260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 26270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 26280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, TestOnReadyToSendWithRtcpMux) { 26290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestOnReadyToSendWithRtcpMux(); 26300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 26310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 26320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, TestApplyViewRequest) { 26330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(0, 0); 26340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::StreamParams stream2; 26350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stream2.id = "stream2"; 26360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stream2.ssrcs.push_back(2222); 26370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org local_media_content1_.AddStream(stream2); 26380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 26390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendInitiate()); 26400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendAccept()); 26410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 26420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::VideoFormat send_format; 26430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->GetSendStreamFormat(kSsrc1, &send_format)); 26440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(640, send_format.width); 26450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(400, send_format.height); 26460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(cricket::VideoFormat::FpsToInterval(30), send_format.interval); 26470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 26480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::ViewRequest request; 26490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // stream1: 320x200x15; stream2: 0x0x0 26500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org request.static_video_views.push_back(cricket::StaticVideoView( 26510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::StreamSelector(kSsrc1), 320, 200, 15)); 26520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel1_->ApplyViewRequest(request)); 26530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->GetSendStreamFormat(kSsrc1, &send_format)); 26540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(320, send_format.width); 26550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(200, send_format.height); 26560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(cricket::VideoFormat::FpsToInterval(15), send_format.interval); 26570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->GetSendStreamFormat(2222, &send_format)); 26580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(0, send_format.width); 26590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(0, send_format.height); 26600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 26610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // stream1: 160x100x8; stream2: 0x0x0 26620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org request.static_video_views.clear(); 26630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org request.static_video_views.push_back(cricket::StaticVideoView( 26640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::StreamSelector(kSsrc1), 160, 100, 8)); 26650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel1_->ApplyViewRequest(request)); 26660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->GetSendStreamFormat(kSsrc1, &send_format)); 26670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(160, send_format.width); 26680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(100, send_format.height); 26690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(cricket::VideoFormat::FpsToInterval(8), send_format.interval); 26700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 26710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // stream1: 0x0x0; stream2: 640x400x30 26720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org request.static_video_views.clear(); 26730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org request.static_video_views.push_back(cricket::StaticVideoView( 26740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::StreamSelector("", stream2.id), 640, 400, 30)); 26750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel1_->ApplyViewRequest(request)); 26760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->GetSendStreamFormat(kSsrc1, &send_format)); 26770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(0, send_format.width); 26780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(0, send_format.height); 26790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->GetSendStreamFormat(2222, &send_format)); 26800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(640, send_format.width); 26810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(400, send_format.height); 26820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(cricket::VideoFormat::FpsToInterval(30), send_format.interval); 26830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 26840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // stream1: 0x0x0; stream2: 0x0x0 26850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org request.static_video_views.clear(); 26860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(channel1_->ApplyViewRequest(request)); 26870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(media_channel1_->GetSendStreamFormat(kSsrc1, &send_format)); 26880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(0, send_format.width); 26890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(0, send_format.height); 26900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 26910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 26920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(VideoChannelTest, TestSetChannelOptions) { 26930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TestSetChannelOptions(); 26940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 26950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 26960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 26970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// DataChannelTest 26980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 26990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass DataChannelTest 27000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org : public ChannelTest<DataTraits> { 27010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public: 27020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typedef ChannelTest<DataTraits> 27030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base; 27040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org DataChannelTest() : Base(kDataPacket, sizeof(kDataPacket), 27050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kRtcpReport, sizeof(kRtcpReport)) { 27060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 27070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 27080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 27090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Override to avoid engine channel parameter. 27100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgtemplate<> 27110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgcricket::DataChannel* ChannelTest<DataTraits>::CreateChannel( 27122a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::Thread* thread, cricket::MediaEngineInterface* engine, 27130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::FakeDataMediaChannel* ch, cricket::BaseSession* session, 27140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool rtcp) { 27150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::DataChannel* channel = new cricket::DataChannel( 27160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org thread, ch, session, cricket::CN_DATA, rtcp); 27170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (!channel->Init()) { 27180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org delete channel; 27190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel = NULL; 27200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 27210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return channel; 27220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 27230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 27240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgtemplate<> 27250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgvoid ChannelTest<DataTraits>::CreateContent( 27260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int flags, 27270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const cricket::AudioCodec& audio_codec, 27280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const cricket::VideoCodec& video_codec, 27290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::DataContentDescription* data) { 27300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org data->AddCodec(kGoogleDataCodec); 27310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org data->set_rtcp_mux((flags & RTCP_MUX) != 0); 27320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (flags & SECURE) { 27330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org data->AddCrypto(cricket::CryptoParams( 27340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1, cricket::CS_AES_CM_128_HMAC_SHA1_32, 27352a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org "inline:" + rtc::CreateRandomString(40), "")); 27360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 27370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 27380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 27390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgtemplate<> 27400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgvoid ChannelTest<DataTraits>::CopyContent( 27410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const cricket::DataContentDescription& source, 27420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::DataContentDescription* data) { 27430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org *data = source; 27440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 27450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 27460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgtemplate<> 27470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgbool ChannelTest<DataTraits>::CodecMatches(const cricket::DataCodec& c1, 27480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const cricket::DataCodec& c2) { 27490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return c1.name == c2.name; 27500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 27510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 27520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgtemplate<> 27530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgvoid ChannelTest<DataTraits>::AddLegacyStreamInContent( 27540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org uint32 ssrc, int flags, cricket::DataContentDescription* data) { 27550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org data->AddLegacyStream(ssrc); 27560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 27570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 27580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(DataChannelTest, TestInit) { 27590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestInit(); 27600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(media_channel1_->IsStreamMuted(0)); 27610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 27620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 27630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(DataChannelTest, TestSetContents) { 27640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestSetContents(); 27650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 27660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 27670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(DataChannelTest, TestSetContentsNullOffer) { 27680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestSetContentsNullOffer(); 27690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 27700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 27710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(DataChannelTest, TestSetContentsRtcpMux) { 27720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestSetContentsRtcpMux(); 27730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 27740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 27750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(DataChannelTest, TestSetRemoteContentUpdate) { 27760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestSetRemoteContentUpdate(); 27770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 27780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 27790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(DataChannelTest, TestStreams) { 27800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestStreams(); 27810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 27820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 27830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(DataChannelTest, TestUpdateStreamsInLocalContent) { 27840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestUpdateStreamsInLocalContent(); 27850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 27860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 27870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(DataChannelTest, TestUpdateRemoteStreamsInContent) { 27880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestUpdateStreamsInRemoteContent(); 27890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 27900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 27910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(DataChannelTest, TestChangeStreamParamsInContent) { 27920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestChangeStreamParamsInContent(); 27930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 27940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 27950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(DataChannelTest, TestPlayoutAndSendingStates) { 27960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestPlayoutAndSendingStates(); 27970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 27980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 27990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(DataChannelTest, TestMediaContentDirection) { 28000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestMediaContentDirection(); 28010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 28020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 28030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(DataChannelTest, TestCallSetup) { 28040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestCallSetup(); 28050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 28060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 28070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(DataChannelTest, TestCallTeardownRtcpMux) { 28080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestCallTeardownRtcpMux(); 28090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 28100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 28110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(DataChannelTest, TestOnReadyToSend) { 28120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestOnReadyToSend(); 28130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 28140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 28150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(DataChannelTest, TestOnReadyToSendWithRtcpMux) { 28160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestOnReadyToSendWithRtcpMux(); 28170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 28180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 28190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(DataChannelTest, SendRtpToRtp) { 28200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendRtpToRtp(); 28210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 28220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 28230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(DataChannelTest, SendNoRtcpToNoRtcp) { 28240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendNoRtcpToNoRtcp(); 28250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 28260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 28270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(DataChannelTest, SendNoRtcpToRtcp) { 28280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendNoRtcpToRtcp(); 28290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 28300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 28310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(DataChannelTest, SendRtcpToNoRtcp) { 28320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendRtcpToNoRtcp(); 28330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 28340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 28350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(DataChannelTest, SendRtcpToRtcp) { 28360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendRtcpToRtcp(); 28370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 28380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 28390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(DataChannelTest, SendRtcpMuxToRtcp) { 28400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendRtcpMuxToRtcp(); 28410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 28420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 28430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(DataChannelTest, SendRtcpMuxToRtcpMux) { 28440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendRtcpMuxToRtcpMux(); 28450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 28460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 28470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(DataChannelTest, SendEarlyRtcpMuxToRtcp) { 28480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendEarlyRtcpMuxToRtcp(); 28490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 28500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 28510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(DataChannelTest, SendEarlyRtcpMuxToRtcpMux) { 28520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendEarlyRtcpMuxToRtcpMux(); 28530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 28540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 28550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(DataChannelTest, SendSrtpToSrtp) { 28560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendSrtpToSrtp(); 28570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 28580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 28590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(DataChannelTest, SendSrtpToRtp) { 28600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendSrtpToSrtp(); 28610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 28620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 28630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(DataChannelTest, SendSrtcpMux) { 28640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendSrtpToSrtp(RTCP_MUX, RTCP_MUX); 28650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 28660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 28670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(DataChannelTest, SendRtpToRtpOnThread) { 28680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendRtpToRtpOnThread(); 28690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 28700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 28710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(DataChannelTest, SendSrtpToSrtpOnThread) { 28720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendSrtpToSrtpOnThread(); 28730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 28740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 28750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(DataChannelTest, SendWithWritabilityLoss) { 28760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::SendWithWritabilityLoss(); 28770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 28780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 28790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(DataChannelTest, TestMediaMonitor) { 28800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Base::TestMediaMonitor(); 28810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 28820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 28830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(DataChannelTest, TestSendData) { 28840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(0, 0); 28850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendInitiate()); 28860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(SendAccept()); 28870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 28880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::SendDataParams params; 28890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org params.ssrc = 42; 28900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org unsigned char data[] = { 28910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 'f', 'o', 'o' 28920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org }; 28932a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::Buffer payload(data, 3); 28940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::SendDataResult result; 28950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ASSERT_TRUE(media_channel1_->SendData(params, payload, &result)); 28960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(params.ssrc, 28970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org media_channel1_->last_sent_data_params().ssrc); 28980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ("foo", media_channel1_->last_sent_data()); 28990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 29000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 29010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// TODO(pthatcher): TestSetReceiver? 2902