diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/.gitignore | 1 | ||||
-rw-r--r-- | test/aur-test.sh | 30 | ||||
-rw-r--r-- | test/is_built-test.sh | 60 | ||||
-rw-r--r-- | test/lib-blacklist-test.sh | 132 | ||||
-rw-r--r-- | test/lib-conf-test.sh | 43 | ||||
-rw-r--r-- | test/lib-messages-test.sh | 48 | ||||
-rw-r--r-- | test/librechroot-test.sh | 76 | ||||
-rw-r--r-- | test/librelib-test.sh | 73 | ||||
-rw-r--r-- | test/libremakepkg-test.sh | 63 | ||||
-rw-r--r-- | test/libremakepkg.d/PKGBUILD-hello | 19 | ||||
-rw-r--r-- | test/librestage-test.sh | 85 | ||||
-rw-r--r-- | test/librestage.d/PKGBUILD-hello | 19 | ||||
-rw-r--r-- | test/librestage.d/PKGBUILD-split | 42 | ||||
-rw-r--r-- | test/pkgbuild-check-licenses-test.sh | 27 | ||||
-rw-r--r-- | test/pkgbuild-check-nonfree-test.sh | 71 | ||||
-rw-r--r-- | test/pkgbuild-check-nonfree.d/PKGBUILD.free | 18 | ||||
-rw-r--r-- | test/pkgbuild-check-nonfree.d/PKGBUILD.nonfree | 18 | ||||
-rw-r--r-- | test/pkgbuild-check-nonfree.d/PKGBUILD.nonfree-replacement | 18 | ||||
-rw-r--r-- | test/test-common.sh | 38 | ||||
-rwxr-xr-x | test/testenv | 60 |
20 files changed, 941 insertions, 0 deletions
diff --git a/test/.gitignore b/test/.gitignore new file mode 100644 index 0000000..2226ac6 --- /dev/null +++ b/test/.gitignore @@ -0,0 +1 @@ +.roundup.* diff --git a/test/aur-test.sh b/test/aur-test.sh new file mode 100644 index 0000000..1fbe659 --- /dev/null +++ b/test/aur-test.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env roundup + +describe aur + +. ./test-common.sh + +before() { + _before +} + +after() { + _after +} + +it_displays_help() { + LANG=C aur -h >$tmpdir/stdout 2>$tmpdir/stderr + + [[ "$(sed 1q $tmpdir/stdout)" =~ Usage:.* ]] + [[ -z "$(cat $tmpdir/stderr)" ]] +} + +it_fails_with_0_args() { + aur >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? + + [[ $stat != 0 ]] + [[ -z "$(cat $tmpdir/stdout)" ]] + [[ -n "$(cat $tmpdir/stderr)" ]] +} + +# TODO: Actually test diff --git a/test/is_built-test.sh b/test/is_built-test.sh new file mode 100644 index 0000000..62847e5 --- /dev/null +++ b/test/is_built-test.sh @@ -0,0 +1,60 @@ +#!/usr/bin/env roundup + +describe is_built + +. ./test-common.sh + +before() { + _before +} + +after() { + _after +} + +it_displays_help() { + LANG=C is_built -h >$tmpdir/stdout 2>$tmpdir/stderr + + [[ "$(sed 1q $tmpdir/stdout)" =~ Usage:.* ]] + [[ -z "$(cat $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)" ]] +} + +it_succeeds_with_1_arg() { + is_built sh >$tmpdir/stdout 2>$tmpdir/stderr + + [[ -z "$(cat $tmpdir/stdout)" ]] + [[ -z "$(cat $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)" ]] +} + +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)" ]] +} + +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)" ]] +} diff --git a/test/lib-blacklist-test.sh b/test/lib-blacklist-test.sh new file mode 100644 index 0000000..c496167 --- /dev/null +++ b/test/lib-blacklist-test.sh @@ -0,0 +1,132 @@ +#!/usr/bin/env roundup + +describe libreblacklist + +. ./test-common.sh + +before() { + _before +} + +after() { + _after +} + +it_works_with_just_pkgname() { + v="$(libreblacklist normalize <<<skype)"; [[ $v == 'skype::' ]] + v="$(libreblacklist get-pkg <<<skype)"; [[ $v == skype ]] + v="$(libreblacklist get-rep <<<skype)"; [[ -z $v ]] + v="$(libreblacklist get-reason <<<skype)"; [[ -z $v ]] +} + +it_works_with_everything_set() { + line='linux:linux-libre:nonfree blobs and firmwares' + v="$(libreblacklist normalize <<<"$line")"; [[ $v == "$line" ]] + v="$(libreblacklist get-pkg <<<"$line")"; [[ $v == 'linux' ]] + v="$(libreblacklist get-rep <<<"$line")"; [[ $v == 'linux-libre' ]] + v="$(libreblacklist get-reason <<<"$line")"; [[ $v == 'nonfree blobs and firmwares' ]] +} + +it_normalizes_correctly() { + v="$(libreblacklist normalize <<<pkg)"; [[ $v == 'pkg::' ]] + v="$(libreblacklist normalize <<<pkg:)"; [[ $v == 'pkg::' ]] + v="$(libreblacklist normalize <<<pkg::)"; [[ $v == 'pkg::' ]] + v="$(libreblacklist normalize <<<pkg:rep)"; [[ $v == 'pkg:rep:' ]] + v="$(libreblacklist normalize <<<pkg:rep:)"; [[ $v == 'pkg:rep:' ]] + v="$(libreblacklist normalize <<<pkg:rep:reason)"; [[ $v == 'pkg:rep:reason' ]] + v="$(libreblacklist normalize <<<pkg:rep:reason:)"; [[ $v == 'pkg:rep:reason:' ]] +} + +it_works_with_colons_in_reason() { + line='package:replacement:my:reason' + v="$(libreblacklist normalize <<<"$line")"; [[ $v == "$line" ]] + v="$(libreblacklist get-pkg <<<"$line")"; [[ $v == 'package' ]] + v="$(libreblacklist get-rep <<<"$line")"; [[ $v == 'replacement' ]] + v="$(libreblacklist get-reason <<<"$line")"; [[ $v == 'my:reason' ]] +} + +it_fails_update_when_there_is_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)" ]] +} + +it_fails_cat_when_there_is_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)" ]] +} + +it_fails_update_when_BLACKLIST_is_unset() { + mkdir -p $XDG_CONFIG_HOME/libretools + echo "BLACKLIST=" >$XDG_CONFIG_HOME/libretools/libretools.conf + + libreblacklist update >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? + + [[ $stat != 0 ]] + [[ -z "$(cat $tmpdir/stdout)" ]] + [[ -n "$(cat $tmpdir/stderr)" ]] +} + +it_fails_cat_when_syntax_error_in_conf() { + mkdir -p $XDG_CONFIG_HOME/libretools + # there is a stray single quote in there + echo "BLACKLIST='https://repo.parabolagnulinux.org/docs/blacklist.txt" >$XDG_CONFIG_HOME/libretools/libretools.conf + + libreblacklist cat >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? + + [[ $stat != 0 ]] + [[ -z "$(cat $tmpdir/stdout)" ]] + [[ -n "$(cat $tmpdir/stderr)" ]] +} + +it_downloads_the_blacklist_as_needed() { + require network || return 0 + mkdir -p $XDG_CONFIG_HOME/libretools + echo "BLACKLIST=https://repo.parabolagnulinux.org/docs/blacklist.txt" >$XDG_CONFIG_HOME/libretools/libretools.conf + + libreblacklist cat >$tmpdir/stdout 2>$tmpdir/stderr + + [[ -n "$(cat $tmpdir/stdout)" ]] +} + +it_downloads_the_blacklist_repeatedly() { + require network || return 0 + mkdir -p $XDG_CONFIG_HOME/libretools + echo "BLACKLIST=https://repo.parabolagnulinux.org/docs/blacklist.txt" >$XDG_CONFIG_HOME/libretools/libretools.conf + + libreblacklist update + libreblacklist update +} + +it_displays_help_and_fails_with_no_args() { + LANG=C libreblacklist >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? + + [[ $stat != 0 ]] + [[ -z "$(cat $tmpdir/stdout)" ]] + [[ "$(sed 1q $tmpdir/stderr)" =~ 'Usage: libreblacklist ' ]] +} + +it_displays_help_when_given_h() { + LANG=C libreblacklist -h >$tmpdir/stdout 2>$tmpdir/stderr + + [[ "$(sed 1q $tmpdir/stdout)" =~ 'Usage: libreblacklist ' ]] + [[ -z "$(cat $tmpdir/stderr)" ]] +} + +it_displays_help_when_given_h_cat() { + LANG=C libreblacklist -h cat >$tmpdir/stdout 2>$tmpdir/stderr + + [[ "$(sed 1q $tmpdir/stdout)" == 'Usage: libreblacklist cat' ]] + [[ -z "$(cat $tmpdir/stderr)" ]] +} diff --git a/test/lib-conf-test.sh b/test/lib-conf-test.sh new file mode 100644 index 0000000..0d028b8 --- /dev/null +++ b/test/lib-conf-test.sh @@ -0,0 +1,43 @@ +#!/usr/bin/env roundup + +describe lib/conf.sh + +. ./test-common.sh + +before() { + _before test-conf.sh +} + +after() { + _after +} + +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 + . "$tmpdir/makepkg.conf" + [[ $PKGDEST == /pkgdest ]] +} + +it_figures_out_HOME_when_root() { + require sudo || return 0 + # This one is tricky, because it does the job too well, it will find + # the actual HOME, instead of the test environment HOME. Therefore, we + # will just check that [[ $HOME != /root ]] + cd "$tmpdir" + echo '. $(librelib conf.sh); echo "$LIBREHOME"' > test.sh + LIBREHOME=$(testsudo bash ./test.sh) + [[ $LIBREHOME != /root ]] +} + +it_respects_custom_HOME() { + cd "$tmpdir" + echo '. $(librelib conf.sh); echo "$LIBREHOME"' > test.sh + + export HOME=/foo + LIBREHOME=$(bash ./test.sh) + + [[ $LIBREHOME == /foo ]] +} diff --git a/test/lib-messages-test.sh b/test/lib-messages-test.sh new file mode 100644 index 0000000..826556b --- /dev/null +++ b/test/lib-messages-test.sh @@ -0,0 +1,48 @@ +#!/usr/bin/env roundup + +describe libremessages + +. ./test-common.sh + +before() { + _before +} + +after() { + _after +} + +it_can_be_included_twice() ( + . libremessages + . libremessages +) + +it_can_be_included_with_set_euE() ( + set -euE + . libremessages +) + +it_works_with_no_color_and_set_euE() ( + ( + unset TERM + set -euE + . libremessages + msg Foo + ) >$tmpdir/stdout 2>$tmpdir/stderr + + [[ -z "$(cat $tmpdir/stdout)" ]] + [[ -n "$(cat $tmpdir/stderr)" ]] +) + +it_can_be_called_without_including() { + libremessages msg Foo >$tmpdir/stdout 2>$tmpdir/stderr + + [[ -z "$(cat $tmpdir/stdout)" ]] + [[ -n "$(cat $tmpdir/stderr)" ]] +} + +it_fails_with_msg_and_no_args() { + ret=0 + libremessages msg || ret=$? + [[ $ret != 0 ]] +} diff --git a/test/librechroot-test.sh b/test/librechroot-test.sh new file mode 100644 index 0000000..76afb56 --- /dev/null +++ b/test/librechroot-test.sh @@ -0,0 +1,76 @@ +#!/usr/bin/env roundup + +describe librechroot + +. ./test-common.sh + +before() { + _before librechroot + mkdir -p "$XDG_CONFIG_HOME"/libretools + echo "CHROOTDIR='$tmpdir/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_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 +} + +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 + # TODO: inspect /repo/* more +} + +it_displays_help_as_normal_user() { + rm -rf "$XDG_CONFIG_HOME" + LANG=C librechroot help >$tmpdir/stdout 2>$tmpdir/stderr + + [[ "$(sed 1q $tmpdir/stdout)" =~ Usage:.* ]] + [[ -z "$(cat $tmpdir/stderr)" ]] +} + +it_otherwise_fails_as_normal_user() { + librechroot run true >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? + + [[ $stat != 0 ]] + [[ -z "$(cat $tmpdir/stdout)" ]] + [[ -n "$(cat $tmpdir/stderr)" ]] +} + +it_displays_help_and_fails_with_0_args() { + LANG=C librechroot >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? + + [[ $stat != 0 ]] + [[ -z "$(cat $tmpdir/stdout)" ]] + [[ "$(sed 1q $tmpdir/stderr)" =~ Usage:.* ]] +} + +# requires sudo so we know it's not failing because it needs root +it_fails_for_unknown_commands() { + require sudo || return 0 + testsudo librechroot phony >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? + + [[ $stat != 0 ]] + [[ -z "$(cat $tmpdir/stdout)" ]] + [[ -n "$(cat $tmpdir/stderr)" ]] +} + +# requires sudo so we know it's not failing because it needs root +it_fails_for_unknown_flags() { + require sudo || return 0 + testsudo librechroot -q >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? + + [[ $stat != 0 ]] + [[ -z "$(cat $tmpdir/stdout)" ]] + [[ -n "$(cat $tmpdir/stderr)" ]] +} diff --git a/test/librelib-test.sh b/test/librelib-test.sh new file mode 100644 index 0000000..e86dffe --- /dev/null +++ b/test/librelib-test.sh @@ -0,0 +1,73 @@ +#!/usr/bin/env roundup + +describe librelib + +. ./test-common.sh + +before() { + _before +} + +after() { + _after +} + +it_displays_help_and_fails_with_0_args() { + ret=0 + librelib >$tmpdir/stdout 2>$tmpdir/stderr || ret=$? + + [[ -z "$(cat $tmpdir/stdout)" ]] + [[ "$(sed 1q $tmpdir/stderr)" =~ Usage:.* ]] + [[ $ret != 0 ]] +} + +it_fails_with_2_args() { + ret=0 + librelib a b >$tmpdir/stdout 2>$tmpdir/stderr || ret=$? + + [[ -z "$(cat $tmpdir/stdout)" ]] + [[ -n "$(cat $tmpdir/stderr)" ]] + [[ $ret != 0 ]] +} + +it_displays_usage_text() { + librelib -h >$tmpdir/stdout 2>$tmpdir/stderr + + [[ "$(sed 1q $tmpdir/stdout)" =~ Usage:.* ]] + [[ -z "$(cat $tmpdir/stderr)" ]] +} + +# libremessages is executable +it_finds_messages() { + v1=$(librelib messages) + v2=$(librelib libremessages) + v3=$(librelib messages.sh) + v4=$(librelib libremessages.sh) + + [[ -x "$v1" ]] + [[ "$v1" == "$v2" ]] + [[ "$v1" == "$v3" ]] + [[ "$v1" == "$v4" ]] +} + +# conf.sh is non-executable +it_finds_conf() { + v1=$(librelib conf) + v2=$(librelib libreconf) + v3=$(librelib conf.sh) + v4=$(librelib libreconf.sh) + + [[ -r "$v1" && ! -x "$v1" ]] + [[ "$v1" == "$v2" ]] + [[ "$v1" == "$v3" ]] + [[ "$v1" == "$v4" ]] +} + +it_fails_to_find_phony() { + ret=0 + librelib phony >$tmpdir/stdout 2>$tmpdir/stderr || ret=$? + + [[ -z "$(cat $tmpdir/stdout)" ]] + [[ -n "$(cat $tmpdir/stderr)" ]] + [[ $ret != 0 ]] +} diff --git a/test/libremakepkg-test.sh b/test/libremakepkg-test.sh new file mode 100644 index 0000000..be19e17 --- /dev/null +++ b/test/libremakepkg-test.sh @@ -0,0 +1,63 @@ +#!/usr/bin/env roundup + +describe libremakepkg + +. ./test-common.sh + +before() { + _before libremakepkg + + mkdir -p "$XDG_CONFIG_HOME"/libretools + + 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 "CHROOT='default'" >> "$XDG_CONFIG_HOME"/libretools/chroot.conf + echo "CHROOTEXTRAPKG=()" >> "$XDG_CONFIG_HOME"/libretools/chroot.conf +} + +after() { + _after_sudo +} + +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 + + [[ -f $(echo libretools-hello-1.0-1-any.pkg.tar.?z) ]] +} + +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 + + [[ -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 + + [[ "$(sed 1q $tmpdir/stdout)" =~ Usage:.* ]] + [[ -z "$(cat $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 || stat=$? + + [[ $stat != 0 ]] + [[ -z "$(cat $tmpdir/stdout)" ]] + [[ -n "$(cat $tmpdir/stderr)" ]] +} diff --git a/test/libremakepkg.d/PKGBUILD-hello b/test/libremakepkg.d/PKGBUILD-hello new file mode 100644 index 0000000..706cb24 --- /dev/null +++ b/test/libremakepkg.d/PKGBUILD-hello @@ -0,0 +1,19 @@ +pkgname='libretools-hello' +pkgver=1.0 +license=('GPL') +url='https://parabolagnulinux.org' + +pkgrel=1 +arch=(any) +depends=(sh) + +build() { + cd "$srcdir" + echo '#!/bin/sh' > hello.sh + echo 'echo Hello, world!' >> hello.sh +} + +package() { + cd "$srcdir" + install -Dm755 hello.sh "$pkgdir"/usr/bin/libretools-hello +} diff --git a/test/librestage-test.sh b/test/librestage-test.sh new file mode 100644 index 0000000..849a68c --- /dev/null +++ b/test/librestage-test.sh @@ -0,0 +1,85 @@ +#!/usr/bin/env roundup + +describe librestage + +. ./test-common.sh + +before() { + _before + + mkdir -p $XDG_CONFIG_HOME/libretools + echo "WORKDIR='$tmpdir/workdir'" >$XDG_CONFIG_HOME/libretools/libretools.conf + echo "ARCHES=('x86_64' 'i686' 'misp64el')" >>$XDG_CONFIG_HOME/libretools/libretools.conf + + export HOME=$XDG_CONFIG_HOME + echo 'PKGEXT=.pkg.tar.gz' > $HOME/.makepkg.conf + echo "PKGDEST='$tmpdir/workdir/pkgdest'" >> $HOME/.makepkg.conf + mkdir -p "$tmpdir/workdir/pkgdest" +} + +after() { + _after +} + +it_displays_usage_text() { + rm -rf "$XDG_CONFIG_HOME" + LANG=C librestage -h >$tmpdir/stdout 2>$tmpdir/stderr + + [[ "$(sed 1q "$tmpdir/stdout")" =~ Usage:.* ]] + [[ -z "$(cat "$tmpdir/stderr")" ]] +} + +it_fails_with_0_args() { + librestage >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? + + [[ $stat != 0 ]] + [[ -z "$(cat "$tmpdir/stdout")" ]] + [[ -n "$(cat "$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")" ]] +} + +# This was an actual bug I hit with md/emacs-mdmua a long time ago; solution was +# to use $(get_full_version) +it_stages_split_packages_with_different_versions() { + cp librestage.d/PKGBUILD-split "$tmpdir/PKGBUILD" + cd "$tmpdir" + + makepkg + librestage '~lukeshu' + + # peak at the PKGBUILD to get this info + [[ -f $tmpdir/workdir/staging/~lukeshu/md-0.81-4-any.pkg.tar.gz ]] + [[ -f $tmpdir/workdir/staging/~lukeshu/emacs-mdmua-0.72-4-any.pkg.tar.gz ]] +} + +it_stages_packages_to_multiple_repos() { + cp librestage.d/PKGBUILD-hello "$tmpdir/PKGBUILD" + cd "$tmpdir" + + makepkg + librestage repo1 repo2 repo3 + + [[ -f $tmpdir/workdir/staging/repo1/libretools-hello-1.0-1-any.pkg.tar.gz ]] + [[ -f $tmpdir/workdir/staging/repo2/libretools-hello-1.0-1-any.pkg.tar.gz ]] + [[ -f $tmpdir/workdir/staging/repo3/libretools-hello-1.0-1-any.pkg.tar.gz ]] +} + + +it_stages_packages_without_PKGDEST() { + echo "PKGDEST=''" >> $HOME/.makepkg.conf + + cp librestage.d/PKGBUILD-hello "$tmpdir/PKGBUILD" + cd "$tmpdir" + + makepkg + librestage repo1 + + [[ -f $tmpdir/workdir/staging/repo1/libretools-hello-1.0-1-any.pkg.tar.gz ]] +} diff --git a/test/librestage.d/PKGBUILD-hello b/test/librestage.d/PKGBUILD-hello new file mode 100644 index 0000000..706cb24 --- /dev/null +++ b/test/librestage.d/PKGBUILD-hello @@ -0,0 +1,19 @@ +pkgname='libretools-hello' +pkgver=1.0 +license=('GPL') +url='https://parabolagnulinux.org' + +pkgrel=1 +arch=(any) +depends=(sh) + +build() { + cd "$srcdir" + echo '#!/bin/sh' > hello.sh + echo 'echo Hello, world!' >> hello.sh +} + +package() { + cd "$srcdir" + install -Dm755 hello.sh "$pkgdir"/usr/bin/libretools-hello +} diff --git a/test/librestage.d/PKGBUILD-split b/test/librestage.d/PKGBUILD-split new file mode 100644 index 0000000..a8ec1ef --- /dev/null +++ b/test/librestage.d/PKGBUILD-split @@ -0,0 +1,42 @@ +# Maintainer: Luke Shumaker <lukeshu@sbcglobal.net> + +pkgname=("md" "emacs-mdmua") +pkgver=0.81 +pkgrel=4 +arch=('any') +url="https://github.com/nicferrier/$_pkgname" +license=('GPL3') + +#makedepends=(python-distribute) + +#__gitbranch=1d69744 # This is the commit that is 0.81 +__gitbranch=455b6b4 # this is currently HEAD (has bugfixes) +#source=("nicferrier-md-${__gitbranch}.tar.gz::https://github.com/nicferrier/$pkgname/tarball/${__gitbranch}") + +#build() { +# cd "${srcdir}/nicferrier-md-${__gitbranch}" +# +# # fix typo +# sed -i 's/pyprofyfs/pyproxyfs/' setup.py +#} + +package_md() { + pkgdesc="A maildir client and library." + depends=('python' 'python-pyproxyfs') + +# cd "${srcdir}/nicferrier-md-${__gitbranch}" +# python setup.py install --root="$pkgdir/" --optimize=1 +} + +package_emacs-mdmua() { + pkgdesc="An Emacs mail user agent (MUA) build around md." + pkgver='0.72' + depends=("md=0.81" 'emacs>=24') + +# cd "${srcdir}/nicferrier-md-${__gitbranch}" +# cd useragents/emacs +# install -d ${pkgdir}/usr/share/emacs/site-lisp +# install -m 644 *.el ${pkgdir}/usr/share/emacs/site-lisp +} + +#md5sums=('452727348df2f51d7eddade709aceb1c') diff --git a/test/pkgbuild-check-licenses-test.sh b/test/pkgbuild-check-licenses-test.sh new file mode 100644 index 0000000..220ef6b --- /dev/null +++ b/test/pkgbuild-check-licenses-test.sh @@ -0,0 +1,27 @@ +#!/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 new file mode 100644 index 0000000..d547e24 --- /dev/null +++ b/test/pkgbuild-check-nonfree-test.sh @@ -0,0 +1,71 @@ +#!/usr/bin/env roundup + +# avoid carpel tunnel +pcn=pkgbuild-check-nonfree + +describe $pcn + +. ./test-common.sh + +before() { + _before + + mkdir -p $XDG_CONFIG_HOME/libretools + echo "BLACKLIST='phony://example.com'" >$XDG_CONFIG_HOME/libretools/libretools.conf + + local blacklist=$XDG_CACHE_HOME/libretools/blacklist.txt + mkdir -p "${blacklist%/*}" + echo 'linux:linux-libre:nonfree blobs and firmwares' >$blacklist + echo 'skype' >>$blacklist +} + +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 $pcn -h >$tmpdir/stdout 2>$tmpdir/stderr + stat=$? + + [[ "$(sed 1q $tmpdir/stdout)" =~ Usage:.* ]] + [[ -z "$(cat $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)" ]] + [[ $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)" ]] + [[ $stat == 0 ]] +} + +it_fails_with_15_for_nonfree_depend() { + $pcn $pcn.d/PKGBUILD.nonfree >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? + + [[ -z "$(cat $tmpdir/stdout)" ]] + [[ -n "$(cat $tmpdir/stderr)" ]] + [[ $stat == 15 ]] +} + +it_fails_when_there_is_no_blacklist() { + mkdir -p $XDG_CONFIG_HOME/libretools + echo "BLACKLIST='phony://example.com'" >$XDG_CONFIG_HOME/libretools/libretools.conf + rm $XDG_CACHE_HOME/libretools/blacklist.txt + + $pcn $pcn.d/PKGBUILD.free >$tmpdir/stdout 2>$tmpdir/stderr || stat=$? + + [[ -z "$(cat $tmpdir/stdout)" ]] + [[ -n "$(cat $tmpdir/stderr)" ]] + [[ $stat != 0 ]] && [[ $stat != 15 ]] +} diff --git a/test/pkgbuild-check-nonfree.d/PKGBUILD.free b/test/pkgbuild-check-nonfree.d/PKGBUILD.free new file mode 100644 index 0000000..4b8f0dd --- /dev/null +++ b/test/pkgbuild-check-nonfree.d/PKGBUILD.free @@ -0,0 +1,18 @@ +pkgname=wmii +pkgver=3.9.2 +pkgrel=3 +pkgdesc="A small, dynamic window manager for X11" +arch=('i686' 'x86_64') +license=('MIT') +url="http://wmii.suckless.org/" +depends=('libxft' 'libxrandr' 'libxinerama' 'dash') +source=() +md5sums=() + +build() { + : +} + +package() { + : +} diff --git a/test/pkgbuild-check-nonfree.d/PKGBUILD.nonfree b/test/pkgbuild-check-nonfree.d/PKGBUILD.nonfree new file mode 100644 index 0000000..3a7afa4 --- /dev/null +++ b/test/pkgbuild-check-nonfree.d/PKGBUILD.nonfree @@ -0,0 +1,18 @@ +pkgname=wmii +pkgver=3.9.2 +pkgrel=3 +pkgdesc="A small, dynamic window manager for X11" +arch=('i686' 'x86_64') +license=('MIT') +url="http://wmii.suckless.org/" +depends=('skype') # random non-free package with no other information +source=() +md5sums=() + +build() { + : +} + +package() { + : +} diff --git a/test/pkgbuild-check-nonfree.d/PKGBUILD.nonfree-replacement b/test/pkgbuild-check-nonfree.d/PKGBUILD.nonfree-replacement new file mode 100644 index 0000000..7855bdc --- /dev/null +++ b/test/pkgbuild-check-nonfree.d/PKGBUILD.nonfree-replacement @@ -0,0 +1,18 @@ +pkgname=wmii +pkgver=3.9.2 +pkgrel=3 +pkgdesc="A small, dynamic window manager for X11" +arch=('i686' 'x86_64') +license=('MIT') +url="http://wmii.suckless.org/" +depends=('linux') # random non-free package with a replacement +source=() +md5sums=() + +build() { + : +} + +package() { + : +} diff --git a/test/test-common.sh b/test/test-common.sh new file mode 100644 index 0000000..01b1b35 --- /dev/null +++ b/test/test-common.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +if [[ $HOME == "$(eval echo ~$USER)" ]]; then + libremessages error "\$HOME is the default for %s; use testenv: %s" "$USER" "$HOME" + exit 1 +fi + +_before() { + tmpdir="$(mktemp -d --tmpdir "test-${roundup_desc//\//-}.XXXXXXXXXXXX")" + stat=0 +} + +_after() { + rm -rf -- "$tmpdir" "$XDG_CONFIG_HOME" "$XDG_CACHE_HOME" +} + +_after_sudo() { + if [[ $SUDO ]]; then + sudo rm -rf -- "$tmpdir" "$XDG_CONFIG_HOME" "$XDG_CACHE_HOME" + else + rm -rf -- "$tmpdir" "$XDG_CONFIG_HOME" "$XDG_CACHE_HOME" + fi +} + +require() { + local missing=() + if libremessages in_array "network" "$@" && ! [[ $NETWORK ]]; then + missing+=('networking') + fi + if libremessages in_array "sudo" "$@" && ! [[ $SUDO ]]; then + missing+=('sudo') + fi + if (( ${#missing[@]} )); then + libremessages warning "Next test requires %s; Skipping (passing)..." "$(echo "${missing[*]}"|sed 's/ /, /g')" &>/dev/tty + return 1 + fi + return 0; +} diff --git a/test/testenv b/test/testenv new file mode 100755 index 0000000..e6c882f --- /dev/null +++ b/test/testenv @@ -0,0 +1,60 @@ +#!/bin/bash + +# Parse the arguments +NETWORK=true +SUDO=true +while [[ $# -gt 0 ]]; do + case "$1" in + --no-network) shift; unset NETWORK;; + --network) shift; NETWORK=true;; + --no-sudo) shift; unset SUDO;; + --sudo) shift; SUDO=true;; + --) shift; break;; + *) break;; + esac +done +export NETWORK SUDO + +# 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 + +# Set up the install to work with +destdir=$TMPDIR/destdir + +old_pwd="$(pwd)" +if [[ -f $0 ]]; then + cd "${0%/*}" +fi +make -C .. install DESTDIR=$destdir &>/dev/null || { + echo 'error creating local install, cannot run tests' + exit 1 +} +cd "$old_pwd" + +# Set up the environment +export PATH="$destdir/usr/bin:$PATH" +export LIBRETOOLS_LIBDIR="$destdir/usr/lib/libretools" +export HOME=$TMPDIR/home +export XDG_CACHE_HOME="$HOME/.cache" +export XDG_CONFIG_HOME="$HOME/.config" + +# Hack to respect our variables in sudo +_sudo() { + local vars=(TMPDIR PATH LIBRETOOLS_LIBDIR XDG_CACHE_HOME XDG_CONFIG_HOME) + local args=() + local var + for var in "${vars[@]}"; do + args+=("$var=${!var}") + done + sudo env "${args[@]}" "$@" +} +printf '%s\n' \ + '#!/bin/bash' \ + "$(declare -f _sudo)" \ + '_sudo "$@"' \ + > "$destdir/usr/bin/testsudo" +chmod 755 "$destdir/usr/bin/testsudo" + +# Run the tests +eval "$@" |