ALL-tests.inc file for common functions and values

This commit is contained in:
Kay Marquardt (Gnadelwartz) 2019-04-21 11:34:17 +02:00
parent 753f1b3b16
commit d4cd756f85
11 changed files with 179 additions and 36 deletions

View File

@ -34,9 +34,17 @@ In addition you can run ```dev/hooks/pre-commit.sh``` every time you want to she
## bashbot tests ## bashbot tests
Starting with version 0.70 bashbot has a test suite. To start testsuite run ```test/ALL-tests.sh```. ALL-tests.sh will only return 'SUCCESS' if all tests pass. Starting with version 0.70 bashbot has a test suite. To start testsuite run ```test/ALL-tests.sh```. ALL-tests.sh will only return 'SUCCESS' if all tests pass.
### enabling / disabling tests
All tests are placed in the directory ```test```. To disable a test remove the x flag from the '*-test.sh' test script, to (re)enable
a test make the script executable again.
### creating new tests ### creating new tests
To create a new test create a new bash script named ```p-name-test.sh```, where p is pass 'a-z' and name the name of your test. Each test consists of a script script named like ```p-name-test.sh``` *(where p is test pass 'a-z' and name the name of your test)* and
All tests with the same pass are performed together. an optional dir ```p-name-test/``` *(script name minus '.sh')* for additional files.
The file ```ALL-tests.inc.sh``` must be included from all tests, do not forget the shellcheck source directive to statisfy shellcheck.
Tests with no dependency to other tests will run in pass 'a', tests which need an initialized bahsbot environment must run in pass 'd' or later. Tests with no dependency to other tests will run in pass 'a', tests which need an initialized bahsbot environment must run in pass 'd' or later.
If '$1' is present the script is started from 'ALL-tests.sh' and a temporary test environment is setup in directory '$1'. If '$1' is present the script is started from 'ALL-tests.sh' and a temporary test environment is setup in directory '$1'.
@ -44,24 +52,23 @@ The temporary test environment is created when 'ALL-tests.sh' starts and deleted
Example test Example test
```bash ```bash
#!/usr/bin/env bash #!/usr/bin/env bash
# file: z-bashbot-test.sh # file: b-example-test.sh
# this test should always pass :-) # include common functions and definitions
echo "Running test if bashbot.sh exists" # shellcheck source=test/ALL-tests.inc.sh
echo "................................." source "./ALL-tests.inc.sh"
if [ -f "bashbot.sh" ]; then if [ -f "bashbot.sh" ]; then
echo "bashbot.sh OK!" echo "${SUCCESS} bashbot.sh exist!"
exit 0 exit 0
else else
echo "bashbot.sh missing!" echo "${NOSUCCESS} bashbot.sh missing!"
exit 1 exit 1
fi fi
``` ```
#### [Prev Function Reference](6_function.md) #### [Prev Function Reference](6_function.md)
#### $$VERSION$$ 0.70-dev-18-g7512681 #### $$VERSION$$ 0.70-dev-20-g753f1b3

32
test/ALL-tests.inc.sh Executable file
View File

@ -0,0 +1,32 @@
#!/usr/bin/env bash
#### $$VERSION$$ 0.70-dev-20-g753f1b3
# common variables
export TESTME DIRME TESTDIR LOGFILE REFDIR TESTNAME
TESTME="$(basename "$0")"
DIRME="$(pwd)"
TESTDIR="$1"
LOGFILE="${TESTDIR}/${TESTME}.log"
REFDIR="${TESTME%.sh}"
TESTNAME="${REFDIR//-/ }"
# common filenames
export TOKENFILE ACLFILE COUNTFILE ADMINFILE
TOKENFILE="token"
ACLFILE="botacl"
COUNTFILE="count"
ADMINFILE="botadmin"
# SUCCESS NOSUCCES
export SUCCESS NOSUCCESS
SUCCESS=" OK"
NOSUCCESS=" FAILED!"
echo "Running ${TESTNAME#? } ..."
echo "............................"
[ "${TESTDIR}" = "" ] && echo "${NOSUCCESS} not called from testsuite, exit" && exit 1
# reset env for test
unset IFS; set -f
export TERM=""

View File

