diff --git a/tools/test-avrdude b/tools/test-avrdude index b63432da..d7a960bb 100755 --- a/tools/test-avrdude +++ b/tools/test-avrdude @@ -14,6 +14,7 @@ list_only=0 # Normal run declare -a pgm_and_target=() # Array with test option strings, eg, "-c dryrun -p m328p" skip_eeprom=0 # Do not skip EEPROM tests for bootloaders by default tmp=/dev/shm # Temporary RAM directory +addtests=0 # Add dryrun/dryboot test cases? verbose=0 # Do not show AVRDUDE errors and warnings by default Usage() { @@ -28,6 +29,7 @@ Options: -p can be used multiple times, overrides default tests -s skip EEPROM tests for bootloaders -t temporary directory + -T Add dryrun/dryboot test cases to test $progname -v verbose: show AVRDUDE error and warning messages -? or -h show this help text Example: @@ -35,7 +37,7 @@ Example: END } -while getopts ":\?hc:d:e:lp:st:v" opt; do +while getopts ":\?hc:d:e:lp:st:Tv" opt; do case ${opt} in c) avrdude_conf="$OPTARG" ;; @@ -51,6 +53,8 @@ while getopts ":\?hc:d:e:lp:st:v" opt; do ;; t) tmp="$OPTARG" ;; + T) addtests=1 + ;; v) verbose=1 ;; --) shift; @@ -69,11 +73,55 @@ while getopts ":\?hc:d:e:lp:st:v" opt; do done shift $((OPTIND -1)) +if [[ $addtests -eq 1 ]]; then + pgm_and_target+=( + "-c dryrun -p at89s51" "-c dryrun -p at89s52" "-c dryboot -p at90can32" + "-c dryrun -p at90can32" "-c dryboot -p at90s1200" "-c dryboot -p at90s2313" + "-c dryrun -p at90s2313" "-c dryboot -p at90s4414" "-c dryrun -p at90s4414" + "-c dryboot -p at90s8515" "-c dryrun -p at90s8515" "-c dryboot -p atmega103" + "-c dryrun -p atmega103" "-c dryboot -p atmega128rfr2" "-c dryrun -p atmega128rfr2" + "-c dryboot -p atmega163" "-c dryrun -p atmega163" "-c dryboot -p atmega16" + "-c dryrun -p atmega16" "-c dryboot -p atmega16hva" "-c dryrun -p atmega16hva" + "-c dryboot -p atmega2560" "-c dryrun -p atmega2560" "-c dryboot -p atmega256rfr2" + "-c dryrun -p atmega256rfr2" "-c dryboot -p atmega406" "-c dryrun -p atmega406" + "-c dryboot -p atmega4808" "-c dryrun -p atmega4808" "-c dryboot -p atmega640" + "-c dryrun -p atmega640" "-c dryboot -p atmega64" "-c dryrun -p atmega64" + "-c dryboot -p atmega64hve2" "-c dryrun -p atmega64hve2" "-c dryboot -p atmega64rfr2" + "-c dryrun -p atmega64rfr2" "-c dryboot -p atmega808" "-c dryrun -p atmega808" + "-c dryboot -p atmega8" "-c dryrun -p atmega8" "-c dryrun -p attiny11" + "-c dryboot -p attiny13" "-c dryrun -p attiny13" "-c dryboot -p attiny1604" + "-c dryrun -p attiny1604" "-c dryboot -p attiny202" "-c dryrun -p attiny202" + "-c dryrun -p attiny20" "-c dryboot -p attiny261" "-c dryrun -p attiny26" + "-c dryrun -p attiny28" "-c dryboot -p attiny3216" "-c dryrun -p attiny3216" + "-c dryboot -p attiny3224" "-c dryrun -p attiny3224" "-c dryboot -p attiny402" + "-c dryrun -p attiny402" "-c dryrun -p attiny40" "-c dryboot -p attiny461" + "-c dryrun -p attiny461" "-c dryboot -p attiny48" "-c dryrun -p attiny48" + "-c dryrun -p attiny4" "-c dryboot -p attiny804" "-c dryrun -p attiny804" + "-c dryboot -p attiny828" "-c dryrun -p attiny828" "-c dryboot -p attiny88" + "-c dryrun -p attiny88" "-c dryrun -p attiny9" "-c dryboot -p atxmega128a4" + "-c dryrun -p atxmega128a4" "-c dryboot -p atxmega128a4u" "-c dryrun -p atxmega128a4u" + "-c dryboot -p atxmega128c3" "-c dryrun -p atxmega128c3" "-c dryboot -p atxmega16a4u" + "-c dryrun -p atxmega16a4u" "-c dryboot -p atxmega16e5" "-c dryrun -p atxmega16e5" + "-c dryboot -p atxmega192a1" "-c dryrun -p atxmega192a1" "-c dryboot -p atxmega192c3" + "-c dryrun -p atxmega192c3" "-c dryboot -p atxmega256a1" "-c dryrun -p atxmega256a1" + "-c dryboot -p atxmega256c3" "-c dryrun -p atxmega256c3" "-c dryboot -p atxmega32a4u" + "-c dryrun -p atxmega32a4u" "-c dryboot -p atxmega32e5" "-c dryrun -p atxmega32e5" + "-c dryboot -p atxmega384c3" "-c dryrun -p atxmega384c3" "-c dryboot -p atxmega64a4" + "-c dryrun -p atxmega64a4" "-c dryboot -p atxmega64a4u" "-c dryrun -p atxmega64a4u" + "-c dryboot -p atxmega8e5" "-c dryrun -p atxmega8e5" "-c dryboot -p avr128da28" + "-c dryrun -p avr128da28" "-c dryboot -p avr16ea28" "-c dryrun -p avr16ea28" + "-c dryboot -p avr32da28" "-c dryrun -p avr32da28" "-c dryboot -p avr32ea28" + "-c dryrun -p avr32ea28" "-c dryboot -p avr64da28" "-c dryrun -p avr64da28" + "-c dryboot -p avr64dd14" "-c dryrun -p avr64dd14" "-c dryboot -p avr64du28" + "-c dryrun -p avr64du28" "-c dryboot -p avr64ea28" "-c dryrun -p avr64ea28" + "-c dryboot -p avr8ea28" "-c dryrun -p avr8ea28" "-c dryboot -p lgt8f328p" + "-c dryrun -p lgt8f328p" + ) +fi + if [[ ${#pgm_and_target[@]} -eq 0 ]]; then # Default tests in absence of -p pgm_and_target+=( - "-cdryrun -pm2560" - "-cdryrun -px64a1" "-cpkobn_updi -B1 -patmega3208" "-cpkobn_updi -B1 -patmega3209" "-cpkobn_updi -B1 -patmega4808" @@ -101,7 +149,9 @@ $avrdude_bin -v 2>&1 | grep Version | cut -f2- -d: | sed s/Version/version/ status=$(mktemp "$tmp/$progname.status.XXXXXX") logfile=$(mktemp "$tmp/$progname.log.XXXXXX") outfile=$(mktemp "$tmp/$progname.out.XXXXXX") -trap "rm -f $status $logfile $outfile" EXIT +tmpfile=$(mktemp "$tmp/$progname.tmp.XXXXXX") +resfile=$(mktemp "$tmp/$progname.res.XXXXXX") +trap "rm -f $status $logfile $outfile $tmpfile $resfile" EXIT TIMEFORMAT=%R # time built-in only returns elapsed wall-clock time elapsed=-1 # Global variable holding time of last execute command in seconds @@ -131,13 +181,14 @@ result () { echo ❌ "$(printf '%7.3f s' $elapsed): $specify (failed command below)" echo "\$ ${command[@]}" | tr -s " " FAIL=true + exitstate=1 [[ $programmer != -cdry* ]] && sleep 4 # Let the hw settle down before next test fi - [[ $verbose -eq 1 ]] && { touch $logfile $outfile; cat $logfile $outfile; } + [[ $verbose -eq 1 ]] && { cat $logfile $outfile; } else - touch $outfile; cat $outfile + cat $outfile fi - rm -f $logfile $outfile; elapsed=-999; specify="unknown"; command=(sleep 0.1) + cp /dev/null $outfile; cp /dev/null $logfile; elapsed=-999; specify="unknown"; command=(sleep 0.1) return $ret } @@ -150,6 +201,7 @@ nofusetest=(-pattiny11/ -pt11/ -pattiny12/ -pt12/ -pattiny15/ -pt15/ -pat89s51/ -pavr8ea28/ -pavr8ea32/ -pavr8ea32/ -plgt8f88p/ -plgt8f88p/ -plgt8f168p/ -plgt8f168p/ -plgt8f328p/ -plgt8f328p/) +exitstate=0 for (( p=0; p<$arraylength; p++ )); do # Isolate programmer and part (assumes -c prog or -cprog but not sth more tricky such as -qc prog) programmer=$(echo ${pgm_and_target[$p]} | sed 's/ *\([^-]\)/\1/g' | tr \ \\n | grep ^-c | tr A-Z a-z) @@ -217,8 +269,6 @@ for (( p=0; p<$arraylength; p++ )); do # Test binary, octal, decimal, hexadecimal and R number lists for I/O declare -A numsys=([b]=binary [o]=octal [d]=decimal [h]=hexadecimal [R]=R) for fmt in b o d h R; do - tmpfile="$tmp/app+data-m2560-$$.$fmt-txt" - resfile="$tmp/app+data-m2560-$$.raw" specify="flash writing ${numsys[$fmt]} numbers" command=(${avrdude[@]} -U $tfiles/urboot_m2560_1s_x16m0_115k2_uart0_rxe0_txe1_led+b7_pr_ee_ce.hex @@ -233,13 +283,11 @@ for (( p=0; p<$arraylength; p++ )); do -U flash:w:$tmpfile:$fmt -U flash:r:$resfile:r) execute "${command[@]}" - touch $tmpfile $resfile result cmp -s $resfile $tfiles/expected-flash-m2560.raw - rm -f $tmpfile $resfile + cp /dev/null $tmpfile; cp /dev/null $resfile done specify="flash writing srec format" - tmpfile="$tmp/app+data-m2560-$$.srec" command=(${avrdude[@]} -U $tfiles/urboot_m2560_1s_x16m0_115k2_uart0_rxe0_txe1_led+b7_pr_ee_ce.hex -T '"write flash 0x3fd00 0xc0cac01a 0xcafe \"secret Coca Cola recipe\""' @@ -254,7 +302,7 @@ for (( p=0; p<$arraylength; p++ )); do -U flash:v:$tfiles/expected-flash-m2560.raw:r) execute "${command[@]}" result [ $? == 0 ] - rm -f $tmpfile + cp /dev/null $tmpfile fi ##### @@ -375,7 +423,6 @@ for (( p=0; p<$arraylength; p++ )); do # Write and verify random data to usersig if present # if [[ -n "$USERSIG_SIZE" && $is_bootloader -ne 1 ]]; then - tmpfile="$tmp/usersig_dump$$_${USERSIG_SIZE}B.bin" specify="usersig -T/-U write/read random_data_${USERSIG_SIZE}B.bin" command=(${avrdude[@]} -T '"erase usersig; write usersig '$tfiles/random_data_${USERSIG_SIZE}B.bin'"' @@ -386,9 +433,8 @@ for (( p=0; p<$arraylength; p++ )); do -T flush -U usersig:v:$tfiles/0xff_${USERSIG_SIZE}B.hex:i) execute "${command[@]}" >$outfile - touch "$tmpfile" result [[ ! -s $outfile '&&' ! -s $logfile ]] '&&' cmp -s "$tfiles/random_data_${USERSIG_SIZE}B.bin" "$tmpfile" - rm -f "$tmpfile" + cp /dev/null $tmpfile fi if [ $FAIL == true ]; then @@ -406,3 +452,5 @@ for (( p=0; p<$arraylength; p++ )); do fi #key done #for + +exit $exitstate