audio_manager_cras_unittest.cc 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. // Copyright (c) 2021 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "media/audio/cras/audio_manager_cras.h"
  5. #include "base/test/task_environment.h"
  6. #include "media/audio/cras/cras_util.h"
  7. #include "media/audio/fake_audio_log_factory.h"
  8. #include "media/audio/test_audio_thread.h"
  9. #include "testing/gmock/include/gmock/gmock.h"
  10. #include "testing/gtest/include/gtest/gtest.h"
  11. #include "base/logging.h"
  12. using testing::StrictMock;
  13. namespace media {
  14. namespace {
  15. class MockCrasUtil : public CrasUtil {
  16. public:
  17. MOCK_METHOD(std::vector<CrasDevice>,
  18. CrasGetAudioDevices,
  19. (DeviceType type),
  20. (override));
  21. MOCK_METHOD(int, CrasGetAecSupported, (), (override));
  22. MOCK_METHOD(int, CrasGetAecGroupId, (), (override));
  23. MOCK_METHOD(int, CrasGetDefaultOutputBufferSize, (), (override));
  24. };
  25. class MockAudioManagerCras : public AudioManagerCras {
  26. public:
  27. MockAudioManagerCras()
  28. : AudioManagerCras(std::make_unique<TestAudioThread>(),
  29. &fake_audio_log_factory_) {}
  30. ~MockAudioManagerCras() = default;
  31. void SetCrasUtil(std::unique_ptr<CrasUtil> util) {
  32. cras_util_ = std::move(util);
  33. }
  34. using AudioManagerCras::GetPreferredOutputStreamParameters;
  35. private:
  36. FakeAudioLogFactory fake_audio_log_factory_;
  37. };
  38. class AudioManagerCrasTest : public testing::Test {
  39. protected:
  40. AudioManagerCrasTest() {
  41. mock_manager_.reset(new StrictMock<MockAudioManagerCras>());
  42. base::RunLoop().RunUntilIdle();
  43. }
  44. ~AudioManagerCrasTest() override { mock_manager_->Shutdown(); }
  45. base::test::SingleThreadTaskEnvironment task_environment_;
  46. std::unique_ptr<StrictMock<MockAudioManagerCras>> mock_manager_ = NULL;
  47. };
  48. TEST_F(AudioManagerCrasTest, HasAudioInputDevices) {
  49. std::unique_ptr<MockCrasUtil> util = std::make_unique<MockCrasUtil>();
  50. std::vector<CrasDevice> devices;
  51. CrasDevice dev;
  52. dev.type = DeviceType::kInput;
  53. devices.emplace_back(dev);
  54. EXPECT_CALL(*util, CrasGetAudioDevices(DeviceType::kInput))
  55. .WillOnce(testing::Return(devices));
  56. mock_manager_->SetCrasUtil(std::move(util));
  57. auto ret = mock_manager_->HasAudioInputDevices();
  58. EXPECT_EQ(ret, true);
  59. }
  60. TEST_F(AudioManagerCrasTest, CheckDefaultNoDevice) {
  61. std::unique_ptr<MockCrasUtil> util = std::make_unique<MockCrasUtil>();
  62. std::vector<CrasDevice> devices;
  63. AudioDeviceNames device_names;
  64. EXPECT_CALL(*util, CrasGetAudioDevices(DeviceType::kInput))
  65. .WillOnce(testing::Return(devices));
  66. EXPECT_CALL(*util, CrasGetAudioDevices(DeviceType::kOutput))
  67. .WillOnce(testing::Return(devices));
  68. mock_manager_->SetCrasUtil(std::move(util));
  69. mock_manager_->GetAudioInputDeviceNames(&device_names);
  70. EXPECT_EQ(device_names.empty(), true);
  71. mock_manager_->GetAudioOutputDeviceNames(&device_names);
  72. EXPECT_EQ(device_names.empty(), true);
  73. }
  74. TEST_F(AudioManagerCrasTest, CheckDefaultDevice) {
  75. std::unique_ptr<MockCrasUtil> util = std::make_unique<MockCrasUtil>();
  76. std::vector<CrasDevice> devices;
  77. AudioDeviceNames device_names;
  78. CrasDevice dev;
  79. dev.type = DeviceType::kInput;
  80. devices.emplace_back(dev);
  81. EXPECT_CALL(*util, CrasGetAudioDevices(DeviceType::kInput))
  82. .WillOnce(testing::Return(devices));
  83. mock_manager_->SetCrasUtil(std::move(util));
  84. mock_manager_->GetAudioInputDeviceNames(&device_names);
  85. EXPECT_EQ(device_names.size(), 2u);
  86. }
  87. TEST_F(AudioManagerCrasTest, MaxChannel) {
  88. std::unique_ptr<MockCrasUtil> util = std::make_unique<MockCrasUtil>();
  89. std::vector<CrasDevice> devices;
  90. CrasDevice dev;
  91. dev.type = DeviceType::kOutput;
  92. dev.id = 123;
  93. dev.max_supported_channels = 6;
  94. devices.emplace_back(dev);
  95. EXPECT_CALL(*util, CrasGetDefaultOutputBufferSize());
  96. EXPECT_CALL(*util, CrasGetAudioDevices(DeviceType::kOutput))
  97. .WillRepeatedly(testing::Return(devices));
  98. mock_manager_->SetCrasUtil(std::move(util));
  99. auto params = mock_manager_->GetPreferredOutputStreamParameters(
  100. "123", AudioParameters());
  101. EXPECT_EQ(params.channels(), 6);
  102. }
  103. } // namespace
  104. } // namespace media