#!/bin/bash size=${1:-100M} bname="my-img" parse_key() { local info="$1" key="$2" val="" echo "$info" | sed -e "/^$key:/!d" -e "s/[^:]*: //" } version=$( qemu-img --help | awk '$0 ~ /qemu-img version/ { sub(/[^0-9.].*/, "", $3); print $3; }' ) echo "#version: $version" mydata=( "qcow" "qcow2" "qed" "raw" "vdi" "vhdx" "vmdk" "vpc" "vpc vpc-fixed -o subformat=fixed" ) vpc_fforce="vpc vpc-fforce -o subformat=fixed,force_size" case "$version" in 2.[6789]*|2.[12][0-9]*|3.*) mydata["${#mydata[@]}"]="$vpc_fforce";; esac set -f set -e fails=0 for line in "${mydata[@]}"; do set -- $line fmt="$1" flong=${2:-$1} name="$bname.$flong" [ $# -gt 2 ] && { shift 2; } || set -- out=$(qemu-img create -f $fmt "$@" "$name" "$size" >/dev/null 2>&1) || { echo "failed: $out"; exit 1; } auto_info=$(qemu-img info "$name") exp_info=$(qemu-img info -f "$fmt" "$name") auto_fmt=$(parse_key "$auto_info" "file format") exp_fmt=$(parse_key "$exp_info" "file format") info="fmt=$fmt auto=$auto_fmt exp=$exp_fmt [name=$name opts=$*]" if [ "$auto_fmt" = "$exp_fmt" -a "$fmt" = "$auto_fmt" ]; then echo "$flong: PASS $info" elif [ "$auto_fmt" = "$exp_fmt" ]; then echo "$flong: PASS $info" else echo "$flong: FAIL $info" fails=$((fails+1)) fi done [ $fails -eq 0 ] || { echo "FAIL [$fails]"; exit 1; } exit 0