diff options
Diffstat (limited to 'src/at/divert.at')
-rw-r--r-- | src/at/divert.at | 639 |
1 files changed, 639 insertions, 0 deletions
diff --git a/src/at/divert.at b/src/at/divert.at new file mode 100644 index 0000000..f8689d0 --- /dev/null +++ b/src/at/divert.at @@ -0,0 +1,639 @@ +AT_SETUP([dpkg-divert options]) +AT_KEYWORDS([dpkg-divert command-line]) + +DPKG_GEN_FSYS_DIR([/testdir]) + +AT_CHECK([dpkg-divert --version], [], [ignore]) +AT_CHECK([dpkg-divert --help], [], [ignore]) + +AT_CHECK([dpkg-divert --admindir], [2], [], [stderr]) +AT_CHECK([grep -qE '(takes a value|needs.*argument)' stderr]) + +AT_CHECK([DPKG_DIVERT --jachsmitbju], [2], [], [stderr]) +AT_CHECK([grep -q 'unknown option' stderr]) + +AT_CHECK([DPKG_DIVERT --add --remove], [2], [], [stderr]) +AT_CHECK([grep -qE '(conflicting|two).*remove.*add.*' stderr]) + +AT_CHECK([DPKG_DIVERT --divert], [2], [], [stderr]) +AT_CHECK([grep -qE '(takes a value|needs.*argument)' stderr]) + +AT_CHECK([DPKG_DIVERT --divert foo], [2], [], [stderr]) +AT_CHECK([grep -q 'absolute' stderr]) + +AT_CHECK([DPKG_DIVERT --divert "/foo +bar"], [2], [], [stderr]) +AT_CHECK([grep -q 'newline' stderr]) + +AT_CHECK([DPKG_DIVERT --package], [2], [], [stderr]) +AT_CHECK([grep -qE '(takes a value|needs.*argument)' stderr]) + +AT_CHECK([DPKG_DIVERT --package "foo +bar"], [2], [], [stderr]) +AT_CHECK([grep -q 'newline' stderr]) + +AT_CHECK([DPKG_DIVERT --add], [2], [], [stderr]) +AT_CHECK([grep -q 'needs a single argument' stderr]) + +AT_CHECK([DPKG_DIVERT --add foo], [2], [], [stderr]) +AT_CHECK([grep -q 'absolute' stderr]) + +AT_CHECK([DPKG_DIVERT --add "/foo +bar"], [2], [], [stderr]) +AT_CHECK([grep -q 'newline' stderr]) + +AT_CHECK([DPKG_DIVERT --add "/testdir"], [2], [], [stderr]) +AT_CHECK([grep -qE 'director(y|ies)' stderr]) + +AT_CHECK([DPKG_DIVERT --add --divert bar /foo/bar], [2], [], [stderr]) +AT_CHECK([grep -q 'absolute' stderr]) + +AT_CHECK([DPKG_DIVERT --remove], [2], [], [stderr]) +AT_CHECK([grep -q 'needs a single argument' stderr]) + +AT_CHECK([DPKG_DIVERT --remove foo], [2], [], [stderr]) +AT_CHECK([grep -q 'absolute' stderr]) + +AT_CHECK([DPKG_DIVERT --remove "/foo +bar"], [2], [], [stderr]) +AT_CHECK([grep -q 'newline' stderr]) + +AT_CHECK([DPKG_DIVERT --listpackage], [2], [], [stderr]) +AT_CHECK([grep -q 'needs a single argument' stderr]) + +AT_CHECK([DPKG_DIVERT --listpackage foo], [2], [], [stderr]) +AT_CHECK([grep -q 'absolute' stderr]) + +AT_CHECK([DPKG_DIVERT --listpackage "/foo +bar"], [2], [], [stderr]) +AT_CHECK([grep -q 'newline' stderr]) + +AT_CHECK([DPKG_DIVERT --truename], [2], [], [stderr]) +AT_CHECK([grep -q 'needs a single argument' stderr]) + +AT_CHECK([DPKG_DIVERT --truename foo], [2], [], [stderr]) +AT_CHECK([grep -q 'absolute' stderr]) + +AT_CHECK([DPKG_DIVERT --truename "/foo +bar"], [2], [], [stderr]) +AT_CHECK([grep -q 'newline' stderr]) + +AT_CLEANUP + +AT_SETUP([dpkg-divert query (empty db)]) +AT_KEYWORDS([dpkg-divert query]) + +DPKG_GEN_DB_DIVERSIONS([]) + +AT_CHECK([DPKG_DIVERT --list]) +AT_CHECK([DPKG_DIVERT --list '*']) +AT_CHECK([DPKG_DIVERT --list 'baz']) + +AT_CLEANUP + +AT_SETUP([dpkg-divert query (list)]) +AT_KEYWORDS([dpkg-divert query]) + +DPKG_GEN_DB_DIVERSIONS([/bin/sh +/bin/sh.distrib +dash +/usr/share/man/man1/sh.1.gz +/usr/share/man/man1/sh.distrib.1.gz +dash +/usr/bin/nm +/usr/bin/nm.single +binutils-multiarch +]) + +m4_define([di_dash], [diversion of /bin/sh to /bin/sh.distrib by dash +]) +m4_define([di_dashman], + [diversion of /usr/share/man/man1/sh.1.gz to /usr/share/man/man1/sh.distrib.1.gz by dash +]) +m4_define([di_nm], + [diversion of /usr/bin/nm to /usr/bin/nm.single by binutils-multiarch +]) +m4_define([all_di], [m4_join([], di_nm, di_dashman, di_dash)]) + +AT_CHECK([DPKG_DIVERT --list], [], all_di) +AT_CHECK([DPKG_DIVERT --list '*'], [], all_di) +AT_CHECK([DPKG_DIVERT --list '']) + +AT_CHECK([DPKG_DIVERT --list '???????'], [], di_dash) +AT_CHECK([DPKG_DIVERT --list '*/sh'], [], di_dash) +AT_CHECK([DPKG_DIVERT --list '/bin/*'], [], di_dash) +AT_CHECK([DPKG_DIVERT --list binutils-multiarch], [], di_nm) +AT_CHECK([DPKG_DIVERT --list /bin/sh], [], di_dash) +AT_CHECK([DPKG_DIVERT --list -- /bin/sh], [], di_dash) +AT_CHECK([DPKG_DIVERT --list /usr/bin/nm.single], [], di_nm) +AT_CHECK([DPKG_DIVERT --list /bin/sh /usr/share/man/man1/sh.1.gz], [], + [m4_join([], di_dashman, di_dash)]) + +AT_CLEANUP + +AT_SETUP([dpkg-divert query (listpackage + truename)]) +AT_KEYWORDS([dpkg-divert query]) + +DPKG_GEN_DB_DIVERSIONS([/bin/sh +/bin/sh.distrib +dash +/bin/true +/bin/true.coreutils +: +]) + +AT_CHECK([DPKG_DIVERT --listpackage /bin/sh], [], [dash +]) +AT_CHECK([DPKG_DIVERT --listpackage /bin/true], [], [LOCAL +]) +AT_CHECK([DPKG_DIVERT --listpackage /bin/false]) + +AT_CHECK([DPKG_DIVERT --truename /bin/sh], [], [/bin/sh.distrib +]) +AT_CHECK([DPKG_DIVERT --truename /bin/sh.distrib], [], [/bin/sh.distrib +]) +AT_CHECK([DPKG_DIVERT --truename /bin/something], [], [/bin/something +]) + +AT_CLEANUP + +AT_SETUP([dpkg-divert add (local rename)]) +AT_KEYWORDS([dpkg-divert add]) + +DPKG_GEN_FSYS_FILE([/testdir/foo], []) +DPKG_GEN_DB_DIVERSIONS([]) +AT_DATA([ref-diversions], [/testdir/foo +/testdir/foo.distrib +: +]) + +AT_CHECK([DPKG_DIVERT --rename --add /testdir/foo], [], [stdout]) +AT_CHECK([grep -q "Adding.*local.*diversion.* /testdir/foo.* /testdir/foo.distrib" stdout]) +DPKG_CHECK_FSYS_PATH_MISSING([/testdir/foo]) +DPKG_CHECK_FSYS_PATH_EXISTS([/testdir/foo.distrib]) +AT_CHECK([diff -u ref-diversions DPKG_DIR_ADMIN/diversions]) + +AT_CLEANUP + +AT_SETUP([dpkg-divert add (local no-rename)]) +AT_KEYWORDS([dpkg-divert add]) + +DPKG_GEN_FSYS_FILE([/testdir/foo], []) +DPKG_GEN_DB_DIVERSIONS([]) +AT_DATA([ref-diversions], [/testdir/foo +/testdir/foo.distrib +: +]) + +AT_CHECK([DPKG_DIVERT --no-rename --add /testdir/foo], [], [stdout]) +AT_CHECK([grep -q "Adding.*local.*diversion.* /testdir/foo.* /testdir/foo.distrib" stdout]) +DPKG_CHECK_FSYS_PATH_EXISTS([/testdir/foo]) +DPKG_CHECK_FSYS_PATH_MISSING([/testdir/foo.distrib]) +AT_CHECK([diff -u ref-diversions DPKG_DIR_ADMIN/diversions]) + +AT_CLEANUP + +AT_SETUP([dpkg-divert add (rename quiet)]) +AT_KEYWORDS([dpkg-divert add]) + +DPKG_GEN_FSYS_FILE([/testdir/foo], []) +DPKG_GEN_DB_DIVERSIONS([]) +AT_DATA([ref-diversions], [/testdir/foo +/testdir/foo.distrib +: +]) + +AT_CHECK([DPKG_DIVERT --quiet --rename --add /testdir/foo]) +DPKG_CHECK_FSYS_PATH_MISSING([/testdir/foo]) +DPKG_CHECK_FSYS_PATH_EXISTS([/testdir/foo.distrib]) +AT_CHECK([diff -u ref-diversions DPKG_DIR_ADMIN/diversions]) + +AT_CLEANUP + +AT_SETUP([dpkg-divert add (test rename quiet)]) +AT_KEYWORDS([dpkg-divert add]) + +DPKG_GEN_FSYS_FILE([/testdir/foo], []) +DPKG_GEN_DB_DIVERSIONS([]) + +AT_CHECK([DPKG_DIVERT --quiet --rename --test /testdir/foo]) +DPKG_CHECK_FSYS_PATH_EXISTS([/testdir/foo]) +DPKG_CHECK_FSYS_PATH_MISSING([/testdir/foo.distrib]) +AT_CHECK([cat DPKG_DIR_ADMIN/diversions]) + +AT_CLEANUP + +AT_SETUP([dpkg-divert add (rename missing quiet)]) +AT_KEYWORDS([dpkg-divert add]) + +DPKG_GEN_FSYS_DIR([/testdir]) +DPKG_GEN_DB_DIVERSIONS([]) +AT_DATA([ref-diversions], [/testdir/foo +/testdir/foo.distrib +: +]) + +AT_CHECK([DPKG_DIVERT --quiet --rename /testdir/foo]) +DPKG_CHECK_FSYS_PATH_MISSING([/testdir/foo]) +DPKG_CHECK_FSYS_PATH_MISSING([/testdir/foo.distrib]) +AT_CHECK([diff -u ref-diversions DPKG_DIR_ADMIN/diversions]) + +AT_CLEANUP + +AT_SETUP([dpkg-divert add (local rename quiet)]) +AT_KEYWORDS([dpkg-divert add]) + +DPKG_GEN_FSYS_FILE([/testdir/foo], []) +DPKG_GEN_DB_DIVERSIONS([]) +AT_DATA([ref-diversions], [/testdir/foo +/testdir/foo.distrib +: +]) + +AT_CHECK([DPKG_DIVERT --quiet --local --rename /testdir/foo]) +DPKG_CHECK_FSYS_PATH_MISSING([/testdir/foo]) +DPKG_CHECK_FSYS_PATH_EXISTS([/testdir/foo.distrib]) +AT_CHECK([diff -u ref-diversions DPKG_DIR_ADMIN/diversions]) + +AT_CLEANUP + +AT_SETUP([dpkg-divert add (package rename quiet)]) +AT_KEYWORDS([dpkg-divert add]) + +DPKG_GEN_DB_DIVERSIONS([]) +AT_DATA([ref-diversions], [/testdir/foo +/testdir/foo.distrib +bash +]) + +AT_CHECK([DPKG_DIVERT --quiet --rename --package bash /testdir/foo]) +AT_CHECK([diff -u ref-diversions DPKG_DIR_ADMIN/diversions]) + +AT_CLEANUP + +AT_SETUP([dpkg-divert add (rename self-link)]) +AT_KEYWORDS([dpkg-divert add]) + +DPKG_GEN_FSYS_FILE([/testdir/foo], []) +DPKG_GEN_FSYS_LINK([/testdir/foo], [/testdir/foo.distrib]) +DPKG_GEN_DB_DIVERSIONS([]) +AT_DATA([ref-diversions], [/testdir/foo +/testdir/foo.distrib +: +]) + +AT_CHECK([DPKG_DIVERT --quiet --rename /testdir/foo]) +DPKG_CHECK_FSYS_PATH_MISSING([/testdir/foo]) +DPKG_CHECK_FSYS_PATH_EXISTS([/testdir/foo.distrib]) +AT_CHECK([diff -u ref-diversions DPKG_DIR_ADMIN/diversions]) + +AT_CLEANUP + +AT_SETUP([dpkg-divert add (rename other-file)]) +AT_KEYWORDS([dpkg-divert add]) + +DPKG_GEN_FSYS_FILE([/testdir/foo], []) +DPKG_GEN_FSYS_FILE([/testdir/foo.distrib], []) +DPKG_GEN_DB_DIVERSIONS([]) + +AT_CHECK([DPKG_DIVERT --quiet --rename /testdir/foo], [2], [], [stderr]) +AT_CHECK([grep -q 'error: rename involves overwriting' stderr]) +AT_CHECK([cat DPKG_DIR_ADMIN/diversions]) + +AT_CLEANUP + +AT_SETUP([dpkg-divert add (rename missing dir)]) +AT_KEYWORDS([dpkg-divert add]) + +DPKG_GEN_DB_DIVERSIONS([]) +AT_DATA([ref-diversions], [/testdir/zoo/foo +/testdir/zoo/foo.distrib +: +]) + +AT_CHECK([DPKG_DIVERT --quiet --rename --add /testdir/zoo/foo]) +AT_CHECK([diff -u ref-diversions DPKG_DIR_ADMIN/diversions]) + +AT_CLEANUP + +AT_SETUP([dpkg-divert add (rename read-only dir)]) +AT_KEYWORDS([dpkg-divert fsys]) + +AT_SKIP_IF([test -n "$FAKEROOTKEY" || test "$(id -u)" = 0]) + +DPKG_GEN_FSYS_DIR([/testdir/rodir]) +DPKG_GEN_FSYS_FILE([/testdir/rodir/foo]) +DPKG_GEN_FSYS_FILE([/testdir/bar]) +DPKG_MOD_FSYS_MODE([500], [/testdir/rodir]) +DPKG_GEN_DB_DIVERSIONS([]) + +AT_CHECK([DPKG_DIVERT --quiet --rename --add /testdir/rodir/foo], + [2], [], [stderr]) +AT_CHECK([grep -q 'error: .* Permission denied' stderr]) + +AT_CHECK([DPKG_DIVERT --quiet --rename --divert /testdir/rodir/bar --add /testdir/bar], + [2], [], [stderr]) +AT_CHECK([grep -q 'error: .* Permission denied' stderr]) + +AT_CHECK([cat DPKG_DIR_ADMIN/diversions]) + +DPKG_MOD_FSYS_MODE([755], [/testdir/rodir]) +AT_CLEANUP + +AT_SETUP([dpkg-divert add (rename no-access dir)]) +AT_KEYWORDS([dpkg-divert fsys]) + +AT_SKIP_IF([test -n "$FAKEROOTKEY" || test "$(id -u)" = 0]) + +DPKG_GEN_FSYS_FILE([/testdir/foo]) +DPKG_GEN_FSYS_DIR([/testdir/nadir]) +DPKG_MOD_FSYS_MODE([000], [/testdir/nadir]) +DPKG_GEN_DB_DIVERSIONS([]) + +AT_CHECK([DPKG_DIVERT --rename --add /testdir/nadir/foo], [2], [], [stderr]) +AT_CHECK([grep -q 'error: .* Permission denied' stderr]) + +AT_CHECK([DPKG_DIVERT --quiet --rename --divert /testdir/nadir/foo --add /testdir/foo], + [2], [], [stderr]) +AT_CHECK([grep -q 'error: .* Permission denied' stderr]) + +AT_CHECK([cat DPKG_DIR_ADMIN/diversions]) + +# On FreeBSD «rm -rf» cannot traverse a directory with mode 000. +rmdir DPKG_DIR_INST/testdir/nadir + +AT_CLEANUP + +AT_SETUP([dpkg-divert add second diversion]) +AT_KEYWORDS([dpkg-divert add]) + +DPKG_GEN_FSYS_DIR([/testdir]) +DPKG_GEN_DB_DIVERSIONS([]) + +AT_CHECK([DPKG_DIVERT --rename --add /testdir/foo], [], [stdout]) +AT_CHECK([grep -q 'Adding' stdout]) + +AT_CHECK([DPKG_DIVERT --rename --add /testdir/foo], [], [stdout]) +AT_CHECK([grep -q 'Leaving' stdout]) + +AT_CHECK([DPKG_DIVERT --rename --add /testdir/foo], [], [stdout]) +AT_CHECK([grep -q 'Leaving' stdout]) + +AT_CHECK([DPKG_DIVERT --divert /testdir/foo.bar /testdir/foo], + [2], [], [stderr]) +AT_CHECK([grep -q 'clashes' stderr]) + +AT_CHECK([DPKG_DIVERT --package foobar /testdir/foo], [2], [], [stderr]) +AT_CHECK([grep -q 'clashes' stderr]) + +AT_CHECK([DPKG_DIVERT --divert /testdir/foo.distrib /testdir/bar], + [2], [], [stderr]) +AT_CHECK([grep -q 'clashes' stderr]) + +AT_CHECK([DPKG_DIVERT /testdir/foo.distrib], [2], [], [stderr]) +AT_CHECK([grep -q 'clashes' stderr]) + +AT_CHECK([DPKG_DIVERT --divert /testdir/foo /testdir/bar], [2], [], [stderr]) +AT_CHECK([grep -q 'clashes' stderr]) + +AT_CLEANUP + +AT_SETUP([dpkg-divert add third diversion]) +AT_KEYWORDS([dpkg-divert add]) + +DPKG_GEN_FSYS_DIR([/testdir]) +DPKG_GEN_DB_DIVERSIONS([]) + +AT_CHECK([DPKG_DIVERT --rename --add /testdir/foo], [], [stdout]) +AT_CHECK([grep -q 'Adding' stdout]) +AT_CHECK([DPKG_DIVERT --rename --add /testdir/bar], [], [stdout]) +AT_CHECK([grep -q 'Adding' stdout]) + +AT_CHECK([DPKG_DIVERT --rename --add /testdir/foo], [], [stdout]) +AT_CHECK([grep -q 'Leaving' stdout]) +AT_CHECK([DPKG_DIVERT --rename --package foobar --add /testdir/bar], + [2], [], [stderr]) +AT_CHECK([grep -q 'clashes' stderr]) + +AT_CLEANUP + +AT_SETUP([dpkg-divert add (file owned by --package)]) +AT_KEYWORDS([dpkg-divert add]) + +DPKG_GEN_FSYS_FILE([/testdir/foo], []) +# Only installed packages have their files list considered. +DPKG_GEN_DB_STATUS([Package: coreutils +Status: install ok installed +Version: 0 +Architecture: i386 +Maintainer: dummy +Description: dummy +]) +DPKG_GEN_DB_INFO_FILE([coreutils], [list], [/testdir/foo +]) +DPKG_GEN_DB_DIVERSIONS([]) +AT_DATA([ref-diversions], [/testdir/foo +/testdir/foo.distrib +coreutils +]) + +AT_CHECK([DPKG_DIVERT --quiet --rename --package coreutils --add /testdir/foo]) +DPKG_CHECK_FSYS_PATH_EXISTS([/testdir/foo]) +DPKG_CHECK_FSYS_PATH_MISSING([/testdir/foo.distrib]) +AT_CHECK([diff -u ref-diversions DPKG_DIR_ADMIN/diversions]) + +AT_CLEANUP + +AT_SETUP([dpkg-divert remove (missing)]) +AT_KEYWORDS([dpkg-divert remove]) + +DPKG_GEN_DB_DIVERSIONS([]) + +AT_CHECK([DPKG_DIVERT --no-rename --remove /bin/sh], [], [stdout]) +AT_CHECK([grep -q 'No diversion' stdout]) + +AT_CHECK([DPKG_DIVERT --quiet --no-rename --remove /bin/sh]) + +AT_CLEANUP + +AT_SETUP([dpkg-divert remove (divert-to)]) +AT_KEYWORDS([dpkg-divert remove]) + +DPKG_GEN_DB_DIVERSIONS([]) +AT_DATA([ref-diversions], [/testdir/bar +/testdir/bar.distrib +: +/testdir/baz +/testdir/baz.distrib +: +]) + +AT_CHECK([DPKG_DIVERT --quiet --no-rename --add /testdir/foo]) +AT_CHECK([DPKG_DIVERT --quiet --no-rename --add /testdir/bar]) +AT_CHECK([DPKG_DIVERT --quiet --no-rename --add /testdir/baz]) + +AT_CHECK([DPKG_DIVERT --divert /testdir/foo.my --remove /testdir/foo], + [2], [], [stderr]) +AT_CHECK([grep -q 'mismatch on divert-to' stderr]) + +AT_CHECK([DPKG_DIVERT --package baz --remove /testdir/foo], [2], [], [stderr]) +AT_CHECK([grep -q 'mismatch on package' stderr]) + +AT_CHECK([DPKG_DIVERT --package baz --divert /testdir/foo.my --remove /testdir/foo], + [2], [], [stderr]) +AT_CHECK([grep -qE 'mismatch on (package|divert-to)' stderr]) + +AT_CHECK([DPKG_DIVERT --rename --divert /testdir/foo.distrib --remove /testdir/foo], + [], [stdout]) +AT_CHECK([grep -qE 'Removing .*/testdir/foo' stdout]) + +AT_CHECK([diff -u ref-diversions DPKG_DIR_ADMIN/diversions]) + +AT_CLEANUP + +AT_SETUP([dpkg-divert remove (plain)]) +AT_KEYWORDS([dpkg-divert remove]) + +DPKG_GEN_DB_DIVERSIONS([]) +AT_DATA([ref-diversions], [/testdir/foo +/testdir/foo.distrib +: +/testdir/baz +/testdir/baz.distrib +: +]) + +AT_CHECK([DPKG_DIVERT --quiet --no-rename --add /testdir/foo]) +AT_CHECK([DPKG_DIVERT --quiet --no-rename --add /testdir/bar]) +AT_CHECK([DPKG_DIVERT --quiet --no-rename --add /testdir/baz]) + +AT_CHECK([DPKG_DIVERT --no-rename --remove /testdir/bar], [], [stdout]) +AT_CHECK([grep -qE 'Removing .* /testdir/bar' stdout]) + +AT_CHECK([diff -u ref-diversions DPKG_DIR_ADMIN/diversions]) + +AT_CLEANUP + +AT_SETUP([dpkg-divert remove (by-package)]) +AT_KEYWORDS([dpkg-divert remove]) + +DPKG_GEN_DB_DIVERSIONS([]) +AT_DATA([ref-diversions], [/testdir/bar +/testdir/bar.distrib +: +/testdir/foo +/testdir/foo.distrib +: +]) + +AT_CHECK([DPKG_DIVERT --quiet --no-rename /testdir/foo]) +AT_CHECK([DPKG_DIVERT --quiet --no-rename /testdir/bar]) +AT_CHECK([DPKG_DIVERT --quiet --no-rename --package bash /testdir/baz]) + +AT_CHECK([DPKG_DIVERT --no-rename --quiet --package bash --remove /testdir/baz]) + +AT_CHECK([diff -u ref-diversions DPKG_DIR_ADMIN/diversions]) + +AT_CLEANUP + +AT_SETUP([dpkg-divert remove (test)]) +AT_KEYWORDS([dpkg-divert remove]) + +DPKG_GEN_FSYS_FILE([/testdir/foo], []) +DPKG_GEN_DB_DIVERSIONS([]) +AT_DATA([ref-diversions], [/testdir/foo +/testdir/foo.distrib +: +]) + +AT_CHECK([DPKG_DIVERT --quiet --rename /testdir/foo]) + +AT_CHECK([DPKG_DIVERT --test --rename --remove /testdir/foo], [], [stdout]) +AT_CHECK([grep -q 'Removing .*/testdir/foo' stdout]) +DPKG_CHECK_FSYS_PATH_MISSING([/testdir/foo]) +DPKG_CHECK_FSYS_PATH_EXISTS([/testdir/foo.distrib]) +AT_CHECK([diff -u ref-diversions DPKG_DIR_ADMIN/diversions]) + +AT_CHECK([DPKG_DIVERT --quiet --rename --remove /testdir/foo]) +DPKG_CHECK_FSYS_PATH_EXISTS([/testdir/foo]) +DPKG_CHECK_FSYS_PATH_MISSING([/testdir/foo.distrib]) +AT_CHECK([cat DPKG_DIR_ADMIN/diversions]) + +AT_CLEANUP + +AT_SETUP([dpkg-divert db (no-access)]) +AT_KEYWORDS([dpkg-divert db]) + +AT_SKIP_IF([test -n "$FAKEROOTKEY" || test "$(id -u)" = 0]) + +# An inexistent diversions db file should not be considered a failure, +# but a failure to open it should be. +DPKG_GEN_DB_DIVERSIONS([]) +DPKG_MOD_DB_MODE([000], [diversions]) + +AT_CHECK([DPKG_DIVERT --list], [2], [], [stderr]) +AT_CHECK([grep -qE '(cannot|failed).*open' stderr]) + +DPKG_MOD_DB_MODE([644], [diversions]) +AT_CLEANUP + +AT_SETUP([dpkg-divert db (truncated)]) +AT_KEYWORDS([dpkg-divert db]) + +DPKG_GEN_DB_DIVERSIONS([/bin/sh +]) + +AT_CHECK([DPKG_DIVERT --list], [2], [], [stderr]) +AT_CHECK([grep -qE '(corrupt|unexpected end of file)' stderr]) + +DPKG_GEN_DB_DIVERSIONS([/bin/sh +bash +]) + +AT_CHECK([DPKG_DIVERT --list], [2], [], [stderr]) +AT_CHECK([grep -qE '(corrupt|unexpected end of file)' stderr]) + +AT_CLEANUP + +AT_SETUP([dpkg-divert db (read-only dir)]) +AT_KEYWORDS([dpkg-divert db]) + +AT_SKIP_IF([test -n "$FAKEROOTKEY" || test "$(id -u)" = 0]) + +DPKG_GEN_DB_DIVERSIONS([]) +DPKG_MOD_DB_MODE([500]) + +AT_CHECK([DPKG_DIVERT --rename --add /testdir/foo], [2], [stdout], [stderr]) +AT_CHECK([grep -q 'Adding' stdout]) +AT_CHECK([grep -q 'create.*new' stderr]) + +DPKG_MOD_DB_MODE([755]) +AT_CLEANUP + +AT_SETUP([dpkg-divert db (disk full)]) +AT_KEYWORDS([dpkg-divert db]) + +AT_SKIP_IF([test -n "$FAKEROOTKEY" || test "$(id -u)" = 0]) +AT_SKIP_IF([! test -c /dev/full]) + +DPKG_GEN_DB_DIVERSIONS([]) +ln -s /dev/full DPKG_DIR_ADMIN/diversions-new + +AT_CHECK([DPKG_DIVERT --rename --add /testdir/foo], [2], [stdout], [stderr]) +AT_CHECK([grep -q 'Adding' stdout]) +AT_CHECK([grep -qE '(write|flush|close).*new' stderr]) + +AT_CLEANUP + +AT_SETUP([dpkg-divert db (pathname is dir)]) +AT_KEYWORDS([dpkg-divert db]) + +DPKG_GEN_DB_DIVERSIONS([]) +rm -f DPKG_DIR_ADMIN/diversions-new +mkdir DPKG_DIR_ADMIN/diversions-old + +AT_CHECK([DPKG_DIVERT --rename --add /testdir/foo], [2], [stdout], [stderr]) +AT_CHECK([grep -q 'Adding' stdout]) +AT_CHECK([grep -q 'remov.*old' stderr]) + +AT_CLEANUP |