Browse Source

Test fatal desktop audio failure after successful capture

master
evgeny 5 days ago
parent
commit
c3512b787e
  1. 3
      tools/chatgui/CMakeLists.txt
  2. 11
      tools/chatgui/tests/test_stream_publish.cpp

3
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")

11
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<bool> 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");

Loading…
Cancel
Save