diff --git a/tools/chatgui/CMakeLists.txt b/tools/chatgui/CMakeLists.txt index cff46f16..5e6d1351 100644 --- a/tools/chatgui/CMakeLists.txt +++ b/tools/chatgui/CMakeLists.txt @@ -556,7 +556,8 @@ if(FFMPEG_FOUND) endif() if(CMAKE_SYSTEM_NAME STREQUAL "Linux") target_compile_definitions(test_stream_publish PRIVATE TEST_NULL_AUDIO) - target_link_options(test_stream_publish PRIVATE "-Wl,--wrap=ma_context_init" "-Wl,--wrap=ma_device_init") + target_link_options(test_stream_publish PRIVATE "-Wl,--wrap=ma_context_init" "-Wl,--wrap=ma_device_init" + "-Wl,--wrap=opus_codec_encode") endif() add_test(NAME test_stream_publish COMMAND test_stream_publish) set_tests_properties(test_stream_publish PROPERTIES TIMEOUT 60 ENVIRONMENT "QT_QPA_PLATFORM=offscreen") diff --git a/tools/chatgui/tests/test_stream_publish.cpp b/tools/chatgui/tests/test_stream_publish.cpp index 99532b3a..8e90b0ff 100644 --- a/tools/chatgui/tests/test_stream_publish.cpp +++ b/tools/chatgui/tests/test_stream_publish.cpp @@ -37,6 +37,11 @@ extern "C" { #ifdef TEST_NULL_AUDIO static ma_device_data_proc captureCallback; +static std::atomic failAudioEncoding{false}; +extern "C" int __real_opus_codec_encode(opus_codec_encoder_t*, const int16_t*, int, uint8_t*, int); +extern "C" int __wrap_opus_codec_encode(opus_codec_encoder_t* encoder, const int16_t* pcm, int frames, uint8_t* data, int capacity) { + return failAudioEncoding.exchange(false) ? -1 : __real_opus_codec_encode(encoder, pcm, frames, data, capacity); +} extern "C" ma_result __real_ma_context_init(const ma_backend*, ma_uint32, const ma_context_config*, ma_context*); extern "C" ma_result __real_ma_device_init(ma_context*, const ma_device_config*, ma_device*); extern "C" ma_result __wrap_ma_context_init(const ma_backend*, ma_uint32, const ma_context_config*, ma_context* context) { @@ -282,7 +287,11 @@ private slots: } QVERIFY(window); #endif - QVERIFY(errors.isEmpty()); engine.stop(); QTRY_VERIFY_WITH_TIMEOUT(!engine.active(), 4000); + QVERIFY(errors.isEmpty()); failAudioEncoding = true; + QTRY_VERIFY(!engine.running()); QTRY_COMPARE(errors.size(), 1); + QVERIFY(!errors.front().front().toString().contains("restored")); + AudioCaptureLease microphone; QVERIFY(microphone.acquire()); microphone.release(); + QTRY_VERIFY_WITH_TIMEOUT(!engine.active(), 4000); gui_stream_stop(202); sound->shutdown(); #else QSKIP("Qt screen capture or null audio unavailable");