В разделе представлено описание функции 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../bin/tests/gtest_<цель теста>.qemu.sh, где цель теста – значение параметра TARGET_NAME../bin/tests/qemu-<цель теста>-test-conf.yaml, где цель теста – значение параметра TARGET_NAME../bin/tests/gtest_<цель теста>_images/system_hdd.img, который содержит файлы, заданные в параметре FILES_TO_COPY. После запуска теста на диск будут записаны:output_junit.xml;gcda_tree файлы данных покрытия в формате GCDA и PROFRAW.Einit для теста в директории ./generated/einit_<имя теста>, где имя теста – значение параметра ENTITY_NAME../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)
В начало