[devel] Re: test binary perl modules

Alexey Tourbin =?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Вт Авг 3 23:10:45 MSD 2004


On Tue, Aug 03, 2004 at 01:21:30PM +0400, Vladimir Lettiev wrote:
> >У перла как бы всё время немножко едет ABI.  Поэтому часть модулей,
> >собранных с более ранним перлом, может перестать работать (зависимость
> >на libperl.so.5.8 не является достаточно жёсткой).  Однако же такие
> >модули успешно пересобираются с новым перлом.
> 
> Чего-то я не понимаю. Идём по ссылке 
> http://search.cpan.org/~nwclark/perl-5.8.5/pod/perl585delta.pod
> И видим "There are no changes incompatible with 5.8.4.". Думаете обманывают?

Могут обмануть. :)

При обновлении perl-5.8.0 -> perl-5.8.1 перестали работать некоторые
модули, собранные с perl-5.8.0 (в частности, HTML::Parser), хотя
бинарная совместимость подразумевалась.  Это обнаружили в Debian Team.

mod_perl при обновлении перла тоже иногда подвержен segfault'ам.

> >Как определить модули, которые перестали работать после обновления
> >перла?  У модулей есть тесты, которые выполняются на стадии сборки.
> >Можно было бы паковать их в RPM пакеты.  А можно придумать механизм,
> >который извлекает эти тесты из perl-*.src.rpm и выполняет.
> 
> Нужно придумать такой механизм и проверить все модули. Если окажутся 
> нерабочие, повесить на них баги.

Нужно тестировать уже установленный, а не свежесобранный модуль.

$ rpm -bc ~/RPM/SPECS/perl-Bit-Vector.spec
...
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/00____version....ok
t/01________new....ok
t/02____destroy....ok
t/03_operations....ok
t/04__functions....ok
t/05_____primes....ok
t/06_____subset....ok
t/07____compare....ok
t/08_____resize....ok
t/09_parameters....ok
t/10__intervals....ok
t/11______shift....ok
t/12_____string....ok
t/13__increment....ok
t/14______empty....ok
t/15________add....ok
t/16___subtract....ok
t/17________gcd....ok
t/28__chunklist....ok
t/30_overloaded....ok
All tests successful.
...
$

Это протестировался свежесобранный модуль.
Чтобы протестировать уже установленный модуль, нужно убрать из команды
blib/lib и blib/arch:

$ cd ~/RPM/BUILD/Bit-Vector-6.3
$ PERL_DL_NONLAZY=1 /usr/bin/perl -MExtUtils::Command::MM -e test_harness */*.t
t/00____version....ok
t/01________new....ok
...
All tests successful.
$

А это протестировался уже установленный perl-Bit-Vector-6.3-alt2.
Т.е. он продолжает работать, несмотря на то, что был собран с perl-5.8.0.
Действительно, в тестах был задействован уже установленный модуль:

$ PERL_DL_NONLAZY=1 filereq /dev/stdout /usr/bin/perl -MExtUtils::Command::MM -e test_harness */*.t | grep Bit/Vector
/usr/lib/perl5/vendor_perl/i386-linux/Bit/Vector.pm
/usr/lib/perl5/vendor_perl/i386-linux/Bit/Vector/Overload.pm
/usr/lib/perl5/vendor_perl/i386-linux/auto/Bit/Vector
/usr/lib/perl5/vendor_perl/i386-linux/auto/Bit/Vector/Vector.so
$

Поэтому для проверки уже собранных модулей можно сделать примерно следущее:

$ rpm -bp --define '__spec_prep_post PERL_DL_NONLAZY=1 %__perl -MExtUtils::Command::MM -e test_harness */*.t' ~/RPM/SPECS/perl-Bit-Vector.spec
...
Source #0 (Bit-Vector-6.3.tar.gz):
+ /bin/gzip -dc /home/at/RPM/SOURCES/Bit-Vector-6.3.tar.gz
+ /bin/tar -xf -
+ cd Bit-Vector-6.3
+ /bin/chmod -Rf u+rwX,go-w .
+ PERL_DL_NONLAZY=1
+ /usr/bin/perl -MExtUtils::Command::MM -e test_harness t/00____version.t t/01________new.t t/02____destroy.t t/03_operations.t t/04__functions.t t/05_____primes.t t/06_____subset.t t/07____compare.t
t/08_____resize.t t/09_parameters.t t/10__intervals.t t/11______shift.t t/12_____string.t t/13__increment.t t/14______empty.t t/15________add.t t/16___subtract.t t/17________gcd.t t/28__chunklist.t t/30_overloaded.t
t/00____version....ok
...
All tests successful.
Files=20, Tests=67417, 120 wallclock secs (12.22 cusr +  0.43 csys = 12.65 CPU)
$

Т.е. определили команду __spec_prep_post, которая будет выполняться
сразу после %setup.

Теперь надо подумать, как это всё автоматизировать.

> -- 
> С уважением, Владимир Леттиев aka crux <crux на syktsu.ru>
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип     : application/pgp-signature
Размер  : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20040803/045c0c47/attachment-0001.bin>


Подробная информация о списке рассылки Devel