Browse Source

test: Add an initial functional test suite for dpkg-deb and dpkg-split

Move various easy tests from the dpkg-tests repository, so that we can
test whether the infrastructure is viable.
Guillem Jover 9 years ago
parent
commit
57b2ce9c2d
12 changed files with 602 additions and 0 deletions
  1. 1 0
      Makefile.am
  2. 5 0
      configure.ac
  3. 1 0
      debian/changelog
  4. 5 0
      t-func/.gitignore
  5. 44 0
      t-func/Makefile.am
  6. 26 0
      t-func/atlocal.in
  7. 42 0
      t-func/deb-content.at
  8. 21 0
      t-func/deb-fields.at
  9. 329 0
      t-func/deb-format.at
  10. 86 0
      t-func/deb-split.at
  11. 32 0
      t-func/local.at
  12. 10 0
      t-func/testsuite.at

+ 1 - 0
Makefile.am

@@ -12,6 +12,7 @@ SUBDIRS = \
 	utils \
 	$(MAYBE_DSELECT) \
 	scripts \
+	t-func \
 	po \
 	man
 

+ 5 - 0
configure.ac

@@ -173,8 +173,13 @@ DPKG_ARCHITECTURE
 AC_DEFINE([PACKAGE_RELEASE], [PACKAGE_VERSION " (" ARCHITECTURE ")"],
   [Define the project release information, version and architecture])
 
