diff mbox

[v3,5/7] iotests: Use $PYTHON for Python scripts

Message ID 1400794231-27403-6-git-send-email-mreitz@redhat.com
State New
Headers show

Commit Message

Max Reitz May 22, 2014, 9:30 p.m. UTC
Instead of invoking Python scripts directly via ./, use $PYTHON to
obtain the correct Python interpreter command.

Signed-off-by: Max Reitz <mreitz@redhat.com>
---
 tests/qemu-iotests/031   |  8 ++++----
 tests/qemu-iotests/036   |  6 +++---
 tests/qemu-iotests/039   | 18 +++++++++---------
 tests/qemu-iotests/054   |  2 +-
 tests/qemu-iotests/060   | 20 ++++++++++----------
 tests/qemu-iotests/061   | 24 ++++++++++++------------
 tests/qemu-iotests/083   |  2 +-
 tests/qemu-iotests/check |  8 +++++++-
 8 files changed, 47 insertions(+), 41 deletions(-)

Comments

Fam Zheng May 23, 2014, 3:58 a.m. UTC | #1
On Thu, 05/22 23:30, Max Reitz wrote:
> Instead of invoking Python scripts directly via ./, use $PYTHON to
> obtain the correct Python interpreter command.
> 
> Signed-off-by: Max Reitz <mreitz@redhat.com>
> ---
>  tests/qemu-iotests/031   |  8 ++++----
>  tests/qemu-iotests/036   |  6 +++---
>  tests/qemu-iotests/039   | 18 +++++++++---------
>  tests/qemu-iotests/054   |  2 +-
>  tests/qemu-iotests/060   | 20 ++++++++++----------
>  tests/qemu-iotests/061   | 24 ++++++++++++------------
>  tests/qemu-iotests/083   |  2 +-
>  tests/qemu-iotests/check |  8 +++++++-
>  8 files changed, 47 insertions(+), 41 deletions(-)
> 
> diff --git a/tests/qemu-iotests/031 b/tests/qemu-iotests/031
> index 1d920ea..2a77ba8 100755
> --- a/tests/qemu-iotests/031
> +++ b/tests/qemu-iotests/031
> @@ -56,22 +56,22 @@ for IMGOPTS in "compat=0.10" "compat=1.1"; do
>      echo === Create image with unknown header extension ===
>      echo
>      _make_test_img 64M
> -    ./qcow2.py "$TEST_IMG" add-header-ext 0x12345678 "This is a test header extension"
> -    ./qcow2.py "$TEST_IMG" dump-header
> +    $PYTHON qcow2.py "$TEST_IMG" add-header-ext 0x12345678 "This is a test header extension"
> +    $PYTHON qcow2.py "$TEST_IMG" dump-header
>      _check_test_img
>  
>      echo
>      echo === Rewrite header with no backing file ===
>      echo
>      $QEMU_IMG rebase -u -b "" "$TEST_IMG"
> -    ./qcow2.py "$TEST_IMG" dump-header
> +    $PYTHON qcow2.py "$TEST_IMG" dump-header
>      _check_test_img
>  
>      echo
>      echo === Add a backing file and format ===
>      echo
>      $QEMU_IMG rebase -u -b "/some/backing/file/path" -F host_device "$TEST_IMG"
> -    ./qcow2.py "$TEST_IMG" dump-header
> +    $PYTHON qcow2.py "$TEST_IMG" dump-header
>  done
>  
>  # success, all done
> diff --git a/tests/qemu-iotests/036 b/tests/qemu-iotests/036
> index 03b6aa9..a773653 100755
> --- a/tests/qemu-iotests/036
> +++ b/tests/qemu-iotests/036
> @@ -53,15 +53,15 @@ IMGOPTS="compat=1.1"
>  echo === Create image with unknown autoclear feature bit ===
>  echo
>  _make_test_img 64M
> -./qcow2.py "$TEST_IMG" set-feature-bit autoclear 63
> -./qcow2.py "$TEST_IMG" dump-header
> +$PYTHON qcow2.py "$TEST_IMG" set-feature-bit autoclear 63
> +$PYTHON qcow2.py "$TEST_IMG" dump-header
>  
>  echo
>  echo === Repair image ===
>  echo
>  _check_test_img -r all
>  
> -./qcow2.py "$TEST_IMG" dump-header
> +$PYTHON qcow2.py "$TEST_IMG" dump-header
>  
>  # success, all done
>  echo "*** done"
> diff --git a/tests/qemu-iotests/039 b/tests/qemu-iotests/039
> index 27fe4bd..84c9167 100755
> --- a/tests/qemu-iotests/039
> +++ b/tests/qemu-iotests/039
> @@ -63,7 +63,7 @@ _make_test_img $size
>  $QEMU_IO -c "write -P 0x5a 0 512" "$TEST_IMG" | _filter_qemu_io
>  
>  # The dirty bit must not be set
> -./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
> +$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>  _check_test_img
>  
>  echo
> @@ -75,7 +75,7 @@ _make_test_img $size
>  _no_dump_exec $QEMU_IO -c "write -P 0x5a 0 512" -c "abort" "$TEST_IMG" 2>&1 | _filter_qemu_io
>  
>  # The dirty bit must be set
> -./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
> +$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>  _check_test_img
>  
>  echo
> @@ -84,7 +84,7 @@ echo "== Read-only access must still work =="
>  $QEMU_IO -r -c "read -P 0x5a 0 512" "$TEST_IMG" | _filter_qemu_io
>  
>  # The dirty bit must be set
> -./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
> +$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>  
>  echo
>  echo "== Repairing the image file must succeed =="
> @@ -92,7 +92,7 @@ echo "== Repairing the image file must succeed =="
>  _check_test_img -r all
>  
>  # The dirty bit must not be set
> -./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
> +$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>  
>  echo
>  echo "== Data should still be accessible after repair =="
> @@ -108,12 +108,12 @@ _make_test_img $size
>  _no_dump_exec $QEMU_IO -c "write -P 0x5a 0 512" -c "abort" "$TEST_IMG" 2>&1 | _filter_qemu_io
>  
>  # The dirty bit must be set
> -./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
> +$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>  
>  $QEMU_IO -c "write 0 512" "$TEST_IMG" | _filter_qemu_io
>  
>  # The dirty bit must not be set
> -./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
> +$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>  
>  echo
>  echo "== Creating an image file with lazy_refcounts=off =="
> @@ -124,7 +124,7 @@ _make_test_img $size
>  _no_dump_exec $QEMU_IO -c "write -P 0x5a 0 512" -c "abort" "$TEST_IMG" 2>&1 | _filter_qemu_io
>  
>  # The dirty bit must not be set since lazy_refcounts=off
> -./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
> +$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>  _check_test_img
>  
>  echo
> @@ -140,8 +140,8 @@ $QEMU_IO -c "write 0 512" "$TEST_IMG" | _filter_qemu_io
>  $QEMU_IMG commit "$TEST_IMG"
>  
>  # The dirty bit must not be set
> -./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
> -./qcow2.py "$TEST_IMG".base dump-header | grep incompatible_features
> +$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
> +$PYTHON qcow2.py "$TEST_IMG".base dump-header | grep incompatible_features
>  
>  _check_test_img
>  TEST_IMG="$TEST_IMG".base _check_test_img
> diff --git a/tests/qemu-iotests/054 b/tests/qemu-iotests/054
> index c8b7082..bd94153 100755
> --- a/tests/qemu-iotests/054
> +++ b/tests/qemu-iotests/054
> @@ -49,7 +49,7 @@ _make_test_img $((1024*1024))T
>  echo
>  echo "creating too large image (1 EB) using qcow2.py"
>  _make_test_img 4G
> -./qcow2.py "$TEST_IMG" set-header size $((1024 ** 6))
> +$PYTHON qcow2.py "$TEST_IMG" set-header size $((1024 ** 6))
>  _check_test_img
>  
>  # success, all done
> diff --git a/tests/qemu-iotests/060 b/tests/qemu-iotests/060
> index f0116aa..3cffc12 100755
> --- a/tests/qemu-iotests/060
> +++ b/tests/qemu-iotests/060
> @@ -68,13 +68,13 @@ poke_file "$TEST_IMG" "$l1_offset" "\x80\x00\x00\x00\x00\x03\x00\x00"
>  _check_test_img
>  
>  # The corrupt bit should not be set anyway
> -./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
> +$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>  
>  # Try to write something, thereby forcing the corrupt bit to be set
>  $QEMU_IO -c "$OPEN_RW" -c "write -P 0x2a 0 512" | _filter_qemu_io
>  
>  # The corrupt bit must now be set
> -./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
> +$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>  
>  # Try to open the image R/W (which should fail)
>  $QEMU_IO -c "$OPEN_RW" -c "read 0 512" 2>&1 | _filter_qemu_io \
> @@ -99,19 +99,19 @@ poke_file "$TEST_IMG" "$(($rb_offset+8))" "\x00\x01"
>  # Redirect new data cluster onto refcount block
>  poke_file "$TEST_IMG" "$l2_offset" "\x80\x00\x00\x00\x00\x02\x00\x00"
>  _check_test_img
> -./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
> +$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>  $QEMU_IO -c "$OPEN_RW" -c "write -P 0x2a 0 512" | _filter_qemu_io
> -./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
> +$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>  
>  # Try to fix it
>  _check_test_img -r all
>  
>  # The corrupt bit should be cleared
> -./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
> +$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>  
>  # Look if it's really really fixed
>  $QEMU_IO -c "$OPEN_RW" -c "write -P 0x2a 0 512" | _filter_qemu_io
> -./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
> +$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>  
>  echo
>  echo "=== Testing cluster data reference into inactive L2 table ==="
> @@ -124,13 +124,13 @@ $QEMU_IO -c "$OPEN_RW" -c "write -P 2 0 512" | _filter_qemu_io
>  poke_file "$TEST_IMG" "$l2_offset_after_snapshot" \
>                        "\x80\x00\x00\x00\x00\x04\x00\x00"
>  _check_test_img
> -./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
> +$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>  $QEMU_IO -c "$OPEN_RW" -c "write -P 3 0 512" | _filter_qemu_io
> -./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
> +$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>  _check_test_img -r all
> -./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
> +$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>  $QEMU_IO -c "$OPEN_RW" -c "write -P 4 0 512" | _filter_qemu_io
> -./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
> +$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>  
>  # Check data
>  $QEMU_IO -c "$OPEN_RO" -c "read -P 4 0 512" | _filter_qemu_io
> diff --git a/tests/qemu-iotests/061 b/tests/qemu-iotests/061
> index d3a6b38..ab98def 100755
> --- a/tests/qemu-iotests/061
> +++ b/tests/qemu-iotests/061
> @@ -48,9 +48,9 @@ echo "=== Testing version downgrade with zero expansion ==="
>  echo
>  IMGOPTS="compat=1.1,lazy_refcounts=on" _make_test_img 64M
>  $QEMU_IO -c "write -z 0 128k" "$TEST_IMG" | _filter_qemu_io
> -./qcow2.py "$TEST_IMG" dump-header
> +$PYTHON qcow2.py "$TEST_IMG" dump-header
>  $QEMU_IMG amend -o "compat=0.10" "$TEST_IMG"
> -./qcow2.py "$TEST_IMG" dump-header
> +$PYTHON qcow2.py "$TEST_IMG" dump-header
>  $QEMU_IO -c "read -P 0 0 128k" "$TEST_IMG" | _filter_qemu_io
>  _check_test_img
>  
> @@ -59,9 +59,9 @@ echo "=== Testing dirty version downgrade ==="
>  echo
>  IMGOPTS="compat=1.1,lazy_refcounts=on" _make_test_img 64M
>  $QEMU_IO -c "write -P 0x2a 0 128k" -c flush -c abort "$TEST_IMG" | _filter_qemu_io
> -./qcow2.py "$TEST_IMG" dump-header
> +$PYTHON qcow2.py "$TEST_IMG" dump-header
>  $QEMU_IMG amend -o "compat=0.10" "$TEST_IMG"
> -./qcow2.py "$TEST_IMG" dump-header
> +$PYTHON qcow2.py "$TEST_IMG" dump-header
>  $QEMU_IO -c "read -P 0x2a 0 128k" "$TEST_IMG" | _filter_qemu_io
>  _check_test_img
>  
> @@ -69,11 +69,11 @@ echo
>  echo "=== Testing version downgrade with unknown compat/autoclear flags ==="
>  echo
>  IMGOPTS="compat=1.1" _make_test_img 64M
> -./qcow2.py "$TEST_IMG" set-feature-bit compatible 42
> -./qcow2.py "$TEST_IMG" set-feature-bit autoclear 42
> -./qcow2.py "$TEST_IMG" dump-header
> +$PYTHON qcow2.py "$TEST_IMG" set-feature-bit compatible 42
> +$PYTHON qcow2.py "$TEST_IMG" set-feature-bit autoclear 42
> +$PYTHON qcow2.py "$TEST_IMG" dump-header
>  $QEMU_IMG amend -o "compat=0.10" "$TEST_IMG"
> -./qcow2.py "$TEST_IMG" dump-header
> +$PYTHON qcow2.py "$TEST_IMG" dump-header
>  _check_test_img
>  
>  echo
> @@ -81,9 +81,9 @@ echo "=== Testing version upgrade and resize ==="
>  echo
>  IMGOPTS="compat=0.10" _make_test_img 64M
>  $QEMU_IO -c "write -P 0x2a 42M 64k" "$TEST_IMG" | _filter_qemu_io
> -./qcow2.py "$TEST_IMG" dump-header
> +$PYTHON qcow2.py "$TEST_IMG" dump-header
>  $QEMU_IMG amend -o "compat=1.1,lazy_refcounts=on,size=128M" "$TEST_IMG"
> -./qcow2.py "$TEST_IMG" dump-header
> +$PYTHON qcow2.py "$TEST_IMG" dump-header
>  $QEMU_IO -c "read -P 0x2a 42M 64k" "$TEST_IMG" | _filter_qemu_io
>  _check_test_img
>  
> @@ -92,9 +92,9 @@ echo "=== Testing dirty lazy_refcounts=off ==="
>  echo
>  IMGOPTS="compat=1.1,lazy_refcounts=on" _make_test_img 64M
>  $QEMU_IO -c "write -P 0x2a 0 128k" -c flush -c abort "$TEST_IMG" | _filter_qemu_io
> -./qcow2.py "$TEST_IMG" dump-header
> +$PYTHON qcow2.py "$TEST_IMG" dump-header
>  $QEMU_IMG amend -o "lazy_refcounts=off" "$TEST_IMG"
> -./qcow2.py "$TEST_IMG" dump-header
> +$PYTHON qcow2.py "$TEST_IMG" dump-header
>  $QEMU_IO -c "read -P 0x2a 0 128k" "$TEST_IMG" | _filter_qemu_io
>  _check_test_img
>  
> diff --git a/tests/qemu-iotests/083 b/tests/qemu-iotests/083
> index f764534..b7ba860 100755
> --- a/tests/qemu-iotests/083
> +++ b/tests/qemu-iotests/083
> @@ -81,7 +81,7 @@ EOF
>  		nbd_url="nbd:127.0.0.1:$port:exportname=foo"
>  	fi
>  
> -	./nbd-fault-injector.py $extra_args "127.0.0.1:$port" "$TEST_DIR/nbd-fault-injector.conf" 2>&1 >/dev/null &
> +	$PYTHON nbd-fault-injector.py $extra_args "127.0.0.1:$port" "$TEST_DIR/nbd-fault-injector.conf" 2>&1 >/dev/null &
>  	wait_for_tcp_port "127.0.0.1:$port"
>  	$QEMU_IO -c "read 0 512" "$nbd_url" 2>&1 | _filter_qemu_io | filter_nbd
>  
> diff --git a/tests/qemu-iotests/check b/tests/qemu-iotests/check
> index 8ec5b8d..8420bd6 100755
> --- a/tests/qemu-iotests/check
> +++ b/tests/qemu-iotests/check
> @@ -298,10 +298,16 @@ do
>  
>          start=`_wallclock`
>          $timestamp && echo -n "        ["`date "+%T"`"]"
> +
> +        if [ "$(head -n 1 "$source_iotests/$seq")" == "#!/usr/bin/env python" ]; then

