All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Darrick J. Wong" <djwong@kernel.org>
To: djwong@kernel.org, guaneryu@gmail.com
Cc: Chandan Babu R <chandanrlinux@gmail.com>,
	Allison Henderson <allison.henderson@oracle.com>,
	linux-xfs@vger.kernel.org, fstests@vger.kernel.org, guan@eryu.me,
	amir73il@gmail.com, ebiggers@kernel.org
Subject: [PATCH 04/13] fstests: add tool migrate group membership data to test files
Date: Mon, 14 Jun 2021 13:59:21 -0700	[thread overview]
Message-ID: <162370436132.3800603.3564234435790687757.stgit@locust> (raw)
In-Reply-To: <162370433910.3800603.9623820748404628250.stgit@locust>

From: Darrick J. Wong <djwong@kernel.org>

Create a tool to migrate the mapping of tests <-> groups out of the
group file and into the individual test file as a _begin_fstest
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>
Reviewed-by: Chandan Babu R <chandanrlinux@gmail.com>
Reviewed-by: Allison Henderson <allison.henderson@oracle.com>
---
 tools/convert-group |  138 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 138 insertions(+)
 create mode 100755 tools/convert-group


diff --git a/tools/convert-group b/tools/convert-group
new file mode 100755
index 00000000..81ad9934
--- /dev/null
+++ b/tools/convert-group
@@ -0,0 +1,138 @@
+#!/bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2021 Oracle.  All Rights Reserved.
+
+# 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
+
+		# Replace all the open-coded test preparation code with a
+		# single call to _begin_fstest.
+		sed -e '/^seqres=\$RESULT_DIR\/\$seq$/d' \
+		    -e '/^seqres=\"\$RESULT_DIR\/\$seq\"$/d' \
+		    -e '/^echo "QA output created by \$seq"$/d' \
+		    -e '/^here=`pwd`$/d' \
+		    -e '/^here=\$(pwd)$/d' \
+		    -e '/^here=\$PWD$/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 '/^# remove previous \$seqres.full before test/d' \
+		    -e '/^rm -f \$seqres.full/d' \
+		    -e 's|^# get standard environment, filters and checks|# Import common functions.|g' \
+		    -e '/^\. \.\/common\/rc/d' \
+		    -e '/^\. common\/rc/d' \
+		    -e 's|^seq=.*$|. ./common/preamble\n_begin_fstest '"$groups"'|g' \
+		    -i "$test"
+
+		# Replace the open-coded trap calls that register cleanup code
+		# with a call to _register_cleanup.
+		#
+		# For tests that registered empty-string cleanups or open-coded
+		# calls to remove $tmp files, remove the _register_cleanup
+		# calls entirely because the default _cleanup does that for us.
+		#
+		# For tests that now have a _register_cleanup call for the
+		# _cleanup function, remove the explicit call because
+		# _begin_fstest already registers that for us.
+		#
+		# For tests that override _cleanup, insert a comment noting
+		# that it is overriding the default, to match the ./new
+		# template.
+		sed -e 's|^trap "exit \\\$status" 0 1 2 3 15|_register_cleanup ""|g' \
+		    -e 's|^trap "\(.*\)[[:space:]]*; exit \\\$status" 0 1 2 3 15|_register_cleanup "\1"|g' \
+		    -e 's|^trap "\(.*\)[[:space:]]*; exit \\\$status" 1 2 3 15|_register_cleanup "\1"|g' \
+		    -e 's|^trap '"'"'\(.*\)[[:space:]]*; exit \$status'"'"' 0 1 2 3 15|_register_cleanup "\1"|g' \
+		    -e 's|^trap "\(.*\)[[:space:]]*; exit \\\$status" 0 1 2 3 7 15|_register_cleanup "\1" BUS|g' \
+		    -e 's|^_register_cleanup "[[:space:]]*\([^[:space:]]*\)[[:space:]]*"|_register_cleanup "\1"|g' \
+		    -e '/^_register_cleanup ""$/d' \
+		    -e '/^_register_cleanup "rm -f \$tmp.*"$/d' \
+		    -e '/^_register_cleanup "_cleanup"$/d' \
+		    -e 's|^_cleanup()|# Override the default cleanup function.\n_cleanup()|g' \
+		    -i "$test"
+
+		# If the test doesn't import any common functionality,
+		# get rid of the pointless comment.
+		if ! grep -q '^\. .*common' "$test"; then
+			sed -e '/^# Import common functions.$/d' -i "$test"
+		fi
+
+		# Replace the "status=1" lines that don't have the usual
+		# "failure is the default" message if there's no other code
+		# between _begin_fstest and status=1.
+		if grep -q '^status=1$' "$test"; then
+			awk '
+BEGIN {
+	saw_groupinfo = 0;
+}
+{
+	if ($0 ~ /^_begin_fstest/) {
+		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
+
+		# Get rid of _cleanup functions that match the standard one.
+		# Thanks to Eric Biggers for providing this.
+		sed -z -E \
+			-e 's/(#[^#\n]*\n)*_cleanup\(\)\n\{\n(\s+cd \/\n)?\s+rm -r?f "?\$tmp"?\.\*\n\}\n\n?//' \
+			-e 's/(#[^#\n]*\n)*_cleanup\(\)\n\{\n(\s+cd \/\n)?\s+rm -fr "?\$tmp"?\.\*\n\}\n\n?//' \
+			-i "$test"
+
+		# Collapse sequences of blank lines to a single blank line.
+		awk '
+BEGIN {
+	saw_blank = 0;
+}
+{
+	if ($0 ~ /^$/) {
+		if (saw_blank == 0) {
+			printf("\n");
+			saw_blank = 1;
+		}
+	} else {
+		printf("%s\n", $0);
+		saw_blank = 0;
+	}
+}
+' < "$test" > "$test.new"
+		cat "$test.new" > "$test"
+		rm -f "$test.new"
+	done
+}
+
+curr_dir="$PWD"
+for tdir in "$@"; do
+	cd "tests/$tdir"
+	obliterate_group_file
+	cd "$curr_dir"
+done


  parent reply	other threads:[~2021-06-14 20:59 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-14 20:58 [PATCHSET v2 00/13] fstests: move test group lists into test files Darrick J. Wong
2021-06-14 20:59 ` [PATCH 01/13] fstests: fix group check in new script Darrick J. Wong
2021-06-16  5:40   ` Christoph Hellwig
2021-06-14 20:59 ` [PATCH 02/13] misc: move exit status into trap handler Darrick J. Wong
2021-06-16  5:41   ` Christoph Hellwig
2021-06-14 20:59 ` [PATCH 03/13] fstests: refactor test boilerplate code Darrick J. Wong
2021-06-16  5:42   ` Christoph Hellwig
2021-06-16 20:47   ` Eric Biggers
2021-06-17  0:02     ` Darrick J. Wong
2021-06-14 20:59 ` Darrick J. Wong [this message]
2021-06-16  7:29   ` [PATCH 04/13] fstests: add tool migrate group membership data to test files Christoph Hellwig
2021-06-14 20:59 ` [PATCH 05/13] fstests: move test group info " Darrick J. Wong
2021-06-16 20:53   ` Eric Biggers
2021-06-14 20:59 ` [PATCH 06/13] fstests: clean up open-coded golden output Darrick J. Wong
2021-06-16  5:45   ` Christoph Hellwig
2021-06-17  0:06     ` Darrick J. Wong
2021-06-14 20:59 ` [PATCH 07/13] fstests: automatically generate group files Darrick J. Wong
2021-06-16  7:32   ` Christoph Hellwig
2021-06-17  0:13     ` Darrick J. Wong
2021-06-17  7:56       ` Christoph Hellwig
2021-06-17 17:15         ` Darrick J. Wong
2021-06-18 13:45           ` Christoph Hellwig
2021-06-18 15:32             ` Amir Goldstein
2021-06-18 15:56               ` Darrick J. Wong
2021-06-21  5:25                 ` Christoph Hellwig
2021-06-21  6:38                   ` Eryu Guan
2021-06-21 16:14                     ` Darrick J. Wong
2021-06-21  5:20               ` Christoph Hellwig
2021-06-14 20:59 ` [PATCH 08/13] fstests: convert nextid to use automatic group generation Darrick J. Wong
2021-06-16 20:54   ` Eric Biggers
2021-06-14 20:59 ` [PATCH 09/13] fstests: adapt the new test script to our new group tagging scheme Darrick J. Wong
2021-06-14 20:59 ` [PATCH 10/13] check: use generated group files Darrick J. Wong
2021-06-16 20:55   ` Eric Biggers
2021-06-14 20:59 ` [PATCH 11/13] fstests: remove " Darrick J. Wong
2021-06-16 20:56   ` Eric Biggers
2021-06-14 21:00 ` [PATCH 12/13] fstests: remove test group management code Darrick J. Wong
2021-06-16 20:58   ` Eric Biggers
2021-06-17  0:08     ` Darrick J. Wong
2021-06-14 21:00 ` [PATCH 13/13] misc: update documentation to reflect auto-generated group files Darrick J. Wong
2021-06-16 21:00   ` Eric Biggers
2021-06-17  0:11     ` Darrick J. Wong
  -- strict thread matches above, loose matches on Subject: below --
2021-06-21 23:10 [PATCHSET v3 00/13] fstests: move test group lists into test files Darrick J. Wong
2021-06-21 23:10 ` [PATCH 04/13] fstests: add tool migrate group membership data to " Darrick J. Wong
2021-06-08 17:19 [PATCHSET v1 00/13] fstests: move test group lists into " Darrick J. Wong
2021-06-08 17:19 ` [PATCH 04/13] fstests: add tool migrate group membership data to " Darrick J. Wong
2021-06-10  8:44   ` Chandan Babu R
2021-06-11 21:55   ` Allison Henderson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=162370436132.3800603.3564234435790687757.stgit@locust \
    --to=djwong@kernel.org \
    --cc=allison.henderson@oracle.com \
    --cc=amir73il@gmail.com \
    --cc=chandanrlinux@gmail.com \
    --cc=ebiggers@kernel.org \
    --cc=fstests@vger.kernel.org \
    --cc=guan@eryu.me \
    --cc=guaneryu@gmail.com \
    --cc=linux-xfs@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.