082 7.9 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
#!/bin/bash
#
# Test qemu-img command line parsing
#
# Copyright (C) 2014 Red Hat, Inc.
#
# 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; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will 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/>.
#

# creator
owner=kwolf@redhat.com

seq=`basename $0`
echo "QA output created by $seq"

here=`pwd`
status=1	# failure is the default!

_cleanup()
{
	_cleanup_test_img
}
trap "_cleanup; exit \$status" 0 1 2 3 15

# get standard environment, filters and checks
. ./common.rc
. ./common.filter

_supported_fmt qcow2
41
_supported_proto file nfs
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
_supported_os Linux

function run_qemu_img()
{
    echo
    echo Testing: "$@" | _filter_testdir
    "$QEMU_IMG" "$@" 2>&1 | _filter_testdir
}

size=128M

echo
echo === create: Options specified more than once ===

# Last -f should win
run_qemu_img create -f foo -f $IMGFMT "$TEST_IMG" $size
M
Max Reitz 已提交
58
_img_info
59 60 61

# Multiple -o should be merged
run_qemu_img create -f $IMGFMT -o cluster_size=4k -o lazy_refcounts=on "$TEST_IMG" $size
62
_img_info --format-specific
63 64 65

# If the same -o key is specified more than once, the last one wins
run_qemu_img create -f $IMGFMT -o cluster_size=4k -o lazy_refcounts=on -o cluster_size=8k "$TEST_IMG" $size
66
_img_info --format-specific
67
run_qemu_img create -f $IMGFMT -o cluster_size=4k,cluster_size=8k "$TEST_IMG" $size
M
Max Reitz 已提交
68
_img_info
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87

echo
echo === create: help for -o ===

# Adding the help option to a command without other -o options
run_qemu_img create -f $IMGFMT -o help "$TEST_IMG" $size
run_qemu_img create -f $IMGFMT -o \? "$TEST_IMG" $size

# Adding the help option to the same -o option
run_qemu_img create -f $IMGFMT -o cluster_size=4k,help "$TEST_IMG" $size
run_qemu_img create -f $IMGFMT -o cluster_size=4k,\? "$TEST_IMG" $size
run_qemu_img create -f $IMGFMT -o help,cluster_size=4k "$TEST_IMG" $size
run_qemu_img create -f $IMGFMT -o \?,cluster_size=4k "$TEST_IMG" $size

# Adding the help option to a separate -o option
run_qemu_img create -f $IMGFMT -o cluster_size=4k -o help "$TEST_IMG" $size
run_qemu_img create -f $IMGFMT -o cluster_size=4k -o \? "$TEST_IMG" $size

# Looks like a help option, but is part of the backing file name
88 89
run_qemu_img create -f $IMGFMT -u -o backing_file="$TEST_IMG",,help "$TEST_IMG" $size
run_qemu_img create -f $IMGFMT -u -o backing_file="$TEST_IMG",,\? "$TEST_IMG" $size
90 91 92 93 94 95 96 97 98 99

# Try to trick qemu-img into creating escaped commas
run_qemu_img create -f $IMGFMT -o backing_file="$TEST_IMG", -o help "$TEST_IMG" $size
run_qemu_img create -f $IMGFMT -o backing_file="$TEST_IMG" -o ,help "$TEST_IMG" $size
run_qemu_img create -f $IMGFMT -o backing_file="$TEST_IMG" -o ,, -o help "$TEST_IMG" $size

# Leave out everything that isn't needed
run_qemu_img create -f $IMGFMT -o help
run_qemu_img create -o help

100 101 102
# Try help option for a format that does not support creation
run_qemu_img create -f bochs -o help

103 104 105 106 107 108 109 110
echo
echo === convert: Options specified more than once ===

# We need a valid source image
run_qemu_img create -f $IMGFMT "$TEST_IMG" $size

# Last -f should win
run_qemu_img convert -f foo -f $IMGFMT "$TEST_IMG" "$TEST_IMG".base
M
Max Reitz 已提交
111
TEST_IMG="${TEST_IMG}.base" _img_info
112 113 114

# Last -O should win
run_qemu_img convert -O foo -O $IMGFMT "$TEST_IMG" "$TEST_IMG".base
M
Max Reitz 已提交
115
TEST_IMG="${TEST_IMG}.base" _img_info
116 117 118

# Multiple -o should be merged
run_qemu_img convert -O $IMGFMT -o cluster_size=4k -o lazy_refcounts=on "$TEST_IMG" "$TEST_IMG".base
119
TEST_IMG="${TEST_IMG}.base" _img_info --format-specific
120 121 122

# If the same -o key is specified more than once, the last one wins
run_qemu_img convert -O $IMGFMT -o cluster_size=4k -o lazy_refcounts=on -o cluster_size=8k "$TEST_IMG" "$TEST_IMG".base
123
TEST_IMG="${TEST_IMG}.base" _img_info --format-specific
124
run_qemu_img convert -O $IMGFMT -o cluster_size=4k,cluster_size=8k "$TEST_IMG" "$TEST_IMG".base
M
Max Reitz 已提交
125
TEST_IMG="${TEST_IMG}.base" _img_info
126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156

echo
echo === convert: help for -o ===

