diff options
author | henrika@chromium.org <henrika@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-07 18:32:52 +0000 |
---|---|---|
committer | henrika@chromium.org <henrika@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-07 18:32:52 +0000 |
commit | d9ce54ef26cabe894d0994aa2a8ab2300bc09f39 (patch) | |
tree | 2449860e3560ef655b5a5331c734fd89d710ebc2 /media/audio/win | |
parent | b9c990a6d5e9f9c6b3247274a34bcc36a446a408 (diff) | |
download | chromium_src-d9ce54ef26cabe894d0994aa2a8ab2300bc09f39.zip chromium_src-d9ce54ef26cabe894d0994aa2a8ab2300bc09f39.tar.gz chromium_src-d9ce54ef26cabe894d0994aa2a8ab2300bc09f39.tar.bz2 |
Improves flaky unit tests on Windows and Mac OS X.
BUG=116961
TEST=media_unittests on Windows and Mac OS X
Review URL: http://codereview.chromium.org/9625002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@125415 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/audio/win')
-rw-r--r-- | media/audio/win/audio_low_latency_input_win_unittest.cc | 37 |
1 files changed, 25 insertions, 12 deletions
diff --git a/media/audio/win/audio_low_latency_input_win_unittest.cc b/media/audio/win/audio_low_latency_input_win_unittest.cc index c4f6f9d..11554c7 100644 --- a/media/audio/win/audio_low_latency_input_win_unittest.cc +++ b/media/audio/win/audio_low_latency_input_win_unittest.cc @@ -9,6 +9,7 @@ #include "base/environment.h" #include "base/file_util.h" #include "base/memory/scoped_ptr.h" +#include "base/message_loop.h" #include "base/path_service.h" #include "base/test/test_timeouts.h" #include "base/win/scoped_com_initializer.h" @@ -21,10 +22,16 @@ using base::win::ScopedCOMInitializer; using ::testing::AnyNumber; -using ::testing::Between; +using ::testing::AtLeast; using ::testing::Gt; using ::testing::NotNull; +ACTION_P3(CheckCountAndPostQuitTask, count, limit, loop) { + if (++*count >= limit) { + loop->PostTask(FROM_HERE, MessageLoop::QuitClosure()); + } +} + class MockAudioInputCallback : public AudioInputStream::AudioInputCallback { public: MOCK_METHOD4(OnData, void(AudioInputStream* stream, @@ -278,6 +285,9 @@ TEST(WinAudioInputTest, WASAPIAudioInputStreamTestPacketSizes) { if (!CanRunAudioTests(audio_manager.get())) return; + int count = 0; + MessageLoopForUI loop; + // 10 ms packet size. // Create default WASAPI input stream which records in stereo using @@ -292,16 +302,15 @@ TEST(WinAudioInputTest, WASAPIAudioInputStreamTestPacketSizes) { uint32 bytes_per_packet = aisw.channels() * aisw.samples_per_packet() * (aisw.bits_per_sample() / 8); - // We use 10ms packets and will run the test for ~100ms. Given that the - // startup sequence takes some time, it is reasonable to expect 5-12 - // callbacks in this time period. All should contain valid packets of - // the same size and a valid delay estimate. + // We use 10ms packets and will run the test until ten packets are received. + // All should contain valid packets of the same size and a valid delay + // estimate. EXPECT_CALL(sink, OnData( ais, NotNull(), bytes_per_packet, Gt(bytes_per_packet))) - .Times(Between(5, 10)); - + .Times(AtLeast(10)) + .WillRepeatedly(CheckCountAndPostQuitTask(&count, 10, &loop)); ais->Start(&sink); - base::PlatformThread::Sleep(TestTimeouts::tiny_timeout()); + loop.Run(); ais->Stop(); // Store current packet size (to be used in the subsequent tests). @@ -313,6 +322,7 @@ TEST(WinAudioInputTest, WASAPIAudioInputStreamTestPacketSizes) { // 20 ms packet size. + count = 0; ais = aisw.Create(2 * samples_per_packet_10ms); EXPECT_TRUE(ais->Open()); bytes_per_packet = aisw.channels() * aisw.samples_per_packet() * @@ -320,9 +330,10 @@ TEST(WinAudioInputTest, WASAPIAudioInputStreamTestPacketSizes) { EXPECT_CALL(sink, OnData( ais, NotNull(), bytes_per_packet, Gt(bytes_per_packet))) - .Times(Between(5, 10)); + .Times(AtLeast(10)) + .WillRepeatedly(CheckCountAndPostQuitTask(&count, 10, &loop)); ais->Start(&sink); - base::PlatformThread::Sleep(2 * TestTimeouts::tiny_timeout()); + loop.Run(); ais->Stop(); EXPECT_CALL(sink, OnClose(ais)) @@ -331,6 +342,7 @@ TEST(WinAudioInputTest, WASAPIAudioInputStreamTestPacketSizes) { // 5 ms packet size. + count = 0; ais = aisw.Create(samples_per_packet_10ms / 2); EXPECT_TRUE(ais->Open()); bytes_per_packet = aisw.channels() * aisw.samples_per_packet() * @@ -338,9 +350,10 @@ TEST(WinAudioInputTest, WASAPIAudioInputStreamTestPacketSizes) { EXPECT_CALL(sink, OnData( ais, NotNull(), bytes_per_packet, Gt(bytes_per_packet))) - .Times(Between(2 * 5, 2 * 10)); + .Times(AtLeast(10)) + .WillRepeatedly(CheckCountAndPostQuitTask(&count, 10, &loop)); ais->Start(&sink); - base::PlatformThread::Sleep(TestTimeouts::tiny_timeout()); + loop.Run(); ais->Stop(); EXPECT_CALL(sink, OnClose(ais)) |