#!/usr/bin/perl use strict; BEGIN { eval { require Devel::Leak; require Test::More; }; if ($@) { print "1..0 # Skip Devel::Leak and Test::More required\n"; exit 0; } } use Test::More tests => 11; sub test_leak (&$;$) { my ($code, $descr, $maxleak) = (@_, 0); my $n1 = Devel::Leak::NoteSV(my $handle); $code->() for 0..3; my $n2 = Devel::Leak::CheckSV($handle); cmp_ok($n1 + $maxleak, '>=', $n2, $descr); } use RPM::Database; test1: test_leak { my $db = RPM::Database->new or die } "rpmdb_TIEHASH", 1; # XXX test2: test_leak { my $db = RPM::Database->new(root => "/dev/null") } "rpmdb_TIEHASH w/ invalid args"; test3: test_leak { my $db = RPM::Database->new or die; for (0..3) { my $hdr = $$db{rpm} or die; } } "rpmdb_FETCH"; test4: test_leak { my $db = RPM::Database->new or die; for (0..3) { my $hdr = $$db{rpm} or die; for (0..3) { my $name = $$hdr{NAME} or die; my $summary = $$hdr{SUMMARY} or die; } } } "rpmhdr_FETCH"; test5: test_leak { my $db = RPM::Database->new or die; for (0..3) { $db->find_by_file("/usr/bin/perl") or die; } } "find_by_file"; test6: test_leak { my $db = RPM::Database->new or die; for (0..3) { $db->find_what_provides("/bin/sh") or $db->find_what_provides("perl(perl5db.pl)"); } } "find_what_provides"; # expensive tests test7: test_leak { my $db = RPM::Database->new or die; for (0..3) { $db->find_what_requires("/bin/sh") or warn "/bin/sh not required?"; } } "find_what_requires"; test8: test_leak { my $db = RPM::Database->new or die; my $hdr = $$db{rpm} or die; while (my ($k, $v) = each %$hdr) { die if $k eq $v; } } "rpmhdr_NEXTKEY"; test9: test_leak { my $db = RPM::Database->new or die; while (my ($k, $v) = each %$db) { die if $k eq $v; } } "rpmdb_NEXTKEY"; test10: test_leak { my $hdr = RPM::Header->new or die; $$hdr{NAME} = "glibc"; $$hdr{SERIAL} = int 6; $$hdr{VERSION} = "2.3.5"; $$hdr{RELEASE} = "alt7"; } "rpmhdr_STORE"; use RPM::Header; use RPM qw(evrcmp); test11: test_leak { evrcmp("1:1-1", "2:2-2") == -1 or die; } "evrcmp";