Patchwork tests: allow qemu-iotests to be run against nbd backend

login
register
mail settings
Submitter Nicholas Thomas
Date Oct. 31, 2012, 2:01 p.m.
Message ID <1351692068-4266-1-git-send-email-nick@bytemark.co.uk>
Download mbox | patch
Permalink /patch/195880/
State New
Headers show

Comments

Nicholas Thomas - Oct. 31, 2012, 2:01 p.m.
From: Nick Thomas <nick@bytemark.co.uk>

To do this, we start a qemu-nbd process at _make_test_img and kill
it in _cleanup_test_img. $TEST_IMG is changed to point at the TCP
server.

Signed-off-by: Nick Thomas <nick@bytemark.co.uk>
---
 tests/qemu-iotests/common        |    7 +++++--
 tests/qemu-iotests/common.config |    8 +++++++-
 tests/qemu-iotests/common.rc     |   23 ++++++++++++++++++++++-
 3 files changed, 34 insertions(+), 4 deletions(-)
Paolo Bonzini - Oct. 31, 2012, 2:33 p.m.
Il 31/10/2012 15:01, nick@bytemark.co.uk ha scritto:
> From: Nick Thomas <nick@bytemark.co.uk>
> 
> To do this, we start a qemu-nbd process at _make_test_img and kill
> it in _cleanup_test_img. $TEST_IMG is changed to point at the TCP
> server.
> 
> Signed-off-by: Nick Thomas <nick@bytemark.co.uk>
> ---
>  tests/qemu-iotests/common        |    7 +++++--
>  tests/qemu-iotests/common.config |    8 +++++++-
>  tests/qemu-iotests/common.rc     |   23 ++++++++++++++++++++++-
>  3 files changed, 34 insertions(+), 4 deletions(-)
> 
> diff --git a/tests/qemu-iotests/common b/tests/qemu-iotests/common
> index 1f6fdf5..09dfdf1 100644
> --- a/tests/qemu-iotests/common
> +++ b/tests/qemu-iotests/common
> @@ -136,6 +136,7 @@ check options
>      -vmdk               test vmdk
>      -rbd                test rbd
>      -sheepdog           test sheepdog
> +    -nbd                test nbd
>      -xdiff		graphical mode diff
>      -nocache		use O_DIRECT on backing file
>      -misalign		misalign memory allocations
> @@ -197,12 +198,14 @@ testlist options
>  	    IMGPROTO=rbd
>  	    xpand=false
>  	    ;;
> -
>  	-sheepdog)
>  	    IMGPROTO=sheepdog
>  	    xpand=false
>  	    ;;
> -
> +    -nbd)
> +        IMGPROTO=nbd
> +        xpand=false
> +        ;;
>  	-nocache)
>  	    QEMU_IO_OPTIONS="$QEMU_IO_OPTIONS --nocache"
>  	    xpand=false
> diff --git a/tests/qemu-iotests/common.config b/tests/qemu-iotests/common.config
> index df082e7..5383e4d 100644
> --- a/tests/qemu-iotests/common.config
> +++ b/tests/qemu-iotests/common.config
> @@ -102,9 +102,15 @@ if [ -z "$QEMU_IO_PROG" ]; then
>  fi
>  [ "$QEMU_IO_PROG" = "" ] && _fatal "qemu-io not found"
>  
> +if [ -z "$QEMU_NBD_PROG" ]; then
> +    export QEMU_NBD_PROG="`set_prog_path qemu-nbd`"
> +fi
> +[ "$QEMU_IO_PROG" = "" ] && _fatal "qemu-io not found"
> +
>  export QEMU=$QEMU_PROG
> -export QEMU_IMG=$QEMU_IMG_PROG 
> +export QEMU_IMG=$QEMU_IMG_PROG
>  export QEMU_IO="$QEMU_IO_PROG $QEMU_IO_OPTIONS"
> +export QEMU_NBD=$QEMU_NBD_PROG
>  
>  [ -f /etc/qemu-iotest.config ]       && . /etc/qemu-iotest.config
>  
> diff --git a/tests/qemu-iotests/common.rc b/tests/qemu-iotests/common.rc
> index 334534f..aef5f52 100644
> --- a/tests/qemu-iotests/common.rc
> +++ b/tests/qemu-iotests/common.rc
> @@ -49,6 +49,9 @@ umask 022
>  
>  if [ "$IMGPROTO" = "file" ]; then
>      TEST_IMG=$TEST_DIR/t.$IMGFMT
> +elif [ "$IMGPROTO" = "nbd" ]; then
> +    TEST_IMG_FILE=$TEST_DIR/t.$IMGFMT
> +    TEST_IMG="nbd:127.0.0.1:10810"
>  else
>      TEST_IMG=$IMGPROTO:$TEST_DIR/t.$IMGFMT
>  fi
> @@ -86,6 +89,13 @@ _make_test_img()
>      local extra_img_options=""
>      local image_size=$*
>      local optstr=""
> +    local img_name=""
> +
> +    if [ -n "$TEST_IMG_FILE" ]; then
> +        img_name=$TEST_IMG_FILE
> +    else
> +        img_name=$TEST_IMG
> +    fi
>  
>      if [ -n "$IMGOPTS" ]; then
>          optstr=$(_optstr_add "$optstr" "$IMGOPTS")
> @@ -104,7 +114,7 @@ _make_test_img()
>      fi
>  
>      # XXX(hch): have global image options?
> -    $QEMU_IMG create -f $IMGFMT $extra_img_options $TEST_IMG $image_size | \
> +    $QEMU_IMG create -f $IMGFMT $extra_img_options $img_name $image_size | \
>          sed -e "s#$IMGPROTO:$TEST_DIR#TEST_DIR#g" \
>              -e "s#$TEST_DIR#TEST_DIR#g" \
>              -e "s#$IMGFMT#IMGFMT#g" \
> @@ -115,12 +125,23 @@ _make_test_img()
>              -e "s# compat6=\\(on\\|off\\)##g" \
>              -e "s# static=\\(on\\|off\\)##g" \
>              -e "s# lazy_refcounts=\\(on\\|off\\)##g"
> +
> +    # Start an NBD server on the image file, which is what we'll be talking to
> +    if [ $IMGPROTO = "nbd" ]; then
> +        eval "$QEMU_NBD -v -t -b 127.0.0.1 -p 10810  $TEST_IMG_FILE &"
> +        QEMU_NBD_PID=$!
> +        sleep 1 # FIXME: qemu-nbd needs to be listening before we continue
> +    fi
>  }
>  
>  _cleanup_test_img()
>  {
>      case "$IMGPROTO" in
>  
> +        nbd)
> +            kill $QEMU_NBD_PID
> +            rm -f $TEST_IMG_FILE
> +            ;;
>          file)
>              rm -f $TEST_DIR/t.$IMGFMT
>              rm -f $TEST_DIR/t.$IMGFMT.orig
> 

