| Index: media/audio/audio_input_device_unittest.cc
|
| diff --git a/media/audio/audio_input_device_unittest.cc b/media/audio/audio_input_device_unittest.cc
|
| index 94976a217b86932e1e933cf0e54d89b9b5ae1c46..eb144c6a4bf4346ef16e1e48b968bb127f56a5b1 100644
|
| --- a/media/audio/audio_input_device_unittest.cc
|
| +++ b/media/audio/audio_input_device_unittest.cc
|
| @@ -3,16 +3,23 @@
|
| // found in the LICENSE file.
|
|
|
| #include "base/memory/ptr_util.h"
|
| +#include "base/memory/shared_memory.h"
|
| #include "base/message_loop/message_loop.h"
|
| +#include "base/process/process_handle.h"
|
| #include "base/run_loop.h"
|
| #include "base/single_thread_task_runner.h"
|
| +#include "base/sync_socket.h"
|
| #include "media/audio/audio_input_device.h"
|
| #include "testing/gmock/include/gmock/gmock.h"
|
| #include "testing/gmock_mutant.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| +using base::CancelableSyncSocket;
|
| +using base::SharedMemory;
|
| +using base::SyncSocket;
|
| using testing::_;
|
| using testing::DoAll;
|
| +using testing::Invoke;
|
|
|
| namespace media {
|
|
|
| @@ -39,6 +46,7 @@ class MockCaptureCallback : public AudioCapturerSource::CaptureCallback {
|
| MockCaptureCallback() {}
|
| ~MockCaptureCallback() override {}
|
|
|
| + MOCK_METHOD0(OnCaptureStarted, void());
|
| MOCK_METHOD4(Capture,
|
| void(const AudioBus* audio_source,
|
| int audio_delay_milliseconds,
|
| @@ -87,4 +95,49 @@ TEST(AudioInputDeviceTest, FailToCreateStream) {
|
| base::RunLoop().Run();
|
| }
|
|
|
| +ACTION_P5(ReportOnStreamCreated, device, handle, socket, length, segments) {
|
| + static_cast<AudioInputIPCDelegate*>(device)->OnStreamCreated(
|
| + handle, socket, length, segments);
|
| +}
|
| +
|
| +TEST(AudioInputDeviceTest, CreateStream) {
|
| + AudioParameters params(AudioParameters::AUDIO_PCM_LOW_LATENCY,
|
| + CHANNEL_LAYOUT_STEREO, 48000, 16, 480);
|
| + SharedMemory shared_memory;
|
| + CancelableSyncSocket browser_socket;
|
| + CancelableSyncSocket renderer_socket;
|
| +
|
| + const int memory_size = sizeof(AudioInputBufferParameters) +
|
| + AudioBus::CalculateMemorySize(params);
|
| +
|
| + ASSERT_TRUE(shared_memory.CreateAndMapAnonymous(memory_size));
|
| + memset(shared_memory.memory(), 0xff, memory_size);
|
| +
|
| + ASSERT_TRUE(
|
| + CancelableSyncSocket::CreatePair(&browser_socket, &renderer_socket));
|
| + SyncSocket::TransitDescriptor audio_device_socket_descriptor;
|
| + ASSERT_TRUE(renderer_socket.PrepareTransitDescriptor(
|
| + base::GetCurrentProcessHandle(), &audio_device_socket_descriptor));
|
| + base::SharedMemoryHandle duplicated_memory_handle;
|
| + ASSERT_TRUE(shared_memory.ShareToProcess(base::GetCurrentProcessHandle(),
|
| + &duplicated_memory_handle));
|
| +
|
| + base::MessageLoopForIO io_loop;
|
| + MockCaptureCallback callback;
|
| + MockAudioInputIPC* input_ipc = new MockAudioInputIPC();
|
| + scoped_refptr<AudioInputDevice> device(
|
| + new AudioInputDevice(base::WrapUnique(input_ipc), io_loop.task_runner()));
|
| + device->Initialize(params, &callback, 1);
|
| + device->Start();
|
| +
|
| + EXPECT_CALL(*input_ipc, CreateStream(_, _, _, _, _))
|
| + .WillOnce(ReportOnStreamCreated(
|
| + device.get(), duplicated_memory_handle,
|
| + SyncSocket::UnwrapHandle(audio_device_socket_descriptor), memory_size,
|
| + 1));
|
| + EXPECT_CALL(*input_ipc, RecordStream());
|
| + EXPECT_CALL(callback, OnCaptureStarted())
|
| + .WillOnce(QuitLoop(io_loop.task_runner()));
|
| + base::RunLoop().Run();
|
| +}
|
| } // namespace media.
|
|
|