How about

           if head -n 1 "$source_iotests/$seq" | grep -q '#!/usr/bin/env python'; then

? So you don't need patch 6 (Personally, I don't dislike #!/usr/bin/env
python2).

But no objection, so I'll leave my

Reviewed-by: Fam Zheng <famz@redhat.com>

> +            run_command="$PYTHON $seq"
> +        else
> +            run_command="./$seq"
> +        fi
>          export OUTPUT_DIR=$PWD
>          (cd "$source_iotests";
>          MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(($RANDOM % 255 + 1))} \
> -                ./$seq >$tmp.out 2>&1)
> +                $run_command >$tmp.out 2>&1)
>          sts=$?
>          $timestamp && _timestamp
>          stop=`_wallclock`
> -- 
> 1.9.3
> 
>
Max Reitz May 24, 2014, 7:35 p.m. UTC | #2
On 23.05.2014 05:58, Fam Zheng wrote:
> On Thu, 05/22 23:30, Max Reitz wrote:
>> Instead of invoking Python scripts directly via ./, use $PYTHON to
>> obtain the correct Python interpreter command.
>>
>> Signed-off-by: Max Reitz <mreitz@redhat.com>
>> ---
>>   tests/qemu-iotests/031   |  8 ++++----
>>   tests/qemu-iotests/036   |  6 +++---
>>   tests/qemu-iotests/039   | 18 +++++++++---------
>>   tests/qemu-iotests/054   |  2 +-
>>   tests/qemu-iotests/060   | 20 ++++++++++----------
>>   tests/qemu-iotests/061   | 24 ++++++++++++------------
>>   tests/qemu-iotests/083   |  2 +-
>>   tests/qemu-iotests/check |  8 +++++++-
>>   8 files changed, 47 insertions(+), 41 deletions(-)
>>
>> diff --git a/tests/qemu-iotests/031 b/tests/qemu-iotests/031
>> index 1d920ea..2a77ba8 100755
>> --- a/tests/qemu-iotests/031
>> +++ b/tests/qemu-iotests/031
>> @@ -56,22 +56,22 @@ for IMGOPTS in "compat=0.10" "compat=1.1"; do
>>       echo === Create image with unknown header extension ===
>>       echo
>>       _make_test_img 64M
>> -    ./qcow2.py "$TEST_IMG" add-header-ext 0x12345678 "This is a test header extension"
>> -    ./qcow2.py "$TEST_IMG" dump-header
>> +    $PYTHON qcow2.py "$TEST_IMG" add-header-ext 0x12345678 "This is a test header extension"
>> +    $PYTHON qcow2.py "$TEST_IMG" dump-header
>>       _check_test_img
>>   
>>       echo
>>       echo === Rewrite header with no backing file ===
>>       echo
>>       $QEMU_IMG rebase -u -b "" "$TEST_IMG"
>> -    ./qcow2.py "$TEST_IMG" dump-header
>> +    $PYTHON qcow2.py "$TEST_IMG" dump-header
>>       _check_test_img
>>   
>>       echo
>>       echo === Add a backing file and format ===
>>       echo
>>       $QEMU_IMG rebase -u -b "/some/backing/file/path" -F host_device "$TEST_IMG"
>> -    ./qcow2.py "$TEST_IMG" dump-header
>> +    $PYTHON qcow2.py "$TEST_IMG" dump-header
>>   done
>>   
>>   # success, all done
>> diff --git a/tests/qemu-iotests/036 b/tests/qemu-iotests/036
>> index 03b6aa9..a773653 100755
>> --- a/tests/qemu-iotests/036
>> +++ b/tests/qemu-iotests/036
>> @@ -53,15 +53,15 @@ IMGOPTS="compat=1.1"
>>   echo === Create image with unknown autoclear feature bit ===
>>   echo
>>   _make_test_img 64M
>> -./qcow2.py "$TEST_IMG" set-feature-bit autoclear 63
>> -./qcow2.py "$TEST_IMG" dump-header
>> +$PYTHON qcow2.py "$TEST_IMG" set-feature-bit autoclear 63
>> +$PYTHON qcow2.py "$TEST_IMG" dump-header
>>   
>>   echo
>>   echo === Repair image ===
>>   echo
>>   _check_test_img -r all
>>   
>> -./qcow2.py "$TEST_IMG" dump-header
>> +$PYTHON qcow2.py "$TEST_IMG" dump-header
>>   
>>   # success, all done
>>   echo "*** done"
>> diff --git a/tests/qemu-iotests/039 b/tests/qemu-iotests/039
>> index 27fe4bd..84c9167 100755
>> --- a/tests/qemu-iotests/039
>> +++ b/tests/qemu-iotests/039
>> @@ -63,7 +63,7 @@ _make_test_img $size
>>   $QEMU_IO -c "write -P 0x5a 0 512" "$TEST_IMG" | _filter_qemu_io
>>   
>>   # The dirty bit must not be set
>> -./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>> +$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>>   _check_test_img
>>   
>>   echo
>> @@ -75,7 +75,7 @@ _make_test_img $size
>>   _no_dump_exec $QEMU_IO -c "write -P 0x5a 0 512" -c "abort" "$TEST_IMG" 2>&1 | _filter_qemu_io
>>   
>>   # The dirty bit must be set
>> -./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>> +$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>>   _check_test_img
>>   
>>   echo
>> @@ -84,7 +84,7 @@ echo "== Read-only access must still work =="
>>   $QEMU_IO -r -c "read -P 0x5a 0 512" "$TEST_IMG" | _filter_qemu_io
>>   
>>   # The dirty bit must be set
>> -./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>> +$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>>   
>>   echo
>>   echo "== Repairing the image file must succeed =="
>> @@ -92,7 +92,7 @@ echo "== Repairing the image file must succeed =="
>>   _check_test_img -r all
>>   
>>   # The dirty bit must not be set
>> -./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>> +$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>>   
>>   echo
>>   echo "== Data should still be accessible after repair =="
>> @@ -108,12 +108,12 @@ _make_test_img $size
>>   _no_dump_exec $QEMU_IO -c "write -P 0x5a 0 512" -c "abort" "$TEST_IMG" 2>&1 | _filter_qemu_io
>>   
>>   # The dirty bit must be set
>> -./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>> +$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>>   
>>   $QEMU_IO -c "write 0 512" "$TEST_IMG" | _filter_qemu_io
>>   
>>   # The dirty bit must not be set
>> -./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>> +$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>>   
>>   echo
>>   echo "== Creating an image file with lazy_refcounts=off =="
>> @@ -124,7 +124,7 @@ _make_test_img $size
>>   _no_dump_exec $QEMU_IO -c "write -P 0x5a 0 512" -c "abort" "$TEST_IMG" 2>&1 | _filter_qemu_io
>>   
>>   # The dirty bit must not be set since lazy_refcounts=off
>> -./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>> +$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>>   _check_test_img
>>   
>>   echo
>> @@ -140,8 +140,8 @@ $QEMU_IO -c "write 0 512" "$TEST_IMG" | _filter_qemu_io
>>   $QEMU_IMG commit "$TEST_IMG"
>>   
>>   # The dirty bit must not be set
>> -./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>> -./qcow2.py "$TEST_IMG".base dump-header | grep incompatible_features
>> +$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>> +$PYTHON qcow2.py "$TEST_IMG".base dump-header | grep incompatible_features
>>   
>>   _check_test_img
>>   TEST_IMG="$TEST_IMG".base _check_test_img
>> diff --git a/tests/qemu-iotests/054 b/tests/qemu-iotests/054
>> index c8b7082..bd94153 100755
>> --- a/tests/qemu-iotests/054
>> +++ b/tests/qemu-iotests/054
>> @@ -49,7 +49,7 @@ _make_test_img $((1024*1024))T
>>   echo
>>   echo "creating too large image (1 EB) using qcow2.py"
>>   _make_test_img 4G
>> -./qcow2.py "$TEST_IMG" set-header size $((1024 ** 6))
>> +$PYTHON qcow2.py "$TEST_IMG" set-header size $((1024 ** 6))
>>   _check_test_img
>>   
>>   # success, all done
>> diff --git a/tests/qemu-iotests/060 b/tests/qemu-iotests/060
>> index f0116aa..3cffc12 100755
>> --- a/tests/qemu-iotests/060
>> +++ b/tests/qemu-iotests/060
>> @@ -68,13 +68,13 @@ poke_file "$TEST_IMG" "$l1_offset" "\x80\x00\x00\x00\x00\x03\x00\x00"
>>   _check_test_img
>>   
>>   # The corrupt bit should not be set anyway
>> -./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>> +$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>>   
>>   # Try to write something, thereby forcing the corrupt bit to be set
>>   $QEMU_IO -c "$OPEN_RW" -c "write -P 0x2a 0 512" | _filter_qemu_io
>>   
>>   # The corrupt bit must now be set
>> -./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>> +$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>>   
>>   # Try to open the image R/W (which should fail)
>>   $QEMU_IO -c "$OPEN_RW" -c "read 0 512" 2>&1 | _filter_qemu_io \
>> @@ -99,19 +99,19 @@ poke_file "$TEST_IMG" "$(($rb_offset+8))" "\x00\x01"
>>   # Redirect new data cluster onto refcount block
>>   poke_file "$TEST_IMG" "$l2_offset" "\x80\x00\x00\x00\x00\x02\x00\x00"
>>   _check_test_img
>> -./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>> +$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>>   $QEMU_IO -c "$OPEN_RW" -c "write -P 0x2a 0 512" | _filter_qemu_io
>> -./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>> +$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>>   
>>   # Try to fix it
>>   _check_test_img -r all
>>   
>>   # The corrupt bit should be cleared
>> -./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>> +$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>>   
>>   # Look if it's really really fixed
>>   $QEMU_IO -c "$OPEN_RW" -c "write -P 0x2a 0 512" | _filter_qemu_io
>> -./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>> +$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>>   
>>   echo
>>   echo "=== Testing cluster data reference into inactive L2 table ==="
>> @@ -124,13 +124,13 @@ $QEMU_IO -c "$OPEN_RW" -c "write -P 2 0 512" | _filter_qemu_io
>>   poke_file "$TEST_IMG" "$l2_offset_after_snapshot" \
>>                         "\x80\x00\x00\x00\x00\x04\x00\x00"
>>   _check_test_img
>> -./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>> +$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>>   $QEMU_IO -c "$OPEN_RW" -c "write -P 3 0 512" | _filter_qemu_io
>> -./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>> +$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>>   _check_test_img -r all
>> -./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>> +$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>>   $QEMU_IO -c "$OPEN_RW" -c "write -P 4 0 512" | _filter_qemu_io
>> -./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>> +$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
>>   
>>   # Check data
>>   $QEMU_IO -c "$OPEN_RO" -c "read -P 4 0 512" | _filter_qemu_io
>> diff --git a/tests/qemu-iotests/061 b/tests/qemu-iotests/061
>> index d3a6b38..ab98def 100755
>> --- a/tests/qemu-iotests/061
>> +++ b/tests/qemu-iotests/061
>> @@ -48,9 +48,9 @@ echo "=== Testing version downgrade with zero expansion ==="
>>   echo
>>   IMGOPTS="compat=1.1,lazy_refcounts=on" _make_test_img 64M
>>   $QEMU_IO -c "write -z 0 128k" "$TEST_IMG" | _filter_qemu_io
>> -./qcow2.py "$TEST_IMG" dump-header
>> +$PYTHON qcow2.py "$TEST_IMG" dump-header
>>   $QEMU_IMG amend -o "compat=0.10" "$TEST_IMG"
>> -./qcow2.py "$TEST_IMG" dump-header
>> +$PYTHON qcow2.py "$TEST_IMG" dump-header
>>   $QEMU_IO -c "read -P 0 0 128k" "$TEST_IMG" | _filter_qemu_io
>>   _check_test_img
>>   
>> @@ -59,9 +59,9 @@ echo "=== Testing dirty version downgrade ==="
>>   echo
>>   IMGOPTS="compat=1.1,lazy_refcounts=on" _make_test_img 64M
>>   $QEMU_IO -c "write -P 0x2a 0 128k" -c flush -c abort "$TEST_IMG" | _filter_qemu_io
>> -./qcow2.py "$TEST_IMG" dump-header
>> +$PYTHON qcow2.py "$TEST_IMG" dump-header
>>   $QEMU_IMG amend -o "compat=0.10" "$TEST_IMG"
>> -./qcow2.py "$TEST_IMG" dump-header
>> +$PYTHON qcow2.py "$TEST_IMG" dump-header
>>   $QEMU_IO -c "read -P 0x2a 0 128k" "$TEST_IMG" | _filter_qemu_io
>>   _check_test_img
>>   
>> @@ -69,11 +69,11 @@ echo
>>   echo "=== Testing version downgrade with unknown compat/autoclear flags ==="
>>   echo
>>   IMGOPTS="compat=1.1" _make_test_img 64M
>> -./qcow2.py "$TEST_IMG" set-feature-bit compatible 42
>> -./qcow2.py "$TEST_IMG" set-feature-bit autoclear 42
>> -./qcow2.py "$TEST_IMG" dump-header
>> +$PYTHON qcow2.py "$TEST_IMG" set-feature-bit compatible 42
>> +$PYTHON qcow2.py "$TEST_IMG" set-feature-bit autoclear 42
>> +$PYTHON qcow2.py "$TEST_IMG" dump-header
>>   $QEMU_IMG amend -o "compat=0.10" "$TEST_IMG"
>> -./qcow2.py "$TEST_IMG" dump-header
>> +$PYTHON qcow2.py "$TEST_IMG" dump-header
>>   _check_test_img
>>   
>>   echo
>> @@ -81,9 +81,9 @@ echo "=== Testing version upgrade and resize ==="
>>   echo
>>   IMGOPTS="compat=0.10" _make_test_img 64M
>>   $QEMU_IO -c "write -P 0x2a 42M 64k" "$TEST_IMG" | _filter_qemu_io
>> -./qcow2.py "$TEST_IMG" dump-header
>> +$PYTHON qcow2.py "$TEST_IMG" dump-header
>>   $QEMU_IMG amend -o "compat=1.1,lazy_refcounts=on,size=128M" "$TEST_IMG"
>> -./qcow2.py "$TEST_IMG" dump-header
>> +$PYTHON qcow2.py "$TEST_IMG" dump-header
>>   $QEMU_IO -c "read -P 0x2a 42M 64k" "$TEST_IMG" | _filter_qemu_io
>>   _check_test_img
>>   
>> @@ -92,9 +92,9 @@ echo "=== Testing dirty lazy_refcounts=off ==="
>>   echo
>>   IMGOPTS="compat=1.1,lazy_refcounts=on" _make_test_img 64M
>>   $QEMU_IO -c "write -P 0x2a 0 128k" -c flush -c abort "$TEST_IMG" | _filter_qemu_io
>> -./qcow2.py "$TEST_IMG" dump-header
>> +$PYTHON qcow2.py "$TEST_IMG" dump-header
>>   $QEMU_IMG amend -o "lazy_refcounts=off" "$TEST_IMG"
>> -./qcow2.py "$TEST_IMG" dump-header
>> +$PYTHON qcow2.py "$TEST_IMG" dump-header
>>   $QEMU_IO -c "read -P 0x2a 0 128k" "$TEST_IMG" | _filter_qemu_io
>>   _check_test_img
>>   
>> diff --git a/tests/qemu-iotests/083 b/tests/qemu-iotests/083
>> index f764534..b7ba860 100755
>> --- a/tests/qemu-iotests/083
>> +++ b/tests/qemu-iotests/083
>> @@ -81,7 +81,7 @@ EOF
>>   		nbd_url="nbd:127.0.0.1:$port:exportname=foo"
>>   	fi
>>   
>> -	./nbd-fault-injector.py $extra_args "127.0.0.1:$port" "$TEST_DIR/nbd-fault-injector.conf" 2>&1 >/dev/null &
>> +	$PYTHON nbd-fault-injector.py $extra_args "127.0.0.1:$port" "$TEST_DIR/nbd-fault-injector.conf" 2>&1 >/dev/null &
>>   	wait_for_tcp_port "127.0.0.1:$port"
>>   	$QEMU_IO -c "read 0 512" "$nbd_url" 2>&1 | _filter_qemu_io | filter_nbd
>>   
>> diff --git a/tests/qemu-iotests/check b/tests/qemu-iotests/check
>> index 8ec5b8d..8420bd6 100755
>> --- a/tests/qemu-iotests/check
>> +++ b/tests/qemu-iotests/check
>> @@ -298,10 +298,16 @@ do
>>   
>>           start=`_wallclock`
>>           $timestamp && echo -n "        ["`date "+%T"`"]"
>> +
>> +        if [ "$(head -n 1 "$source_iotests/$seq")" == "#!/usr/bin/env python" ]; then
> How about
>
>             if head -n 1 "$source_iotests/$seq" | grep -q '#!/usr/bin/env python'; then
>
> ? So you don't need patch 6 (Personally, I don't dislike #!/usr/bin/env
> python2).