Acked-by: Paolo Bonzini <pbonzini@redhat.com>

Paolo
Kevin Wolf - Oct. 31, 2012, 4:44 p.m.
Am 31.10.2012 15:33, schrieb Paolo Bonzini:
> Il 31/10/2012 15:01, nick@bytemark.co.uk ha scritto:
>> From: Nick Thomas <nick@bytemark.co.uk>
>>
>> To do this, we start a qemu-nbd process at _make_test_img and kill
>> it in _cleanup_test_img. $TEST_IMG is changed to point at the TCP
>> server.
>>
>> Signed-off-by: Nick Thomas <nick@bytemark.co.uk>
>> ---
>>  tests/qemu-iotests/common        |    7 +++++--
>>  tests/qemu-iotests/common.config |    8 +++++++-
>>  tests/qemu-iotests/common.rc     |   23 ++++++++++++++++++++++-
>>  3 files changed, 34 insertions(+), 4 deletions(-)
>>
>> diff --git a/tests/qemu-iotests/common b/tests/qemu-iotests/common
>> index 1f6fdf5..09dfdf1 100644
>> --- a/tests/qemu-iotests/common
>> +++ b/tests/qemu-iotests/common
>> @@ -136,6 +136,7 @@ check options
>>      -vmdk               test vmdk
>>      -rbd                test rbd
>>      -sheepdog           test sheepdog
>> +    -nbd                test nbd
>>      -xdiff		graphical mode diff
>>      -nocache		use O_DIRECT on backing file
>>      -misalign		misalign memory allocations
>> @@ -197,12 +198,14 @@ testlist options
>>  	    IMGPROTO=rbd
>>  	    xpand=false
>>  	    ;;
>> -
>>  	-sheepdog)
>>  	    IMGPROTO=sheepdog
>>  	    xpand=false
>>  	    ;;
>> -
>> +    -nbd)
>> +        IMGPROTO=nbd
>> +        xpand=false
>> +        ;;
>>  	-nocache)
>>  	    QEMU_IO_OPTIONS="$QEMU_IO_OPTIONS --nocache"
>>  	    xpand=false
>> diff --git a/tests/qemu-iotests/common.config b/tests/qemu-iotests/common.config
>> index df082e7..5383e4d 100644
>> --- a/tests/qemu-iotests/common.config
>> +++ b/tests/qemu-iotests/common.config
>> @@ -102,9 +102,15 @@ if [ -z "$QEMU_IO_PROG" ]; then
>>  fi
>>  [ "$QEMU_IO_PROG" = "" ] && _fatal "qemu-io not found"
>>  
>> +if [ -z "$QEMU_NBD_PROG" ]; then
>> +    export QEMU_NBD_PROG="`set_prog_path qemu-nbd`"
>> +fi
>> +[ "$QEMU_IO_PROG" = "" ] && _fatal "qemu-io not found"

