From 2e631f5c38819a37486ba2c945edd8d5258e95ce Mon Sep 17 00:00:00 2001 From: Byoungchan Lee Date: Fri, 10 Feb 2023 16:08:36 +0900 Subject: [PATCH] Always build all iOS unittests, even on the simulator. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Also, make the iOS audio unittests not run on the simulator by default, and if someone wants to run the tests one can do by using the WEBRTC_IOS_RUN_AUDIO_TESTS environment variable. Bug: webrtc:7812 Change-Id: Ie9fc70872c6617516e2f2c21039489df309b85fb Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/292621 Reviewed-by: Mirko Bonadei Commit-Queue: Daniel.L (Byoungchan) Lee Reviewed-by: Kári Helgason Cr-Commit-Position: refs/heads/main@{#39306} --- sdk/BUILD.gn | 11 ++------ .../unittests/RTCAudioDeviceModule_xctest.mm | 27 ++++++++++++++++++- sdk/objc/unittests/RTCAudioDevice_xctest.mm | 14 ++++++++++ 3 files changed, 42 insertions(+), 10 deletions(-) diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn index a361656a59..971a323ef5 100644 --- a/sdk/BUILD.gn +++ b/sdk/BUILD.gn @@ -1114,6 +1114,8 @@ if (is_ios || is_mac) { sources = [ "objc/unittests/ObjCVideoTrackSource_xctest.mm", + "objc/unittests/RTCAudioDeviceModule_xctest.mm", + "objc/unittests/RTCAudioDevice_xctest.mm", "objc/unittests/RTCAudioSessionTest.mm", "objc/unittests/RTCCVPixelBuffer_xctest.mm", "objc/unittests/RTCCallbackLogger_xctest.m", @@ -1146,15 +1148,6 @@ if (is_ios || is_mac) { # workaround. defines = [ "GLES_SILENCE_DEPRECATION" ] - # TODO(peterhanspers): Reenable these tests on simulator. - # See bugs.webrtc.org/7812 - if (target_environment != "simulator") { - sources += [ - "objc/unittests/RTCAudioDeviceModule_xctest.mm", - "objc/unittests/RTCAudioDevice_xctest.mm", - ] - } - deps = [ ":audio_device", ":audio_session_objc", diff --git a/sdk/objc/unittests/RTCAudioDeviceModule_xctest.mm b/sdk/objc/unittests/RTCAudioDeviceModule_xctest.mm index f8ce844652..f7439f39f9 100644 --- a/sdk/objc/unittests/RTCAudioDeviceModule_xctest.mm +++ b/sdk/objc/unittests/RTCAudioDeviceModule_xctest.mm @@ -10,6 +10,8 @@ #import +#include + #if defined(WEBRTC_IOS) #import "sdk/objc/native/api/audio_device_module.h" #endif @@ -126,6 +128,7 @@ static const NSUInteger kFullDuplexTimeInSec = 10; static const NSUInteger kNumIgnoreFirstCallbacks = 50; @interface RTCAudioDeviceModuleTests : XCTestCase { + bool _testEnabled; rtc::scoped_refptr audioDeviceModule; MockAudioTransport mock; } @@ -142,6 +145,17 @@ static const NSUInteger kNumIgnoreFirstCallbacks = 50; - (void)setUp { [super setUp]; +#if defined(WEBRTC_IOS) && TARGET_OS_SIMULATOR + // TODO(peterhanspers): Reenable these tests on simulator. + // See bugs.webrtc.org/7812 + _testEnabled = false; + if (::getenv("WEBRTC_IOS_RUN_AUDIO_TESTS") != nullptr) { + _testEnabled = true; + } +#else + _testEnabled = true; +#endif + audioDeviceModule = webrtc::CreateAudioDeviceModule(); XCTAssertEqual(0, audioDeviceModule->Init()); XCTAssertEqual(0, audioDeviceModule->GetPlayoutAudioParameters(&playoutParameters)); @@ -192,10 +206,12 @@ static const NSUInteger kNumIgnoreFirstCallbacks = 50; #pragma mark - Tests - (void)testConstructDestruct { + XCTSkipIf(!_testEnabled); // Using the test fixture to create and destruct the audio device module. } - (void)testInitTerminate { + XCTSkipIf(!_testEnabled); // Initialization is part of the test fixture. XCTAssertTrue(audioDeviceModule->Initialized()); XCTAssertEqual(0, audioDeviceModule->Terminate()); @@ -205,6 +221,7 @@ static const NSUInteger kNumIgnoreFirstCallbacks = 50; // Tests that playout can be initiated, started and stopped. No audio callback // is registered in this test. - (void)testStartStopPlayout { + XCTSkipIf(!_testEnabled); [self startPlayout]; [self stopPlayout]; [self startPlayout]; @@ -214,6 +231,7 @@ static const NSUInteger kNumIgnoreFirstCallbacks = 50; // Tests that recording can be initiated, started and stopped. No audio callback // is registered in this test. - (void)testStartStopRecording { + XCTSkipIf(!_testEnabled); [self startRecording]; [self stopRecording]; [self startRecording]; @@ -224,6 +242,7 @@ static const NSUInteger kNumIgnoreFirstCallbacks = 50; // StartPlayout() while being uninitialized since doing so will hit a // RTC_DCHECK. - (void)testStopPlayoutRequiresInitToRestart { + XCTSkipIf(!_testEnabled); XCTAssertEqual(0, audioDeviceModule->InitPlayout()); XCTAssertEqual(0, audioDeviceModule->StartPlayout()); XCTAssertEqual(0, audioDeviceModule->StopPlayout()); @@ -236,6 +255,7 @@ static const NSUInteger kNumIgnoreFirstCallbacks = 50; // explicitly verify correct audio session calls but instead focuses on // ensuring that audio starts for both ADMs. - (void)testStartPlayoutOnTwoInstances { + XCTSkipIf(!_testEnabled); // Create and initialize a second/extra ADM instance. The default ADM is // created by the test harness. rtc::scoped_refptr secondAudioDeviceModule = @@ -319,7 +339,7 @@ static const NSUInteger kNumIgnoreFirstCallbacks = 50; // Start playout and verify that the native audio layer starts asking for real // audio samples to play out using the NeedMorePlayData callback. - (void)testStartPlayoutVerifyCallbacks { - + XCTSkipIf(!_testEnabled); XCTestExpectation *playoutExpectation = [self expectationWithDescription:@"NeedMorePlayoutData"]; __block int num_callbacks = 0; mock.expectNeedMorePlayData(^int32_t(const size_t nSamples, @@ -352,6 +372,7 @@ static const NSUInteger kNumIgnoreFirstCallbacks = 50; // Start recording and verify that the native audio layer starts feeding real // audio samples via the RecordedDataIsAvailable callback. - (void)testStartRecordingVerifyCallbacks { + XCTSkipIf(!_testEnabled); XCTestExpectation *recordExpectation = [self expectationWithDescription:@"RecordedDataIsAvailable"]; __block int num_callbacks = 0; @@ -390,6 +411,7 @@ static const NSUInteger kNumIgnoreFirstCallbacks = 50; // Start playout and recording (full-duplex audio) and verify that audio is // active in both directions. - (void)testStartPlayoutAndRecordingVerifyCallbacks { + XCTSkipIf(!_testEnabled); XCTestExpectation *playoutExpectation = [self expectationWithDescription:@"NeedMorePlayoutData"]; __block NSUInteger callbackCount = 0; @@ -453,6 +475,7 @@ static const NSUInteger kNumIgnoreFirstCallbacks = 50; // asks for data to play out. Real audio is played out in this test but it does // not contain any explicit verification that the audio quality is perfect. - (void)testRunPlayoutWithFileAsSource { + XCTSkipIf(!_testEnabled); XCTAssertEqual(1u, playoutParameters.channels()); // Using XCTestExpectation to count callbacks is very slow. @@ -488,6 +511,7 @@ static const NSUInteger kNumIgnoreFirstCallbacks = 50; } - (void)testDevices { + XCTSkipIf(!_testEnabled); // Device enumeration is not supported. Verify fixed values only. XCTAssertEqual(1, audioDeviceModule->PlayoutDevices()); XCTAssertEqual(1, audioDeviceModule->RecordingDevices()); @@ -507,6 +531,7 @@ static const NSUInteger kNumIgnoreFirstCallbacks = 50; // TODO(henrika): tune the final test parameters after running tests on several // different devices. - (void)testRunPlayoutAndRecordingInFullDuplex { + XCTSkipIf(!_testEnabled); XCTAssertEqual(recordParameters.channels(), playoutParameters.channels()); XCTAssertEqual(recordParameters.sample_rate(), playoutParameters.sample_rate()); diff --git a/sdk/objc/unittests/RTCAudioDevice_xctest.mm b/sdk/objc/unittests/RTCAudioDevice_xctest.mm index e01fdbd6e3..eec9e17a17 100644 --- a/sdk/objc/unittests/RTCAudioDevice_xctest.mm +++ b/sdk/objc/unittests/RTCAudioDevice_xctest.mm @@ -10,6 +10,8 @@ #import +#include + #include "api/task_queue/default_task_queue_factory.h" #import "sdk/objc/components/audio/RTCAudioSession+Private.h" @@ -17,6 +19,7 @@ #import "sdk/objc/native/src/audio/audio_device_ios.h" @interface RTCAudioDeviceTests : XCTestCase { + bool _testEnabled; rtc::scoped_refptr _audioDeviceModule; std::unique_ptr _audio_device; } @@ -31,6 +34,16 @@ - (void)setUp { [super setUp]; +#if defined(WEBRTC_IOS) && TARGET_OS_SIMULATOR + // TODO(peterhanspers): Reenable these tests on simulator. + // See bugs.webrtc.org/7812 + _testEnabled = false; + if (::getenv("WEBRTC_IOS_RUN_AUDIO_TESTS") != nullptr) { + _testEnabled = true; + } +#else + _testEnabled = true; +#endif _audioDeviceModule = webrtc::CreateAudioDeviceModule(); _audio_device.reset(new webrtc::ios_adm::AudioDeviceIOS(/*bypass_voice_processing=*/false)); @@ -78,6 +91,7 @@ // AudioDeviceIOS's is_interrupted_ flag to RTC_OBJC_TYPE(RTCAudioSession)'s isInterrupted // flag in AudioDeviceIOS.InitPlayOrRecord. - (void)testInterruptedAudioSession { + XCTSkipIf(!_testEnabled); XCTAssertTrue(self.audioSession.isActive); XCTAssertTrue([self.audioSession.category isEqual:AVAudioSessionCategoryPlayAndRecord] || [self.audioSession.category isEqual:AVAudioSessionCategoryPlayback]);