I'll need patch 6 anyway. The original idea why this series exists in 
the first place was that my main system (Arch) links /usr/bin/python to 
python3, which breaks the I/O tests. Therefore, I wanted to make the I/O 
tests always use python2 or, if possible, the Python version chosen by 
configure. After my first attempt broke badly, I thought of replacing 
all Shebangs by "#!/usr/bin/env python2" - but it turned out, Debian 
normally does not provide /usr/bin/python2 (albeit having Python 2 
itself). Therefore, I discarded that idea and wrote this series instead.

However, knowing this, it's better to "fix" the Shebang in test 065. On 
the other hand, with this series we wouldn't have to, as the Shebang is 
not actually used anyway. But I'd rather like to have it "valid" (which 
means valid for Debian and invalid for Arch).

Max

> But no objection, so I'll leave my
>
> Reviewed-by: Fam Zheng <famz@redhat.com>
>
>> +            run_command="$PYTHON $seq"
>> +        else
>> +            run_command="./$seq"
>> +        fi
>>           export OUTPUT_DIR=$PWD
>>           (cd "$source_iotests";
>>           MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(($RANDOM % 255 + 1))} \
>> -                ./$seq >$tmp.out 2>&1)
>> +                $run_command >$tmp.out 2>&1)
>>           sts=$?
>>           $timestamp && _timestamp
>>           stop=`_wallclock`
>> -- 
>> 1.9.3
>>
>>
diff mbox

