SlideShare a Scribd company logo
Инструменты тестирования
ядра Linux
Денис Ефремов <efremov@ispras.ru>
Алексей Хорошилов <khoroshilov@ispras.ru>
Отдельные тесты (модули/приложения)
• Могут быть найдены:
• grep --include='Kconfig*’ 
-nre 'SELFTEST|BENCHMARK’
• Нет общей структуры
• Нет тестового протокола
• Результаты не структурированы
• Не/Зависят от наличия аппаратуры
• Тест начинается в момент загрузки
• Во время инициализации ядра для
встроенных
• Пользовательское пространство
(fault-injection, nvdimm, radix-tree,
scatterlist, vsock) в tools/testing
KUnit (модули*)
• Фреймворк юнит тестов для ядра Linux
• Разработан Brendan Higgings (Google)
• Включен в ядро с версии v5.5
• ./tools/testing/kunit/kunit.py run
• Предназначен для небольших, изолированных тестов
• Но не ограничен ими
• Целевая архитектура – User-Mode Linux (UML) (-KASAN)
• Используется Android в kernel networking tests
• Особенности фреймворка:
• Общая инфраструктура для юнит тестов
• Объединение тестов в группы
• Параметризация тестов
• Мокирование интерфейсов
• Результаты (TAP protocol):
• Лог ядра (dmesg)
• Debugfs /sys/kernel/debug/kunit/<test-suite>
• fgrep --include='Kconfig*' -nre KUNIT_TEST
• KUNIT_ALL_TESTS
KTF (Kernel Test Framework) (гибридные)
• Фреймворк юнит тестов для ядра Linux от Oracle
• На текущий момент не включен в ядро
• Netlink для kernel<->userspace взаимодействия
• Kprobes/Kretprobes для перехвата внутренних API
• Автоматизация доступа к внутренним символам ядра
• Особенности фреймворка :
• Общая инфраструктура для юнит тестов
• Объединение тестов в группы (test suites)
• Параметризация тестов (fixtures, contexts)
• Мокирование интерфейсов
• Упрощенное покрытие
• Гибридные тесты
• Результаты (протокол TAP):
• Через сокеты netlink
• Debugfs /sys/kernel/debug/ktf/results/
• Не существует публичного тестового набора
Kselftest
(приложения регрессионные/интеграционные тесты)
• tools/testing/selftests (first in v3.16 release)
• Сборка->Установка->Загрузка->Запуск тестов
• Предназначены для базового тестирования
• Менее чем за 20 min
• make kselftest
• Новые модули включаются в ядра с тестами
• wireguard, landlock, SafeSetSID, syscall_user_dispatch, SGX…
• LKFT (Linaro) версии kernel<->tests:
• linux-next использует selftest из linux-next
• mainline использует selftest из mainline
• Latest stable использует selftest из latest stable
• Остальные LTS используют selftest из latest stable
Ktest (тестирование сборки/загрузки)
• Автоматизация сборки, установки, загрузки и тестирования
• В ядре с 2010 (2.6.38) (tools/testing/ktest)
• Разрабатывается Steven Rostedt
• Тестирование сборки:
• Randconfig (config bisecting)
• Проверка патчей из листов рассылок, git
• Тестирование загрузки:
• Проверяет лог ядра
• Возможно выполнение тестов после
• Bisecting и тестирование патчсетов
• Требования:
• Хост и целевая машины (hardware/virtual)
• SSH + root доступ к целевой машине
• Удаленный контроль питания целевой машины
Известные тестовые наборы (приложения)
• Linux Test Project (LTP) – регрессионные, конформанс тесты.
Поддерживается совместно многими компаниями. Используется
всеми CI системами. Пример отчёта
• Linux Kernel Performance tests (LKP) – тесты виртуальной памяти,
подсистемы I/O, планировщика процессов, файловых систем, сети, и
др. Поддерживается Intel, используется 0-Day CI. Пример отчёта
• xfstests – набор регрессионных тестов для большинства файловых
систем Linux
• syzkaller-repros – репродюсеры syzkaller
• KVM unit tests – небольшие гостевые ОС для тестов гипервизора
• …
Вопросы?

More Related Content

What's hot

Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Yandex
 