+AC_CONFIG_TESTDIR([t-func])
+AM_MISSING_PROG([AUTOM4TE], [autom4te])
+
 AC_CONFIG_FILES([
   Makefile
+  t-func/Makefile
+  t-func/atlocal
   dpkg-deb/Makefile
   dpkg-split/Makefile
   dselect/Makefile

+ 1 - 0
debian/changelog

@@ -93,6 +93,7 @@ dpkg (1.18.11) UNRELEASED; urgency=medium
     - Rename test suite commands to be prefixed with «c-» instead of «t-».
     - Add new dpkg-source functional tests.
     - Add new dpkg-buildpackage functional tests.
+    - Add an initial functional test suite for dpkg-deb and dpkg-split.
   * Build system:
     - Add support for profiling perl modules.
     - Clean up compiler and linker automatic flag usage in configure.

+ 5 - 0
t-func/.gitignore

@@ -0,0 +1,5 @@
+testsuite
+testsuite.dir/
+atconfig
+atlocal
+package.m4

+ 44 - 0
t-func/Makefile.am

@@ -0,0 +1,44 @@
+## Process this file with automake to produce Makefile.in
+
+EXTRA_DIST =
+
+EXTRA_DIST += $(srcdir)/package.m4
+
+TESTSUITE_AT = $(srcdir)/testsuite.at
+TESTSUITE_AT += $(srcdir)/local.at
+TESTSUITE_AT += $(srcdir)/deb-format.at
+TESTSUITE_AT += $(srcdir)/deb-fields.at
+TESTSUITE_AT += $(srcdir)/deb-content.at
+TESTSUITE_AT += $(srcdir)/deb-split.at
+EXTRA_DIST += $(TESTSUITE_AT)
+
+TESTSUITE = $(srcdir)/testsuite
+EXTRA_DIST += $(TESTSUITE)
+
+DISTCLEANFILES = atconfig
+
+# The ":;" works around a Bash 3.2 bug when the output is not writable.
+$(srcdir)/package.m4: $(top_srcdir)/configure.ac
+	:;{ \
+	  echo '# Signature of the current package.' && \
+	  echo 'm4_define([AT_PACKAGE_NAME], [$(PACKAGE_NAME)])' && \
+	  echo 'm4_define([AT_PACKAGE_TARNAME], [$(PACKAGE_TARNAME)])' && \
+	  echo 'm4_define([AT_PACKAGE_VERSION], [$(PACKAGE_VERSION)])' && \
+	  echo 'm4_define([AT_PACKAGE_STRING], [$(PACKAGE_STRING)])' && \
+	  echo 'm4_define([AT_PACKAGE_URL], [$(PACKAGE_URL)])' && \
+	  echo 'm4_define([AT_PACKAGE_BUGREPORT], [$(PACKAGE_BUGREPORT)])'; \
+	} >'$(srcdir)/package.m4'
+
+check-local: atconfig atlocal $(TESTSUITE)
+	$(SHELL) '$(TESTSUITE)' $(TESTSUITEFLAGS)
+
+installcheck-local: atconfig atlocal $(TESTSUITE)
+	$(SHELL) '$(TESTSUITE)' AUTOTEST_PATH='$(bindir)' $(TESTSUITEFLAGS)
+
+clean-local:
+	test ! -f '$(TESTSUITE)' || $(SHELL) '$(TESTSUITE)' --clean
+
+AUTOTEST = $(AUTOM4TE) --language=autotest
+$(TESTSUITE): $(srcdir)/package.m4 $(TESTSUITE_AT)
+	$(AUTOTEST) -I '$(srcdir)' -o $@.tmp $@.at
+	mv $@.tmp $@

+ 26 - 0
t-func/atlocal.in

@@ -0,0 +1,26 @@
+# Global shell definitions for the autotest test suite
+
+PATH="@abs_top_builddir@/dpkg-deb:@abs_top_builddir@/dpkg-split:@abs_top_builddir@/src:@abs_top_builddir@/utils:$PATH"
+export PATH
+
+# Setup a sane environment
+LC_ALL=C
+export LC_ALL
+
+TZ=UTC
+export TZ
+
+SOURCE_DATE_EPOCH=0
+export SOURCE_DATE_EPOCH
+
+if [ "$(id -u)" = 0 ]; then
+  ASROOT=
+elif which fakeroot >/dev/null; then
+  ASROOT=fakeroot
+else
+  echo "error: cannot run as root(ish)" >&2
+  exit 1
+fi
+export ASROOT
+
+TESTDATA="@abs_top_srcdir@/t-func"

+ 42 - 0
t-func/deb-content.at

@@ -0,0 +1,42 @@
+AT_TESTED([dpkg-deb])
+
+AT_SETUP([dpkg-deb .deb conffiles])
+AT_KEYWORDS([dpkg-deb deb conffiles])
+
+DPKG_GEN_CONTROL([pkg-conff-dupe])
+DPKG_GEN_FILE([pkg-conff-dupe], [conffiles], [/test-conffile-1
+/test-conffile-2
+/test-conffile-1])
+AT_DATA([pkg-conff-dupe/test-conffile-1], [test init
+])
+AT_DATA([pkg-conff-dupe/test-conffile-2], [test init
+])
+AT_CHECK([
+# Duplicate conffile entries should produce a warning.
+dpkg-deb -b pkg-conff-dupe
+], [0], [ignore], [dpkg-deb: warning: conffile name '/test-conffile-1' is duplicated
+dpkg-deb: warning: ignoring 1 warning about the control file(s)
+])
+
+DPKG_GEN_CONTROL([pkg-conff-noel])
+printf "/test-conffile-1" >"pkg-conff-noel/DEBIAN/conffiles"
+AT_DATA([pkg-conff-noel/test-conffile-1], [test init
+])
+AT_CHECK([
+# Conffiles need a final newline to guarantee there's been no accidental
+# file truncation.
+dpkg-deb -b pkg-conff-noel pkg-conff-noel.deb
+], [2], [ignore], [dpkg-deb: error: conffile name '/test-conffile-1' is too long, or missing final newline
+])
+
+DPKG_GEN_CONTROL([pkg-deb-newline])
+touch 'pkg-deb-newline/file
+newline'
+AT_CHECK([
+# Cannot create package with newlines in filenames.
+dpkg-deb -b pkg-deb-newline
+], [2], [ignore], [dpkg-deb: error: newline not allowed in pathname './file
+newline'
+])
+
+AT_CLEANUP

+ 21 - 0
t-func/deb-fields.at

@@ -0,0 +1,21 @@
+AT_TESTED([dpkg-deb])
+
+AT_SETUP([dpkg-deb .deb fields])
+AT_KEYWORDS([dpkg-deb deb fields])
+
+DPKG_GEN_CONTROL([pkg-package-type-void])
+AT_CHECK([
+dpkg-deb -b pkg-package-type-void
+# Test absence of Package-Type field.
+test -z "$(dpkg-deb -f pkg-package-type-void.deb Package-Type)"
+], [0], [ignore])
+
+DPKG_GEN_CONTROL([pkg-package-type-use])
+DPKG_MOD_CONTROL([pkg-package-type-use], [/^Package:/aPackage-Type: udeb])
+AT_CHECK([
+dpkg-deb -b pkg-package-type-use
+# Test presence of Package-Type field.
+test -n "$(dpkg-deb -f pkg-package-type-use.deb Package-Type)"
+], [0], [ignore])
+
+AT_CLEANUP

+ 329 - 0
t-func/deb-format.at

@@ -0,0 +1,329 @@
+AT_TESTED([dpkg-deb])
+
+AT_SETUP([dpkg-deb options])
+AT_KEYWORDS([dpkg-deb command-line])
+AT_CHECK([dpkg-deb --help], [], [ignore])
+AT_CLEANUP
+
+AT_SETUP([dpkg-deb .deb format])
+AT_KEYWORDS([dpkg-deb deb])
+
+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
+chmod -R u+w pkg-templ
+find pkg-templ | xargs touch -t 197001010100.00
+$ASROOT dpkg-deb --uniform-compression -Znone -b pkg-templ >/dev/null
+
+# Extract the base members
+ar x pkg-templ.deb
+gzip -c control.tar >control.tar.gz
+gzip -c data.tar >data.tar.gz
+xz -c control.tar >control.tar.xz
+xz -c data.tar >data.tar.xz
+bzip2 -c data.tar >data.tar.bz2
+lzma -c data.tar >data.tar.lzma
+touch _ignore
+touch unknown
+])
+
+AT_CHECK([
+# Test debian-binary with 2.x versions
+cp pkg-templ.deb pkg-version-2x.deb
+echo 2.999 >debian-binary
+ar rc pkg-version-2x.deb debian-binary
+ar t pkg-version-2x.deb
+ar x pkg-templ.deb debian-binary
+# XXX: Ideally we would have no need to strip trailing spaces.
+dpkg-deb -I pkg-version-2x.deb | sed -e 's/ *$//'
+], [], [debian-binary
+control.tar
+data.tar
+ new debian package, version 2.999.
+ size 20674 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
+cp pkg-templ.deb pkg-magic-extra.deb
+echo "extra line" >>debian-binary
+ar rc pkg-magic-extra.deb debian-binary
+ar t pkg-magic-extra.deb
+ar x pkg-templ.deb debian-binary
+# XXX: Ideally we would have no need to strip trailing spaces.
+dpkg-deb -I pkg-magic-extra.deb | sed -e 's/ *$//'
+], [], [debian-binary
+control.tar
+data.tar
+ new debian package, version 2.0.
+ size 20684 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 mixed member (index 1)
+cp pkg-templ.deb pkg-mixed-1-member.deb
+ar ra debian-binary pkg-mixed-1-member.deb unknown
+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)
+cp pkg-templ.deb pkg-mixed-2-member.deb
+ar ra control.tar pkg-mixed-2-member.deb unknown
+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 q pkg-extra-member.deb unknown
+ar t pkg-extra-member.deb
+# XXX: Ideally we would have no need to strip trailing spaces.
+dpkg-deb -I pkg-extra-member.deb | sed -e 's/ *$//'
+], [], [debian-binary
+control.tar
+data.tar
+unknown
+ new debian package, version 2.0.
+ size 20732 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 _ member
+cp pkg-templ.deb pkg-under-member.deb
+ar ra debian-binary pkg-under-member.deb _ignore
+ar t pkg-under-member.deb
+# XXX: Ideally we would have no need to strip trailing spaces.
+dpkg-deb -I pkg-under-member.deb | sed -e 's/ *$//'
+], [], [debian-binary
+_ignore
+control.tar
+data.tar
+ new debian package, version 2.0.
+ size 20732 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
+dd if=/dev/zero of=data.tar.bad bs=1K count=4 status=none
+ar rc 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 rc pkg-control-none.deb debian-binary control.tar data.tar
+ar t pkg-control-none.deb
+# XXX: Ideally we would have no need to strip trailing spaces.
+dpkg-deb -I pkg-control-none.deb | sed -e 's/ *$//'
+], [], [debian-binary
+control.tar
+data.tar
+ new debian package, version 2.0.
+ size 20672 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 control.tar.xz member
+ar rc 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         5 1970-01-01 00:00 ./file-templ
+])
+
+AT_CHECK([
+# Test data.tar member
+ar rc 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         5 1970-01-01 00:00 ./file-templ
+])
+
+AT_CHECK([
+# Test data.tar.gz member
+ar rc 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         5 1970-01-01 00:00 ./file-templ
+])
+
+AT_CHECK([
+# Test data.tar.xz member
+ar rc 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         5 1970-01-01 00:00 ./file-templ
+])
+
+AT_CHECK([
+# Test data.tar.bz2 member
+ar rc 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         5 1970-01-01 00:00 ./file-templ
+])
+
+AT_CHECK([
+# Test data.tar.lzma member
+ar rc 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         5 1970-01-01 00:00 ./file-templ
+])
+
+AT_CHECK([
+# Test non-uniform data.tar/control.tar member compression
+ar rc pkg-mixed-comp.deb debian-binary control.tar.xz data.tar.gz
+ar t pkg-mixed-comp.deb
+# XXX: Ideally we would have no need to strip trailing spaces.
+dpkg-deb -I pkg-mixed-comp.deb | sed -e 's/ *$//'
+dpkg-deb -c pkg-mixed-comp.deb
+], [], [debian-binary
+control.tar.xz
+data.tar.gz
+ new debian package, version 2.0.
+ size 682 bytes: control archive=336 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         5 1970-01-01 00:00 ./file-templ
+])
+
+AT_CLEANUP