Patch

diff --git a/tests/qemu-iotests/031 b/tests/qemu-iotests/031
index 1d920ea..2a77ba8 100755
--- a/tests/qemu-iotests/031
+++ b/tests/qemu-iotests/031
@@ -56,22 +56,22 @@  for IMGOPTS in "compat=0.10" "compat=1.1"; do
     echo === Create image with unknown header extension ===
     echo
     _make_test_img 64M
-    ./qcow2.py "$TEST_IMG" add-header-ext 0x12345678 "This is a test header extension"
-    ./qcow2.py "$TEST_IMG" dump-header
+    $PYTHON qcow2.py "$TEST_IMG" add-header-ext 0x12345678 "This is a test header extension"
+    $PYTHON qcow2.py "$TEST_IMG" dump-header
     _check_test_img
 
     echo
     echo === Rewrite header with no backing file ===
     echo
     $QEMU_IMG rebase -u -b "" "$TEST_IMG"
-    ./qcow2.py "$TEST_IMG" dump-header
+    $PYTHON qcow2.py "$TEST_IMG" dump-header
     _check_test_img
 
     echo
     echo === Add a backing file and format ===
     echo
     $QEMU_IMG rebase -u -b "/some/backing/file/path" -F host_device "$TEST_IMG"
-    ./qcow2.py "$TEST_IMG" dump-header
+    $PYTHON qcow2.py "$TEST_IMG" dump-header
 done
 
 # success, all done
