111a82d14SPhilippe Mathieu-Daudé#!/usr/bin/env bash 24ad30336SMax Reitz# 34ad30336SMax Reitz# Test case for support of JSON filenames 44ad30336SMax Reitz# 54ad30336SMax Reitz# Copyright (C) 2014 Red Hat, Inc. 64ad30336SMax Reitz# 74ad30336SMax Reitz# This program is free software; you can redistribute it and/or modify 84ad30336SMax Reitz# it under the terms of the GNU General Public License as published by 94ad30336SMax Reitz# the Free Software Foundation; either version 2 of the License, or 104ad30336SMax Reitz# (at your option) any later version. 114ad30336SMax Reitz# 124ad30336SMax Reitz# This program is distributed in the hope that it will be useful, 134ad30336SMax Reitz# but WITHOUT ANY WARRANTY; without even the implied warranty of 144ad30336SMax Reitz# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 154ad30336SMax Reitz# GNU General Public License for more details. 164ad30336SMax Reitz# 174ad30336SMax Reitz# You should have received a copy of the GNU General Public License 184ad30336SMax Reitz# along with this program. If not, see <http://www.gnu.org/licenses/>. 194ad30336SMax Reitz# 204ad30336SMax Reitz 214ad30336SMax Reitz# creator 224ad30336SMax Reitzowner=mreitz@redhat.com 234ad30336SMax Reitz 244ad30336SMax Reitzseq="$(basename $0)" 254ad30336SMax Reitzecho "QA output created by $seq" 264ad30336SMax Reitz 274ad30336SMax Reitzstatus=1 # failure is the default! 284ad30336SMax Reitz 294ad30336SMax Reitz_cleanup() 304ad30336SMax Reitz{ 314ad30336SMax Reitz _cleanup_test_img 324ad30336SMax Reitz} 334ad30336SMax Reitztrap "_cleanup; exit \$status" 0 1 2 3 15 344ad30336SMax Reitz 354ad30336SMax Reitz# get standard environment, filters and checks 364ad30336SMax Reitz. ./common.rc 374ad30336SMax Reitz. ./common.filter 384ad30336SMax Reitz 394ad30336SMax Reitz_supported_fmt qcow2 404ad30336SMax Reitz_supported_proto file 415262caa7SMax Reitz# Because anything other than 16 would change the output of qemu_io -c info 425262caa7SMax Reitz_unsupported_imgopts 'refcount_bits=\([^1]\|.\([^6]\|$\)\)' 434ad30336SMax Reitz 444ad30336SMax Reitz# Using an image filename containing quotation marks will render the JSON data 454ad30336SMax Reitz# below invalid. In that case, we have little choice but simply not to run this 464ad30336SMax Reitz# test. 474ad30336SMax Reitzcase $TEST_IMG in 484ad30336SMax Reitz *'"'*) 494ad30336SMax Reitz _notrun "image filename may not contain quotation marks" 504ad30336SMax Reitz ;; 514ad30336SMax Reitzesac 524ad30336SMax Reitz 534ad30336SMax ReitzIMG_SIZE=64M 544ad30336SMax Reitz 554ad30336SMax Reitz# Taken from test 072 564ad30336SMax Reitzecho 574ad30336SMax Reitzecho "=== Testing nested image formats ===" 584ad30336SMax Reitzecho 594ad30336SMax Reitz 604ad30336SMax ReitzTEST_IMG="$TEST_IMG.base" _make_test_img $IMG_SIZE 614ad30336SMax Reitz 624ad30336SMax Reitz$QEMU_IO -c 'write -P 42 0 512' -c 'write -P 23 512 512' \ 634ad30336SMax Reitz -c 'write -P 66 1024 512' "$TEST_IMG.base" | _filter_qemu_io 644ad30336SMax Reitz 65*620a628dSMax Reitz_make_test_img $IMG_SIZE 66*620a628dSMax Reitz$QEMU_IMG convert -f raw -O $IMGFMT -n "$TEST_IMG.base" "$TEST_IMG" 674ad30336SMax Reitz 688dff69b9SAarushi Mehta$QEMU_IO_PROG --cache $CACHEMODE --aio $AIOMODE \ 698f9e835fSKevin Wolf -c 'read -P 42 0 512' -c 'read -P 23 512 512' \ 704ad30336SMax Reitz -c 'read -P 66 1024 512' "json:{ 714ad30336SMax Reitz \"driver\": \"$IMGFMT\", 724ad30336SMax Reitz \"file\": { 734ad30336SMax Reitz \"driver\": \"$IMGFMT\", 744ad30336SMax Reitz \"file\": { 754ad30336SMax Reitz \"filename\": \"$TEST_IMG\" 764ad30336SMax Reitz } 774ad30336SMax Reitz } 784ad30336SMax Reitz}" | _filter_qemu_io 794ad30336SMax Reitz 804ad30336SMax Reitz# This should fail (see test 072) 814ad30336SMax Reitz$QEMU_IO -c 'read -P 42 0 512' "$TEST_IMG" | _filter_qemu_io 824ad30336SMax Reitz 834ad30336SMax Reitz 84e59a0cf1SMax Reitzecho 85e59a0cf1SMax Reitzecho "=== Testing correct handling of 'backing':null ===" 86e59a0cf1SMax Reitzecho 87e59a0cf1SMax Reitz 88b66ff2c2SEric Blake_make_test_img -b "$TEST_IMG.base" -F $IMGFMT $IMG_SIZE 89e59a0cf1SMax Reitz 90e59a0cf1SMax Reitz# This should read 42 91e59a0cf1SMax Reitz$QEMU_IO -c 'read -P 42 0 512' "$TEST_IMG" | _filter_qemu_io 92e59a0cf1SMax Reitz 93e59a0cf1SMax Reitz# This should read 0 94e59a0cf1SMax Reitz$QEMU_IO -c 'read -P 0 0 512' "json:{\ 95e59a0cf1SMax Reitz 'driver': '$IMGFMT', 96e59a0cf1SMax Reitz 'file': { 97e59a0cf1SMax Reitz 'driver': 'file', 98e59a0cf1SMax Reitz 'filename': '$TEST_IMG' 99e59a0cf1SMax Reitz }, 100e59a0cf1SMax Reitz 'backing': null 101e59a0cf1SMax Reitz}" | _filter_qemu_io 102e59a0cf1SMax Reitz 103e59a0cf1SMax Reitz 1044ad30336SMax Reitz# Taken from test 071 1054ad30336SMax Reitzecho 1064ad30336SMax Reitzecho "=== Testing blkdebug ===" 1074ad30336SMax Reitzecho 1084ad30336SMax Reitz 1094ad30336SMax Reitz_make_test_img $IMG_SIZE 1104ad30336SMax Reitz 1114ad30336SMax Reitz$QEMU_IO -c 'write -P 42 0x38000 512' "$TEST_IMG" | _filter_qemu_io 1124ad30336SMax Reitz 1134ad30336SMax Reitz# The "image.filename" part tests whether "a": { "b": "c" } and "a.b": "c" do 1144ad30336SMax Reitz# the same (which they should). 1158dff69b9SAarushi Mehta$QEMU_IO_PROG --cache $CACHEMODE --aio $AIOMODE \ 1168f9e835fSKevin Wolf -c 'read -P 42 0x38000 512' "json:{ 1174ad30336SMax Reitz \"driver\": \"$IMGFMT\", 1184ad30336SMax Reitz \"file\": { 1194ad30336SMax Reitz \"driver\": \"blkdebug\", 1204ad30336SMax Reitz \"inject-error\": [{ 1214ad30336SMax Reitz \"event\": \"l2_load\" 1224ad30336SMax Reitz }], 1234ad30336SMax Reitz \"image.filename\": \"$TEST_IMG\" 1244ad30336SMax Reitz } 1254ad30336SMax Reitz}" | _filter_qemu_io 1264ad30336SMax Reitz 1274ad30336SMax Reitz 1284ad30336SMax Reitzecho 1294ad30336SMax Reitzecho "=== Testing qemu-img info output ===" 1304ad30336SMax Reitzecho 1314ad30336SMax Reitz 1320bf7488aSMax ReitzTEST_IMG="json:{\"driver\":\"qcow2\",\"file.filename\":\"$TEST_IMG\"}" _img_info 1334ad30336SMax Reitz 1344ad30336SMax Reitz 1354ad30336SMax Reitzecho 1364ad30336SMax Reitzecho "=== Testing option merging ===" 1374ad30336SMax Reitzecho 1384ad30336SMax Reitz 1394ad30336SMax Reitz# Both options given directly and those given in the filename should be used 1404ad30336SMax Reitz$QEMU_IO -c "open -o driver=qcow2 json:{\"file.filename\":\"$TEST_IMG\"}" \ 1419853f5c4SMax Reitz -c "info" 2>&1 | _filter_img_info 1424ad30336SMax Reitz 1434ad30336SMax Reitz# Options given directly should be prioritized over those given in the filename 1444ad30336SMax Reitz$QEMU_IO -c "open -o driver=qcow2 json:{\"driver\":\"raw\",\"file.filename\":\"$TEST_IMG\"}" \ 1459853f5c4SMax Reitz -c "info" 2>&1 | _filter_img_info 1464ad30336SMax Reitz 1474ad30336SMax Reitz 1484ad30336SMax Reitz# success, all done 1494ad30336SMax Reitzecho "*** done" 1504ad30336SMax Reitzrm -f $seq.full 1514ad30336SMax Reitzstatus=0 152