This adds support for testing the LUKS driver with the block
I/O test framework.
   cd tests/qemu-io-tests
   ./check -luks
A handful of test cases are modified to work with luks
 - 004 - whitelist luks format
 - 012 - use TEST_IMG_FILE instead of TEST_IMG for file ops
 - 048 - use TEST_IMG_FILE instead of TEST_IMG for file ops.
         don't assume extended image contents is all zeros,
         explicitly initialize with zeros
         Make file size smaller to avoid having to decrypt
         1 GB of data.
 - 052 - don't assume initial image contents is all zeros,
         explicitly initialize with zeros
 - 100 - don't assume initial image contents is all zeros,
         explicitly initialize with zeros
With this patch applied, the results are as follows:
  Passed: 001 002 003 004 005 008 009 010 011 012 021 032 043
          047 048 049 052 087 100 134 143
  Failed: 033 120 140 145
 Skipped: 007 013 014 015 017 018 019 020 022 023 024 025 026
          027 028 029 030 031 034 035 036 037 038 039 040 041
          042 043 044 045 046 047 049 050 051 053 054 055 056
          057 058 059 060 061 062 063 064 065 066 067 068 069
          070 071 072 073 074 075 076 077 078 079 080 081 082
          083 084 085 086 087 088 089 090 091 092 093 094 095
          096 097 098 099 101 102 103 104 105 107 108 109 110
          111 112 113 114 115 116 117 118 119 121 122 123 124
          128 129 130 131 132 133 134 135 136 137 138 139 141
          142 144 146 148 150 152
The reasons for the failed tests are:
 - 033 - needs adapting to use image opts syntax with blkdebug
         and test image in order to correctly set align property
 - 120 - needs adapting to use correct -drive syntax for luks
 - 140 - needs adapting to use correct -drive syntax for luks
 - 145 - needs adapting to use correct -drive syntax for luks
The vast majority of skipped tests are exercising code that is
qcow2 specific, though a couple could probably be usefully
enabled for luks too.
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Message-id: 1462896689-18450-4-git-send-email-berrange@redhat.com
Signed-off-by: Max Reitz <mreitz@redhat.com>
		
	
		
			
				
	
	
		
			453 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			453 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #!/bin/bash
 | |
| #
 | |
| # Copyright (C) 2009 Red Hat, Inc.
 | |
| # Copyright (c) 2000-2005 Silicon Graphics, Inc.  All Rights Reserved.
 | |
| #
 | |
| # This program is free software; you can redistribute it and/or
 | |
| # modify it under the terms of the GNU General Public License as
 | |
| # published by the Free Software Foundation.
 | |
| #
 | |
| # This program is distributed in the hope that it would be useful,
 | |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
| # GNU General Public License for more details.
 | |
| #
 | |
| # You should have received a copy of the GNU General Public License
 | |
| # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | |
| #
 | |
| #
 | |
| # common procedures for QA scripts
 | |
| #
 | |
| 
 | |
| _setenvironment()
 | |
| {
 | |
|     MSGVERB="text:action"
 | |
|     export MSGVERB
 | |
| }
 | |
| 
 | |
| rm -f "$OUTPUT_DIR/$iam.out"
 | |
| _setenvironment
 | |
| 
 | |
| check=${check-true}
 | |
| 
 | |
| diff="diff -u"
 | |
| verbose=false
 | |
| debug=false
 | |
| group=false
 | |
| xgroup=false
 | |
| imgopts=false
 | |
| showme=false
 | |
| sortme=false
 | |
| expunge=true
 | |
| have_test_arg=false
 | |
| randomize=false
 | |
| cachemode=false
 | |
| rm -f $tmp.list $tmp.tmp $tmp.sed
 | |
| 
 | |
| export IMGFMT=raw
 | |
| export IMGFMT_GENERIC=true
 | |
| export IMGPROTO=file
 | |
| export IMGOPTS=""
 | |
| export CACHEMODE="writeback"
 | |
| export QEMU_IO_OPTIONS=""
 | |
| export CACHEMODE_IS_DEFAULT=true
 | |
| export QEMU_OPTIONS="-nodefaults"
 | |
| export VALGRIND_QEMU=
 | |
| export IMGKEYSECRET=
 | |
| export IMGOPTSSYNTAX=false
 | |
| 
 | |
| for r
 | |
| do
 | |
| 
 | |
|     if $group
 | |
|     then
 | |
|         # arg after -g
 | |
|         group_list=`sed -n <"$source_iotests/group" -e 's/$/ /' -e "/^[0-9][0-9][0-9].* $r /"'{
 | |
| s/ .*//p
 | |
| }'`
 | |
|         if [ -z "$group_list" ]
 | |