diff --git a/tests/qemu-iotests/036 b/tests/qemu-iotests/036
index 03b6aa9..a773653 100755
--- a/tests/qemu-iotests/036
+++ b/tests/qemu-iotests/036
@@ -53,15 +53,15 @@  IMGOPTS="compat=1.1"
 echo === Create image with unknown autoclear feature bit ===
 echo
 _make_test_img 64M
-./qcow2.py "$TEST_IMG" set-feature-bit autoclear 63
-./qcow2.py "$TEST_IMG" dump-header
+$PYTHON qcow2.py "$TEST_IMG" set-feature-bit autoclear 63
+$PYTHON qcow2.py "$TEST_IMG" dump-header
 
 echo
 echo === Repair image ===
 echo
 _check_test_img -r all
 
-./qcow2.py "$TEST_IMG" dump-header
+$PYTHON qcow2.py "$TEST_IMG" dump-header
 
 # success, all done
 echo "*** done"
diff --git a/tests/qemu-iotests/039 b/tests/qemu-iotests/039
index 27fe4bd..84c9167 100755
--- a/tests/qemu-iotests/039
+++ b/tests/qemu-iotests/039
@@ -63,7 +63,7 @@  _make_test_img $size
 $QEMU_IO -c "write -P 0x5a 0 512" "$TEST_IMG" | _filter_qemu_io
 
 # The dirty bit must not be set
