тестирование Perl после его установки - PullRequest
5 голосов
/ 22 августа 2011

Когда вы собираете perl из исходного кода, вы можете запустить make test перед установкой perl в конечный пункт назначения.

Можно ли сделать эквивалент make test после установки perl?

Обратите внимание, что у меня не будет оригинального источника. Я хотел бы скачать исходный архив tar для той же версии perl, который я установил, а затем запустить тесты (из исходного архива tar) для установленного perl.

Возможно / невозможно? Легко трудно? Как бы я пошел по этому поводу?

Ответы [ 3 ]

2 голосов
/ 22 августа 2011
  • Возможные.
  • Hard.
  • Не стоит.

Выполнение тестов с установленным Perl вместо только что созданного Perl потребует от вас понимания того, как убедить систему тестирования игнорировать все сборки, которые она не выполняла, и приступить к запуску теста с использованием установленного Perl. Вы не сможете сказать «сделать тест», потому что первое, что он хотел бы сделать, это собрать Perl. На самом деле, что более важно, вы не сможете сказать «сделать тест», потому что у вас не будет make-файла.

Почему вы хотите это сделать? Если вы не доверяете системе Perl, не используйте ее. Создайте свой собственный, протестируйте его и установите в своем месте вместо системного. Я делаю это большую часть времени; Я не рискую сломать системный Perl, изменив его и используя свой собственный. Конечно, у меня есть 5.10.0, 5.10.1, 5.12.1, 5.14.0 и 5.14.1, созданные мной для игры. У меня обычно тоже есть хотя бы одна версия 5.8.x, но на данный момент у меня нет этой машины.

Также помните, что люди, устанавливающие системный Perl, вменяемы. Они запускают тесты и не устанавливают Perl, если все тесты не пройдены (или практически не пройдены).

2 голосов
/ 22 августа 2011

Возможно, только немного сложнее (без Configure или make необходимо), может быть полезно:

Схема тестирования в исходном дистрибутиве загружает все из каталога /path/to/src/distribution/lib'. The key to running your existing perl installation against this test suite is to put all of the install libraries into this lib`,Это можно сделать с помощью чего-то вроде:

cd /path/to/src/distribution
mv lib lib-original
mkdir lib
/path/to/installed/perl -e 'system qq{cp -prv "$_/." lib/}' \
        -e 'for "lib-original",grep /../,reverse(@INC)'

(возможно, есть более надежная команда perl, которая использует -MFile::Copy, но эта быстрая и грязная строчка заставила меня двигаться).Мы используем reverse @INC, чтобы библиотеки с передней части @INC перезаписывали более поздние библиотеки, а не наоборот.Предложение grep /../,... не позволяет нам скопировать . в lib, что, вероятно, было бы бесполезно.

Я нашел несколько тестов, которые используют жестко заданные пути к perl, psed иs2p в исходном каталоге.Вы должны убедиться, что эти файлы существуют, и что тесты нацелены на установленные версии этих программ.

rm -f perl t/perl psed t/psed x2p/s2p
ln -s /path/to/installed/perl perl
ln -s /path/to/installed/perl t/perl
ln -s /path/to/installed/psed psed
ln -s /path/to/installed/psed t/psed
ln -s /path/to/installed/s2p x2p/s2p

Теперь используйте обычную идиому Unix-y для запуска набора тестов Perl:

cd t
/path/to/installed/perl -MExtUtils::Command::MM \
        -e 'test_harness(0,"../lib")' */*.t

Некоторые тесты могут явно касаться проверки целостности процесса сборки из источника, поэтому следует ожидать некоторых сбоев.

(этот процесс тестировался на v5.14.0, v5.8.9,v5.10.1)

Обновление: еще сложнее.В типичном исходном дистрибутиве есть много других t каталогов.Возможно, вы также захотите попробовать:

cd /path/to/source/distribution

for dir in */*/
do
        if [ -d $dir/t ] ; then
            pushd $dir
            echo Testing $dir
            /path/to/installed/perl -MExtUtils::Command::MM \
                    -e 'test_harness(0,"../../lib","lib")' t/*.t
            popd
        fi
done

Многие из этих тестов явно проверяют целостность сборки, поэтому вы можете ожидать, что многие из этих тестов не пройдут.

1 голос
/ 22 августа 2011

Вы можете начать с чтения файла t / TEST в исходном коде perl.

Обратите внимание на следующее:

  1. Используется "#! ./ perl"как she-bang

  2. Затем около строки 142 он выполняет chdir в каталог t.

В качестве начала вы можете изменитьта строка взрыва, чтобы указать ее на установленный исполняемый файл perl и скопировать содержимое каталога 't' в каталог пакетов ядра perl (или наоборот).

Вот так я бы началit.

Другим способом является создание списка всех установленных файлов при запуске make install (сделайте так, чтобы он устанавливал perl во временный каталог, а затем выполните ls -lR в этом каталоге, чтобы получить список), а затем скопируйте эти файлы из установленного perl в исходный каталог perl.

Использование системы контроля версий (например, git) может очень помочь, так что вы можете легко вернуться к первоначальным версиям.из любых файлов, которые вы могли бы перезаписать поау.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...