Always build all iOS unittests, even on the simulator.

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 <mbonadei@webrtc.org>
Commit-Queue: Daniel.L (Byoungchan) Lee <daniel.l@hpcnt.com>
Reviewed-by: Kári Helgason <kthelgason@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#39306}
This commit is contained in:
Byoungchan Lee 2023-02-10 16:08:36 +09:00 committed by WebRTC LUCI CQ
parent 60795e8c7a
commit 2e631f5c38
3 changed files with 42 additions and 10 deletions

View file

@ -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",

View file

@ -10,6 +10,8 @@
#import <XCTest/XCTest.h>
#include <stdlib.h>
#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<webrtc::AudioDeviceModule> 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<webrtc::AudioDeviceModule> 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());

View file

@ -10,6 +10,8 @@
#import <XCTest/XCTest.h>
#include <stdlib.h>
#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<webrtc::AudioDeviceModule> _audioDeviceModule;
std::unique_ptr<webrtc::ios_adm::AudioDeviceIOS> _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]);