qemu-iotests: Add -o and make v3 the default for qcow2

This adds an -o option to qemu-iotests, which is an option string that
is passed through to qemu-img create -o... This allows testing different
subformat with a command like './check -qcow2 -o compat=0.10'.

For qcow2, if no compat option is specified, compat=1.1 is the new
default.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
diff --git a/tests/qemu-iotests/check b/tests/qemu-iotests/check
index aae1378..432732c 100755
--- a/tests/qemu-iotests/check
+++ b/tests/qemu-iotests/check
@@ -41,9 +41,6 @@
     exit 1
 fi
 
-# we need common
-. ./common
-
 # we need common.rc
 if ! . ./common.rc
 then
@@ -51,6 +48,9 @@
     exit 1
 fi
 
+# we need common
+. ./common
+
 #if [ `id -u` -ne 0 ]
 #then
 #    echo "check: QA must be run as root"
diff --git a/tests/qemu-iotests/common b/tests/qemu-iotests/common
index c187f6c..eeb70cb 100644
--- a/tests/qemu-iotests/common
+++ b/tests/qemu-iotests/common
@@ -35,6 +35,7 @@
 verbose=false
 group=false
 xgroup=false
+imgopts=false
 showme=false
 sortme=false
 expunge=true
@@ -44,6 +45,7 @@
 
 export IMGFMT=raw
 export IMGPROTO=file
+export IMGOPTS=""
 export QEMU_IO_OPTIONS=""
 
 for r
@@ -103,6 +105,13 @@
 	mv $tmp.tmp $tmp.list
 	xgroup=false
 	continue
+
+    elif $imgopts
+    then
+        IMGOPTS="$r"
+        imgopts=false
+        continue
+
     fi
 
     xpand=true
@@ -130,6 +139,7 @@
     -nocache		use O_DIRECT on backing file
     -misalign		misalign memory allocations
     -n			show me, do not run tests
+    -o options          -o options to pass to qemu-img create/convert
     -T			output timestamps
     -r 			randomize test order
     
@@ -223,6 +233,10 @@
 	    showme=true
 	    xpand=false
 	    ;;
+        -o)
+            imgopts=true
+            xpand=false
+            ;;
         -r)	# randomize test order
 	    randomize=true
 	    xpand=false
@@ -299,6 +313,9 @@
 
 done
 
+# Set default options for qemu-img create -o if they were not specified
+_set_default_imgopts
+
 if [ -s $tmp.list ]
 then
     # found some valid test numbers ... this is good
diff --git a/tests/qemu-iotests/common.rc b/tests/qemu-iotests/common.rc
index 00ee754..4bc7420 100644
--- a/tests/qemu-iotests/common.rc
+++ b/tests/qemu-iotests/common.rc
@@ -53,19 +53,44 @@
     TEST_IMG=$IMGPROTO:$TEST_DIR/t.$IMGFMT
 fi
 
+_optstr_add()
+{
+    if [ -n "$1" ]; then
+        echo "$1,$2"
+    else
+        echo "$2"
+    fi
+}
+
+_set_default_imgopts()
+{
+    if [ "$IMGFMT" == "qcow2" ] && ! (echo "$IMGOPTS" | grep "compat=" > /dev/null); then
+        IMGOPTS=$(_optstr_add "$IMGOPTS" "compat=1.1")
+    fi
+}
+
 _make_test_img()
 {
     # extra qemu-img options can be added by tests
     # at least one argument (the image size) needs to be added
     local extra_img_options=""
     local image_size=$*
+    local optstr=""
+
+    if [ -n "$IMGOPTS" ]; then
+        optstr=$(_optstr_add "$optstr" "$IMGOPTS")
+    fi
 
     if [ "$1" = "-b" ]; then
         extra_img_options="$1 $2"
         image_size=$3
     fi
     if [ \( "$IMGFMT" = "qcow2" -o "$IMGFMT" = "qed" \) -a -n "$CLUSTER_SIZE" ]; then
-        extra_img_options="-o cluster_size=$CLUSTER_SIZE $extra_img_options"
+        optstr=$(_optstr_add "$optstr" "cluster_size=$CLUSTER_SIZE")
+    fi
+
+    if [ -n "$optstr" ]; then
+        extra_img_options="-o $optstr $extra_img_options"
     fi
 
     # XXX(hch): have global image options?
@@ -76,6 +101,7 @@
 	sed -e "s# encryption=off##g" | \
 	sed -e "s# cluster_size=[0-9]\\+##g" | \
 	sed -e "s# table_size=0##g" | \
+	sed -e "s# compat='[^']*'##g" | \
 	sed -e "s# compat6=off##g" | \
 	sed -e "s# static=off##g"
 }
@@ -268,7 +294,11 @@
 
 _full_imgfmt_details()
 {
-    echo "$IMGFMT"
+    if [ -n "$IMGOPTS" ]; then
+        echo "$IMGFMT ($IMGOPTS)"
+    else
+        echo "$IMGFMT"
+    fi
 }
 
 _full_imgproto_details()