1#!/usr/bin/env bash 2# group: rw quick 3# 4# Test qemu-img command line parsing 5# 6# Copyright (C) 2014 Red Hat, Inc. 7# 8# This program is free software; you can redistribute it and/or modify 9# it under the terms of the GNU General Public License as published by 10# the Free Software Foundation; either version 2 of the License, or 11# (at your option) any later version. 12# 13# This program is distributed in the hope that it will be useful, 14# but WITHOUT ANY WARRANTY; without even the implied warranty of 15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16# GNU General Public License for more details. 17# 18# You should have received a copy of the GNU General Public License 19# along with this program. If not, see <http://www.gnu.org/licenses/>. 20# 21 22# creator 23owner=kwolf@redhat.com 24 25seq=`basename $0` 26echo "QA output created by $seq" 27 28status=1 # failure is the default! 29 30_cleanup() 31{ 32 _cleanup_test_img 33} 34trap "_cleanup; exit \$status" 0 1 2 3 15 35 36# get standard environment, filters and checks 37. ./common.rc 38. ./common.filter 39 40_supported_fmt qcow2 41_supported_proto file nfs 42_require_drivers bochs 43 44run_qemu_img() 45{ 46 echo 47 echo Testing: "$@" | _filter_testdir 48 "$QEMU_IMG" "$@" 2>&1 | _filter_testdir 49} 50 51size=128M 52 53echo 54echo === create: Options specified more than once === 55 56# Last -f should win 57run_qemu_img create -f foo -f $IMGFMT "$TEST_IMG" $size 58_img_info 59 60# Multiple -o should be merged 61run_qemu_img create -f $IMGFMT -o cluster_size=4k -o lazy_refcounts=on "$TEST_IMG" $size 62_img_info --format-specific 63 64# If the same -o key is specified more than once, the last one wins 65run_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 67run_qemu_img create -f $IMGFMT -o cluster_size=4k,cluster_size=8k "$TEST_IMG" $size 68_img_info 69 70echo 71echo === create: help for -o === 72 73# Adding the help option to a command without other -o options 74run_qemu_img create -f $IMGFMT -o help "$TEST_IMG" $size 75run_qemu_img create -f $IMGFMT -o \? "$TEST_IMG" $size 76 77# Adding the help option to the same -o option 78run_qemu_img create -f $IMGFMT -o cluster_size=4k,help "$TEST_IMG" $size 79run_qemu_img create -f $IMGFMT -o cluster_size=4k,\? "$TEST_IMG" $size 80run_qemu_img create -f $IMGFMT -o help,cluster_size=4k "$TEST_IMG" $size 81run_qemu_img create -f $IMGFMT -o \?,cluster_size=4k "$TEST_IMG" $size 82 83# Adding the help option to a separate -o option 84run_qemu_img create -f $IMGFMT -o cluster_size=4k -o help "$TEST_IMG" $size 85run_qemu_img create -f $IMGFMT -o cluster_size=4k -o \? "$TEST_IMG" $size 86 87# Looks like a help option, but is part of the backing file name 88run_qemu_img create -f $IMGFMT -u -o backing_file="$TEST_IMG",,help \ 89 -F $IMGFMT "$TEST_IMG" $size 90run_qemu_img create -f $IMGFMT -u -o backing_file="$TEST_IMG",,\? \ 91 -F $IMGFMT "$TEST_IMG" $size 92 93# Try to trick qemu-img into creating escaped commas 94run_qemu_img create -f $IMGFMT -o backing_file="$TEST_IMG", -o help "$TEST_IMG" $size 95run_qemu_img create -f $IMGFMT -o backing_file="$TEST_IMG" -o ,help "$TEST_IMG" $size 96run_qemu_img create -f $IMGFMT -o backing_file="$TEST_IMG" -o ,, -o help "$TEST_IMG" $size 97 98# Leave out everything that isn't needed 99run_qemu_img create -f $IMGFMT -o help 100run_qemu_img create -o help 101 102# Try help option for a format that does not support creation 103run_qemu_img create -f bochs -o help 104 105echo 106echo === convert: Options specified more than once === 107 108# We need a valid source image 109run_qemu_img create -f $IMGFMT "$TEST_IMG" $size 110 111# Last -f should win 112run_qemu_img convert -f foo -f $IMGFMT "$TEST_IMG" "$TEST_IMG".base 113TEST_IMG="${TEST_IMG}.base" _img_info 114 115# Last -O should win 116run_qemu_img convert -O foo -O $IMGFMT "$TEST_IMG" "$TEST_IMG".base 117TEST_IMG="${TEST_IMG}.base" _img_info 118 119# Multiple -o should be merged 120run_qemu_img convert -O $IMGFMT -o cluster_size=4k -o lazy_refcounts=on "$TEST_IMG" "$TEST_IMG".base 121TEST_IMG="${TEST_IMG}.base" _img_info --format-specific 122 123# If the same -o key is specified more than once, the last one wins 124run_qemu_img convert -O $IMGFMT -o cluster_size=4k -o lazy_refcounts=on -o cluster_size=8k "$TEST_IMG" "$TEST_IMG".base 125TEST_IMG="${TEST_IMG}.base" _img_info --format-specific 126run_qemu_img convert -O $IMGFMT -o cluster_size=4k,cluster_size=8k "$TEST_IMG" "$TEST_IMG".base 127TEST_IMG="${TEST_IMG}.base" _img_info 128 129echo 130echo === convert: help for -o === 131 132# Adding the help option to a command without other -o options 133run_qemu_img convert -O $IMGFMT -o help "$TEST_IMG" "$TEST_IMG".base 134run_qemu_img convert -O $IMGFMT -o \? "$TEST_IMG" "$TEST_IMG".base 135 136# Adding the help option to the same -o option 137run_qemu_img convert -O $IMGFMT -o cluster_size=4k,help "$TEST_IMG" "$TEST_IMG".base 138run_qemu_img convert -O $IMGFMT -o cluster_size=4k,\? "$TEST_IMG" "$TEST_IMG".base 139run_qemu_img convert -O $IMGFMT -o help,cluster_size=4k "$TEST_IMG" "$TEST_IMG".base 140run_qemu_img convert -O $IMGFMT -o \?,cluster_size=4k "$TEST_IMG" "$TEST_IMG".base 141 142# Adding the help option to a separate -o option 143run_qemu_img convert -O $IMGFMT -o cluster_size=4k -o help "$TEST_IMG" "$TEST_IMG".base 144run_qemu_img convert -O $IMGFMT -o cluster_size=4k -o \? "$TEST_IMG" "$TEST_IMG".base 145 146# Looks like a help option, but is part of the backing file name 147run_qemu_img convert -O $IMGFMT -o backing_fmt=$IMGFMT,backing_file="$TEST_IMG",,help "$TEST_IMG" "$TEST_IMG".base 148run_qemu_img convert -O $IMGFMT -o backing_fmt=$IMGFMT,backing_file="$TEST_IMG",,\? "$TEST_IMG" "$TEST_IMG".base 149 150# Try to trick qemu-img into creating escaped commas 151run_qemu_img convert -O $IMGFMT -o backing_file="$TEST_IMG", -o help "$TEST_IMG" "$TEST_IMG".base 152run_qemu_img convert -O $IMGFMT -o backing_file="$TEST_IMG" -o ,help "$TEST_IMG" "$TEST_IMG".base 153run_qemu_img convert -O $IMGFMT -o backing_file="$TEST_IMG" -o ,, -o help "$TEST_IMG" "$TEST_IMG".base 154 155# Leave out everything that isn't needed 156run_qemu_img convert -O $IMGFMT -o help 157run_qemu_img convert -o help 158 159# Try help option for a format that does not support creation 160run_qemu_img convert -O bochs -o help 161 162echo 163echo === convert: -C and other options === 164 165# Adding the help option to a command without other -o options 166run_qemu_img convert -C -S 4k -O $IMGFMT "$TEST_IMG" "$TEST_IMG".target 167run_qemu_img convert -C -S 8k -O $IMGFMT "$TEST_IMG" "$TEST_IMG".target 168run_qemu_img convert -C -c -O $IMGFMT "$TEST_IMG" "$TEST_IMG".target 169run_qemu_img convert -C --salvage -O $IMGFMT "$TEST_IMG" "$TEST_IMG".target 170 171echo 172echo === amend: Options specified more than once === 173 174# Last -f should win 175run_qemu_img amend -f foo -f $IMGFMT -o lazy_refcounts=on "$TEST_IMG" 176_img_info --format-specific 177 178# Multiple -o should be merged 179run_qemu_img amend -f $IMGFMT -o size=130M -o lazy_refcounts=off "$TEST_IMG" 180_img_info --format-specific 181 182# If the same -o key is specified more than once, the last one wins 183run_qemu_img amend -f $IMGFMT -o size=8M -o lazy_refcounts=on -o size=132M "$TEST_IMG" 184_img_info --format-specific 185run_qemu_img amend -f $IMGFMT -o size=4M,size=148M "$TEST_IMG" 186_img_info 187 188echo 189echo === amend: help for -o === 190 191# Adding the help option to a command without other -o options 192run_qemu_img amend -f $IMGFMT -o help "$TEST_IMG" 193run_qemu_img amend -f $IMGFMT -o \? "$TEST_IMG" 194 195# Adding the help option to the same -o option 196run_qemu_img amend -f $IMGFMT -o cluster_size=4k,help "$TEST_IMG" 197run_qemu_img amend -f $IMGFMT -o cluster_size=4k,\? "$TEST_IMG" 198run_qemu_img amend -f $IMGFMT -o help,cluster_size=4k "$TEST_IMG" 199run_qemu_img amend -f $IMGFMT -o \?,cluster_size=4k "$TEST_IMG" 200 201# Adding the help option to a separate -o option 202run_qemu_img amend -f $IMGFMT -o cluster_size=4k -o help "$TEST_IMG" 203run_qemu_img amend -f $IMGFMT -o cluster_size=4k -o \? "$TEST_IMG" 204 205# Looks like a help option, but is part of the backing file name 206run_qemu_img amend -f $IMGFMT -o backing_file="$TEST_IMG",,help "$TEST_IMG" 207run_qemu_img rebase -u -b "" -f $IMGFMT "$TEST_IMG" 208 209run_qemu_img amend -f $IMGFMT -o backing_file="$TEST_IMG",,\? "$TEST_IMG" 210run_qemu_img rebase -u -b "" -f $IMGFMT "$TEST_IMG" 211 212# Try to trick qemu-img into creating escaped commas 213run_qemu_img amend -f $IMGFMT -o backing_file="$TEST_IMG", -o help "$TEST_IMG" 214run_qemu_img amend -f $IMGFMT -o backing_file="$TEST_IMG" -o ,help "$TEST_IMG" 215run_qemu_img amend -f $IMGFMT -o backing_file="$TEST_IMG" -o ,, -o help "$TEST_IMG" 216 217# Leave out everything that isn't needed 218run_qemu_img amend -f $IMGFMT -o help 219 220# amend requires specifying either a format explicitly, or a file 221# which it can probe 222run_qemu_img amend -o help 223 224# Try help option for a format that does not support amendment 225run_qemu_img amend -f bochs -o help 226 227# success, all done 228echo "*** done" 229rm -f $seq.full 230status=0 231