|         then
 | |
|             echo "Group \"$r\" is empty or not defined?"
 | |
|             exit 1
 | |
|         fi
 | |
|         [ ! -s $tmp.list ] && touch $tmp.list
 | |
|         for t in $group_list
 | |
|         do
 | |
|             if grep -s "^$t\$" $tmp.list >/dev/null
 | |
|             then
 | |
|                 :
 | |
|             else
 | |
|                 echo "$t" >>$tmp.list
 | |
|             fi
 | |
|         done
 | |
|         group=false
 | |
|         continue
 | |
| 
 | |
|     elif $xgroup
 | |
|     then
 | |
|         # arg after -x
 | |
|         [ ! -s $tmp.list ] && ls [0-9][0-9][0-9] [0-9][0-9][0-9][0-9] >$tmp.list 2>/dev/null
 | |
|         group_list=`sed -n <"$source_iotests/group" -e 's/$/ /' -e "/^[0-9][0-9][0-9].* $r /"'{
 | |
| s/ .*//p
 | |
| }'`
 | |
|         if [ -z "$group_list" ]
 | |
|         then
 | |
|             echo "Group \"$r\" is empty or not defined?"
 | |
|             exit 1
 | |
|         fi
 | |
|         numsed=0
 | |
|         rm -f $tmp.sed
 | |
|         for t in $group_list
 | |
|         do
 | |
|             if [ $numsed -gt 100 ]
 | |
|             then
 | |
|                 sed -f $tmp.sed <$tmp.list >$tmp.tmp
 | |
|                 mv $tmp.tmp $tmp.list
 | |
|                 numsed=0
 | |
|                 rm -f $tmp.sed
 | |
|             fi
 | |
|             echo "/^$t\$/d" >>$tmp.sed
 | |
|             numsed=`expr $numsed + 1`
 | |
|         done
 | |
|         sed -f $tmp.sed <$tmp.list >$tmp.tmp
 | |
|         mv $tmp.tmp $tmp.list
 | |
|         xgroup=false
 | |
|         continue
 | |
| 
 | |
|     elif $imgopts
 | |
|     then
 | |
|         IMGOPTS="$r"
 | |
|         imgopts=false
 | |
|         continue
 | |
|     elif $cachemode
 | |
|     then
 | |
|         CACHEMODE="$r"
 | |
|         CACHEMODE_IS_DEFAULT=false
 | |
|         cachemode=false
 | |
|         continue
 | |
|     fi
 | |
| 
 | |
|     xpand=true
 | |
|     case "$r"
 | |
|     in
 | |
| 
 | |
|         -\? | -h | --help)        # usage
 | |
|             echo "Usage: $0 [options] [testlist]"'
 | |
| 
 | |
| common options
 | |
|     -v                  verbose
 | |
|     -d                  debug
 | |
| 
 | |
| check options
 | |
|     -raw                test raw (default)
 | |
|     -bochs              test bochs
 | |
|     -cloop              test cloop
 | |
|     -parallels          test parallels
 | |
|     -qcow               test qcow
 | |
|     -qcow2              test qcow2
 | |
|     -qed                test qed
 | |
|     -vdi                test vdi
 | |
|     -vpc                test vpc
 | |
|     -vhdx               test vhdx
 | |
|     -vmdk               test vmdk
 | |
|     -file               test file (default)
 | |
|     -rbd                test rbd
 | |
|     -sheepdog           test sheepdog
 | |
|     -nbd                test nbd
 | |
|     -ssh                test ssh
 | |
|     -nfs                test nfs
 | |
|     -archipelago        test archipelago
 | |
|     -luks               test luks
 | |
|     -xdiff              graphical mode diff
 | |
|     -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
 | |
|     -c mode             cache mode
 | |
| 
 | |
| testlist options
 | |
|     -g group[,group...]        include tests from these groups
 | |
|     -x group[,group...]        exclude tests from these groups
 | |
|     NNN                        include test NNN
 | |
|     NNN-NNN                    include test range (eg. 012-021)
 | |
| '
 | |
|             exit 0
 | |
|             ;;
 | |
| 
 | |
|         -raw)
 | |
|             IMGFMT=raw
 | |
|             xpand=false
 | |
|             ;;
 | |
| 
 | |
|         -bochs)
 | |
|             IMGFMT=bochs
 | |
|             IMGFMT_GENERIC=false
 | |
|             xpand=false
 | |
|             ;;
 | |
| 
 | |
|         -cloop)
 | |
|             IMGFMT=cloop
 | |
|             IMGFMT_GENERIC=false
 | |
|             xpand=false
 | |
|             ;;
 | |
| 
 | |
|         -parallels)
 | |
