[PATCH 03/10] fstests: add tool migrate group membership data to test files

Darrick J. Wong
2021-05-26T01:47:01Z

Create a tool to migrate the mapping of tests <-> groups out of the
group file and into the individual test file as a _set_seq_and_groups
call. In the next patches we'll rewrite all the test files and auto
generate the group files from the tests.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
---
tools/convert-group | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 64 insertions(+)
create mode 100755 tools/convert-group

diff --git a/tools/convert-group b/tools/convert-group
new file mode 100755
index 00000000..e7af10e0
--- /dev/null
+++ b/tools/convert-group
@@ -0,0 +1,64 @@
+#!/bin/bash
+
+# Move group tags from the groups file into the test files themselves.
+
+if [ -z "$1" ] || [ "$1" = "--help" ]; then
+ echo "Usage: $0 test_dir [test_dirs...]"
+ exit 1
+fi
+
+obliterate_group_file() {
+ sed -e 's/^#.*$//g' < group | while read test groups; do
+ if [ -z "$test" ]; then
+ continue;
+ elif [ ! -e "$test" ]; then
+ echo "Ignoring unknown test file \"$test\"."
+ continue
+ fi
+ sed -e '/^seqres=\$RESULT_DIR\/\$seq$/d' \
+ -e '/^echo "QA output created by \$seq"$/d' \
+ -e '/^here=`pwd`$/d' \
+ -e '/^tmp=\/tmp\/\$\$$/d' \
+ -e '/^status=1.*failure.*is.*the.*default/d' \
+ -e '/^status=1.*FAILure.*is.*the.*default/d' \
+ -e '/^status=1.*success.*is.*the.*default/d' \
+ -e '/^status=1.*default.*failure/d' \
+ -e '/^echo.*QA output created by.*seq/d' \
+ -e 's|^seq=.*$|. ./common/test_names\n_set_seq_and_groups '"$groups"'|g' \
+ -i "$test"
+ if grep -q '^status=1$' "$test"; then
+ # Replace the "status=1" lines that don't have the usual
+ # "failure is the default" message if there's no other
+ # code between _set_seq_and_groups and status=1.
+ awk '
+BEGIN {
+ saw_groupinfo = 0;
+}
+{
+ if ($0 ~ /^_set_seq_and_groups/) {
+ saw_groupinfo = 1;
+ printf("%s\n", $0);
+ } else if ($0 ~ /^status=1$/) {
+ if (saw_groupinfo == 0) {
+ printf("%s\n", $0);
+ }
+ } else if ($0 == "") {
+ printf("\n");
+ } else {
+ saw_groupinfo = 0;
+ printf("%s\n", $0);
+ }
+}
+' < "$test" > "$test.new"
+ cat "$test.new" > "$test"
+ rm -f "$test.new"
+ fi
+ done
+}
+
+curr_dir="$PWD"
+for tdir in "$@"; do
+ cd "tests/$tdir"
+ obliterate_group_file
+ cd "$curr_dir"
+done