|
#!/bin/bash
|
|
################################################################################
|
|
# Script for triggering all test for FreenetIS.
|
|
#
|
|
# Author: Ondřej Fibich
|
|
# Version: 1.2
|
|
#
|
|
# Test contains these steps:
|
|
#
|
|
# (-) Login to FreenetIS
|
|
# (1) Syntax check of all files in FreenetIS
|
|
# (2) Run config (re)generation
|
|
# (3) Check models for errors
|
|
# (4) Check helpers for errors
|
|
# (5) Check controllers for errors
|
|
#
|
|
# Require:
|
|
# curl, perl, libxml-writer-perl, libxml-dom-perl
|
|
#
|
|
################################################################################
|
|
|
|
function red_echo() {
|
|
echo -e "\e[01;31m$1\e[0m"
|
|
}
|
|
|
|
function green_echo() {
|
|
echo -e "\e[01;32m$1\e[0m"
|
|
}
|
|
|
|
# help
|
|
if [ "$1" == "--help" ]; then
|
|
echo "Script for testing FreenetIS"
|
|
echo "USAGE: tester.sh [options] URL username password"
|
|
echo ""
|
|
echo "Options:"
|
|
echo " -o, --open-browser Opens browser with models or helpers errors"
|
|
echo " automatically, after error detection."
|
|
echo " -s, --skip-syntax Skip syntax check of all files"
|
|
echo " -m, --skip-models Skip test of models"
|
|
echo " -h, --skip-helpers Skip test of helpers"
|
|
echo " -c, --skip-controllers Skip test of controllers"
|
|
echo " -e, --enable-stats Turn on statistics and benchmarks"
|
|
exit 0
|
|
fi
|
|
|
|
open_browser=
|
|
skip_syntax=
|
|
skip_models=
|
|
skip_helpers=
|
|
skip_controlles=
|
|
enable_stats=
|
|
|
|
# strip options
|
|
while [ $# -gt 3 ]; do
|
|
case "$1" in
|
|
--open-browser)
|
|
open_browser=true
|
|
;;
|
|
-o)
|
|
open_browser=true
|
|
;;
|
|
--skip-syntax)
|
|
skip_syntax=true
|
|
;;
|
|
-s)
|
|
skip_syntax=true
|
|
;;
|
|
--skip-models)
|
|
skip_models=true
|
|
;;
|
|
-m)
|
|
skip_models=true
|
|
;;
|
|
--skip-helpers)
|
|
skip_helpers=true
|
|
;;
|
|
-h)
|
|
skip_helpers=true
|
|
;;
|
|
--skip-controllers)
|
|
skip_controlles=true
|
|
;;
|
|
-c)
|
|
skip_controlles=true
|
|
;;
|
|
--enable-stats)
|
|
enable_stats=true
|
|
;;
|
|
-e)
|
|
enable_stats=true
|
|
;;
|
|
*)
|
|
echo "Wrong arguments, see: tester.sh --help."
|
|
exit 1
|
|
|
|
esac
|
|
shift
|
|
done
|
|
|
|
# check arguments
|
|
if [ $# -ne 3 ]; then
|
|
echo "Wrong arguments, see: tester.sh --help."
|
|
exit 1
|
|
fi
|
|
|
|
# check if unit test is enabled in config.php
|
|
cat ../../../config.php | grep \'unit_tester\' | grep -i TRUE 2>&1 1>/dev/null
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo "Enable Unit Test by adding line into config.php: ";
|
|
echo ""
|
|
echo "\$config['unit_tester'] = TRUE;";
|
|
echo ""
|
|
exit 2
|
|
fi
|
|
|
|
url=$1
|
|
username=$2
|
|
password=$3
|
|
|
|
######### LOGIN TO FREENETIS ###################################################
|
|
|
|
echo "=== LOGIN TO FREENETIS ==="
|
|
|
|
if [ ! -d "curl" ]; then
|
|
mkdir curl
|
|
fi
|
|
|
|
echo ""
|
|
echo "Getting cookies:"
|
|
echo ""
|
|
|
|
# Get test cookie
|
|
curl --cookie-jar curl/cookies_init.txt "${url}/en/login" > /dev/null
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo ""
|
|
red_echo "Can't connect to given URL, fill correct URL."
|
|
echo ""
|
|
exit 5
|
|
fi
|
|
|
|
echo ""
|
|
echo "Login to FreenetIS:"
|
|
echo ""
|
|
|
|
# Login
|
|
log_out=`curl --data "username=${username}&password=${password}&submit=Login" \
|
|
--cookie "curl/cookies_init.txt" \
|
|
--cookie-jar "curl/cookies_login.txt" \
|
|
"${url}/en/login"`
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo ""
|
|
red_echo "Can't login to given URL, fill correct URL."
|
|
echo ""
|
|
exit 5
|
|
fi
|
|
|
|
if [ "${log_out:0:8}" != "<a href=" ]; then
|
|
echo ""
|
|
red_echo "Can't login, wrong URL or login info."
|
|
echo ""
|
|
exit 6
|
|
fi
|
|
|
|
|
|
echo ""
|
|
green_echo "Logged in as ${username}"
|
|
echo ""
|
|
|
|
######### STEP 1 - Test syntax of all PHP files ###############################
|
|
|
|
if [ -z $skip_syntax ]; then
|
|
|
|
echo "=== SYNTAX TESTING ==="
|
|
|
|
# move to root directory
|
|
cd ../../../
|
|
# search all PHP files
|
|
php_files_list=`find . -name "*.php"`
|
|
count_php_files=`echo "${php_files_list}" | wc -l`
|
|
counter_ok=0
|
|
counter_error=0
|
|
|
|
echo ""
|
|
printf "%4d/%4d" 0 $count_php_files
|
|
|
|
# iterate throught all files
|
|
for php_file in $php_files_list
|
|
do
|
|
# test syntax error
|
|
output=`php -l "${php_file}" 2>&1`
|
|
|
|
echo -en "\b\b\b\b\b\b\b\b\b"
|
|
printf "%4d/%4d" $counter_ok $count_php_files
|
|
|
|
if [ $? -eq 0 ]; then
|
|
let counter_ok++
|
|
else
|
|
let counter_error++
|
|
echo ""
|
|
echo "Syntax error in ${php_file}:"
|
|
echo $output
|
|
fi
|
|
done
|
|
|
|
# move back
|
|
cd ./application/vendors/unit_tester
|
|
|
|
# Info about check
|
|
echo -en "\b\b\b\b\b\b\b\b\b"
|
|
green_echo "${counter_ok} files has valid syntax"
|
|
if [ $counter_error -ne 0 ]; then
|
|
red_echo "${counter_error} files has invalid syntax"
|
|
fi
|
|
echo ""
|
|
|
|
# Continue?
|
|
if [ $counter_error -gt 0 ]; then
|
|
echo "Test abort, fix syntax errors..."
|
|
exit 1
|
|
fi
|
|
|
|
fi
|
|
|
|
######### STEP 2 - Run config (re)generation ###################################
|
|
|
|
echo "=== (RE)GENERATING CONFIG ==="
|
|
|
|
perl utils/generate_unit_config.pl > generate_unit_config.log 2>&1
|
|
|
|
if [ $? -eq 0 ]; then
|
|
echo ""
|
|
green_echo "Config generated, see generate_unit_config.log for more details..."
|
|
echo ""
|
|
else
|
|
echo ""
|
|
red_echo "Config generation failed, log written to generate_unit_config.log"
|
|
echo ""
|
|
echo "Test abort, see log..."
|
|
exit 3
|
|
fi
|
|
|
|
######### STEP 3 - Check models for errors #####################################
|
|
|
|
if [ -z $skip_models ]; then
|
|
|
|
echo "=== CHECKING MODELS ==="
|
|
|
|
echo ""
|
|
echo "Get unit tester results:"
|
|
echo ""
|
|
|
|
# Model test
|
|
if [ -z $enable_stats ]; then
|
|
curl --cookie "curl/cookies_login.txt" "${url}/en/unit_tester/models" > curl/models.html
|
|
else
|
|
curl --cookie "curl/cookies_login.txt" "${url}/en/unit_tester/models/enabled" > curl/models.html
|
|
fi
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo ""
|
|
red_echo "Can't connect to unit tester."
|
|
echo ""
|
|
exit 5
|
|
fi
|
|
|
|
# Test ouput
|
|
output=`perl utils/result_info.pl "curl/models.html" 2>&1`
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo ""
|
|
red_echo "Cannot validate ouput of test.\nError: ${output}"
|
|
echo ""
|
|
exit 6
|
|
fi
|
|
|
|
echo ""
|
|
|
|
errors_count=`echo $output | cut -d: -f1`
|
|
methods_count=`echo $output | cut -d: -f2`
|
|
files_count=`echo $output | cut -d: -f3`
|
|
|
|
if [ "$errors_count" != "0" ]; then
|
|
red_echo "Error in model test $errors_count tests failed, see: curl/models.html"
|
|
green_echo "$methods_count tests passed in $files_count models."
|
|
|
|
if [ -n "$open_browser" ] ; then
|
|
xdg-open curl/models.html 2>&1 1>/dev/null
|
|
fi
|
|
else
|
|
if [ -n "$open_browser" ] && [ -n $enable_stats ] ; then
|
|
xdg-open curl/models.html 2>&1 1>/dev/null
|
|
fi
|
|
|
|
green_echo "$methods_count tests passed in $files_count models."
|
|
fi
|
|
|
|
echo ""
|
|
|
|
fi
|
|
|
|
######### STEP 4 - Check helpers for errors ####################################
|
|
|
|
if [ -z $skip_helpers ]; then
|
|
|
|
echo "=== CHECKING HELPERS ==="
|
|
|
|
echo ""
|
|
echo "Get unit tester results:"
|
|
echo ""
|
|
|
|
# Helper test
|
|
curl --cookie "curl/cookies_login.txt" "${url}/en/unit_tester/helpers" > curl/helpers.html
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo ""
|
|
red_echo "Can't connect to unit tester."
|
|
echo ""
|
|
exit 5
|
|
fi
|
|
|
|
# Test ouput
|
|
output=`perl utils/result_info.pl "curl/helpers.html" 2>&1`
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo ""
|
|
red_echo "Cannot validate ouput of test.\nError: ${output}"
|
|
echo ""
|
|
exit 6
|
|
fi
|
|
|
|
echo ""
|
|
|
|
errors_count=`echo $output | cut -d: -f1`
|
|
methods_count=`echo $output | cut -d: -f2`
|
|
files_count=`echo $output | cut -d: -f3`
|
|
|
|
if [ "$errors_count" != "0" ]; then
|
|
red_echo "Error in helper test $errors_count tests failed, see: curl/helpers.html"
|
|
green_echo "$methods_count tests passed in $files_count helpers."
|
|
|
|
if [ -n "$open_browser" ] ; then
|
|
xdg-open curl/helpers.html 2>&1 1>/dev/null
|
|
fi
|
|
else
|
|
green_echo "$methods_count tests passed in $files_count helpers."
|
|
fi
|
|
|
|
echo ""
|
|
|
|
fi
|
|
|
|
######### STEP 5 - Check controllers for errors ################################
|
|
|
|
if [ -z $skip_controlles ]; then
|
|
|
|
echo "=== CHECKING CONTROLLERS ==="
|
|
|
|
echo ""
|
|
echo "Wait please, this action can take several minutes..."
|
|
echo ""
|
|
|
|
rm -f curl/controller_* curl/cstats
|
|
|
|
if [ -z $enable_stats ]; then
|
|
output=`perl utils/controllers_test.pl "${url}" "curl/cookies_login.txt" 2>curl/tmp`
|
|
else
|
|
output=`perl utils/controllers_test.pl "${url}" "curl/cookies_login.txt" "stats_enabled" 2>curl/tmp`
|
|
fi
|
|
|
|
if [ "$?" != "0" ]; then
|
|
red_echo "Failed to check controllers, error:"
|
|
cat curl/tmp
|
|
rm curl/tmp
|
|
exit 7;
|
|
fi
|
|
|
|
errors_count=`echo $output | cut -d: -f1`
|
|
valid_count=`echo $output | cut -d: -f2`
|
|
|
|
if [ "$errors_count" != "0" ]; then
|
|
green_echo "$valid_count tests passed in controllers."
|
|
red_echo "$errors_count tests failed. Links to invalid tests:"
|
|
|
|
echo ""
|
|
|
|
if [ -n "$open_browser" ] ; then
|
|
cat curl/tmp | while read url; do
|
|
#split
|
|
url_first=`echo $url | awk -F\: '{ print $1; }'`
|
|
url_rest=`echo ${url#*:}`
|
|
# print url
|
|
echo $url_rest
|
|
|
|
xdg-open "curl/controller_test_error_${url_first}.html" 2>&1 1>/dev/null
|
|
done
|
|
else
|
|
cut -f 2 curl/tmp
|
|
fi
|
|
else
|
|
green_echo "$valid_count tests passed in controllers."
|
|
fi
|
|
|
|
if [ -n "$enable_stats" ]; then
|
|
echo ""
|
|
green_echo "Benchmarks was written to curl/cstats"
|
|
echo ""
|
|
fi
|
|
|
|
rm curl/tmp
|
|
|
|
fi
|
|
|
|
################################################################################
|
|
|
|
echo ""
|
|
echo "=============================="
|
|
echo ""
|
|
green_echo "Done!"
|
|
echo ""
|
|
|
|
exit 0
|