@ -1,7 +1,7 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# this has to run once atfer git clone # this has to run once atfer git clone
# and every time we create new hooks # and every time we create new hooks
#### $$VERSION$$ 0.70-dev-19-g3183419 #### $$VERSION$$ 0.70-dev-20-g753f1b3
# magic to ensure that we're always inside the root of our application, # magic to ensure that we're always inside the root of our application,
# no matter from which directory we'll run script # no matter from which directory we'll run script

View File

@ -1,5 +1,5 @@
#!/usr/bin/env bash #!/usr/bin/env bash
#### $$VERSION$$ 0.70-dev-19-g3183419 #### $$VERSION$$ 0.70-dev-20-g753f1b3
../dev/hooks/pre-commit.sh ../dev/hooks/pre-commit.sh

View File

@ -1,4 +1,4 @@
#!/usr/bin/env bash #!/usr/bin/env bash
#### $$VERSION$$ 0.70-dev-19-g3183419 #### $$VERSION$$ 0.70-dev-20-g753f1b3
../dev/hooks/pre-push.sh ../dev/hooks/pre-push.sh

15
test/b-example-test.sh Normal file
View File

@ -0,0 +1,15 @@
#!/usr/bin/env bash
# file: b-example-test.sh
# include common functions and definitions
# shellcheck source=test/ALL-tests.inc.sh
source "./ALL-tests.inc.sh"
if [ -f "${TESTDIR}/bashbot.sh" ]; then
echo "${SUCCESS} bashbot.sh exist!"
exit 0
else
echo "${NOSUCCESS} bashbot.sh missing!"
exit 1
fi

View File

@ -1,36 +1,22 @@
#!/usr/bin/env bash #!/usr/bin/env bash
#### $$VERSION$$ 0.70-dev-19-g3183419 #### $$VERSION$$ 0.70-dev-20-g753f1b3
TESTME="$(basename "$0")" # include common functions and definitions
DIRME="$(pwd)" # shellcheck source=test/ALL-tests.inc.sh
TESTDIR="$1" source "./ALL-tests.inc.sh"
LOGFILE="${TESTDIR}/${TESTME}.log"
REFDIR="${TESTME%.sh}"
TOKENFILE="token"
TESTTOKEN="bashbottestscript" TESTTOKEN="bashbottestscript"
TESTFILES="${TOKENFILE} botacl count botadmin" TESTFILES="${TOKENFILE} ${ACLFILE} ${COUNTFILE} ${ADMINFILE}"
set -e set -e
# let's fake failing test for now
echo "Running bashbot init"
echo "............................"
# change to test env
[ "${TESTDIR}" = "" ] && echo "not called from testsuite, exit" && exit
unset IFS; set -f
# run bashbot first time with init # run bashbot first time with init
export TERM=""
"${TESTDIR}/bashbot.sh" init >"${LOGFILE}" <<EOF "${TESTDIR}/bashbot.sh" init >"${LOGFILE}" <<EOF
$TESTTOKEN $TESTTOKEN
nobody nobody
botadmin botadmin
EOF EOF
echo "OK" echo "${SUCCESS}"
# compare files with refrence files # compare files with refrence files
echo "Check new files after init ..." echo "Check new files after init ..."
@ -38,11 +24,11 @@ export FAIL="0"
for file in ${TESTFILES} for file in ${TESTFILES}
do do
ls -d "${TESTDIR}/${file}" >>"${LOGFILE}" ls -d "${TESTDIR}/${file}" >>"${LOGFILE}"
if ! diff -q "${TESTDIR}/${file}" "${REFDIR}/${file}" >>"${LOGFILE}"; then echo " ERROR: Fail diff ${file}!"; FAIL="1"; fi if ! diff -q "${TESTDIR}/${file}" "${REFDIR}/${file}" >>"${LOGFILE}"; then echo "${NOSUCCESS} Fail diff ${file}!"; FAIL="1"; fi
done done
[ "${FAIL}" != "0" ] && exit "${FAIL}" [ "${FAIL}" != "0" ] && exit "${FAIL}"
echo "OK" echo "${SUCCESS}"
echo "Test Sourcing of bashbot.sh ..." echo "Test Sourcing of bashbot.sh ..."
trap exit 1 EXIT trap exit 1 EXIT
@ -52,9 +38,9 @@ cd "${TESTDIR}" || exit
source "${TESTDIR}/bashbot.sh" source source "${TESTDIR}/bashbot.sh" source
trap '' EXIT trap '' EXIT
cd "${DIRME}" || exit 1 cd "${DIRME}" || exit 1
echo "${SUCCESS}"
echo "Test bashbot.sh count" echo "Test bashbot.sh count"
cp "${REFDIR}/count.test" "${TESTDIR}/count" cp "${REFDIR}/count.test" "${TESTDIR}/count"
"${TESTDIR}/bashbot.sh" count "${TESTDIR}/bashbot.sh" count
exit 1

