diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/aur-test.sh | 8 | ||||
-rw-r--r-- | test/is_built-test.sh | 28 | ||||
-rw-r--r-- | test/lib-blacklist-test.sh | 34 | ||||
-rw-r--r-- | test/lib-conf-test.sh | 2 | ||||
-rw-r--r-- | test/lib-messages-test.sh | 8 | ||||
-rw-r--r-- | test/librechroot-test.sh | 79 | ||||
-rw-r--r-- | test/librefetch-test.sh | 48 | ||||
-rw-r--r-- | test/librefetch.d/PKGBUILD | 15 | ||||
-rw-r--r-- | test/librefetch.d/list.txt | 2 | ||||
-rw-r--r-- | test/librelib-test.sh | 12 | ||||
-rw-r--r-- | test/libremakepkg-test.sh | 78 | ||||
-rw-r--r-- | test/libremakepkg.d/PKGBUILD-netbuild | 17 | ||||
-rw-r--r-- | test/libremakepkg.d/PKGBUILD-netpackage | 12 | ||||
-rw-r--r-- | test/libremakepkg.d/PKGBUILD-netprepare | 17 | ||||
-rw-r--r-- | test/libremakepkg.d/PKGBUILD-testpkg1 | 19 | ||||
-rw-r--r-- | test/libremakepkg.d/PKGBUILD-testpkg2 | 19 | ||||
-rw-r--r-- | test/librerelease-test.sh | 56 | ||||
-rw-r--r-- | test/librestage-test.sh | 12 | ||||
-rw-r--r-- | test/pkgbuild-check-licenses-test.sh | 27 | ||||
-rw-r--r-- | test/pkgbuild-check-nonfree-test.sh | 31 | ||||
-rw-r--r-- | test/test-common.sh | 44 | ||||
-rwxr-xr-x | test/testenv | 5 |
22 files changed, 454 insertions, 119 deletions
diff --git a/test/aur-test.sh b/test/aur-test.sh index 1fbe659..5de590b 100644 --- a/test/aur-test.sh +++ b/test/aur-test.sh @@ -13,18 +13,18 @@ after() { } it_displays_help() { - LANG=C aur -h >$tmpdir/stdout 2>$tmpdir/stderr + LC_ALL=C aur -h >$tmpdir/stdout 2>$tmpdir/stderr [[ "$(sed 1q $tmpdir/stdout)" =~ Usage:.* ]] - [[ -z "$(cat $tmpdir/stderr)" ]] + empty $tmpdir/stderr } it_fails_with_0_args() { aur >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? [[ $stat != 0 ]] - [[ -z "$(cat $tmpdir/stdout)" ]] - [[ -n "$(cat $tmpdir/stderr)" ]] + empty $tmpdir/stdout + not empty $tmpdir/stderr } # TODO: Actually test diff --git a/test/is_built-test.sh b/test/is_built-test.sh index 62847e5..f7f6c65 100644 --- a/test/is_built-test.sh +++ b/test/is_built-test.sh @@ -13,48 +13,48 @@ after() { } it_displays_help() { - LANG=C is_built -h >$tmpdir/stdout 2>$tmpdir/stderr + LC_ALL=C is_built -h >$tmpdir/stdout 2>$tmpdir/stderr [[ "$(sed 1q $tmpdir/stdout)" =~ Usage:.* ]] - [[ -z "$(cat $tmpdir/stderr)" ]] + empty $tmpdir/stderr } it_fails_with_0_args() { is_built >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? [[ $stat -gt 1 ]] - [[ -z "$(cat $tmpdir/stdout)" ]] - [[ -n "$(cat $tmpdir/stderr)" ]] + empty $tmpdir/stdout + not empty $tmpdir/stderr } it_succeeds_with_1_arg() { is_built sh >$tmpdir/stdout 2>$tmpdir/stderr - [[ -z "$(cat $tmpdir/stdout)" ]] - [[ -z "$(cat $tmpdir/stderr)" ]] + empty $tmpdir/stdout + empty $tmpdir/stderr } it_returns_1_for_non_existent_package() { is_built phony-ne-package 100 >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? - [[ $stat == 1 ]] - [[ -z "$(cat $tmpdir/stdout)" ]] - [[ -z "$(cat $tmpdir/stderr)" ]] + [[ $stat == 1 ]] + empty $tmpdir/stdout + empty $tmpdir/stderr } it_returns_1_for_future_packages() { # If emacs ever goes rapid release, we might need to change this :P is_built emacs 100 >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? - [[ $stat == 1 ]] - [[ -z "$(cat $tmpdir/stdout)" ]] - [[ -z "$(cat $tmpdir/stderr)" ]] + [[ $stat == 1 ]] + empty $tmpdir/stdout + empty $tmpdir/stderr } it_returns_0_for_past_packages() { # If emacs ever goes rapid release, we might need to change this :P is_built emacs 1 >$tmpdir/stdout 2>$tmpdir/stderr - [[ -z "$(cat $tmpdir/stdout)" ]] - [[ -z "$(cat $tmpdir/stderr)" ]] + empty $tmpdir/stdout + empty $tmpdir/stderr } diff --git a/test/lib-blacklist-test.sh b/test/lib-blacklist-test.sh index c496167..9dfd5da 100644 --- a/test/lib-blacklist-test.sh +++ b/test/lib-blacklist-test.sh @@ -45,26 +45,26 @@ it_works_with_colons_in_reason() { v="$(libreblacklist get-reason <<<"$line")"; [[ $v == 'my:reason' ]] } -it_fails_update_when_there_is_no_blacklist_or_network() { +it_fails_update_with_no_blacklist_or_network() { mkdir -p $XDG_CONFIG_HOME/libretools echo "BLACKLIST='phony://example.com'" >$XDG_CONFIG_HOME/libretools/libretools.conf libreblacklist update >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? [[ $stat != 0 ]] - [[ -z "$(cat $tmpdir/stdout)" ]] - [[ -n "$(cat $tmpdir/stderr)" ]] + empty $tmpdir/stdout + not empty $tmpdir/stderr } -it_fails_cat_when_there_is_no_blacklist_or_network() { +it_fails_cat_with_no_blacklist_or_network() { mkdir -p $XDG_CONFIG_HOME/libretools echo "BLACKLIST='phony://example.com'" >$XDG_CONFIG_HOME/libretools/libretools.conf libreblacklist cat >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? [[ $stat != 0 ]] - [[ -z "$(cat $tmpdir/stdout)" ]] - [[ -n "$(cat $tmpdir/stderr)" ]] + empty $tmpdir/stdout + not empty $tmpdir/stderr } it_fails_update_when_BLACKLIST_is_unset() { @@ -74,8 +74,8 @@ it_fails_update_when_BLACKLIST_is_unset() { libreblacklist update >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? [[ $stat != 0 ]] - [[ -z "$(cat $tmpdir/stdout)" ]] - [[ -n "$(cat $tmpdir/stderr)" ]] + empty $tmpdir/stdout + not empty $tmpdir/stderr } it_fails_cat_when_syntax_error_in_conf() { @@ -86,8 +86,8 @@ it_fails_cat_when_syntax_error_in_conf() { libreblacklist cat >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? [[ $stat != 0 ]] - [[ -z "$(cat $tmpdir/stdout)" ]] - [[ -n "$(cat $tmpdir/stderr)" ]] + empty $tmpdir/stdout + not empty $tmpdir/stderr } it_downloads_the_blacklist_as_needed() { @@ -97,7 +97,7 @@ it_downloads_the_blacklist_as_needed() { libreblacklist cat >$tmpdir/stdout 2>$tmpdir/stderr - [[ -n "$(cat $tmpdir/stdout)" ]] + not empty $tmpdir/stdout } it_downloads_the_blacklist_repeatedly() { @@ -110,23 +110,23 @@ it_downloads_the_blacklist_repeatedly() { } it_displays_help_and_fails_with_no_args() { - LANG=C libreblacklist >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? + LC_ALL=C libreblacklist >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? [[ $stat != 0 ]] - [[ -z "$(cat $tmpdir/stdout)" ]] + empty $tmpdir/stdout [[ "$(sed 1q $tmpdir/stderr)" =~ 'Usage: libreblacklist ' ]] } it_displays_help_when_given_h() { - LANG=C libreblacklist -h >$tmpdir/stdout 2>$tmpdir/stderr + LC_ALL=C libreblacklist -h >$tmpdir/stdout 2>$tmpdir/stderr [[ "$(sed 1q $tmpdir/stdout)" =~ 'Usage: libreblacklist ' ]] - [[ -z "$(cat $tmpdir/stderr)" ]] + empty $tmpdir/stderr } it_displays_help_when_given_h_cat() { - LANG=C libreblacklist -h cat >$tmpdir/stdout 2>$tmpdir/stderr + LC_ALL=C libreblacklist -h cat >$tmpdir/stdout 2>$tmpdir/stderr [[ "$(sed 1q $tmpdir/stdout)" == 'Usage: libreblacklist cat' ]] - [[ -z "$(cat $tmpdir/stderr)" ]] + empty $tmpdir/stderr } diff --git a/test/lib-conf-test.sh b/test/lib-conf-test.sh index 0d028b8..efad907 100644 --- a/test/lib-conf-test.sh +++ b/test/lib-conf-test.sh @@ -16,7 +16,7 @@ it_sets_makepkg_vars_in_custom_file() { unset PKGDEST touch "$tmpdir/makepkg.conf" . $(librelib conf.sh) - MAKEPKG_CONF="$tmpdir/makepkg.conf" set_conf_makepkg PKGDEST /pkgdest + MAKEPKG_CONF="$tmpdir/makepkg.conf" set_var makepkg PKGDEST /pkgdest . "$tmpdir/makepkg.conf" [[ $PKGDEST == /pkgdest ]] } diff --git a/test/lib-messages-test.sh b/test/lib-messages-test.sh index 826556b..3fcac63 100644 --- a/test/lib-messages-test.sh +++ b/test/lib-messages-test.sh @@ -30,15 +30,15 @@ it_works_with_no_color_and_set_euE() ( msg Foo ) >$tmpdir/stdout 2>$tmpdir/stderr - [[ -z "$(cat $tmpdir/stdout)" ]] - [[ -n "$(cat $tmpdir/stderr)" ]] + empty $tmpdir/stdout + not empty $tmpdir/stderr ) it_can_be_called_without_including() { libremessages msg Foo >$tmpdir/stdout 2>$tmpdir/stderr - [[ -z "$(cat $tmpdir/stdout)" ]] - [[ -n "$(cat $tmpdir/stderr)" ]] + empty $tmpdir/stdout + not empty $tmpdir/stderr } it_fails_with_msg_and_no_args() { diff --git a/test/librechroot-test.sh b/test/librechroot-test.sh index 76afb56..c22ac58 100644 --- a/test/librechroot-test.sh +++ b/test/librechroot-test.sh @@ -4,55 +4,96 @@ describe librechroot . ./test-common.sh +_setup_chrootdir + before() { _before librechroot + mkdir -p "$XDG_CONFIG_HOME"/libretools - echo "CHROOTDIR='$tmpdir/chrootdir'" > "$XDG_CONFIG_HOME"/libretools/chroot.conf + + echo "CHROOTDIR='${chrootdir}'" > "$XDG_CONFIG_HOME"/libretools/chroot.conf echo "CHROOT='default'" >> "$XDG_CONFIG_HOME"/libretools/chroot.conf echo "CHROOTEXTRAPKG=()" >> "$XDG_CONFIG_HOME"/libretools/chroot.conf } -after() { +after() ( _after_sudo -} +) it_creates_repo_for_new_chroots() { require network sudo || return 0 libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty - testsudo librechroot run test -r /repo/repo.db + testsudo librechroot -l "$roundup_test_name" run test -r /repo/repo.db } it_cleans_the_local_repo_correctly() { require network sudo || return 0 libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty - testsudo librechroot make - testsudo librechroot clean-repo - testsudo librechroot run test -r /repo/repo.db + testsudo librechroot -l "$roundup_test_name" make + testsudo librechroot -l "$roundup_test_name" clean-repo + testsudo librechroot -l "$roundup_test_name" run test -r /repo/repo.db # TODO: inspect /repo/* more } +it_respects_exit_status_if_out_isnt_a_tty() ( + require network sudo || return 0 + set -o pipefail + libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty + r=0 + { testsudo librechroot -l "$roundup_test_name" run exit 3 | cat; } || r=$? + [[ $r == 3 ]] +) + +it_creates_ca_certificates() { + require network sudo || return 0 + libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty + testsudo librechroot -l "$roundup_test_name" run test -r /etc/ssl/certs/ca-certificates.crt +} + +it_disables_networking_when_requested() { + require network sudo || return 0 + libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty + + testsudo librechroot -l "$roundup_test_name" run curl https://repo.parabolagnulinux.org/ >/dev/null + not testsudo librechroot -l "$roundup_test_name" -N run curl https://repo.parabolagnulinux.org/ >/dev/null +} + +it_handles_CHROOTEXTRAPKG_correctly() { + requuire network sudo || return 0 + libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty + + not testsudo librechroot -l "$roundup_test_name" run lsof + echo "CHROOTEXTRAPKG=(lsof)" >> "$XDG_CONFIG_HOME"/libretools/chroot.conf + testsudo librechroot -l "$roundup_test_name" install-name lsof + testsudo librechroot -l "$roundup_test_name" clean-pkgs + testsudo librechroot -l "$roundup_test_name" run lsof + echo "CHROOTEXTRAPKG=()" >> "$XDG_CONFIG_HOME"/libretools/chroot.conf + testsudo librechroot -l "$roundup_test_name" clean-pkgs + not testsudo librechroot -l "$roundup_test_name" run lsof +} + it_displays_help_as_normal_user() { rm -rf "$XDG_CONFIG_HOME" - LANG=C librechroot help >$tmpdir/stdout 2>$tmpdir/stderr + LC_ALL=C librechroot help >$tmpdir/stdout 2>$tmpdir/stderr [[ "$(sed 1q $tmpdir/stdout)" =~ Usage:.* ]] - [[ -z "$(cat $tmpdir/stderr)" ]] + empty $tmpdir/stderr } it_otherwise_fails_as_normal_user() { - librechroot run true >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? + librechroot -l "$roundup_test_name" run true >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? [[ $stat != 0 ]] - [[ -z "$(cat $tmpdir/stdout)" ]] - [[ -n "$(cat $tmpdir/stderr)" ]] + empty $tmpdir/stdout + not empty $tmpdir/stderr } it_displays_help_and_fails_with_0_args() { - LANG=C librechroot >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? + LC_ALL=C librechroot -l "$roundup_test_name" >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? [[ $stat != 0 ]] - [[ -z "$(cat $tmpdir/stdout)" ]] - [[ "$(sed 1q $tmpdir/stderr)" =~ Usage:.* ]] + empty $tmpdir/stdout + [[ "$(sed -n 2p $tmpdir/stderr)" =~ Usage:.* ]] } # requires sudo so we know it's not failing because it needs root @@ -61,8 +102,8 @@ it_fails_for_unknown_commands() { testsudo librechroot phony >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? [[ $stat != 0 ]] - [[ -z "$(cat $tmpdir/stdout)" ]] - [[ -n "$(cat $tmpdir/stderr)" ]] + empty $tmpdir/stdout + not empty $tmpdir/stderr } # requires sudo so we know it's not failing because it needs root @@ -71,6 +112,6 @@ it_fails_for_unknown_flags() { testsudo librechroot -q >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? [[ $stat != 0 ]] - [[ -z "$(cat $tmpdir/stdout)" ]] - [[ -n "$(cat $tmpdir/stderr)" ]] + empty $tmpdir/stdout + not empty $tmpdir/stderr } diff --git a/test/librefetch-test.sh b/test/librefetch-test.sh new file mode 100644 index 0000000..92f67a1 --- /dev/null +++ b/test/librefetch-test.sh @@ -0,0 +1,48 @@ +#!/usr/bin/env roundup + +describe librefetch + +. ./test-common.sh + +before() { + _before + + mkdir -p "$HOME" + printf '%s\n' \ + 'DLAGENTS+=({https,libre}'\''::/usr/bin/librefetch -p "$BUILDFILE" -- %u %o'\'')' \ + 'BUILDDIR=""' \ + > "$HOME/.makepkg.conf" + + mkdir -p "$XDG_CONFIG_HOME/libretools" + printf '%s\n' \ + 'MIRROR="phony://example.com/dir/"' \ + 'DOWNLOADER=/usr/bin/false' \ + > "$XDG_CONFIG_HOME/libretools/librefetch.conf" +} + +after() { + _after +} + +it_displays_help() { + LC_ALL=C librefetch -h >$tmpdir/stdout 2>$tmpdir/stderr + + [[ "$(sed 1q $tmpdir/stdout)" =~ Usage:.* ]] + empty $tmpdir/stderr +} + +it_cleans_src_libre_first() { + cp librefetch.d/* "$tmpdir/" + cd "$tmpdir" + + # create garbage + mkdir -p src-libre/foo + touch src-libre/foo/file + + # run librefetch + makepkg -g + + srcball=src/testpkg-1.0.tar.gz + bsdtar tf "$srcball" > list-pkg.txt + diff -u list.txt list-pkg.txt +} diff --git a/test/librefetch.d/PKGBUILD b/test/librefetch.d/PKGBUILD new file mode 100644 index 0000000..723d82e --- /dev/null +++ b/test/librefetch.d/PKGBUILD @@ -0,0 +1,15 @@ +pkgname=testpkg +pkgver=1.0 +pkgrel=1 +pkgdesc=foo +arch=(any) +source=("libre://$pkgname-$pkgver.tar.gz") + +mksource() { + mkdir "$srcdir/bar" + touch "$srcdir/bar/file" +} + +package() { + :; +} diff --git a/test/librefetch.d/list.txt b/test/librefetch.d/list.txt new file mode 100644 index 0000000..b04d5d1 --- /dev/null +++ b/test/librefetch.d/list.txt @@ -0,0 +1,2 @@ +bar/ +bar/file diff --git a/test/librelib-test.sh b/test/librelib-test.sh index e86dffe..a74ce0a 100644 --- a/test/librelib-test.sh +++ b/test/librelib-test.sh @@ -16,7 +16,7 @@ it_displays_help_and_fails_with_0_args() { ret=0 librelib >$tmpdir/stdout 2>$tmpdir/stderr || ret=$? - [[ -z "$(cat $tmpdir/stdout)" ]] + empty $tmpdir/stdout [[ "$(sed 1q $tmpdir/stderr)" =~ Usage:.* ]] [[ $ret != 0 ]] } @@ -25,8 +25,8 @@ it_fails_with_2_args() { ret=0 librelib a b >$tmpdir/stdout 2>$tmpdir/stderr || ret=$? - [[ -z "$(cat $tmpdir/stdout)" ]] - [[ -n "$(cat $tmpdir/stderr)" ]] + empty $tmpdir/stdout + not empty $tmpdir/stderr [[ $ret != 0 ]] } @@ -34,7 +34,7 @@ it_displays_usage_text() { librelib -h >$tmpdir/stdout 2>$tmpdir/stderr [[ "$(sed 1q $tmpdir/stdout)" =~ Usage:.* ]] - [[ -z "$(cat $tmpdir/stderr)" ]] + empty $tmpdir/stderr } # libremessages is executable @@ -67,7 +67,7 @@ it_fails_to_find_phony() { ret=0 librelib phony >$tmpdir/stdout 2>$tmpdir/stderr || ret=$? - [[ -z "$(cat $tmpdir/stdout)" ]] - [[ -n "$(cat $tmpdir/stderr)" ]] + empty $tmpdir/stdout + not empty $tmpdir/stderr [[ $ret != 0 ]] } diff --git a/test/libremakepkg-test.sh b/test/libremakepkg-test.sh index be19e17..4d8a7c5 100644 --- a/test/libremakepkg-test.sh +++ b/test/libremakepkg-test.sh @@ -4,6 +4,8 @@ describe libremakepkg . ./test-common.sh +_setup_chrootdir + before() { _before libremakepkg @@ -11,7 +13,7 @@ before() { echo "BLACKLIST=https://repo.parabolagnulinux.org/docs/blacklist.txt" >"$XDG_CONFIG_HOME"/libretools/libretools.conf - echo "CHROOTDIR='$tmpdir/chrootdir'" > "$XDG_CONFIG_HOME"/libretools/chroot.conf + echo "CHROOTDIR='${chrootdir}'" > "$XDG_CONFIG_HOME"/libretools/chroot.conf echo "CHROOT='default'" >> "$XDG_CONFIG_HOME"/libretools/chroot.conf echo "CHROOTEXTRAPKG=()" >> "$XDG_CONFIG_HOME"/libretools/chroot.conf } @@ -26,28 +28,90 @@ it_builds_a_trivial_package() { cd "$tmpdir" libremessages msg 'Creating a chroot, may take a few minutes' &>/dev/tty - testsudo libremakepkg + testsudo libremakepkg -l "$roundup_test_name" [[ -f $(echo libretools-hello-1.0-1-any.pkg.tar.?z) ]] } +it_enables_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 + testsudo libremakepkg -l "$roundup_test_name" + [[ -f $(echo 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 [[ -f $(echo libretools-netbuild-1.0-1-any.pkg.tar.?z) ]] + testsudo libremakepkg -l "$roundup_test_name" -N + [[ -f $(echo 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 [[ -f $(echo libretools-netpackage-1.0-1-any.pkg.tar.?z) ]] + testsudo libremakepkg -l "$roundup_test_name" -N + [[ -f $(echo 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" || { r=$?; tail "$tmpdir/out"|cat -v; return $r; } + cd "$tmpdir/2" + testsudo libremakepkg -l "$roundup_test_name" &> "$tmpdir/out" || { r=$?; tail "$tmpdir/out"|cat -v; return $r; } + testsudo librechroot -l "$roundup_test_name" run libretools-testpkg1 'first time, pass' + cd "$tmpdir/3" + testsudo libremakepkg -l "$roundup_test_name" &> "$tmpdir/out" || { r=$?; tail "$tmpdir/out"|cat -v; return $r; } + 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 + testsudo env PKGDEST="$tmpdir/dest/pkgdest" libremakepkg -l "$roundup_test_name" [[ -f $(echo dest/pkgdest/libretools-hello-1.0-1-any.pkg.tar.?z) ]] } it_displays_help_as_normal_user() { rm -rf "$XDG_CONFIG_HOME" - LANG=C libremakepkg -h >$tmpdir/stdout 2>$tmpdir/stderr + LC_ALL=C libremakepkg -h >$tmpdir/stdout 2>$tmpdir/stderr [[ "$(sed 1q $tmpdir/stdout)" =~ Usage:.* ]] - [[ -z "$(cat $tmpdir/stderr)" ]] + empty $tmpdir/stderr } it_otherwise_fails_as_normal_user() { @@ -58,6 +122,6 @@ it_otherwise_fails_as_normal_user() { libremakepkg >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? [[ $stat != 0 ]] - [[ -z "$(cat $tmpdir/stdout)" ]] - [[ -n "$(cat $tmpdir/stderr)" ]] + empty $tmpdir/stdout + not empty $tmpdir/stderr } diff --git a/test/libremakepkg.d/PKGBUILD-netbuild b/test/libremakepkg.d/PKGBUILD-netbuild new file mode 100644 index 0000000..7be896b --- /dev/null +++ b/test/libremakepkg.d/PKGBUILD-netbuild @@ -0,0 +1,17 @@ +pkgname='libretools-netbuild' +pkgver=1.0 +license=('GPL') +url='https://parabolagnulinux.org' + +pkgrel=1 +arch=(any) + +build() { + cd "$srcdir" + curl https://repo.parabolagnulinux.org/ > index.html +} + +package() { + cd "$srcdir" + install -Dm644 index.html "$pkgdir"/usr/share/$pkgname/index.html +} diff --git a/test/libremakepkg.d/PKGBUILD-netpackage b/test/libremakepkg.d/PKGBUILD-netpackage new file mode 100644 index 0000000..cbefe8f --- /dev/null +++ b/test/libremakepkg.d/PKGBUILD-netpackage @@ -0,0 +1,12 @@ +pkgname='libretools-netpackage' +pkgver=1.0 +license=('GPL') +url='https://parabolagnulinux.org' + +pkgrel=1 +arch=(any) + +package() { + install -d "$pkgdir"/usr/share/$pkgname + curl https://repo.parabolagnulinux.org/ > "$pkgdir"/usr/share/$pkgname/index.html +} diff --git a/test/libremakepkg.d/PKGBUILD-netprepare b/test/libremakepkg.d/PKGBUILD-netprepare new file mode 100644 index 0000000..90f3e82 --- /dev/null +++ b/test/libremakepkg.d/PKGBUILD-netprepare @@ -0,0 +1,17 @@ +pkgname='libretools-netprepare' +pkgver=1.0 +license=('GPL') +url='https://parabolagnulinux.org' + +pkgrel=1 +arch=(any) + +prepare() { + cd "$srcdir" + curl https://repo.parabolagnulinux.org/ > index.html +} + +package() { + cd "$srcdir" + install -Dm644 index.html "$pkgdir"/usr/share/$pkgname/index.html +} diff --git a/test/libremakepkg.d/PKGBUILD-testpkg1 b/test/libremakepkg.d/PKGBUILD-testpkg1 new file mode 100644 index 0000000..b7961bb --- /dev/null +++ b/test/libremakepkg.d/PKGBUILD-testpkg1 @@ -0,0 +1,19 @@ +pkgname='libretools-testpkg1' +pkgver=1.0 +license=('GPL') +url='https://parabolagnulinux.org' + +pkgrel=1 +arch=(any) +depends=(sh) + +build() { + cd "$srcdir" + echo '#!/bin/sh' > testpkg1.sh + echo 'echo testpkg1' >> testpkg1.sh +} + +package() { + cd "$srcdir" + install -Dm755 testpkg1.sh "$pkgdir"/usr/bin/libretools-testpkg1 +} diff --git a/test/libremakepkg.d/PKGBUILD-testpkg2 b/test/libremakepkg.d/PKGBUILD-testpkg2 new file mode 100644 index 0000000..11f7fe8 --- /dev/null +++ b/test/libremakepkg.d/PKGBUILD-testpkg2 @@ -0,0 +1,19 @@ +pkgname='libretools-testpkg2' +pkgver=1.0 +license=('GPL') +url='https://parabolagnulinux.org' + +pkgrel=1 +arch=(any) +depends=(sh libretools-testpkg1) + +build() { + cd "$srcdir" + echo '#!/bin/sh' > testpkg2.sh + echo 'libretools-testpkg1' >> testpkg2.sh +} + +package() { + cd "$srcdir" + install -Dm755 testpkg2.sh "$pkgdir"/usr/bin/libretools-testpkg2 +} diff --git a/test/librerelease-test.sh b/test/librerelease-test.sh new file mode 100644 index 0000000..a44b150 --- /dev/null +++ b/test/librerelease-test.sh @@ -0,0 +1,56 @@ +#!/usr/bin/env roundup + +describe librestage + +. ./test-common.sh + +before() { + _before + + mkdir -p $XDG_CONFIG_HOME/libretools + { + echo "WORKDIR='$tmpdir/workdir'" + echo 'REPODEST=repo@repo:/srv/http/repo/staging-$LIBREUSER' + } >$XDG_CONFIG_HOME/libretools/libretools.conf + { + echo 'PKGEXT=.pkg.tar.gz' + echo "PKGDEST='$tmpdir/workdir/pkgdest'" + echo "GPGKEY=YOURKEY" + } > $HOME/.makepkg.conf + mkdir -p "$tmpdir/workdir/pkgdest" +} + +after() { + _after +} + +it_displays_usage_text() { + rm -rf "$XDG_CONFIG_HOME" + LC_ALL=C librerelease -h >"$tmpdir/stdout" 2>"$tmpdir/stderr" + + [[ "$(sed 1q "$tmpdir/stdout")" =~ Usage:.* ]] + empty "$tmpdir/stderr" +} + +it_lists_all_files() { + WORKDIR="$tmpdir/workdir" + mkdir -p "$WORKDIR/staging/repo1" "$WORKDIR/staging/repo2/sub" + touch \ + "$WORKDIR/staging/repo1/file1" \ + "$WORKDIR/staging/repo1/file2" \ + "$WORKDIR/staging/repo2/file with spaces" \ + "$WORKDIR/staging/repo2/sub/subfolder" + unset WORKDIR + LC_ALL=C librerelease -l &>"$tmpdir/list" + + cat > "$tmpdir/list-correct" <<EOF + -> repo1 + file1 + file2 + -> repo2 + file with spaces + sub/subfolder +EOF + + diff "$tmpdir/list-correct" "$tmpdir/list" +} diff --git a/test/librestage-test.sh b/test/librestage-test.sh index 849a68c..460eb58 100644 --- a/test/librestage-test.sh +++ b/test/librestage-test.sh @@ -23,26 +23,26 @@ after() { it_displays_usage_text() { rm -rf "$XDG_CONFIG_HOME" - LANG=C librestage -h >$tmpdir/stdout 2>$tmpdir/stderr + LC_ALL=C librestage -h >$tmpdir/stdout 2>$tmpdir/stderr [[ "$(sed 1q "$tmpdir/stdout")" =~ Usage:.* ]] - [[ -z "$(cat "$tmpdir/stderr")" ]] + empty "$tmpdir/stderr" } it_fails_with_0_args() { librestage >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? [[ $stat != 0 ]] - [[ -z "$(cat "$tmpdir/stdout")" ]] - [[ -n "$(cat "$tmpdir/stderr")" ]] + empty "$tmpdir/stdout" + not empty "$tmpdir/stderr" } it_fails_with_invalid_args() { librestage -q >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? [[ $stat != 0 ]] - [[ -z "$(cat "$tmpdir/stdout")" ]] - [[ -n "$(cat "$tmpdir/stderr")" ]] + empty "$tmpdir/stdout" + not empty "$tmpdir/stderr" } # This was an actual bug I hit with md/emacs-mdmua a long time ago; solution was diff --git a/test/pkgbuild-check-licenses-test.sh b/test/pkgbuild-check-licenses-test.sh deleted file mode 100644 index 220ef6b..0000000 --- a/test/pkgbuild-check-licenses-test.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env roundup - -# avoid carpel tunnel -pcl=pkgbuild-check-licenses - -describe $pcl - -. ./test-common.sh - -before() { - _before -} - -after() { - _after -} - -it_displays_usage_text() { - # This test seems silly, but it makes sure that it is executable, - # syntactically correct, and loading libraries works. - LANG=C $pcl -h >$tmpdir/stdout 2>$tmpdir/stderr - stat=$? - - [[ "$(sed 1q $tmpdir/stdout)" =~ Usage:.* ]] - [[ -z "$(cat $tmpdir/stderr)" ]] - [[ $stat == 0 ]] -} diff --git a/test/pkgbuild-check-nonfree-test.sh b/test/pkgbuild-check-nonfree-test.sh index d547e24..2af2669 100644 --- a/test/pkgbuild-check-nonfree-test.sh +++ b/test/pkgbuild-check-nonfree-test.sh @@ -2,6 +2,7 @@ # avoid carpel tunnel pcn=pkgbuild-check-nonfree +psn=pkgbuild-summarize-nonfree describe $pcn @@ -26,36 +27,42 @@ after() { it_displays_usage_text() { # This test seems silly, but it makes sure that it is executable, # syntactically correct, and loading libraries works. - LANG=C $pcn -h >$tmpdir/stdout 2>$tmpdir/stderr + LC_ALL=C $pcn -h >$tmpdir/stdout 2>$tmpdir/stderr stat=$? [[ "$(sed 1q $tmpdir/stdout)" =~ Usage:.* ]] - [[ -z "$(cat $tmpdir/stderr)" ]] + empty $tmpdir/stderr [[ $stat == 0 ]] } it_succeeds_for_free_depends() { $pcn $pcn.d/PKGBUILD.free >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? - [[ -z "$(cat $tmpdir/stdout)" ]] - [[ -n "$(cat $tmpdir/stderr)" ]] + empty $tmpdir/stdout + not empty $tmpdir/stderr [[ $stat == 0 ]] } it_succeeds_for_nonfree_depend_with_replacement() { $pcn $pcn.d/PKGBUILD.nonfree-replacement >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? - [[ -z "$(cat $tmpdir/stdout)" ]] - [[ -n "$(cat $tmpdir/stderr)" ]] + empty $tmpdir/stdout + not empty $tmpdir/stderr [[ $stat == 0 ]] } -it_fails_with_15_for_nonfree_depend() { +it_fails_for_nonfree_depend() { $pcn $pcn.d/PKGBUILD.nonfree >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? + [[ $stat != 0 ]] + empty $tmpdir/stdout + not empty $tmpdir/stderr - [[ -z "$(cat $tmpdir/stdout)" ]] - [[ -n "$(cat $tmpdir/stderr)" ]] - [[ $stat == 15 ]] + local pcn_stat=$stat + + $psn $pcn_stat >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? + [[ $stat != 0 ]] + empty $tmpdir/stdout + not empty $tmpdir/stderr } it_fails_when_there_is_no_blacklist() { @@ -65,7 +72,7 @@ it_fails_when_there_is_no_blacklist() { $pcn $pcn.d/PKGBUILD.free >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? - [[ -z "$(cat $tmpdir/stdout)" ]] - [[ -n "$(cat $tmpdir/stderr)" ]] + empty $tmpdir/stdout + not empty $tmpdir/stderr [[ $stat != 0 ]] && [[ $stat != 15 ]] } diff --git a/test/test-common.sh b/test/test-common.sh index 01b1b35..c525dd8 100644 --- a/test/test-common.sh +++ b/test/test-common.sh @@ -6,7 +6,12 @@ if [[ $HOME == "$(eval echo ~$USER)" ]]; then fi _before() { + unset PKGDEST SRCDEST SRCPKGDEST LOGDEST + unset BUILDDIR + unset PKGEXT SRCEXT + unset GPGKEY PACKAGER tmpdir="$(mktemp -d --tmpdir "test-${roundup_desc//\//-}.XXXXXXXXXXXX")" + chmod 755 "$tmpdir" stat=0 } @@ -22,7 +27,31 @@ _after_sudo() { fi } -require() { +_setup_chrootdir() { + if [[ -z "$chrootdir" ]]; then + export chrootdir="$(mktemp -d --tmpdir "test-chrootdir.XXXXXXXXXXXX")" + trap "$(printf '_cleanup_chrootdir %q' "$chrootdir")" EXIT + fi +} + +_cleanup_chrootdir() ( + chrootdir=$1 + shopt -s nullglob + if [[ $SUDO ]]; then + for copydir in "$chrootdir"/*/*/; do + local chroottype=$(stat -f -c %T "$copydir") + if [[ "$chroottype" == btrfs ]] && ! mountpoint -q "$copydir"; then + sudo btrfs subvolume delete "$copydir" >/dev/null + fi + done + sudo rm -rf -- "$chrootdir" + else + rm -rf -- "$chrootdir" + fi +) + +require() ( + set +x local missing=() if libremessages in_array "network" "$@" && ! [[ $NETWORK ]]; then missing+=('networking') @@ -35,4 +64,15 @@ require() { return 1 fi return 0; -} +) + +empty() ( + set +x + [[ $(stat -c %s "$1") -eq 0 ]] +) + +# Just using '!' doesn't trip `set -e` +not() ( + set +x + ! eval "$@" +) diff --git a/test/testenv b/test/testenv index e6c882f..847a948 100755 --- a/test/testenv +++ b/test/testenv @@ -15,6 +15,11 @@ while [[ $# -gt 0 ]]; do done export NETWORK SUDO +if [[ $# == 0 ]]; then + echo 'You need to run testenv with arguments!' >&2 + exit 1 +fi + # Set up the working directory, and add the hook to clean it up export TMPDIR="$(mktemp --tmpdir -d libretools-test.XXXXXXXXXX)" trap "rm -rf '$TMPDIR'" EXIT |