generate_kos_test()

12 января 2026

ID 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.
  • Файлы сборки инициализирующей программы Einit для теста в директории ./generated/einit_<имя теста>, где имя теста – значение параметра ENTITY_NAME.
  • fstab-файл с именем ./generated/fstab_<имя теста>/fstab, где имя теста – значение параметра ENTITY_NAME.

Сборка и запуск теста

Чтобы подготовить тест с использованием CMake-библиотеки test_generator, необходимо выполнить следующие действия:

  1. Указать, используя CMake-команду cmake_minimum_required(), минимально необходимую версию системы сборки CMake для проекта, содержащего исходные файлы теста.
  2. Подключить к CMake-проекту, используя CMake-команду include(), следующие CMake-библиотеки: platform, image, test_generator.
  3. Подготовить вручную или, используя команду generate_edl_file(), сгенерировать EDL-описание теста.
  4. Сгенерировать файл *.edl.h, используя команду nk_build_edl_files().
  5. Добавить сгенерированный файл *.edl.h к проекту, используя CMake-команду add_executable().
  6. Добавить к исходной CMake-цели зависимость от CMake-цели генерации *.edl.h-файла, используя команду add_dependencies().
  7. Вызвать команду 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)

Вам помогла эта статья?
Что нам нужно улучшить?
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!