-./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
+$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
 _check_test_img
 
 echo
@@ -75,7 +75,7 @@  _make_test_img $size
 _no_dump_exec $QEMU_IO -c "write -P 0x5a 0 512" -c "abort" "$TEST_IMG" 2>&1 | _filter_qemu_io
 
 # The dirty bit must be set
-./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
+$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
 _check_test_img
 
 echo
@@ -84,7 +84,7 @@  echo "== Read-only access must still work =="
 $QEMU_IO -r -c "read -P 0x5a 0 512" "$TEST_IMG" | _filter_qemu_io
 
 # The dirty bit must be set
-./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
+$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
 
 echo
 echo "== Repairing the image file must succeed =="
@@ -92,7 +92,7 @@  echo "== Repairing the image file must succeed =="
 _check_test_img -r all
 
 # The dirty bit must not be set
-./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
+$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
 
 echo
 echo "== Data should still be accessible after repair =="
@@ -108,12 +108,12 @@  _make_test_img $size
 _no_dump_exec $QEMU_IO -c "write -P 0x5a 0 512" -c "abort" "$TEST_IMG" 2>&1 | _filter_qemu_io
 
 # The dirty bit must be set
-./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
+$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
 
 $QEMU_IO -c "write 0 512" "$TEST_IMG" | _filter_qemu_io
 
 # The dirty bit must not be set
