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
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
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.
All tests with the same pass are performed together.
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
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.
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
```bash
#!/usr/bin/env bash
# file: z-bashbot-test.sh
# file: b-example-test.sh
# this test should always pass :-)
echo "Running test if bashbot.sh exists"
echo "................................."
# include common functions and definitions
# shellcheck source=test/ALL-tests.inc.sh
source "./ALL-tests.inc.sh"
if [ -f "bashbot.sh" ]; then
echo "bashbot.sh OK!"
echo "${SUCCESS} bashbot.sh exist!"
exit 0
else
echo "bashbot.sh missing!"
echo "${NOSUCCESS} bashbot.sh missing!"
exit 1
fi
```
#### [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
# this has to run once atfer git clone
# 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,
# no matter from which directory we'll run script

View File

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

View File

@ -1,4 +1,4 @@
#!/usr/bin/env bash
#### $$VERSION$$ 0.70-dev-19-g3183419
#### $$VERSION$$ 0.70-dev-20-g753f1b3
../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
#### $$VERSION$$ 0.70-dev-19-g3183419
#### $$VERSION$$ 0.70-dev-20-g753f1b3
TESTME="$(basename "$0")"
DIRME="$(pwd)"
TESTDIR="$1"
# include common functions and definitions
# shellcheck source=test/ALL-tests.inc.sh
source "./ALL-tests.inc.sh"
LOGFILE="${TESTDIR}/${TESTME}.log"
REFDIR="${TESTME%.sh}"
TOKENFILE="token"
TESTTOKEN="bashbottestscript"
TESTFILES="${TOKENFILE} botacl count botadmin"
TESTFILES="${TOKENFILE} ${ACLFILE} ${COUNTFILE} ${ADMINFILE}"
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
export TERM=""
"${TESTDIR}/bashbot.sh" init >"${LOGFILE}" <<EOF
$TESTTOKEN
nobody
botadmin
EOF
echo "OK"
echo "${SUCCESS}"
# compare files with refrence files
echo "Check new files after init ..."
@ -38,11 +24,11 @@ export FAIL="0"
for file in ${TESTFILES}
do
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
[ "${FAIL}" != "0" ] && exit "${FAIL}"
echo "OK"
echo "${SUCCESS}"
echo "Test Sourcing of bashbot.sh ..."
trap exit 1 EXIT
@ -52,9 +38,9 @@ cd "${TESTDIR}" || exit
source "${TESTDIR}/bashbot.sh" source
trap '' EXIT
cd "${DIRME}" || exit 1
echo "${SUCCESS}"
echo "Test bashbot.sh count"
cp "${REFDIR}/count.test" "${TESTDIR}/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