linux-xfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Darrick J. Wong" <darrick.wong@oracle.com>
To: eguan@redhat.com
Cc: linux-xfs@vger.kernel.org, fstests@vger.kernel.org
Subject: Re: [PATCH 5/9] common/fuzzy: move fuzzing helper functions here
Date: Tue, 10 Jan 2017 15:32:52 -0800	[thread overview]
Message-ID: <20170110233252.GH14033@birch.djwong.org> (raw)
In-Reply-To: <148357905253.10436.560781214557366417.stgit@birch.djwong.org>

On Wed, Jan 04, 2017 at 05:17:32PM -0800, Darrick J. Wong wrote:
> Move some fuzzing helper functions into a new common/fuzzy file.
> We'll add a lot more fuzzing helpers in subsequent patches.
> 
> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
> ---
>  common/fuzzy    |   83 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  common/populate |   35 -----------------------
>  tests/ext4/006  |    1 +
>  tests/xfs/083   |    1 +
>  4 files changed, 85 insertions(+), 35 deletions(-)
>  create mode 100644 common/fuzzy
> 
> 
> diff --git a/common/fuzzy b/common/fuzzy
> new file mode 100644
> index 0000000..1cc1d5e
> --- /dev/null
> +++ b/common/fuzzy
> @@ -0,0 +1,83 @@
> +##/bin/bash
> +
> +# Routines for fuzzing and scrubbing a filesystem.
> +#
> +#-----------------------------------------------------------------------
> +#  Copyright (c) 2017 Oracle.  All Rights Reserved.
> +#  This program is free software; you can redistribute it and/or modify
> +#  it under the terms of the GNU General Public License as published by
> +#  the Free Software Foundation; either version 2 of the License, or
> +#  (at your option) any later version.
> +#
> +#  This program is distributed in the hope that it will be useful,
> +#  but WITHOUT ANY WARRANTY; without even the implied warranty of
> +#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +#  GNU General Public License for more details.
> +#
> +#  You should have received a copy of the GNU General Public License
> +#  along with this program; if not, write to the Free Software
> +#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
> +#  USA
> +#
> +#  Contact information: Silicon Graphics, Inc., 1500 Crittenden Lane,
> +#  Mountain View, CA 94043, USA, or: http://www.sgi.com

SGI isn't on Crittenden Lane anymore -- the site has been taken over by some
flashy startup company, so this should go away.

--D

