Перед чтением этого раздела, рекомендуется ознакомиться с общими принципами создания и выполнения тестов политики безопасности решения на базе KasperskyOS.
В разделе представлено описание функции add_kss_pal_qemu_tests() CMake-библиотеки test_generator:
Синтаксис функции
Функция объявлена в файле, который находится в KasperskyOS Community Edition по пути: toolchain/share/cmake/Modules/test-generator/add_kss_pal_qemu_tests.cmake. Файл доступен только в дистрибутиве KasperskyOS Community Edition для QEMU.
add_kss_pal_qemu_tests(...)
Функция генерирует инициализирующую программу Einit, а также другие артефакты, необходимые для сборки и запуска PAL-теста (также тест на языке PAL) политики безопасности решения на базе KasperskyOS.
Параметры функции
TEST_NAME_PREFIX <PREFIX>Префикс, используемый для создания имен исполняемых файлов PAL-тестов и директорий с артефактами.
Имя каждого исполняемого файла PAL-теста формируется по шаблону: <PREFIX>PalTest<N>, где N – индекс PSL-файла в списке PSL-файлов, заданных через параметр PSL_FILES.
Путь к директории с артефактами формируется по шаблону: <директория сборки программы>/<PREFIX>/pal-test/.
USE_GENERATE_KOS_TEST <ON|OFF>Метод генерации артефактов PAL-теста. При значении ON для каждого PAL-теста используется функция generate_kos_test(), которая генерирует полный комплект артефактов, необходимых для запуска этого теста в KasperskyOS. При значении OFF генерируется только часть артефактов PAL-теста: исполняемый файл, файлы описания инициализации и политики безопасности. Значение по умолчанию: ON.
PSL_FILES <FILE1> [<FILE2>...]Список путей к PSL-файлам (*.psl или *.psl.in). Для каждого PSL-файла из этого списка создается PAL-тест с именем <PREFIX>PalTest<N>, где: PREFIX – префикс, задаваемый в параметре TEST_NAME_PREFIX; N – индекс PSL-файла в списке.
ENTITIES <ENTITY1> [<ENTITY2>...]Список CMake-целей для сборки исполняемых файлов программ, которые необходимы при тестировании политики безопасности решения на базе KasperskyOS. Параметр необходим, если используются шаблоны *.psl.in. Эти программы будут автоматически добавлены в файлы описания инициализации и политики безопасности PAL-теста.
DEPENDS <TARGET1> [<TARGET2>...]Список CMake-целей, в результате выполнения которых IDL-, CDL-, EDL-файлы, от которых зависят PSL-файлы, будут помещены в те директории, где компилятор nk-psl-gen-c сможет их найти. Указание зависимостей гарантирует, что эти CMake-цели будут собраны до начала компиляции PSL-файлов, обеспечивая доступность IDL-, CDL-, EDL-файлов для компилятора nk-psl-gen-c.
CUSTOM_VFS <NAME>Имя CMake-цели пользовательской реализации сервера VFS. При указании этого параметра исполняемые файлы PAL-тестов будут использовать указанную реализацию для доступа к файловой системе. Параметр используется, если значение параметра USE_GENERATE_KOS_TEST равно ON.
FSTAB_FILE <PATH>Путь к пользовательскому fstab-файлу. Параметр используется, если значение параметра USE_GENERATE_KOS_TEST равно ON.
ENV_VARS <VAR1=VAL1> [<VAR2=VAL2>...]Список переменных окружения, передаваемый исполняемым файлам PAL-тестов при запуске. Параметр используется, если значение параметра USE_GENERATE_KOS_TEST равно ON.
GINGER_ENABLE <ON|OFF>Включение (ON) или отключение (OFF) шаблонизатора Ginger.
GINGER_DEFINITIONS <DEF1> [<DEF2>...]Набор переменных, используемых при раскрытии PSL-шаблонов Ginger.
GINGER_DUMP_DIR <DIR>Путь к директории, где будут сохранены промежуточные PSL-файлы, полученные из PSL-шаблонов Ginger. Если параметр не указан, то эти промежуточные файлы не сохраняются.
TAGS <TAG1> [<TAG2>...]Список тегов для PAL-тестов. Теги могут быть использованы для группировки и фильтрации PAL-тестов.
Артефакты, генерируемые функцией
При выполнении функции add_kss_pal_qemu_tests() генерируются артефакты, необходимые для сборки и запуска PAL-теста в KasperskyOS. Артефакты генерируются в следующих директориях:
-B команды cmake (обычно это директория build). В файлах сборки CMakeList.txt обозначается переменной ${CMAKE_BINARY_DIR}.имя директории сборки решения>/<имя директории с исходным кодом программы>. Например, поддиректорией сборки программы Einit будет директория build/einit. В файлах сборки CMakeList.txt обозначается переменной ${CMAKE_CURRENT_BINARY_DIR}.В директории сборки решения генерируются следующие артефакты:
./bin/tests/gtest_<имя PAL-теста>.qemu.sh../bin/tests/qemu-<имя PAL-теста>-test-conf.yaml../generated/einit_<имя PAL-теста>/kos-qemu-image-<имя PAL-теста>.Einit для PAL-теста в директории ./generated/einit_<имя PAL-теста>/../generated/fstab_<имя PAL-теста>/fstab.В директории сборки программы:
./<имя PAL-теста>-images/system_hdd.img. После запуска PAL-теста на диск будут записан junit-отчет output_junit.xml../<имя PAL-теста>../pal-test/<имя PAL-теста>.edl../pal-test/<имя PAL-теста>.edl.h../pal-test/security.psl.audit.c;./pal-test/security.psl.test.cpp;/pal-test/security.psl.ksm.cpp.Сборка и запуск PAL-теста
Сборка и запуск PAL-теста описан в шаге 4 тестовой процедуры раздела "Создание и выполнение тестов политики безопасности решения на базе KasperskyOS".
Также сборку и запуск PAL-тестов можно выполнить с использованием расширения KasperskyOS SDK Extension for Visual Studio Code. Подробнее см. запуск тестов политик безопасности решения раздела "Функции расширения".
Пример
# Минимально необходимая версия системы сборки CMake для проекта.
cmake_minimum_required (VERSION 3.25)
# Название CMake-проекта.
project (pal_tests)
# Подключение CMake-библиотеки platform.
include (platform)
# Статическая компоновка исполняемых файлов.
initialize_platform (FORCE_STATIC)
# Подключение библиотеки CMake, содержащей скрипты сборки образа решения.
include (platform/image)
# Подключение CMake-библиотеки nk для работы с компилятором NK (nk-gen-c).
include (platform/nk)
# Подключение к проекту модуля add_kss_pal_qemu_tests CMake-библиотеки test_generator.
include (test-generator/add_kss_pal_qemu_tests)
# Создание CMake-цели для генерации .idl.h-файла
# для указанного IDL-файла при помощи компилятора NK.
nk_build_idl_files (${PROJECT_NAME}_idl_files
NK_MODULE pal_tests
IDL "${NK_RESOURCES}/pal_tests/${IDL_FILE}")
# Создание CMake-цели для генерации .edl.h-файла
# для указанного EDL-файла при помощи компилятора NK.
nk_build_edl_files (${PROJECT_NAME}_edl_files
DEPENDS ${PROJECT_NAME}_idl_files
NK_MODULE pal_tests
EDL "${NK_RESOURCES}/pal_tests/${EDL_FILE})
add_kss_pal_qemu_tests (
PSL_FILES
src/security.psl
DEPENDS
${PROJECT_NAME}_edl_files)
Подробнее см. пример pal_tests, который расположен в директории examples из состава KasperskyOS Community Edition.