1
test/c-init-test/count Normal file
View File

@ -0,0 +1 @@

1
test/c-init-test/token Normal file
View File

@ -0,0 +1 @@
bashbottestscript

16
test/d-process_message-test.sh Executable file
View File

@ -0,0 +1,16 @@
#!/usr/bin/env bash
#### $$VERSION$$ 0.70-dev-20-g753f1b3
# include common functions and definitions
# shellcheck source=test/ALL-tests.inc.sh
source "./ALL-tests.inc.sh"
set -e
# source bashbot.sh functionw
cd "${TESTDIR}" || exit 1
# shellcheck source=./bashbot.sh
source "${TESTDIR}/bashbot.sh" source
cd "${DIRME}" || exit 1
echo "${SUCCESS}"

View File

@ -0,0 +1,85 @@
["ok"] true
["result",0,"update_id"] 146860800
["result",0,"message","message_id"] 6541
["result",0,"message","from","id"] 123456789
["result",0,"message","from","is_bot"] false
["result",0,"message","from","first_name"] "Kay"
["result",0,"message","from","last_name"] "M"
["result",0,"message","from","username"] "Gnadelwartz"
["result",0,"message","from","language_code"] "de"
["result",0,"message","chat","id"] 123456789
["result",0,"message","chat","first_name"] "Test"
["result",0,"message","chat","last_name"] "Bot"
["result",0,"message","chat","username"] "BotTest"
["result",0,"message","chat","type"] "private"
["result",0,"message","date"] 1555822879
["result",0,"message","reply_to_message","message_id"] 6542
["result",0,"message","reply_to_message","from","id"] 987654321
["result",0,"message","reply_to_message","from","is_bot"] true
["result",0,"message","reply_to_message","from","first_name"] "dealzbot"
["result",0,"message","reply_to_message","from","username"] "Deal_O_Mat_bot"
["result",0,"message","reply_to_message","from"] {"id":987654321,"is_bot":true,"first_name":"dealzbot","username":"Deal_O_Mat_bot"}
["result",0,"message","reply_to_message","chat","id"] 123456789
["result",0,"message","reply_to_message","chat","first_name"] "Kay"
["result",0,"message","reply_to_message","chat","last_name"] "M"
["result",0,"message","reply_to_message","chat","username"] "Gnadelwartz"
["result",0,"message","reply_to_message","chat","type"] "private"
["result",0,"message","reply_to_message","date"] 1555822747
["result",0,"message","reply_to_message","text"] "Ich bin der Deal-O-Mat Bot. F\u00fcr eine Liste der Befehle sende /help"
["result",0,"message","reply_to_message","entities",0,"offset"] 12
["result",0,"message","reply_to_message","entities",0,"length"] 14
["result",0,"message","reply_to_message","entities",0,"type"] "bold"
["result",0,"message","reply_to_message","entities",0] {"offset":12,"length":14,"type":"bold"}
["result",0,"message","reply_to_message","entities",1,"offset"] 61
["result",0,"message","reply_to_message","entities",1,"length"] 5
["result",0,"message","reply_to_message","entities",1,"type"] "bot_command"
["result",0,"message","text"] "\ud83d\ude02\ud83d\ude1d\ud83d\udc4c\u263a\u2764\ud83d\ude15\ud83d\ude08#\u20e3\ud83c\udf0f\ud83c\udf89\ud83d\ude4a\ud83d\ude49\u2615\ud83d\ude80\u2708\ud83d\ude82\ud83d\udcaf\u2714\u303d\ud83d\udd1a"
["result",1,"message","forward_from","id"] 123456789
["result",1,"message","forward_from","is_bot"] false
["result",1,"message","forward_from","first_name"] "Kay"
["result",1,"message","forward_from","last_name"] "M"
["result",1,"message","forward_from","username"] "Gnadelwartz"
["result",1,"message","forward_from","language_code"] "de"
["result",1,"message","forward_date"] 1555822879
["result",1,"message","text"] "he, dies ist eine Antwort \u00e4\u00e2 \u00f6\u00f4 \u00fc\u00f9 \u20ac\u00a3\u00a5\u03c0\u00a9\u00ae\u2122"
["result",0,"message","photo",0,"file_id"] "AgADAgADL6oxG-Gw4EndCWGl2WUfUo1pXw8ABOusSilDGzAYa_gDAAEC"
["result",0,"message","photo",0,"file_size"] 1468
["result",0,"message","photo",0,"width"] 67
["result",0,"message","photo",0,"height"] 90
["result",0,"message","photo",0] {"file_id":"AgADAgADL6oxG-Gw4EndCWGl2WUfUo1pXw8ABOusSilDGzAYa_gDAAEC","file_size":1468,"width":67,"height":90}
["result",0,"message","photo",1,"file_id"] "AgADAgADL6oxG-Gw4EndCWGl2WUfUo1pXw8ABOFli9a5TF3rbPgDAAEC"
["result",0,"message","photo",1,"file_size"] 25125
["result",0,"message","photo",1,"width"] 240
["result",0,"message","photo",1,"height"] 320
["result",0,"message","photo",1] {"file_id":"AgADAgADL6oxG-Gw4EndCWGl2WUfUo1pXw8ABOFli9a5TF3rbPgDAAEC","file_size":25125,"width":240,"height":320}
["result",0,"message","photo",2,"file_id"] "AgADAgADL6oxG-Gw4EndCWGl2WUfUo1pXw8ABCVM2ZSdqfMZbfgDAAEC"
["result",0,"message","photo",2,"file_size"] 127851
["result",0,"message","photo",2,"width"] 600
["result",0,"message","photo",2,"height"] 800
["result",0,"message","photo",2] {"file_id":"AgADAgADL6oxG-Gw4EndCWGl2WUfUo1pXw8ABCVM2ZSdqfMZbfgDAAEC","file_size":127851,"width":600,"height":800}
["result",0,"message","photo",3,"file_id"] "AgADAgADL6oxG-Gw4EndCWGl2WUfUo1pXw8ABGs7gD6jTEJuafgDAAEC"
["result",0,"message","photo",3,"file_size"] 245679
["result",0,"message","photo",3,"width"] 1200
["result",0,"message","photo",3,"height"] 1600
["result",0,"message","photo",3] {"file_id":"AgADAgADL6oxG-Gw4EndCWGl2WUfUo1pXw8ABGs7gD6jTEJuafgDAAEC","file_size":245679,"width":1200,"height":1600}
["result",0,"message","photo",4,"file_id"] "AgADAgADL6oxG-Gw4EndCWGl2WUfUo1pXw8ABDsKqM0vfngJavgDAAEC"
["result",0,"message","photo",4,"file_size"] 272842
["result",0,"message","photo",4,"width"] 960
["result",0,"message","photo",4,"height"] 1280
["result",0,"message","photo",4] {"file_id":"AgADAgADL6oxG-Gw4EndCWGl2WUfUo1pXw8ABDsKqM0vfngJavgDAAEC","file_size":272842,"width":960,"height":1280}
["result",0,"message","location","latitude"] 49.631824
["result",0,"message","location","longitude"] 8.377072
["result",0,"message","location"] {"latitude":49.631824,"longitude":8.377072}
["result",0,"message","venue","location","latitude"] 49.631824
["result",0,"message","venue","location","longitude"] 8.377072
["result",0,"message","venue","location"] {"latitude":49.631824,"longitude":8.377072}
["result",0,"message","venue","title"] "Kolb's Biergarten"
["result",0,"message","venue","address"] "Am Rhein 1"
["result",0,"message","venue","foursquare_id"] "4c4321afce54e21eee980d1a"
["result",0,"message","contact","phone_number"] "222222"
["result",0,"message","contact","first_name"] "ADAC Pannenhilfe"
["result",0,"message","contact","vcard"] "BEGIN:VCARD\nVERSION:2.1\nN:Pannenhilfe;ADAC;;;\nFN:ADAC Pannenhilfe\nTEL;CELL;PREF:+49179222222\nTEL;X-Mobil:222222\nEND:VCARD"
["result",0,"message","voice","duration"] 2
["result",0,"message","voice","mime_type"] "audio/ogg"
["result",0,"message","voice","file_id"] "AwADAgADOAQAAqd24Emnm_VGmmVEuAI"
["result",0,"message","voice","file_size"] 4262