Cover radio settings recovery across core restarts
This commit is contained in:
1 parent
5c2ba74e3e
commit
b4186dfae3
1 file changed
+34
@@ -14,6 +14,7 @@
|
||||
#include <QFile>
|
||||
#include <QElapsedTimer>
|
||||
#include <QTest>
|
||||
#include <QSignalSpy>
|
||||
#include <atomic>
|
||||
extern "C" {
|
||||
#include "utun_instance.h"
|
||||
@@ -340,6 +341,39 @@ int main(int argc, char** argv) {
|
||||
instance.ua = nullptr;
|
||||
REQUIRE(u_get_allocated_count() == allocated);
|
||||
qInfo("radio panel: pending settings request freed on core shutdown PASS");
|
||||
|
||||
// Повторная загрузка после отмены старой задачи должна поставить запрос в новое ядро.
|
||||
debug_set_category_level(DEBUG_CATEGORY_RADIO, DEBUG_LEVEL_DEBUG);
|
||||
instance.ua = uasync_create();
|
||||
REQUIRE(instance.ua && chat_setting_set(&instance, "radio_vad_threshold", "75") == 0);
|
||||
engine->loadSettings(configPath);
|
||||
REQUIRE(engine->settingsBusy() && !engine->settingsReady() && instance.ua->posted_tasks_head);
|
||||
await([&] { return engine->settingsReady() && !engine->settingsBusy(); });
|
||||
REQUIRE(engine->setting("radio_vad_threshold") == 75);
|
||||
uasync_destroy(instance.ua, 0); instance.ua = nullptr;
|
||||
REQUIRE(u_get_allocated_count() == allocated);
|
||||
qInfo("radio panel: settings reload after cancelled core request PASS");
|
||||
|
||||
// Старый uasync уже закончил чтение, но GUI completion ждёт доставки при запуске нового ядра.
|
||||
instance.ua = uasync_create();
|
||||
REQUIRE(instance.ua && chat_setting_set(&instance, "radio_vad_threshold", "20") == 0);
|
||||
engine->loadSettings(configPath);
|
||||
uasync_poll(instance.ua, 0);
|
||||
REQUIRE(engine->settingsBusy() && !instance.ua->posted_tasks_head);
|
||||
uasync_destroy(instance.ua, 0); instance.ua = nullptr;
|
||||
instance.ua = uasync_create();
|
||||
REQUIRE(instance.ua && chat_setting_set(&instance, "radio_vad_threshold", "80") == 0);
|
||||
engine->loadSettings(configPath);
|
||||
REQUIRE(engine->settingsBusy() && !engine->settingsReady() && instance.ua->posted_tasks_head);
|
||||
QSignalSpy staleSettings(engine, &RadioAudioEngine::stateChanged);
|
||||
QCoreApplication::sendPostedEvents(engine, QEvent::MetaCall);
|
||||
REQUIRE(engine->settingsBusy() && !engine->settingsReady() && engine->setting("radio_vad_threshold") == 75);
|
||||
REQUIRE(staleSettings.isEmpty() && instance.ua->posted_tasks_head);
|
||||
await([&] { return engine->settingsReady() && !engine->settingsBusy(); });
|
||||
REQUIRE(engine->setting("radio_vad_threshold") == 80 && staleSettings.size() == 1);
|
||||
uasync_destroy(instance.ua, 0); instance.ua = nullptr;
|
||||
REQUIRE(u_get_allocated_count() == allocated);
|
||||
qInfo("radio panel: stale GUI settings completion cannot unlock or overwrite restarted core PASS");
|
||||
qInfo("radio panel: saved settings, channel change, device menus, range validation and config failure PASS");
|
||||
return 0;
|
||||
}
|
||||
Reference in new issue
Block a user