Automation Compliance Checks
Automation Compliance ChecksAutomation Compliance Checks
Automation Compliance Checks
Ekaterina Pukhareva
 
Автоматизация отладки в windbg
Автоматизация отладки в windbgАвтоматизация отладки в windbg
Автоматизация отладки в windbg
Positive Hack Days
 
Operating Systems Hardening
Operating Systems HardeningOperating Systems Hardening
Operating Systems HardeningVasily Sartakov
 
Автоматизированное тестирование - от сложного к простому, или Запускаем автот...
Автоматизированное тестирование - от сложного к простому, или Запускаем автот...Автоматизированное тестирование - от сложного к простому, или Запускаем автот...
Автоматизированное тестирование - от сложного к простому, или Запускаем автот...
SQALab
 
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов НиколайnoBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
Ontico
 
Обзор Linux Control Groups
Обзор Linux Control GroupsОбзор Linux Control Groups
Обзор Linux Control Groups
OSLL
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"
Yandex
 
Платформа для автоматического тестирования Erlang проектов на примере UserGat...
Платформа для автоматического тестирования Erlang проектов на примере UserGat...Платформа для автоматического тестирования Erlang проектов на примере UserGat...
Платформа для автоматического тестирования Erlang проектов на примере UserGat...DevDay
 
Командная строка Unix
Командная строка UnixКомандная строка Unix
Командная строка UnixYandex
 
Григорий Демченко — Асинхронное программирование и сопрограммы
Григорий Демченко — Асинхронное программирование и сопрограммыГригорий Демченко — Асинхронное программирование и сопрограммы
Григорий Демченко — Асинхронное программирование и сопрограммы
Yandex
 
Flask как хорошее решение для веб проекта
Flask как хорошее решение для веб проектаFlask как хорошее решение для веб проекта
Flask как хорошее решение для веб проекта
Python Meetup
 
Maven 3 : уличная магия
Maven 3 : уличная магияMaven 3 : уличная магия
Maven 3 : уличная магия
Aleksey Solntsev
 
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Автоматизация тестирования клиентской производительности / Николай Лавлинский...Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Ontico
 
системы сборок проектов
системы сборок проектовсистемы сборок проектов
системы сборок проектов
Romero78
 
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
Ontico
 
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Ontico
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктуройdddpaul
 

What's hot (20)

Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
 
Automation Compliance Checks
Automation Compliance ChecksAutomation Compliance Checks
Automation Compliance Checks
 
Автоматизация отладки в windbg
Автоматизация отладки в windbgАвтоматизация отладки в windbg
Автоматизация отладки в windbg
 
Operating Systems Hardening
Operating Systems HardeningOperating Systems Hardening
Operating Systems Hardening
 
Presentation_1369906540313
Presentation_1369906540313Presentation_1369906540313
Presentation_1369906540313
 
Автоматизированное тестирование - от сложного к простому, или Запускаем автот...
Автоматизированное тестирование - от сложного к простому, или Запускаем автот...Автоматизированное тестирование - от сложного к простому, или Запускаем автот...
Автоматизированное тестирование - от сложного к простому, или Запускаем автот...
 
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов НиколайnoBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
 
Обзор Linux Control Groups
Обзор Linux Control GroupsОбзор Linux Control Groups
Обзор Linux Control Groups
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"
 
Платформа для автоматического тестирования Erlang проектов на примере UserGat...
Платформа для автоматического тестирования Erlang проектов на примере UserGat...Платформа для автоматического тестирования Erlang проектов на примере UserGat...
Платформа для автоматического тестирования Erlang проектов на примере UserGat...
 
Командная строка Unix
Командная строка UnixКомандная строка Unix
Командная строка Unix
 
Григорий Демченко — Асинхронное программирование и сопрограммы
Григорий Демченко — Асинхронное программирование и сопрограммыГригорий Демченко — Асинхронное программирование и сопрограммы
Григорий Демченко — Асинхронное программирование и сопрограммы
 
Flask как хорошее решение для веб проекта
Flask как хорошее решение для веб проектаFlask как хорошее решение для веб проекта
Flask как хорошее решение для веб проекта
 
Maven 3 : уличная магия
Maven 3 : уличная магияMaven 3 : уличная магия
Maven 3 : уличная магия
 
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Автоматизация тестирования клиентской производительности / Николай Лавлинский...Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
 