|             IMGFMT=parallels
 | |
|             IMGFMT_GENERIC=false
 | |
|             xpand=false
 | |
|             ;;
 | |
| 
 | |
|         -qcow)
 | |
|             IMGFMT=qcow
 | |
|             xpand=false
 | |
|             ;;
 | |
| 
 | |
|         -qcow2)
 | |
|             IMGFMT=qcow2
 | |
|             xpand=false
 | |
|             ;;
 | |
| 
 | |
|         -luks)
 | |
|             IMGOPTSSYNTAX=true
 | |
|             IMGFMT=luks
 | |
|             IMGKEYSECRET=123456
 | |
|             xpand=false
 | |
|             ;;
 | |
| 
 | |
|         -qed)
 | |
|             IMGFMT=qed
 | |
|             xpand=false
 | |
|             ;;
 | |
| 
 | |
|         -vdi)
 | |
|             IMGFMT=vdi
 | |
|             xpand=false
 | |
|             ;;
 | |
| 
 | |
|         -vmdk)
 | |
|             IMGFMT=vmdk
 | |
|             xpand=false
 | |
|             ;;
 | |
| 
 | |
|         -vpc)
 | |
|             IMGFMT=vpc
 | |
|             xpand=false
 | |
|             ;;
 | |
| 
 | |
|         -vhdx)
 | |
|             IMGFMT=vhdx
 | |
|             xpand=false
 | |
|             ;;
 | |
| 
 | |
|         -file)
 | |
|             IMGPROTO=file
 | |
|             xpand=false
 | |
|             ;;
 | |
| 
 | |
|         -rbd)
 | |
|             IMGPROTO=rbd
 | |
|             xpand=false
 | |
|             ;;
 | |
| 
 | |
|         -sheepdog)
 | |
|             IMGPROTO=sheepdog
 | |
|             xpand=false
 | |
|             ;;
 | |
| 
 | |
|         -nbd)
 | |
|             IMGPROTO=nbd
 | |
|             xpand=false
 | |
|             ;;
 | |
| 
 | |
|         -ssh)
 | |
|             IMGPROTO=ssh
 | |
|             xpand=false
 | |
|             ;;
 | |
| 
 | |
|         -nfs)
 | |
|             IMGPROTO=nfs
 | |
|             xpand=false
 | |
|             ;;
 | |
| 
 | |
|         -archipelago)
 | |
|             IMGPROTO=archipelago
 | |
|             xpand=false
 | |
|             ;;
 | |
| 
 | |
|         -nocache)
 | |
|             CACHEMODE="none"
 | |
|             CACHEMODE_IS_DEFAULT=false
 | |
|             xpand=false
 | |
|             ;;
 | |
| 
 | |
|         -misalign)
 | |
|             QEMU_IO_OPTIONS="$QEMU_IO_OPTIONS --misalign"
 | |
|             xpand=false
 | |
|             ;;
 | |
| 
 | |
|         -valgrind)
 | |
|             VALGRIND_QEMU='y'
 | |
|             xpand=false
 | |
|             ;;
 | |
| 
 | |
|         -g)        # -g group ... pick from group file
 | |
|             group=true
 | |
|             xpand=false
 | |
|             ;;
 | |
| 
 | |
|         -xdiff)        # graphical diff mode
 | |
|             xpand=false
 | |
| 
 | |
|             if [ ! -z "$DISPLAY" ]
 | |
|             then
 | |
|                 command -v xdiff >/dev/null 2>&1 && diff=xdiff
 | |
|                 command -v gdiff >/dev/null 2>&1 && diff=gdiff
 | |
|                 command -v tkdiff >/dev/null 2>&1 && diff=tkdiff
 | |
|                 command -v xxdiff >/dev/null 2>&1 && diff=xxdiff
 | |
|             fi
 | |
|             ;;
 | |
| 
 | |
|         -n)        # show me, don't do it
 | |
|             showme=true
 | |
|             xpand=false
 | |
|             ;;
 | |
|         -o)
 | |
|             imgopts=true
 | |
|             xpand=false
 | |
|             ;;
 | |
|         -c)
 | |
|             cachemode=true
 | |
|             xpand=false
 | |
|             ;;
 | |
|         -r)        # randomize test order
 | |
|             randomize=true
 | |
|             xpand=false
 | |
|             ;;
 | |
| 
 | |
|         -T)        # turn on timestamp output
 | |
|             timestamp=true
 | |
|             xpand=false
 | |
|             ;;
 | |
| 
 | |
|         -v)
 | |
|             verbose=true
 | |
|             xpand=false
 | |
|             ;;
 | |
|         -d)
 | |
|             debug=true
 | |
|             xpand=false
 | |
