diff options
author | A. Wilcox <AWilcox@Wilcox-Tech.com> | 2018-05-23 03:49:44 -0500 |
---|---|---|
committer | A. Wilcox <AWilcox@Wilcox-Tech.com> | 2019-03-06 18:36:48 -0600 |
commit | 240ad5ce4a82c47dabb1707e564244ae0aa580cf (patch) | |
tree | 97e1d3cb5d679a08fcb37650695aa51ad02d87ed /run-tests.sh | |
parent | cc80c96e18a300ad3b98038d8d6715e9fc55f693 (diff) | |
download | abuild-240ad5ce4a82c47dabb1707e564244ae0aa580cf.tar.gz abuild-240ad5ce4a82c47dabb1707e564244ae0aa580cf.tar.bz2 abuild-240ad5ce4a82c47dabb1707e564244ae0aa580cf.tar.xz abuild-240ad5ce4a82c47dabb1707e564244ae0aa580cf.zip |
Add rudimentary test suite for abuild and newapkbuild
Diffstat (limited to 'run-tests.sh')
-rwxr-xr-x | run-tests.sh | 217 |
1 files changed, 217 insertions, 0 deletions
diff --git a/run-tests.sh b/run-tests.sh new file mode 100755 index 0000000..ff99a49 --- /dev/null +++ b/run-tests.sh @@ -0,0 +1,217 @@ +#!/bin/sh +# +# Test suite for abuild(1), newapkbuild(1), and friends +# +# Copyright (c) 2018, A. Wilcox <awilfox@adelielinux.org> +# Licensed under the GPL 2.0 only. No later version. +# + +##################################################################### +# Ground rules: +# +# * Must be POSIX shell compatible (no bash / dash extensions) +# * Must test all common operations of newapkbuild +# (not necessarily every single kind of package, but common ones) +# * Must test all operations of abuild +##################################################################### + + +#################### +# SOME HELPFUL FNS # +#################### + +# Note: We always use colours. +NORMAL="\033[1;0m" +STRONG="\033[1;1m" +RED="\033[1;31m" +GREEN="\033[1;32m" +YELLOW="\033[1;33m" +BLUE="\033[1;34m" + +GOOD_TESTS=0 +SKIP_TESTS=0 +FAIL_TESTS=0 + + +## +# I've used green for OK, yellow for skipped tests, and red for failed tests. +# I also made sure each one jets out from the other, in case an operator may +# be colour-blind. Please don't change the text to align (GOOD/SKIP/FAIL), +# as this is meant to be as easy to read for as many people as possible. +## + +# $1 = test name +# prints "OK: Test name" then increments GOOD_TESTS +good() { + printf "${GREEN}OK${NORMAL}: $1\n" + GOOD_TESTS=$((GOOD_TESTS+1)) +} + +# $1 = test name +# prints "SKIP: Test name" then increments SKIP_TESTS +skip() { + printf "${YELLOW}SKIP${NORMAL}: $1\n" + SKIP_TESTS=$((SKIP_TESTS+1)) +} + +# $1 = test name +# prints "FAILED: Test name" then increments FAIL_TESTS +fail() { + printf "${RED}FAILED${NORMAL}: $1\n" + FAIL_TESTS=$((FAIL_TESTS+1)) + [ -n "${DEBUG}" ] && exit 1 +} + + +expect_success() { + if [ $? -eq 0 ]; then + good $1 + else + fail $1 + fi +} + +expect_success_with_file() { + if [ $? -eq 0 ]; then + if [ -f $2 ]; then + good $1 + else + fail "$1 - expected file $2 was not present" + fi + else + fail $1 + fi +} + +expect_failure() { + if [ $? -eq 0 ]; then + fail $1 + else + good $1 + fi +} + + + +#################### +# TESTS: abuild(1) # +#################### + +# params: +# $1 - test name (tests/$FOO/APKBUILD) +# $2 - phase to test (verify, etc) +# $3 - expect_success, expect_success_with_file, or expect_failure +# $4 - optional second parameter to your expect_* function if it needs one +abuild_test() { + local file + file=tests/abuild/$1/APKBUILD + + if ! [ -f $file ]; then + skip $1 + else + APKBUILD=$file ./abuild $2 1>last-test-out.log 2>last-test-err.log + $3 $1 $4 + fi +} + + +# Does the system verify checksums correctly? +abuild_test verify1 verify expect_success +abuild_test verify2 verify expect_failure + +# Does the system run test suites properly? +abuild_test check1 check expect_success_with_file "tests/abuild/check1/src/checked" +abuild_test check2 check expect_failure +abuild_test checkroot1 check expect_success + + + +######################### +# TESTS: newapkbuild(1) # +######################### + +# params: +# $1 - test name +# $2 - pattern to grep for in created APKBUILD +# all other params - passed to newapkbuild +newapkbuild_simple_test() { + set $@ + local name pattern + name=$1 + shift + pattern=$1 + shift + pushd "tests/newapkbuild" 1>/dev/null + [ -d $name ] && rm -r $name + newapkbuild -n $name $@ + if [ $? -ne 0 ]; then + fail $name + return + fi + grep $pattern $name/APKBUILD 1>/dev/null + expect_success $name + popd 1>/dev/null +} + + +newapkbuild_simple_test simplename 'pkgname=simplename' simplename-1.0 +newapkbuild_simple_test simpledesc 'pkgdesc="Example"' -d "Example" simpledesc-1.0 +newapkbuild_simple_test simplever 'pkgver=1.0' simplever-1.0 + + +# params: +# $1 - test name (test-autoconf-pkg, etc) +# $2 - the invocation expected ("./configure", "cmake", etc) +newapkbuild_pkg_test() { + pushd "tests/newapkbuild" 1>/dev/null + [ -d $1 ] && rm -r $1 + newapkbuild "https://distfiles.adelielinux.org/source/newapkbuild-tests/$1-1.0.tar.xz" 1>/dev/null 2>/dev/null + popd 1>/dev/null + if [ $? -ne 0 ]; then + fail "$1: newapkbuild failed" + else + grep "$2" tests/newapkbuild/$1/APKBUILD 1>/dev/null + if [ $? -ne 0 ]; then fail "$1: no '$2' invocation found"; return 1; fi + grep "pkgname=$1" tests/newapkbuild/$1/APKBUILD 1>/dev/null + if [ $? -ne 0 ]; then fail "$1: wrong name"; return 1; fi + grep 'pkgver=1.0' tests/newapkbuild/$1/APKBUILD 1>/dev/null + if [ $? -ne 0 ]; then fail "$1: wrong version"; return 1; fi + expect_success $1 + fi +} + + +newapkbuild_pkg_test test-autoconf-pkg "./configure" +newapkbuild_pkg_test test-cmake-pkg "cmake" +newapkbuild_pkg_test test-pkg "make" + + +########## +# FINISH # +########## + +printf "\n\n== Test Summary ==\n" + +if [ ${GOOD_TESTS} -gt 0 ]; then + good "${GOOD_TESTS} test(s)" +fi + + +if [ ${SKIP_TESTS} -gt 0 ]; then + skip "${SKIP_TESTS} test(s)" +fi + + +if [ ${FAIL_TESTS} -gt 0 ]; then + fail "${FAIL_TESTS} test(s)" +fi + +printf "\n" + + +if [ -z "${DEBUG}" ]; then + rm last-test-out.log + rm last-test-err.log +fi + +# fini |