diff options
Diffstat (limited to '')
-rw-r--r-- | scripts/t/dpkg_buildpackage.t | 221 | ||||
-rw-r--r-- | scripts/t/dpkg_buildpackage/dpkgdb/status | 0 | ||||
-rw-r--r-- | scripts/t/dpkg_buildpackage/test-source_0.dsc | 15 | ||||
-rw-r--r-- | scripts/t/dpkg_buildpackage/test-source_0_all.changes | 26 | ||||
-rw-r--r-- | scripts/t/dpkg_buildpackage/test-source_0_any.changes | 26 | ||||
-rw-r--r-- | scripts/t/dpkg_buildpackage/test-source_0_binary.changes | 30 | ||||
-rw-r--r-- | scripts/t/dpkg_buildpackage/test-source_0_full.changes | 36 | ||||
-rw-r--r-- | scripts/t/dpkg_buildpackage/test-source_0_source.changes | 26 |
8 files changed, 380 insertions, 0 deletions
diff --git a/scripts/t/dpkg_buildpackage.t b/scripts/t/dpkg_buildpackage.t new file mode 100644 index 0000000..f15f2b4 --- /dev/null +++ b/scripts/t/dpkg_buildpackage.t @@ -0,0 +1,221 @@ +#!/usr/bin/perl +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +use strict; +use warnings; + +use Test::More; +use Test::Dpkg qw(:needs :paths test_neutralize_checksums); + +use File::Spec::Functions qw(rel2abs); +use File::Compare; +use File::Path qw(make_path); +use File::Copy; + +use Dpkg::File; +use Dpkg::IPC; +use Dpkg::BuildTypes; +use Dpkg::Substvars; + +test_needs_command('fakeroot'); + +plan tests => 12; + +my $srcdir = rel2abs($ENV{srcdir} || '.'); +my $datadir = "$srcdir/t/dpkg_buildpackage"; +my $tmpdir = test_get_temp_path(); + +$ENV{$_} = rel2abs($ENV{$_}) foreach qw(DPKG_DATADIR DPKG_ORIGINS_DIR); + +# Any parallelization from the parent should be ignored, we are testing +# the makefiles serially anyway. +delete $ENV{MAKEFLAGS}; + +# Delete variables that can affect the tests. +delete $ENV{SOURCE_DATE_EPOCH}; + +# Delete other variables that can affect the tests. +delete $ENV{$_} foreach grep { m/^DEB_/ } keys %ENV; + +# Set architecture variables to not require dpkg nor gcc. +$ENV{PATH} = "$srcdir/t/mock-bin:$ENV{PATH}"; + +chdir $tmpdir; + +my $tmpl_format = <<'TMPL_FORMAT'; +3.0 (native) +TMPL_FORMAT + +my $tmpl_changelog = <<'TMPL_CHANGELOG'; +${source-name} (${source-version}) ${suite}; urgency=${urgency} + + * Entry. Closes: #12345 + + -- ${maintainer} Thu, 30 Jun 2016 20:15:12 +0200 +TMPL_CHANGELOG + +my $tmpl_control = <<'TMPL_CONTROL'; +Source: ${source-name} +Section: ${source-section} +Priority: ${source-priority} +Maintainer: ${maintainer} + +Package: test-binary-all +Architecture: all +Description: architecture independent binary package + +Package: test-binary-any +Architecture: any +Description: architecture dependent binary package +TMPL_CONTROL + +my $tmpl_rules = <<'TMPL_RULES'; +#!/usr/bin/make -f + +DI := debian/${binary-name-all} +DA := debian/${binary-name-any} + +clean: + rm -f debian/files + rm -rf $(DI) $(DA) + +build-indep: +build-arch: +build: build-indep build-arch + +binary-indep: build-indep + rm -rf $(DI) + mkdir -p $(DI)/DEBIAN + dpkg-gencontrol -P$(DI) -p${binary-name-all} + dpkg-deb --build $(DI) .. + +binary-arch: build-arch + rm -rf $(DA) + mkdir -p $(DA)/DEBIAN + dpkg-gencontrol -P$(DA) -p${binary-name-any} + dpkg-deb --build $(DA) .. + +binary: binary-indep binary-arch + +.PHONY: clean build-indep build-arch build binary-indexp binary-arch binary +TMPL_RULES + +my %default_substvars = ( + 'source-name' => 'test-source', + 'source-version' => 0, + 'source-section' => 'test', + 'source-priority' => 'optional', + 'binary-name-all' => 'test-binary-all', + 'binary-name-any' => 'test-binary-any', + 'suite' => 'unstable', + 'urgency' => 'low', + 'maintainer' => 'Dpkg Developers <debian-dpkg@lists.debian.org>', +); + +sub gen_from_tmpl +{ + my ($pathname, $tmpl, $substvars) = @_; + + file_dump($pathname, $substvars->substvars($tmpl)); +} + +sub gen_source +{ + my (%options) = @_; + + my $substvars = Dpkg::Substvars->new(); + foreach my $var (%default_substvars) { + my $value = $options{$var} // $default_substvars{$var}; + + $substvars->set_as_auto($var, $value); + } + + my $source = $substvars->get('source-name'); + my $version = $substvars->get('source-version'); + my $basename = "$source\_$version"; + my $dirname = $basename =~ tr/_/-/r; + + make_path("$dirname/debian/source"); + + gen_from_tmpl("$dirname/debian/source/format", $tmpl_format, $substvars); + gen_from_tmpl("$dirname/debian/changelog", $tmpl_changelog, $substvars); + gen_from_tmpl("$dirname/debian/control", $tmpl_control, $substvars); + gen_from_tmpl("$dirname/debian/rules", $tmpl_rules, $substvars); + + return $basename; +} + +sub test_diff +{ + my $filename = shift; + + my $expected_file = "$datadir/$filename"; + my $generated_file = $filename; + + test_neutralize_checksums($generated_file); + + my $res = compare($expected_file, $generated_file); + if ($res) { + system "diff -u $expected_file $generated_file >&2"; + } + ok($res == 0, "generated file matches expected one ($expected_file)"); +} + +sub test_build +{ + my ($basename, $type) = @_; + my $dirname = $basename =~ tr/_/-/r; + + set_build_type($type, 'buildtype', nocheck => 1); + my $typename = get_build_options_from_type(); + + my $stderr; + + chdir $dirname; + spawn(exec => [ $ENV{PERL}, "$srcdir/dpkg-buildpackage.pl", + "--admindir=$datadir/dpkgdb", + '--host-arch=amd64', + '--ignore-builtin-builddeps', + '--unsigned-source', '--unsigned-changes', + '--unsigned-buildinfo', + "--build=$typename", '--check-command=' ], + error_to_string => \$stderr, + wait_child => 1, nocheck => 1); + chdir '..'; + + ok($? == 0, "dpkg-buildpackage --build=$typename succeeded"); + diag($stderr) unless $? == 0; + + if (build_has_all(BUILD_ARCH_DEP)) { + # Rename the file to preserve on consecutive invocations. + move("$basename\_amd64.changes", "$basename\_$typename.changes"); + } + + if (build_has_all(BUILD_SOURCE)) { + test_diff("$basename.dsc"); + } + + test_diff("$basename\_$typename.changes"); +} + +my $basename = gen_source(); + +test_build($basename, BUILD_SOURCE); +test_build($basename, BUILD_ARCH_INDEP); +test_build($basename, BUILD_ARCH_DEP); +test_build($basename, BUILD_BINARY); +test_build($basename, BUILD_FULL); + +1; diff --git a/scripts/t/dpkg_buildpackage/dpkgdb/status b/scripts/t/dpkg_buildpackage/dpkgdb/status new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/scripts/t/dpkg_buildpackage/dpkgdb/status diff --git a/scripts/t/dpkg_buildpackage/test-source_0.dsc b/scripts/t/dpkg_buildpackage/test-source_0.dsc new file mode 100644 index 0000000..fe5b4f8 --- /dev/null +++ b/scripts/t/dpkg_buildpackage/test-source_0.dsc @@ -0,0 +1,15 @@ +Format: 3.0 (native) +Source: test-source +Binary: test-binary-all, test-binary-any +Architecture: any all +Version: 0 +Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org> +Package-List: + test-binary-all deb test optional arch=all + test-binary-any deb test optional arch=any +Checksums-Sha1: + 0000000000000000000000000000000000000000 0 test-source_0.tar.xz +Checksums-Sha256: + 0000000000000000000000000000000000000000000000000000000000000000 0 test-source_0.tar.xz +Files: + 00000000000000000000000000000000 0 test-source_0.tar.xz diff --git a/scripts/t/dpkg_buildpackage/test-source_0_all.changes b/scripts/t/dpkg_buildpackage/test-source_0_all.changes new file mode 100644 index 0000000..c6c444f --- /dev/null +++ b/scripts/t/dpkg_buildpackage/test-source_0_all.changes @@ -0,0 +1,26 @@ +Format: 1.8 +Date: Thu, 30 Jun 2016 20:15:12 +0200 +Source: test-source +Binary: test-binary-all +Architecture: all +Version: 0 +Distribution: unstable +Urgency: low +Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org> +Changed-By: Dpkg Developers <debian-dpkg@lists.debian.org> +Description: + test-binary-all - architecture independent binary package +Closes: 12345 +Changes: + test-source (0) unstable; urgency=low + . + * Entry. Closes: #12345 +Checksums-Sha1: + 0000000000000000000000000000000000000000 0 test-binary-all_0_all.deb + 0000000000000000000000000000000000000000 0 test-source_0_all.buildinfo +Checksums-Sha256: + 0000000000000000000000000000000000000000000000000000000000000000 0 test-binary-all_0_all.deb + 0000000000000000000000000000000000000000000000000000000000000000 0 test-source_0_all.buildinfo +Files: + 00000000000000000000000000000000 0 test optional test-binary-all_0_all.deb + 00000000000000000000000000000000 0 test optional test-source_0_all.buildinfo diff --git a/scripts/t/dpkg_buildpackage/test-source_0_any.changes b/scripts/t/dpkg_buildpackage/test-source_0_any.changes new file mode 100644 index 0000000..d67460c --- /dev/null +++ b/scripts/t/dpkg_buildpackage/test-source_0_any.changes @@ -0,0 +1,26 @@ +Format: 1.8 +Date: Thu, 30 Jun 2016 20:15:12 +0200 +Source: test-source +Binary: test-binary-any +Architecture: amd64 +Version: 0 +Distribution: unstable +Urgency: low +Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org> +Changed-By: Dpkg Developers <debian-dpkg@lists.debian.org> +Description: + test-binary-any - architecture dependent binary package +Closes: 12345 +Changes: + test-source (0) unstable; urgency=low + . + * Entry. Closes: #12345 +Checksums-Sha1: + 0000000000000000000000000000000000000000 0 test-binary-any_0_amd64.deb + 0000000000000000000000000000000000000000 0 test-source_0_amd64.buildinfo +Checksums-Sha256: + 0000000000000000000000000000000000000000000000000000000000000000 0 test-binary-any_0_amd64.deb + 0000000000000000000000000000000000000000000000000000000000000000 0 test-source_0_amd64.buildinfo +Files: + 00000000000000000000000000000000 0 test optional test-binary-any_0_amd64.deb + 00000000000000000000000000000000 0 test optional test-source_0_amd64.buildinfo diff --git a/scripts/t/dpkg_buildpackage/test-source_0_binary.changes b/scripts/t/dpkg_buildpackage/test-source_0_binary.changes new file mode 100644 index 0000000..7470ce5 --- /dev/null +++ b/scripts/t/dpkg_buildpackage/test-source_0_binary.changes @@ -0,0 +1,30 @@ +Format: 1.8 +Date: Thu, 30 Jun 2016 20:15:12 +0200 +Source: test-source +Binary: test-binary-all test-binary-any +Architecture: all amd64 +Version: 0 +Distribution: unstable +Urgency: low +Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org> +Changed-By: Dpkg Developers <debian-dpkg@lists.debian.org> +Description: + test-binary-all - architecture independent binary package + test-binary-any - architecture dependent binary package +Closes: 12345 +Changes: + test-source (0) unstable; urgency=low + . + * Entry. Closes: #12345 +Checksums-Sha1: + 0000000000000000000000000000000000000000 0 test-binary-all_0_all.deb + 0000000000000000000000000000000000000000 0 test-binary-any_0_amd64.deb + 0000000000000000000000000000000000000000 0 test-source_0_amd64.buildinfo +Checksums-Sha256: + 0000000000000000000000000000000000000000000000000000000000000000 0 test-binary-all_0_all.deb + 0000000000000000000000000000000000000000000000000000000000000000 0 test-binary-any_0_amd64.deb + 0000000000000000000000000000000000000000000000000000000000000000 0 test-source_0_amd64.buildinfo +Files: + 00000000000000000000000000000000 0 test optional test-binary-all_0_all.deb + 00000000000000000000000000000000 0 test optional test-binary-any_0_amd64.deb + 00000000000000000000000000000000 0 test optional test-source_0_amd64.buildinfo diff --git a/scripts/t/dpkg_buildpackage/test-source_0_full.changes b/scripts/t/dpkg_buildpackage/test-source_0_full.changes new file mode 100644 index 0000000..fef013c --- /dev/null +++ b/scripts/t/dpkg_buildpackage/test-source_0_full.changes @@ -0,0 +1,36 @@ +Format: 1.8 +Date: Thu, 30 Jun 2016 20:15:12 +0200 +Source: test-source +Binary: test-binary-all test-binary-any +Architecture: source all amd64 +Version: 0 +Distribution: unstable +Urgency: low +Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org> +Changed-By: Dpkg Developers <debian-dpkg@lists.debian.org> +Description: + test-binary-all - architecture independent binary package + test-binary-any - architecture dependent binary package +Closes: 12345 +Changes: + test-source (0) unstable; urgency=low + . + * Entry. Closes: #12345 +Checksums-Sha1: + 0000000000000000000000000000000000000000 0 test-source_0.dsc + 0000000000000000000000000000000000000000 0 test-source_0.tar.xz + 0000000000000000000000000000000000000000 0 test-binary-all_0_all.deb + 0000000000000000000000000000000000000000 0 test-binary-any_0_amd64.deb + 0000000000000000000000000000000000000000 0 test-source_0_amd64.buildinfo +Checksums-Sha256: + 0000000000000000000000000000000000000000000000000000000000000000 0 test-source_0.dsc + 0000000000000000000000000000000000000000000000000000000000000000 0 test-source_0.tar.xz + 0000000000000000000000000000000000000000000000000000000000000000 0 test-binary-all_0_all.deb + 0000000000000000000000000000000000000000000000000000000000000000 0 test-binary-any_0_amd64.deb + 0000000000000000000000000000000000000000000000000000000000000000 0 test-source_0_amd64.buildinfo +Files: + 00000000000000000000000000000000 0 test optional test-source_0.dsc + 00000000000000000000000000000000 0 test optional test-source_0.tar.xz + 00000000000000000000000000000000 0 test optional test-binary-all_0_all.deb + 00000000000000000000000000000000 0 test optional test-binary-any_0_amd64.deb + 00000000000000000000000000000000 0 test optional test-source_0_amd64.buildinfo diff --git a/scripts/t/dpkg_buildpackage/test-source_0_source.changes b/scripts/t/dpkg_buildpackage/test-source_0_source.changes new file mode 100644 index 0000000..8c2f3d1 --- /dev/null +++ b/scripts/t/dpkg_buildpackage/test-source_0_source.changes @@ -0,0 +1,26 @@ +Format: 1.8 +Date: Thu, 30 Jun 2016 20:15:12 +0200 +Source: test-source +Architecture: source +Version: 0 +Distribution: unstable +Urgency: low +Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org> +Changed-By: Dpkg Developers <debian-dpkg@lists.debian.org> +Closes: 12345 +Changes: + test-source (0) unstable; urgency=low + . + * Entry. Closes: #12345 +Checksums-Sha1: + 0000000000000000000000000000000000000000 0 test-source_0.dsc + 0000000000000000000000000000000000000000 0 test-source_0.tar.xz + 0000000000000000000000000000000000000000 0 test-source_0_source.buildinfo +Checksums-Sha256: + 0000000000000000000000000000000000000000000000000000000000000000 0 test-source_0.dsc + 0000000000000000000000000000000000000000000000000000000000000000 0 test-source_0.tar.xz + 0000000000000000000000000000000000000000000000000000000000000000 0 test-source_0_source.buildinfo +Files: + 00000000000000000000000000000000 0 test optional test-source_0.dsc + 00000000000000000000000000000000 0 test optional test-source_0.tar.xz + 00000000000000000000000000000000 0 test optional test-source_0_source.buildinfo |