Alt-test

Материал из ALT Linux Wiki

alt-test — инфраструктура тестирования ALT Linux на базе Tapper.

Программа распространяется под условиями лицензии GPLv3.

Использование:

alt-test [параметры] [тест1 ...]
Параметр Описание
-l Показать список доступных модулей тестирования
-h Справка по использованию
-v Показывать полный ход тестирования
--version Версия программы

Тесты расположены в /usr/lib/alt-test.

Примечание: С программой тестирования поставляются два теста: altlinux и selftest. Первый позволяет проверить, является ли текущая система дистрибутивом ALT Linux, вторая — показать заведомо непроходимые тесты


Пример запуска тестирования

alt-test altlinux
alt-test -v selftest

Написание тестов

Файл теста имеет расширение .t и является скриптом на shell. Начинается со строки указания интерпретатора:

#!/bin/sh

Затем подключаются функции проверки:

. alt-test-functions

После этого следует одна или несколько проверок и заканчивается файл описания теста вызовом функции

test_end

Пример

#!/bin/sh

. alt-test-functions

test_file /etc/hosts
test_exec ls
test_package coreutils

test_end

Проверки

Проверка Описание
test_file <имя файла> [<описание при неудаче>] проверить, существует ли файл
test_exec <имя программы> [<описание при неудаче>] проверить, существует ли исполняемая программа и доступна ли она для запуска
test_package <имя пакета> [<описание при неудаче>] проверить, установлен ли пакет в системе или существует на диске

Переменные среды окружения

Переменная Описание
TESTED_PACKAGE_SOURCE Путь к файлу с образом ISO, где проверять наличие пакетов  с версии 1.1.0 

Полезные функции

Функция Описание
get_package_version <имя пакета> Получить версию и релиз установленного или существующего на диске пакета  с версии 1.1.0 

Универсальная проверка

<вызов программы>
ok $? "<описание при неудаче>"

Комментарии в выводе

append_comment "Комментарий"

Советы и секреты

Потоковая обработка

Так как результаты тестов накапливаются в переменной $TAP, то при потоковой обработке избегайте использования subshell (например, в конвейерах):

Неправильно:

find /usr/share/applications -name \*.desktop | while read desktop_file; do
	test_desktop_l10n "$desktop_file"
done

Правильно:

out="$(mktemp)"
find /usr/share/applications -name \*.desktop > $out
while read -r desktop_file; do
	test_desktop_l10n "$desktop_file"
done < $out
rm -f $out