> +#-----------------------------------------------------------------------
> +
> +# Modify various files after a fuzzing operation
> +_scratch_fuzz_modify() {
> +	nr="$1"
> +
> +	test -z "${nr}" && nr=50000
> +	echo "+++ touch ${nr} files"
> +	blk_sz=$(stat -f -c '%s' ${SCRATCH_MNT})
> +	$XFS_IO_PROG -f -c "pwrite -S 0x63 0 ${blk_sz}" "/tmp/afile" > /dev/null
> +	date="$(date)"
> +	find "${SCRATCH_MNT}/" -type f 2> /dev/null | head -n "${nr}" | while read f; do
> +		setfattr -n "user.date" -v "${date}" "$f"
> +		cat "/tmp/afile" >> "$f"
> +		mv "$f" "$f.longer"
> +	done
> +	sync
> +	rm -rf "/tmp/afile"
> +
> +	echo "+++ create files"
> +	mkdir -p "${SCRATCH_MNT}/test.moo"
> +	$XFS_IO_PROG -f -c 'pwrite -S 0x80 0 65536' "${SCRATCH_MNT}/test.moo/urk"
> +	sync
> +
> +	echo "+++ remove files"
> +	rm -rf "${SCRATCH_MNT}/test.moo"
> +}
> +
> +# Try to access files after fuzzing
> +_scratch_fuzz_test() {
> +	echo "+++ ls -laR" >> $seqres.full
> +	ls -laR "${SCRATCH_MNT}/test.1/" >/dev/null 2>&1
> +
> +	echo "+++ cat files" >> $seqres.full
> +	(find "${SCRATCH_MNT}/test.1/" -type f -size -1048576k -print0 | xargs -0 cat) >/dev/null 2>&1
> +}
> +
> +# Do we have an online scrub program?
> +_require_scrub() {
> +	case "${FSTYP}" in
> +	"xfs"|"ext4")
> +		test -x $XFS_SCRUB_PROG || _notrun "xfs_scrub not found"
> +		;;
> +	*)
> +		_notrun "No online scrub program for ${FSTYP}."
> +		;;
> +	esac
> +}
> +
> +# Scrub the scratch filesystem metadata (online)
> +_scratch_scrub() {
> +	case "${FSTYP}" in
> +	"xfs"|"ext4"|"ext3"|"ext2")
> +		$XFS_SCRUB_PROG -d -T -v "$@" $SCRATCH_MNT
> +		;;
> +	*)
> +		_fail "No online scrub program for ${FSTYP}."
> +		;;
> +	esac
> +}
> diff --git a/common/populate b/common/populate
> index 5808bc9..f012173 100644
> --- a/common/populate
> +++ b/common/populate
> @@ -606,41 +606,6 @@ _scratch_populate() {
>  	esac
>  }
>  
> -# Modify various files after a fuzzing operation
> -_scratch_fuzz_modify() {
> -	nr="$1"
> -
> -	test -z "${nr}" && nr=50000
> -	echo "+++ touch ${nr} files"
> -	blk_sz=$(stat -f -c '%s' ${SCRATCH_MNT})
> -	$XFS_IO_PROG -f -c "pwrite -S 0x63 0 ${blk_sz}" "/tmp/afile" > /dev/null
> -	date="$(date)"
> -	find "${SCRATCH_MNT}/" -type f 2> /dev/null | head -n "${nr}" | while read f; do
> -		setfattr -n "user.date" -v "${date}" "$f"
> -		cat "/tmp/afile" >> "$f"
> -		mv "$f" "$f.longer"
> -	done
> -	sync
> -	rm -rf "/tmp/afile"
> -
> -	echo "+++ create files"
> -	mkdir -p "${SCRATCH_MNT}/test.moo"
> -	$XFS_IO_PROG -f -c 'pwrite -S 0x80 0 65536' "${SCRATCH_MNT}/test.moo/urk"
> -	sync
> -
> -	echo "+++ remove files"
> -	rm -rf "${SCRATCH_MNT}/test.moo"
> -}
> -
> -# Try to access files after fuzzing
> -_scratch_fuzz_test() {
> -	echo "+++ ls -laR" >> $seqres.full
> -	ls -laR "${SCRATCH_MNT}/test.1/" >/dev/null 2>&1
> -
> -	echo "+++ cat files" >> $seqres.full
> -	(find "${SCRATCH_MNT}/test.1/" -type f -size -1048576k -print0 | xargs -0 cat) >/dev/null 2>&1
> -}
> -
>  # Fill a file system by repeatedly creating files in the given folder
>  # starting with the given file size.  Files are reduced in size when
>  # they can no longer fit until no more files can be created.
> diff --git a/tests/ext4/006 b/tests/ext4/006
> index 9662f50..bb9b7e5 100755
> --- a/tests/ext4/006
> +++ b/tests/ext4/006
> @@ -43,6 +43,7 @@ _cleanup()
>  . ./common/filter
>  . ./common/attr
>  . ./common/populate
> +. ./common/fuzzy
>  
>  if [ ! -x "$(which e2fuzz)" ]; then
>  	_notrun "Couldn't find e2fuzz"
> diff --git a/tests/xfs/083 b/tests/xfs/083
> index 39bd75f..e2b5f82 100755
> --- a/tests/xfs/083
> +++ b/tests/xfs/083
> @@ -43,6 +43,7 @@ _cleanup()
>  . ./common/filter
>  . ./common/attr
>  . ./common/populate
> +. ./common/fuzzy
>  
>  # real QA test starts here
>  _supported_fs xfs
> 
> --
> To unsubscribe from this list: send the line "unsubscribe fstests" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

  reply	other threads:[~2017-01-10 23:33 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-01-05  1:17 [PATCH v4 0/9] xfstests: online scrub/repair support Darrick J. Wong
2017-01-05  1:17 ` [PATCH 1/9] populate: create all types of XFS metadata Darrick J. Wong
2017-01-05  1:17 ` [PATCH 2/9] populate: add _require_populate_commands to check for tools Darrick J. Wong
2017-01-05  1:17 ` [PATCH 3/9] populate: optionally fill the filesystem when populating fs Darrick J. Wong
2017-01-05  1:17 ` [PATCH 4/9] populate: fix some silly errors when modifying a fs while fuzzing Darrick J. Wong
2017-01-05  1:17 ` [PATCH 5/9] common/fuzzy: move fuzzing helper functions here Darrick J. Wong
2017-01-10 23:32   ` Darrick J. Wong [this message]
2017-01-05  1:17 ` [PATCH 6/9] populate: cache scratch metadata images Darrick J. Wong
2017-01-05  1:17 ` [PATCH 7/9] populate: discover XFS structure fields and fuzz verbs, and use them to fuzz fields Darrick J. Wong
2017-01-05  1:17 ` [PATCH 8/9] common/populate: create attrs in different namespaces Darrick J. Wong
2017-01-05  1:17 ` [PATCH 9/9] xfs: fuzz every field of every structure Darrick J. Wong
  -- strict thread matches above, loose matches on Subject: below --
2017-01-21  8:10 [PATCH v5 0/9] xfstests: online scrub/repair support Darrick J. Wong
2017-01-21  8:10 ` [PATCH 5/9] common/fuzzy: move fuzzing helper functions here Darrick J. Wong
2017-01-27  8:12   ` Eryu Guan
2017-01-27  9:24     ` Darrick J. Wong
2016-11-05  0:17 [PATCH v2 0/9] xfstests: online scrub/repair support Darrick J. Wong
2016-11-05  0:17 ` [PATCH 5/9] common/fuzzy: move fuzzing helper functions here Darrick J. Wong

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=20170110233252.GH14033@birch.djwong.org \
    --to=darrick.wong@oracle.com \
    --cc=eguan@redhat.com \
    --cc=fstests@vger.kernel.org \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).