summaryrefslogtreecommitdiff
path: root/test/cases/db-import-pkg.bats
diff options
context:
space:
mode:
Diffstat (limited to 'test/cases/db-import-pkg.bats')
-rw-r--r--test/cases/db-import-pkg.bats260
1 files changed, 260 insertions, 0 deletions
diff --git a/test/cases/db-import-pkg.bats b/test/cases/db-import-pkg.bats
new file mode 100644
index 0000000..f973c84
--- /dev/null
+++ b/test/cases/db-import-pkg.bats
@@ -0,0 +1,260 @@
+load ../lib/import
+
+# Run the command in a new mount namespace with /tmp remounted
+# read-only, but with $TMP (which might be under /tmp) still writable.
+#
+# Arguments are passed as arguments to `sudo`.
+__withRoTmp() {
+ local mount="mount -o bind ${TMP@Q}{,} && mount -o bind,remount,ro /tmp{,}"
+ local env=(
+ "DBSCRIPTS_CONFIG=${DBSCRIPTS_CONFIG}"
+ "XDG_CONFIG_HOME=${XDG_CONFIG_HOME}"
+ )
+ sudo -- unshare -m -- sh -c "${mount} && sudo -u ${USER@Q} ${env[*]@Q} \$@" -- "$@"
+}
+
+__db-import-pkg() {
+ local ret=0
+ # Since common.bash->config.local sets TMPDIR=${TMP}/tmp,
+ # TMPDIR is necessarily != /tmp.
+ # Which means that if we try to write anything directly under /tmp,
+ # then we are erroneously disregarding TMPDIR.
+ # So, make /tmp read-only to make that be an error.
+ __withRoTmp db-import-pkg "$@" || ret=$?
+ # Verify that it cleaned up after itself and TMPDIR is empty
+ find "$TMPDIR" -mindepth 1 | diff - /dev/null
+ return $ret
+}
+
+######################################################################
+
+@test "import no blacklisted packages (x86_64)" {
+ __releaseImportedPackage slavery x86_64 "$TMP/rsyncd/archlinux/core/os/x86_64/core.db.tar.gz" "$TMP/rsyncd/archlinux/pool/packages"
+ __releaseImportedPackage pkg-simple-c x86_64 "$TMP/rsyncd/archlinux/core/os/x86_64/core.db.tar.gz" "$TMP/rsyncd/archlinux/pool/packages"
+
+ DBSCRIPTS_CONFIG="${TMP}/config.local.packages" __db-import-pkg
+
+ bsdtar xfO "$TMP/ftp/core/os/x86_64/core.db.tar.gz" pkg-simple-c-1-1/desc
+ __isLinkTo "$TMP/ftp/core/os/x86_64/pkg-simple-c-1-1-x86_64.pkg.tar.xz" "$TMP/ftp/pool/packages/pkg-simple-c-1-1-x86_64.pkg.tar.xz"
+ __doesNotExist "$TMP"/ftp/{core/os/x86_64,pool/packages,sources/packages}/slavery-*
+}
+
+@test "import no blacklisted packages (i686)" {
+ __releaseImportedPackage slavery i686 "$TMP/rsyncd/archlinux32/i686/core/core.db.tar.gz" "$TMP/rsyncd/archlinux32/pool"
+ __releaseImportedPackage pkg-simple-c i686 "$TMP/rsyncd/archlinux32/i686/core/core.db.tar.gz" "$TMP/rsyncd/archlinux32/pool"
+
+ DBSCRIPTS_CONFIG="${TMP}/config.local.archlinux32" __db-import-pkg
+
+ bsdtar xfO "$TMP/ftp/core/os/i686/core.db.tar.gz" pkg-simple-c-1-1/desc
+ __isLinkTo "$TMP/ftp/core/os/i686/pkg-simple-c-1-1-i686.pkg.tar.xz" "$TMP/ftp/pool/archlinux32/pkg-simple-c-1-1-i686.pkg.tar.xz"
+ __doesNotExist "$TMP"/ftp/{core/os/i686,pool/archlinux32,sources/archlinux32}/slavery-*
+}
+
+@test "import no blacklisted packages (armv7h)" {
+ __releaseImportedPackage slavery armv7h "$TMP/rsyncd/archlinuxarm/armv7h/core/core.db.tar.gz"
+ __releaseImportedPackage pkg-simple-c armv7h "$TMP/rsyncd/archlinuxarm/armv7h/core/core.db.tar.gz"
+
+ DBSCRIPTS_CONFIG="${TMP}/config.local.archlinuxarm" __db-import-pkg
+
+ bsdtar xfO "$TMP/ftp/core/os/armv7h/core.db.tar.gz" pkg-simple-c-1-1/desc
+ __isLinkTo "$TMP/ftp/core/os/armv7h/pkg-simple-c-1-1-armv7h.pkg.tar.xz" "$TMP/ftp/pool/alarm/pkg-simple-c-1-1-armv7h.pkg.tar.xz"
+ __doesNotExist "$TMP"/ftp/{core/os/alarm,pool/alarm,sources/alarm}/slavery-*
+}
+
+@test "import DBs with no blacklisted packages" {
+ __releaseImportedPackage pkg-simple-c x86_64 "$TMP/rsyncd/archlinux/core/os/x86_64/core.db.tar.gz" "$TMP/rsyncd/archlinux/pool/packages"
+
+ DBSCRIPTS_CONFIG="${TMP}/config.local.packages" __db-import-pkg
+
+ bsdtar xfO "$TMP/ftp/core/os/x86_64/core.db.tar.gz" pkg-simple-c-1-1/desc
+ __isLinkTo "$TMP/ftp/core/os/x86_64/pkg-simple-c-1-1-x86_64.pkg.tar.xz" "$TMP/ftp/pool/packages/pkg-simple-c-1-1-x86_64.pkg.tar.xz"
+}
+
+@test "import updated packages" {
+ __releaseImportedPackage slavery x86_64 "$TMP/rsyncd/archlinux/core/os/x86_64/core.db.tar.gz" "$TMP/rsyncd/archlinux/pool/packages"
+ __releaseImportedPackage pkg-simple-c x86_64 "$TMP/rsyncd/archlinux/core/os/x86_64/core.db.tar.gz" "$TMP/rsyncd/archlinux/pool/packages"
+
+ DBSCRIPTS_CONFIG="${TMP}/config.local.packages" __db-import-pkg
+
+ bsdtar xfO "$TMP/ftp/core/os/x86_64/core.db.tar.gz" pkg-simple-c-1-1/desc
+ __isLinkTo "$TMP/ftp/core/os/x86_64/pkg-simple-c-1-1-x86_64.pkg.tar.xz" "$TMP/ftp/pool/packages/pkg-simple-c-1-1-x86_64.pkg.tar.xz"
+
+ __updateImportedPackage pkg-simple-c
+ __releaseImportedPackage pkg-simple-c x86_64 "$TMP/rsyncd/archlinux/core/os/x86_64/core.db.tar.gz" "$TMP/rsyncd/archlinux/pool/packages"
+
+ DBSCRIPTS_CONFIG="${TMP}/config.local.packages" __db-import-pkg
+
+ bsdtar xfO "$TMP/ftp/core/os/x86_64/core.db.tar.gz" pkg-simple-c-1-2/desc
+ __isLinkTo "$TMP/ftp/core/os/x86_64/pkg-simple-c-1-2-x86_64.pkg.tar.xz" "$TMP/ftp/pool/packages/pkg-simple-c-1-2-x86_64.pkg.tar.xz"
+}
+
+@test "import .db files as 0664 (x86_64)" {
+ __releaseImportedPackage slavery x86_64 "$TMP/rsyncd/archlinux/core/os/x86_64/core.db.tar.gz" "$TMP/rsyncd/archlinux/pool/packages"
+ __releaseImportedPackage pkg-simple-c x86_64 "$TMP/rsyncd/archlinux/core/os/x86_64/core.db.tar.gz" "$TMP/rsyncd/archlinux/pool/packages"
+
+ DBSCRIPTS_CONFIG="${TMP}/config.local.packages" __db-import-pkg
+
+ bsdtar xfO "$TMP/ftp/core/os/x86_64/core.db.tar.gz" pkg-simple-c-1-1/desc
+ __isLinkTo "$TMP/ftp/core/os/x86_64/pkg-simple-c-1-1-x86_64.pkg.tar.xz" "$TMP/ftp/pool/packages/pkg-simple-c-1-1-x86_64.pkg.tar.xz"
+ __doesNotExist "$TMP"/ftp/{core/os/x86_64,pool/packages,sources/packages}/slavery-*
+ [[ "$(stat -c '%a' -- "$TMP/ftp/core/os/x86_64/core.db.tar.gz")" = 664 ]]
+}
+
+@test "import .db files as 0664 (i686)" {
+ __releaseImportedPackage slavery i686 "$TMP/rsyncd/archlinux32/i686/core/core.db.tar.gz" "$TMP/rsyncd/archlinux32/pool"
+ __releaseImportedPackage pkg-simple-c i686 "$TMP/rsyncd/archlinux32/i686/core/core.db.tar.gz" "$TMP/rsyncd/archlinux32/pool"
+
+ DBSCRIPTS_CONFIG="${TMP}/config.local.archlinux32" __db-import-pkg
+
+ bsdtar xfO "$TMP/ftp/core/os/i686/core.db.tar.gz" pkg-simple-c-1-1/desc
+ __isLinkTo "$TMP/ftp/core/os/i686/pkg-simple-c-1-1-i686.pkg.tar.xz" "$TMP/ftp/pool/archlinux32/pkg-simple-c-1-1-i686.pkg.tar.xz"
+ __doesNotExist "$TMP"/ftp/{core/os/i686,pool/archlinux32,sources/archlinux32}/slavery-*
+ stat -- "$TMP/ftp/core/os/i686/core.db.tar.gz"
+ [[ "$(stat -c '%a' -- "$TMP/ftp/core/os/i686/core.db.tar.gz")" = 664 ]]
+}
+
+@test "import .db files as 0664 (armv7h)" {
+ __releaseImportedPackage slavery armv7h "$TMP/rsyncd/archlinuxarm/armv7h/core/core.db.tar.gz"
+ __releaseImportedPackage pkg-simple-c armv7h "$TMP/rsyncd/archlinuxarm/armv7h/core/core.db.tar.gz"
+
+ DBSCRIPTS_CONFIG="${TMP}/config.local.archlinuxarm" __db-import-pkg
+
+ bsdtar xfO "$TMP/ftp/core/os/armv7h/core.db.tar.gz" pkg-simple-c-1-1/desc
+ __isLinkTo "$TMP/ftp/core/os/armv7h/pkg-simple-c-1-1-armv7h.pkg.tar.xz" "$TMP/ftp/pool/alarm/pkg-simple-c-1-1-armv7h.pkg.tar.xz"
+ __doesNotExist "$TMP"/ftp/{core/os/armv7h,pool/alarm,sources/alarm}/slavery-*
+ stat -- "$TMP/ftp/core/os/armv7h/core.db.tar.gz"
+ [[ "$(stat -c '%a' -- "$TMP/ftp/core/os/armv7h/core.db.tar.gz")" = 664 ]]
+}
+
+@test "import fully-masked upstream" {
+ __releaseImportedPackage pkg-any-a x86_64 "$TMP/rsyncd/archlinux/core/os/x86_64/core.db.tar.gz" "$TMP/rsyncd/archlinux/pool/packages"
+ __releaseImportedPackage pkg-any-a i686 "$TMP/rsyncd/archlinux32/i686/core/core.db.tar.gz" "$TMP/rsyncd/archlinux32/pool"
+ __releaseImportedPackage pkg-any-a armv7h "$TMP/rsyncd/archlinuxarm/armv7h/core/core.db.tar.gz"
+
+ DBSCRIPTS_CONFIG="${TMP}/config.local.packages" __db-import-pkg
+ DBSCRIPTS_CONFIG="${TMP}/config.local.archlinux32" __db-import-pkg
+ DBSCRIPTS_CONFIG="${TMP}/config.local.archlinuxarm" __db-import-pkg
+
+ bsdtar xfO "$TMP/ftp/core/os/x86_64/core.db.tar.gz" pkg-any-a-1-1/desc
+ bsdtar xfO "$TMP/ftp/core/os/i686/core.db.tar.gz" pkg-any-a-1-1/desc
+ bsdtar xfO "$TMP/ftp/core/os/armv7h/core.db.tar.gz" pkg-any-a-1-1/desc
+
+ __isLinkTo "$TMP/ftp/core/os/x86_64/pkg-any-a-1-1-any.pkg.tar.xz" "$TMP/ftp/pool/packages/pkg-any-a-1-1-any.pkg.tar.xz"
+ __isLinkTo "$TMP/ftp/core/os/i686/pkg-any-a-1-1-any.pkg.tar.xz" "$TMP/ftp/pool/packages/pkg-any-a-1-1-any.pkg.tar.xz"
+ __isLinkTo "$TMP/ftp/core/os/armv7h/pkg-any-a-1-1-any.pkg.tar.xz" "$TMP/ftp/pool/packages/pkg-any-a-1-1-any.pkg.tar.xz"
+}
+
+@test "import removes dropped packages" {
+ __releaseImportedPackage pkg-simple-c x86_64 "$TMP/rsyncd/archlinux/core/os/x86_64/core.db.tar.gz" "$TMP/rsyncd/archlinux/pool/packages"
+
+ DBSCRIPTS_CONFIG="${TMP}/config.local.packages" __db-import-pkg
+
+ __isLinkTo "$TMP/ftp/core/os/x86_64/pkg-simple-c-1-1-x86_64.pkg.tar.xz" "$TMP/ftp/pool/packages/pkg-simple-c-1-1-x86_64.pkg.tar.xz"
+ bsdtar xfO "$TMP/ftp/core/os/x86_64/core.db.tar.gz" pkg-simple-c-1-1/desc
+
+ repo-remove -q "$TMP/rsyncd/archlinux/core/os/x86_64/core.db.tar.gz" pkg-simple-c
+
+ DBSCRIPTS_CONFIG="${TMP}/config.local.packages" __db-import-pkg
+
+ if bsdtar xfO "$TMP/ftp/core/os/x86_64/core.db.tar.gz" pkg-simple-c-1-1/desc; then
+ return 1
+ fi
+}
+
+@test "import removes blacklisted packages" {
+ __releaseImportedPackage pkg-simple-c x86_64 "$TMP/rsyncd/archlinux/core/os/x86_64/core.db.tar.gz" "$TMP/rsyncd/archlinux/pool/packages"
+
+ DBSCRIPTS_CONFIG="${TMP}/config.local.packages" __db-import-pkg
+
+ __isLinkTo "$TMP/ftp/core/os/x86_64/pkg-simple-c-1-1-x86_64.pkg.tar.xz" "$TMP/ftp/pool/packages/pkg-simple-c-1-1-x86_64.pkg.tar.xz"
+ bsdtar xfO "$TMP/ftp/core/os/x86_64/core.db.tar.gz" pkg-simple-c-1-1/desc >/dev/null
+
+ echo 'pkg-simple-c::::' >> "$TMP/httpd/blacklist.txt"
+
+ DBSCRIPTS_CONFIG="${TMP}/config.local.packages" __db-import-pkg
+
+ if bsdtar xfO "$TMP/ftp/core/os/x86_64/core.db.tar.gz" pkg-simple-c-1-1/desc >/dev/null; then
+ return 1
+ fi
+}
+
+@test "import moves packages" {
+ __releaseImportedPackage pkg-simple-c x86_64 "$TMP/rsyncd/archlinux/testing/os/x86_64/testing.db.tar.gz" "$TMP/rsyncd/archlinux/pool/packages"
+
+ DBSCRIPTS_CONFIG="${TMP}/config.local.packages" __db-import-pkg
+
+ __isLinkTo "$TMP/ftp/testing/os/x86_64/pkg-simple-c-1-1-x86_64.pkg.tar.xz" "$TMP/ftp/pool/packages/pkg-simple-c-1-1-x86_64.pkg.tar.xz"
+ bsdtar xfO "$TMP/ftp/testing/os/x86_64/testing.db.tar.gz" pkg-simple-c-1-1/desc >/dev/null
+
+ repo-remove -q "$TMP/rsyncd/archlinux/testing/os/x86_64/testing.db.tar.gz" pkg-simple-c
+ __releaseImportedPackage pkg-simple-c x86_64 "$TMP/rsyncd/archlinux/core/os/x86_64/core.db.tar.gz" "$TMP/rsyncd/archlinux/pool/packages"
+
+ DBSCRIPTS_CONFIG="${TMP}/config.local.packages" __db-import-pkg
+
+ __isLinkTo "$TMP/ftp/core/os/x86_64/pkg-simple-c-1-1-x86_64.pkg.tar.xz" "$TMP/ftp/pool/packages/pkg-simple-c-1-1-x86_64.pkg.tar.xz"
+ bsdtar xfO "$TMP/ftp/core/os/x86_64/core.db.tar.gz" pkg-simple-c-1-1/desc >/dev/null
+ if bsdtar xfO "$TMP/ftp/testing/os/x86_64/testing.db.tar.gz" pkg-simple-c-1-1/desc >/dev/null; then
+ return 1
+ fi
+}
+
+@test "import arch=any packages with sub-pkgrel" {
+ # This is modeled after the situation with 'asp' and 'asp32'
+
+ __releaseImportedPackage pkg-any64 x86_64 "$TMP/rsyncd/archlinux/core/os/x86_64/core.db.tar.gz" "$TMP/rsyncd/archlinux/pool/packages"
+ DBSCRIPTS_CONFIG="${TMP}/config.local.packages" __db-import-pkg
+ __isLinkTo "$TMP/ftp/core/os/x86_64/pkg-any-2-1-any.pkg.tar.xz" "$TMP/ftp/pool/packages/pkg-any-2-1-any.pkg.tar.xz"
+ bsdtar xfO "$TMP/ftp/core/os/x86_64/core.db.tar.gz" pkg-any-2-1/desc
+
+ __releaseImportedPackage pkg-any32 i686 "$TMP/rsyncd/archlinux32/i686/core/core.db.tar.gz" "$TMP/rsyncd/archlinux32/pool"
+ DBSCRIPTS_CONFIG="${TMP}/config.local.archlinux32" __db-import-pkg
+ __isLinkTo "$TMP/ftp/core/os/i686/pkg-any-1-1.2-any.pkg.tar.xz" "$TMP/ftp/pool/archlinux32/pkg-any-1-1.2-any.pkg.tar.xz"
+ bsdtar xfO "$TMP/ftp/core/os/i686/core.db.tar.gz" pkg-any-1-1.2/desc
+}
+
+@test "import respects INHERIT precedence" {
+ __releaseImportedPackage pkg-any-a armv7h "$TMP/rsyncd/archlinuxarm/armv7h/core/core.db.tar.gz"
+ DBSCRIPTS_CONFIG="${TMP}/config.local.archlinux32" __db-import-pkg
+
+ __releaseImportedPackage pkg-any-a x86_64 "$TMP/rsyncd/archlinux/core/os/x86_64/core.db.tar.gz" "$TMP/rsyncd/archlinux/pool/packages"
+ DBSCRIPTS_CONFIG="${TMP}/config.local.packages" __db-import-pkg
+ DBSCRIPTS_CONFIG="${TMP}/config.local.archlinuxarm" __db-import-pkg
+
+ bsdtar xfO "$TMP/ftp/core/os/x86_64/core.db.tar.gz" pkg-any-a-1-1/desc
+ bsdtar xfO "$TMP/ftp/core/os/armv7h/core.db.tar.gz" pkg-any-a-1-1/desc
+
+ __isLinkTo "$TMP/ftp/core/os/x86_64/pkg-any-a-1-1-any.pkg.tar.xz" "$TMP/ftp/pool/packages/pkg-any-a-1-1-any.pkg.tar.xz"
+ __isLinkTo "$TMP/ftp/core/os/armv7h/pkg-any-a-1-1-any.pkg.tar.xz" "$TMP/ftp/pool/packages/pkg-any-a-1-1-any.pkg.tar.xz"
+}
+
+@test "import doesn't backdate packages" {
+ __releaseImportedPackage pkg-simple-c x86_64 "$TMP/rsyncd/archlinux/core/os/x86_64/core.db.tar.gz" "$TMP/rsyncd/archlinux/pool/packages"
+
+ touch "$TMP/stamp"
+ DBSCRIPTS_CONFIG="${TMP}/config.local.packages" __db-import-pkg
+
+ bsdtar xfO "$TMP/ftp/core/os/x86_64/core.db.tar.gz" pkg-simple-c-1-1/desc
+ __isLinkTo "$TMP/ftp/core/os/x86_64/pkg-simple-c-1-1-x86_64.pkg.tar.xz" "$TMP/ftp/pool/packages/pkg-simple-c-1-1-x86_64.pkg.tar.xz"
+ [[ "$TMP/ftp/pool/packages/pkg-simple-c-1-1-x86_64.pkg.tar.xz" -nt "$TMP/stamp" ]]
+ [[ "$TMP/ftp/lastupdate" -nt "$TMP/stamp" ]]
+}
+
+@test "import previously removed packages" {
+ # Import the package once
+ __releaseImportedPackage pkg-simple-c x86_64 "$TMP/rsyncd/archlinux/core/os/x86_64/core.db.tar.gz" "$TMP/rsyncd/archlinux/pool/packages"
+ DBSCRIPTS_CONFIG="${TMP}/config.local.packages" __db-import-pkg
+ bsdtar xfO "$TMP/ftp/core/os/x86_64/core.db.tar.gz" pkg-simple-c-1-1/desc
+ __isLinkTo "$TMP/ftp/core/os/x86_64/pkg-simple-c-1-1-x86_64.pkg.tar.xz" "$TMP/ftp/pool/packages/pkg-simple-c-1-1-x86_64.pkg.tar.xz"
+
+ # Remove it
+ mv -fT -- "$TMP/rsyncd/archlinux/core/os/x86_64/core.db.tar.gz"{,.old}
+ :> "$TMP/rsyncd/archlinux/core/os/x86_64/core.db.tar.gz"
+ DBSCRIPTS_CONFIG="${TMP}/config.local.packages" __db-import-pkg
+ if bsdtar xfO "$TMP/ftp/core/os/x86_64/core.db.tar.gz" pkg-simple-c-1-1/desc; then return 1; fi
+
+ # And add it again
+ mv -fT -- "$TMP/rsyncd/archlinux/core/os/x86_64/core.db.tar.gz"{.old,}
+ DBSCRIPTS_CONFIG="${TMP}/config.local.packages" __db-import-pkg
+ bsdtar xfO "$TMP/ftp/core/os/x86_64/core.db.tar.gz" pkg-simple-c-1-1/desc
+ __isLinkTo "$TMP/ftp/core/os/x86_64/pkg-simple-c-1-1-x86_64.pkg.tar.xz" "$TMP/ftp/pool/packages/pkg-simple-c-1-1-x86_64.pkg.tar.xz"
+}