163 lines
3.9 KiB
Plaintext
163 lines
3.9 KiB
Plaintext
|
#! /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}_${OPT_LANG}" | 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. Test's exit code: $rc"
|
||
|
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"
|
||
|
printf '%s\n' '' \
|
||
|
"- test: $OPT_ALIAS" \
|
||
|
" result: $result" \
|
||
|
" logs:" \
|
||
|
" - ${status}_${log_file_name}" \
|
||
|
>> "$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="$OPT_ARTIFACTS_DIR/$STR_TEST_DASHED.log"
|
||
|
logfile="$(realpath "$logfile")"
|
||
|
exec > >(tee -a "$logfile") 2>&1
|
||
|
|
||
|
debug "Check family assignment"
|
||
|
res=`FONTCONFIG_FILE=$tmpconfd/fonts.conf fc-pattern -c -f "%{family}" :family=$OPT_ALIAS:lang=$OPT_LANG|grep "$OPT_FAMILY"`
|
||
|
ret=0
|
||
|
if [ "x$res" != "x" ]; 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)"
|
||
|
ret=1
|
||
|
fi
|
||
|
rm -rf $tmpconfd
|
||
|
|
||
|
exit $ret
|