4 # @author MyungJoo Ham <myungjoo.ham@gmail.com>
7 # @brief This is API set for SSAT (Shell Script Automated Tester)
10 if [[ "$nocolor" != "1" ]]
17 LightGreen='\033[1;32m'
21 LightBlue='\033[1;34m'
23 LightPurple='\033[1;35m'
25 LightCyan='\033[1;36m'
26 LightGray='\033[0;37m'
53 if [[ "${SILENT}" == "0" ]]
57 ResultLog="$ResultLog$1\n"
61 # @brief Report results of a test group (a "runTest.sh" in a testee directory)
64 if (( ${_fail} == 0 ))
66 writef "${Green}==================================================${NC}"
67 writef "${LightGreen}[PASSED]${NC} Test Group $_group ${Green}Passed${NC}"
69 if (( ${_criticalFail} > 0 ))
71 writef "${Green}==================================================${NC}"
72 writef "${Red}[FAILED]${NC} Test Group $_group has ${Red}failed cases ($_fail)${NC}"
74 writef "${Green}==================================================${NC}"
75 writef "${LightGreen}[PASSED]${NC} Test Group $_group has ${Red}failed cases ($_fail), but they are not critical.${NC}"
79 if [[ "$INDEPENDENT" -eq "1" ]]
84 writef "${_cases},${_pass},${_fail}"
85 echo "${ResultLog}" > ${_filename}
86 printf "${_filename}\n"
89 if (( ${_criticalFail} > 0 ))
103 _group=`basename "$1"`
104 if [[ "${#_group}" -eq "0" ]]
106 _group="(Unspecified)"
109 writef "${Green}==================================================${NC}"
110 writef " Test Group ${Green}$_group${NC} Starts."
114 # @brief Write Test Log
115 # @param $1 1 = success / 0 = fail ($5 is not 1)
116 # @param $2 test case ID (short string)
117 # @param $3 test case description
118 # @param $4 set 1 if this is not critical (don't care if it's pass or fail)_
119 # @param $5 set 1 if $1==0 is success and $1!=0 is fail.
120 function testResult {
123 if [[ "${5}" -eq "1" ]]; then
124 if [[ "${1}" -eq "0" ]]; then
128 if [[ "${1}" -eq "1" ]]; then
133 if [[ "${_good}" -eq "1" ]]
135 writef "${LightGreen}[PASSED]${NC} ${Green}$2${NC}:$3${NC}"
139 if [[ "${4}" == "1" ]]
141 writef "${Purple}[FAILED][Ignorable] $2${NC}:${Purple}$3${NC}"
143 writef "${Red}[FAILED][Critical] $2${NC}:${Purple}$3${NC}"
144 _criticalFail=$((_criticalFail+1))
150 # @brief Call Test Case (a shell script), expected exit = 0
151 # @param $1 Full path to the executable (e.g., ~/script/a1.sh)
152 # @param $2 Full string of the arguments to $1 (e.g., "-q -n --dryrun")
153 # @param $3 test case ID
154 # @param $4 test case description
155 # @param $5 set 1 if this is not critical (don't care if it's pass or fail)_
156 function callTestSuccess {
159 if (( ${retcode} == 0 ))
161 testResult 1 "$3" "$4" $5
163 testResult 0 "$3" "$4 ret($retcode)" $5
168 # @brief Call Test Case (a shell script), expected exit != 0
169 # @param $1 Full path to the executable (e.g., ~/script/a1.sh)
170 # @param $2 Full string of the arguments to $1 (e.g., "-q -n --dryrun")
171 # @param $3 test case ID
172 # @param $4 test case description
173 # @param $5 set 1 if this is not critical (don't care if it's pass or fail)_
174 function callTestFail {
177 if (( ${retcode} != 0 ))
179 testResult 1 "$3" "$4 ret($retcode)" $5
181 testResult 0 "$3" "$4" $5
186 # @brief Call Test Case (a shell script), expected exit == $5
187 # @param $1 Full path to the executable (e.g., ~/script/a1.sh)
188 # @param $2 Full string of the arguments to $1 (e.g., "-q -n --dryrun")
189 # @param $3 test case ID
190 # @param $4 test case description
191 # @param $5 Expected exit code.
192 # @param $6 set 1 if this is not critical (don't care if it's pass or fail)_
193 function callTestExitEq {
196 if (( ${retcode} == $5 ))
198 testResult 1 "$3" "$4" $6
200 testResult 0 "$3" "$4 ret($retcode)" $6
205 # @brief Compare two result files expected to be equal
206 # @param $1 Path to result 1 (golden)
207 # @param $2 Path to result 2 (test run)
208 # @param $3 test case ID
209 # @param $4 test case description
210 # @param $5 0 if the size is expected to be equal as well. 1 if golden (result 1) might be smaller (will ignore rest of result 2). 2 if the opposite of 1. If $5 > 2, it denotes the max size of compared bytes. (compare the first $5 bytes only)
211 # @param $6 set 1 if this is not critical (don't care if it's pass or fail)_
212 function callCompareTest {
220 if (( $5 == 0 )); then
221 # Size should be same as well.
224 elif (( $5 == 1 )); then
225 # Compare up to the size of golden
226 cmp -n `stat --printf="%s" $1` $1 $2
228 elif (( $5 == 2 )); then
229 # Compare up to the size of test-run
230 cmp -n `stat --printf="%s" $2` $1 $2
233 # Compare up to $5 bytes.
234 cmp -n `stat --printf="%s" $5` $1 $2
237 if (( ${output} == 0 )); then
242 testResult $output "$3" "$4" $6
244 # use internal logic (slower!)
246 testResult 0 "$3" "Cannot test. cmp not found." $6
250 ########################################################
251 ## EXTENSION. GStreamer
252 ## @todo How to separate such "plugins"?
253 ########################################################
256 # @brief Execute gst-launch with given arguments
257 # @param $1 gst-launch-1.0 Arguments
258 # @param $2 test case ID
259 # @param $3 set 1 if this is not critical (don't care if it's pass or fail)
260 # @param $4 set 1 if this passes if gstLaunch fails.
261 # @param $5 set 1 to enable PERFORMANCE test.
263 calloutput=$(gst-launch-1.0 -q $1)
266 if [[ "${4}" -eq "1" ]]; then
267 if [[ "${retcode}" -ne "0" ]]; then
271 if [[ "${retcode}" -eq "0" ]]; then
276 if [[ "$desired" -eq "1" ]]; then
277 testResult 1 "$2" "gst-launch of case $2" $3
279 testResult 0 "$2" "gst-launch of case $2" $3
282 if [[ "$5" -eq "1" ]]; then
283 if (( ${#GST_DEBUG_DUMP_DOT_DIR} -le 1 )); then
284 GST_DEBUG_DUMP_DOT_DIR="./performance"
286 dot -Tpng $GST_DEBUG_DUMP_DOT_DIR/*.PLAYING_PAUSED.dot > $GST_DEBUG_DUMP_DOT_DIR/debug/$base/$2.png
287 gst-report-1.0 --dot $GST_DEBUG_DUMP_DOT_DIR/*.gsttrace | dot -Tsvg > $GST_DEBUG_DUMP_DOT_DIR/profile/$base/$2.svg
288 rm -f $GST_DEBUG_DUMP_DOT_DIR/*.dot
289 rm -f $GST_DEBUG_DUMP_DOT_DIR/*.gsttrace
294 # @brief Convert all *.bmp to *.png
296 # @todo macronice "bmp2png" searching.
297 function convertBMP2PNG {
299 if [ -x bmp2png ]; then
302 if [ -x ../bmp2png ]; then
305 if [ -x ../../bmp2png ]; then
308 tool="../../../bmp2png"
309 # Try this and die if fails
315 if [[ $X = *"GRAY8"* ]]; then