mariadb-test Справочные файлы
Фреймворк mariadb-test использует множество других файлов, влияющих на процесс тестирования, помимо файлов тестов и результатов.
disabled.def файл
Этот файл можно использовать для временного отключения определённых тестов. Например, если один тест завершается ошибкой, и вы работаете над ним, вы можете добавить в набор тестов изменения, отключающие этот тест, чтобы другие тесты не были нарушены этой ошибкой.
В файле содержатся имена тестов и комментарий (объясняющий причину отключения теста), разделенные двоеточием. Строки, начинающиеся с символа решётки (#), игнорируются. Типичный disabled.def может выглядеть так (обратите внимание, что решётка посередине строки не начинает комментарий):
# List of disabled tests # test name : comment rpl_redirect : Fails due to bug#49978 events_time_zone : need to fix the timing
Во время тестирования mtr будет выводить отключённые тесты так:
... rpl.rpl_redirect [ disabled ] Fails due to bug#49978 rpl.events_time_zone [ disabled ] need to fix the timing ...
Этот файл должен находиться в директории набора тестов.
suite.opt файл
Этот файл перечисляет параметры сервера, которые будут добавлены в командную строку mariadbd для каждого теста этого набора. Он может ссылаться на переменные окружения с помощью $NAME синтаксиса. Символы оболочки должны быть заключены в кавычки. Например
--plugin-load=$AUTH_PAM_SO --max-connections=40 --net_read_timeout=5 "--replicate-rewrite-db=test->rewrite"
Обратите внимание, что параметры можно поместить либо в одну строку, либо на отдельные строки. Хорошей практикой является использование префикса --loose- для имени параметра, если сервер может или не может распознать параметр в зависимости от конфигурации. Неизвестный параметр в файле .opt помешает запуску сервера и тест будет прерван.
Этот файл должен находиться в директории набора тестов.
другие *.opt файлы
Для каждого файла теста или файла включения somefile.test или somefile.inc, mtr будет искать somefile.opt, somefile-master.opt и somefile-slave.opt. Эти файлы имеют точно такой же синтаксис, как suite.opt выше. Параметры из этих файлов также будут добавлены в командную строку сервера (все серверы, запущенные для этого теста, только мастер или только раб соответственно) для всех затронутых тестов, например, для всех тестов, которые включают somefile.inc напрямую или косвенно.
Типичный пример использования include/have_blackhole.inc и include/have_blackhole.opt. Последний содержит необходимые параметры командной строки для загрузки хранилища Blackhole, в то время как первый проверяет, что движок действительно был загружен. Любой тест, которому нужен движок Blackhole, должен только начинаться с source include/have_blackhole.inc; и движок будет автоматически загружен для теста.
my.cnf файл
Это не my.cnf файл, который будут использовать тесты из этого набора, а скорее шаблон для него. Позже он будет преобразован в фактический my.cnf. Если набор тестов не содержит шаблон my.cnf , будет использоваться шаблон по умолчанию — include/default_my.cnf — или suite/rpl/my.cnf если тест включает master-slave.inc (это одна из немногих частей старой магии MySQL mysql-test-run , которую мы ещё не удалили). Обычно шаблон набора тестов не будет содержать полную конфигурацию сервера, а скорее начнётся с
!include include/default_my.cnf
и затем добавит необходимые изменения.
Синтаксис шаблона my.cnf такой же, как у обычного файла my.cnf , с некоторыми расширениями и предположениями. Они следующие:
- Для любой группы с именем
[mysqld.N], где N — число, mtr запустит одинmysqldпроцесс. Обычно требуется только группа[mysqld.1]и группа[mysqld.2]для тестов репликации.
- Могут быть группы с нестандартными именами (
[foo],[bar], любые), не используемыеmysqld. Файлыsuite.pm(см. ниже) могут использовать их каким-то образом.
- Значения могут ссылаться друг на друга с помощью синтаксиса
@groupname.optionname— эти ссылки будут расширены по мере необходимости. Например,[mysqld.2] master-port= @mysqld.1.port
- он устанавливает значение
master-portв группе[mysqld.2]в значениеportв группе[mysqld.1].
- Имя параметра может начинаться с символа решётки
#. В результирующемmy.cnfфайле это будет выглядеть как комментарий, но на него всё ещё можно ссылаться. Например:
[example] #location = localhost:@mysqld.1.port bar = server:@example.#location/data
- Есть группа
[ENV]. Она устанавливает значения для переменных окружения. Например,[ENV] MASTER_MYPORT = @mysqld.1.port
- Также можно ссылаться на значения переменных окружения через эту группу:
[mysqld.1] user = @ENV.LOGNAME
- Есть группа
[OPT]. Она позволяет вызывать функции и генерировать значения. В настоящее время она содержит только один параметр —@OPT.port. Каждый раз, когда на этот параметр ссылаются в другой группе шаблонаmy.cnf, генерируется новое уникальное значение порта. Оно не будет совпадать ни с каким другим значением порта, используемым в этой сессии тестирования. Например,[ENV] SPHINXSEARCH_PORT = @OPT.port
Этот файл должен находиться в директории набора тестов.
другие *.cnf файлы
Для каждого файла теста somefile.test (но не для файлов включения), mtr будет искать файл somefile.cnf. Если такой файл существует, он будет использоваться в качестве шаблона вместо набора тестов my.cnf или шаблона по умолчанию include/default_my.cnf.
combinations файл
Файл combinations определяет несколько наборов альтернативных конфигураций, и каждый тест в этом наборе будет выполняться несколько раз — один раз для каждой конфигурации. Это можно использовать, например, для выполнения всех тестов репликации в наборе rpl для всех трёх режимов формата binlog (row, statement и mixed). Соответствующий файл combinations будет выглядеть следующим образом:
[row] binlog-format=row [stmt] binlog-format=statement [mix] binlog-format=mixed
Он использует синтаксис файла my.cnf с группами (где имена групп определяют имена комбинаций) и параметрами. Но, несмотря на сходство, это не шаблон my.cnf , и он не может использовать расширения шаблонов. Вместо этого параметры из файла combinations добавляются в командную строку сервера. В этом отношении файл комбинаций ближе к файлу suite.opt . И также, как и он, файл комбинаций может использовать переменные окружения с помощью синтаксиса $NAME.
Не все тесты обязательно будут выполняться для всех комбинаций. Конкретный тест может потребовать выполнения только в одной определённой комбинации. Например, в репликации, если тест может выполняться только с форматом binlog row, у него будет --binlog-format=row в одном из файлов .opt . В этом случае mtr заметит, что в командной строке сервера уже есть параметр, соответствующий одной из комбинаций, и пропустит все остальные комбинации для этого конкретного теста.
Файл combinations должен находиться в директории набора тестов.
другие *.combinations файлы
Также как и с файлами *.opt, mtr будет использовать файл somefile.combinations для любого somefile.test и somefile.inc , который используется при тестировании. Эти файлы имеют точно такой же формат, что и файл набора тестов combinations.
Это может привести к множеству файлов комбинаций, влияющих на один файл теста (если тест включает два файла .inc , и у обоих есть соответствующие файлы .combinations ). В этом случае mtr выполнит тест для всех комбинаций комбинаций из обоих файлов. Например, в MariaDB 5.5, rpl_init.inc добавляет комбинации для row/statement/mixed, а have_innodb.inc добавляет комбинации для innodb/xtradb. Таким образом, любой тест репликации, использующий innodb, будет выполнен шесть раз.
suite.pm файл
Этот (необязательный) файл — модуль Perl. Он должен объявлять пакет, который наследует от My::Suite.
Этот файл должен обычно заканчиваться bless {} — то есть он должен возвращать объект этого класса. Он также может возвращать строку — в этом случае все тесты в наборе будут пропущены, а эта строка будет напечатана как причина (например, "PBXT engine wasn't compiled").
Класс набора тестов может определять следующие методы:
-
config_files() -
is_default() -
list_cases() -
servers() -
skip_combinations() -
start_test()
Метод config_files() возвращает список дополнительных файлов конфигурации (помимо my.cnf), которые необходимы этому набору для создания. Для каждого файла он указывает функцию, которая создаст его, когда получит объект My::Config . Например:
sub config_files {(
'config.ini' => \&write_ini,
'new.conf' => \&do_new
)}
Метод servers() возвращает список процессов, которые необходимо запустить для этого набора. Процесс задаётся как пара [regex, hash]. Регулярное выражение должно соответствовать разделу в шаблоне my.cnf (например, qr/mysqld\./ соответствует всем mysqld процессам), хэш содержит эти параметры:
SORT |
число. Процессы запускаются в порядке возрастания значений SORT (и останавливаются в обратном порядке). mysqld имеет число 300. |
START |
функция запуска процесса. Она принимает два аргумента, My::Config::Group и My::Test. Если START не определено, процесс не будет запущен. |
WAIT |
функция ожидания запуска процесса. Она принимает My::Config::Group в качестве аргумента. Внутри mtr сначала вызывает START для всех процессов, а затем WAIT для всех запущенных процессов. |
sub servers {(
qr/^foo$/ => { SORT => 200, # start foo before mysqld
START => \&start_foo,
WAIT => \&wait_foo }
)}
См. набор sphinx для примера.
Метод list_cases() возвращает полный список тестов для этого набора. По умолчанию это будет список файлов с расширением .test, но без расширения. Этот список будет отфильтрован mtr, в зависимости от различных параметров mtr (--big-test, --start-from, и т. д.), объекту набора не нужно этого делать.
Метод start_test() запускает один процесс теста, по умолчанию он будет mariadb-test . См. набор unit для примера работы методов list_cases() и start_test().
Метод skip_combinations() возвращает хеш, который сопоставляет имена файлов (где определены комбинации) со списком комбинаций, которые следует пропустить. В качестве специального случая он может отключить весь файл, используя строку вместо хеша. Например
sub skip_combinations {(
'combinations' => [ 'mix', 'rpl' ],
'inc/many.combinations' => [ 'a', 'bb', 'c' ],
'windows.inc' => "Not on windows",
)}
Последняя строка заставит пропустить все тесты этого набора, которые включают windows.inc, по причине «Не на Windows».
Метод is_default() возвращает 1, если этот конкретный набор должен выполняться по умолчанию, когда сценарий mariadb-test-run.pl запускается без явного указания наборов тестов или тестовых случаев.
*.sh файлы
Для каждого тестового файла sometest.test mtr ищет sometest-master.sh и sometest-slave.sh. Если один из этих файлов найден, он будет запущен перед самим тестом.
*.require файлы
Эти файлы устарели. Не используйте их больше. Если вам нужно пропустить тест, используйте команду skip вместо этого.
*.rdiff файлы
Эти файлы также определяют, каким должен быть результат теста. Но в отличие от *.result файлов, они содержат патч, который должен быть применён к одному файлу результатов для создания нового файла результатов. Это очень полезно, когда результат какого-то теста в одной комбинации незначительно отличается от результата того же теста, но в другой комбинации. Или когда результат теста в наслоении отличается от результата теста в наложенном наборе.
Редактировать .rdiff файлы для обновления после изменения тестового файла довольно сложно. Но, к счастью, это никогда не требуется. Когда тест завершается неудачно, mtr создаёт файл .reject. Имея его, можно создать файл .rdiff так же просто (например)
diff -u main/foo.result main/foo.reject > main/foo,comb.rdiff or diff -u main/foo.result main/foo,comb.reject > main/foo,comb.rdiff
Некоторые примеры:
diff -u main/innodb_ext_key.result main/innodb_ext_key,off.reject > main/innodb_ext_key,off.rdiff diff -u suite/sys_vars/r/sysvars_server_notembedded.result suite/sys_vars/r/sysvars_server_notembedded,32bit.reject > suite/sys_vars/r/sysvars_server_notembedded,32bit.rdiff
Примечание: Это также добавит отметку времени в файл .rdiff, поэтому, если вы отправляете патч, вы можете удалить его вручную. Если один и тот же файл .rdiff используется для нескольких комбинаций, было бы неплохо опустить в заголовке идентификатор комбинации, чтобы позволить git лучше упаковывать репозиторий. Пример:
--- testname.result +++ testname.reject
Поскольку комбинация может быть частью имени файла .result или .rdiff, mtr должен искать результаты теста во многих разных местах. Например, рассмотрим тест foo.test в паре комбинаций aa,bb, который выполняется в наслоении rty набора qwe, другими словами, для теста, который mtr печатает как
qwe-rty.foo 'aa,bb' [ pass ]
Для этого теста результат может быть в
- либо
.rdiffили.resultфайле - либо в наслоении «
rty/», либо в наложенном наборе «qwe/» - с комбинациями в имени файла («
,a», «,b», «,a,b» или без)
что означает, что любое из следующих 15 имён файлов может быть использовано:
-
rty/r/foo,aa,bb.result -
rty/r/foo,aa,bb.rdiff -
qwe/r/foo,aa,bb.result -
qwe/r/foo,aa,bb.rdiff -
rty/r/foo,aa.result -
rty/r/foo,aa.rdiff -
qwe/r/foo,aa.result -
qwe/r/foo,aa.rdiff -
rty/r/foo,bb.result -
rty/r/foo,bb.rdiff -
qwe/r/foo,bb.result -
qwe/r/foo,bb.rdiff -
rty/r/foo.result -
rty/r/foo.rdiff -
qwe/r/foo.result
Они перечислены именно в порядке предпочтения, и mtr будет перебирать этот список сверху вниз, и первый найденный файл будет использован.
Если этот найденный файл — .rdiff, mtr продолжает перебирать список, пока не найдёт первый .result файл. К этому .result файлу применяется .rdiff.
valgrind.supp файл
Этот файл определяет подавления valgrind, и он используется, когда mtr запускается с опцией --valgrind.
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/mariadb-test-auxiliary-files/