blob: 6e56347fd5df96d54b619bb78ad1cb03bb2c0819 [file] [log] [blame]
/*
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#include <cstring>
#include "after_initialization_fixture.h"
using namespace webrtc;
static const char* kNoDevicesErrorMessage =
"Either you have no recording / playout device "
"on your system, or the method failed.";
class HardwareBeforeStreamingTest : public AfterInitializationFixture {
};
// Tests that apply to both mobile and desktop:
TEST_F(HardwareBeforeStreamingTest,
SetAudioDeviceLayerFailsSinceTheVoiceEngineHasBeenInitialized) {
EXPECT_NE(0, voe_hardware_->SetAudioDeviceLayer(kAudioPlatformDefault));
EXPECT_EQ(VE_ALREADY_INITED, voe_base_->LastError());
}
TEST_F(HardwareBeforeStreamingTest,
GetCPULoadSucceedsOnWindowsButNotOtherPlatforms) {
int load_percent;
#if defined(_WIN32)
EXPECT_EQ(0, voe_hardware_->GetCPULoad(load_percent));
#else
EXPECT_NE(0, voe_hardware_->GetCPULoad(load_percent)) <<
"Should fail on non-Windows platforms.";
#endif
}
// Tests that only apply to mobile:
#ifdef MAC_IPHONE
TEST_F(HardwareBeforeStreamingTest, ResetsAudioDeviceOnIphone) {
EXPECT_EQ(0, voe_hardware_->ResetAudioDevice());
}
#endif
// Tests that only apply to desktop:
#if !defined(MAC_IPHONE) & !defined(WEBRTC_ANDROID)
TEST_F(HardwareBeforeStreamingTest, GetSystemCpuLoadSucceeds) {
#ifdef _WIN32
// This method needs some warm-up time on Windows. We sleep a good amount
// of time instead of retrying to make the test simpler.
Sleep(2000);
#endif
int load_percent;
EXPECT_EQ(0, voe_hardware_->GetSystemCPULoad(load_percent));
}
TEST_F(HardwareBeforeStreamingTest, GetPlayoutDeviceStatusReturnsTrue) {
bool play_available = false;
EXPECT_EQ(0, voe_hardware_->GetPlayoutDeviceStatus(play_available));
ASSERT_TRUE(play_available) <<
"Ensures that the method works and that hardware is in the right state.";
}
TEST_F(HardwareBeforeStreamingTest, GetRecordingDeviceStatusReturnsTrue) {
bool recording_available = false;
EXPECT_EQ(0, voe_hardware_->GetRecordingDeviceStatus(recording_available));
EXPECT_TRUE(recording_available) <<
"Ensures that the method works and that hardware is in the right state.";
}
// Win, Mac and Linux sound device tests.
TEST_F(HardwareBeforeStreamingTest,
GetRecordingDeviceNameRetrievesDeviceNames) {
char device_name[128] = {0};
char guid_name[128] = {0};
#ifdef _WIN32
EXPECT_EQ(0, voe_hardware_->GetRecordingDeviceName(
-1, device_name, guid_name));
EXPECT_GT(strlen(device_name), 0u) << kNoDevicesErrorMessage;
device_name[0] = '\0';
EXPECT_EQ(0, voe_hardware_->GetPlayoutDeviceName(
-1, device_name, guid_name));
EXPECT_GT(strlen(device_name), 0u) << kNoDevicesErrorMessage;
#else
EXPECT_EQ(0, voe_hardware_->GetRecordingDeviceName(
0, device_name, guid_name));
EXPECT_GT(strlen(device_name), 0u) << kNoDevicesErrorMessage;
device_name[0] = '\0';
EXPECT_EQ(0, voe_hardware_->GetPlayoutDeviceName(
0, device_name, guid_name));
EXPECT_GT(strlen(device_name), 0u) << kNoDevicesErrorMessage;
#endif // !WIN32
}
TEST_F(HardwareBeforeStreamingTest,
AllEnumeratedRecordingDevicesCanBeSetAsRecordingDevice) {
// Check recording side.
// Extended Win32 enumeration tests: unique GUID outputs on Vista and up:
// Win XP and below : device_name is copied to guid_name.
// Win Vista and up : device_name is the friendly name and GUID is a unique
// identifier.
// Other : guid_name is left unchanged.
int num_of_recording_devices = 0;
EXPECT_EQ(0, voe_hardware_->GetNumOfRecordingDevices(
num_of_recording_devices));
EXPECT_GT(num_of_recording_devices, 0) << kNoDevicesErrorMessage;
char device_name[128] = {0};
char guid_name[128] = {0};
for (int i = 0; i < num_of_recording_devices; i++) {
EXPECT_EQ(0, voe_hardware_->GetRecordingDeviceName(
i, device_name, guid_name));
EXPECT_GT(strlen(device_name), 0u) <<
"There should be no empty device names "
"among the ones the system gives us.";
EXPECT_EQ(0, voe_hardware_->SetRecordingDevice(i));
}
}
TEST_F(HardwareBeforeStreamingTest,
AllEnumeratedPlayoutDevicesCanBeSetAsPlayoutDevice) {
// Check playout side (see recording side test for more info on GUIDs).
int num_of_playout_devices = 0;
EXPECT_EQ(0, voe_hardware_->GetNumOfPlayoutDevices(
num_of_playout_devices));
EXPECT_GT(num_of_playout_devices, 0) << kNoDevicesErrorMessage;
char device_name[128] = {0};
char guid_name[128] = {0};
for (int i = 0; i < num_of_playout_devices; ++i) {
EXPECT_EQ(0, voe_hardware_->GetPlayoutDeviceName(
i, device_name, guid_name));
EXPECT_GT(strlen(device_name), 0u) <<
"There should be no empty device names "
"among the ones the system gives us.";
EXPECT_EQ(0, voe_hardware_->SetPlayoutDevice(i));
}
}
TEST_F(HardwareBeforeStreamingTest,
SetDeviceWithMagicalArgumentsSetsDefaultSoundDevices) {
#ifdef _WIN32
// -1 means "default device" on Windows.
EXPECT_EQ(0, voe_hardware_->SetRecordingDevice(-1));
EXPECT_EQ(0, voe_hardware_->SetPlayoutDevice(-1));
#else
EXPECT_EQ(0, voe_hardware_->SetRecordingDevice(0));
EXPECT_EQ(0, voe_hardware_->SetPlayoutDevice(0));
#endif
}
#endif // !defined(MAC_IPHONE) & !defined(WEBRTC_ANDROID)