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

login
register
mail settings
Submitter Nicholas Thomas
Date Nov. 2, 2012, 10:28 a.m.
Message ID <1351852086-26789-1-git-send-email-nick@bytemark.co.uk>
Download mbox | patch
Permalink /patch/196536/
State New
Headers show

Comments

Nicholas Thomas - Nov. 2, 2012, 10:28 a.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. We also remove the checks for existence of binaries from
common.config - they're duplicated in common, and we can make the
qemu-nbd check conditional on $IMGPROTO being "nbd" if we do it there.

Signed-off-by: Nick Thomas <nick@bytemark.co.uk>
---
 tests/qemu-iotests/common        |   14 +++++++++++---
 tests/qemu-iotests/common.config |   10 ++++++----
 tests/qemu-iotests/common.rc     |   23 ++++++++++++++++++++++-
 3 files changed, 39 insertions(+), 8 deletions(-)
Paolo Bonzini - Nov. 2, 2012, 12:41 p.m.
Il 02/11/2012 11:28, nick@bytemark.co.uk ha scritto:
> @@ -197,12 +198,14 @@ testlist options
>  	    IMGPROTO=rbd
>  	    xpand=false
>  	    ;;
> -
>  	-sheepdog)
>  	    IMGPROTO=sheepdog
>  	    xpand=false
>  	    ;;
> -
> +    -nbd)
> +        IMGPROTO=nbd
> +        xpand=false
> +        ;;
>  	-nocache)

Spacing problem?

Paolo
Nicholas Thomas - Nov. 2, 2012, 1:01 p.m.
On Fri, 2012-11-02 at 13:41 +0100, Paolo Bonzini wrote:
> Il 02/11/2012 11:28, nick@bytemark.co.uk ha scritto:
> > @@ -197,12 +198,14 @@ testlist options
> >  	    IMGPROTO=rbd
> >  	    xpand=false
> >  	    ;;
> > -
> >  	-sheepdog)
> >  	    IMGPROTO=sheepdog
> >  	    xpand=false
> >  	    ;;
> > -
> > +    -nbd)
> > +        IMGPROTO=nbd
> > +        xpand=false
> > +        ;;
> >  	-nocache)
> 
> Spacing problem?
> 
> Paolo

Tabs vs. spaces. Blarg. v3 emailed.
Kevin Wolf - Nov. 2, 2012, 1:19 p.m.
Am 02.11.2012 13:41, schrieb Paolo Bonzini:
> Il 02/11/2012 11:28, nick@bytemark.co.uk ha scritto:
>> @@ -197,12 +198,14 @@ testlist options
>>  	    IMGPROTO=rbd
>>  	    xpand=false
>>  	    ;;
>> -
>>  	-sheepdog)
>>  	    IMGPROTO=sheepdog
>>  	    xpand=false
>>  	    ;;
>> -
>> +    -nbd)
>> +        IMGPROTO=nbd
>> +        xpand=false
>> +        ;;
>>  	-nocache)
> 
> Spacing problem?

Yes, tabs in the original code. Not sure how to deal best with it...

Kevin

Patch

diff --git a/tests/qemu-iotests/common b/tests/qemu-iotests/common
index 1f6fdf5..195722e 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
@@ -350,9 +353,14 @@  fi
 
 [ "$QEMU" = "" ] && _fatal "qemu not found"
 [ "$QEMU_IMG" = "" ] && _fatal "qemu-img not found"
-[ "$QEMU_IO" = "" ] && _fatal "qemu-img not found"
+[ "$QEMU_IO" = "" ] && _fatal "qemu-io not found"
+
+if [ "$IMGPROTO" = "nbd" ] ; then
+    [ "$QEMU_NBD" = "" ] && _fatal "qemu-nbd not found"
+fi
 
 if $valgrind; then
     export REAL_QEMU_IO="$QEMU_IO_PROG"
     export QEMU_IO_PROG=valgrind_qemu_io
 fi
+
diff --git a/tests/qemu-iotests/common.config b/tests/qemu-iotests/common.config
index df082e7..08a3f10 100644
--- a/tests/qemu-iotests/common.config
+++ b/tests/qemu-iotests/common.config
@@ -90,21 +90,23 @@  export PS_ALL_FLAGS="-ef"
 if [ -z "$QEMU_PROG" ]; then
     export QEMU_PROG="`set_prog_path qemu`"
 fi
-[ "$QEMU_PROG" = "" ] && _fatal "qemu not found"
 
 if [ -z "$QEMU_IMG_PROG" ]; then
     export QEMU_IMG_PROG="`set_prog_path qemu-img`"
 fi
-[ "$QEMU_IMG_PROG" = "" ] && _fatal "qemu-img not found"
 
 if [ -z "$QEMU_IO_PROG" ]; then
     export QEMU_IO_PROG="`set_prog_path qemu-io`"
 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
 
 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