142 lines
3.6 KiB
Bash
Executable File
142 lines
3.6 KiB
Bash
Executable File
#!/bin/sh
|
|
#------------------------------------------------------------------------------
|
|
# Copyright (C) 2010-2012, Robert Johansson and contributors, Raditex AB
|
|
# All rights reserved.
|
|
#
|
|
# rSCADA
|
|
# http://www.rSCADA.se
|
|
# info@rscada.se
|
|
#
|
|
# Contributors:
|
|
# Large parts of this file was contributed by Stefan Wahren.
|
|
#
|
|
#------------------------------------------------------------------------------
|
|
|
|
NUMBER_OF_PARSING_ERRORS=0
|
|
FAILING_TESTS=failing_tests.txt
|
|
NEW_TESTS=new_tests.txt
|
|
touch $FAILING_TESTS
|
|
touch $NEW_TESTS
|
|
|
|
# Check commandline parameter
|
|
if [ $# -lt 1 ] || [ $# -gt 2 ]; then
|
|
echo "usage: $0 path_to_directory_with_xml_files"
|
|
echo "or"
|
|
echo "usage: $0 path_to_directory_with_xml_files path_to_mbus_parse_hex_with_filename"
|
|
exit 3
|
|
fi
|
|
|
|
directory="$1"
|
|
|
|
# # Check directory
|
|
if [ ! -d "$directory" ]; then
|
|
echo "$directory not found"
|
|
exit 3
|
|
fi
|
|
|
|
# Default location is this one
|
|
mbus_parse_hex="build/bin/mbus_parse_hex"
|
|
|
|
# though can be overriten
|
|
if [ $# -eq 2 ]; then
|
|
mbus_parse_hex="$2"
|
|
fi
|
|
|
|
# Check if mbus_parse_hex exists
|
|
if [ ! -x "$mbus_parse_hex" ]; then
|
|
echo "mbus_parse_hex not found"
|
|
echo "path to mbus_parse_hex: $mbus_parse_hex"
|
|
exit 3
|
|
fi
|
|
|
|
generate_xml() {
|
|
directory="$1"
|
|
hexfile="$2"
|
|
mode="$3"
|
|
|
|
filename=$(basename "$hexfile" .hex)
|
|
|
|
if [ "$mode" = "normalized" ]; then
|
|
options="-n"
|
|
mode=".norm"
|
|
else
|
|
options=""
|
|
mode=""
|
|
fi
|
|
|
|
# Parse hex file and write XML in file
|
|
"$mbus_parse_hex" $options "$hexfile" > "$directory/$filename$mode.xml.new"
|
|
result=$?
|
|
|
|
# Check parsing result
|
|
if [ $result -ne 0 ]; then
|
|
NUMBER_OF_PARSING_ERRORS=$((NUMBER_OF_PARSING_ERRORS + 1))
|
|
echo "Unable to generate XML for $hexfile"
|
|
rm "$directory/$filename$mode.xml.new"
|
|
return 1
|
|
fi
|
|
|
|
# Compare old XML with new XML and write in file
|
|
diff -u "$directory/$filename$mode.xml" "$directory/$filename$mode.xml.new" 2> /dev/null > "$directory/$filename$mode.dif"
|
|
result=$?
|
|
|
|
case "$result" in
|
|
0)
|
|
# XML equal -> remove new
|
|
rm "$directory/$filename$mode.xml.new"
|
|
rm "$directory/$filename$mode.dif"
|
|
;;
|
|
1)
|
|
# different -> print diff
|
|
echo "== $directory/$filename$mode failed"
|
|
cat "$directory/$filename$mode.dif" && rm "$directory/$filename$mode.dif"
|
|
echo ""
|
|
echo "$filename$mode" >> $FAILING_TESTS
|
|
;;
|
|
*)
|
|
# no old -> rename XML
|
|
echo "Create $filename$mode.xml"
|
|
mv "$directory/$filename$mode.xml.new" "$directory/$filename$mode.xml"
|
|
rm "$directory/$filename$mode.dif"
|
|
echo "$filename$mode" >> $NEW_TESTS
|
|
;;
|
|
esac
|
|
|
|
return $result
|
|
}
|
|
|
|
for hexfile in "$directory"/*.hex; do
|
|
if [ ! -f "$hexfile" ]; then
|
|
continue
|
|
fi
|
|
|
|
generate_xml "$directory" "$hexfile" "default"
|
|
|
|
generate_xml "$directory" "$hexfile" "normalized"
|
|
done
|
|
|
|
# Check the size of the file $FAILING_TESTS. Make sure to indicate failure.
|
|
if [ -s $FAILING_TESTS ]; then
|
|
echo "** There were errors in the following file(s):"
|
|
cat $FAILING_TESTS
|
|
exit 1
|
|
else
|
|
rm $FAILING_TESTS
|
|
fi
|
|
if [ -s $NEW_TESTS ]; then
|
|
echo "** There were new test in the following file(s):"
|
|
cat $NEW_TESTS
|
|
else
|
|
rm $NEW_TESTS
|
|
fi
|
|
|
|
# Check that there was no files that failed to parse
|
|
if [ $NUMBER_OF_PARSING_ERRORS -ne 0 ]; then
|
|
echo "** There were $NUMBER_OF_PARSING_ERRORS files that did not parse, expected 0 files."
|
|
echo
|
|
exit $NUMBER_OF_PARSING_ERRORS
|
|
fi
|
|
DIRECTORY_BASENAME="$(basename "$directory")"
|
|
echo "** Tests executed successfully in \"$DIRECTORY_BASENAME\"."
|
|
echo
|