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

Side by Side Diff: content/renderer/media/webrtc_audio_device_unittest.cc

Issue 8558022: Expose a way for unit tests to terminate the AudioManager singleton to avoid conflicts between te... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: address comments from henrika Created 9 years, 1 month 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | media/audio/audio_manager.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/environment.h" 5 #include "base/environment.h"
6 #include "base/test/test_timeouts.h" 6 #include "base/test/test_timeouts.h"
7 #include "content/renderer/media/webrtc_audio_device_impl.h" 7 #include "content/renderer/media/webrtc_audio_device_impl.h"
8 #include "content/test/webrtc_audio_device_test.h" 8 #include "content/test/webrtc_audio_device_test.h"
9 #include "media/audio/audio_manager.h"
9 #include "media/audio/audio_util.h" 10 #include "media/audio/audio_util.h"
10 #include "testing/gmock/include/gmock/gmock.h" 11 #include "testing/gmock/include/gmock/gmock.h"
11 #include "third_party/webrtc/voice_engine/main/interface/voe_audio_processing.h" 12 #include "third_party/webrtc/voice_engine/main/interface/voe_audio_processing.h"
12 #include "third_party/webrtc/voice_engine/main/interface/voe_base.h" 13 #include "third_party/webrtc/voice_engine/main/interface/voe_base.h"
13 #include "third_party/webrtc/voice_engine/main/interface/voe_external_media.h" 14 #include "third_party/webrtc/voice_engine/main/interface/voe_external_media.h"
14 #include "third_party/webrtc/voice_engine/main/interface/voe_file.h" 15 #include "third_party/webrtc/voice_engine/main/interface/voe_file.h"
15 #include "third_party/webrtc/voice_engine/main/interface/voe_network.h" 16 #include "third_party/webrtc/voice_engine/main/interface/voe_network.h"
16 17
17 using testing::_; 18 using testing::_;
18 using testing::AnyNumber; 19 using testing::AnyNumber;
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 int channel_id_; 108 int channel_id_;
108 webrtc::ProcessingTypes type_; 109 webrtc::ProcessingTypes type_;
109 int packet_size_; 110 int packet_size_;
110 int sample_rate_; 111 int sample_rate_;
111 int channels_; 112 int channels_;
112 DISALLOW_COPY_AND_ASSIGN(WebRTCMediaProcessImpl); 113 DISALLOW_COPY_AND_ASSIGN(WebRTCMediaProcessImpl);
113 }; 114 };
114 115
115 } // end namespace 116 } // end namespace
116 117
118 // Utility class to delete the AudioManager.
119 class AutoAudioManagerCleanup {
scherkus (not reviewing) 2011/11/23 01:35:44 can we file a bug w/ TODO for eliminating the sing
tommi (sloooow) - chröme 2011/11/23 09:55:50 Done.
120 public:
121 AutoAudioManagerCleanup() {
122 if (DeleteAndResurrect()) {
Paweł Hajdan Jr. 2011/11/21 12:37:57 nit: Just EXPECT_FALSE(DeleteAndResurrect()) << "A
tommi (sloooow) - chröme 2011/11/23 09:55:50 Done.
123 // In order to prevent this from happening, we sacrifice this test even
124 // though some other test must have caused this. If we don't it won't
125 // get fixed. Sorry :)
126 ADD_FAILURE()
127 << "AudioManager singleton was not cleaned up by some previous test!";
128 }
129 }
130 ~AutoAudioManagerCleanup() {
131 DeleteAndResurrect();
132 }
133
134 protected:
scherkus (not reviewing) 2011/11/23 01:35:44 private?
tommi (sloooow) - chröme 2011/11/23 09:55:50 Done.
135 // Returns true iff the AudioManager existed and was deleted.
136 bool DeleteAndResurrect() {
137 if (AudioManager::SingletonExists()) {
138 AudioManager::Destroy(NULL);
139 AudioManager::Resurrect();
140 return true;
141 }
142 return false;
143 }
144 };
145
117 // Basic test that instantiates and initializes an instance of 146 // Basic test that instantiates and initializes an instance of
118 // WebRtcAudioDeviceImpl. 147 // WebRtcAudioDeviceImpl.
119 TEST_F(WebRTCAudioDeviceTest, Construct) { 148 TEST_F(WebRTCAudioDeviceTest, Construct) {
149 AutoAudioManagerCleanup audio_manager_cleanup;
120 AudioUtilNoHardware audio_util(48000.0, 48000.0); 150 AudioUtilNoHardware audio_util(48000.0, 48000.0);
121 SetAudioUtilCallback(&audio_util); 151 SetAudioUtilCallback(&audio_util);
122 scoped_refptr<WebRtcAudioDeviceImpl> audio_device( 152 scoped_refptr<WebRtcAudioDeviceImpl> audio_device(
123 new WebRtcAudioDeviceImpl()); 153 new WebRtcAudioDeviceImpl());
124 audio_device->SetSessionId(1); 154 audio_device->SetSessionId(1);
125 155
126 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create()); 156 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create());
127 ASSERT_TRUE(engine.valid()); 157 ASSERT_TRUE(engine.valid());
128 158
129 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get()); 159 ScopedWebRTCPtr<webrtc::VoEBase> base(engine.get());
130 int err = base->Init(audio_device); 160 int err = base->Init(audio_device);
131 EXPECT_EQ(0, err); 161 EXPECT_EQ(0, err);
132 EXPECT_EQ(0, base->Terminate()); 162 EXPECT_EQ(0, base->Terminate());
133 } 163 }
134 164
135 // Verify that a call to webrtc::VoEBase::StartPlayout() starts audio output 165 // Verify that a call to webrtc::VoEBase::StartPlayout() starts audio output
136 // with the correct set of parameters. A WebRtcAudioDeviceImpl instance will 166 // with the correct set of parameters. A WebRtcAudioDeviceImpl instance will
137 // be utilized to implement the actual audio path. The test registers a 167 // be utilized to implement the actual audio path. The test registers a
138 // webrtc::VoEExternalMedia implementation to hijack the output audio and 168 // webrtc::VoEExternalMedia implementation to hijack the output audio and
139 // verify that streaming starts correctly. 169 // verify that streaming starts correctly.
140 // Disabled when running headless since the bots don't have the required config. 170 // Disabled when running headless since the bots don't have the required config.
141 TEST_F(WebRTCAudioDeviceTest, StartPlayout) { 171 TEST_F(WebRTCAudioDeviceTest, StartPlayout) {
172 AutoAudioManagerCleanup audio_manager_cleanup;
173
142 if (IsRunningHeadless()) 174 if (IsRunningHeadless())
143 return; 175 return;
144 176
145 AudioUtil audio_util; 177 AudioUtil audio_util;
146 SetAudioUtilCallback(&audio_util); 178 SetAudioUtilCallback(&audio_util);
147 179
148 EXPECT_CALL(media_observer(), 180 EXPECT_CALL(media_observer(),
149 OnSetAudioStreamStatus(_, 1, StrEq("created"))).Times(1); 181 OnSetAudioStreamStatus(_, 1, StrEq("created"))).Times(1);
150 EXPECT_CALL(media_observer(), 182 EXPECT_CALL(media_observer(),
151 OnSetAudioStreamPlaying(_, 1, true)).Times(1); 183 OnSetAudioStreamPlaying(_, 1, true)).Times(1);
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 // Verify that a call to webrtc::VoEBase::StartRecording() starts audio input 233 // Verify that a call to webrtc::VoEBase::StartRecording() starts audio input
202 // with the correct set of parameters. A WebRtcAudioDeviceImpl instance will 234 // with the correct set of parameters. A WebRtcAudioDeviceImpl instance will
203 // be utilized to implement the actual audio path. The test registers a 235 // be utilized to implement the actual audio path. The test registers a
204 // webrtc::VoEExternalMedia implementation to hijack the input audio and 236 // webrtc::VoEExternalMedia implementation to hijack the input audio and
205 // verify that streaming starts correctly. An external transport implementation 237 // verify that streaming starts correctly. An external transport implementation
206 // is also required to ensure that "sending" can start without actually trying 238 // is also required to ensure that "sending" can start without actually trying
207 // to send encoded packets to the network. Our main interest here is to ensure 239 // to send encoded packets to the network. Our main interest here is to ensure
208 // that the audio capturing starts as it should. 240 // that the audio capturing starts as it should.
209 // Disabled when running headless since the bots don't have the required config. 241 // Disabled when running headless since the bots don't have the required config.
210 TEST_F(WebRTCAudioDeviceTest, StartRecording) { 242 TEST_F(WebRTCAudioDeviceTest, StartRecording) {
243 AutoAudioManagerCleanup audio_manager_cleanup;
244
211 if (IsRunningHeadless()) 245 if (IsRunningHeadless())
212 return; 246 return;
213 247
214 AudioUtil audio_util; 248 AudioUtil audio_util;
215 SetAudioUtilCallback(&audio_util); 249 SetAudioUtilCallback(&audio_util);
216 250
217 // TODO(tommi): extend MediaObserver and MockMediaObserver with support 251 // TODO(tommi): extend MediaObserver and MockMediaObserver with support
218 // for new interfaces, like OnSetAudioStreamRecording(). When done, add 252 // for new interfaces, like OnSetAudioStreamRecording(). When done, add
219 // EXPECT_CALL() macros here. 253 // EXPECT_CALL() macros here.
220 254
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
265 ch, webrtc::kRecordingPerChannel)); 299 ch, webrtc::kRecordingPerChannel));
266 EXPECT_EQ(0, base->StopSend(ch)); 300 EXPECT_EQ(0, base->StopSend(ch));
267 301
268 EXPECT_EQ(0, base->DeleteChannel(ch)); 302 EXPECT_EQ(0, base->DeleteChannel(ch));
269 EXPECT_EQ(0, base->Terminate()); 303 EXPECT_EQ(0, base->Terminate());
270 } 304 }
271 305
272 // Uses WebRtcAudioDeviceImpl to play a local wave file. 306 // Uses WebRtcAudioDeviceImpl to play a local wave file.
273 // Disabled when running headless since the bots don't have the required config. 307 // Disabled when running headless since the bots don't have the required config.
274 TEST_F(WebRTCAudioDeviceTest, PlayLocalFile) { 308 TEST_F(WebRTCAudioDeviceTest, PlayLocalFile) {
309 AutoAudioManagerCleanup audio_manager_cleanup;
310
275 if (IsRunningHeadless()) 311 if (IsRunningHeadless())
276 return; 312 return;
277 313
278 std::string file_path( 314 std::string file_path(
279 GetTestDataPath(FILE_PATH_LITERAL("speechmusic_mono_16kHz.pcm"))); 315 GetTestDataPath(FILE_PATH_LITERAL("speechmusic_mono_16kHz.pcm")));
280 316
281 AudioUtil audio_util; 317 AudioUtil audio_util;
282 SetAudioUtilCallback(&audio_util); 318 SetAudioUtilCallback(&audio_util);
283 319
284 EXPECT_CALL(media_observer(), 320 EXPECT_CALL(media_observer(),
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 361
326 // Uses WebRtcAudioDeviceImpl to play out recorded audio in loopback. 362 // Uses WebRtcAudioDeviceImpl to play out recorded audio in loopback.
327 // An external transport implementation is utilized to feed back RTP packets 363 // An external transport implementation is utilized to feed back RTP packets
328 // which are recorded, encoded, packetized into RTP packets and finally 364 // which are recorded, encoded, packetized into RTP packets and finally
329 // "transmitted". The RTP packets are then fed back into the VoiceEngine 365 // "transmitted". The RTP packets are then fed back into the VoiceEngine
330 // where they are decoded and played out on the default audio output device. 366 // where they are decoded and played out on the default audio output device.
331 // Disabled when running headless since the bots don't have the required config. 367 // Disabled when running headless since the bots don't have the required config.
332 // TODO(henrika): improve quality by using a wideband codec, enabling noise- 368 // TODO(henrika): improve quality by using a wideband codec, enabling noise-
333 // suppressions and perhaps also the digital AGC. 369 // suppressions and perhaps also the digital AGC.
334 TEST_F(WebRTCAudioDeviceTest, FullDuplexAudio) { 370 TEST_F(WebRTCAudioDeviceTest, FullDuplexAudio) {
371 AutoAudioManagerCleanup audio_manager_cleanup;
372
335 if (IsRunningHeadless()) 373 if (IsRunningHeadless())
336 return; 374 return;
337 375
338 EXPECT_CALL(media_observer(), 376 EXPECT_CALL(media_observer(),
339 OnSetAudioStreamStatus(_, 1, StrEq("created"))); 377 OnSetAudioStreamStatus(_, 1, StrEq("created")));
340 EXPECT_CALL(media_observer(), 378 EXPECT_CALL(media_observer(),
341 OnSetAudioStreamPlaying(_, 1, true)); 379 OnSetAudioStreamPlaying(_, 1, true));
342 EXPECT_CALL(media_observer(), 380 EXPECT_CALL(media_observer(),
343 OnSetAudioStreamStatus(_, 1, StrEq("closed"))); 381 OnSetAudioStreamStatus(_, 1, StrEq("closed")));
382 EXPECT_CALL(media_observer(),
383 OnDeleteAudioStream(_, 1)).Times(AnyNumber());
344 384
345 AudioUtil audio_util; 385 AudioUtil audio_util;
346 SetAudioUtilCallback(&audio_util); 386 SetAudioUtilCallback(&audio_util);
347 387
348 scoped_refptr<WebRtcAudioDeviceImpl> audio_device( 388 scoped_refptr<WebRtcAudioDeviceImpl> audio_device(
349 new WebRtcAudioDeviceImpl()); 389 new WebRtcAudioDeviceImpl());
350 audio_device->SetSessionId(1); 390 audio_device->SetSessionId(1);
351 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create()); 391 WebRTCAutoDelete<webrtc::VoiceEngine> engine(webrtc::VoiceEngine::Create());
352 ASSERT_TRUE(engine.valid()); 392 ASSERT_TRUE(engine.valid());
353 393
(...skipping 17 matching lines...) Expand all
371 new MessageLoop::QuitTask(), 411 new MessageLoop::QuitTask(),
372 TestTimeouts::action_timeout_ms()); 412 TestTimeouts::action_timeout_ms());
373 message_loop_.Run(); 413 message_loop_.Run();
374 414
375 EXPECT_EQ(0, base->StopSend(ch)); 415 EXPECT_EQ(0, base->StopSend(ch));
376 EXPECT_EQ(0, base->StopPlayout(ch)); 416 EXPECT_EQ(0, base->StopPlayout(ch));
377 417
378 EXPECT_EQ(0, base->DeleteChannel(ch)); 418 EXPECT_EQ(0, base->DeleteChannel(ch));
379 EXPECT_EQ(0, base->Terminate()); 419 EXPECT_EQ(0, base->Terminate());
380 } 420 }
OLDNEW
« no previous file with comments | « no previous file | media/audio/audio_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698