082 8.2 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
#!/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"

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
40
_supported_proto file nfs
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
_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 已提交
57
_img_info
58 59 60

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

# 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
65
_img_info --format-specific
66
run_qemu_img create -f $IMGFMT -o cluster_size=4k,cluster_size=8k "$TEST_IMG" $size
M
Max Reitz 已提交
67
_img_info
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86

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
87 88
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
89 90 91 92 93 94 95 96 97 98

# 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

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

102 103 104 105 106 107 108 109
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 已提交
110
TEST_IMG="${TEST_IMG}.base" _img_info
111 112 113

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

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

# 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
122
TEST_IMG="${TEST_IMG}.base" _img_info --format-specific
123
run_qemu_img convert -O $IMGFMT -o cluster_size=4k,cluster_size=8k "$TEST_IMG" "$TEST_IMG".base
M
Max Reitz 已提交
124
TEST_IMG="${TEST_IMG}.base" _img_info
125 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

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

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

159 160 161 162 163 164 165 166
echo
echo === convert: -C and other options ===

# Adding the help option to a command without other -o options
run_qemu_img convert -C -S 4k -O $IMGFMT "$TEST_IMG" "$TEST_IMG".target
run_qemu_img convert -C -S 8k -O $IMGFMT "$TEST_IMG" "$TEST_IMG".target
run_qemu_img convert -C -c -O $IMGFMT "$TEST_IMG" "$TEST_IMG".target

167 168 169 170 171
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"
172
_img_info --format-specific
173 174 175

# Multiple -o should be merged
run_qemu_img amend -f $IMGFMT -o size=130M -o lazy_refcounts=off "$TEST_IMG"
176
_img_info --format-specific
177 178 179

# 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"
180
_img_info --format-specific
181
run_qemu_img amend -f $IMGFMT -o size=4M,size=148M "$TEST_IMG"
M
Max Reitz 已提交
182
_img_info
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 210 211 212 213 214 215 216

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

217 218 219
# Try help option for a format that does not support amendment
run_qemu_img amend -f bochs -o help

220 221 222 223
# success, all done
echo "*** done"
rm -f $seq.full
status=0