 b7e875b2f9
			
		
	
	
		b7e875b2f9
		
	
	
	
	
		
			
			The LUKS block driver tests will require the ability to specify encryption secrets with block devices. This requires using the --object argument to qemu-img/qemu-io to create a 'secret' object. When the IMGKEYSECRET env variable is set, it provides the password to be associated with a secret called 'keysec0' The _qemu_img_wrapper function isn't modified as that needs to cope with differing syntax for subcommands, so can't be made to use the image opts syntax unconditionally. Signed-off-by: Daniel P. Berrange <berrange@redhat.com> Message-id: 1462896689-18450-3-git-send-email-berrange@redhat.com Signed-off-by: Max Reitz <mreitz@redhat.com>
		
			
				
	
	
		
			231 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			231 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #!/bin/bash
 | |
| #
 | |
| # Copyright (C) 2009 Red Hat, Inc.
 | |
| # Copyright (c) 2000-2003,2006 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/>.
 | |
| #
 | |
| #
 | |
| # setup and check for config parameters, and in particular
 | |
| #
 | |
| # EMAIL -           email of the script runner.
 | |
| # TEST_DIR -        scratch test directory
 | |
| #
 | |
| # - These can be added to $HOST_CONFIG_DIR (witch default to ./config)
 | |
| #   below or a separate local configuration file can be used (using
 | |
| #   the HOST_OPTIONS variable).
 | |
| # - This script is shared by the stress test system and the auto-qa
 | |
| #   system (includes both regression test and benchmark components).
 | |
| # - this script shouldn't make any assertions about filesystem
 | |
| #   validity or mountedness.
 | |
| #
 | |
| 
 | |
| # all tests should use a common language setting to prevent golden
 | |
| # output mismatches.
 | |
| export LANG=C
 | |
| 
 | |
| PATH=".:$PATH"
 | |
| 
 | |
| HOST=`hostname -s 2> /dev/null`
 | |
| HOSTOS=`uname -s`
 | |
| 
 | |
| EMAIL=root@localhost    # where auto-qa will send its status messages
 | |
| export HOST_OPTIONS=${HOST_OPTIONS:=local.config}
 | |
| export CHECK_OPTIONS=${CHECK_OPTIONS:="-g auto"}
 | |
| export PWD=`pwd`
 | |
| 
 | |
| export _QEMU_HANDLE=0
 | |
| 
 | |
| # $1 = prog to look for, $2* = default pathnames if not found in $PATH
 | |
| set_prog_path()
 | |
| {
 | |
|     p=`command -v $1 2> /dev/null`
 | |
|     if [ -n "$p" -a -x "$p" ]; then
 | |
|         echo $p
 | |
|         return 0
 | |
|     fi
 | |
|     p=$1
 | |
| 
 | |
|     shift
 | |
|     for f; do
 | |
|         if [ -x $f ]; then
 | |
|             echo $f
 | |
|             return 0
 | |
|         fi
 | |
|     done
 | |
| 
 | |
|     echo ""
 | |
|     return 1
 | |
| }
 | |
| 
 | |
| _fatal()
 | |
| {
 | |
|     echo "$*"
 | |
|     status=1
 | |
|     exit 1
 | |
| }
 | |
| 
 | |
| export PERL_PROG="`set_prog_path perl`"
 | |
| [ "$PERL_PROG" = "" ] && _fatal "perl not found"
 | |
| 
 | |
| export AWK_PROG="`set_prog_path awk`"
 | |
| [ "$AWK_PROG" = "" ] && _fatal "awk not found"
 | |
| 
 | |
| export SED_PROG="`set_prog_path sed`"
 | |
| [ "$SED_PROG" = "" ] && _fatal "sed not found"
 | |
| 
 | |
| export BC_PROG="`set_prog_path bc`"
 | |
| [ "$BC_PROG" = "" ] && _fatal "bc not found"
 | |
| 
 | |
| export PS_ALL_FLAGS="-ef"
 | |
| 
 | |
| if [ -z "$QEMU_PROG" ]; then
 | |
|     export QEMU_PROG="`set_prog_path qemu`"
 | |
| fi
 | |
| 
 | |
| if [ -z "$QEMU_IMG_PROG" ]; then
 | |
|     export QEMU_IMG_PROG="`set_prog_path qemu-img`"
 | |
| fi
 | |
| 
 | |
| if [ -z "$QEMU_IO_PROG" ]; then
 | |
|     export QEMU_IO_PROG="`set_prog_path qemu-io`"
 | |
| fi
 | |
| 
 | |
| if [ -z "$QEMU_NBD_PROG" ]; then
 | |
|     export QEMU_NBD_PROG="`set_prog_path qemu-nbd`"
 | |
| fi
 | |
| 
 | |
| _qemu_wrapper()
 | |
| {
 | |
|     (
 | |
|         if [ -n "${QEMU_NEED_PID}" ]; then
 | |
|             echo $BASHPID > "${TEST_DIR}/qemu-${_QEMU_HANDLE}.pid"
 | |
|         fi
 | |
|         exec "$QEMU_PROG" $QEMU_OPTIONS "$@"
 | |
|     )
 | |
| }
 | |
| 
 | |
| _qemu_img_wrapper()
 | |
| {
 | |
|     (exec "$QEMU_IMG_PROG" $QEMU_IMG_OPTIONS "$@")
 | |
| }
 | |
| 
 | |