системы сборок проектов
системы сборок проектовсистемы сборок проектов
системы сборок проектов
 
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
 
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктурой
 
Continuousdelivery
ContinuousdeliveryContinuousdelivery
Continuousdelivery
 

Similar to Инструменты тестирования ядра Linux

TMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeTMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: Genode
Iosif Itkin
 
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Ontico
 
Как мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows DockerКак мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows Docker
Positive Hack Days
 
День 1: Автоматизированное тестирование: Введение
 День 1: Автоматизированное тестирование: Введение День 1: Автоматизированное тестирование: Введение
День 1: Автоматизированное тестирование: Введение
Oleg Popov
 
Linuxvirt seminar-csc-2015
Linuxvirt seminar-csc-2015Linuxvirt seminar-csc-2015
Linuxvirt seminar-csc-2015
OSLL
 
Jouravski kickstart1
Jouravski kickstart1Jouravski kickstart1
Jouravski kickstart1kuchinskaya
 
Практика разработки веб-серверов на Rust
Практика разработки веб-серверов на RustПрактика разработки веб-серверов на Rust
Практика разработки веб-серверов на Rust
Michael Pankov
 
Apache maven in java projects
Apache maven in java projectsApache maven in java projects
Apache maven in java projects
Asya Dudnik
 
Обзор Continuous integration инструментов
Обзор Continuous integration инструментовОбзор Continuous integration инструментов
Обзор Continuous integration инструментов
Vitalii Morvaniuk
 
Операционная система GNU/Linux: устройство и функционирование
Операционная система GNU/Linux: устройство и функционированиеОперационная система GNU/Linux: устройство и функционирование
Операционная система GNU/Linux: устройство и функционированиеyaevents
 
Процессы разработки в Яндексе
Процессы разработки в ЯндексеПроцессы разработки в Яндексе
Процессы разработки в Яндексе
Andrey Kazarinov
 
Автоматизация в тестировании инфраструктуры
Автоматизация в тестировании инфраструктурыАвтоматизация в тестировании инфраструктуры
Автоматизация в тестировании инфраструктуры
SQALab
 
Александр Ярулин - Автоматизация тестирования с xUnit
Александр Ярулин - Автоматизация тестирования с xUnitАлександр Ярулин - Автоматизация тестирования с xUnit
Александр Ярулин - Автоматизация тестирования с xUnitYandex
 
Тестирование серверной конфигурации
Тестирование серверной конфигурацииТестирование серверной конфигурации
Тестирование серверной конфигурации
Timur Batyrshin
 
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
Provectus
 
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...DrupalCamp MSK
 
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in production
Anatoly Popov
 
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
Stfalcon Meetups
 
Релиз-инжениринг Mail.ru. Взгляд изнутри. Максим Глеков, Mail.Ru Group, Москва
 Релиз-инжениринг Mail.ru. Взгляд изнутри. Максим Глеков, Mail.Ru Group, Москва  Релиз-инжениринг Mail.ru. Взгляд изнутри. Максим Глеков, Mail.Ru Group, Москва
Релиз-инжениринг Mail.ru. Взгляд изнутри. Максим Глеков, Mail.Ru Group, Москва
it-people
 

Similar to Инструменты тестирования ядра Linux (20)

TMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeTMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: Genode
 
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
 
Как мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows DockerКак мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows Docker
 
День 1: Автоматизированное тестирование: Введение
 День 1: Автоматизированное тестирование: Введение День 1: Автоматизированное тестирование: Введение
День 1: Автоматизированное тестирование: Введение
 
Linuxvirt seminar-csc-2015
Linuxvirt seminar-csc-2015Linuxvirt seminar-csc-2015
Linuxvirt seminar-csc-2015
 
Jouravski kickstart1
Jouravski kickstart1Jouravski kickstart1
Jouravski kickstart1
 
Практика разработки веб-серверов на Rust
Практика разработки веб-серверов на RustПрактика разработки веб-серверов на Rust
Практика разработки веб-серверов на Rust
 
Dev collaboration
Dev collaborationDev collaboration
Dev collaboration
 