|             ;;
 | |
|         -x)        # -x group ... exclude from group file
 | |
|             xgroup=true
 | |
|             xpand=false
 | |
|             ;;
 | |
|         '[0-9][0-9][0-9] [0-9][0-9][0-9][0-9]')
 | |
|             echo "No tests?"
 | |
|             status=1
 | |
|             exit $status
 | |
|             ;;
 | |
| 
 | |
|         [0-9]*-[0-9]*)
 | |
|             eval `echo $r | sed -e 's/^/start=/' -e 's/-/ end=/'`
 | |
|             ;;
 | |
| 
 | |
|         [0-9]*-)
 | |
|             eval `echo $r | sed -e 's/^/start=/' -e 's/-//'`
 | |
|             end=`echo [0-9][0-9][0-9] [0-9][0-9][0-9][0-9] | sed -e 's/\[0-9]//g' -e 's/  *$//' -e 's/.* //'`
 | |
|             if [ -z "$end" ]
 | |
|             then
 | |
|                 echo "No tests in range \"$r\"?"
 | |
|                 status=1
 | |
|                 exit $status
 | |
|             fi
 | |
|             ;;
 | |
| 
 | |
|         *)
 | |
|             start=$r
 | |
|             end=$r
 | |
|             ;;
 | |
| 
 | |
|     esac
 | |
| 
 | |
|     # get rid of leading 0s as can be interpreted as octal
 | |
|     start=`echo $start | sed 's/^0*//'`
 | |
|     end=`echo $end | sed 's/^0*//'`
 | |
| 
 | |
|     if $xpand
 | |
|     then
 | |
|         have_test_arg=true
 | |
|         $AWK_PROG </dev/null '
 | |
| BEGIN        { for (t='$start'; t<='$end'; t++) printf "%03d\n",t }' \
 | |
|         | while read id
 | |
|         do
 | |
|             if grep -s "^$id " "$source_iotests/group" >/dev/null
 | |
|             then
 | |
|                 # in group file ... OK
 | |
|                 echo $id >>$tmp.list
 | |
|             else
 | |
|                 if [ -f expunged ] && $expunge && egrep "^$id([         ]|\$)" expunged >/dev/null
 | |
|                 then
 | |
|                     # expunged ... will be reported, but not run, later
 | |
|                     echo $id >>$tmp.list
 | |
|                 else
 | |
|                     # oops
 | |
|                     if [ "$start" == "$end" -a "$id" == "$end" ]
 | |
|                     then
 | |
|                         echo "$id - unknown test"
 | |
|                         exit 1
 | |
|                     else
 | |
|                         echo "$id - unknown test, ignored"
 | |
|                     fi
 | |
|                 fi
 | |
|             fi
 | |
|         done || exit 1
 | |
|     fi
 | |
| 
 | |
| done
 | |
| 
 | |
| # Set qemu-io cache mode with $CACHEMODE we have
 | |
| if [ "$IMGOPTSSYNTAX" = "true" ]; then
 | |
|     QEMU_IO_OPTIONS="$QEMU_IO_OPTIONS --cache $CACHEMODE"
 | |
| else
 | |
|     QEMU_IO_OPTIONS="$QEMU_IO_OPTIONS -f $IMGFMT --cache $CACHEMODE"
 | |
| fi
 | |
| 
 | |
| # 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
 | |
|     :
 | |
| else
 | |
|     if $have_test_arg
 | |
|     then
 | |
|         # had test numbers, but none in group file ... do nothing
 | |
|         touch $tmp.list
 | |
|     else
 | |
|         # no test numbers, do everything from group file
 | |
|         sed -n -e '/^[0-9][0-9][0-9]*/s/[         ].*//p' <"$source_iotests/group" >$tmp.list
 | |
|     fi
 | |
| fi
 | |
| 
 | |
| # should be sort -n, but this did not work for Linux when this
 | |
| # was ported from IRIX
 | |
| #
 | |
| list=`sort $tmp.list`
 | |
| rm -f $tmp.list $tmp.tmp $tmp.sed
 | |
| 
 | |
| if $randomize
 | |
| then
 | |
|     list=`echo $list | awk -f randomize.awk`
 | |
| fi
 | |
| 
 | |
| [ "$QEMU" = "" ] && _fatal "qemu not found"
 | |
| [ "$QEMU_IMG" = "" ] && _fatal "qemu-img not found"
 | |
| [ "$QEMU_IO" = "" ] && _fatal "qemu-io not found"
 | |
| 
 | |
| if [ "$IMGPROTO" = "nbd" ] ; then
 | |
|     [ "$QEMU_NBD" = "" ] && _fatal "qemu-nbd not found"
 | |
| fi
 |