#!/bin/zsh # vim: set shiftwidth=4 softtabstop=4: # # This script is used to run tests on a database with demo data installed. # # Either provide the name of the database (first argument) or it will default to <project>_test # The DB user can be overriden by setting ODOO_SCRIPTS_DB_USER. # Version 2.17 here=$(dirname $0) project_home=$(cd $here && cd .. && echo $PWD) tested_modules=$(python -B -c "import ConfigParser ; c = ConfigParser.ConfigParser() ; c.read('${project_home}/setup.cfg') ; print ','.join(c.get('odoo_scripts', 'module_list_tests', '').split())") if [[ "$tested_modules" != "" ]]; then update="-u $tested_modules" fi dbname=$1 if [[ -z "$dbname" ]]; then dbname=$(basename $(readlink -f $project_home))_test else shift fi echo "Using database $dbname for tests" if [[ -n "$ODOO_SCRIPTS_DB_USER" ]] then echo "Using db user $ODOO_SCRIPTS_DB_USER" db_user_param="--db_user $ODOO_SCRIPTS_DB_USER" fi ODOO_TYPE=$(python -B -c "import ConfigParser ; c = ConfigParser.ConfigParser() ; c.read('${project_home}/setup.cfg') ; print c.get('odoo_scripts', 'odoo_type', 'odoo8')") if [ "$ODOO_TYPE" = "odoo8" ]; then loglevel="--log-level=info" else loglevel="--log-level=test" fi logfile=$(tempfile --suffix=.log) # Catch both stdout & stderr here as Odoo 10 uses stderr, unlike previous Odoo versions. $here/start $update -d $dbname $db_user_param --test-enable $loglevel --max-cron=0 --stop-after-init $* 2>&1 | tee $logfile | sed -e 's/\(.*\) \(INFO\) \(.*\)/\o033[2m\1\o033[22m \o033[32m\o033[7m\2\o033[27m \3\o033[39m/' -e 's/\(.*\) \(DEBUG\) \(.*\)/\o033[2m\1\o033[22m \o033[33m\o033[7m\2\o033[27m \2\o033[39m/' -e 's/\(.*\) \(WARNING\) \(.*\)/\o033[2m\1\o033[22m \o033[33m\o033[7m\2\o033[27m \3\o033[39m/' -e 's/\(.*\) \(ERROR\) \(.*\)/\o033[2m\1\o033[22m \o033[31m\o033[7m\2\o033[27m \3\o033[0m/' -e 's/ FAILED/ \o033[41m\o033[97m\o033[1mFAILED\o033[0m/' -e 's/ FAIL\(.*\)/ \o033[41m\o033[97m\o033[1mFAIL\o033[49m\o033[31m\1\o033[0m/' -e 's/\(.*\) \(CRITICAL\) \(.*\)/\o033[2m\1\o033[22m \o033[33m\o033[7m\2\o033[27m \3\o033[39m/' -e 's/\(.*\) \(TEST\) \(.*\) \(ERROR\)\(.*\)/\o033[2m\1\o033[22m \o033[34m\o033[7m\2\o033[27m \3\o033[0m \o033[41m\o033[97m\o033[1m\4\o033[49m\o033[31m\5\o033[0m/' -e 's/\(.*\) \(TEST\) \(.*\) \(OK\)/\o033[2m\1\o033[22m \o033[34m\o033[7m\2\o033[27m \3\o033[0m \o033[32m\o033[7m\4\o033[27m\o033[39m/' -e 's/\(.*\) \(TEST\) \(.*\)/\o033[2m\1\o033[22m \o033[34m\o033[7m\2\o033[27m \3 \o033[0m/' start_status=$pipestatus[1] ok=$(grep ' OK' $logfile -c) # TODO detect yaml tests failures failed=$(grep ' FAILED\| CRITICAL\| ERROR [^ ]* openerp.modules.module: Can not .import openerp\.addons\.\| TEST .* ERROR:\|Failed to initialize database' $logfile -c) if [[ $failed -eq 0 ]]; then # simple way to detect yaml failure failed=$(grep 'openerp.modules.loading: At least one test failed when loading the modules.' $logfile -c) fi echo '' echo '\e[2m*****\e[22m \e[1mTest results\e[21m \e[2m*****\e[22m' echo "$ok modules passing, $failed modules failing" echo '' if [[ $ok -gt 0 ]]; then echo -e '\033[32mOK:\033[0m' # Highlight the "OK"s in green (32). GREP_COLOR='0;32' grep --color=always ' OK' $logfile || true fi if [[ $failed -gt 0 ]]; then echo -e '\033[31mFAILED\033[0m:' # Highlight the failure matches in red (31). GREP_COLOR='0;31' grep --color=always "CRITICAL\|FAILED\|FAIL:" $logfile GREP_COLOR='0;31' grep --color=always "ERROR [^ ]* openerp\.tools\.yaml_import:" $logfile GREP_COLOR='0;31' grep --color=always "ERROR [^ ]* openerp.modules.module: Can not \`import openerp\.addons\..*\`" $logfile GREP_COLOR='0;31' grep --color=always "TEST .* ERROR:" $logfile fi echo '' rm $logfile if [[ $start_status -ne 0 ]]; then echo "[${RED}FATAL${RESET}] Tests failed (exit ${start_status})" exit $start_status fi if [[ $failed -gt 0 ]]; then echo "[${RED}FATAL${RESET}] Tests failed (found failure with grep)" exit 1 fi