I think you intended to check $QEMU_NBD_PROG.

It would be nice to require it only if we're really using NBD, is this
already known at this place?

Kevin
Nicholas Thomas - Nov. 1, 2012, 11:30 a.m.
On Wed, 2012-10-31 at 17:44 +0100, Kevin Wolf wrote:
> Am 31.10.2012 15:33, schrieb Paolo Bonzini:
> > Il 31/10/2012 15:01, nick@bytemark.co.uk ha scritto:
> >> From: Nick Thomas <nick@bytemark.co.uk>
> >>
> >> To do this, we start a qemu-nbd process at _make_test_img and kill
> >> it in _cleanup_test_img. $TEST_IMG is changed to point at the TCP
> >> server.
> >>
> >> Signed-off-by: Nick Thomas <nick@bytemark.co.uk>
> >> ---
> >>  tests/qemu-iotests/common        |    7 +++++--
> >>  tests/qemu-iotests/common.config |    8 +++++++-
> >>  tests/qemu-iotests/common.rc     |   23 ++++++++++++++++++++++-
> >>  3 files changed, 34 insertions(+), 4 deletions(-)
> >>
> >> diff --git a/tests/qemu-iotests/common b/tests/qemu-iotests/common
> >> index 1f6fdf5..09dfdf1 100644
> >> --- a/tests/qemu-iotests/common
> >> +++ b/tests/qemu-iotests/common
> >> @@ -136,6 +136,7 @@ check options
> >>      -vmdk               test vmdk
> >>      -rbd                test rbd
> >>      -sheepdog           test sheepdog
> >> +    -nbd                test nbd
> >>      -xdiff		graphical mode diff
> >>      -nocache		use O_DIRECT on backing file
> >>      -misalign		misalign memory allocations
> >> @@ -197,12 +198,14 @@ testlist options
> >>  	    IMGPROTO=rbd
> >>  	    xpand=false
> >>  	    ;;
> >> -
> >>  	-sheepdog)
> >>  	    IMGPROTO=sheepdog
> >>  	    xpand=false
> >>  	    ;;
> >> -
> >> +    -nbd)
> >> +        IMGPROTO=nbd
> >> +        xpand=false
> >> +        ;;
> >>  	-nocache)
> >>  	    QEMU_IO_OPTIONS="$QEMU_IO_OPTIONS --nocache"
> >>  	    xpand=false
> >> diff --git a/tests/qemu-iotests/common.config b/tests/qemu-iotests/common.config
> >> index df082e7..5383e4d 100644
> >> --- a/tests/qemu-iotests/common.config
> >> +++ b/tests/qemu-iotests/common.config
> >> @@ -102,9 +102,15 @@ if [ -z "$QEMU_IO_PROG" ]; then
> >>  fi
> >>  [ "$QEMU_IO_PROG" = "" ] && _fatal "qemu-io not found"
> >>  
> >> +if [ -z "$QEMU_NBD_PROG" ]; then
> >> +    export QEMU_NBD_PROG="`set_prog_path qemu-nbd`"
> >> +fi
> >> +[ "$QEMU_IO_PROG" = "" ] && _fatal "qemu-io not found"
> 
> I think you intended to check $QEMU_NBD_PROG.

Good catch, thanks.

> It would be nice to require it only if we're really using NBD, is this
> already known at this place?

$IMGPROTO is how we'd discriminate, and that's set in
qemu-iotests/common, which is sourced after qemu-iotests/common.config,
at least by qemu-iotests/check. 

There's actually a similar set of tests in common (where we *do* have
$IMGPROTO), so maybe the ones in common.config are unnecessary, and can
be removed?

