summaryrefslogtreecommitdiff
path: root/test/cases/libremakepkg.bats
diff options
context:
space:
mode:
Diffstat (limited to 'test/cases/libremakepkg.bats')
-rw-r--r--test/cases/libremakepkg.bats240
1 files changed, 240 insertions, 0 deletions
diff --git a/test/cases/libremakepkg.bats b/test/cases/libremakepkg.bats
new file mode 100644
index 0000000..36176d3
--- /dev/null
+++ b/test/cases/libremakepkg.bats
@@ -0,0 +1,240 @@
+#!/usr/bin/env roundup
+
+describe libremakepkg
+. ./test-common.sh
+
+before() {
+ common_before
+
+ cat >> "$XDG_CONFIG_HOME/pacman/makepkg.conf" <<-eot
+ unset PKGDEST SRCPKGDEST
+ eot
+}
+
+it_builds_a_trivial_package() {
+ require network sudo || return 0
+ cp libremakepkg.d/PKGBUILD-hello "$tmpdir/PKGBUILD"
+ cd "$tmpdir"
+
+ libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty
+ testsudo libremakepkg -l "$roundup_test_name"
+
+ globfile libretools-hello-1.0-1-any.pkg.tar.?z
+}
+
+it_disables_networking_during_prepare() {
+ require network sudo || return 0
+ cp libremakepkg.d/PKGBUILD-netprepare "$tmpdir/PKGBUILD"
+ cd "$tmpdir"
+
+ libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty
+ not testsudo libremakepkg -l "$roundup_test_name"
+ not globfile libretools-netprepare-1.0-1-any.pkg.tar.?z
+ testsudo libremakepkg -l "$roundup_test_name" -N
+ globfile libretools-netprepare-1.0-1-any.pkg.tar.?z
+}
+
+it_disables_networking_during_build() {
+ require network sudo || return 0
+ cp libremakepkg.d/PKGBUILD-netbuild "$tmpdir/PKGBUILD"
+ cd "$tmpdir"
+
+ libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty
+ not testsudo libremakepkg -l "$roundup_test_name"
+ not globfile libretools-netbuild-1.0-1-any.pkg.tar.?z
+ testsudo libremakepkg -l "$roundup_test_name" -N
+ globfile libretools-netbuild-1.0-1-any.pkg.tar.?z
+}
+
+it_disables_networking_during_package() {
+ require network sudo || return 0
+ cp libremakepkg.d/PKGBUILD-netpackage "$tmpdir/PKGBUILD"
+ cd "$tmpdir"
+
+ libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty
+ not testsudo libremakepkg -l "$roundup_test_name"
+ not globfile libretools-netpackage-1.0-1-any.pkg.tar.?z
+ testsudo libremakepkg -l "$roundup_test_name" -N
+ globfile libretools-netpackage-1.0-1-any.pkg.tar.?z
+}
+
+it_cleans_the_chroot_before_building() {
+ require network sudo || return 0
+ # 1. First, we build testpkg1
+ # 2. Then, we build testpkg2, which depends on testpkg1
+ # Therefore, testpkg1 will be installed after testpkg2 is built, we
+ # check for that.
+ # 3. Then, we build hello, which depends on neither, so testpkg1 should
+ # be removed.
+
+ # Also, do funny things with the output of libremakepkg to get a helpful
+ # fail case.
+
+ mkdir -p "$tmpdir"/{1,2,3}
+ cp libremakepkg.d/PKGBUILD-testpkg1 "$tmpdir/1/PKGBUILD"
+ cp libremakepkg.d/PKGBUILD-testpkg2 "$tmpdir/2/PKGBUILD"
+ cp libremakepkg.d/PKGBUILD-hello "$tmpdir/3/PKGBUILD"
+
+ libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty
+
+ cd "$tmpdir/1"
+ testsudo libremakepkg -l "$roundup_test_name" &> "$tmpdir/out" || { status=$?; tail "$tmpdir/out"|cat -v; return $status; }
+
+ cd "$tmpdir/2"
+ testsudo libremakepkg -l "$roundup_test_name" &> "$tmpdir/out" || { status=$?; tail "$tmpdir/out"|cat -v; return $status; }
+ testsudo librechroot -l "$roundup_test_name" run libretools-testpkg1 'first time, pass'
+
+ # This next line is actually a separate test, but it fits in well with this test, and chroot tests are slow..
+ # it_doesnt_cache_local_packages() {
+ not testsudo librechroot -l "$roundup_test_name" run test -e /var/cache/pacman/pkg/libretools-testpkg1-1.0-1-any.pkg.tar.?z
+
+ cd "$tmpdir/3"
+ testsudo libremakepkg -l "$roundup_test_name" &> "$tmpdir/out" || { status=$?; tail "$tmpdir/out"|cat -v; return $status; }
+ not testsudo librechroot -l "$roundup_test_name" run libretools-testpkg1 'second time, fail'
+}
+
+it_handles_PKGDEST_not_existing() {
+ require network sudo || return 0
+ cp libremakepkg.d/PKGBUILD-hello "$tmpdir/PKGBUILD"
+ cd "$tmpdir"
+
+ libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty
+ testsudo env PKGDEST="$tmpdir/dest/pkgdest" libremakepkg -l "$roundup_test_name"
+
+ globfile dest/pkgdest/libretools-hello-1.0-1-any.pkg.tar.?z
+}
+
+it_displays_help_as_normal_user() {
+ rm -rf "$XDG_CONFIG_HOME"
+ LC_ALL=C libremakepkg -h >$tmpdir/stdout 2>$tmpdir/stderr
+
+ [[ "$(sed 1q $tmpdir/stdout)" =~ Usage:.* ]]
+ empty $tmpdir/stderr
+}
+
+it_otherwise_fails_as_normal_user() {
+ # I do this to give it a chance of passing
+ cp libremakepkg.d/PKGBUILD-hello "$tmpdir/PKGBUILD"
+ cd "$tmpdir"
+
+ libremakepkg >$tmpdir/stdout 2>$tmpdir/stderr || status=$?
+
+ [[ $status != 0 ]]
+ empty $tmpdir/stdout
+ not empty $tmpdir/stderr
+}
+
+it_fails_if_a_hook_fails() {
+ require network sudo || return 0
+ cp libremakepkg.d/PKGBUILD-hello "$tmpdir/PKGBUILD"
+ cd "$tmpdir"
+
+ cat >> "$XDG_CONFIG_HOME/libretools/libretools.conf" <<-eot
+ BLACKLIST='phony://example.com'
+ eot
+
+ libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty
+ testsudo libremakepkg -l "$roundup_test_name" >$tmpdir/stdout 2>$tmpdir/stderr || status=$?
+
+ [[ $status != 0 ]]
+ tail -n1 $tmpdir/stderr | grep -qF '==> ERROR: Failure(s) in check_pkgbuild: check_pkgbuild_nonfree'
+}
+
+it_detects_distcc_files() {
+ require network sudo || return 0
+ cp libremakepkg.d/PKGBUILD-hello "$tmpdir/PKGBUILD"
+ cd "$tmpdir"
+
+ cat >> "$XDG_CONFIG_HOME/libretools/chroot.conf" <<-eot
+ CHROOTEXTRAPKG+=(distcc-nozeroconf socat)
+ eot
+ libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty
+ testsudo librechroot -l "$roundup_test_name" install-name distcc-nozeroconf socat
+
+ # first make sure that the engine works
+ testsudo libremakepkg -l "$roundup_test_name"
+ globfile libretools-hello-1.0-1-any.pkg.tar.?z
+ rm -f -- libretools-hello-1.0-1-any.pkg.tar.?z
+ # now throw a wrench in it
+ testsudo librechroot -l "$roundup_test_name" run touch /bin/distcc-tool
+ # and make sure that the engine broke
+ testsudo libremakepkg -l "$roundup_test_name" || status=$?
+ [[ $status != 0 ]]
+ not globfile libretools-hello-1.0-1-any.pkg.tar.?z
+}
+
+it_allows_distcc_on_long_chrootpaths() {
+ # The maximum AF_UNIX socket path is 108 bytes; so let's have
+ # a chroot name that's guaranteed to be >110 characters.
+ local chrootname=$roundup_test_name.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+
+ require network sudo || return 0
+ cp libremakepkg.d/PKGBUILD-distcc "$tmpdir/PKGBUILD"
+ cd "$tmpdir"
+
+ cat >> "$XDG_CONFIG_HOME/libretools/chroot.conf" <<-eot
+ CHROOTEXTRAPKG+=(distcc-nozeroconf socat)
+ eot
+ libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty
+ testsudo librechroot -l "$chrootname" install-name distcc-nozeroconf socat
+ testsudo libremakepkg -l "$chrootname"
+ globfile libretools-distcc-1.0-1-any.pkg.tar.?z
+}
+
+it_doesnt_symlink_outputs() {
+ require network sudo || return 0
+
+ sed -i /^unset/d "$XDG_CONFIG_HOME/pacman/makepkg.conf"
+
+ cp libremakepkg.d/PKGBUILD-hello "$tmpdir/PKGBUILD"
+ cd "$tmpdir"
+
+ libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty
+ testsudo libremakepkg -l "$roundup_test_name"
+
+ not stat libretools-hello-1.0-1-any.pkg.tar.?z
+ not stat libretools-hello-1.0-1-any.src.tar.?z
+ globfile "$tmpdir/workdir/pkgdest"/libretools-hello-1.0-1-any.pkg.tar.?z
+ globfile "$tmpdir/workdir/srcpkgdest"/libretools-hello-1.0-1-any.src.tar.?z
+}
+
+it_succeeds_with_good_signatures() {
+ require network sudo || return 0
+
+ cp libremakepkg.d/PKGBUILD-signed "$tmpdir/PKGBUILD"
+ cp libremakepkg.d/hello.sh "$tmpdir/hello.sh"
+ cd "$tmpdir"
+ gpg --detach-sign --use-agent --no-armor hello.sh
+
+ libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty
+ testsudo libremakepkg -l "$roundup_test_name"
+}
+
+it_fails_with_bad_signatures() {
+ require network sudo || return 0
+
+ cp libremakepkg.d/PKGBUILD-signed "$tmpdir/PKGBUILD"
+ cp libremakepkg.d/hello.sh "$tmpdir/hello.sh"
+ cd "$tmpdir"
+ gpg --detach-sign --use-agent --no-armor hello.sh
+ echo 'echo pwned' >> hello.sh
+ makepkg -g >> PKGBUILD
+
+ libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty
+ not testsudo libremakepkg -l "$roundup_test_name"
+}
+
+it_does_not_run_pkgver() {
+ require network sudo || return 0
+
+ cp libremakepkg.d/PKGBUILD-pkgver "$tmpdir/PKGBUILD"
+ pushd "$tmpdir"
+
+ libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty
+ testsudo libremakepkg -l "$roundup_test_name"
+
+ globfile libretools-pkgver-1-1-any.pkg.tar.?z
+ not globfile libretools-pkgver-2-1-any.pkg.tar.?z
+ popd
+ diff -u libremakepkg.d/PKGBUILD-pkgver "$tmpdir/PKGBUILD"
+}