qemu-block
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-block] [PATCH 1/2] iotests: Do not suppress segfaults in bash


From: Jeff Cody
Subject: Re: [Qemu-block] [PATCH 1/2] iotests: Do not suppress segfaults in bash tests
Date: Wed, 2 Sep 2015 11:30:32 -0400
User-agent: Mutt/1.5.21 (2010-09-15)

On Wed, Sep 02, 2015 at 05:09:41PM +0200, Max Reitz wrote:
> On 01.09.2015 00:55, Jeff Cody wrote:
> > On Mon, Aug 31, 2015 at 09:05:12PM +0200, Max Reitz wrote:
> >> Currently, if a qemu/qemu-io/qemu-img/qemu-nbd invocation receives a
> >> segmentation fault, that message is invisible in most cases since the
> >> output is generally filtered and bash suppresses the segmentation fault
> >> notice for any but the last element of a pipe.
> >>
> >> Most of the time, the test will then fail anyway because of missing
> >> output, but not necessarily (as happened with test 82 recently).
> >>
> >> Fix this by making the corresponding environment variables point to
> >> wrapper functions which execute the respective command in a subshell.
> >>
> >> Signed-off-by: Max Reitz <address@hidden>
> >> ---
> >>  tests/qemu-iotests/039           | 19 ++++++-------------
> >>  tests/qemu-iotests/039.out       |  6 +++---
> >>  tests/qemu-iotests/061           |  6 ++++--
> >>  tests/qemu-iotests/061.out       |  2 ++
> >>  tests/qemu-iotests/check         |  8 ++++----
> >>  tests/qemu-iotests/common.config | 34 ++++++++++++++++++++++++++++++----
> >>  tests/qemu-iotests/common.rc     | 12 +++++++++++-
> >>  tests/qemu-iotests/iotests.py    |  6 +++---
> >>  8 files changed, 63 insertions(+), 30 deletions(-)
> >>

[snip]

> >>  
> >> -export QEMU="$QEMU_PROG $QEMU_OPTIONS"
> >> -export QEMU_IMG=$QEMU_IMG_PROG
> >> -export QEMU_IO="$QEMU_IO_PROG $QEMU_IO_OPTIONS"
> >> -export QEMU_NBD=$QEMU_NBD_PROG
> >> +export QEMU_CMD="$QEMU_PROG $QEMU_OPTIONS"
> >> +export QEMU_IMG_CMD=$QEMU_IMG_PROG
> >> +export QEMU_IO_CMD="$QEMU_IO_PROG $QEMU_IO_OPTIONS"
> >> +export QEMU_NBD_CMD=$QEMU_NBD_PROG
> >> +
> > 
> > Unfortunately, these exports (old and new) make it so that pathnames
> > with spaces won't work (in case someone hasn't had it beaten into them
> > that spaced pathnames is begging for trouble...).  But luckily, I
> > think your patch make it easier to fix this, since you have the
> > wrapper!
> > 
> > I think we want to drop the _OPTIONS in each of the exports, e.g.:
> > 
> > -export QEMU="$QEMU_PROG $QEMU_OPTIONS"
> > +export QEMU_CMD="$QEMU_PROG"
> > 
> > And then instead of this:
> > 
> >> +_qemu_wrapper()
> >> +{
> >> +    (exec $QEMU_CMD "$@")
> >> +}
> >> +
> > 
> > Use this form, instead:
> > 
> > +_qemu_wrapper()
> > +{
> > +    (exec "$QEMU_CMD" "$QEMU_OPTIONS" "$@")
> > +}
> > +
> 
> Yes, I tried not to break anything in that regard that wasn't already
> broken, but if we have the chance to fix something, then we (I) should
> go for it.
> 
> QEMU_CMD is used for the Python tests as the command line to be used for
> qemu invocation, so it cannot be modified like that. But what I can do
> is to drop QEMU.*_CMD and replace it by "$QEMU.*_PROG" "$QEMU.*_OPTIONS"
> everywhere, I guess. I'll have a look.
>

