[lemonldap-ng] 02/02: Add autopkgtest tests
Xavier Guimard
xguimard-guest at moszumanska.debian.org
Wed Nov 9 19:12:51 UTC 2016
This is an automated email from the git hooks/post-receive script.
xguimard-guest pushed a commit to branch master
in repository lemonldap-ng.
commit 205ac694412c591503794729047c3185b5d09469
Author: Xavier Guimard <x.guimard at free.fr>
Date: Wed Nov 9 20:12:12 2016 +0100
Add autopkgtest tests
---
debian/changelog | 1 +
debian/control | 1 +
debian/tests/control | 12 +++
debian/tests/lib/build-deps.d/smoke | 118 +++++++++++++++++++++
.../lib/runtime-deps-and-recommends.d/syntax.t | 104 ++++++++++++++++++
debian/tests/lib/runtime-deps.d/use.t | 76 +++++++++++++
debian/tests/runner | 32 ++++++
7 files changed, 344 insertions(+)
diff --git a/debian/changelog b/debian/changelog
index bea1d57..e97d899 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -9,6 +9,7 @@ lemonldap-ng (1.9.6-1) UNRELEASED; urgency=medium
* Update patches
* Add lsb-base in fastcgi server dependencies
* Replace Net::Twitter dependency by Net::OAuth
+ * Add autopkgtest tests
-- Xavier Guimard <x.guimard at free.fr> Tue, 18 Oct 2016 11:18:26 +0200
diff --git a/debian/control b/debian/control
index e34a2c7..0b33e24 100644
--- a/debian/control
+++ b/debian/control
@@ -2,6 +2,7 @@ Source: lemonldap-ng
Maintainer: Debian Perl Group <pkg-perl-maintainers at lists.alioth.debian.org>
Uploaders: Xavier Guimard <x.guimard at free.fr>
Section: perl
+Testsuite: autopkgtest
Priority: extra
Build-Depends: debhelper (>= 9),
dh-systemd,
diff --git a/debian/tests/control b/debian/tests/control
new file mode 100644
index 0000000..a56629f
--- /dev/null
+++ b/debian/tests/control
@@ -0,0 +1,12 @@
+#Test-Command: ./debian/tests/runner build-deps
+#Depends: @, @builddeps@, pkg-perl-autopkgtest, libmouse-perl
+
+Test-Command: ./debian/tests/runner runtime-deps
+Depends: @, pkg-perl-autopkgtest, libmouse-perl
+
+Test-Command: ./debian/tests/runner runtime-deps-and-recommends
+Depends: @, pkg-perl-autopkgtest, libmouse-perl
+Restrictions: needs-recommends
+
+Test-Command: ./debian/tests/runner heavy-deps
+Depends: @, pkg-perl-autopkgtest, pkg-perl-autopkgtest-heavy, libmouse-perl
diff --git a/debian/tests/lib/build-deps.d/smoke b/debian/tests/lib/build-deps.d/smoke
new file mode 100755
index 0000000..d7b53aa
--- /dev/null
+++ b/debian/tests/lib/build-deps.d/smoke
@@ -0,0 +1,118 @@
+#!/bin/sh
+set -e
+
+cleanup() {
+ cd $PDIR
+
+ #Clean up after smoke-setup
+ cleanup_file=debian/tests/pkg-perl/smoke-cleanup
+ if [ -x $cleanup_file ]
+ then
+ ( export TDIR; $cleanup_file )
+ fi
+
+ rm -rf $TDIR
+}
+
+TEMP=${ADTTMP:-${TMPDIR:-/tmp}}
+
+TDIR=$(mktemp -d $TEMP/smokeXXXXXX)
+
+PDIR=`pwd`
+
+trap cleanup EXIT
+
+file_list=debian/tests/pkg-perl/smoke-files
+if [ ! -r $file_list ]; then
+ # backward compatibility squared for now
+ file_list=debian/tests/pkg-perl/test-files
+fi
+if [ ! -r $file_list ]; then
+ # backward compatibility for now
+ file_list=debian/tests/test-files
+fi
+
+export AUTOMATED_TESTING=1
+export NONINTERACTIVE_TESTING=1
+
+# overridable with smoke-env
+PKG_PERL_PROVE_ARGS="--merge"
+
+env_list=debian/tests/pkg-perl/smoke-env
+if [ ! -r $env_list ]; then
+ env_list=debian/tests/pkg-perl/env-smoke
+fi
+if [ -r $env_list ]; then
+ eval $(sed '/^ *\(#\|$\)/d; s/^/export /' $env_list)
+fi
+
+for dir in common handler portal manager; do
+ TMPDIR=$TMPDIR
+ mkdir -p $TMPDIR/blib/lib \
+ $TMPDIR/blib/arch
+ cp -a lemonldap-ng-$dir/t $TMPDIR/
+ cat <<'EOF' > $TMPDIR/lib/Debian/pkgperl/Foobar.pm
+package Debian::pkgperl::Foobar;
+our $VERSION = '0.01';
+1;
+__END__
+=head1 NAME
+
+Debian::pkgperl::Foobar - dummy module for test checkers
+
+=cut
+EOF
+ cp $TMPDIR/lib/Debian/pkgperl/Foobar.pm $TMPDIR/blib/lib/Debian/pkgperl
+
+ if [ ! -e $TMPDIR/MANIFEST ]; then
+ cat <<'EOF' > $TMPDIR/MANIFEST
+lib/Debian/pkgperl/Foobar.pm
+EOF
+ fi
+
+ if [ ! -e $TMPDIR/MANIFEST.SKIP ]; then
+ cp /dev/null $TMPDIR/MANIFEST.SKIP
+ fi
+
+ # common nuisances, no value with runtime tests
+ rm -f $TMPDIR/t/99-pod.t
+
+ # this is intended to be a last resort, please use it responsibly
+ setup_file=debian/tests/pkg-perl/smoke-setup
+ if [ -x $setup_file ]
+ then
+ ( export TMPDIR; $setup_file )
+
+ # Evaluate skip list a second time since smoke-setup might have
+ # generated some of the to-be-skipped files.
+ if [ -r $skip_list ]; then
+ egrep -v '^ *(#|$)' $skip_list | while read file; do
+ rm -f $TMPDIR/$file
+ done
+ fi
+ fi
+
+ tests_file=$(pwd)/debian/tests/pkg-perl/smoke-tests
+ cd $TMPDIR
+ if [ -r $tests_file ]; then
+ test_targets=$(eval ls -d $(egrep -v '^#' $tests_file) 2>/dev/null || true)
+ fi
+
+ if command -v xvfb-run >/dev/null
+ then
+ XVFB="xvfb-run -a"
+ else
+ XVFB=
+ fi
+
+ if [ -z "$test_targets" ] && [ -d t ]; then test_targets=$(ls -d t/*.t 2>/dev/null || true); fi
+
+ if [ ! -n "$test_targets" ]; then
+ echo 'Nothing to prove, skipping.'
+ else
+ $XVFB prove -I"$TMPDIR" --blib --verbose $PKG_PERL_PROVE_ARGS $test_targets 2>&1
+ fi
+
+ if [ -f test.pl ]; then $XVFB perl -I"$TMPDIR" ./test.pl; fi 2>&1
+
+done
diff --git a/debian/tests/lib/runtime-deps-and-recommends.d/syntax.t b/debian/tests/lib/runtime-deps-and-recommends.d/syntax.t
new file mode 100755
index 0000000..5b20fde
--- /dev/null
+++ b/debian/tests/lib/runtime-deps-and-recommends.d/syntax.t
@@ -0,0 +1,104 @@
+#!/usr/bin/perl -w
+use strict;
+
+use Test::More;
+use Getopt::Std;
+
+sub usage {
+ my $exit = shift;
+ $exit = 0 if !defined $exit;
+ print "Usage: $0 [ package ] ...\n";
+ print "\tpackages are read from debian/control if not given as arguments\n";
+ exit $exit;
+}
+
+my %opts;
+getopts('h', \%opts)
+ or usage();
+
+usage(0) if $opts{h};
+
+sub getpackages {
+ my @p;
+ my $c = "debian/control";
+ -f $c or BAIL_OUT("no packages listed and $c not found");
+ open(C, '<', $c) or BAIL_OUT("opening $c for reading failed:$!");
+ while (<C>) {
+ chomp;
+ /^\s*Package:\s+(\S+)/ and push @p, $1;
+ }
+ close C or BAIL_OUT("closing $c failed: $!");
+ return @p;
+}
+
+sub readskip {
+ my $skip = "debian/tests/pkg-perl/syntax-skip";
+ $skip = "debian/tests/pkg-perl/skip-syntax" if ! -r $skip;
+ -r $skip or return ();
+ open (S, '<', $skip)
+ or BAIL_OUT("$skip exists but can't be read");
+
+ my @ret;
+ while (<S>) {
+ chomp;
+ next if !/\S/;
+ next if /^\s*#/;
+ push @ret, qr/\Q$_\E/;
+ }
+ close S;
+ return @ret;
+}
+
+my @packages = @ARGV ? @ARGV : getpackages();
+
+usage() if !@packages;
+
+plan tests => 4 * scalar @packages;
+
+my @to_skip = readskip();
+
+for my $package (@packages) {
+ SKIP: {
+ ok(!system(qq(dpkg-query --list "$package" >/dev/null 2>&1)),
+ "Package $package is known to dpkg");
+
+ skip "$package not installed", 3 if $?;
+
+ my @status_info = qx{dpkg-query --status "$package"};
+ ok(@status_info, "Got status information for package $package");
+ skip "$package has Suggestions and no explicit skip list", 2
+ if grep /^Suggests:/, @status_info and ! @to_skip;
+
+ my @files = qx{dpkg-query --listfiles "$package" 2>/dev/null};
+
+ ok(@files, "Got file list for package $package");
+
+ skip "nothing to test", 1 if !@files;
+
+ my @pms;
+ F: for (@files) {
+ chomp;
+ next if !/\.pm$/;
+ for my $skip_re (@to_skip) {
+ note "skipping $_", next F if /$skip_re/;
+ }
+ my $oninc = 0;
+ for my $incdir (@INC) {
+ $oninc++, last if /^\Q$incdir/;
+ }
+ next if !$oninc;
+ push @pms, $_;
+ }
+
+ skip "no perl modules to test in $package", 1 if !@pms;
+
+ subtest "all modules in $package pass the syntax check" => sub {
+ plan tests => scalar @pms;
+ for (@pms) {
+ my @out = grep !/syntax OK/, qx($^X -wc $_ 2>&1);
+ note(@out) if @out;
+ ok(!$?, "$^X -wc $_ exited successfully");
+ }
+ }
+ }
+}
diff --git a/debian/tests/lib/runtime-deps.d/use.t b/debian/tests/lib/runtime-deps.d/use.t
new file mode 100755
index 0000000..69382b4
--- /dev/null
+++ b/debian/tests/lib/runtime-deps.d/use.t
@@ -0,0 +1,76 @@
+#!/usr/bin/perl -w
+use strict;
+
+use Test::More;
+use Getopt::Std;
+use CPAN::Meta;
+
+sub usage {
+ my $exit = shift;
+ $exit = 0 if !defined $exit;
+ print "Usage: $0 [ Some::Module] ...\n";
+ print "\tthe perl module is guessed from META.{json,yml} if not given as argument\n";
+ exit $exit;
+}
+
+my %opts;
+getopts('h', \%opts)
+ or usage();
+
+usage(0) if $opts{h};
+
+sub getmodule {
+ my $module;
+ my $conffile = "debian/tests/pkg-perl/use-name";
+ $conffile = "debian/tests/pkg-perl/module-name" if ! -e $conffile; # backcompat
+ $conffile = "debian/tests/module-name" if ! -e $conffile; # backcompat squared
+ if ( -f $conffile ) {
+ open(M, "<", $conffile)
+ or BAIL_OUT("$conffile exists but can't be read");
+ while (<M>) {
+ chomp;
+ next if /^\s*#/;
+ /(\S+)/ and $module = $1, last;
+ }
+ close M;
+ BAIL_OUT("can't find a module name in $conffile")
+ if !defined $module;
+ return $module;
+ }
+
+ my $meta;
+ my $dist;
+ eval { $meta = CPAN::Meta->load_file('META.json') };
+ eval { $meta = CPAN::Meta->load_file('META.yml' ) } if !$meta;
+ plan skip_all => "can't guess package from META.json or META.yml"
+ if !$meta;
+
+ $dist = $meta->name;
+
+ $module = $dist;
+ $module =~ s,-,::,g;
+
+ my $file = "$dist.pm";
+ $file =~ s,-,/,g;
+
+ my $basefile = $file;
+ $basefile =~ s,.*/,,;
+
+ ( -f $basefile ) or (-f "lib/$file") or plan skip_all => "$basefile or lib/$file not found";
+
+ return $module;
+}
+
+my @modules = @ARGV ? @ARGV : getmodule();
+
+usage() if !@modules;
+
+plan tests => 2 * scalar @modules;
+
+for my $mod (@modules) {
+ my $cmd = qq($^X -w -M"$mod" -e 1 2>&1);
+ my @out = qx($cmd);
+ note(@out) if @out;
+ ok(!$?, "$cmd exited successfully");
+ ok(!@out, "$cmd produced no output");
+}
diff --git a/debian/tests/runner b/debian/tests/runner
new file mode 100755
index 0000000..7e6c9cb
--- /dev/null
+++ b/debian/tests/runner
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+BASE=debian/tests/lib
+
+TYPE=$1
+[ -n "$TYPE" ] || exit 1
+
+TESTDIR=${BASE}/${TYPE}.d
+[ -d "$TESTDIR" ] || exit 1
+
+SKIPLIST=debian/tests/pkg-perl/SKIP
+SKIPTMP=$(mktemp)
+if [ -f "$SKIPLIST" ]; then
+ grep -v '^ *#' "$SKIPLIST" |grep -v '^ *$' > "$SKIPTMP"
+fi
+
+EXITCODE=0
+for T in $(run-parts --list --regex '(^[a-z0-9.]+$)' ${TESTDIR} | \
+ grep -v -F -f "$SKIPTMP") ; do
+ if echo "$T" | grep -q '\.t$'
+ then
+ prove --norc -v "$T"
+ RET=$?
+ if [ $EXITCODE = 0 ]; then EXITCODE=$RET; fi
+ else
+ "$T"
+ RET=$?
+ if [ $EXITCODE = 0 ]; then EXITCODE=$RET; fi
+ fi
+done
+rm -f "$SKIPTMP"
+exit $EXITCODE
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/lemonldap-ng.git
More information about the Pkg-perl-cvs-commits
mailing list