audio_manager_unittest.cc revision 58537e28ecd584eab876aee8be7156509866d23a
158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// found in the LICENSE file. 458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/logging.h" 658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "media/audio/audio_manager.h" 858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(OS_LINUX) 1158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "media/audio/linux/audio_manager_linux.h" 1258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif // defined(OS_LINUX) 1358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(OS_WIN) 1558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "media/audio/win/audio_manager_win.h" 1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif // defined(OS_WIN) 1758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(USE_PULSEAUDIO) 1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "media/audio/pulse/audio_manager_pulse.h" 2058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif // defined(USE_PULSEAUDIO) 2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 2258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace media { 2358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 2458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void GetAudioOutputDeviceNamesImpl(AudioManager* audio_manager) { 2558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) AudioDeviceNames device_names; 2658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) audio_manager->GetAudioOutputDeviceNames(&device_names); 2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) VLOG(2) << "Got " << device_names.size() << " audio output devices."; 2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) for (AudioDeviceNames::iterator it = device_names.begin(); 3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) it != device_names.end(); 3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ++it) { 3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_FALSE(it->unique_id.empty()); 3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_FALSE(it->device_name.empty()); 3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) VLOG(2) << "Device ID(" << it->unique_id << "), label: " << it->device_name; 3558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 3658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 3858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// So that tests herein can be friends of AudioManagerWin. 3958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// 4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// TODO(joi): Make this go away by unifying audio_manager_unittest.cc 4158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// and audio_input_device_unittest.cc 4258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class AudioManagerTest : public ::testing::Test { 4358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) public: 4458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bool SetupForSecondTest(AudioManager* amw) { 4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(OS_WIN) 4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) AudioManagerWin* audio_manager_win = static_cast<AudioManagerWin*>(amw); 4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (audio_manager_win->enumeration_type() == 4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) AudioManagerWin::kWaveEnumeration) { 4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // This will be true only if running on Windows XP. 5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) VLOG(2) << "AudioManagerWin on WinXP; nothing more to test."; 5158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } else { 5258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) VLOG(2) << "Testing AudioManagerWin in fallback WinXP mode."; 5358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) audio_manager_win->SetEnumerationType(AudioManagerWin::kWaveEnumeration); 5458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return true; 5558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 5658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif // defined(OS_WIN) 5758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return false; 5858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 5958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}; 6058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 6158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)TEST_F(AudioManagerTest, GetAudioOutputDeviceNames) { 6258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // On Linux, we may be able to test both the Alsa and Pulseaudio 6358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // versions of the audio manager. 6458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(USE_PULSEAUDIO) 6558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) { 6658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) VLOG(2) << "Testing AudioManagerPulse."; 6758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) scoped_ptr<AudioManager> pulse_audio_manager(AudioManagerPulse::Create()); 6858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (pulse_audio_manager.get()) 6958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) GetAudioOutputDeviceNamesImpl(pulse_audio_manager.get()); 7058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) else 7158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) LOG(WARNING) << "No pulseaudio on this system."; 7258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 7358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif // defined(USE_PULSEAUDIO) 7458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(USE_ALSA) 7558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) { 7658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) VLOG(2) << "Testing AudioManagerLinux."; 7758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) scoped_ptr<AudioManager> alsa_audio_manager(new AudioManagerLinux()); 7858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) GetAudioOutputDeviceNamesImpl(alsa_audio_manager.get()); 7958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 8058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif // defined(USE_ALSA) 8158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 8258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(OS_MACOSX) 8358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) VLOG(2) << "Testing platform-default AudioManager."; 8458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) scoped_ptr<AudioManager> audio_manager(AudioManager::Create()); 8558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) GetAudioOutputDeviceNamesImpl(audio_manager.get()); 8658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif // defined(OS_MACOSX) 8758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 8858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(OS_WIN) 8958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) { 9058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // TODO(joi): Unify the tests in audio_input_device_unittest.cc 9158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // with the tests in this file, and reuse the Windows-specific 9258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // bits from that file. 9358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) VLOG(2) << "Testing AudioManagerWin in its default mode."; 9458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) scoped_ptr<AudioManager> audio_manager_win(AudioManager::Create()); 9558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) GetAudioOutputDeviceNamesImpl(audio_manager_win.get()); 9658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 9758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (SetupForSecondTest(audio_manager_win.get())) { 9858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) GetAudioOutputDeviceNamesImpl(audio_manager_win.get()); 9958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 10058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 10158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif // defined(OS_WIN) 10258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 10358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 10458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)TEST_F(AudioManagerTest, GetDefaultOutputStreamParameters) { 10558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(OS_WIN) || defined(OS_MACOSX) 10658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) scoped_ptr<AudioManager> audio_manager(AudioManager::Create()); 10758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(audio_manager); 10858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (!audio_manager->HasAudioOutputDevices()) 10958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return; 11058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 11158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) AudioParameters params = audio_manager->GetDefaultOutputStreamParameters(); 11258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_TRUE(params.IsValid()); 11358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif // defined(OS_WIN) || defined(OS_MACOSX) 11458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 11558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 11658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)TEST_F(AudioManagerTest, GetAssociatedOutputDeviceID) { 11758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(OS_WIN) || defined(OS_MACOSX) 11858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) scoped_ptr<AudioManager> audio_manager(AudioManager::Create()); 11958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(audio_manager); 12058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (!audio_manager->HasAudioOutputDevices() || 12158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) !audio_manager->HasAudioInputDevices()) { 12258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return; 12358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 12458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 12558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) AudioDeviceNames device_names; 12658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) audio_manager->GetAudioInputDeviceNames(&device_names); 12758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bool found_an_associated_device = false; 12858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) for (AudioDeviceNames::iterator it = device_names.begin(); 12958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) it != device_names.end(); 13058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ++it) { 13158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_FALSE(it->unique_id.empty()); 13258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_FALSE(it->device_name.empty()); 13358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) std::string output_device_id( 13458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) audio_manager->GetAssociatedOutputDeviceID(it->unique_id)); 13558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (!output_device_id.empty()) { 13658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) VLOG(2) << it->unique_id << " matches with " << output_device_id; 13758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) found_an_associated_device = true; 13858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 13958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 14058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 14158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_TRUE(found_an_associated_device); 14258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif // defined(OS_WIN) || defined(OS_MACOSX) 14358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 14458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 14558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} // namespace media 146