blob: 244358989774f9aca19d1b4de06472cc8b95ded7 [file] [log] [blame]
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
# Copyright (c) 2021 Oracle. All Rights Reserved.
#
# Generate a group file from the _begin_fstest call in each test.
if [ "$1" = "--help" ]; then
echo "Usage: (cd tests/XXX/ ; ../../tools/mkgroupfile [output])"
exit 1
fi
test_dir="$PWD"
groupfile="$1"
new_groups="/tmp/groups.$$"
GROUPNAME_DOC_FILE="$(readlink -m ../../doc/group-names.txt)"
if [ ! -x ../../check ]; then
echo "$0: Run this from tests/XXX/."
exit 1
fi
cleanup()
{
rm -f $new_groups.check
rm -f $new_groups
}
ret=1 # trigger cleanup of temporary files unless we succeed
trap 'cleanup; exit $ret' EXIT INT TERM QUIT
# Make sure each group is in the documentation file.
_check_groups() {
test -n "$GROUPNAME_DOC_FILE" || return 0
local groups="$1"
declare -a missing=()
for group in `grep -v '#' $groups`; do
if ! grep -q "^${group}[[:space:]]" "$GROUPNAME_DOC_FILE"; then
missing+=("\"${group}\"")
fi
done
test "${#missing}" -eq 0 && return 0
local suffix=
test "${#missing}" -gt 1 && suffix="s"
echo "group$suffix ${missing[@]} not mentioned in documentation." 1>&2
ret=1
exit 1
}
generate_groupfile() {
cat << ENDL > $new_groups
# QA groups control file, automatically generated.
# See _begin_fstest in each test for details.
ENDL
cd ../../
# Aggregate the groups each test belongs to for the group file
grep -I -R "^_begin_fstest" $test_dir/ | \
sed -e 's/^.*\/\([0-9]*\):_begin_fstest/\1/' >> $new_groups
# Create the list of unique groups for existence checking
grep -I -R "^_begin_fstest" $test_dir/ | \
sed -e 's/^.*_begin_fstest //' -e 's/ /\n/g' | \
sort -u > $new_groups.check
_check_groups $new_groups.check
cd "$test_dir"
}
if [ -z "$groupfile" ] || [ "$groupfile" = "-" ]; then
# Dump the group file to stdout and exit
unset groupfile
generate_groupfile
cat $new_groups
else
# Otherwise, write the group file to disk somewhere.
generate_groupfile
mv -f "$new_groups" "$groupfile"
fi
# Success!
ret=0