Chromium Code Reviews| Index: media/audio/audio_output_device_unittest.cc |
| diff --git a/media/audio/audio_output_device_unittest.cc b/media/audio/audio_output_device_unittest.cc |
| index 4ce521f64137eefecb4b1fa583b9a6f7b162b36e..48f09496c0a304ebd60142865695705b1287ab4a 100644 |
| --- a/media/audio/audio_output_device_unittest.cc |
| +++ b/media/audio/audio_output_device_unittest.cc |
| @@ -17,9 +17,11 @@ |
| #include "base/sync_socket.h" |
| #include "base/task_runner.h" |
| #include "base/test/test_timeouts.h" |
| +#include "base/threading/thread.h" |
| #include "base/threading/thread_task_runner_handle.h" |
| #include "media/audio/audio_output_device.h" |
| #include "media/audio/sample_rates.h" |
| +#include "media/base/test_helpers.h" |
| #include "testing/gmock/include/gmock/gmock.h" |
| #include "testing/gmock_mutant.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| @@ -99,7 +101,9 @@ class AudioOutputDeviceTest |
| void ExpectRenderCallback(); |
| void WaitUntilRenderCallback(); |
| void StopAudioDevice(); |
| + void CreateDevice(const std::string& device_id); |
| void SetDevice(const std::string& device_id); |
| + void CheckDeviceStatus(OutputDeviceStatus device_status); |
| protected: |
| // Used to clean up TLS pointers that the test(s) will initialize. |
| @@ -139,11 +143,15 @@ AudioOutputDeviceTest::~AudioOutputDeviceTest() { |
| audio_device_ = NULL; |
| } |
| -void AudioOutputDeviceTest::SetDevice(const std::string& device_id) { |
| +void AudioOutputDeviceTest::CreateDevice(const std::string& device_id) { |
| audio_output_ipc_ = new MockAudioOutputIPC(); |
| audio_device_ = new AudioOutputDevice(base::WrapUnique(audio_output_ipc_), |
| io_loop_.task_runner(), 0, device_id, |
| url::Origin()); |
| +} |
| + |
| +void AudioOutputDeviceTest::SetDevice(const std::string& device_id) { |
| + CreateDevice(device_id); |
| EXPECT_CALL(*audio_output_ipc_, |
| RequestDeviceAuthorization(audio_device_.get(), 0, device_id, _)); |
| audio_device_->RequestDeviceAuthorization(); |
| @@ -160,6 +168,10 @@ void AudioOutputDeviceTest::SetDevice(const std::string& device_id) { |
| &callback_); |
| } |
| +void AudioOutputDeviceTest::CheckDeviceStatus(OutputDeviceStatus status) { |
| + EXPECT_EQ(status, audio_device_->GetOutputDeviceInfo().device_status()); |
| +} |
| + |
| void AudioOutputDeviceTest::ReceiveAuthorization(OutputDeviceStatus status) { |
| device_status_ = status; |
| if (device_status_ != OUTPUT_DEVICE_STATUS_OK) |
| @@ -318,6 +330,34 @@ TEST_P(AudioOutputDeviceTest, UnauthorizedDevice) { |
| StopAudioDevice(); |
| } |
| +TEST_P(AudioOutputDeviceTest, AuthorizationTimedOut) { |
|
o1ka
2016/06/10 14:21:09
Since it takes 4 seconds (= auth timeout value), p
|
| + base::Thread thread("DeviceInfo"); |
| + thread.Start(); |
| + |
| + CreateDevice(kNonDefaultDeviceId); |
| + EXPECT_CALL(*audio_output_ipc_, |
| + RequestDeviceAuthorization(audio_device_.get(), 0, |
| + kNonDefaultDeviceId, _)); |
| + EXPECT_CALL(*audio_output_ipc_, CloseStream()); |
| + audio_device_->RequestDeviceAuthorization(); |
| + |
| + media::WaitableMessageLoopEvent event; |
| + // Request device info on another thread. |
| + thread.task_runner()->PostTaskAndReply( |
| + FROM_HERE, |
| + base::Bind(&AudioOutputDeviceTest::CheckDeviceStatus, |
| + base::Unretained(this), OUTPUT_DEVICE_STATUS_ERROR_INTERNAL), |
| + event.GetClosure()); |
| + |
| + io_loop_.RunUntilIdle(); |
| + |
| + // Runs the loop and waits for |thread| to call event's closure. |
|
DaleCurtis
2016/06/10 18:29:19
Don't use real time if you want to add a test like
o1ka
2016/06/13 13:22:13
Introduced a timeout parameter in AOD constructor.
|
| + event.RunAndWait(); |
| + |
| + audio_device_->Stop(); |
| + io_loop_.RunUntilIdle(); |
| +} |
| + |
| INSTANTIATE_TEST_CASE_P(Render, AudioOutputDeviceTest, Values(false)); |
| } // namespace media. |