Good point.

I don't think it needs to be done in this patch series, as your
patches don't change this behavior.  It could be done in a follow-up
series, by you or someone else.

I'm happy to give my r-b as-is, and we can change it later.:

Reviewed-by: Jeff Cody <address@hidden>

> Thanks for reviewing!
> 
> Max

You're welcome :)

> 
> >> +_qemu_img_wrapper()
> >> +{
> >> +    (exec $QEMU_IMG_CMD "$@")
> >> +}
> >> +
> >> +_qemu_io_wrapper()
> >> +{
> >> +    (exec $QEMU_IO_CMD "$@")
> >> +}
> >> +
> >> +_qemu_nbd_wrapper()
> >> +{
> >> +    (exec $QEMU_NBD_CMD "$@")
> >> +}
> >> +
> > 
> > Repeat as appropriate, above.
> > 
> >> +export QEMU=_qemu_wrapper
> >> +export QEMU_IMG=_qemu_img_wrapper
> >> +export QEMU_IO=_qemu_io_wrapper
> >> +export QEMU_NBD=_qemu_nbd_wrapper
> >> +
> >>  default_machine=$($QEMU -machine \? | awk '/(default)/{print $1}')
> >>  default_alias_machine=$($QEMU -machine \? |\
> >>      awk -v var_default_machine="$default_machine"\)\
> >> diff --git a/tests/qemu-iotests/common.rc b/tests/qemu-iotests/common.rc
> >> index 22d3514..28e4bea 100644
> >> --- a/tests/qemu-iotests/common.rc
> >> +++ b/tests/qemu-iotests/common.rc
> >> @@ -439,7 +439,17 @@ _unsupported_imgopts()
> >>  #
> >>  _require_command()
> >>  {
> >> -    eval c=\$$1
> >> +    if [ "$1" = "QEMU" ]; then
> >> +        c=$QEMU_PROG
> >> +    elif [ "$1" = "QEMU_IMG" ]; then
> >> +        c=$QEMU_IMG_PROG
> >> +    elif [ "$1" = "QEMU_IO" ]; then
> >> +        c=$QEMU_IO_PROG
> >> +    elif [ "$1" = "QEMU_NBD" ]; then
> >> +        c=$QEMU_NBD_PROG
> >> +    else
> >> +        eval c=\$$1
> >> +    fi
> >>      [ -x "$c" ] || _notrun "$1 utility required, skipped this test"
> >>  }
> >>  
> >> diff --git a/tests/qemu-iotests/iotests.py b/tests/qemu-iotests/iotests.py
> >> index 5579253..927c74a 100644
> >> --- a/tests/qemu-iotests/iotests.py
> >> +++ b/tests/qemu-iotests/iotests.py
> >> @@ -33,9 +33,9 @@ __all__ = ['imgfmt', 'imgproto', 'test_dir' 'qemu_img', 
> >> 'qemu_io',
> >>  
> >>  # This will not work if arguments or path contain spaces but is necessary 
> >> if we
> >>  # want to support the override options that ./check supports.
> >> -qemu_img_args = os.environ.get('QEMU_IMG', 'qemu-img').strip().split(' ')
> >> -qemu_io_args = os.environ.get('QEMU_IO', 'qemu-io').strip().split(' ')
> >> -qemu_args = os.environ.get('QEMU', 'qemu').strip().split(' ')
> >> +qemu_img_args = os.environ.get('QEMU_IMG_CMD', 
> >> 'qemu-img').strip().split(' ')
> >> +qemu_io_args = os.environ.get('QEMU_IO_CMD', 'qemu-io').strip().split(' ')
> >> +qemu_args = os.environ.get('QEMU_CMD', 'qemu').strip().split(' ')
> >>  
> >>  imgfmt = os.environ.get('IMGFMT', 'raw')
> >>  imgproto = os.environ.get('IMGPROTO', 'file')
> >> -- 
> >> 2.5.0
> >>
> >>
> 
> 





reply via email to

[Prev in Thread] Current Thread [Next in Thread]