generate_kos_test()
В разделе представлено описание функции generate_kos_test() CMake-библиотеки test_generator:
- синтаксис функции;
- параметры функции;
- артефакты, генерируемые функцией;
- сборка тестов с использованием этой функции и их запуск;
- пример использования функции.
Синтаксис функции
Функция объявлена в файле, который находится в KasperskyOS Community Edition по пути: toolchain/share/cmake/Modules/test-generator/generate_kos_test.cmake.
generate_kos_test(ENTITY_NAME <NAME> TEST_TYPE <TYPE> ...)
Команда генерирует инициализирующую программу Einit, а также другие артефакты, необходимые для сборки и запуска теста на базе KasperskyOS.
Параметры функции
В KasperskyOS Community Edition доступны следующие параметры:
ENTITY_NAME <NAME>Имя теста. В сочетании с параметром
ENTITY_PREFIXформирует имя класса процессов теста в формате<ENTITY_PREFIX>.<ENTITY_NAME>. Обязательный параметр.TARGET_NAME <NAME>Имя
CMake-цели сборки исполняемого файла теста. Значение по умолчанию равно значению параметраENTITY_NAME. Если имя класса процессов, передаваемое в функциюgenerate_edl_file(), и имяCMake-цели, передаваемое вCMake-командуadd_executable(), отличаются, то это имяCMake-цели необходимо передать в функциюgenerate_kos_test()в параметреTARGET_NAME. Подробнее см. пример использования функцииgenerate_kos_test()ниже.ENTITY_PREFIX <PREFIX>Путь к EDL-файлу (без расширения и точки перед ним) относительно директории, которая включена в набор директорий, где генераторы исходного кода выполняют поиск IDL-, CDL-, EDL-файлов. В качестве разделителя в описании пути используется точка. Значение по умолчанию:
kl. В сочетании с параметромENTITY_NAMEформирует имя класса процессов теста в формате<ENTITY_PREFIX>.<ENTITY_NAME>.ENTITY_HAS_VFSОтмена компоновки стандартной клиентской транспортной библиотеки
vfs::clientс исполняемым файлом теста.CUSTOM_TARGET_PATH <PATH>Полный путь к предварительно собранному исполняемому файлу теста. Параметр используется совместно с параметром
USE_EXTERNAL_BIN.VARIABLES <VAR1> [<VAR2>...]Переменные окружения, передаваемые при запуске исполняемому файлу теста.
ARGUMENTS <ARG1> [<ARG2>...]Параметры запуска, передаваемые при запуске исполняемому файлу теста.
WITH_NETWORKВключение настройки сетевой инфраструктуры для работы теста.
EXTRA_QEMU_FLAGS <FLAG1> [<FLAG2>...]Список дополнительных флагов для запуска QEMU.
TIMEOUT <SEC>Время в секундах, отведенное на запуск и выполнение одного тестового случая. Значение по умолчанию:
60.TEST_TYPE <TYPE>Тип теста. Допустимое значения:
gtest. Обязательный параметр.USE_EXTERNAL_BIN <ON|OFF>Использование предварительно собранного исполняемого файла теста. При установке параметра в значение
ONиспользуется исполняемый файл теста, собранный в другой системе сборки, отличной отCMake. В этом случае функцияgenerate_kos_test()сгенерирует артефакты для этого исполняемого файла. Путь к предварительно собранному исполняемому файлу теста задается в параметреCUSTOM_TARGET_PATH.FILES_TO_COPY <FROM1>:<WHERE1>[;<FROM2>:<WHERE2>;...]Список директорий и файлов, копируемых в генерируемый образ диска
system_hdd.img. Подробнее про образ дискаsystem_hdd.imgсм. в описании генерируемых артефактов функцииgenerate_kos_test(). При генерации образаsystem_hdd.imgпредыдущая версия образа перезаписывается.Пути назначения
WHERE<N>формируются относительно точки монтирования, указанной в параметреTEST_HDD_MOUNTPOINT.Если определена переменная окружения
GTEST_FLAGFILE_PATH, файл с параметрами командной строки для Google Test, указанный в этой переменной, также копируется в образ дискаsystem_hdd.img.TEST_FS_SIZE <SIZE>Размер файловой системы генерируемого образа диска
system_hdd.img. Значение по умолчанию:32M.PREBUILT_HDD_IMAGE_PATH <PATH>Путь к предварительно собранному образу тестового диска, который используется вместо генерации нового образа. При указании этого параметра система сборки копирует предоставленный образ в директорию генерируемых артефактов: <
директория сборки решения>/bin/tests/gtest_<имя цели>_images/hdd.img, гдеимя цели– имя, задаваемое в параметреTARGET_NAME, и использует его при запуске теста.EINIT_GEN_DIR <PATH>Директория размещения сгенерированной для теста инициализирующей программы
Einit. Значение по умолчанию:<директория сборки>/generated/einit_<имя теста>, гдеимя теста–CMake-цель, задаваемая в параметреENTITY_NAME.EXTRA_XDL_DIR <DIR1>[;<DIR2>;...]Дополнительные директории для поиска EDL-, CDL- и IDL-файлов при сборке инициализирующей программы
Einit.PLATFORMS <PLAT>Целевая платформа. Допустимое значение:
qemu. Значение по умолчанию:qemu.EXTRA_TEST_ENTITIES <ENT1> [<ENT2>...]Список дополнительных программ, компонуемых с тестом.
ENABLE_EXTRA_ENT_DEPS <ON|OFF>Включение (
ON) или отключение (OFF) компоновки с тестом дополнительных программ. Параметр используется вместе с параметромEXTRA_TEST_ENTITIES.FILES <FILE1> [<FILE2>...]Полные пути к файлам или директориям для добавления в образ ROMFS. Параметр может использоваться вместе с параметром
FSTAB_FILE, в котором можно указать, куда должен быть смонтирован ROMFS.FSTAB_FILE <FILE>Полный путь к пользовательскому fstab-файлу.
KOS_IMAGE_PATH <PATH>Полное имя предварительно собранного образа решения, который используется вместо сборки нового образа. Если параметр указан, команда
generate_kos_test()сгенерирует недостающие артефакты без генерации образа решенияkos-<платформа>-image-<имя теста>, гдеплатформа– значение параметраPLATFORMS,имя теста– значение параметраENTITY_NAME.BINARY_PATH <PATH>Полный путь к исполняемому файлу готового образа решения, который используется в сочетании с параметром
KOS_IMAGE_PATHдля тестов с предварительно собранными образами.PRESCRIPT <PATH>Путь к скрипту, выполняемого перед запуском теста.
POSTSCRIPT <PATH>Путь к скрипту, выполняемого после завершения теста.
WITHOUT_DETECTING <ON|OFF>Отключение (
ON) или включение (OFF) обнаружения ошибок прохождения теста с использованием регулярного выражения. Значение по умолчанию:ON.TAGS <TAG1> [<TAG2>...]Список тегов теста. Теги могут быть использованы для группировки и фильтрации тестов.
NO_STRIP <ON|OFF>Запрет (
ON) или разрешение (OFF) удаления таблиц символов из исполняемого файла теста в процессе сборки. Значение по умолчанию:ON.INIT_YAML_TEMPLATE_PATH <PATH>Путь к пользовательскому шаблону init.yaml.in, который используется для генерации финального файла
init.yamlтестового образа.SECURITY_PSL_PATH <PATH>Путь к пользовательскому файлу описания политики безопасности решения (
*.psl).PSL_BUILD_TYPE <TYPE>Тип сборки политик безопасности. Допустимые значения:
stub,debug,release. Значение по умолчанию:debug.EXTRA_FILES <FILE1> [<FILE2>...]Список дополнительных файлов, которые включаются в YAML-конфигурацию теста и копируются в тестовое окружение.
TEST_HDD_MOUNTPOINT <PATH>Точка монтирования основного тестового диска в файловой системе тестового образа. Значение по умолчанию:
/kl_test_results.EXTRA_TEST_CONF_YAMLS <PATH1> [<PATH2>...]Список путей к дополнительным YAML-файлам конфигурации теста, которые объединяются с основной конфигурацией.
FS_TYPE <TYPE>Тип файловой системы, используемый при создании образов дисков (таких как
system_hdd.img). Значение по умолчанию:ext2.FSTAB_COPY_DIR <PATH>Целевая директория, в которую копируется сгенерированный fstab-файл. Этот параметр используется совместно с параметром
FSTAB_COPY_TARGET.FSTAB_COPY_TARGET <TARGET_NAME>Имя
CMake-цели, которая выполняет копирование fstab-файла в директорию, указанную в параметреFSTAB_COPY_DIR. Эта цель создается системой сборки для выполнения операции копирования.GINGER_ENABLE <ON|OFF>Включение (
ON) или отключение (OFF) шаблонизатора Ginger.GINGER_DEFINITIONS <DEF1> [<DEF2>...]Набор переменных, используемых при раскрытии PSL-шаблонов Ginger.
GINGER_DUMP_DIR <DIR>Путь к директории, где будут сохранены промежуточные PSL-файлы, полученные из PSL-шаблонов Ginger. Если параметр не указан, то эти промежуточные файлы не сохраняются.
Функция generate_kos_test() дополнительно обрабатывает переменную окружения GTEST_FLAGFILE_PATH, которая задает путь к файлу с параметрами командной строки для Google Test.
Артефакты, генерируемые функцией
При выполнении функции generate_kos_test() в директории сборки решения (обычно это директория build) генерируются артефакты, необходимые для сборки и запуска теста в KasperskyOS.
- Загружаемый образ решения
./bin/tests/gtest_<цель теста>_images/kos-qemu-image<цель теста>, гдецель теста– значение параметраTARGET_NAME. - Скрипт с командами запуска этого решения под QEMU
./bin/tests/gtest_<цель теста>.qemu.sh, гдецель теста– значение параметраTARGET_NAME. - Файл в формате YAML c параметрами теста
./bin/tests/qemu-<цель теста>-test-conf.yaml, гдецель теста– значение параметраTARGET_NAME. - Образ диска
./bin/tests/gtest_<цель теста>_images/system_hdd.img, который содержит файлы, заданные в параметреFILES_TO_COPY. После запуска теста на диск будут записаны:- в корневую директории junit-отчет
output_junit.xml; - в директорию
gcda_treeфайлы данных покрытия в формате GCDA и PROFRAW.
- в корневую директории junit-отчет
- Файлы сборки инициализирующей программы
Einitдля теста в директории ./generated/einit_<имя теста>, гдеимя теста– значение параметраENTITY_NAME. - fstab-файл с именем
./generated/fstab_<имя теста>/fstab, гдеимя теста– значение параметраENTITY_NAME.
Сборка и запуск теста
Чтобы подготовить тест с использованием CMake-библиотеки test_generator, необходимо выполнить следующие действия:
- Указать, используя
CMake-командуcmake_minimum_required(), минимально необходимую версию системы сборкиCMakeдля проекта, содержащего исходные файлы теста. - Подключить к
CMake-проекту, используяCMake-командуinclude(), следующиеCMake-библиотеки:platform,image,test_generator. - Подготовить вручную или, используя команду
generate_edl_file(), сгенерировать EDL-описание теста. - Сгенерировать файл
*.edl.h, используя командуnk_build_edl_files(). - Добавить сгенерированный файл
*.edl.hк проекту, используяCMake-командуadd_executable(). - Добавить к исходной
CMake-цели зависимость отCMake-цели генерации*.edl.h-файла, используя командуadd_dependencies(). - Вызвать команду
generate_kos_test()с требуемыми параметрами.
Сборка и запуск теста выполняются с использованием следующих команд:
cmake -B build -D CMAKE_TOOLCHAIN_FILE="$KOSCEDIR/toolchain/share/toolchain-aarch64-kos.cmake"
cmake -B ./build && cmake --build ./build -t kos-qemu-image-<имя теста>-sim
Где имя теста – значение параметра ENTITY_NAME.
Также запуск теста выполняется с использованием расширения KasperskyOS SDK Extension for Visual Studio Code. Подробнее см. запуск тестов в разделе "Функции расширения".
Пример
# Минимально необходимая версия системы сборки CMake для проекта.
cmake_minimum_required (VERSION 3.25)
# Название CMake-проекта.
project (Test)
# Подключение CMake-библиотеки platform.
include (platform)
# Статическая компоновка исполняемых файлов.
initialize_platform (FORCE_STATIC)
# Подключение CMake-библиотеки image, содержащей скрипты сборки образа решения.
include (platform/image)
# Подключение к проекту CMake-библиотеки test_generator.
include (test-generator/test_generator)
# Генерация EDL-файла с описанием класса процессов.
generate_edl_file(${PROJECT_NAME})
# Создание CMake-цели для генерации .edl.h-файла
# для указанного EDL-файла при помощи компилятора NK.
nk_build_edl_files(${PROJECT_NAME}_edl_files EDL ${EDL_FILE})
# Добавление CMake-цели Test для генерации исполняемого
# файла с тестом, используя файлы с исходным кодом
# теста и сгенерированный .edl.h-файл.
add_executable (${PROJECT_NAME}
<файлы с исходным кодом>
$<TARGET_OBJECTS:${PROJECT_NAME}_edl_files>)
# Добавление зависимости:
# генерация edl.h-файла должна произойти ранее сборки CMake-цели Test.
add_dependencies(${PROJECT_NAME} ${PROJECT_NAME}_edl_files)
# Вызов команды, генерирующей артефакты для сборки gtest-теста.
# На запуск и выполнение одного тестового случая отведено 60 секунд.
generate_kos_test(ENTITY_NAME ${PROJECT_NAME} TEST_TYPE gtest TIMEOUT 60)