summaryrefslogtreecommitdiffstats
path: root/src/at/deb-format.at
diff options
context:
space:
mode:
Diffstat (limited to 'src/at/deb-format.at')
-rw-r--r--src/at/deb-format.at666
1 files changed, 666 insertions, 0 deletions
diff --git a/src/at/deb-format.at b/src/at/deb-format.at
new file mode 100644
index 0000000..e67ee10
--- /dev/null
+++ b/src/at/deb-format.at
@@ -0,0 +1,666 @@
+AT_SETUP([dpkg-deb options])
+AT_KEYWORDS([dpkg-deb command-line])
+
+AT_CHECK([dpkg-deb --version], [], [ignore])
+AT_CHECK([dpkg-deb --help], [], [ignore])
+
+AT_CLEANUP
+
+
+AT_SETUP([dpkg-deb .deb format 0.93x])
+AT_KEYWORDS([dpkg-deb deb-old])
+
+AT_SKIP_IF([! command -v gzip >/dev/null])
+
+AT_DATA([pkg-deb-old-bogus-only-version.deb], [0.93
+])
+AT_CHECK([
+# Check truncated old deb w/ only version magic
+dpkg-deb --info pkg-deb-old-bogus-only-version.deb
+], [2], [], [dpkg-deb: error: unexpected end of file in archive control member size in pkg-deb-old-bogus-only-version.deb
+])
+
+DPKG_GEN_CONTROL([pkg-deb-old-format])
+DPKG_MOD_CONTROL([pkg-deb-old-format],
+ [s/^Description:.*$/$& - deb old format support/])
+AT_DATA([pkg-deb-old-format/file-templ], [test
+])
+AT_CHECK([
+# Initialize the template package
+mv pkg-deb-old-format pkg-old-templ
+cp $top_srcdir/ChangeLog.old pkg-old-templ/
+chmod 0644 pkg-old-templ/ChangeLog.old
+chmod -R u+w pkg-old-templ
+find pkg-old-templ | xargs touch -t 197001010100.00
+dpkg-deb --deb-format=0.939000 --root-owner-group -b pkg-old-templ >/dev/null
+
+dpkg-deb --ctrl-tarfile pkg-old-templ.deb >ctrl.tar
+dpkg-deb --fsys-tarfile pkg-old-templ.deb >fsys.tar
+gzip -n ctrl.tar
+gzip -n fsys.tar
+
+# Create deb-old 0.939
+echo '0.939000' >pkg-old.deb
+DPKG_FILE_SIZE([ctrl.tar.gz]) >>pkg-old.deb
+cat ctrl.tar.gz >>pkg-old.deb
+cat fsys.tar.gz >>pkg-old.deb
+
+# Create deb-old-old-old 0.931
+mkdir -p pkg-old-0931-templ/.DEBIAN
+cp pkg-old-templ/DEBIAN/* pkg-old-0931-templ/.DEBIAN/
+find pkg-old-0931-templ | xargs touch -t 197001010100.00
+$TAR czf ctrl-0931.tar.gz --format=gnu --mtime @0 --clamp-mtime --owner root:0 --group root:0 -C pkg-old-0931-templ .DEBIAN
+
+echo '0.931000' >pkg-old-0931.deb
+DPKG_FILE_SIZE([ctrl-0931.tar.gz]) >>pkg-old-0931.deb
+cat ctrl-0931.tar.gz >>pkg-old-0931.deb
+cat fsys.tar.gz >>pkg-old-0931.deb
+
+# Create deb-old-old template
+mkdir -p pkg-old-0932-templ/DEBIAN
+cp pkg-old-templ/DEBIAN/* pkg-old-0932-templ/DEBIAN/
+find pkg-old-0932-templ | xargs touch -t 197001010100.00
+$TAR czf ctrl-0932.tar.gz --format=gnu --mtime @0 --clamp-mtime --owner root:0 --group root:0 -C pkg-old-0932-templ DEBIAN
+
+# Create deb-old-old 0.932
+echo '0.932000' >pkg-old-0932.deb
+DPKG_FILE_SIZE([ctrl-0932.tar.gz]) >>pkg-old-0932.deb
+cat ctrl-0932.tar.gz >>pkg-old-0932.deb
+cat fsys.tar.gz >>pkg-old-0932.deb
+
+# Create deb-old-old 0.933
+echo '0.933000' >pkg-old-0933.deb
+DPKG_FILE_SIZE([ctrl-0932.tar.gz]) >>pkg-old-0933.deb
+cat ctrl-0932.tar.gz >>pkg-old-0933.deb
+cat fsys.tar.gz >>pkg-old-0933.deb
+])
+
+DEB_OLD_CTRL_SIZE=$(DPKG_FILE_SIZE([ctrl.tar.gz]))
+DEB_OLD_FSYS_SIZE=$(DPKG_FILE_SIZE([fsys.tar.gz]))
+DEB_OLD_SIZE=$(DPKG_FILE_SIZE([pkg-old.deb]))
+
+AT_CHECK_UNQUOTED([
+# Check old package metadata
+dpkg-deb -I pkg-old.deb
+], [], [ old Debian package, version 0.939000.
+ size $DEB_OLD_SIZE bytes: control archive=$DEB_OLD_CTRL_SIZE, main archive=$DEB_OLD_FSYS_SIZE.
+ 201 bytes, 7 lines control
+ Package: pkg-deb-old-format
+ Version: 0.0-1
+ Section: test
+ Priority: extra
+ Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org>
+ Architecture: all
+ Description: test package - deb old format support
+])
+
+DEB_OLD_0931_SIZE=$(DPKG_FILE_SIZE([pkg-old-0931.deb]))
+DEB_OLD_0931_CTRL_SIZE=$(DPKG_FILE_SIZE([ctrl-0931.tar.gz]))
+
+AT_CHECK_UNQUOTED([
+# Check old package metadata
+dpkg-deb -I pkg-old-0931.deb
+], [], [ old Debian package, version 0.931000.
+ size $DEB_OLD_0931_SIZE bytes: control archive=$DEB_OLD_0931_CTRL_SIZE, main archive=$DEB_OLD_FSYS_SIZE.
+ 201 bytes, 7 lines control
+ Package: pkg-deb-old-format
+ Version: 0.0-1
+ Section: test
+ Priority: extra
+ Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org>
+ Architecture: all
+ Description: test package - deb old format support
+])
+
+DEB_OLD_0932_SIZE=$(DPKG_FILE_SIZE([pkg-old-0932.deb]))
+DEB_OLD_0932_CTRL_SIZE=$(DPKG_FILE_SIZE([ctrl-0932.tar.gz]))
+
+AT_CHECK_UNQUOTED([
+# Check old package metadata
+dpkg-deb -I pkg-old-0932.deb
+], [], [ old Debian package, version 0.932000.
+ size $DEB_OLD_0932_SIZE bytes: control archive=$DEB_OLD_0932_CTRL_SIZE, main archive=$DEB_OLD_FSYS_SIZE.
+ 201 bytes, 7 lines control
+ Package: pkg-deb-old-format
+ Version: 0.0-1
+ Section: test
+ Priority: extra
+ Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org>
+ Architecture: all
+ Description: test package - deb old format support
+])
+
+DEB_OLD_0933_SIZE=$(DPKG_FILE_SIZE([pkg-old-0933.deb]))
+DEB_OLD_0933_CTRL_SIZE=$DEB_OLD_0932_CTRL_SIZE
+
+AT_CHECK_UNQUOTED([
+# Check old package metadata
+dpkg-deb -I pkg-old-0933.deb
+], [], [ old Debian package, version 0.933000.
+ size $DEB_OLD_0933_SIZE bytes: control archive=$DEB_OLD_0933_CTRL_SIZE, main archive=$DEB_OLD_FSYS_SIZE.
+ 201 bytes, 7 lines control
+ Package: pkg-deb-old-format
+ Version: 0.0-1
+ Section: test
+ Priority: extra
+ Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org>
+ Architecture: all
+ Description: test package - deb old format support
+])
+
+AT_CHECK([
+# Check old package contents
+dpkg-deb -c pkg-old.deb
+], [], [drwxr-xr-x root/root 0 1970-01-01 00:00 ./
+-rw-r--r-- root/root 641345 1970-01-01 00:00 ./ChangeLog.old
+-rw-r--r-- root/root 5 1970-01-01 00:00 ./file-templ
+])
+
+AT_CHECK([
+# Check old package contents
+dpkg-deb -c pkg-old-0931.deb
+], [], [drwxr-xr-x root/root 0 1970-01-01 00:00 ./
+-rw-r--r-- root/root 641345 1970-01-01 00:00 ./ChangeLog.old
+-rw-r--r-- root/root 5 1970-01-01 00:00 ./file-templ
+])
+
+AT_CHECK([
+# Check old package contents
+dpkg-deb -c pkg-old-0932.deb
+], [], [drwxr-xr-x root/root 0 1970-01-01 00:00 ./
+-rw-r--r-- root/root 641345 1970-01-01 00:00 ./ChangeLog.old
+-rw-r--r-- root/root 5 1970-01-01 00:00 ./file-templ
+])
+
+AT_CHECK([
+# Check old package contents
+dpkg-deb -c pkg-old-0933.deb
+], [], [drwxr-xr-x root/root 0 1970-01-01 00:00 ./
+-rw-r--r-- root/root 641345 1970-01-01 00:00 ./ChangeLog.old
+-rw-r--r-- root/root 5 1970-01-01 00:00 ./file-templ
+])
+
+AT_CLEANUP
+
+m4_define([DPKG_GEN_PKG_DEB_FORMAT_TEMPL], [
+ DPKG_GEN_CONTROL([pkg-deb-format])
+ DPKG_MOD_CONTROL([pkg-deb-format],
+ [s/^Description:.*$/$& - deb format support/])
+ AT_DATA([pkg-deb-format/file-templ], [test
+])
+ AT_CHECK([
+ # Initialize the template package
+ mv pkg-deb-format pkg-templ
+ cp $top_srcdir/ChangeLog.old pkg-templ/
+ chmod 0644 pkg-templ/ChangeLog.old
+ chmod -R u+w pkg-templ
+ find pkg-templ | xargs touch -t 197001010100.00
+ dpkg-deb --uniform-compression --root-owner-group -Znone -b pkg-templ >/dev/null
+
+ # Extract the base members
+ ar x pkg-templ.deb
+ gzip -cn control.tar >control.tar.gz
+ gzip -cn data.tar >data.tar.gz
+ ])
+])
+
+
+AT_SETUP([dpkg-deb .deb format 2.x (core)])
+AT_KEYWORDS([dpkg-deb deb])
+
+AT_SKIP_IF([! command -v gzip >/dev/null])
+
+AT_DATA([pkg-deb-bogus-empty.deb], [])
+AT_CHECK([
+# Check truncated deb w/ 0 size
+dpkg-deb --info pkg-deb-bogus-empty.deb
+], [2], [], [dpkg-deb: error: unexpected end of file in archive magic version number in pkg-deb-bogus-empty.deb
+])
+
+AT_DATA([unknown], [])
+
+DPKG_GEN_PKG_DEB_FORMAT_TEMPL()
+
+AT_CHECK([
+# Test debian-binary with 2.x versions
+echo 2.999 >debian-binary
+ar qSc pkg-version-2x.deb debian-binary control.tar data.tar
+ar t pkg-version-2x.deb
+ar x pkg-templ.deb debian-binary
+dpkg-deb -I pkg-version-2x.deb
+], [], [debian-binary
+control.tar
+data.tar
+ new Debian package, version 2.999.
+ size 655554 bytes: control archive=10240 bytes.
+ 193 bytes, 7 lines control
+ Package: pkg-deb-format
+ Version: 0.0-1
+ Section: test
+ Priority: extra
+ Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org>
+ Architecture: all
+ Description: test package - deb format support
+])
+
+AT_CHECK([
+# Test debian-binary with extra lines
+echo "extra line" >>debian-binary
+ar qSc pkg-magic-extra.deb debian-binary control.tar data.tar
+ar t pkg-magic-extra.deb
+ar x pkg-templ.deb debian-binary
+dpkg-deb -I pkg-magic-extra.deb
+], [], [debian-binary
+control.tar
+data.tar
+ new Debian package, version 2.0.
+ size 655564 bytes: control archive=10240 bytes.
+ 193 bytes, 7 lines control
+ Package: pkg-deb-format
+ Version: 0.0-1
+ Section: test
+ Priority: extra
+ Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org>
+ Architecture: all
+ Description: test package - deb format support
+])
+
+AT_CHECK([
+# Test missing debian-binary member
+cp pkg-templ.deb pkg-missing-magic.deb
+ar d pkg-missing-magic.deb debian-binary
+ar t pkg-missing-magic.deb
+dpkg-deb -I pkg-missing-magic.deb
+], [2], [control.tar
+data.tar
+], [dpkg-deb: error: file 'pkg-missing-magic.deb' is not a Debian binary archive (try dpkg-split?)
+])
+
+AT_CHECK([
+# Test missing control member
+cp pkg-templ.deb pkg-missing-control.deb
+ar d pkg-missing-control.deb control.tar
+ar t pkg-missing-control.deb
+dpkg-deb -I pkg-missing-control.deb
+], [2], [debian-binary
+data.tar
+], [dpkg-deb: error: archive 'pkg-missing-control.deb' has premature member 'data.tar' before 'control.tar', giving up
+])
+
+AT_CHECK([
+# Test missing data member
+cp pkg-templ.deb pkg-missing-data.deb
+ar d pkg-missing-data.deb data.tar
+ar t pkg-missing-data.deb
+dpkg-deb -c pkg-missing-data.deb
+], [2], [debian-binary
+control.tar
+], [dpkg-deb: error: unexpected end of file in archive member header in pkg-missing-data.deb
+])
+
+AT_CHECK([
+# Test duplicate debian-binary member
+ar qSc pkg-duplicate-magic.deb debian-binary debian-binary control.tar data.tar
+ar t pkg-duplicate-magic.deb
+dpkg-deb -I pkg-duplicate-magic.deb
+], [2], [debian-binary
+debian-binary
+control.tar
+data.tar
+], [dpkg-deb: error: archive 'pkg-duplicate-magic.deb' has premature member 'debian-binary' before 'control.tar', giving up
+])
+
+AT_CHECK([
+# Test duplicate control member
+ar qSc pkg-duplicate-control.deb debian-binary control.tar control.tar data.tar
+ar t pkg-duplicate-control.deb
+dpkg-deb -c pkg-duplicate-control.deb
+], [2], [debian-binary
+control.tar
+control.tar
+data.tar
+], [dpkg-deb: error: archive 'pkg-duplicate-control.deb' contains two control members, giving up
+])
+
+AT_CHECK([
+# Test mixed member (index 1)
+ar qSc pkg-mixed-1-member.deb debian-binary unknown control.tar data.tar
+ar t pkg-mixed-1-member.deb
+dpkg-deb -I pkg-mixed-1-member.deb
+], [2], [debian-binary
+unknown
+control.tar
+data.tar
+], [dpkg-deb: error: archive 'pkg-mixed-1-member.deb' has premature member 'unknown' before 'control.tar', giving up
+])
+
+AT_CHECK([
+# Test mixed member (index 2)
+ar qSc pkg-mixed-2-member.deb debian-binary control.tar unknown data.tar
+ar t pkg-mixed-2-member.deb
+dpkg-deb -c pkg-mixed-2-member.deb
+], [2], [debian-binary
+control.tar
+unknown
+data.tar
+], [dpkg-deb: error: archive 'pkg-mixed-2-member.deb' has premature member 'unknown' before 'data.tar', giving up
+])
+
+AT_CHECK([
+# Test swapped control and data members
+cp pkg-templ.deb pkg-swap-members.deb
+ar ma data.tar pkg-swap-members.deb control.tar
+ar t pkg-swap-members.deb
+dpkg-deb -I pkg-swap-members.deb
+], [2], [debian-binary
+data.tar
+control.tar
+], [dpkg-deb: error: archive 'pkg-swap-members.deb' has premature member 'data.tar' before 'control.tar', giving up
+])
+
+AT_CHECK([
+# Test extra member
+cp pkg-templ.deb pkg-extra-member.deb
+ar qS pkg-extra-member.deb unknown
+ar t pkg-extra-member.deb
+dpkg-deb -I pkg-extra-member.deb
+], [], [debian-binary
+control.tar
+data.tar
+unknown
+ new Debian package, version 2.0.
+ size 655612 bytes: control archive=10240 bytes.
+ 193 bytes, 7 lines control
+ Package: pkg-deb-format
+ Version: 0.0-1
+ Section: test
+ Priority: extra
+ Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org>
+ Architecture: all
+ Description: test package - deb format support
+])
+
+AT_DATA([_ignore], [])
+AT_CHECK([
+# Test _ member
+ar qSc pkg-under-member.deb debian-binary _ignore control.tar data.tar
+ar t pkg-under-member.deb
+dpkg-deb -I pkg-under-member.deb
+], [], [debian-binary
+_ignore
+control.tar
+data.tar
+ new Debian package, version 2.0.
+ size 655612 bytes: control archive=10240 bytes.
+ 193 bytes, 7 lines control
+ Package: pkg-deb-format
+ Version: 0.0-1
+ Section: test
+ Priority: extra
+ Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org>
+ Architecture: all
+ Description: test package - deb format support
+])
+
+AT_CHECK([
+# Test data.tar.bad member
+$PERL -E 'print "\0" x 4096' >data.tar.bad
+ar qSc pkg-data-bad.deb debian-binary control.tar.gz data.tar.bad
+ar t pkg-data-bad.deb
+dpkg-deb -c pkg-data-bad.deb
+], [2], [debian-binary
+control.tar.gz
+data.tar.bad
+], [dpkg-deb: error: archive 'pkg-data-bad.deb' uses unknown compression for member 'data.tar.bad', giving up
+])
+
+AT_CHECK([
+# Test control.tar member
+ar qSc pkg-control-none.deb debian-binary control.tar data.tar
+ar t pkg-control-none.deb
+dpkg-deb -I pkg-control-none.deb
+], [], [debian-binary
+control.tar
+data.tar
+ new Debian package, version 2.0.
+ size 655552 bytes: control archive=10240 bytes.
+ 193 bytes, 7 lines control
+ Package: pkg-deb-format
+ Version: 0.0-1
+ Section: test
+ Priority: extra
+ Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org>
+ Architecture: all
+ Description: test package - deb format support
+])
+
+AT_CHECK([
+# Test data.tar member
+ar qSc pkg-data-none.deb debian-binary control.tar.gz data.tar
+ar t pkg-data-none.deb
+dpkg-deb -c pkg-data-none.deb
+], [], [debian-binary
+control.tar.gz
+data.tar
+drwxr-xr-x root/root 0 1970-01-01 00:00 ./
+-rw-r--r-- root/root 641345 1970-01-01 00:00 ./ChangeLog.old
+-rw-r--r-- root/root 5 1970-01-01 00:00 ./file-templ
+])
+
+AT_CHECK([
+# Test data.tar.gz member
+ar qSc pkg-data-gz.deb debian-binary control.tar.gz data.tar.gz
+ar t pkg-data-gz.deb
+dpkg-deb -c pkg-data-gz.deb
+], [], [debian-binary
+control.tar.gz
+data.tar.gz
+drwxr-xr-x root/root 0 1970-01-01 00:00 ./
+-rw-r--r-- root/root 641345 1970-01-01 00:00 ./ChangeLog.old
+-rw-r--r-- root/root 5 1970-01-01 00:00 ./file-templ
+])
+
+# Create .deb with non-uniform data.tar/control.tar member compression
+ar qSc pkg-mixed-comp.deb debian-binary control.tar data.tar.gz
+DEB_MIXED_COMP_SIZE=$(DPKG_FILE_SIZE([pkg-mixed-comp.deb]))
+
+AT_CHECK_UNQUOTED([
+# Test non-uniform data.tar/control.tar member compression
+ar t pkg-mixed-comp.deb
+dpkg-deb -I pkg-mixed-comp.deb
+dpkg-deb -c pkg-mixed-comp.deb
+], [], [debian-binary
+control.tar
+data.tar.gz
+ new Debian package, version 2.0.
+ size $DEB_MIXED_COMP_SIZE bytes: control archive=10240 bytes.
+ 193 bytes, 7 lines control
+ Package: pkg-deb-format
+ Version: 0.0-1
+ Section: test
+ Priority: extra
+ Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org>
+ Architecture: all
+ Description: test package - deb format support
+drwxr-xr-x root/root 0 1970-01-01 00:00 ./
+-rw-r--r-- root/root 641345 1970-01-01 00:00 ./ChangeLog.old
+-rw-r--r-- root/root 5 1970-01-01 00:00 ./file-templ
+])
+
+AT_CHECK([
+# Test building and extracting none compressed archive
+dpkg-deb --uniform-compression --root-owner-group -Znone -b pkg-templ pkg-comp-none.deb >/dev/null
+dpkg-deb --ctrl-tarfile pkg-comp-none.deb >ctrl-none.tar
+dpkg-deb --fsys-tarfile pkg-comp-none.deb >fsys-none.tar
+cmp ctrl-none.tar control.tar
+cmp fsys-none.tar data.tar
+])
+
+AT_CHECK([
+# Test building and extracting gzip compressed archive
+dpkg-deb --uniform-compression --root-owner-group -Zgzip -b pkg-templ pkg-comp-gzip.deb >/dev/null
+dpkg-deb --ctrl-tarfile pkg-comp-gzip.deb >ctrl-gzip.tar
+dpkg-deb --fsys-tarfile pkg-comp-gzip.deb >fsys-gzip.tar
+cmp ctrl-gzip.tar control.tar
+cmp fsys-gzip.tar data.tar
+])
+
+AT_CLEANUP
+
+
+AT_SETUP([dpkg-deb .deb format 2.x (xz)])
+AT_KEYWORDS([dpkg-deb deb])
+
+AT_SKIP_IF([! command -v gzip >/dev/null])
+AT_SKIP_IF([! command -v xz >/dev/null])
+
+DPKG_GEN_PKG_DEB_FORMAT_TEMPL()
+AT_CHECK([
+# Extract the base members
+xz -c control.tar >control.tar.xz
+xz -c data.tar >data.tar.xz
+])
+
+AT_CHECK([
+# Test control.tar.xz member
+ar qSc pkg-control-xz.deb debian-binary control.tar.xz data.tar.xz
+ar t pkg-control-xz.deb
+dpkg-deb -c pkg-control-xz.deb
+], [], [debian-binary
+control.tar.xz
+data.tar.xz
+drwxr-xr-x root/root 0 1970-01-01 00:00 ./
+-rw-r--r-- root/root 641345 1970-01-01 00:00 ./ChangeLog.old
+-rw-r--r-- root/root 5 1970-01-01 00:00 ./file-templ
+])
+
+AT_CHECK([
+# Test data.tar.xz member
+ar qSc pkg-data-xz.deb debian-binary control.tar.gz data.tar.xz
+ar t pkg-data-xz.deb
+dpkg-deb -c pkg-data-xz.deb
+], [], [debian-binary
+control.tar.gz
+data.tar.xz
+drwxr-xr-x root/root 0 1970-01-01 00:00 ./
+-rw-r--r-- root/root 641345 1970-01-01 00:00 ./ChangeLog.old
+-rw-r--r-- root/root 5 1970-01-01 00:00 ./file-templ
+])
+
+AT_CHECK([
+# Test building and extracting xz compressed archive
+dpkg-deb --uniform-compression --root-owner-group -Zxz -b pkg-templ pkg-comp-xz.deb >/dev/null
+dpkg-deb --ctrl-tarfile pkg-comp-xz.deb >ctrl-xz.tar
+dpkg-deb --fsys-tarfile pkg-comp-xz.deb >fsys-xz.tar
+cmp ctrl-xz.tar control.tar
+cmp fsys-xz.tar data.tar
+])
+
+AT_CLEANUP
+
+
+AT_SETUP([dpkg-deb .deb format 2.x (zstd)])
+AT_KEYWORDS([dpkg-deb deb])
+
+AT_SKIP_IF([! command -v gzip >/dev/null])
+AT_SKIP_IF([! command -v zstd >/dev/null])
+
+DPKG_GEN_PKG_DEB_FORMAT_TEMPL()
+AT_CHECK([
+# Extract the base members
+zstd -c control.tar >control.tar.zst
+zstd -c data.tar >data.tar.zst
+])
+
+AT_CHECK([
+# Test control.tar.zst member
+ar qSc pkg-control-zst.deb debian-binary control.tar.zst data.tar.zst
+ar t pkg-control-zst.deb
+dpkg-deb -c pkg-control-zst.deb
+], [], [debian-binary
+control.tar.zst
+data.tar.zst
+drwxr-xr-x root/root 0 1970-01-01 00:00 ./
+-rw-r--r-- root/root 641345 1970-01-01 00:00 ./ChangeLog.old
+-rw-r--r-- root/root 5 1970-01-01 00:00 ./file-templ
+])
+
+AT_CHECK([
+# Test data.tar.zst member
+ar qSc pkg-data-zst.deb debian-binary control.tar.gz data.tar.zst
+ar t pkg-data-zst.deb
+dpkg-deb -c pkg-data-zst.deb
+], [], [debian-binary
+control.tar.gz
+data.tar.zst
+drwxr-xr-x root/root 0 1970-01-01 00:00 ./
+-rw-r--r-- root/root 641345 1970-01-01 00:00 ./ChangeLog.old
+-rw-r--r-- root/root 5 1970-01-01 00:00 ./file-templ
+])
+
+AT_CHECK([
+# Test building and extracting zstd compressed archive
+dpkg-deb --uniform-compression --root-owner-group -Zzstd -b pkg-templ pkg-comp-zstd.deb >/dev/null
+dpkg-deb --ctrl-tarfile pkg-comp-zstd.deb >ctrl-zstd.tar
+dpkg-deb --fsys-tarfile pkg-comp-zstd.deb >fsys-zstd.tar
+cmp ctrl-zstd.tar control.tar
+cmp fsys-zstd.tar data.tar
+])
+
+AT_CLEANUP
+
+
+AT_SETUP([dpkg-deb .deb format 2.x (bzip2)])
+AT_KEYWORDS([dpkg-deb deb])
+
+AT_SKIP_IF([! command -v gzip >/dev/null])
+AT_SKIP_IF([! command -v bzip2 >/dev/null])
+
+DPKG_GEN_PKG_DEB_FORMAT_TEMPL()
+AT_CHECK([
+# Extract the base members
+bzip2 -c data.tar >data.tar.bz2
+])
+
+AT_CHECK([
+# Test data.tar.bz2 member
+ar qSc pkg-data-bz2.deb debian-binary control.tar.gz data.tar.bz2
+ar t pkg-data-bz2.deb
+dpkg-deb -c pkg-data-bz2.deb
+], [], [debian-binary
+control.tar.gz
+data.tar.bz2
+drwxr-xr-x root/root 0 1970-01-01 00:00 ./
+-rw-r--r-- root/root 641345 1970-01-01 00:00 ./ChangeLog.old
+-rw-r--r-- root/root 5 1970-01-01 00:00 ./file-templ
+])
+
+AT_CLEANUP
+
+
+AT_SETUP([dpkg-deb .deb format 2.x (lzma)])
+AT_KEYWORDS([dpkg-deb deb])
+
+AT_SKIP_IF([! command -v gzip >/dev/null])
+AT_SKIP_IF([! command -v lzma >/dev/null])
+
+DPKG_GEN_PKG_DEB_FORMAT_TEMPL()
+AT_CHECK([
+# Extract the base members
+lzma -c data.tar >data.tar.lzma
+])
+
+AT_CHECK([
+# Test data.tar.lzma member
+ar qSc pkg-data-lzma.deb debian-binary control.tar.gz data.tar.lzma
+ar t pkg-data-lzma.deb
+dpkg-deb -c pkg-data-lzma.deb
+], [], [debian-binary
+control.tar.gz
+data.tar.lzma
+drwxr-xr-x root/root 0 1970-01-01 00:00 ./
+-rw-r--r-- root/root 641345 1970-01-01 00:00 ./ChangeLog.old
+-rw-r--r-- root/root 5 1970-01-01 00:00 ./file-templ
+])
+
+AT_CLEANUP