| |
@@ -0,0 +1,153 @@
|
| |
+ #! /bin/bash -efu
|
| |
+
|
| |
+ debug() {
|
| |
+ if [ -n "$DEBUG" ]; then
|
| |
+ echo "$*" >&2
|
| |
+ fi
|
| |
+ }
|
| |
+
|
| |
+ msg_usage() {
|
| |
+ cat <<_EOF_
|
| |
+ Run family test.
|
| |
+
|
| |
+ Usage:
|
| |
+ $PROG <options>
|
| |
+
|
| |
+ Options:
|
| |
+ -h, --help Display this help and exit
|
| |
+ -v, --verbose Turn on debug
|
| |
+ -l, --lang=LANG Test LANG language coverage (default: en)
|
| |
+ -f, --family=FILE Set a family name supposed to be assigned for alias.
|
| |
+ -g, --alias=STR Set an alias name. (default: sans-serif)
|
| |
+ -a, --artifactsdir=DIR Set environment dir to store artifacts
|
| |
+ -k, --package=NAME Set a package name for fonts.
|
| |
+ _EOF_
|
| |
+ }
|
| |
+
|
| |
+ PROG="${PROG:-${0##*/}}"
|
| |
+ DEBUG="${DEBUG:-}"
|
| |
+ OPT_LANG="${OPT_LANG:-en}"
|
| |
+ OPT_FAMILY="${OPT_FAMILY:-}"
|
| |
+ OPT_ARTIFACTS_DIR="${OPT_ARTIFACTS_DIR:-}"
|
| |
+ OPT_ALIAS="${OPT_ALIAS:-sans-serif}"
|
| |
+ OPT_PACKAGE="${OPT_PACKAGE:-}"
|
| |
+
|
| |
+ opt=$(getopt -n "$0" --options "hvl:f:t:a:g:k:" --longoptions "help,verbose,lang:,family:,test:,artifactsdir:,alias:,package:" -- "$@")
|
| |
+ eval set -- "$opt"
|
| |
+ while [[ $# -gt 0 ]]; do
|
| |
+ case "$1" in
|
| |
+ -k|--package)
|
| |
+ OPT_PACKAGE="$2"
|
| |
+ shift 2
|
| |
+ ;;
|
| |
+ -g|--alias)
|
| |
+ OPT_ALIAS="$2"
|
| |
+ shift 2
|
| |
+ ;;
|
| |
+ -a|--artifactsdir)
|
| |
+ OPT_ARTIFACTS_DIR="$2"
|
| |
+ shift 2
|
| |
+ ;;
|
| |
+ -f|--family)
|
| |
+ OPT_FAMILY="$2"
|
| |
+ shift 2
|
| |
+ ;;
|
| |
+ -l|--lang)
|
| |
+ OPT_LANG="$2"
|
| |
+ shift 2
|
| |
+ ;;
|
| |
+ -v|--verbose)
|
| |
+ DEBUG="-v"
|
| |
+ shift
|
| |
+ ;;
|
| |
+ -h|--help)
|
| |
+ msg_usage
|
| |
+ exit 0
|
| |
+ ;;
|
| |
+ --)
|
| |
+ shift
|
| |
+ ;;
|
| |
+ *)
|
| |
+ msg_usage
|
| |
+ exit 1
|
| |
+ esac
|
| |
+ done
|
| |
+
|
| |
+ if [ -z "$OPT_ARTIFACTS_DIR" ] || [ -z "$OPT_LANG" ] || [ -z "$OPT_FAMILY" ]; then
|
| |
+ echo "Use: $PROG -h for help."
|
| |
+ exit 0
|
| |
+ fi
|
| |
+
|
| |
+ debug "Alias: $OPT_ALIAS"
|
| |
+ debug "Family: $OPT_FAMILY"
|
| |
+ debug "Lang: $OPT_LANG"
|
| |
+ debug "Artifacts dir: $OPT_ARTIFACTS_DIR"
|
| |
+ debug "Package name: $OPT_PACKAGE"
|
| |
+ STR_TEST_DASHED=$(echo "${OPT_PACKAGE}_${OPT_ALIAS}" | sed -e 's/\//-/g' -e 's/ /-/g')
|
| |
+ debug "Log file: $STR_TEST_DASHED.log"
|
| |
+
|
| |
+ clean_exit() {
|
| |
+ rc=$?;
|
| |
+ trap - SIGINT SIGTERM SIGABRT EXIT
|
| |
+ echo "Run test $OPT_ALIAS: done."
|
| |
+ for pid in $(ps -o pid --no-headers --ppid $$); do
|
| |
+ if [ -n "$(ps -p $pid -o pid=)" ]; then
|
| |
+ kill -s HUP $pid
|
| |
+ fi
|
| |
+ done
|
| |
+ local log_file_name="$STR_TEST_DASHED.log"
|
| |
+ local log_file_path="$OPT_ARTIFACTS_DIR/$log_file_name"
|
| |
+ local status
|
| |
+ if [[ $rc -eq 127 ]]; then
|
| |
+ status="ERROR"
|
| |
+ elif grep -q "RESULT: WARN" "$log_file_path"; then
|
| |
+ status="ERROR"
|
| |
+ elif grep -q "RESULT: FAIL" "$log_file_path"; then
|
| |
+ status="FAIL"
|
| |
+ elif grep -q "RESULT: PASS" "$log_file_path"; then
|
| |
+ status="PASS"
|
| |
+ elif grep -q "FAIL" "$log_file_path"; then
|
| |
+ status="FAIL"
|
| |
+ elif grep -q "PASS" "$log_file_path"; then
|
| |
+ status="PASS"
|
| |
+ else
|
| |
+ status="ERROR"
|
| |
+ fi
|
| |
+ echo "$status $OPT_ALIAS" >> "$OPT_ARTIFACTS_DIR/test.log"
|
| |
+ mv "$log_file_path" "$OPT_ARTIFACTS_DIR/${status}_${log_file_name}"
|
| |
+ local results="$OPT_ARTIFACTS_DIR/results.yml"
|
| |
+ local result=$(echo $status | tr '[:upper:]' '[:lower:]')
|
| |
+ test -f "$results" || echo 'results:' > "$results"
|
| |
+ echo "- {result: $result, test: $OPT_ALIAS}" >> "$results"
|
| |
+ exit 0
|
| |
+ }
|
| |
+ trap clean_exit SIGINT SIGTERM SIGABRT EXIT
|
| |
+
|
| |
+ cachedir=`pkg-config --variable cachedir fontconfig`
|
| |
+ tmpconfd=`mktemp --tmpdir -d fontsci.XXXXXXXX`
|
| |
+ conf=$(for i in `rpm -ql $OPT_PACKAGE | grep conf.d`; do
|
| |
+ echo "<include>$i</include>"
|
| |
+ done)
|
| |
+ cat <<_EOF_> $tmpconfd/fonts.conf
|
| |
+ <fontconfig>
|
| |
+ <dir>/usr/share/fonts</dir>
|
| |
+ $conf
|
| |
+ <cachedir>$cachedir</cachedir>
|
| |
+ </fontconfig>
|
| |
+ _EOF_
|
| |
+ debug "Config: `cat $tmpconfd/fonts.conf`"
|
| |
+
|
| |
+ mkdir -p "$OPT_ARTIFACTS_DIR"
|
| |
+ export OUTPUTFILE="$(realpath "$OPT_ARTIFACTS_DIR")/$STR_TEST_DASHED-out.log"
|
| |
+ logfile_stdout="$OPT_ARTIFACTS_DIR/$STR_TEST_DASHED.log"
|
| |
+ logfile_stderr="$OPT_ARTIFACTS_DIR/$STR_TEST_DASHED-err.log"
|
| |
+ exec 3>&1 4>&2 1> >(tee -a "$logfile_stdout" >&3) 2> >(tee -a "$logfile_stderr" >&4)
|
| |
+
|
| |
+ debug "Check family assignment"
|
| |
+ res=`FONTCONFIG_FILE=$tmpconfd/fonts.conf fc-match -f "%{family[0]}" :family=$OPT_ALIAS:lang=$OPT_LANG`
|
| |
+ if [ "x$res" = "x$OPT_FAMILY" ]; then
|
| |
+ echo "RESULT: PASS: $OPT_FAMILY was assigned to $OPT_ALIAS as expected"
|
| |
+ else
|
| |
+ echo "RESULT: FAIL: $OPT_FAMILY wasn't assigned to $OPT_ALIAS (actual result: $res)"
|
| |
+ fi
|
| |
+ rm -rf $tmpconfd
|
| |
Signed-off-by: Parag Nemade pnemade@fedoraproject.org