# Adding the help option to a command without other -o options
run_qemu_img convert -O $IMGFMT -o help "$TEST_IMG" "$TEST_IMG".base
run_qemu_img convert -O $IMGFMT -o \? "$TEST_IMG" "$TEST_IMG".base

# Adding the help option to the same -o option
run_qemu_img convert -O $IMGFMT -o cluster_size=4k,help "$TEST_IMG" "$TEST_IMG".base
run_qemu_img convert -O $IMGFMT -o cluster_size=4k,\? "$TEST_IMG" "$TEST_IMG".base
run_qemu_img convert -O $IMGFMT -o help,cluster_size=4k "$TEST_IMG" "$TEST_IMG".base
run_qemu_img convert -O $IMGFMT -o \?,cluster_size=4k "$TEST_IMG" "$TEST_IMG".base

# Adding the help option to a separate -o option
run_qemu_img convert -O $IMGFMT -o cluster_size=4k -o help "$TEST_IMG" "$TEST_IMG".base
run_qemu_img convert -O $IMGFMT -o cluster_size=4k -o \? "$TEST_IMG" "$TEST_IMG".base

# Looks like a help option, but is part of the backing file name
run_qemu_img convert -O $IMGFMT -o backing_file="$TEST_IMG",,help "$TEST_IMG" "$TEST_IMG".base
run_qemu_img convert -O $IMGFMT -o backing_file="$TEST_IMG",,\? "$TEST_IMG" "$TEST_IMG".base

# Try to trick qemu-img into creating escaped commas
run_qemu_img convert -O $IMGFMT -o backing_file="$TEST_IMG", -o help "$TEST_IMG" "$TEST_IMG".base
run_qemu_img convert -O $IMGFMT -o backing_file="$TEST_IMG" -o ,help "$TEST_IMG" "$TEST_IMG".base
run_qemu_img convert -O $IMGFMT -o backing_file="$TEST_IMG" -o ,, -o help "$TEST_IMG" "$TEST_IMG".base

# Leave out everything that isn't needed
run_qemu_img convert -O $IMGFMT -o help
run_qemu_img convert -o help

157 158 159
# Try help option for a format that does not support creation
run_qemu_img convert -O bochs -o help

160 161 162 163 164
echo
echo === amend: Options specified more than once ===

# Last -f should win
run_qemu_img amend -f foo -f $IMGFMT -o lazy_refcounts=on "$TEST_IMG"
165
_img_info --format-specific
166 167 168

# Multiple -o should be merged
run_qemu_img amend -f $IMGFMT -o size=130M -o lazy_refcounts=off "$TEST_IMG"
169
_img_info --format-specific
170 171 172

# If the same -o key is specified more than once, the last one wins
run_qemu_img amend -f $IMGFMT -o size=8M -o lazy_refcounts=on -o size=132M "$TEST_IMG"
173
_img_info --format-specific
174
run_qemu_img amend -f $IMGFMT -o size=4M,size=148M "$TEST_IMG"
M
Max Reitz 已提交
175
_img_info
176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209

echo
echo === amend: help for -o ===

# Adding the help option to a command without other -o options
run_qemu_img amend -f $IMGFMT -o help "$TEST_IMG"
run_qemu_img amend -f $IMGFMT -o \? "$TEST_IMG"

# Adding the help option to the same -o option
run_qemu_img amend -f $IMGFMT -o cluster_size=4k,help "$TEST_IMG"
run_qemu_img amend -f $IMGFMT -o cluster_size=4k,\? "$TEST_IMG"
run_qemu_img amend -f $IMGFMT -o help,cluster_size=4k "$TEST_IMG"
run_qemu_img amend -f $IMGFMT -o \?,cluster_size=4k "$TEST_IMG"

# Adding the help option to a separate -o option
run_qemu_img amend -f $IMGFMT -o cluster_size=4k -o help "$TEST_IMG"
run_qemu_img amend -f $IMGFMT -o cluster_size=4k -o \? "$TEST_IMG"

# Looks like a help option, but is part of the backing file name
run_qemu_img amend -f $IMGFMT -o backing_file="$TEST_IMG",,help "$TEST_IMG"
run_qemu_img rebase -u -b "" -f $IMGFMT "$TEST_IMG"

run_qemu_img amend -f $IMGFMT -o backing_file="$TEST_IMG",,\? "$TEST_IMG"
run_qemu_img rebase -u -b "" -f $IMGFMT "$TEST_IMG"

# Try to trick qemu-img into creating escaped commas
run_qemu_img amend -f $IMGFMT -o backing_file="$TEST_IMG", -o help "$TEST_IMG"
run_qemu_img amend -f $IMGFMT -o backing_file="$TEST_IMG" -o ,help "$TEST_IMG"
run_qemu_img amend -f $IMGFMT -o backing_file="$TEST_IMG" -o ,, -o help "$TEST_IMG"

# Leave out everything that isn't needed
run_qemu_img amend -f $IMGFMT -o help
run_qemu_img convert -o help

210 211 212
# Try help option for a format that does not support amendment
run_qemu_img amend -f bochs -o help

213 214 215 216
# success, all done
echo "*** done"
rm -f $seq.full
status=0