| _qemu_io_wrapper()
 | |
| {
 | |
|     local VALGRIND_LOGFILE="${TEST_DIR}"/$$.valgrind
 | |
|     local QEMU_IO_ARGS="$QEMU_IO_OPTIONS"
 | |
|     if [ "$IMGOPTSSYNTAX" = "true" ]; then
 | |
|         QEMU_IO_ARGS="--image-opts $QEMU_IO_ARGS"
 | |
|         if [ -n "$IMGKEYSECRET" ]; then
 | |
|             QEMU_IO_ARGS="--object secret,id=keysec0,data=$IMGKEYSECRET $QEMU_IO_ARGS"
 | |
|         fi
 | |
|     fi
 | |
|     local RETVAL
 | |
|     (
 | |
|         if [ "${VALGRIND_QEMU}" == "y" ]; then
 | |
|             exec valgrind --log-file="${VALGRIND_LOGFILE}" --error-exitcode=99 "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@"
 | |
|         else
 | |
|             exec "$QEMU_IO_PROG" $QEMU_IO_ARGS "$@"
 | |
|         fi
 | |
|     )
 | |
|     RETVAL=$?
 | |
|     if [ "${VALGRIND_QEMU}" == "y" ]; then
 | |
|         if [ $RETVAL == 99 ]; then
 | |
|             cat "${VALGRIND_LOGFILE}"
 | |
|         fi
 | |
|         rm -f "${VALGRIND_LOGFILE}"
 | |
|     fi
 | |
|     (exit $RETVAL)
 | |
| }
 | |
| 
 | |
| _qemu_nbd_wrapper()
 | |
| {
 | |
|     (
 | |
|         echo $BASHPID > "${TEST_DIR}/qemu-nbd.pid"
 | |
|         exec "$QEMU_NBD_PROG" $QEMU_NBD_OPTIONS "$@"
 | |
|     )
 | |
| }
 | |
| 
 | |
| export QEMU=_qemu_wrapper
 | |
| export QEMU_IMG=_qemu_img_wrapper
 | |
| export QEMU_IO=_qemu_io_wrapper
 | |
| export QEMU_NBD=_qemu_nbd_wrapper
 | |
| 
 | |
| QEMU_IMG_EXTRA_ARGS=
 | |
| if [ "$IMGOPTSSYNTAX" = "true" ]; then
 | |
|     QEMU_IMG_EXTRA_ARGS="--image-opts $QEMU_IMG_EXTRA_ARGS"
 | |
|     if [ -n "$IMGKEYSECRET" ]; then
 | |
|         QEMU_IMG_EXTRA_ARGS="--object secret,id=keysec0,data=$IMGKEYSECRET $QEMU_IMG_EXTRA_ARGS"
 | |
|     fi
 | |
| fi
 | |
| export QEMU_IMG_EXTRA_ARGS
 | |
| 
 | |
| 
 | |
| default_machine=$($QEMU -machine help | sed -n '/(default)/ s/ .*//p')
 | |
| default_alias_machine=$($QEMU -machine help | \
 | |
|    sed -n "/(alias of $default_machine)/ { s/ .*//p; q; }")
 | |
| if [[ "$default_alias_machine" ]]; then
 | |
|     default_machine="$default_alias_machine"
 | |
| fi
 | |
| 
 | |
| export QEMU_DEFAULT_MACHINE="$default_machine"
 | |
| 
 | |
| [ -f /etc/qemu-iotest.config ]       && . /etc/qemu-iotest.config
 | |
| 
 | |
| if [ -z "$TEST_DIR" ]; then
 | |
|         TEST_DIR=`pwd`/scratch
 | |
| fi
 | |
| 
 | |
| if [ ! -e "$TEST_DIR" ]; then
 | |
|         mkdir "$TEST_DIR"
 | |
| fi
 | |
| 
 | |
| if [ ! -d "$TEST_DIR" ]; then
 | |
|     echo "common.config: Error: \$TEST_DIR ($TEST_DIR) is not a directory"
 | |
|     exit 1
 | |
| fi
 | |
| 
 | |
| export TEST_DIR
 | |
| 
 | |
| if [ -z "$SAMPLE_IMG_DIR" ]; then
 | |
|         SAMPLE_IMG_DIR="$source_iotests/sample_images"
 | |
| fi
 | |
| 
 | |
| if [ ! -d "$SAMPLE_IMG_DIR" ]; then
 | |
|     echo "common.config: Error: \$SAMPLE_IMG_DIR ($SAMPLE_IMG_DIR) is not a directory"
 | |
|     exit 1
 | |
| fi
 | |
| 
 | |
| export SAMPLE_IMG_DIR
 | |
| 
 | |
| _readlink()
 | |
| {
 | |
|     if [ $# -ne 1 ]; then
 | |
|         echo "Usage: _readlink filename" 1>&2
 | |
|         exit 1
 | |
|     fi
 | |
| 
 | |
|     perl -e "\$in=\"$1\";" -e '
 | |
|     $lnk = readlink($in);
 | |
|     if ($lnk =~ m!^/.*!) {
 | |
|         print "$lnk\n";
 | |
|     }
 | |
|     else {
 | |
|         chomp($dir = `dirname $in`);
 | |
|         print "$dir/$lnk\n";
 | |
|     }'
 | |
| }
 | |
| 
 | |
| # make sure this script returns success
 | |
| true
 |