Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(633)

Unified Diff: media/audio/linux/alsa_output_unittest.cc

Issue 9570014: Move some generic functions to AudioManagerBase to be inherited by platform-specific AudioManager*** (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: changed the GetMaxOutputStreamsAllowed Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: media/audio/linux/alsa_output_unittest.cc
diff --git a/media/audio/linux/alsa_output_unittest.cc b/media/audio/linux/alsa_output_unittest.cc
index bcf2e3dd0486d811c3113edb98314a847a8ac067..86589961db391d8fd9b6bb19c5e0d22c2c95f6a4 100644
--- a/media/audio/linux/alsa_output_unittest.cc
+++ b/media/audio/linux/alsa_output_unittest.cc
@@ -78,13 +78,25 @@ class MockAudioManagerLinux : public AudioManagerLinux {
MOCK_METHOD0(Init, void());
MOCK_METHOD0(HasAudioOutputDevices, bool());
MOCK_METHOD0(HasAudioInputDevices, bool());
- MOCK_METHOD1(MakeAudioOutputStream, AudioOutputStream*(
- const AudioParameters& params));
- MOCK_METHOD2(MakeAudioInputStream, AudioInputStream*(
- const AudioParameters& params, const std::string& device_id));
MOCK_METHOD0(MuteAll, void());
MOCK_METHOD0(UnMuteAll, void());
- MOCK_METHOD1(ReleaseOutputStream, void(AudioOutputStream* stream));
+ MOCK_METHOD1(MakeLinearOutputStream, AudioOutputStream*(
+ const AudioParameters& params));
+ MOCK_METHOD1(MakeLowLatencyOutputStream, AudioOutputStream*(
+ const AudioParameters& params));
+ MOCK_METHOD2(MakeLinearOutputStream, AudioInputStream*(
+ const AudioParameters& params, const std::string& device_id));
+ MOCK_METHOD2(MakeLowLatencyInputStream, AudioInputStream*(
+ const AudioParameters& params, const std::string& device_id));
+
+ // We need to override this function in order to skip the checking the number
+ // of active output streams. It is because the number of active streams
+ // is managed inside MakeAudioOutputStream, and we don't use
+ // MakeAudioOutputStream to create the stream in the tests.
+ virtual void ReleaseOutputStream(AudioOutputStream* stream) OVERRIDE {
+ DCHECK(stream);
+ delete stream;
+ }
// We don't mock this method since all tests will do the same thing
// and use the current message loop.
@@ -97,11 +109,9 @@ class AlsaPcmOutputStreamTest : public testing::Test {
protected:
AlsaPcmOutputStreamTest() {
mock_manager_.reset(new StrictMock<MockAudioManagerLinux>());
- test_stream_.reset(CreateStream(kTestChannelLayout));
}
virtual ~AlsaPcmOutputStreamTest() {
- test_stream_.reset(NULL);
}
AlsaPcmOutputStream* CreateStream(ChannelLayout layout) {
@@ -128,13 +138,14 @@ class AlsaPcmOutputStreamTest : public testing::Test {
return strdup("Output");
}
- // Helper function to initialize |test_stream_->buffer_|. Must be called
+ // Helper function to initialize |test_stream->buffer_|. Must be called
// in all tests that use buffer_ without opening the stream.
- void InitBuffer() {
+ void InitBuffer(AlsaPcmOutputStream* test_stream) {
+ DCHECK(test_stream);
packet_ = new media::DataBuffer(kTestPacketSize);
packet_->SetDataSize(kTestPacketSize);
- test_stream_->buffer_.reset(new media::SeekableBuffer(0, kTestPacketSize));
- test_stream_->buffer_->Append(packet_.get());
+ test_stream->buffer_.reset(new media::SeekableBuffer(0, kTestPacketSize));
+ test_stream->buffer_->Append(packet_.get());
}
MockAudioManagerLinux& mock_manager() {
@@ -165,7 +176,6 @@ class AlsaPcmOutputStreamTest : public testing::Test {
StrictMock<MockAlsaWrapper> mock_alsa_wrapper_;
scoped_ptr<StrictMock<MockAudioManagerLinux> > mock_manager_;
MessageLoop message_loop_;
- scoped_ptr<AlsaPcmOutputStream> test_stream_;
scoped_refptr<media::DataBuffer> packet_;
private:
@@ -203,35 +213,41 @@ void* AlsaPcmOutputStreamTest::kFakeHints[] = {
kSurround70, kSurround71, NULL };
TEST_F(AlsaPcmOutputStreamTest, ConstructedState) {
- EXPECT_EQ(AlsaPcmOutputStream::kCreated, test_stream_->state());
+ AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout);
+ EXPECT_EQ(AlsaPcmOutputStream::kCreated, test_stream->state());
+ test_stream->Close();
// Should support mono.
- test_stream_.reset(CreateStream(CHANNEL_LAYOUT_MONO));
- EXPECT_EQ(AlsaPcmOutputStream::kCreated, test_stream_->state());
+ test_stream = CreateStream(CHANNEL_LAYOUT_MONO);
+ EXPECT_EQ(AlsaPcmOutputStream::kCreated, test_stream->state());
+ test_stream->Close();
// Should support multi-channel.
- test_stream_.reset(CreateStream(CHANNEL_LAYOUT_SURROUND));
- EXPECT_EQ(AlsaPcmOutputStream::kCreated, test_stream_->state());
+ test_stream = CreateStream(CHANNEL_LAYOUT_SURROUND);
+ EXPECT_EQ(AlsaPcmOutputStream::kCreated, test_stream->state());
+ test_stream->Close();
// Bad bits per sample.
AudioParameters bad_bps_params(kTestFormat, kTestChannelLayout,
kTestSampleRate, kTestBitsPerSample - 1,
kTestFramesPerPacket);
- test_stream_.reset(new AlsaPcmOutputStream(kTestDeviceName,
- bad_bps_params,
- &mock_alsa_wrapper_,
- mock_manager_.get()));
- EXPECT_EQ(AlsaPcmOutputStream::kInError, test_stream_->state());
+ test_stream = new AlsaPcmOutputStream(kTestDeviceName,
+ bad_bps_params,
+ &mock_alsa_wrapper_,
+ mock_manager_.get());
+ EXPECT_EQ(AlsaPcmOutputStream::kInError, test_stream->state());
+ test_stream->Close();
// Bad format.
AudioParameters bad_format_params(
AudioParameters::AUDIO_LAST_FORMAT, kTestChannelLayout, kTestSampleRate,
kTestBitsPerSample, kTestFramesPerPacket);
- test_stream_.reset(new AlsaPcmOutputStream(kTestDeviceName,
- bad_format_params,
- &mock_alsa_wrapper_,
- mock_manager_.get()));
- EXPECT_EQ(AlsaPcmOutputStream::kInError, test_stream_->state());
+ test_stream = new AlsaPcmOutputStream(kTestDeviceName,
+ bad_format_params,
+ &mock_alsa_wrapper_,
+ mock_manager_.get());
+ EXPECT_EQ(AlsaPcmOutputStream::kInError, test_stream->state());
+ test_stream->Close();
}
TEST_F(AlsaPcmOutputStreamTest, LatencyFloor) {
@@ -255,16 +271,15 @@ TEST_F(AlsaPcmOutputStreamTest, LatencyFloor) {
SetArgumentPointee<2>(kTestFramesPerPacket / 2),
Return(0)));
- test_stream_.reset(CreateStream(kTestChannelLayout,
- kPacketFramesInMinLatency));
- ASSERT_TRUE(test_stream_->Open());
+ AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout,
+ kPacketFramesInMinLatency);
+ ASSERT_TRUE(test_stream->Open());
// Now close it and test that everything was released.
EXPECT_CALL(mock_alsa_wrapper_, PcmClose(kFakeHandle)).WillOnce(Return(0));
EXPECT_CALL(mock_alsa_wrapper_, PcmName(kFakeHandle))
.WillOnce(Return(kTestDeviceName));
- EXPECT_CALL(mock_manager(), ReleaseOutputStream(test_stream_.get()));
- test_stream_->Close();
+ test_stream->Close();
Mock::VerifyAndClear(&mock_alsa_wrapper_);
Mock::VerifyAndClear(mock_manager_.get());
@@ -284,17 +299,16 @@ TEST_F(AlsaPcmOutputStreamTest, LatencyFloor) {
SetArgumentPointee<2>(kTestFramesPerPacket / 2),
Return(0)));
- test_stream_.reset(CreateStream(kTestChannelLayout,
- kOverMinLatencyPacketSize));
- ASSERT_TRUE(test_stream_->Open());
+ test_stream = CreateStream(kTestChannelLayout,
+ kOverMinLatencyPacketSize);
+ ASSERT_TRUE(test_stream->Open());
// Now close it and test that everything was released.
EXPECT_CALL(mock_alsa_wrapper_, PcmClose(kFakeHandle))
.WillOnce(Return(0));
EXPECT_CALL(mock_alsa_wrapper_, PcmName(kFakeHandle))
.WillOnce(Return(kTestDeviceName));
- EXPECT_CALL(mock_manager(), ReleaseOutputStream(test_stream_.get()));
- test_stream_->Close();
+ test_stream->Close();
Mock::VerifyAndClear(&mock_alsa_wrapper_);
Mock::VerifyAndClear(mock_manager_.get());
@@ -328,25 +342,21 @@ TEST_F(AlsaPcmOutputStreamTest, OpenClose) {
Return(0)));
// Open the stream.
- ASSERT_TRUE(test_stream_->Open());
+ AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout);
+ ASSERT_TRUE(test_stream->Open());
- EXPECT_EQ(AlsaPcmOutputStream::kIsOpened, test_stream_->state());
- EXPECT_EQ(kFakeHandle, test_stream_->playback_handle_);
- EXPECT_EQ(kTestFramesPerPacket, test_stream_->frames_per_packet_);
- EXPECT_TRUE(test_stream_->buffer_.get());
- EXPECT_FALSE(test_stream_->stop_stream_);
+ EXPECT_EQ(AlsaPcmOutputStream::kIsOpened, test_stream->state());
+ EXPECT_EQ(kFakeHandle, test_stream->playback_handle_);
+ EXPECT_EQ(kTestFramesPerPacket, test_stream->frames_per_packet_);
+ EXPECT_TRUE(test_stream->buffer_.get());
+ EXPECT_FALSE(test_stream->stop_stream_);
// Now close it and test that everything was released.
EXPECT_CALL(mock_alsa_wrapper_, PcmClose(kFakeHandle))
.WillOnce(Return(0));
EXPECT_CALL(mock_alsa_wrapper_, PcmName(kFakeHandle))
.WillOnce(Return(kTestDeviceName));
- EXPECT_CALL(mock_manager(), ReleaseOutputStream(test_stream_.get()));
- test_stream_->Close();
-
- EXPECT_TRUE(test_stream_->playback_handle_ == NULL);
- EXPECT_FALSE(test_stream_->buffer_.get());
- EXPECT_TRUE(test_stream_->stop_stream_);
+ test_stream->Close();
}
TEST_F(AlsaPcmOutputStreamTest, PcmOpenFailed) {
@@ -355,17 +365,17 @@ TEST_F(AlsaPcmOutputStreamTest, PcmOpenFailed) {
EXPECT_CALL(mock_alsa_wrapper_, StrError(kTestFailedErrno))
.WillOnce(Return(kDummyMessage));
- ASSERT_FALSE(test_stream_->Open());
- ASSERT_EQ(AlsaPcmOutputStream::kInError, test_stream_->state());
+ AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout);
+ ASSERT_FALSE(test_stream->Open());
+ ASSERT_EQ(AlsaPcmOutputStream::kInError, test_stream->state());
// Ensure internal state is set for a no-op stream if PcmOpen() failes.
- EXPECT_TRUE(test_stream_->stop_stream_);
- EXPECT_TRUE(test_stream_->playback_handle_ == NULL);
- EXPECT_FALSE(test_stream_->buffer_.get());
+ EXPECT_TRUE(test_stream->stop_stream_);
+ EXPECT_TRUE(test_stream->playback_handle_ == NULL);
+ EXPECT_FALSE(test_stream->buffer_.get());
// Close the stream since we opened it to make destruction happy.
- EXPECT_CALL(mock_manager(), ReleaseOutputStream(test_stream_.get()));
- test_stream_->Close();
+ test_stream->Close();
}
TEST_F(AlsaPcmOutputStreamTest, PcmSetParamsFailed) {
@@ -383,17 +393,17 @@ TEST_F(AlsaPcmOutputStreamTest, PcmSetParamsFailed) {
// If open fails, the stream stays in kCreated because it has effectively had
// no changes.
- ASSERT_FALSE(test_stream_->Open());
- EXPECT_EQ(AlsaPcmOutputStream::kInError, test_stream_->state());
+ AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout);
+ ASSERT_FALSE(test_stream->Open());
+ EXPECT_EQ(AlsaPcmOutputStream::kInError, test_stream->state());
// Ensure internal state is set for a no-op stream if PcmSetParams() failes.
- EXPECT_TRUE(test_stream_->stop_stream_);
- EXPECT_TRUE(test_stream_->playback_handle_ == NULL);
- EXPECT_FALSE(test_stream_->buffer_.get());
+ EXPECT_TRUE(test_stream->stop_stream_);
+ EXPECT_TRUE(test_stream->playback_handle_ == NULL);
+ EXPECT_FALSE(test_stream->buffer_.get());
// Close the stream since we opened it to make destruction happy.
- EXPECT_CALL(mock_manager(), ReleaseOutputStream(test_stream_.get()));
- test_stream_->Close();
+ test_stream->Close();
}
TEST_F(AlsaPcmOutputStreamTest, StartStop) {
@@ -411,7 +421,8 @@ TEST_F(AlsaPcmOutputStreamTest, StartStop) {
Return(0)));
// Open the stream.
- ASSERT_TRUE(test_stream_->Open());
+ AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout);
+ ASSERT_TRUE(test_stream->Open());
// Expect Device setup.
EXPECT_CALL(mock_alsa_wrapper_, PcmDrop(kFakeHandle))
@@ -428,7 +439,7 @@ TEST_F(AlsaPcmOutputStreamTest, StartStop) {
.Times(2)
.WillRepeatedly(DoAll(SetArgumentPointee<1>(0), Return(0)));
EXPECT_CALL(mock_callback,
- OnMoreData(test_stream_.get(), _, kTestPacketSize, _))
+ OnMoreData(test_stream, _, kTestPacketSize, _))
.Times(2)
.WillOnce(Return(kTestPacketSize))
.WillOnce(Return(0));
@@ -444,39 +455,41 @@ TEST_F(AlsaPcmOutputStreamTest, StartStop) {
&MessageLoop::QuitNow),
Return(0))); // Buffer is full.
- test_stream_->Start(&mock_callback);
+ test_stream->Start(&mock_callback);
message_loop_.RunAllPending();
- EXPECT_CALL(mock_manager(), ReleaseOutputStream(test_stream_.get()));
EXPECT_CALL(mock_alsa_wrapper_, PcmClose(kFakeHandle))
.WillOnce(Return(0));
EXPECT_CALL(mock_alsa_wrapper_, PcmName(kFakeHandle))
.WillOnce(Return(kTestDeviceName));
- test_stream_->Close();
+ test_stream->Close();
}
TEST_F(AlsaPcmOutputStreamTest, WritePacket_FinishedPacket) {
- InitBuffer();
+ AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout);
+ InitBuffer(test_stream);
// Nothing should happen. Don't set any expectations and Our strict mocks
// should verify most of this.
// Test empty buffer.
- test_stream_->buffer_->Clear();
- test_stream_->WritePacket();
+ test_stream->buffer_->Clear();
+ test_stream->WritePacket();
+ test_stream->Close();
}
TEST_F(AlsaPcmOutputStreamTest, WritePacket_NormalPacket) {
- InitBuffer();
+ AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout);
+ InitBuffer(test_stream);
// Write a little less than half the data.
int written = packet_->GetDataSize() / kTestBytesPerFrame / 2 - 1;
EXPECT_CALL(mock_alsa_wrapper_, PcmWritei(_, packet_->GetData(), _))
.WillOnce(Return(written));
- test_stream_->WritePacket();
+ test_stream->WritePacket();
- ASSERT_EQ(test_stream_->buffer_->forward_bytes(),
+ ASSERT_EQ(test_stream->buffer_->forward_bytes(),
packet_->GetDataSize() - written * kTestBytesPerFrame);
// Write the rest.
@@ -484,12 +497,14 @@ TEST_F(AlsaPcmOutputStreamTest, WritePacket_NormalPacket) {
PcmWritei(_, packet_->GetData() + written * kTestBytesPerFrame,
_))
.WillOnce(Return(packet_->GetDataSize() / kTestBytesPerFrame - written));
- test_stream_->WritePacket();
- EXPECT_EQ(0u, test_stream_->buffer_->forward_bytes());
+ test_stream->WritePacket();
+ EXPECT_EQ(0u, test_stream->buffer_->forward_bytes());
+ test_stream->Close();
}
TEST_F(AlsaPcmOutputStreamTest, WritePacket_WriteFails) {
- InitBuffer();
+ AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout);
+ InitBuffer(test_stream);
// Fail due to a recoverable error and see that PcmRecover code path
// continues normally.
@@ -498,9 +513,9 @@ TEST_F(AlsaPcmOutputStreamTest, WritePacket_WriteFails) {
EXPECT_CALL(mock_alsa_wrapper_, PcmRecover(_, _, _))
.WillOnce(Return(packet_->GetDataSize() / kTestBytesPerFrame / 2 - 1));
- test_stream_->WritePacket();
+ test_stream->WritePacket();
- ASSERT_EQ(test_stream_->buffer_->forward_bytes(),
+ ASSERT_EQ(test_stream->buffer_->forward_bytes(),
packet_->GetDataSize() / 2 + kTestBytesPerFrame);
// Fail the next write, and see that stop_stream_ is set.
@@ -510,24 +525,28 @@ TEST_F(AlsaPcmOutputStreamTest, WritePacket_WriteFails) {
.WillOnce(Return(kTestFailedErrno));
EXPECT_CALL(mock_alsa_wrapper_, StrError(kTestFailedErrno))
.WillOnce(Return(kDummyMessage));
- test_stream_->WritePacket();
- EXPECT_EQ(test_stream_->buffer_->forward_bytes(),
+ test_stream->WritePacket();
+ EXPECT_EQ(test_stream->buffer_->forward_bytes(),
packet_->GetDataSize() / 2 + kTestBytesPerFrame);
- EXPECT_TRUE(test_stream_->stop_stream_);
+ EXPECT_TRUE(test_stream->stop_stream_);
+ test_stream->Close();
}
TEST_F(AlsaPcmOutputStreamTest, WritePacket_StopStream) {
- InitBuffer();
+ AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout);
+ InitBuffer(test_stream);
// No expectations set on the strict mock because nothing should be called.
- test_stream_->stop_stream_ = true;
- test_stream_->WritePacket();
- EXPECT_EQ(0u, test_stream_->buffer_->forward_bytes());
+ test_stream->stop_stream_ = true;
+ test_stream->WritePacket();
+ EXPECT_EQ(0u, test_stream->buffer_->forward_bytes());
+ test_stream->Close();
}
TEST_F(AlsaPcmOutputStreamTest, BufferPacket) {
- InitBuffer();
- test_stream_->buffer_->Clear();
+ AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout);
+ InitBuffer(test_stream);
+ test_stream->buffer_->Clear();
MockAudioSourceCallback mock_callback;
EXPECT_CALL(mock_alsa_wrapper_, PcmState(_))
@@ -539,21 +558,23 @@ TEST_F(AlsaPcmOutputStreamTest, BufferPacket) {
// Return a partially filled packet.
EXPECT_CALL(mock_callback,
- OnMoreData(test_stream_.get(), _, _, _))
+ OnMoreData(test_stream, _, _, _))
.WillOnce(Return(10));
bool source_exhausted;
- test_stream_->set_source_callback(&mock_callback);
- test_stream_->packet_size_ = kTestPacketSize;
- test_stream_->BufferPacket(&source_exhausted);
+ test_stream->set_source_callback(&mock_callback);
+ test_stream->packet_size_ = kTestPacketSize;
+ test_stream->BufferPacket(&source_exhausted);
- EXPECT_EQ(10u, test_stream_->buffer_->forward_bytes());
+ EXPECT_EQ(10u, test_stream->buffer_->forward_bytes());
EXPECT_FALSE(source_exhausted);
+ test_stream->Close();
}
TEST_F(AlsaPcmOutputStreamTest, BufferPacket_Negative) {
- InitBuffer();
- test_stream_->buffer_->Clear();
+ AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout);
+ InitBuffer(test_stream);
+ test_stream->buffer_->Clear();
// Simulate where the underrun has occurred right after checking the delay.
MockAudioSourceCallback mock_callback;
@@ -563,22 +584,23 @@ TEST_F(AlsaPcmOutputStreamTest, BufferPacket_Negative) {
.WillOnce(DoAll(SetArgumentPointee<1>(-1), Return(0)));
EXPECT_CALL(mock_alsa_wrapper_, PcmAvailUpdate(_))
.WillRepeatedly(Return(0)); // Buffer is full.
- EXPECT_CALL(mock_callback,
- OnMoreData(test_stream_.get(), _, _, _))
+ EXPECT_CALL(mock_callback, OnMoreData(test_stream, _, _, _))
.WillOnce(Return(10));
bool source_exhausted;
- test_stream_->set_source_callback(&mock_callback);
- test_stream_->packet_size_ = kTestPacketSize;
- test_stream_->BufferPacket(&source_exhausted);
+ test_stream->set_source_callback(&mock_callback);
+ test_stream->packet_size_ = kTestPacketSize;
+ test_stream->BufferPacket(&source_exhausted);
- EXPECT_EQ(10u, test_stream_->buffer_->forward_bytes());
+ EXPECT_EQ(10u, test_stream->buffer_->forward_bytes());
EXPECT_FALSE(source_exhausted);
+ test_stream->Close();
}
TEST_F(AlsaPcmOutputStreamTest, BufferPacket_Underrun) {
- InitBuffer();
- test_stream_->buffer_->Clear();
+ AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout);
+ InitBuffer(test_stream);
+ test_stream->buffer_->Clear();
// If ALSA has underrun then we should assume a delay of zero.
MockAudioSourceCallback mock_callback;
@@ -587,28 +609,31 @@ TEST_F(AlsaPcmOutputStreamTest, BufferPacket_Underrun) {
EXPECT_CALL(mock_alsa_wrapper_, PcmAvailUpdate(_))
.WillRepeatedly(Return(0)); // Buffer is full.
EXPECT_CALL(mock_callback,
- OnMoreData(test_stream_.get(), _, _, AllOf(
+ OnMoreData(test_stream, _, _, AllOf(
Field(&AudioBuffersState::pending_bytes, 0),
Field(&AudioBuffersState::hardware_delay_bytes, 0))))
.WillOnce(Return(10));
bool source_exhausted;
- test_stream_->set_source_callback(&mock_callback);
- test_stream_->packet_size_ = kTestPacketSize;
- test_stream_->BufferPacket(&source_exhausted);
+ test_stream->set_source_callback(&mock_callback);
+ test_stream->packet_size_ = kTestPacketSize;
+ test_stream->BufferPacket(&source_exhausted);
- EXPECT_EQ(10u, test_stream_->buffer_->forward_bytes());
+ EXPECT_EQ(10u, test_stream->buffer_->forward_bytes());
EXPECT_FALSE(source_exhausted);
+ test_stream->Close();
}
TEST_F(AlsaPcmOutputStreamTest, BufferPacket_FullBuffer) {
- InitBuffer();
+ AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout);
+ InitBuffer(test_stream);
// No expectations set on the strict mock because nothing should be called.
bool source_exhausted;
- test_stream_->packet_size_ = kTestPacketSize;
- test_stream_->BufferPacket(&source_exhausted);
- EXPECT_EQ(kTestPacketSize, test_stream_->buffer_->forward_bytes());
+ test_stream->packet_size_ = kTestPacketSize;
+ test_stream->BufferPacket(&source_exhausted);
+ EXPECT_EQ(kTestPacketSize, test_stream->buffer_->forward_bytes());
EXPECT_FALSE(source_exhausted);
+ test_stream->Close();
}
TEST_F(AlsaPcmOutputStreamTest, AutoSelectDevice_DeviceSelect) {
@@ -670,12 +695,13 @@ TEST_F(AlsaPcmOutputStreamTest, AutoSelectDevice_DeviceSelect) {
EXPECT_CALL(mock_alsa_wrapper_, DeviceNameGetHint(_, StrEq("NAME")))
.WillRepeatedly(Invoke(EchoHint));
- test_stream_.reset(CreateStream(kExpectedLayouts[i]));
- EXPECT_TRUE(test_stream_->AutoSelectDevice(i));
- EXPECT_EQ(kExpectedDownmix[i], test_stream_->should_downmix_);
+ AlsaPcmOutputStream* test_stream = CreateStream(kExpectedLayouts[i]);
+ EXPECT_TRUE(test_stream->AutoSelectDevice(i));
+ EXPECT_EQ(kExpectedDownmix[i], test_stream->should_downmix_);
Mock::VerifyAndClearExpectations(&mock_alsa_wrapper_);
Mock::VerifyAndClearExpectations(mock_manager_.get());
+ test_stream->Close();
}
}
@@ -720,8 +746,9 @@ TEST_F(AlsaPcmOutputStreamTest, AutoSelectDevice_FallbackDevices) {
EXPECT_CALL(mock_alsa_wrapper_, PcmOpen(_, StrEq(fourth_try.c_str()), _, _))
.WillOnce(Return(kTestFailedErrno));
- test_stream_.reset(CreateStream(CHANNEL_LAYOUT_5POINT0));
- EXPECT_FALSE(test_stream_->AutoSelectDevice(5));
+ AlsaPcmOutputStream* test_stream = CreateStream(CHANNEL_LAYOUT_5POINT0);
+ EXPECT_FALSE(test_stream->AutoSelectDevice(5));
+ test_stream->Close();
}
TEST_F(AlsaPcmOutputStreamTest, AutoSelectDevice_HintFail) {
@@ -738,53 +765,62 @@ TEST_F(AlsaPcmOutputStreamTest, AutoSelectDevice_HintFail) {
EXPECT_CALL(mock_alsa_wrapper_, StrError(kTestFailedErrno))
.WillOnce(Return(kDummyMessage));
- test_stream_.reset(CreateStream(CHANNEL_LAYOUT_5POINT0));
- EXPECT_TRUE(test_stream_->AutoSelectDevice(5));
- EXPECT_TRUE(test_stream_->should_downmix_);
+ AlsaPcmOutputStream* test_stream = CreateStream(CHANNEL_LAYOUT_5POINT0);
+ EXPECT_TRUE(test_stream->AutoSelectDevice(5));
+ EXPECT_TRUE(test_stream->should_downmix_);
+ test_stream->Close();
}
TEST_F(AlsaPcmOutputStreamTest, BufferPacket_StopStream) {
- InitBuffer();
- test_stream_->stop_stream_ = true;
+ AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout);
+ InitBuffer(test_stream);
+ test_stream->stop_stream_ = true;
bool source_exhausted;
- test_stream_->BufferPacket(&source_exhausted);
- EXPECT_EQ(0u, test_stream_->buffer_->forward_bytes());
+ test_stream->BufferPacket(&source_exhausted);
+ EXPECT_EQ(0u, test_stream->buffer_->forward_bytes());
EXPECT_TRUE(source_exhausted);
+ test_stream->Close();
}
TEST_F(AlsaPcmOutputStreamTest, ScheduleNextWrite) {
- test_stream_->TransitionTo(AlsaPcmOutputStream::kIsOpened);
- test_stream_->TransitionTo(AlsaPcmOutputStream::kIsPlaying);
-
- InitBuffer();
-
+ AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout);
+ test_stream->TransitionTo(AlsaPcmOutputStream::kIsOpened);
+ test_stream->TransitionTo(AlsaPcmOutputStream::kIsPlaying);
+DLOG(WARNING) << test_stream->state();
+ InitBuffer(test_stream);
+ DLOG(WARNING) << test_stream->state();
EXPECT_CALL(mock_alsa_wrapper_, PcmAvailUpdate(_))
.WillOnce(Return(10));
- test_stream_->ScheduleNextWrite(false);
-
+ test_stream->ScheduleNextWrite(false);
+ DLOG(WARNING) << test_stream->state();
// TODO(sergeyu): Figure out how to check that the task has been added to the
// message loop.
// Cleanup the message queue. Currently ~MessageQueue() doesn't free pending
// tasks unless running on valgrind. The code below is needed to keep
// heapcheck happy.
- test_stream_->stop_stream_ = true;
- test_stream_->TransitionTo(AlsaPcmOutputStream::kIsClosed);
+ test_stream->stop_stream_ = true;
+ DLOG(WARNING) << test_stream->state();
+ test_stream->TransitionTo(AlsaPcmOutputStream::kIsClosed);
+ DLOG(WARNING) << test_stream->state();
+ test_stream->Close();
}
TEST_F(AlsaPcmOutputStreamTest, ScheduleNextWrite_StopStream) {
- test_stream_->TransitionTo(AlsaPcmOutputStream::kIsOpened);
- test_stream_->TransitionTo(AlsaPcmOutputStream::kIsPlaying);
+ AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout);
+ test_stream->TransitionTo(AlsaPcmOutputStream::kIsOpened);
+ test_stream->TransitionTo(AlsaPcmOutputStream::kIsPlaying);
- InitBuffer();
+ InitBuffer(test_stream);
- test_stream_->stop_stream_ = true;
- test_stream_->ScheduleNextWrite(true);
+ test_stream->stop_stream_ = true;
+ test_stream->ScheduleNextWrite(true);
// TODO(ajwong): Find a way to test whether or not another task has been
// posted so we can verify that the Alsa code will indeed break the task
// posting loop.
- test_stream_->TransitionTo(AlsaPcmOutputStream::kIsClosed);
+ test_stream->TransitionTo(AlsaPcmOutputStream::kIsClosed);
+ test_stream->Close();
}

Powered by Google App Engine
This is Rietveld 408576698