-./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
+$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
 
 echo
 echo "== Creating an image file with lazy_refcounts=off =="
@@ -124,7 +124,7 @@  _make_test_img $size
 _no_dump_exec $QEMU_IO -c "write -P 0x5a 0 512" -c "abort" "$TEST_IMG" 2>&1 | _filter_qemu_io
 
 # The dirty bit must not be set since lazy_refcounts=off
-./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
+$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
 _check_test_img
 
 echo
@@ -140,8 +140,8 @@  $QEMU_IO -c "write 0 512" "$TEST_IMG" | _filter_qemu_io
 $QEMU_IMG commit "$TEST_IMG"
 
 # The dirty bit must not be set
-./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
-./qcow2.py "$TEST_IMG".base dump-header | grep incompatible_features
+$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
+$PYTHON qcow2.py "$TEST_IMG".base dump-header | grep incompatible_features
 
 _check_test_img
 TEST_IMG="$TEST_IMG".base _check_test_img
diff --git a/tests/qemu-iotests/054 b/tests/qemu-iotests/054
index c8b7082..bd94153 100755
--- a/tests/qemu-iotests/054
+++ b/tests/qemu-iotests/054
@@ -49,7 +49,7 @@  _make_test_img $((1024*1024))T
 echo
 echo "creating too large image (1 EB) using qcow2.py"
 _make_test_img 4G
-./qcow2.py "$TEST_IMG" set-header size $((1024 ** 6))
+$PYTHON qcow2.py "$TEST_IMG" set-header size $((1024 ** 6))
 _check_test_img
 
 # success, all done
diff --git a/tests/qemu-iotests/060 b/tests/qemu-iotests/060
index f0116aa..3cffc12 100755
--- a/tests/qemu-iotests/060
+++ b/tests/qemu-iotests/060
@@ -68,13 +68,13 @@  poke_file "$TEST_IMG" "$l1_offset" "\x80\x00\x00\x00\x00\x03\x00\x00"
 _check_test_img
 
 # The corrupt bit should not be set anyway
-./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
+$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
 
 # Try to write something, thereby forcing the corrupt bit to be set
 $QEMU_IO -c "$OPEN_RW" -c "write -P 0x2a 0 512" | _filter_qemu_io
 
 # The corrupt bit must now be set
-./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
+$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
 
 # Try to open the image R/W (which should fail)
 $QEMU_IO -c "$OPEN_RW" -c "read 0 512" 2>&1 | _filter_qemu_io \
@@ -99,19 +99,19 @@  poke_file "$TEST_IMG" "$(($rb_offset+8))" "\x00\x01"
 # Redirect new data cluster onto refcount block
 poke_file "$TEST_IMG" "$l2_offset" "\x80\x00\x00\x00\x00\x02\x00\x00"
 _check_test_img
-./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
+$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
 $QEMU_IO -c "$OPEN_RW" -c "write -P 0x2a 0 512" | _filter_qemu_io
-./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
+$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
 
 # Try to fix it
 _check_test_img -r all
 
 # The corrupt bit should be cleared
-./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
+$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
 
 # Look if it's really really fixed
 $QEMU_IO -c "$OPEN_RW" -c "write -P 0x2a 0 512" | _filter_qemu_io
-./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
+$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
 
 echo
 echo "=== Testing cluster data reference into inactive L2 table ==="
@@ -124,13 +124,13 @@  $QEMU_IO -c "$OPEN_RW" -c "write -P 2 0 512" | _filter_qemu_io
 poke_file "$TEST_IMG" "$l2_offset_after_snapshot" \
                       "\x80\x00\x00\x00\x00\x04\x00\x00"
 _check_test_img
-./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
+$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
 $QEMU_IO -c "$OPEN_RW" -c "write -P 3 0 512" | _filter_qemu_io
-./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
+$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
 _check_test_img -r all
-./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
+$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
 $QEMU_IO -c "$OPEN_RW" -c "write -P 4 0 512" | _filter_qemu_io