Apache maven in java projects
Apache maven in java projectsApache maven in java projects
Apache maven in java projects
 
Обзор Continuous integration инструментов
Обзор Continuous integration инструментовОбзор Continuous integration инструментов
Обзор Continuous integration инструментов
 
Операционная система GNU/Linux: устройство и функционирование
Операционная система GNU/Linux: устройство и функционированиеОперационная система GNU/Linux: устройство и функционирование
Операционная система GNU/Linux: устройство и функционирование
 
Процессы разработки в Яндексе
Процессы разработки в ЯндексеПроцессы разработки в Яндексе
Процессы разработки в Яндексе
 
Автоматизация в тестировании инфраструктуры
Автоматизация в тестировании инфраструктурыАвтоматизация в тестировании инфраструктуры
Автоматизация в тестировании инфраструктуры
 
Александр Ярулин - Автоматизация тестирования с xUnit
Александр Ярулин - Автоматизация тестирования с xUnitАлександр Ярулин - Автоматизация тестирования с xUnit
Александр Ярулин - Автоматизация тестирования с xUnit
 
Тестирование серверной конфигурации
Тестирование серверной конфигурацииТестирование серверной конфигурации
Тестирование серверной конфигурации
 
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
 
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
 
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in production
 
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
 
Релиз-инжениринг Mail.ru. Взгляд изнутри. Максим Глеков, Mail.Ru Group, Москва
 Релиз-инжениринг Mail.ru. Взгляд изнутри. Максим Глеков, Mail.Ru Group, Москва  Релиз-инжениринг Mail.ru. Взгляд изнутри. Максим Глеков, Mail.Ru Group, Москва
Релиз-инжениринг Mail.ru. Взгляд изнутри. Максим Глеков, Mail.Ru Group, Москва
 

More from Denis Efremov

CVEhound
CVEhoundCVEhound
CVEhound
Denis Efremov
 
Deductive verification of unmodified Linux kernel library functions
Deductive verification of unmodified Linux kernel library functionsDeductive verification of unmodified Linux kernel library functions
Deductive verification of unmodified Linux kernel library functions
Denis Efremov
 
Health Insurance Support System (Blockchain Based)
Health Insurance Support System (Blockchain Based)Health Insurance Support System (Blockchain Based)
Health Insurance Support System (Blockchain Based)
Denis Efremov
 
Formal Verification of a Linux Security Module
Formal Verification of a Linux Security ModuleFormal Verification of a Linux Security Module
Formal Verification of a Linux Security Module
Denis Efremov
 
Practical Language for Extracting Data from Source Codes and Preparing Them f...
Practical Language for Extracting Data from Source Codes and Preparing Them f...Practical Language for Extracting Data from Source Codes and Preparing Them f...
Practical Language for Extracting Data from Source Codes and Preparing Them f...
Denis Efremov
 
Formal verification of C code
Formal verification of C codeFormal verification of C code
Formal verification of C code
Denis Efremov
 
Automation of rule construction for Approof
Automation of rule construction for ApproofAutomation of rule construction for Approof
Automation of rule construction for Approof
Denis Efremov
 
How to prove programs
How to prove programsHow to prove programs
How to prove programs
Denis Efremov
 

More from Denis Efremov (8)

CVEhound
CVEhoundCVEhound
CVEhound
 
Deductive verification of unmodified Linux kernel library functions
Deductive verification of unmodified Linux kernel library functionsDeductive verification of unmodified Linux kernel library functions
Deductive verification of unmodified Linux kernel library functions
 
Health Insurance Support System (Blockchain Based)
Health Insurance Support System (Blockchain Based)Health Insurance Support System (Blockchain Based)
Health Insurance Support System (Blockchain Based)
 
Formal Verification of a Linux Security Module
Formal Verification of a Linux Security ModuleFormal Verification of a Linux Security Module
Formal Verification of a Linux Security Module
 
Practical Language for Extracting Data from Source Codes and Preparing Them f...
Practical Language for Extracting Data from Source Codes and Preparing Them f...Practical Language for Extracting Data from Source Codes and Preparing Them f...
Practical Language for Extracting Data from Source Codes and Preparing Them f...
 
Formal verification of C code
Formal verification of C codeFormal verification of C code
Formal verification of C code
 