/Nick
Kevin Wolf - Nov. 2, 2012, 9:10 a.m.
Am 01.11.2012 12:30, schrieb Nicholas Thomas:
> On Wed, 2012-10-31 at 17:44 +0100, Kevin Wolf wrote:
>> Am 31.10.2012 15:33, schrieb Paolo Bonzini:
>>> Il 31/10/2012 15:01, nick@bytemark.co.uk ha scritto:
>>>> From: Nick Thomas <nick@bytemark.co.uk>
>>>>
>>>> To do this, we start a qemu-nbd process at _make_test_img and kill
>>>> it in _cleanup_test_img. $TEST_IMG is changed to point at the TCP
>>>> server.
>>>>
>>>> Signed-off-by: Nick Thomas <nick@bytemark.co.uk>
>>>> ---
>>>>  tests/qemu-iotests/common        |    7 +++++--
>>>>  tests/qemu-iotests/common.config |    8 +++++++-
>>>>  tests/qemu-iotests/common.rc     |   23 ++++++++++++++++++++++-
>>>>  3 files changed, 34 insertions(+), 4 deletions(-)
>>>>
>>>> diff --git a/tests/qemu-iotests/common b/tests/qemu-iotests/common
>>>> index 1f6fdf5..09dfdf1 100644
>>>> --- a/tests/qemu-iotests/common
>>>> +++ b/tests/qemu-iotests/common
>>>> @@ -136,6 +136,7 @@ check options
>>>>      -vmdk               test vmdk
>>>>      -rbd                test rbd
>>>>      -sheepdog           test sheepdog
>>>> +    -nbd                test nbd
>>>>      -xdiff		graphical mode diff
>>>>      -nocache		use O_DIRECT on backing file
>>>>      -misalign		misalign memory allocations
>>>> @@ -197,12 +198,14 @@ testlist options
>>>>  	    IMGPROTO=rbd
>>>>  	    xpand=false
>>>>  	    ;;
>>>> -
>>>>  	-sheepdog)
>>>>  	    IMGPROTO=sheepdog
>>>>  	    xpand=false
>>>>  	    ;;
>>>> -
>>>> +    -nbd)
>>>> +        IMGPROTO=nbd
>>>> +        xpand=false
>>>> +        ;;
>>>>  	-nocache)
>>>>  	    QEMU_IO_OPTIONS="$QEMU_IO_OPTIONS --nocache"
>>>>  	    xpand=false
>>>> diff --git a/tests/qemu-iotests/common.config b/tests/qemu-iotests/common.config
>>>> index df082e7..5383e4d 100644
>>>> --- a/tests/qemu-iotests/common.config
>>>> +++ b/tests/qemu-iotests/common.config
>>>> @@ -102,9 +102,15 @@ if [ -z "$QEMU_IO_PROG" ]; then
>>>>  fi
>>>>  [ "$QEMU_IO_PROG" = "" ] && _fatal "qemu-io not found"
>>>>  
>>>> +if [ -z "$QEMU_NBD_PROG" ]; then
>>>> +    export QEMU_NBD_PROG="`set_prog_path qemu-nbd`"
>>>> +fi
>>>> +[ "$QEMU_IO_PROG" = "" ] && _fatal "qemu-io not found"
>>
>> I think you intended to check $QEMU_NBD_PROG.
> 
> Good catch, thanks.
> 
>> It would be nice to require it only if we're really using NBD, is this
>> already known at this place?
> 
> $IMGPROTO is how we'd discriminate, and that's set in
> qemu-iotests/common, which is sourced after qemu-iotests/common.config,
> at least by qemu-iotests/check. 
> 
> There's actually a similar set of tests in common (where we *do* have
> $IMGPROTO), so maybe the ones in common.config are unnecessary, and can
> be removed?

Hm, yes, I think so.

And when you touch common to add a qemu-nbd check, you can fix the
message for qemu-io, too:

[ "$QEMU_IO" = "" ] && _fatal "qemu-img not found"

Kevin

Patch

diff --git a/tests/qemu-iotests/common b/tests/qemu-iotests/common
index 1f6fdf5..09dfdf1 100644
--- a/tests/qemu-iotests/common
+++ b/tests/qemu-iotests/common
@@ -136,6 +136,7 @@  check options
     -vmdk               test vmdk
     -rbd                test rbd
     -sheepdog           test sheepdog