+ 86 - 0
t-func/deb-split.at

@@ -0,0 +1,86 @@
+AT_TESTED([dpkg-split])
+
+AT_SETUP([dpkg-split options])
+AT_KEYWORDS([dpkg-split command-line])
+AT_CHECK([dpkg-split --help], [], [ignore])
+AT_CLEANUP
+
+AT_SETUP([dpkg-split .deb format])
+AT_KEYWORDS([dpkg-split deb-split])
+
+DPKG_GEN_CONTROL([pkg-split])
+DPKG_MOD_CONTROL([pkg-split],
+                 [s/^Description:.*$/& - normal package to be split/])
+AT_CHECK([
+# Initialize the template package
+chmod -R u+w pkg-split
+yes | dd of=pkg-split/data-file bs=1024 count=1024 status=none
+find pkg-split | xargs touch -t 197001010100.00
+$ASROOT dpkg-deb -b -Znone pkg-split >/dev/null
+])
+
+AT_CHECK([
+# Test splitting a package (in 3 parts: 400 KiB + 400 KiB + 224 KiB)
+dpkg-split -S 400 -s pkg-split.deb pkg-split-part
+test -f pkg-split-part.1of3.deb
+test -f pkg-split-part.2of3.deb
+test -f pkg-split-part.3of3.deb
+], [], [Splitting package pkg-split into 3 parts: 1 2 3 done
+])
+
+DEB_SPLIT_MD5SUM=a4042d88f6da3da8ab2ab191a290ab66
+
+AT_CHECK_UNQUOTED([
+# Test getting information about the split parts (parsing verification)
+dpkg-split -I pkg-split-part.1of3.deb
+dpkg-split -I pkg-split-part.2of3.deb
+dpkg-split -I pkg-split-part.3of3.deb
+], [], [pkg-split-part.1of3.deb:
+    Part format version:            2.1
+    Part of package:                pkg-split
+        ... version:                0.0-1
+        ... architecture:           all
+        ... MD5 checksum:           $DEB_SPLIT_MD5SUM
+        ... length:                 1055178 bytes
+        ... split every:            408576 bytes
+    Part number:                    1/3
+    Part length:                    408576 bytes
+    Part offset:                    0 bytes
+    Part file size (used portion):  408780 bytes
+
+pkg-split-part.2of3.deb:
+    Part format version:            2.1
+    Part of package:                pkg-split
+        ... version:                0.0-1
+        ... architecture:           all
+        ... MD5 checksum:           $DEB_SPLIT_MD5SUM
+        ... length:                 1055178 bytes
+        ... split every:            408576 bytes
+    Part number:                    2/3
+    Part length:                    408576 bytes
+    Part offset:                    408576 bytes
+    Part file size (used portion):  408780 bytes
+
+pkg-split-part.3of3.deb:
+    Part format version:            2.1
+    Part of package:                pkg-split
+        ... version:                0.0-1
+        ... architecture:           all
+        ... MD5 checksum:           $DEB_SPLIT_MD5SUM
+        ... length:                 1055178 bytes
+        ... split every:            408576 bytes
+    Part number:                    3/3
+    Part length:                    238026 bytes
+    Part offset:                    817152 bytes
+    Part file size (used portion):  238230 bytes
+
+])
+
+AT_CHECK([
+# Test joining the split parts back together
+dpkg-split -o pkg-joined.deb -j pkg-split-part.*.deb
+cmp pkg-split.deb pkg-joined.deb
+], [], [Putting package pkg-split together from 3 parts: 1 2 3 done
+])
+
+AT_CLEANUP