Automation of rule construction for Approof
Automation of rule construction for ApproofAutomation of rule construction for Approof
Automation of rule construction for Approof
 
How to prove programs
How to prove programsHow to prove programs
How to prove programs
 

Инструменты тестирования ядра Linux

  • 1. Инструменты тестирования ядра Linux Денис Ефремов <efremov@ispras.ru> Алексей Хорошилов <khoroshilov@ispras.ru>
  • 2. Отдельные тесты (модули/приложения) • Могут быть найдены: • grep --include='Kconfig*’ -nre 'SELFTEST|BENCHMARK’ • Нет общей структуры • Нет тестового протокола • Результаты не структурированы • Не/Зависят от наличия аппаратуры • Тест начинается в момент загрузки • Во время инициализации ядра для встроенных • Пользовательское пространство (fault-injection, nvdimm, radix-tree, scatterlist, vsock) в tools/testing
  • 3. KUnit (модули*) • Фреймворк юнит тестов для ядра Linux • Разработан Brendan Higgings (Google) • Включен в ядро с версии v5.5 • ./tools/testing/kunit/kunit.py run • Предназначен для небольших, изолированных тестов • Но не ограничен ими • Целевая архитектура – User-Mode Linux (UML) (-KASAN) • Используется Android в kernel networking tests • Особенности фреймворка: • Общая инфраструктура для юнит тестов • Объединение тестов в группы • Параметризация тестов • Мокирование интерфейсов • Результаты (TAP protocol): • Лог ядра (dmesg) • Debugfs /sys/kernel/debug/kunit/<test-suite> • fgrep --include='Kconfig*' -nre KUNIT_TEST • KUNIT_ALL_TESTS
  • 4. KTF (Kernel Test Framework) (гибридные) • Фреймворк юнит тестов для ядра Linux от Oracle • На текущий момент не включен в ядро • Netlink для kernel<->userspace взаимодействия • Kprobes/Kretprobes для перехвата внутренних API • Автоматизация доступа к внутренним символам ядра • Особенности фреймворка : • Общая инфраструктура для юнит тестов • Объединение тестов в группы (test suites) • Параметризация тестов (fixtures, contexts) • Мокирование интерфейсов • Упрощенное покрытие • Гибридные тесты • Результаты (протокол TAP): • Через сокеты netlink • Debugfs /sys/kernel/debug/ktf/results/ • Не существует публичного тестового набора
  • 5. Kselftest (приложения регрессионные/интеграционные тесты) • tools/testing/selftests (first in v3.16 release) • Сборка->Установка->Загрузка->Запуск тестов • Предназначены для базового тестирования • Менее чем за 20 min • make kselftest • Новые модули включаются в ядра с тестами • wireguard, landlock, SafeSetSID, syscall_user_dispatch, SGX… • LKFT (Linaro) версии kernel<->tests: • linux-next использует selftest из linux-next • mainline использует selftest из mainline • Latest stable использует selftest из latest stable • Остальные LTS используют selftest из latest stable
  • 6. Ktest (тестирование сборки/загрузки) • Автоматизация сборки, установки, загрузки и тестирования • В ядре с 2010 (2.6.38) (tools/testing/ktest) • Разрабатывается Steven Rostedt • Тестирование сборки: • Randconfig (config bisecting) • Проверка патчей из листов рассылок, git • Тестирование загрузки: • Проверяет лог ядра • Возможно выполнение тестов после • Bisecting и тестирование патчсетов • Требования: • Хост и целевая машины (hardware/virtual) • SSH + root доступ к целевой машине • Удаленный контроль питания целевой машины
  • 7. Известные тестовые наборы (приложения) • Linux Test Project (LTP) – регрессионные, конформанс тесты. Поддерживается совместно многими компаниями. Используется всеми CI системами. Пример отчёта • Linux Kernel Performance tests (LKP) – тесты виртуальной памяти, подсистемы I/O, планировщика процессов, файловых систем, сети, и др. Поддерживается Intel, используется 0-Day CI. Пример отчёта • xfstests – набор регрессионных тестов для большинства файловых систем Linux • syzkaller-repros – репродюсеры syzkaller • KVM unit tests – небольшие гостевые ОС для тестов гипервизора • …