- README.md (корень): сборка POSIX/ESP-IDF-компонентом, тесты, получение
ключа (fglair-discover), примеры fglctl; planned-компоненты помечены.
- examples/cli/fglctl.cpp: monitor/get/set/status на публичном API
(batch GET шаблона, конверсии, wait_online, логи в stderr, exit-коды;
сборка с -Wall -Wextra -Werror).
- tools/fglair-discover: облачный provisioning (eu/us/cn, endpoints и
app_id/secret из PROTOCOL §7), --format json|esphome-secrets, --out 0600,
обработка URLError/KeyError; stdlib-only.
- tests/tools/test_fglair_discover.py: мок-облако (http.server), 4 теста,
ctest tools_fglair_discover.
- docs/reports/M4_SOAK.md: 60-мин soak на AP-WC1E — 0 рассинхронов,
33/33 свойства (вкл. строковые), 273 опроса модуля, pushes_bad=0;
24-ч прогон — приёмочный шаг перед релизом.
- План: M4 ✅; M5 (FglHub/mDNS) — ВНЕ СКОУПА core-релиза.
- Гигиена: config_kata.json (корень+docs/legacy) в .gitignore; MQTT-креды
из docs/legacy/run.sh заменены плейсхолдером (история чистится отдельно).
- Фиксы ревью: mock арм fail-pushes после активации (флейк san-сборки);
fglctl: валидация strtoll (abc/99 — отказ, exit!=0), чтение config с
предупреждением об обрезке, Config{} вместо memset; discover: 0600.
CI: 11/11 ×3 (gcc-Rel, gcc-ASan/UBSan, clang); ESP-IDF esp32 build complete.
63 lines
3.0 KiB
CMake
63 lines
3.0 KiB
CMake
# Тесты ядра. Структура зеркалит src: tests/ayla — протоколная часть,
|
|
# tests/aircon — конверсии/шаблоны (появятся в M3).
|
|
#
|
|
# Тесты собираются с исключениями (фреймворк), сама библиотека — без.
|
|
|
|
include(FetchContent)
|
|
FetchContent_Declare(
|
|
doctest
|
|
GIT_REPOSITORY https://github.com/doctest/doctest.git
|
|
GIT_TAG v2.4.12
|
|
GIT_SHALLOW TRUE
|
|
)
|
|
FetchContent_MakeAvailable(doctest)
|
|
|
|
function(fgl_add_test name)
|
|
add_executable(test_${name} ${ARGN})
|
|
target_compile_features(test_${name} PRIVATE cxx_std_20)
|
|
target_link_libraries(test_${name} PRIVATE fgl-aircon doctest_with_main)
|
|
target_include_directories(test_${name} PRIVATE "${CMAKE_SOURCE_DIR}/src")
|
|
add_test(NAME ${name} COMMAND test_${name})
|
|
endfunction()
|
|
|
|
# Раннер сессии — не тест, приложение для интеграционных сценариев
|
|
# (запускается tests/ayla/test_session_mock.py через ctest).
|
|
add_executable(session_runner ayla/session_runner.cpp)
|
|
target_compile_features(session_runner PRIVATE cxx_std_20)
|
|
target_link_libraries(session_runner PRIVATE fgl-aircon)
|
|
target_include_directories(session_runner PRIVATE "${CMAKE_SOURCE_DIR}/src")
|
|
|
|
fgl_add_test(ayla_platform ayla/test_platform.cpp)
|
|
fgl_add_test(ayla_httpd ayla/test_httpd.cpp)
|
|
fgl_add_test(ayla_crypto ayla/test_crypto.cpp)
|
|
fgl_add_test(ayla_envelope ayla/test_envelope.cpp)
|
|
fgl_add_test(ayla_json ayla/test_json.cpp)
|
|
fgl_add_test(ayla_httpc ayla/test_httpc.cpp)
|
|
|
|
# aircon-слой: юнит-тесты таблиц/конверсий + C-API smoke.
|
|
fgl_add_test(aircon_tables aircon/test_tables.cpp)
|
|
fgl_add_test(aircon_convert aircon/test_convert.cpp)
|
|
target_link_libraries(test_aircon_tables PRIVATE fgl-aircon)
|
|
target_link_libraries(test_aircon_convert PRIVATE fgl-aircon)
|
|
|
|
add_executable(aircon_runner aircon/aircon_runner.cpp)
|
|
target_compile_features(aircon_runner PRIVATE cxx_std_20)
|
|
target_link_libraries(aircon_runner PRIVATE fgl-aircon)
|
|
target_include_directories(aircon_runner PRIVATE "${CMAKE_SOURCE_DIR}/src")
|
|
|
|
# Интеграционные сценарии с mock-модулем (python, stdlib-only).
|
|
find_package(Python3 COMPONENTS Interpreter REQUIRED)
|
|
add_test(NAME ayla_session_mock
|
|
COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/ayla/test_session_mock.py
|
|
$<TARGET_FILE:session_runner> ${CMAKE_CURRENT_SOURCE_DIR}/ayla/mock_ac.py)
|
|
set_tests_properties(ayla_session_mock PROPERTIES TIMEOUT 180)
|
|
add_test(NAME aircon_session_mock
|
|
COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/aircon/test_aircon_mock.py
|
|
$<TARGET_FILE:aircon_runner> ${CMAKE_CURRENT_SOURCE_DIR}/ayla/mock_ac.py)
|
|
set_tests_properties(aircon_session_mock PROPERTIES TIMEOUT 180)
|
|
|
|
# fglair-discover против мок-облака.
|
|
add_test(NAME tools_fglair_discover
|
|
COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/tools/test_fglair_discover.py)
|
|
set_tests_properties(tools_fglair_discover PROPERTIES TIMEOUT 60)
|