1
0
Fork 0
devscripts/test/test_package_lifecycle
Daniel Baumann b543f2e88d
Adding upstream version 2.25.15.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-21 11:04:07 +02:00

382 lines
14 KiB
Bash
Executable file

#!/bin/bash
# Copyright (C) 2015, Nicholas Bamber <nicholas@periapt.co.uk>
#
# 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 <http://www.gnu.org/licenses/>.
set -u
WORKDIR=$(readlink -f "${0%/*}")
_ARCH=$(dpkg-architecture -qDEB_BUILD_ARCH)
declare -r _ARCH
if dpkg --compare-versions "$(dpkg-query -W -f='${Version}' dpkg-dev )" lt "1.19.1~"; then
echo "This test requires dpkg-dev >= 1.19.1." >&2
exit 1
fi
if dpkg --compare-versions "$(dpkg-query -W -f='${Version}' dpkg-dev )" lt "1.21.0~"; then
_dpkg_genchanges="dpkg-genchanges >"
elif dpkg --compare-versions "$(dpkg-query -W -f='${Version}' dpkg-dev )" eq "1.21.0"; then
echo "This version of dpkg produces incorrect output, not supported" >&2
exit 1
else
_dpkg_genchanges="dpkg-genchanges -O"
fi
declare -r _dpkg_genchanges
if test "${1:-}" = --installed; then
shift
else
PATH=${WORKDIR}/../scripts:${PATH}
PERL5LIB=${WORKDIR}/../lib:${PERL5LIB:-}
export PATH PERL5LIB
fi
. "${0%/*}/shunit2-helper-functions.sh"
GPGHOME=$(mktemp -d -p /tmp gpg.XXXXX)
oneTimeSetUp () {
GPG=gpg
if ! command -v $GPG >/dev/null 2>&1;then
echo "$GPG missing"
exit 1
fi
PRIVATE_KEY=${WORKDIR}/uscan/PRIVATE_KEY.asc
PUBLIC_KEY=${WORKDIR}/uscan/PUBLIC_KEY.asc
PRIVATE_KEYRING=$GPGHOME/secring.gpg
PUBLIC_KEYRING=$GPGHOME/pubring.gpg
$GPG -v --homedir "$GPGHOME" --no-options -q --batch --no-default-keyring \
--output $PRIVATE_KEYRING --dearmor $PRIVATE_KEY
$GPG -v --homedir "$GPGHOME" --no-options -q --batch --no-default-keyring \
--output $PUBLIC_KEYRING --dearmor $PUBLIC_KEY
$GPG --homedir "$GPGHOME" --no-options -q --batch --no-default-keyring \
--default-key 72543FAF \
--list-keys --verbose
mkdir -p ${WORKDIR}/package_lifecycle/test/debian/source
cat > ${WORKDIR}/package_lifecycle/test/debian/control <<-EOS
Source: test
Section: devel
Priority: optional
Maintainer: Devscripts Devel Team <devscripts-devel@lists.alioth.debian.org>
Uploaders: Testophilus Testownik <tester@testity.org>
Standards-Version: 4.5.0
Rules-Requires-Root: no
Package: test
Architecture: all
Description: Short description
Longer description
EOS
printf '#!/usr/bin/make -f\n%%:\n\tdh $@' > ${WORKDIR}/package_lifecycle/test/debian/rules
chmod +x ${WORKDIR}/package_lifecycle/test/debian/rules
_DATE=$(LC_ALL=C date '+%a, %d %b %Y %T +0000')
cat > ${WORKDIR}/package_lifecycle/test/debian/changelog <<-EOS
test (1.0-1) unstable; urgency=low
* Initial packaging
-- Testophilus Testownik <tester@testity.org> ${_DATE}
EOS
echo 12 > ${WORKDIR}/package_lifecycle/test/debian/compat
echo '3.0 (quilt)' > ${WORKDIR}/package_lifecycle/test/debian/source/format
touch ${WORKDIR}/package_lifecycle/test/CONTENTS
cd ${WORKDIR}/package_lifecycle/ && tar cvf test_1.0.orig.tar --exclude debian -- test/CONTENTS 2>&1 > /dev/null && xz -f test_1.0.orig.tar
cd ${WORKDIR}
}
runCommandOutCmpFile() {
local param="$1"
local exp_stdoutfile="$2"
local exp_stderr="$3"
local exp_retval=$4
local stdoutF="${SHUNIT_TMPDIR}/stdout"
local stderrF="${SHUNIT_TMPDIR}/stderr"
eval "${COMMAND} $param" 2> ${stderrF} | \
grep -v File::FcntlLock | \
grep -v '^ *dh_' | \
grep -v '^dh_gencontrol debug symbol wrapper:' | \
grep -v '^ *create-stamp debian/debhelper' | \
sed -e "s/\`/'/g" | \
sed -e "s/^dpkg-buildpackage: info: /dpkg-buildpackage: /g" | \
sed -e "s/^dpkg-genchanges: info: /dpkg-genchanges: /g" | \
sed -e "/^ dpkg-genbuildinfo/d" | \
sed -e "/^gpg: /d" | \
sed -e's!^ -- Testophilus Testownik <tester@testity.org>.*! -- Testophilus Testownik <tester@testity.org>!' > ${stdoutF}
retval=$?
eval "cmp ${stdoutF} ${exp_stdoutfile}" 3>&1 >/dev/null
local diffretval=$?
assertEquals "standard output of ${COMMAND} $param matches ${exp_stdoutfile}\n" "0" "$diffretval" || diff ${stdoutF} ${exp_stdoutfile}
assertEquals "error output of ${COMMAND} $param\n" "$exp_stderr" "$(cat ${stderrF})"
assertEquals "return value of ${COMMAND} $param\n" $exp_retval $retval
}
test_debuild() {
export GNUPGHOME=$GPGHOME
cd ${WORKDIR}/package_lifecycle/test
COMMAND='LC_ALL=C debuild --no-conf --no-lintian --preserve-envvar=PATH --preserve-envvar=PERL5LIB --preserve-envvar=DEBFULLNAME --preserve-envvar=DEBEMAIL --preserve-envvar=GNUPGHOME --set-envvar=NO_PKG_MANGLE=1'
cat > ${WORKDIR}/package_lifecycle/debuild.txt <<-EOS
dpkg-buildpackage -us -uc -ui
dpkg-buildpackage: source package test
dpkg-buildpackage: source version 1.0-1
dpkg-buildpackage: source distribution unstable
dpkg-buildpackage: source changed by Testophilus Testownik <tester@testity.org>
dpkg-source --before-build .
dpkg-buildpackage: host architecture ${_ARCH}
debian/rules clean
dh clean
dpkg-source -b .
dpkg-source: info: using source format '3.0 (quilt)'
dpkg-source: info: building test using existing ./test_1.0.orig.tar.xz
dpkg-source: info: building test in test_1.0-1.debian.tar.xz
dpkg-source: info: building test in test_1.0-1.dsc
debian/rules binary
dh binary
dpkg-deb: building package 'test' in '../test_1.0-1_all.deb'.
${_dpkg_genchanges}../test_1.0-1_${_ARCH}.changes
dpkg-genchanges: including full source code in upload
dpkg-source --after-build .
dpkg-buildpackage: full upload (original source is included)
Now signing changes and any dsc files...
EOS
if command -v dpkg-genbuildinfo >/dev/null; then
cat >> ${WORKDIR}/package_lifecycle/debuild.txt <<-EOS
signfile dsc test_1.0-1.dsc uscan test key (no secret) <none@debian.org>
fixup_buildinfo test_1.0-1.dsc test_1.0-1_${_ARCH}.buildinfo
signfile buildinfo test_1.0-1_${_ARCH}.buildinfo uscan test key (no secret) <none@debian.org>
fixup_changes dsc test_1.0-1.dsc test_1.0-1_${_ARCH}.changes
fixup_changes buildinfo test_1.0-1_${_ARCH}.buildinfo test_1.0-1_${_ARCH}.changes
signfile changes test_1.0-1_${_ARCH}.changes uscan test key (no secret) <none@debian.org>
Successfully signed dsc, buildinfo, changes files
EOS
else
cat >> ${WORKDIR}/package_lifecycle/debuild.txt <<-EOS
signfile dsc test_1.0-1.dsc uscan test key (no secret) <none@debian.org>
fixup_changes dsc test_1.0-1.dsc test_1.0-1_${_ARCH}.changes
signfile changes test_1.0-1_${_ARCH}.changes uscan test key (no secret) <none@debian.org>
Successfully signed dsc, changes files
EOS
fi
runCommandOutCmpFile "-k'uscan test key (no secret) <none@debian.org>'" "${WORKDIR}/package_lifecycle/debuild.txt" "" 0
cd ${WORKDIR}
}
test_dscverify () {
cd ${WORKDIR}/package_lifecycle
COMMAND='dscverify --no-conf --keyring $GPGHOME/pubring.gpg'
cat > ${WORKDIR}/package_lifecycle/dscverify.txt <<-EOS
${WORKDIR}/package_lifecycle/test_1.0-1.dsc:
Good signature found
validating test_1.0.orig.tar.xz
validating test_1.0-1.debian.tar.xz
All files validated successfully.
EOS
runCommandOutCmpFile "${WORKDIR}/package_lifecycle/test_1.0-1.dsc" "${WORKDIR}/package_lifecycle/dscverify.txt" "" 0
cd ${WORKDIR}
}
test_dscextractControl () {
cd ${WORKDIR}/package_lifecycle
COMMAND='dscextract'
cat > ${WORKDIR}/package_lifecycle/dscextractControl.txt <<-EOS
Source: test
Section: devel
Priority: optional
Maintainer: Devscripts Devel Team <devscripts-devel@lists.alioth.debian.org>
Uploaders: Testophilus Testownik <tester@testity.org>
Standards-Version: 4.5.0
Rules-Requires-Root: no
Package: test
Architecture: all
Description: Short description
Longer description
EOS
runCommandOutCmpFile "test_1.0-1.dsc debian/control" "dscextractControl.txt" "" 0
cd ${WORKDIR}
}
test_dscextractChangelog () {
cd ${WORKDIR}/package_lifecycle
COMMAND='dscextract'
cat > ${WORKDIR}/package_lifecycle/dscextractChangelog.txt <<-EOS
test (1.0-1) unstable; urgency=low
* Initial packaging
-- Testophilus Testownik <tester@testity.org>
EOS
runCommandOutCmpFile "test_1.0-1.dsc debian/changelog" "dscextractChangelog.txt" "" 0
cd ${WORKDIR}
}
test_debchange () {
cd ${WORKDIR}/package_lifecycle/test
COMMAND='debchange'
export DEBFULLNAME='Testophilus Testownik'
export DEBEMAIL='tester@testity.org'
cat > ${WORKDIR}/package_lifecycle/debchange.txt <<-EOS
test (1.0-2) UNRELEASED; urgency=medium
* new killer app functionality
-- Testophilus Testownik <tester@testity.org>
test (1.0-1) unstable; urgency=low
* Initial packaging
-- Testophilus Testownik <tester@testity.org>
EOS
runCommand "-iU 'new killer app functionality'" "" "" 0
COMMAND=cat
runCommandOutCmpFile "debian/changelog" "../debchange.txt" "" 0
cd ${WORKDIR}
}
test_list_unreleased () {
cd ${WORKDIR}/package_lifecycle/test
COMMAND='list-unreleased'
cat > ${WORKDIR}/package_lifecycle/list-unreleased.txt <<-EOS
test (1.0-2) UNRELEASED; urgency=medium
* new killer app functionality
-- Testophilus Testownik <tester@testity.org>
EOS
runCommandOutCmpFile "-c -R" "../list-unreleased.txt" "" 0
cd ${WORKDIR}
}
test_debuild2() {
export GNUPGHOME=$GPGHOME
cd ${WORKDIR}/package_lifecycle/test
COMMAND='LC_ALL=C debuild --no-conf --no-lintian --preserve-envvar=PATH --preserve-envvar=PERL5LIB --preserve-envvar=DEBFULLNAME --preserve-envvar=DEBEMAIL --preserve-envvar=GNUPGHOME --set-envvar=NO_PKG_MANGLE=1'
cat > ${WORKDIR}/package_lifecycle/debuild.txt <<-EOS
dpkg-buildpackage -us -uc -ui
dpkg-buildpackage: source package test
dpkg-buildpackage: source version 1.0-2
dpkg-buildpackage: source distribution UNRELEASED
dpkg-buildpackage: source changed by Testophilus Testownik <tester@testity.org>
dpkg-source --before-build .
dpkg-buildpackage: host architecture ${_ARCH}
debian/rules clean
dh clean
dpkg-source -b .
dpkg-source: info: using source format '3.0 (quilt)'
dpkg-source: info: building test using existing ./test_1.0.orig.tar.xz
dpkg-source: info: building test in test_1.0-2.debian.tar.xz
dpkg-source: info: building test in test_1.0-2.dsc
debian/rules binary
dh binary
dpkg-deb: building package 'test' in '../test_1.0-2_all.deb'.
${_dpkg_genchanges}../test_1.0-2_${_ARCH}.changes
dpkg-genchanges: not including original source code in upload
dpkg-source --after-build .
dpkg-buildpackage: binary and diff upload (original source NOT included)
EOS
runCommandOutCmpFile "-k'uscan test key (no secret) <none@debian.org>'" "${WORKDIR}/package_lifecycle/debuild.txt" "" 0
cd ${WORKDIR}
}
test_debuild_forcesign() {
export GNUPGHOME=$GPGHOME
cd ${WORKDIR}/package_lifecycle/test
COMMAND='LC_ALL=C debuild --no-conf --no-lintian --preserve-envvar=PATH --preserve-envvar=PERL5LIB --preserve-envvar=DEBFULLNAME --preserve-envvar=DEBEMAIL --preserve-envvar=GNUPGHOME --set-envvar=NO_PKG_MANGLE=1 --force-sign'
cat > ${WORKDIR}/package_lifecycle/debuild.txt <<-EOS
dpkg-buildpackage -us -uc -ui
dpkg-buildpackage: source package test
dpkg-buildpackage: source version 1.0-2
dpkg-buildpackage: source distribution UNRELEASED
dpkg-buildpackage: source changed by Testophilus Testownik <tester@testity.org>
dpkg-source --before-build .
dpkg-buildpackage: host architecture ${_ARCH}
debian/rules clean
dh clean
dpkg-source -b .
dpkg-source: info: using source format '3.0 (quilt)'
dpkg-source: info: building test using existing ./test_1.0.orig.tar.xz
dpkg-source: info: building test in test_1.0-2.debian.tar.xz
dpkg-source: info: building test in test_1.0-2.dsc
debian/rules binary
dh binary
dpkg-deb: building package 'test' in '../test_1.0-2_all.deb'.
${_dpkg_genchanges}../test_1.0-2_${_ARCH}.changes
dpkg-genchanges: not including original source code in upload
dpkg-source --after-build .
dpkg-buildpackage: binary and diff upload (original source NOT included)
Now signing changes and any dsc files...
EOS
if command -v dpkg-genbuildinfo >/dev/null; then
cat >> ${WORKDIR}/package_lifecycle/debuild.txt <<-EOS
signfile dsc test_1.0-2.dsc uscan test key (no secret) <none@debian.org>
fixup_buildinfo test_1.0-2.dsc test_1.0-2_${_ARCH}.buildinfo
signfile buildinfo test_1.0-2_${_ARCH}.buildinfo uscan test key (no secret) <none@debian.org>
fixup_changes dsc test_1.0-2.dsc test_1.0-2_${_ARCH}.changes
fixup_changes buildinfo test_1.0-2_${_ARCH}.buildinfo test_1.0-2_${_ARCH}.changes
signfile changes test_1.0-2_${_ARCH}.changes uscan test key (no secret) <none@debian.org>
Successfully signed dsc, buildinfo, changes files
EOS
else
cat >> ${WORKDIR}/package_lifecycle/debuild.txt <<-EOS
signfile dsc test_1.0-2.dsc uscan test key (no secret) <none@debian.org>
fixup_changes dsc test_1.0-2.dsc test_1.0-2_${_ARCH}.changes
signfile changes test_1.0-2_${_ARCH}.changes uscan test key (no secret) <none@debian.org>
Successfully signed dsc, changes files
EOS
fi
runCommandOutCmpFile "-k'uscan test key (no secret) <none@debian.org>'" "${WORKDIR}/package_lifecycle/debuild.txt" "" 0
cd ${WORKDIR}
}
test_debdiff () {
cd ${WORKDIR}/package_lifecycle
COMMAND='debdiff --no-conf'
cat > ${WORKDIR}/package_lifecycle/debdiff.txt <<-EOS
File lists identical (after any substitutions)
Control files: lines which differ (wdiff format)
------------------------------------------------
Version: [-1.0-1-] {+1.0-2+}
EOS
runCommandOutCmpFile "test_1.0-1_${_ARCH}.changes test_1.0-2_${_ARCH}.changes" "debdiff.txt" "" 0
cd ${WORKDIR}
}
oneTimeTearDown () {
rm -rf ${WORKDIR}/package_lifecycle
gpgconf --homedir "$GPGHOME" --kill gpg-agent
rm -rf "$GPGHOME"
}
cd ${WORKDIR}
. shunit2