diff mbox series

check: force hostname to be unique

Message ID 20190111215420.9676-1-mcgrof@kernel.org (mailing list archive)
State New, archived
Headers show
Series check: force hostname to be unique | expand

Commit Message

Luis Chamberlain Jan. 11, 2019, 9:54 p.m. UTC
If you use a hostname which is part of the output of
standard tools you end up with failures with fstests
due to differences in output against the golden output.

The failures are false positives due to the hostname.
For instance if you hostname is 'xfs' _dump_filter_main()
will substitute the initiial 'xfs' with HOSTNAME as part
of your logs, and will fail the output will fail against
the golden output on say all xfsdump / xfsrestores tests.

The hostname must be a unique string, not used as part
of the output from any tool used when capturing output.

Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---

We could be more pedantic about uniqueness, but this should suffice at
last of most issues.

 README |  2 ++
 check  | 36 ++++++++++++++++++++++++++++++++++++
 2 files changed, 38 insertions(+)

Comments

Eryu Guan Jan. 16, 2019, 8:12 a.m. UTC | #1
On Fri, Jan 11, 2019 at 01:54:20PM -0800, Luis Chamberlain wrote:
> If you use a hostname which is part of the output of
> standard tools you end up with failures with fstests
> due to differences in output against the golden output.
> 
> The failures are false positives due to the hostname.
> For instance if you hostname is 'xfs' _dump_filter_main()
> will substitute the initiial 'xfs' with HOSTNAME as part
> of your logs, and will fail the output will fail against
> the golden output on say all xfsdump / xfsrestores tests.
> 
> The hostname must be a unique string, not used as part
> of the output from any tool used when capturing output.
> 
> Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>

IMHO, a better fix would be improving the regexp in _dump_filter_main to
match hostname more precisely. I did the following update and it seemed
to work fine, I tested with '-g dump' and all tests passed (some tests
_notrun due to missing tape device).

--- a/common/dump
+++ b/common/dump
@@ -826,7 +826,8 @@ _dump_filter_main()
       -e "s#$__XFSDUMP_PROG#xfsdump#"                  \
       -e "s#$XFSRESTORE_PROG#xfsrestore#"              \
       -e "s#$XFSINVUTIL_PROG#xfsinvutil#"              \
-      -e "s/`hostname`/HOSTNAME/"                      \
+      -e "s/`hostname`:/HOSTNAME:/"                    \
+      -e "s/: `hostname`/: HOSTNAME/"                  \
       -e "s#$SCRATCH_DEV#SCRATCH_DEV#"                 \
       -e "s#$SCRATCH_RAWDEV#SCRATCH_DEV#"              \
       -e "s#$dumptape#TAPE_DEV#"                       \

It's based on the fact that there're basically two patterns that contain
'HOSTNAME':

xfsrestore: hostname: HOSTNAME
xfsdump: level 0 dump of HOSTNAME:SCRATCH_MNT

Thanks,
Eryu
Luis Chamberlain Jan. 24, 2019, 4:45 p.m. UTC | #2
On Wed, Jan 16, 2019 at 04:12:12PM +0800, Eryu Guan wrote:
> On Fri, Jan 11, 2019 at 01:54:20PM -0800, Luis Chamberlain wrote:
> > If you use a hostname which is part of the output of
> > standard tools you end up with failures with fstests
> > due to differences in output against the golden output.
> > 
> > The failures are false positives due to the hostname.
> > For instance if you hostname is 'xfs' _dump_filter_main()
> > will substitute the initiial 'xfs' with HOSTNAME as part
> > of your logs, and will fail the output will fail against
> > the golden output on say all xfsdump / xfsrestores tests.
> > 
> > The hostname must be a unique string, not used as part
> > of the output from any tool used when capturing output.
> > 
> > Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
> 
> IMHO, a better fix would be improving the regexp in _dump_filter_main to
> match hostname more precisely. I did the following update and it seemed
> to work fine, I tested with '-g dump' and all tests passed (some tests
> _notrun due to missing tape device).
> 
> --- a/common/dump
> +++ b/common/dump
> @@ -826,7 +826,8 @@ _dump_filter_main()
>        -e "s#$__XFSDUMP_PROG#xfsdump#"                  \
>        -e "s#$XFSRESTORE_PROG#xfsrestore#"              \
>        -e "s#$XFSINVUTIL_PROG#xfsinvutil#"              \
> -      -e "s/`hostname`/HOSTNAME/"                      \
> +      -e "s/`hostname`:/HOSTNAME:/"                    \
> +      -e "s/: `hostname`/: HOSTNAME/"                  \
>        -e "s#$SCRATCH_DEV#SCRATCH_DEV#"                 \
>        -e "s#$SCRATCH_RAWDEV#SCRATCH_DEV#"              \
>        -e "s#$dumptape#TAPE_DEV#"                       \
> 
> It's based on the fact that there're basically two patterns that contain
> 'HOSTNAME':
> 
> xfsrestore: hostname: HOSTNAME
> xfsdump: level 0 dump of HOSTNAME:SCRATCH_MNT

Works for me but this is still pretty fragile, and it does not cover
the what other filesystems use as best-practices for issuign a hostname
either. Even if we consider xfs: are we *certain* that the above regexp
covers all output issued by xfs utils when hostname is used? We're
talking about a generic rule of thumb here.

So I'd say we do both for now. Just my 0.01 CRC.

  Luis
diff mbox series

Patch

diff --git a/README b/README
index 73f057f3..7128da67 100644
--- a/README
+++ b/README
@@ -22,6 +22,8 @@  _______________________
 - create fsgqa test user ("sudo useradd fsgqa")
 - create fsgqa group ("sudo groupadd fsgqa")
 - create 123456-fsgqa test user ("sudo useradd 123456-fsgqa")
+- assign a unique hostname to the test system. It must not clash with
+  any word used on output by standard tools or tools for your filesystem.
 
 ______________________
 USING THE FSQA SUITE
diff --git a/check b/check
index 77a06b00..3a0bb026 100755
--- a/check
+++ b/check
@@ -251,6 +251,40 @@  _prepare_test_list()
 	fi
 }
 
+_invalid_hostname()
+{
+	host_check=`hostname`
+
+	case $host_check in
+	xfs)
+		return 1;
+	;;
+	btrfs)
+		return 1;
+	;;
+	ext4)
+		return 1;
+	;;
+	ext3)
+		return 1;
+	;;
+	ext2)
+		return 1;
+	;;
+	esac
+
+	return 0
+}
+
+_check_unique_hostname()
+{
+	_invalid_hostname
+	if [ $? -ne -0 ]; then
+		echo "Hostname `hostname` is not unique, make a unique hostname to avoid output log clashes with tools"
+		exit 1
+	fi
+}
+
 # Process command arguments first.
 while [ $# -gt 0 ]; do
 	case "$1" in
@@ -371,6 +405,8 @@  then
     exit 1
 fi
 
+_check_unique_hostname
+
 _wipe_counters()
 {
 	n_try="0"