diff --git a/tests-ng/assets/github.catalog.json b/tests-ng/assets/github.catalog.json new file mode 100644 index 0000000..6c5fbe7 --- /dev/null +++ b/tests-ng/assets/github.catalog.json @@ -0,0 +1,61 @@ +{ + "children": [ + { + "attr": "", + "children": [ + { + "maccess": 1666206037.0786593, + "md5": null, + "name": "FUNDING.yml", + "relpath": "/FUNDING.yml", + "size": 17, + "type": "file" + }, + { + "children": [ + { + "maccess": 1666206037.078865, + "md5": null, + "name": "pypi-release.yml", + "relpath": "workflows/pypi-release.yml", + "size": 691, + "type": "file" + }, + { + "maccess": 1677748530.6920426, + "md5": null, + "name": "testing.yml", + "relpath": "workflows/testing.yml", + "size": 595, + "type": "file" + } + ], + "maccess": 1677748530.691944, + "md5": null, + "name": "workflows", + "relpath": "/workflows", + "size": 1190, + "type": "dir" + } + ], + "free": 23459602432, + "name": "github", + "size": 2380, + "total": 245107195904, + "ts": 1678214993, + "type": "storage" + }, + { + "attr": { + "access": 1678214993, + "access_version": "0.8.7", + "created": 1678214993, + "created_version": "0.8.7" + }, + "name": "meta", + "type": "meta" + } + ], + "name": "top", + "type": "top" +} \ No newline at end of file diff --git a/tests-ng/compare.sh b/tests-ng/compare.sh new file mode 100755 index 0000000..2c6289d --- /dev/null +++ b/tests-ng/compare.sh @@ -0,0 +1,61 @@ +#!/usr/bin/env bash +# author: deadc0de6 (https://github.com/deadc0de6) +# Copyright (c) 2023, deadc0de6 + +# exit on first error +set -e + +# get current path +rl="readlink -f" +if ! ${rl} "${0}" >/dev/null 2>&1; then + rl="realpath" + + if ! hash ${rl}; then + echo "\"${rl}\" not found !" && exit 1 + fi +fi +cur=$(dirname "$(${rl} "${0}")") + +# pivot +prev="${cur}/.." +cd "${prev}" + +# coverage +#export PYTHONPATH=".:${PYTHONPATH}" +bin="python3 -m catcli.catcli" +if hash coverage 2>/dev/null; then + bin="coverage run -p --source=catcli -m catcli.catcli" + #bin="coverage run -p --source=${prev}/catcli -m catcli.catcli" +fi + +echo "current dir: $(pwd)" +echo "pythonpath: ${PYTHONPATH}" +echo "bin: ${bin}" +${bin} --version + +# get the helpers +# shellcheck source=tests-ng/helper +source "${cur}"/helper +echo -e "$(tput setaf 6)==> RUNNING $(basename "${BASH_SOURCE[0]}") <==$(tput sgr0)" + +########################################################## +# the test +########################################################## + +# create temp dirs +tmpd=$(mktemp -d) +clear_on_exit "${tmpd}" + +catalog="${tmpd}/catalog" + +# index +${bin} -B index --catalog="${catalog}" github .github + +# diff +cat "${catalog}" +diff "${cur}/assets/github.catalog.json" "${catalog}" + +# the end +echo "test \"$(basename "$0")\" success" +cd "${cur}" +exit 0 diff --git a/tests-ng/helper b/tests-ng/helper new file mode 100644 index 0000000..d7373e8 --- /dev/null +++ b/tests-ng/helper @@ -0,0 +1,68 @@ +# author: deadc0de6 (https://github.com/deadc0de6) +# Copyright (c) 2023, deadc0de6 +# +# file to be sourced from test scripts +# + +declare -a to_be_cleared + +# add a file/directory to be cleared +# on exit +# +# $1: file path to clear +clear_on_exit() +{ + local len="${#to_be_cleared[*]}" + # shellcheck disable=SC2004 + to_be_cleared[${len}]="$1" + if [ "${len}" = "0" ]; then + # set trap + trap on_exit EXIT + fi +} + +# clear files +on_exit() +{ + for i in "${to_be_cleared[@]}"; do + rm -rf "${i}" + done +} + +# osx tricks +# brew install coreutils gnu-sed +if [[ $OSTYPE == 'darwin'* ]]; then + mktemp() { + gmktemp "$@" + } + stat() { + gstat "$@" + } + sed() { + gsed "$@" + } + wc() { + gwc "$@" + } + date() { + gdate "$@" + } + chmod() { + gchmod "$@" + } + readlink() { + greadlink "$@" + } + realpath() { + grealpath "$@" + } + + export -f mktemp + export -f stat + export -f sed + export -f wc + export -f date + export -f chmod + export -f readlink + export -f realpath +fi \ No newline at end of file diff --git a/tests-ng/update.sh b/tests-ng/update.sh index 15fe9e3..dcab7a6 100755 --- a/tests-ng/update.sh +++ b/tests-ng/update.sh @@ -2,62 +2,85 @@ # author: deadc0de6 (https://github.com/deadc0de6) # Copyright (c) 2021, deadc0de6 -cur=$(dirname "$(readlink -f "${0}")") -cwd=`pwd` +# exit on first error +set -e + +# get current path +rl="readlink -f" +if ! ${rl} "${0}" >/dev/null 2>&1; then + rl="realpath" + + if ! hash ${rl}; then + echo "\"${rl}\" not found !" && exit 1 + fi +fi +cur=$(dirname "$(${rl} "${0}")") # pivot -cd ${cur}/../ -python3 -m catcli.catcli --version +prev="${cur}/.." +cd "${prev}" + +# coverage +#export PYTHONPATH=".:${PYTHONPATH}" +bin="python3 -m catcli.catcli" +if hash coverage 2>/dev/null; then + bin="coverage run -p --source=catcli -m catcli.catcli" + #bin="coverage run -p --source=${prev}/catcli -m catcli.catcli" +fi + +echo "current dir: $(pwd)" +echo "pythonpath: ${PYTHONPATH}" +echo "bin: ${bin}" +${bin} --version + +# get the helpers +# shellcheck source=tests-ng/helper +source "${cur}"/helper +echo -e "$(tput setaf 6)==> RUNNING $(basename "${BASH_SOURCE[0]}") <==$(tput sgr0)" ########################################################## # the test ########################################################## # create temp dirs -tmpd=`mktemp -d` +tmpd=$(mktemp -d) +clear_on_exit "${tmpd}" tmpu="${tmpd}/dir2" -mkdir -p ${tmpu} - -# setup cleaning -clean() { - # clean - rm -rf ${tmpd} ${tmpu} -} -trap clean EXIT +mkdir -p "${tmpu}" catalog="${tmpd}/catalog" -mkdir -p ${tmpd}/dir -echo "abc" > ${tmpd}/dir/a +mkdir -p "${tmpd}/dir" +echo "abc" > "${tmpd}/dir/a" # index -python3 -m catcli.catcli -B index --catalog=${catalog} dir ${tmpd}/dir -python3 -m catcli.catcli -B ls --catalog=${catalog} dir +${bin} -B index --catalog="${catalog}" dir "${tmpd}/dir" +${bin} -B ls --catalog="${catalog}" dir # get attributes -freeb=`python3 -m catcli.catcli -B ls --catalog=${catalog} dir | grep free: | sed 's/^.*,free:\([^ ]*\).*$/\1/g'` -dub=`python3 -m catcli.catcli -B ls --catalog=${catalog} dir | grep du: | sed 's/^.*,du:\([^ ]*\).*$/\1/g'` -dateb=`python3 -m catcli.catcli -B ls --catalog=${catalog} dir | grep date: | sed 's/^.*,date: \(.*\)$/\1/g'` +freeb=$(${bin} -B ls --catalog="${catalog}" dir | grep free: | sed 's/^.*,free:\([^ ]*\).*$/\1/g') +dub=$(${bin} -B ls --catalog="${catalog}" dir | grep du: | sed 's/^.*,du:\([^ ]*\).*$/\1/g') +dateb=$(${bin} -B ls --catalog="${catalog}" dir | grep date: | sed 's/^.*,date: \(.*\)$/\1/g') echo "before: free:${freeb} | du:${dub} | date:${dateb}" # change content -echo "abc" >> ${tmpd}/dir/a -echo "abc" > ${tmpd}/dir/b +echo "abc" >> "${tmpd}/dir/a" +echo "abc" > "${tmpd}/dir/b" # move dir -cp -r ${tmpd}/dir ${tmpu}/ +cp -r "${tmpd}/dir" "${tmpu}/" # sleep to force date change sleep 1 # update -python3 -m catcli.catcli -B update -f --catalog=${catalog} dir ${tmpu}/dir -python3 -m catcli.catcli -B ls --catalog=${catalog} dir +${bin} -B update -f --catalog="${catalog}" dir "${tmpu}/dir" +${bin} -B ls --catalog="${catalog}" dir # get new attributes -freea=`python3 -m catcli.catcli -B ls --catalog=${catalog} dir | grep free: | sed 's/^.*,free:\([^ ]*\).*$/\1/g'` -dua=`python3 -m catcli.catcli -B ls --catalog=${catalog} dir | grep du: | sed 's/^.*,du:\([^ ]*\).*$/\1/g'` -datea=`python3 -m catcli.catcli -B ls --catalog=${catalog} dir | grep date: | sed 's/^.*,date: \(.*\)$/\1/g'` +freea=$(${bin} -B ls --catalog="${catalog}" dir | grep free: | sed 's/^.*,free:\([^ ]*\).*$/\1/g') +dua=$(${bin} -B ls --catalog="${catalog}" dir | grep du: | sed 's/^.*,du:\([^ ]*\).*$/\1/g') +datea=$(${bin} -B ls --catalog="${catalog}" dir | grep date: | sed 's/^.*,date: \(.*\)$/\1/g') echo "after: free:${freea} | du:${dua} | date:${datea}" # test they are all different @@ -65,9 +88,7 @@ echo "after: free:${freea} | du:${dua} | date:${datea}" [ "${dub}" = "${dua}" ] && echo "WARNING du didn't change!" [ "${dateb}" = "${datea}" ] && echo "WARNING date didn't change!" && exit 1 -# pivot back -cd ${cwd} - # the end -echo "test \"`basename $0`\" success" +echo "test \"$(basename "$0")\" success" +cd "${cur}" exit 0 diff --git a/tests.sh b/tests.sh index 2c5e08a..6719eec 100755 --- a/tests.sh +++ b/tests.sh @@ -5,16 +5,24 @@ cur=$(dirname "$(readlink -f "${0}")") # stop on first error -set -ev +set -e +#set -v +# pycodestyle +echo "[+] pycodestyle" pycodestyle --version pycodestyle --ignore=W605 catcli/ pycodestyle tests/ +pycodestyle setup.py +# pyflakes +echo "[+] pyflakes" pyflakes --version pyflakes catcli/ pyflakes tests/ +pyflakes setup.py +# pylint # R0914: Too many local variables # R0913: Too many arguments # R0912: Too many branches @@ -24,8 +32,9 @@ pyflakes tests/ # R0801: Similar lines in 2 files # R0902: Too many instance attributes # R0201: no-self-used +echo "[+] pylint" pylint --version -pylint \ +pylint -sn \ --disable=R0914 \ --disable=R0913 \ --disable=R0912 \ @@ -37,23 +46,46 @@ pylint \ --disable=R0201 \ --disable=R0022 \ catcli/ -pylint \ +pylint -sn \ --disable=W0212 \ --disable=R0914 \ --disable=R0915 \ --disable=R0801 \ tests/ +pylint -sn setup.py +# mypy +echo "[+] mypy" mypy \ --strict \ catcli/ -nosebin="nose2" -PYTHONPATH=catcli ${nosebin} --with-coverage --coverage=catcli +# unittest +echo "[+] unittests" +coverage run -p -m pytest tests -for t in ${cur}/tests-ng/*; do - echo "running test \"`basename ${t}`\"" +# tests-ng +echo "[+] tests-ng" +for t in "${cur}"/tests-ng/*.sh; do + echo "running test \"$(basename "${t}")\"" ${t} done +# check shells +echo "[+] shellcheck" +if ! which shellcheck >/dev/null 2>&1; then + echo "Install shellcheck" + exit 1 +fi +shellcheck --version +find . -iname '*.sh' | while read -r script; do + shellcheck -x \ + "${script}" +done + +# merge coverage +echo "[+] coverage merge" +coverage combine + +echo "ALL TESTS DONE OK" exit 0