+ 32 - 0
t-func/local.at

@@ -0,0 +1,32 @@
+# Dpkg helper macros
+
+m4_pattern_forbid([^DPKG_])
+
+# DPKG_GEN_CONTROL([$pkgname])
+m4_define([DPKG_GEN_CONTROL], [
+  mkdir -p '$1/DEBIAN'
+
+  cat >'$1/DEBIAN/control' <<CTRL_TEMPL
+Package: $1
+Version: 0.0-1
+Section: test
+Priority: extra
+Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org>
+Architecture: all
+Description: test package
+CTRL_TEMPL
+])
+
+# DPKG_MOD_CONTROL([$pkgname], [$sedexpr])
+m4_define([DPKG_MOD_CONTROL], [
+  sed -i -e '$2' '$1/DEBIAN/control'
+])
+
+# DPKG_GEN_FILE([$pkgname], [$file], [$contents])
+m4_define([DPKG_GEN_FILE], [
+  mkdir -p '$1/DEBIAN'
+
+  cat >'$1/DEBIAN/$2' <<CTRL_TEMPL
+$3
+CTRL_TEMPL
+])

+ 10 - 0
t-func/testsuite.at

@@ -0,0 +1,10 @@
+AT_INIT([dpkg tools functional test suite])
+AT_COLOR_TESTS
+
+AT_BANNER([Binary .deb packages])
+m4_include([deb-format.at])
+m4_include([deb-content.at])
+m4_include([deb-fields.at])
+
+AT_BANNER([Split .deb packages])
+m4_include([deb-split.at])