10e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// libjingle 20e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Copyright 2008 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/fakecapturemanager.h" 270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/media/base/fakemediaengine.h" 280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/media/base/fakemediaprocessor.h" 290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/media/base/nullvideorenderer.h" 300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/media/base/testutils.h" 31cf81adffe15fa8ea0f333432e41f6d504148f18abuildbot@webrtc.org#include "talk/media/devices/fakedevicemanager.h" 320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/p2p/base/fakesession.h" 330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/session/media/channelmanager.h" 34cf81adffe15fa8ea0f333432e41f6d504148f18abuildbot@webrtc.org#include "webrtc/base/gunit.h" 35cf81adffe15fa8ea0f333432e41f6d504148f18abuildbot@webrtc.org#include "webrtc/base/logging.h" 36cf81adffe15fa8ea0f333432e41f6d504148f18abuildbot@webrtc.org#include "webrtc/base/thread.h" 370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgnamespace cricket { 390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgstatic const AudioCodec kAudioCodecs[] = { 410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AudioCodec(97, "voice", 1, 2, 3, 0), 420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AudioCodec(110, "CELT", 32000, 48000, 2, 0), 430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AudioCodec(111, "OPUS", 48000, 32000, 2, 0), 440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgstatic const VideoCodec kVideoCodecs[] = { 470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org VideoCodec(99, "H264", 100, 200, 300, 0), 480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org VideoCodec(100, "VP8", 100, 200, 300, 0), 490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org VideoCodec(96, "rtx", 100, 200, 300, 0), 500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass ChannelManagerTest : public testing::Test { 530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org protected: 540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ChannelManagerTest() : fme_(NULL), fdm_(NULL), fcm_(NULL), cm_(NULL) { 550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void SetUp() { 580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org fme_ = new cricket::FakeMediaEngine(); 590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org fme_->SetAudioCodecs(MAKE_VECTOR(kAudioCodecs)); 600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org fme_->SetVideoCodecs(MAKE_VECTOR(kVideoCodecs)); 610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org fdme_ = new cricket::FakeDataEngine(); 620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org fdm_ = new cricket::FakeDeviceManager(); 630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org fcm_ = new cricket::FakeCaptureManager(); 640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cm_ = new cricket::ChannelManager( 652a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org fme_, fdme_, fdm_, fcm_, rtc::Thread::Current()); 660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org session_ = new cricket::FakeSession(true); 670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::vector<std::string> in_device_list, out_device_list, vid_device_list; 690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org in_device_list.push_back("audio-in1"); 700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org in_device_list.push_back("audio-in2"); 710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org out_device_list.push_back("audio-out1"); 720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org out_device_list.push_back("audio-out2"); 730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org vid_device_list.push_back("video-in1"); 740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org vid_device_list.push_back("video-in2"); 750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org fdm_->SetAudioInputDevices(in_device_list); 760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org fdm_->SetAudioOutputDevices(out_device_list); 770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org fdm_->SetVideoCaptureDevices(vid_device_list); 780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void TearDown() { 810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org delete session_; 820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org delete cm_; 830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cm_ = NULL; 840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org fdm_ = NULL; 850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org fcm_ = NULL; 860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org fdme_ = NULL; 870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org fme_ = NULL; 880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 902a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::Thread worker_; 910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::FakeMediaEngine* fme_; 920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::FakeDataEngine* fdme_; 930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::FakeDeviceManager* fdm_; 940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::FakeCaptureManager* fcm_; 950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::ChannelManager* cm_; 960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::FakeSession* session_; 970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Test that we startup/shutdown properly. 1000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(ChannelManagerTest, StartupShutdown) { 1010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(cm_->initialized()); 1022a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org EXPECT_EQ(rtc::Thread::Current(), cm_->worker_thread()); 1030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->Init()); 1040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->initialized()); 1050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cm_->Terminate(); 1060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(cm_->initialized()); 1070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 1080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Test that we startup/shutdown properly with a worker thread. 1100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(ChannelManagerTest, StartupShutdownOnThread) { 1110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org worker_.Start(); 1120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(cm_->initialized()); 1132a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org EXPECT_EQ(rtc::Thread::Current(), cm_->worker_thread()); 1140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->set_worker_thread(&worker_)); 1150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(&worker_, cm_->worker_thread()); 1160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->Init()); 1170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->initialized()); 1180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Setting the worker thread while initialized should fail. 1192a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org EXPECT_FALSE(cm_->set_worker_thread(rtc::Thread::Current())); 1200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cm_->Terminate(); 1210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(cm_->initialized()); 1220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 1230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Test that we can create and destroy a voice and video channel. 1250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(ChannelManagerTest, CreateDestroyChannels) { 1260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->Init()); 1270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::VoiceChannel* voice_channel = cm_->CreateVoiceChannel( 1280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org session_, cricket::CN_AUDIO, false); 1290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(voice_channel != NULL); 1300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::VideoChannel* video_channel = 1310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cm_->CreateVideoChannel(session_, cricket::CN_VIDEO, 1320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org false, voice_channel); 1330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(video_channel != NULL); 1340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::DataChannel* data_channel = 1350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cm_->CreateDataChannel(session_, cricket::CN_DATA, 1360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org false, cricket::DCT_RTP); 1370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(data_channel != NULL); 1380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cm_->DestroyVideoChannel(video_channel); 1390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cm_->DestroyVoiceChannel(voice_channel); 1400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cm_->DestroyDataChannel(data_channel); 1410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cm_->Terminate(); 1420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 1430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Test that we can create and destroy a voice and video channel with a worker. 1455528070a0c76057a000b877fc56ca4180ad2087bmallinath@webrtc.orgTEST_F(ChannelManagerTest, CreateDestroyChannelsOnThread) { 1460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org worker_.Start(); 1470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->set_worker_thread(&worker_)); 1480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->Init()); 1495528070a0c76057a000b877fc56ca4180ad2087bmallinath@webrtc.org delete session_; 150cc712021a90cc93a68b4e65930cd0a0ad0a88d4ewu@webrtc.org session_ = new cricket::FakeSession(&worker_, true); 1510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::VoiceChannel* voice_channel = cm_->CreateVoiceChannel( 1520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org session_, cricket::CN_AUDIO, false); 1530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(voice_channel != NULL); 1540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::VideoChannel* video_channel = 1550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cm_->CreateVideoChannel(session_, cricket::CN_VIDEO, 1560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org false, voice_channel); 1570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(video_channel != NULL); 1580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::DataChannel* data_channel = 1590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cm_->CreateDataChannel(session_, cricket::CN_DATA, 1600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org false, cricket::DCT_RTP); 1610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(data_channel != NULL); 1620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cm_->DestroyVideoChannel(video_channel); 1630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cm_->DestroyVoiceChannel(voice_channel); 1640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cm_->DestroyDataChannel(data_channel); 1650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cm_->Terminate(); 1660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 1670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Test that we fail to create a voice/video channel if the session is unable 1690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// to create a cricket::TransportChannel 1700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(ChannelManagerTest, NoTransportChannelTest) { 1710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->Init()); 1720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org session_->set_fail_channel_creation(true); 1730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // The test is useless unless the session does not fail creating 1740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // cricket::TransportChannel. 1750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ASSERT_TRUE(session_->CreateChannel( 1760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "audio", "rtp", cricket::ICE_CANDIDATE_COMPONENT_RTP) == NULL); 1770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::VoiceChannel* voice_channel = cm_->CreateVoiceChannel( 1790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org session_, cricket::CN_AUDIO, false); 1800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(voice_channel == NULL); 1810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::VideoChannel* video_channel = 1820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cm_->CreateVideoChannel(session_, cricket::CN_VIDEO, 1830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org false, voice_channel); 1840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(video_channel == NULL); 1850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::DataChannel* data_channel = 1860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cm_->CreateDataChannel(session_, cricket::CN_DATA, 1870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org false, cricket::DCT_RTP); 1880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(data_channel == NULL); 1890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cm_->Terminate(); 1900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 1910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Test that SetDefaultVideoCodec passes through the right values. 1930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(ChannelManagerTest, SetDefaultVideoEncoderConfig) { 1940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::VideoCodec codec(96, "G264", 1280, 720, 60, 0); 1950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::VideoEncoderConfig config(codec, 1, 2); 1960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->Init()); 1970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->SetDefaultVideoEncoderConfig(config)); 1980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(config, fme_->default_video_encoder_config()); 1990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 2000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 201ed274f89091f7acb8cacde3cae1d69cb2a19193dsergeyu@chromium.orgstruct GetCapturerFrameSize : public sigslot::has_slots<> { 202ed274f89091f7acb8cacde3cae1d69cb2a19193dsergeyu@chromium.org void OnVideoFrame(VideoCapturer* capturer, const VideoFrame* frame) { 203ed274f89091f7acb8cacde3cae1d69cb2a19193dsergeyu@chromium.org width = frame->GetWidth(); 204ed274f89091f7acb8cacde3cae1d69cb2a19193dsergeyu@chromium.org height = frame->GetHeight(); 205ed274f89091f7acb8cacde3cae1d69cb2a19193dsergeyu@chromium.org } 206ed274f89091f7acb8cacde3cae1d69cb2a19193dsergeyu@chromium.org GetCapturerFrameSize(VideoCapturer* capturer) : width(0), height(0) { 207ed274f89091f7acb8cacde3cae1d69cb2a19193dsergeyu@chromium.org capturer->SignalVideoFrame.connect(this, 208ed274f89091f7acb8cacde3cae1d69cb2a19193dsergeyu@chromium.org &GetCapturerFrameSize::OnVideoFrame); 209ed274f89091f7acb8cacde3cae1d69cb2a19193dsergeyu@chromium.org static_cast<FakeVideoCapturer*>(capturer)->CaptureFrame(); 210ed274f89091f7acb8cacde3cae1d69cb2a19193dsergeyu@chromium.org } 211ed274f89091f7acb8cacde3cae1d69cb2a19193dsergeyu@chromium.org size_t width; 212ed274f89091f7acb8cacde3cae1d69cb2a19193dsergeyu@chromium.org size_t height; 213ed274f89091f7acb8cacde3cae1d69cb2a19193dsergeyu@chromium.org}; 214ed274f89091f7acb8cacde3cae1d69cb2a19193dsergeyu@chromium.org 215ed274f89091f7acb8cacde3cae1d69cb2a19193dsergeyu@chromium.orgTEST_F(ChannelManagerTest, DefaultCapturerAspectRatio) { 216ed274f89091f7acb8cacde3cae1d69cb2a19193dsergeyu@chromium.org VideoCodec codec(100, "VP8", 640, 360, 30, 0); 217ed274f89091f7acb8cacde3cae1d69cb2a19193dsergeyu@chromium.org VideoFormat format(640, 360, 33, FOURCC_ANY); 218ed274f89091f7acb8cacde3cae1d69cb2a19193dsergeyu@chromium.org VideoEncoderConfig config(codec, 1, 2); 219ed274f89091f7acb8cacde3cae1d69cb2a19193dsergeyu@chromium.org EXPECT_TRUE(cm_->Init()); 220ed274f89091f7acb8cacde3cae1d69cb2a19193dsergeyu@chromium.org // A capturer created before the default encoder config is set will have no 221ed274f89091f7acb8cacde3cae1d69cb2a19193dsergeyu@chromium.org // set aspect ratio, so it'll be 4:3 (based on the fake video capture impl). 222ed274f89091f7acb8cacde3cae1d69cb2a19193dsergeyu@chromium.org VideoCapturer* capturer = cm_->CreateVideoCapturer(); 223ed274f89091f7acb8cacde3cae1d69cb2a19193dsergeyu@chromium.org ASSERT_TRUE(capturer != NULL); 224ed274f89091f7acb8cacde3cae1d69cb2a19193dsergeyu@chromium.org EXPECT_EQ(CS_RUNNING, capturer->Start(format)); 225ed274f89091f7acb8cacde3cae1d69cb2a19193dsergeyu@chromium.org GetCapturerFrameSize size(capturer); 226ed274f89091f7acb8cacde3cae1d69cb2a19193dsergeyu@chromium.org EXPECT_EQ(640u, size.width); 227ed274f89091f7acb8cacde3cae1d69cb2a19193dsergeyu@chromium.org EXPECT_EQ(480u, size.height); 228ed274f89091f7acb8cacde3cae1d69cb2a19193dsergeyu@chromium.org delete capturer; 229ed274f89091f7acb8cacde3cae1d69cb2a19193dsergeyu@chromium.org // Try again, but with the encoder config set to 16:9. 230ed274f89091f7acb8cacde3cae1d69cb2a19193dsergeyu@chromium.org EXPECT_TRUE(cm_->SetDefaultVideoEncoderConfig(config)); 231ed274f89091f7acb8cacde3cae1d69cb2a19193dsergeyu@chromium.org capturer = cm_->CreateVideoCapturer(); 232ed274f89091f7acb8cacde3cae1d69cb2a19193dsergeyu@chromium.org ASSERT_TRUE(capturer != NULL); 233ed274f89091f7acb8cacde3cae1d69cb2a19193dsergeyu@chromium.org EXPECT_EQ(CS_RUNNING, capturer->Start(format)); 234ed274f89091f7acb8cacde3cae1d69cb2a19193dsergeyu@chromium.org GetCapturerFrameSize cropped_size(capturer); 235ed274f89091f7acb8cacde3cae1d69cb2a19193dsergeyu@chromium.org EXPECT_EQ(640u, cropped_size.width); 236ed274f89091f7acb8cacde3cae1d69cb2a19193dsergeyu@chromium.org EXPECT_EQ(360u, cropped_size.height); 237ed274f89091f7acb8cacde3cae1d69cb2a19193dsergeyu@chromium.org delete capturer; 238ed274f89091f7acb8cacde3cae1d69cb2a19193dsergeyu@chromium.org} 239ed274f89091f7acb8cacde3cae1d69cb2a19193dsergeyu@chromium.org 2400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Test that SetDefaultVideoCodec passes through the right values. 2410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(ChannelManagerTest, SetDefaultVideoCodecBeforeInit) { 2420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::VideoCodec codec(96, "G264", 1280, 720, 60, 0); 2430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::VideoEncoderConfig config(codec, 1, 2); 2440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->SetDefaultVideoEncoderConfig(config)); 2450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->Init()); 2460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(config, fme_->default_video_encoder_config()); 2470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 2480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(ChannelManagerTest, SetAudioOptionsBeforeInit) { 2500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Test that values that we set before Init are applied. 2515528070a0c76057a000b877fc56ca4180ad2087bmallinath@webrtc.org AudioOptions options; 2525528070a0c76057a000b877fc56ca4180ad2087bmallinath@webrtc.org options.auto_gain_control.Set(true); 2535528070a0c76057a000b877fc56ca4180ad2087bmallinath@webrtc.org options.echo_cancellation.Set(false); 2545528070a0c76057a000b877fc56ca4180ad2087bmallinath@webrtc.org EXPECT_TRUE(cm_->SetAudioOptions("audio-in1", "audio-out1", options)); 2550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string audio_in, audio_out; 2565528070a0c76057a000b877fc56ca4180ad2087bmallinath@webrtc.org AudioOptions set_options; 2575528070a0c76057a000b877fc56ca4180ad2087bmallinath@webrtc.org // Check options before Init. 2585528070a0c76057a000b877fc56ca4180ad2087bmallinath@webrtc.org EXPECT_TRUE(cm_->GetAudioOptions(&audio_in, &audio_out, &set_options)); 2595528070a0c76057a000b877fc56ca4180ad2087bmallinath@webrtc.org EXPECT_EQ("audio-in1", audio_in); 2605528070a0c76057a000b877fc56ca4180ad2087bmallinath@webrtc.org EXPECT_EQ("audio-out1", audio_out); 2615528070a0c76057a000b877fc56ca4180ad2087bmallinath@webrtc.org EXPECT_EQ(options, set_options); 2620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->Init()); 2635528070a0c76057a000b877fc56ca4180ad2087bmallinath@webrtc.org // Check options after Init. 2645528070a0c76057a000b877fc56ca4180ad2087bmallinath@webrtc.org EXPECT_TRUE(cm_->GetAudioOptions(&audio_in, &audio_out, &set_options)); 2650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ("audio-in1", audio_in); 2660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ("audio-out1", audio_out); 2675528070a0c76057a000b877fc56ca4180ad2087bmallinath@webrtc.org EXPECT_EQ(options, set_options); 2685528070a0c76057a000b877fc56ca4180ad2087bmallinath@webrtc.org // At this point, the media engine should also be initialized. 2695528070a0c76057a000b877fc56ca4180ad2087bmallinath@webrtc.org EXPECT_EQ(options, fme_->audio_options()); 270e9db8f6d27d05dcf0f549ee0a1266c7374154f59henrike@webrtc.org EXPECT_EQ(cricket::kDefaultAudioDelayOffset, 2715528070a0c76057a000b877fc56ca4180ad2087bmallinath@webrtc.org fme_->audio_delay_offset()); 2720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 2730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(ChannelManagerTest, GetAudioOptionsWithNullParameters) { 2750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string audio_in, audio_out; 2765528070a0c76057a000b877fc56ca4180ad2087bmallinath@webrtc.org AudioOptions options; 2775528070a0c76057a000b877fc56ca4180ad2087bmallinath@webrtc.org options.echo_cancellation.Set(true); 2785528070a0c76057a000b877fc56ca4180ad2087bmallinath@webrtc.org EXPECT_TRUE(cm_->SetAudioOptions("audio-in2", "audio-out2", options)); 2790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->GetAudioOptions(&audio_in, NULL, NULL)); 2800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ("audio-in2", audio_in); 2810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->GetAudioOptions(NULL, &audio_out, NULL)); 2820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ("audio-out2", audio_out); 2835528070a0c76057a000b877fc56ca4180ad2087bmallinath@webrtc.org AudioOptions out_options; 2845528070a0c76057a000b877fc56ca4180ad2087bmallinath@webrtc.org EXPECT_TRUE(cm_->GetAudioOptions(NULL, NULL, &out_options)); 2855528070a0c76057a000b877fc56ca4180ad2087bmallinath@webrtc.org bool echo_cancellation = false; 2865528070a0c76057a000b877fc56ca4180ad2087bmallinath@webrtc.org EXPECT_TRUE(out_options.echo_cancellation.Get(&echo_cancellation)); 2875528070a0c76057a000b877fc56ca4180ad2087bmallinath@webrtc.org EXPECT_TRUE(echo_cancellation); 2880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 2890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(ChannelManagerTest, SetAudioOptions) { 2910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Test initial state. 2920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->Init()); 2930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(std::string(cricket::DeviceManagerInterface::kDefaultDeviceName), 2940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org fme_->audio_in_device()); 2950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(std::string(cricket::DeviceManagerInterface::kDefaultDeviceName), 2960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org fme_->audio_out_device()); 297e9db8f6d27d05dcf0f549ee0a1266c7374154f59henrike@webrtc.org EXPECT_EQ(cricket::kDefaultAudioDelayOffset, 2980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org fme_->audio_delay_offset()); 2990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Test setting specific values. 3005528070a0c76057a000b877fc56ca4180ad2087bmallinath@webrtc.org AudioOptions options; 3015528070a0c76057a000b877fc56ca4180ad2087bmallinath@webrtc.org options.auto_gain_control.Set(true); 3025528070a0c76057a000b877fc56ca4180ad2087bmallinath@webrtc.org EXPECT_TRUE(cm_->SetAudioOptions("audio-in1", "audio-out1", options)); 3030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ("audio-in1", fme_->audio_in_device()); 3040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ("audio-out1", fme_->audio_out_device()); 3055528070a0c76057a000b877fc56ca4180ad2087bmallinath@webrtc.org bool auto_gain_control = false; 3065528070a0c76057a000b877fc56ca4180ad2087bmallinath@webrtc.org EXPECT_TRUE( 3075528070a0c76057a000b877fc56ca4180ad2087bmallinath@webrtc.org fme_->audio_options().auto_gain_control.Get(&auto_gain_control)); 3085528070a0c76057a000b877fc56ca4180ad2087bmallinath@webrtc.org EXPECT_TRUE(auto_gain_control); 309e9db8f6d27d05dcf0f549ee0a1266c7374154f59henrike@webrtc.org EXPECT_EQ(cricket::kDefaultAudioDelayOffset, 3100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org fme_->audio_delay_offset()); 3110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Test setting bad values. 3125528070a0c76057a000b877fc56ca4180ad2087bmallinath@webrtc.org EXPECT_FALSE(cm_->SetAudioOptions("audio-in9", "audio-out2", options)); 3130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 3140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 3153d341e220ccc19b41d865dcca6ff4d7194e2689fbuildbot@webrtc.orgTEST_F(ChannelManagerTest, SetEngineAudioOptions) { 3163d341e220ccc19b41d865dcca6ff4d7194e2689fbuildbot@webrtc.org EXPECT_TRUE(cm_->Init()); 3173d341e220ccc19b41d865dcca6ff4d7194e2689fbuildbot@webrtc.org // Test setting specific values. 3183d341e220ccc19b41d865dcca6ff4d7194e2689fbuildbot@webrtc.org AudioOptions options; 3193d341e220ccc19b41d865dcca6ff4d7194e2689fbuildbot@webrtc.org options.experimental_ns.Set(true); 3203d341e220ccc19b41d865dcca6ff4d7194e2689fbuildbot@webrtc.org EXPECT_TRUE(cm_->SetEngineAudioOptions(options)); 3213d341e220ccc19b41d865dcca6ff4d7194e2689fbuildbot@webrtc.org bool experimental_ns = false; 3223d341e220ccc19b41d865dcca6ff4d7194e2689fbuildbot@webrtc.org EXPECT_TRUE(fme_->audio_options().experimental_ns.Get(&experimental_ns)); 3233d341e220ccc19b41d865dcca6ff4d7194e2689fbuildbot@webrtc.org EXPECT_TRUE(experimental_ns); 3243d341e220ccc19b41d865dcca6ff4d7194e2689fbuildbot@webrtc.org} 3253d341e220ccc19b41d865dcca6ff4d7194e2689fbuildbot@webrtc.org 3263d341e220ccc19b41d865dcca6ff4d7194e2689fbuildbot@webrtc.orgTEST_F(ChannelManagerTest, SetEngineAudioOptionsBeforeInitFails) { 3273d341e220ccc19b41d865dcca6ff4d7194e2689fbuildbot@webrtc.org // Test that values that we set before Init are not applied. 3283d341e220ccc19b41d865dcca6ff4d7194e2689fbuildbot@webrtc.org AudioOptions options; 3293d341e220ccc19b41d865dcca6ff4d7194e2689fbuildbot@webrtc.org options.experimental_ns.Set(true); 3303d341e220ccc19b41d865dcca6ff4d7194e2689fbuildbot@webrtc.org EXPECT_FALSE(cm_->SetEngineAudioOptions(options)); 3313d341e220ccc19b41d865dcca6ff4d7194e2689fbuildbot@webrtc.org EXPECT_FALSE(fme_->audio_options().experimental_ns.IsSet()); 3323d341e220ccc19b41d865dcca6ff4d7194e2689fbuildbot@webrtc.org} 3333d341e220ccc19b41d865dcca6ff4d7194e2689fbuildbot@webrtc.org 3340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(ChannelManagerTest, SetCaptureDeviceBeforeInit) { 3350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Test that values that we set before Init are applied. 3360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->SetCaptureDevice("video-in2")); 3370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->Init()); 3380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ("video-in2", cm_->video_device_name()); 3390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 3400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 3410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(ChannelManagerTest, GetCaptureDeviceBeforeInit) { 3420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string video_in; 3430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Test that GetCaptureDevice works before Init. 3440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->SetCaptureDevice("video-in1")); 3450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->GetCaptureDevice(&video_in)); 3460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ("video-in1", video_in); 3470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Test that options set before Init can be gotten after Init. 3480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->SetCaptureDevice("video-in2")); 3490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->Init()); 3500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->GetCaptureDevice(&video_in)); 3510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ("video-in2", video_in); 3520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 3530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 3540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(ChannelManagerTest, SetCaptureDevice) { 3550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Test setting defaults. 3560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->Init()); 3570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->SetCaptureDevice("")); // will use DeviceManager default 3580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ("video-in1", cm_->video_device_name()); 3590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Test setting specific values. 3600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->SetCaptureDevice("video-in2")); 3610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ("video-in2", cm_->video_device_name()); 3620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // TODO(juberti): Add test for invalid value here. 3630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 3640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 3650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Test unplugging and plugging back the preferred devices. When the preferred 3660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// device is unplugged, we fall back to the default device. When the preferred 3670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// device is plugged back, we use it. 3680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(ChannelManagerTest, SetAudioOptionsUnplugPlug) { 3690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Set preferences "audio-in1" and "audio-out1" before init. 3705528070a0c76057a000b877fc56ca4180ad2087bmallinath@webrtc.org AudioOptions options; 3715528070a0c76057a000b877fc56ca4180ad2087bmallinath@webrtc.org EXPECT_TRUE(cm_->SetAudioOptions("audio-in1", "audio-out1", options)); 3720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Unplug device "audio-in1" and "audio-out1". 3730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::vector<std::string> in_device_list, out_device_list; 3740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org in_device_list.push_back("audio-in2"); 3750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org out_device_list.push_back("audio-out2"); 3760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org fdm_->SetAudioInputDevices(in_device_list); 3770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org fdm_->SetAudioOutputDevices(out_device_list); 3780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Init should fall back to default devices. 3790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->Init()); 3800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // The media engine should use the default. 3810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ("", fme_->audio_in_device()); 3820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ("", fme_->audio_out_device()); 3830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // The channel manager keeps the preferences "audio-in1" and "audio-out1". 3840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string audio_in, audio_out; 3850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->GetAudioOptions(&audio_in, &audio_out, NULL)); 3860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ("audio-in1", audio_in); 3870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ("audio-out1", audio_out); 3880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cm_->Terminate(); 3890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 3900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Plug devices "audio-in2" and "audio-out2" back. 3910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org in_device_list.push_back("audio-in1"); 3920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org out_device_list.push_back("audio-out1"); 3930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org fdm_->SetAudioInputDevices(in_device_list); 3940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org fdm_->SetAudioOutputDevices(out_device_list); 3950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Init again. The preferences, "audio-in2" and "audio-out2", are used. 3960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->Init()); 3970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ("audio-in1", fme_->audio_in_device()); 3980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ("audio-out1", fme_->audio_out_device()); 3990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->GetAudioOptions(&audio_in, &audio_out, NULL)); 4000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ("audio-in1", audio_in); 4010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ("audio-out1", audio_out); 4020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 4030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 4040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// We have one camera. Unplug it, fall back to no camera. 4050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(ChannelManagerTest, SetCaptureDeviceUnplugPlugOneCamera) { 4060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Set preferences "video-in1" before init. 4070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::vector<std::string> vid_device_list; 4080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org vid_device_list.push_back("video-in1"); 4090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org fdm_->SetVideoCaptureDevices(vid_device_list); 4100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->SetCaptureDevice("video-in1")); 4110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 4120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Unplug "video-in1". 4130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org vid_device_list.clear(); 4140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org fdm_->SetVideoCaptureDevices(vid_device_list); 4150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 4160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Init should fall back to avatar. 4170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->Init()); 4180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // The media engine should use no camera. 4190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ("", cm_->video_device_name()); 4200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // The channel manager keeps the user preference "video-in". 4210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string video_in; 4220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->GetCaptureDevice(&video_in)); 4230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ("video-in1", video_in); 4240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cm_->Terminate(); 4250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 4260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Plug device "video-in1" back. 4270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org vid_device_list.push_back("video-in1"); 4280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org fdm_->SetVideoCaptureDevices(vid_device_list); 4290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Init again. The user preferred device, "video-in1", is used. 4300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->Init()); 4310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ("video-in1", cm_->video_device_name()); 4320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->GetCaptureDevice(&video_in)); 4330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ("video-in1", video_in); 4340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 4350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 4360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// We have multiple cameras. Unplug the preferred, fall back to another camera. 4370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(ChannelManagerTest, SetCaptureDeviceUnplugPlugTwoDevices) { 4380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Set video device to "video-in1" before init. 4390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->SetCaptureDevice("video-in1")); 4400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Unplug device "video-in1". 4410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::vector<std::string> vid_device_list; 4420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org vid_device_list.push_back("video-in2"); 4430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org fdm_->SetVideoCaptureDevices(vid_device_list); 4440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Init should fall back to default device "video-in2". 4450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->Init()); 4460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // The media engine should use the default device "video-in2". 4470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ("video-in2", cm_->video_device_name()); 4480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // The channel manager keeps the user preference "video-in". 4490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string video_in; 4500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->GetCaptureDevice(&video_in)); 4510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ("video-in1", video_in); 4520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cm_->Terminate(); 4530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 4540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Plug device "video-in1" back. 4550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org vid_device_list.push_back("video-in1"); 4560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org fdm_->SetVideoCaptureDevices(vid_device_list); 4570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Init again. The user preferred device, "video-in1", is used. 4580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->Init()); 4590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ("video-in1", cm_->video_device_name()); 4600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->GetCaptureDevice(&video_in)); 4610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ("video-in1", video_in); 4620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 4630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 4640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(ChannelManagerTest, GetCaptureDevice) { 4650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string video_in; 4660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Test setting/getting defaults. 4670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->Init()); 4680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->SetCaptureDevice("")); 4690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->GetCaptureDevice(&video_in)); 4700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ("video-in1", video_in); 4710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Test setting/getting specific values. 4720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->SetCaptureDevice("video-in2")); 4730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->GetCaptureDevice(&video_in)); 4740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ("video-in2", video_in); 4750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 4760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 4770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(ChannelManagerTest, GetSetOutputVolumeBeforeInit) { 4780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int level; 4790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Before init, SetOutputVolume() remembers the volume but does not change the 4800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // volume of the engine. GetOutputVolume() should fail. 4810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(-1, fme_->output_volume()); 4820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(cm_->GetOutputVolume(&level)); 4830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(cm_->SetOutputVolume(-1)); // Invalid volume. 4840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->SetOutputVolume(99)); 4850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(-1, fme_->output_volume()); 4860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 4870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Init() will apply the remembered volume. 4880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->Init()); 4890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->GetOutputVolume(&level)); 4900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(99, level); 4910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(level, fme_->output_volume()); 4920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 4930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->SetOutputVolume(60)); 4940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->GetOutputVolume(&level)); 4950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(60, level); 4960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(level, fme_->output_volume()); 4970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 4980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 4990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(ChannelManagerTest, GetSetOutputVolume) { 5000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int level; 5010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->Init()); 5020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->GetOutputVolume(&level)); 5030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(level, fme_->output_volume()); 5040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 5050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(cm_->SetOutputVolume(-1)); // Invalid volume. 5060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->SetOutputVolume(60)); 5070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(60, fme_->output_volume()); 5080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->GetOutputVolume(&level)); 5090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(60, level); 5100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 5110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 5120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Test that logging options set before Init are applied properly, 5130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// and retained even after Init. 5140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(ChannelManagerTest, SetLoggingBeforeInit) { 5152a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org cm_->SetVoiceLogging(rtc::LS_INFO, "test-voice"); 5162a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org cm_->SetVideoLogging(rtc::LS_VERBOSE, "test-video"); 5172a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org EXPECT_EQ(rtc::LS_INFO, fme_->voice_loglevel()); 5180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_STREQ("test-voice", fme_->voice_logfilter().c_str()); 5192a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org EXPECT_EQ(rtc::LS_VERBOSE, fme_->video_loglevel()); 5200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_STREQ("test-video", fme_->video_logfilter().c_str()); 5210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->Init()); 5222a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org EXPECT_EQ(rtc::LS_INFO, fme_->voice_loglevel()); 5230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_STREQ("test-voice", fme_->voice_logfilter().c_str()); 5242a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org EXPECT_EQ(rtc::LS_VERBOSE, fme_->video_loglevel()); 5250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_STREQ("test-video", fme_->video_logfilter().c_str()); 5260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 5270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 5280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Test that logging options set after Init are applied properly. 5290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(ChannelManagerTest, SetLogging) { 5300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->Init()); 5312a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org cm_->SetVoiceLogging(rtc::LS_INFO, "test-voice"); 5322a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org cm_->SetVideoLogging(rtc::LS_VERBOSE, "test-video"); 5332a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org EXPECT_EQ(rtc::LS_INFO, fme_->voice_loglevel()); 5340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_STREQ("test-voice", fme_->voice_logfilter().c_str()); 5352a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org EXPECT_EQ(rtc::LS_VERBOSE, fme_->video_loglevel()); 5360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_STREQ("test-video", fme_->video_logfilter().c_str()); 5370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 5380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 5390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Test that the Video/Voice Processors register and unregister 5400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(ChannelManagerTest, RegisterProcessors) { 5410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::FakeMediaProcessor fmp; 5420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->Init()); 5430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(fme_->voice_processor_registered(cricket::MPD_TX)); 5440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(fme_->voice_processor_registered(cricket::MPD_RX)); 5450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 5460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(fme_->voice_processor_registered(cricket::MPD_TX)); 5470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(fme_->voice_processor_registered(cricket::MPD_RX)); 5480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 5490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(fme_->voice_processor_registered(cricket::MPD_TX)); 5500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(fme_->voice_processor_registered(cricket::MPD_RX)); 5510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 5520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->RegisterVoiceProcessor(1, 5530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org &fmp, 5540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::MPD_RX)); 5550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(fme_->voice_processor_registered(cricket::MPD_TX)); 5560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(fme_->voice_processor_registered(cricket::MPD_RX)); 5570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 5580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 5590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->UnregisterVoiceProcessor(1, 5600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org &fmp, 5610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::MPD_RX)); 5620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(fme_->voice_processor_registered(cricket::MPD_TX)); 5630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(fme_->voice_processor_registered(cricket::MPD_RX)); 5640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 5650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->RegisterVoiceProcessor(1, 5660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org &fmp, 5670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::MPD_TX)); 5680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(fme_->voice_processor_registered(cricket::MPD_TX)); 5690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(fme_->voice_processor_registered(cricket::MPD_RX)); 5700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 5710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->UnregisterVoiceProcessor(1, 5720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org &fmp, 5730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::MPD_TX)); 5740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(fme_->voice_processor_registered(cricket::MPD_TX)); 5750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(fme_->voice_processor_registered(cricket::MPD_RX)); 5760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 5770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 5780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(ChannelManagerTest, SetVideoRtxEnabled) { 5790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::vector<VideoCodec> codecs; 5800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const VideoCodec rtx_codec(96, "rtx", 0, 0, 0, 0); 5810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 5820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // By default RTX is disabled. 5830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cm_->GetSupportedVideoCodecs(&codecs); 5840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(ContainsMatchingCodec(codecs, rtx_codec)); 5850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 5860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Enable and check. 5870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->SetVideoRtxEnabled(true)); 5880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cm_->GetSupportedVideoCodecs(&codecs); 5890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(ContainsMatchingCodec(codecs, rtx_codec)); 5900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 5910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Disable and check. 5920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->SetVideoRtxEnabled(false)); 5930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cm_->GetSupportedVideoCodecs(&codecs); 5940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(ContainsMatchingCodec(codecs, rtx_codec)); 5950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 5960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Cannot toggle rtx after initialization. 5970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->Init()); 5980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(cm_->SetVideoRtxEnabled(true)); 5990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(cm_->SetVideoRtxEnabled(false)); 6000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 6010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Can set again after terminate. 6020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cm_->Terminate(); 6030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(cm_->SetVideoRtxEnabled(true)); 6040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cm_->GetSupportedVideoCodecs(&codecs); 6050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(ContainsMatchingCodec(codecs, rtx_codec)); 6060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 6070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 6080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} // namespace cricket 609