From 21024f24af8167ef438ddbc51a2f05e82b978bb6 Mon Sep 17 00:00:00 2001 From: Martin Winkler Date: Tue, 22 Mar 2022 16:26:09 +0100 Subject: [PATCH 1/7] Add more dependencies --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index af886e0..3b143ab 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,8 @@ Replicate `readlink -f` as bash script using mainly dependencies available on mo * `readlink` (without options) * `cd` * `pwd -P` +* `dirname` +* `basename` * `test -e` (as `[ -e ]`) # Known issues -- 2.30.2 From ac939e3bb92416a3b82a2180dbac7faa2c723c48 Mon Sep 17 00:00:00 2001 From: Martin Winkler Date: Tue, 22 Mar 2022 18:18:58 +0100 Subject: [PATCH 2/7] Show link target for input (if available) Revert run rdlink from release (cannot show debug with -xd) --- test/test_rdlink.sh | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/test/test_rdlink.sh b/test/test_rdlink.sh index 8005157..dfd0a44 100755 --- a/test/test_rdlink.sh +++ b/test/test_rdlink.sh @@ -17,15 +17,15 @@ # Internal tests will be executed if no arguments are found readonly test_dir="$(cd "$(dirname -- "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" -readonly tool_rdlink="${test_dir}/../release/rdlink.sh" +readonly tool_rdlink="${test_dir}/../rdlink.sh" readonly tool_readlink="$(command -v readlink) -f --" -readonly build_cmd="${test_dir}/../build.sh" readonly config_path_width=45 readonly color_red='\033[1;31m' readonly color_yellow='\033[1;33m' readonly color_green='\033[1;32m' +readonly color_blue='\033[1;34m' readonly color_less='\033[0m' flag_runall=0 @@ -83,7 +83,8 @@ rl::testcmp() { local actual="${4:-"-"}" local testresult=0 #failed local testresult_graphic="${color_red}✗${color_less}" # alt. symbol ≠ - + local link="$(readlink -- "${input}")" + if [[ "${expect}" == "${actual}" ]] ; then # Don't print success for this flag (( flag_printerror )) && return 0 @@ -91,10 +92,11 @@ rl::testcmp() { testresult_graphic="${color_green}✔${color_less}" # alt. symbol ✓ fi - # Show only reslult as quick overview + # Show result as table (without debug) if (( flag_extendedOutput )); then rl::printPath ${testnum} "${input}" printf " %b\n" "${testresult_graphic}" + [[ "$link" ]] && printf "%10s %b %s%b\n" "" "${color_blue}⤷" "${link}" "${color_less}" if (( ! testresult )); then # Test failed printf " Result: %s\n Exp: %s\n" "${actual}" "${expect}" @@ -115,6 +117,7 @@ rl::testcmp() { (( ! testresult )) && testresult_graphic="→" # "${color_green}→${color_less}" rl::printPath "" "${input}" printf " %b %s\n" "${testresult_graphic}" "${expect}" + [[ "$link" ]] && printf "%b" "${color_blue}" && rl::printPath "" "${link}⤶" && printf " %b\n" "${color_less}" #⤷ # Print actual result if test failed if (( ! testresult )); then printf "%$((config_path_width))s %b %s\n" " " "${color_red}✗${color_less}" "${actual}" @@ -164,8 +167,6 @@ rl::test() { esac done - [[ ! -e "${tool_rdlink}" ]] && "${build_cmd}" - # Cmd line arguments (( ! flag_onlycompete )) && [[ ! "$@" ]] && toassert_init -- 2.30.2 From 2787968487c3307222bc85a92802037136d0e4d3 Mon Sep 17 00:00:00 2001 From: Martin Winkler Date: Tue, 22 Mar 2022 21:07:18 +0100 Subject: [PATCH 3/7] Add version and origin in file header for release of rdlink --- build.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/build.sh b/build.sh index 149e8f6..0250436 100755 --- a/build.sh +++ b/build.sh @@ -14,8 +14,9 @@ build::rdlink() { # -- : End of options marker # -* : Other options are ignored # -# License: GNU GPL V3 or later +# Version: $(git describe --long --tags --always --dirty) # Author: Martin Winkler +# Origin: https://winklerfamilie.eu/git/efelon/rdlink.git # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -- 2.30.2 From 470a8daba6b4121f90029859d147421f4161c13f Mon Sep 17 00:00:00 2001 From: Martin Winkler Date: Wed, 23 Mar 2022 10:04:05 +0100 Subject: [PATCH 4/7] Adding title, rdlink version and test date to the report Report without color when piped --- test/test_rdlink.sh | 287 +++++++++++++++++++++++--------------------- test/totest.sh | 12 +- 2 files changed, 156 insertions(+), 143 deletions(-) diff --git a/test/test_rdlink.sh b/test/test_rdlink.sh index dfd0a44..257d915 100755 --- a/test/test_rdlink.sh +++ b/test/test_rdlink.sh @@ -19,15 +19,17 @@ readonly test_dir="$(cd "$(dirname -- "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" readonly tool_rdlink="${test_dir}/../rdlink.sh" readonly tool_readlink="$(command -v readlink) -f --" +readonly tool_rdlink_version="$(git describe --long --tags --always --dirty)" readonly config_path_width=45 -readonly color_red='\033[1;31m' -readonly color_yellow='\033[1;33m' -readonly color_green='\033[1;32m' -readonly color_blue='\033[1;34m' -readonly color_less='\033[0m' +color_red= ; [ -t 1 ] && color_red='\033[1;31m' +color_yellow= ; [ -t 1 ] && color_yellow='\033[1;33m' +color_green= ; [ -t 1 ] && color_green='\033[1;32m' +color_blue= ; [ -t 1 ] && color_blue='\033[1;34m' +color_less= ; [ -t 1 ] && color_less='\033[0m' +flag_title=0 flag_runall=0 flag_extendedOutput=0 flag_verbose=0 @@ -40,6 +42,149 @@ tocompete=() . "${test_dir}/totest.sh" +rl::test() { + local i=0 + local path= + local arraywalker= + local firstelement= + local testend=0 + local arg= + local excludemsg= + local tests_success=0 + local tests_failed=0 + local tests_skipped=0 + + for arg in "$@"; do + case "$1" in + --) ## End of options + shift && break ;; + -a|--run-all) ## Run all even if tests fail + flag_runall=1 + shift ;; + -x|--extended-output) + flag_extendedOutput=1 + shift ;; + -xd|--verbose) + flag_extendedOutput=1 + flag_verbose=1 + shift ;; + -oa|--only-assert) + flag_onlyassert=1 + shift ;; + -oc|--only-compete) + flag_onlycompete=1 + shift ;; + -e|--error) + flag_printerror=1 + shift ;; + -*|--*) + printf "Invalid argument\n" + exit 1 ;; + esac + done + + # Check if assertion tests need to be performed + (( ! flag_onlycompete )) && [[ ! "$@" ]] && toassert_init + + # Compare against expected result + if (( ${#toassert[@]} )) ; then + rl::printTitle + printf "\n## Assertion tests (\"Expected path\" == rdlink)\n" + fi + for testarray in "${toassert[@]}"; do + i=0 + arraywalker="$testarray"[@] + for path in "${!arraywalker}"; do + if (( ! i )); then + # Print title in array element 0 + printf "### %b\n" "${color_yellow}${path}${color_less}" + (( ! flag_extendedOutput )) && printf "%${config_path_width}s %s %s\n" "" "" "✗ [ACTUAL]" + + elif [ -z "$firstelement" ]; then + # Save first element for string compare + firstelement="${path}" + + elif excludemsg="$(toexclude "${firstelement}")"; then + # Current path is excluded + (( tests_skipped++ )) + rl::printPath "$(( i/2 ))" "${firstelement}" && printf " %b skip (%s)\n" "🛇" "${excludemsg}" + else + # Execute test case + if ! rl::testcmp "$(( i/2 ))" "${firstelement}" \ + "${path}" "$($tool_rdlink -- "${firstelement}")"; then + (( tests_failed++ )) + # Run all tests if option -a is pressend + (( ! $flag_runall )) && testend=1 && break + else + (( tests_success++ )) + fi + + firstelement= + fi + ((i++)) + done + (( testend )) && break + done + (( testend )) && rl::printTestSummary $tests_success $tests_failed $tests_skipped && return 1 + + # Initialize competition tests + (( ! flag_onlyassert )) && tocompete_init + + # Only run `compete_args` if arguments are available + if [[ "$@" ]]; then + compete_args=( "Tests from command line" "$@" ) + tocompete=(compete_args) + fi + + # Compare output of rdlink and readlink -f + if (( ${#tocompete[@]} )) ; then + rl::printTitle + printf "\n## Competition tests (readlink -f == rdlink)\n" + fi + for testarray in "${tocompete[@]}"; do + i=0 + arraywalker="$testarray"[@] + for path in "${!arraywalker}"; do + + if (( ! i )); then + # Print title in array element 0 + printf "### %b\n" "${color_yellow}${path}${color_less}" + (( ! flag_extendedOutput )) && printf "%${config_path_width}s %s %s\n" "" "" "✗ [ACTUAL]" + + else + if excludemsg="$(toexclude "${path}")" ; then + # Current path is excluded + (( tests_skipped++ )) + rl::printPath "${i}" "${path}" && printf " %b skip (%s)\n" "🛇" "${excludemsg}" + elif ! rl::testcmp "${i}" "${path}" \ + "$(${tool_readlink} "$path")" "$(${tool_rdlink} -- "$path")"; then + # Test case failed + (( tests_failed++ )) + # Run all tests if option -a is pressend + (( ! $flag_runall )) && testend=1 && break + else + (( tests_success++ )) + fi + fi + + ((i++)) + done + (( testend )) && break + done + + rl::printTestSummary $tests_success $tests_failed $tests_skipped + (( testend )) && return 1 || return 0 +} + +rl::printTitle() { + (( flag_title )) && return 0 + flag_title=1 + + # See if some tests will be performed + printf "# Testing rdlink version %s\n" "${tool_rdlink_version}" + printf " Testdate: %s\n" "$(date -u +"%Y-%m-%d %H:%M:%S UTC")" +} + rl::printPath() { local testnum="${1:-0}" local input="${2:-"-"}" @@ -126,137 +271,5 @@ rl::testcmp() { return 0 } -rl::test() { - local i=0 - local path= - local arraywalker= - local firstelement= - local testend=0 - local arg= - local excludemsg= - local tests_success=0 - local tests_failed=0 - local tests_skipped=0 - - for arg in "$@"; do - case "$1" in - --) ## End of options - shift && break ;; - -a|--run-all) ## Run all even if tests fail - flag_runall=1 - shift ;; - -x|--extended-output) - flag_extendedOutput=1 - shift ;; - -xd|--verbose) - flag_extendedOutput=1 - flag_verbose=1 - shift ;; - -oa|--only-assert) - flag_onlyassert=1 - shift ;; - -oc|--only-compete) - flag_onlycompete=1 - shift ;; - -e|--error) - flag_printerror=1 - shift ;; - -*|--*) - printf "Invalid argument\n" - exit 1 ;; - esac - done - - # Cmd line arguments - (( ! flag_onlycompete )) && [[ ! "$@" ]] && toassert_init - - # Compare against expected result - if (( ${#toassert[@]} )) ; then - printf "\n# Assertion tests (\"Expected path\" == rdlink)\n" - fi - for testarray in "${toassert[@]}"; do - i=0 - arraywalker="$testarray"[@] - for path in "${!arraywalker}"; do - if (( ! i )); then - # Print title in array element 0 - printf " ### %b ###\n" "${color_yellow}${path}${color_less}" - (( ! flag_extendedOutput )) && printf "%${config_path_width}s %s %s\n" "" "" "✗ [ACTUAL]" - - elif [ -z "$firstelement" ]; then - # Save first element for string compare - firstelement="${path}" - - elif excludemsg="$(toexclude "${firstelement}")"; then - # Current path is excluded - (( tests_skipped++ )) - rl::printPath "$(( i/2 ))" "${firstelement}" && printf " %b skip (%s)\n" "🛇" "${excludemsg}" - else - # Execute test case - if ! rl::testcmp "$(( i/2 ))" "${firstelement}" \ - "${path}" "$($tool_rdlink -- "${firstelement}")"; then - (( tests_failed++ )) - # Run all tests if option -a is pressend - (( ! $flag_runall )) && testend=1 && break - else - (( tests_success++ )) - fi - - firstelement= - fi - ((i++)) - done - (( testend )) && break - done - (( testend )) && rl::printTestSummary $tests_success $tests_failed $tests_skipped && return 1 - - # Initialize competition tests - (( ! flag_onlyassert )) && tocompete_init - - # Only run `compete_args` if arguments are available - if [[ "$@" ]]; then - compete_args=( "Tests from command line" "$@" ) - tocompete=(compete_args) - fi - - # Compare output of rdlink and readlink -f - if (( ${#tocompete[@]} )) ; then - printf "\n# Competition tests (readlink -f == rdlink)\n" - fi - for testarray in "${tocompete[@]}"; do - i=0 - arraywalker="$testarray"[@] - for path in "${!arraywalker}"; do - - if (( ! i )); then - # Print title in array element 0 - printf " ### %b ###\n" "${color_yellow}${path}${color_less}" - (( ! flag_extendedOutput )) && printf "%${config_path_width}s %s %s\n" "" "" "✗ [ACTUAL]" - - else - if excludemsg="$(toexclude "${path}")" ; then - # Current path is excluded - (( tests_skipped++ )) - rl::printPath "${i}" "${path}" && printf " %b skip (%s)\n" "🛇" "${excludemsg}" - elif ! rl::testcmp "${i}" "${path}" \ - "$(${tool_readlink} "$path")" "$(${tool_rdlink} -- "$path")"; then - # Test case failed - (( tests_failed++ )) - # Run all tests if option -a is pressend - (( ! $flag_runall )) && testend=1 && break - else - (( tests_success++ )) - fi - fi - - ((i++)) - done - (( testend )) && break - done - - rl::printTestSummary $tests_success $tests_failed $tests_skipped - (( testend )) && return 1 || return 0 -} - #time rl::test "$@" rl::test "$@" diff --git a/test/totest.sh b/test/totest.sh index f26be7a..3009652 100644 --- a/test/totest.sh +++ b/test/totest.sh @@ -53,9 +53,9 @@ tocompete_init() { ln -s "../dir_3_l/file" "dir_1/file" # compete_no_permission - mkdir -p "${_tc_tmp}/noperm" - chmod 400 "${_tc_tmp}/noperm" - ln -s "noperm" "${_tc_tmp}/noperml" + mkdir -p "${_tc_tmp}/nopermdir" + chmod 400 "${_tc_tmp}/nopermdir" + ln -s "nopermdir" "${_tc_tmp}/nopermdirl" ln -s "/" "${_tc_tmp}/lroot" ln -s "/root" "${_tc_tmp}/lroothome" @@ -95,14 +95,14 @@ tocompete_init() { ) compete_no_permission=( "No permission to enter directory (direct and link)" - "noperm"* + "nopermdir"* "lroot"* "/" "/root" "/root/" "/root/." "/root/.." - "/proc/"**/cwd # special - no permission for links + #"/proc/"**/cwd # special - no permission for links ) # Add tests to global test array from test_rdlink @@ -112,7 +112,7 @@ tocompete_init() { compete_relative compete_no_permission compete_links - compete_all + #compete_all ) } -- 2.30.2 From bf303a608bfee0557e628ed3525f9b56a8de9621 Mon Sep 17 00:00:00 2001 From: Martin Winkler Date: Wed, 23 Mar 2022 10:08:36 +0100 Subject: [PATCH 5/7] Introduce script to save test results in files according to platform (savetest.sh) Test results are supposed to be added to releases --- test/.gitignore | 1 + test/distro.sh | 151 +++++++++++++++++++++++++++++++++++++++++++++++ test/getenv.sh | 25 ++++++++ test/savetest.sh | 15 +++++ 4 files changed, 192 insertions(+) create mode 100644 test/.gitignore create mode 100644 test/distro.sh create mode 100755 test/getenv.sh create mode 100755 test/savetest.sh diff --git a/test/.gitignore b/test/.gitignore new file mode 100644 index 0000000..1a06816 --- /dev/null +++ b/test/.gitignore @@ -0,0 +1 @@ +results diff --git a/test/distro.sh b/test/distro.sh new file mode 100644 index 0000000..81b639b --- /dev/null +++ b/test/distro.sh @@ -0,0 +1,151 @@ +#!/usr/bin/env sh +# Detects which OS and if it is Linux then it will detect which Linux Distribution. + +OS=`uname -s` +REV=`uname -r` +MACH=`uname -m` + +if [ "${OS}" = "SunOS" ] ; then + OS=Solaris + ARCH=`uname -p` + OSSTR="${OS} ${REV}(${ARCH} `uname -v`)" + +elif [ "${OS}" = "AIX" ] ; then + OSSTR="${OS} `oslevel` (`oslevel -r`)" + +elif [ "${OS}" = "Linux" ] ; then + KERNEL=`uname -r` + + if [ -f /etc/fedora-release ]; then + DIST=$(cat /etc/fedora-release | awk '{print $1}') + REV=`cat /etc/fedora-release | sed s/.*release\ // | sed s/\ .*//` + + elif [ -f /etc/redhat-release ] ; then + DIST=$(cat /etc/redhat-release | awk '{print $1}') + if [ "${DIST}" = "CentOS" ]; then + DIST="CentOS" + IGNORE_OS_RELEASE=1 # https://bugs.centos.org/view.php?id=8359 + elif [ "${DIST}" = "CloudLinux" ]; then + DIST="CloudLinux" + elif [ "${DIST}" = "Mandriva" ]; then + DIST="Mandriva" + PSEUDONAME=`cat /etc/mandriva-release | sed s/.*\(// | sed s/\)//` + REV=`cat /etc/mandriva-release | sed s/.*release\ // | sed s/\ .*//` + elif [ -f /etc/oracle-release ]; then + DIST="Oracle" + elif [ -f /etc/rockstor-release ]; then + DIST="Rockstor" + else + DIST="RedHat" + fi + + PSEUDONAME=`cat /etc/redhat-release | sed s/.*\(// | sed s/\)//` + REV=`cat /etc/redhat-release | sed s/.*release\ // | sed s/\ .*//` + + elif [ -f /etc/mandrake-release ] ; then + DIST='Mandrake' + PSEUDONAME=`cat /etc/mandrake-release | sed s/.*\(// | sed s/\)//` + REV=`cat /etc/mandrake-release | sed s/.*release\ // | sed s/\ .*//` + + elif [ -f /etc/devuan_version ] ; then + DIST="Devuan `cat /etc/devuan_version`" + REV="" + + elif [ -f /etc/debian_version ] ; then + DIST="Debian `cat /etc/debian_version`" + REV="" + IGNORE_OS_RELEASE=1 + if [ -f /usr/bin/lsb_release ] ; then + ID=`lsb_release -i | awk -F ':' '{print $2}' | sed 's/ //g'` + fi + if [ "${ID}" = "Raspbian" ] ; then + DIST="Raspbian `cat /etc/debian_version`" + fi + if [ -f /usr/bin/pveversion ]; then + DIST="${DIST}/PVE `/usr/bin/pveversion | cut -d '/' -f 2`" + fi + if [ -f /usr/bin/pmgversion ]; then + # pmgversion requires root permissions to run, please add NOPASSWD setting to visudo. + DIST="${DIST}/PMG `sudo /usr/bin/pmgversion | cut -d '/' -f 2`" + fi + if [ -f /etc/dogtag ]; then + DIST=`cat /etc/dogtag` + fi + + elif [ -f /etc/gentoo-release ] ; then + DIST="Gentoo" + REV=$(tr -d '[[:alpha:]]' /dev/null 2>&1 + fi + fi + + # try standardized os version methods + if [ -f /etc/os-release -a "${IGNORE_OS_RELEASE}" != 1 ] ; then + . /etc/os-release + STD_DIST="$NAME" + STD_REV="$VERSION_ID" + elif [ -f /etc/lsb-release -a "${IGNORE_LSB}" != 1 ] ; then + STD_DIST=$(lsb_release -si) + STD_REV=$(lsb_release -sr) + fi + if [ -n "${STD_DIST}" ]; then + DIST="${STD_DIST}" + fi + if [ -n "${STD_REV}" ]; then + REV="${STD_REV}" + fi + + if [ -n "${REV}" ]; then + OSSTR="${DIST} ${REV}" + else + OSSTR="${DIST}" + fi + +elif [ "${OS}" = "Darwin" ] ; then + if [ -f /usr/bin/sw_vers ] ; then + OSSTR=`/usr/bin/sw_vers|grep -v Build|sed 's/^.*:.//'| tr "\n" ' '` + fi + +elif [ "${OS}" = "FreeBSD" ] ; then + if [ -f /etc/version ] ; then + DIST=$(cat /etc/version | cut -d'-' -f 1) + if [ "${DIST}" = "FreeNAS" ]; then + OSSTR=`cat /etc/version | cut -d' ' -f 1` + fi + else + OSSTR=`/usr/bin/uname -mior` + fi +fi + +echo ${OSSTR} + diff --git a/test/getenv.sh b/test/getenv.sh new file mode 100755 index 0000000..3173ab9 --- /dev/null +++ b/test/getenv.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +readonly getenv_dir="$(cd "$(dirname -- "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" +get_os_version() { + local os_version= + local utils_version= + + os_version="$(bash "${getenv_dir}/distro.sh" | sed 's/ /_/g')" + + bash_version="$(bash --version | sed -n '/bash, [Vv]ersion/p' | sed 's/.*[Vv]ersion \([0-9.]\+\).*/\1/g')" + + if utils_version="$(readlink --version 2>&1 | grep -E "BusyBox")" ; then + utils_version="$(sed 's/\(BusyBox v[0-9\.]\+\).*/\1/g' <<<${utils_version})" + elif utils_version="$(readlink --version 2>&1 | grep -E "GNU core")" ; then + utils_version="$(sed 's/.*\(GNU [[:alnum:]]\+\). \([0-9\.]\+\).*/\1 \2/g' <<<${utils_version})" + else + utils_version="utils_unkown" + fi + # Replace " " with _ + utils_version="${utils_version// /_}" + + echo "${os_version}_${bash_version:+bash_${bash_version}}_${utils_version}" +} + +get_os_version diff --git a/test/savetest.sh b/test/savetest.sh new file mode 100755 index 0000000..3bb35b5 --- /dev/null +++ b/test/savetest.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +savetest() { + local target_file= + readonly savetest_dir="$(cd "$(dirname -- "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" + + target_dir="${savetest_dir}/results" + mkdir -p "${target_dir}" + + target_file="${target_dir}/$("${savetest_dir}/getenv.sh")_result.log" + + "${savetest_dir}/test_rdlink.sh" >"${target_file}" 2>&1 +} + +savetest -- 2.30.2 From eb626d0f90833d51ade9efc9d3703834f7b4cafe Mon Sep 17 00:00:00 2001 From: Martin Winkler Date: Wed, 23 Mar 2022 10:56:37 +0100 Subject: [PATCH 6/7] Improving test report and return values --- test/savetest.sh | 13 +++++++++++-- test/test_rdlink.sh | 11 ++++++----- test/totest.sh | 5 +++++ 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/test/savetest.sh b/test/savetest.sh index 3bb35b5..443629a 100755 --- a/test/savetest.sh +++ b/test/savetest.sh @@ -2,14 +2,23 @@ savetest() { local target_file= + local environment= + local failed_tests=0 + readonly savetest_dir="$(cd "$(dirname -- "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" target_dir="${savetest_dir}/results" mkdir -p "${target_dir}" - target_file="${target_dir}/$("${savetest_dir}/getenv.sh")_result.log" + environment="$("${savetest_dir}/getenv.sh")" + target_file="${target_dir}/${environment:-"Unknown_Environemnt"}_result.log" - "${savetest_dir}/test_rdlink.sh" >"${target_file}" 2>&1 + printf "# Test environment\n\n %s\n\n" "${environment}" >"${target_file}" + + "${savetest_dir}/test_rdlink.sh" -a >>"${target_file}" 2>&1 + failed_tests="$?" + (( failed_tests )) && printf "Failed tests: %s\n" "$failed_tests" + return $failed_tests } savetest diff --git a/test/test_rdlink.sh b/test/test_rdlink.sh index 257d915..dd7fe79 100755 --- a/test/test_rdlink.sh +++ b/test/test_rdlink.sh @@ -85,7 +85,7 @@ rl::test() { # Check if assertion tests need to be performed (( ! flag_onlycompete )) && [[ ! "$@" ]] && toassert_init - + # Compare against expected result if (( ${#toassert[@]} )) ; then rl::printTitle @@ -173,15 +173,15 @@ rl::test() { done rl::printTestSummary $tests_success $tests_failed $tests_skipped - (( testend )) && return 1 || return 0 + return ${tests_failed} } rl::printTitle() { (( flag_title )) && return 0 flag_title=1 - + # See if some tests will be performed - printf "# Testing rdlink version %s\n" "${tool_rdlink_version}" + printf "# Testing rdlink version %s\n\n" "${tool_rdlink_version}" printf " Testdate: %s\n" "$(date -u +"%Y-%m-%d %H:%M:%S UTC")" } @@ -229,7 +229,7 @@ rl::testcmp() { local testresult=0 #failed local testresult_graphic="${color_red}✗${color_less}" # alt. symbol ≠ local link="$(readlink -- "${input}")" - + if [[ "${expect}" == "${actual}" ]] ; then # Don't print success for this flag (( flag_printerror )) && return 0 @@ -273,3 +273,4 @@ rl::testcmp() { #time rl::test "$@" rl::test "$@" + diff --git a/test/totest.sh b/test/totest.sh index 3009652..dda2ea4 100644 --- a/test/totest.sh +++ b/test/totest.sh @@ -152,9 +152,14 @@ toassert_init() { "../rel_b" "$(cd ".." && pwd)/rel_b" ) + assert_force_fail=( "Force fail" + "nix" "" + ) + # Add test arrays to global test array from test_rdlink toassert+=( assert_invalid_files + #assert_force_fail ) } -- 2.30.2 From 124ae12aaf1ead84fc9b4968927b3c4da6965dd5 Mon Sep 17 00:00:00 2001 From: Martin Winkler Date: Wed, 23 Mar 2022 11:10:36 +0100 Subject: [PATCH 7/7] Prepare new release 0.3 --- CHANGELOG.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c6f7cc1..7a9e17e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,9 @@ # Changelog -## Todo +## [0.3](https://winklerfamilie.eu/git/efelon/rdlink/releases/tag/v0.3) - 2022-03-23 -- [ ] Tests on different platforms (e.g. busybox) +* Improving test output to include rdlink version and test environment +* New script `test/savetest.sh` to produce reports which can be added to the release ## [0.2](https://winklerfamilie.eu/git/efelon/rdlink/releases/tag/v0.2) - 2022-03-22 -- 2.30.2