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