+    -nbd                test nbd
     -xdiff		graphical mode diff
     -nocache		use O_DIRECT on backing file
     -misalign		misalign memory allocations
@@ -197,12 +198,14 @@  testlist options
 	    IMGPROTO=rbd
 	    xpand=false
 	    ;;
-
 	-sheepdog)
 	    IMGPROTO=sheepdog
 	    xpand=false
 	    ;;
-
+    -nbd)
+        IMGPROTO=nbd
+        xpand=false
+        ;;
 	-nocache)
 	    QEMU_IO_OPTIONS="$QEMU_IO_OPTIONS --nocache"
 	    xpand=false
diff --git a/tests/qemu-iotests/common.config b/tests/qemu-iotests/common.config
index df082e7..5383e4d 100644
--- a/tests/qemu-iotests/common.config
+++ b/tests/qemu-iotests/common.config
@@ -102,9 +102,15 @@  if [ -z "$QEMU_IO_PROG" ]; then
 fi
 [ "$QEMU_IO_PROG" = "" ] && _fatal "qemu-io not found"
 
+if [ -z "$QEMU_NBD_PROG" ]; then
+    export QEMU_NBD_PROG="`set_prog_path qemu-nbd`"
+fi
+[ "$QEMU_IO_PROG" = "" ] && _fatal "qemu-io not found"
+
 export QEMU=$QEMU_PROG
-export QEMU_IMG=$QEMU_IMG_PROG 
+export QEMU_IMG=$QEMU_IMG_PROG
 export QEMU_IO="$QEMU_IO_PROG $QEMU_IO_OPTIONS"
+export QEMU_NBD=$QEMU_NBD_PROG
 
 [ -f /etc/qemu-iotest.config ]       && . /etc/qemu-iotest.config
 
diff --git a/tests/qemu-iotests/common.rc b/tests/qemu-iotests/common.rc
index 334534f..aef5f52 100644
--- a/tests/qemu-iotests/common.rc
+++ b/tests/qemu-iotests/common.rc
@@ -49,6 +49,9 @@  umask 022
 
 if [ "$IMGPROTO" = "file" ]; then
     TEST_IMG=$TEST_DIR/t.$IMGFMT
+elif [ "$IMGPROTO" = "nbd" ]; then
+    TEST_IMG_FILE=$TEST_DIR/t.$IMGFMT
+    TEST_IMG="nbd:127.0.0.1:10810"
 else
     TEST_IMG=$IMGPROTO:$TEST_DIR/t.$IMGFMT
 fi
@@ -86,6 +89,13 @@  _make_test_img()
     local extra_img_options=""
     local image_size=$*
     local optstr=""
+    local img_name=""
+
+    if [ -n "$TEST_IMG_FILE" ]; then
+        img_name=$TEST_IMG_FILE
+    else
+        img_name=$TEST_IMG
+    fi
 
     if [ -n "$IMGOPTS" ]; then
         optstr=$(_optstr_add "$optstr" "$IMGOPTS")
@@ -104,7 +114,7 @@  _make_test_img()
     fi
 
     # XXX(hch): have global image options?
-    $QEMU_IMG create -f $IMGFMT $extra_img_options $TEST_IMG $image_size | \
+    $QEMU_IMG create -f $IMGFMT $extra_img_options $img_name $image_size | \
         sed -e "s#$IMGPROTO:$TEST_DIR#TEST_DIR#g" \
             -e "s#$TEST_DIR#TEST_DIR#g" \
             -e "s#$IMGFMT#IMGFMT#g" \
@@ -115,12 +125,23 @@  _make_test_img()
             -e "s# compat6=\\(on\\|off\\)##g" \
             -e "s# static=\\(on\\|off\\)##g" \
             -e "s# lazy_refcounts=\\(on\\|off\\)##g"
+
+    # Start an NBD server on the image file, which is what we'll be talking to
+    if [ $IMGPROTO = "nbd" ]; then
+        eval "$QEMU_NBD -v -t -b 127.0.0.1 -p 10810  $TEST_IMG_FILE &"
+        QEMU_NBD_PID=$!
+        sleep 1 # FIXME: qemu-nbd needs to be listening before we continue
+    fi
 }
 
 _cleanup_test_img()
 {
     case "$IMGPROTO" in
 
+        nbd)
+            kill $QEMU_NBD_PID
+            rm -f $TEST_IMG_FILE
+            ;;
         file)
             rm -f $TEST_DIR/t.$IMGFMT
             rm -f $TEST_DIR/t.$IMGFMT.orig