-./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
+$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
 
 # Check data
 $QEMU_IO -c "$OPEN_RO" -c "read -P 4 0 512" | _filter_qemu_io
diff --git a/tests/qemu-iotests/061 b/tests/qemu-iotests/061
index d3a6b38..ab98def 100755
--- a/tests/qemu-iotests/061
+++ b/tests/qemu-iotests/061
@@ -48,9 +48,9 @@  echo "=== Testing version downgrade with zero expansion ==="
 echo
 IMGOPTS="compat=1.1,lazy_refcounts=on" _make_test_img 64M
 $QEMU_IO -c "write -z 0 128k" "$TEST_IMG" | _filter_qemu_io
-./qcow2.py "$TEST_IMG" dump-header
+$PYTHON qcow2.py "$TEST_IMG" dump-header
 $QEMU_IMG amend -o "compat=0.10" "$TEST_IMG"
-./qcow2.py "$TEST_IMG" dump-header
+$PYTHON qcow2.py "$TEST_IMG" dump-header
 $QEMU_IO -c "read -P 0 0 128k" "$TEST_IMG" | _filter_qemu_io
 _check_test_img
 
@@ -59,9 +59,9 @@  echo "=== Testing dirty version downgrade ==="
 echo
 IMGOPTS="compat=1.1,lazy_refcounts=on" _make_test_img 64M
 $QEMU_IO -c "write -P 0x2a 0 128k" -c flush -c abort "$TEST_IMG" | _filter_qemu_io
-./qcow2.py "$TEST_IMG" dump-header
+$PYTHON qcow2.py "$TEST_IMG" dump-header
 $QEMU_IMG amend -o "compat=0.10" "$TEST_IMG"
-./qcow2.py "$TEST_IMG" dump-header
+$PYTHON qcow2.py "$TEST_IMG" dump-header
 $QEMU_IO -c "read -P 0x2a 0 128k" "$TEST_IMG" | _filter_qemu_io
 _check_test_img
 
@@ -69,11 +69,11 @@  echo
 echo "=== Testing version downgrade with unknown compat/autoclear flags ==="
 echo
 IMGOPTS="compat=1.1" _make_test_img 64M
-./qcow2.py "$TEST_IMG" set-feature-bit compatible 42
-./qcow2.py "$TEST_IMG" set-feature-bit autoclear 42
-./qcow2.py "$TEST_IMG" dump-header
+$PYTHON qcow2.py "$TEST_IMG" set-feature-bit compatible 42
+$PYTHON qcow2.py "$TEST_IMG" set-feature-bit autoclear 42
+$PYTHON qcow2.py "$TEST_IMG" dump-header
 $QEMU_IMG amend -o "compat=0.10" "$TEST_IMG"
-./qcow2.py "$TEST_IMG" dump-header
+$PYTHON qcow2.py "$TEST_IMG" dump-header
 _check_test_img
 
 echo
@@ -81,9 +81,9 @@  echo "=== Testing version upgrade and resize ==="
 echo
 IMGOPTS="compat=0.10" _make_test_img 64M
 $QEMU_IO -c "write -P 0x2a 42M 64k" "$TEST_IMG" | _filter_qemu_io
-./qcow2.py "$TEST_IMG" dump-header
+$PYTHON qcow2.py "$TEST_IMG" dump-header
 $QEMU_IMG amend -o "compat=1.1,lazy_refcounts=on,size=128M" "$TEST_IMG"
-./qcow2.py "$TEST_IMG" dump-header
+$PYTHON qcow2.py "$TEST_IMG" dump-header
 $QEMU_IO -c "read -P 0x2a 42M 64k" "$TEST_IMG" | _filter_qemu_io
 _check_test_img
 
@@ -92,9 +92,9 @@  echo "=== Testing dirty lazy_refcounts=off ==="
 echo
 IMGOPTS="compat=1.1,lazy_refcounts=on" _make_test_img 64M
 $QEMU_IO -c "write -P 0x2a 0 128k" -c flush -c abort "$TEST_IMG" | _filter_qemu_io
-./qcow2.py "$TEST_IMG" dump-header
+$PYTHON qcow2.py "$TEST_IMG" dump-header
 $QEMU_IMG amend -o "lazy_refcounts=off" "$TEST_IMG"
-./qcow2.py "$TEST_IMG" dump-header
+$PYTHON qcow2.py "$TEST_IMG" dump-header
 $QEMU_IO -c "read -P 0x2a 0 128k" "$TEST_IMG" | _filter_qemu_io
 _check_test_img
 
diff --git a/tests/qemu-iotests/083 b/tests/qemu-iotests/083
index f764534..b7ba860 100755
--- a/tests/qemu-iotests/083
+++ b/tests/qemu-iotests/083
@@ -81,7 +81,7 @@  EOF
 		nbd_url="nbd:127.0.0.1:$port:exportname=foo"
 	fi
 
-	./nbd-fault-injector.py $extra_args "127.0.0.1:$port" "$TEST_DIR/nbd-fault-injector.conf" 2>&1 >/dev/null &
+	$PYTHON nbd-fault-injector.py $extra_args "127.0.0.1:$port" "$TEST_DIR/nbd-fault-injector.conf" 2>&1 >/dev/null &
 	wait_for_tcp_port "127.0.0.1:$port"
 	$QEMU_IO -c "read 0 512" "$nbd_url" 2>&1 | _filter_qemu_io | filter_nbd
 
diff --git a/tests/qemu-iotests/check b/tests/qemu-iotests/check
index 8ec5b8d..8420bd6 100755
--- a/tests/qemu-iotests/check
+++ b/tests/qemu-iotests/check
@@ -298,10 +298,16 @@  do
 
         start=`_wallclock`
         $timestamp && echo -n "        ["`date "+%T"`"]"
+
+        if [ "$(head -n 1 "$source_iotests/$seq")" == "#!/usr/bin/env python" ]; then
+            run_command="$PYTHON $seq"
+        else
+            run_command="./$seq"
+        fi
         export OUTPUT_DIR=$PWD
         (cd "$source_iotests";
         MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(($RANDOM % 255 + 1))} \
-                ./$seq >$tmp.out 2>&1)
+                $run_command >$tmp.out 2>&1)
         sts=$?
         $timestamp && _timestamp
         stop=`_wallclock`