14ad30336SMax Reitz#!/bin/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 Reitzhere="$PWD" 284ad30336SMax Reitzstatus=1 # failure is the default! 294ad30336SMax Reitz 304ad30336SMax Reitz_cleanup() 314ad30336SMax Reitz{ 324ad30336SMax Reitz _cleanup_test_img 334ad30336SMax Reitz} 344ad30336SMax Reitztrap "_cleanup; exit \$status" 0 1 2 3 15 354ad30336SMax Reitz 364ad30336SMax Reitz# get standard environment, filters and checks 374ad30336SMax Reitz. ./common.rc 384ad30336SMax Reitz. ./common.filter 394ad30336SMax Reitz 404ad30336SMax Reitz_supported_fmt qcow2 414ad30336SMax Reitz_supported_proto file 424ad30336SMax Reitz_supported_os Linux 435262caa7SMax Reitz# Because anything other than 16 would change the output of qemu_io -c info 445262caa7SMax Reitz_unsupported_imgopts 'refcount_bits=\([^1]\|.\([^6]\|$\)\)' 454ad30336SMax Reitz 464ad30336SMax Reitz# Using an image filename containing quotation marks will render the JSON data 474ad30336SMax Reitz# below invalid. In that case, we have little choice but simply not to run this 484ad30336SMax Reitz# test. 494ad30336SMax Reitzcase $TEST_IMG in 504ad30336SMax Reitz *'"'*) 514ad30336SMax Reitz _notrun "image filename may not contain quotation marks" 524ad30336SMax Reitz ;; 534ad30336SMax Reitzesac 544ad30336SMax Reitz 554ad30336SMax ReitzIMG_SIZE=64M 564ad30336SMax Reitz 574ad30336SMax Reitz# Taken from test 072 584ad30336SMax Reitzecho 594ad30336SMax Reitzecho "=== Testing nested image formats ===" 604ad30336SMax Reitzecho 614ad30336SMax Reitz 624ad30336SMax ReitzTEST_IMG="$TEST_IMG.base" _make_test_img $IMG_SIZE 634ad30336SMax Reitz 644ad30336SMax Reitz$QEMU_IO -c 'write -P 42 0 512' -c 'write -P 23 512 512' \ 654ad30336SMax Reitz -c 'write -P 66 1024 512' "$TEST_IMG.base" | _filter_qemu_io 664ad30336SMax Reitz 674ad30336SMax Reitz$QEMU_IMG convert -f raw -O $IMGFMT "$TEST_IMG.base" "$TEST_IMG" 684ad30336SMax Reitz 698f9e835fSKevin Wolf$QEMU_IO_PROG --cache $CACHEMODE \ 708f9e835fSKevin Wolf -c 'read -P 42 0 512' -c 'read -P 23 512 512' \ 714ad30336SMax Reitz -c 'read -P 66 1024 512' "json:{ 724ad30336SMax Reitz \"driver\": \"$IMGFMT\", 734ad30336SMax Reitz \"file\": { 744ad30336SMax Reitz \"driver\": \"$IMGFMT\", 754ad30336SMax Reitz \"file\": { 764ad30336SMax Reitz \"filename\": \"$TEST_IMG\" 774ad30336SMax Reitz } 784ad30336SMax Reitz } 794ad30336SMax Reitz}" | _filter_qemu_io 804ad30336SMax Reitz 814ad30336SMax Reitz# This should fail (see test 072) 824ad30336SMax Reitz$QEMU_IO -c 'read -P 42 0 512' "$TEST_IMG" | _filter_qemu_io 834ad30336SMax Reitz 844ad30336SMax Reitz 85*e59a0cf1SMax Reitzecho 86*e59a0cf1SMax Reitzecho "=== Testing correct handling of 'backing':null ===" 87*e59a0cf1SMax Reitzecho 88*e59a0cf1SMax Reitz 89*e59a0cf1SMax Reitz_make_test_img -b "$TEST_IMG.base" $IMG_SIZE 90*e59a0cf1SMax Reitz 91*e59a0cf1SMax Reitz# This should read 42 92*e59a0cf1SMax Reitz$QEMU_IO -c 'read -P 42 0 512' "$TEST_IMG" | _filter_qemu_io 93*e59a0cf1SMax Reitz 94*e59a0cf1SMax Reitz# This should read 0 95*e59a0cf1SMax Reitz$QEMU_IO -c 'read -P 0 0 512' "json:{\ 96*e59a0cf1SMax Reitz 'driver': '$IMGFMT', 97*e59a0cf1SMax Reitz 'file': { 98*e59a0cf1SMax Reitz 'driver': 'file', 99*e59a0cf1SMax Reitz 'filename': '$TEST_IMG' 100*e59a0cf1SMax Reitz }, 101*e59a0cf1SMax Reitz 'backing': null 102*e59a0cf1SMax Reitz}" | _filter_qemu_io 103*e59a0cf1SMax Reitz 104*e59a0cf1SMax Reitz 1054ad30336SMax Reitz# Taken from test 071 1064ad30336SMax Reitzecho 1074ad30336SMax Reitzecho "=== Testing blkdebug ===" 1084ad30336SMax Reitzecho 1094ad30336SMax Reitz 1104ad30336SMax Reitz_make_test_img $IMG_SIZE 1114ad30336SMax Reitz 1124ad30336SMax Reitz$QEMU_IO -c 'write -P 42 0x38000 512' "$TEST_IMG" | _filter_qemu_io 1134ad30336SMax Reitz 1144ad30336SMax Reitz# The "image.filename" part tests whether "a": { "b": "c" } and "a.b": "c" do 1154ad30336SMax Reitz# the same (which they should). 1168f9e835fSKevin Wolf$QEMU_IO_PROG --cache $CACHEMODE \ 1178f9e835fSKevin Wolf -c 'read -P 42 0x38000 512' "json:{ 1184ad30336SMax Reitz \"driver\": \"$IMGFMT\", 1194ad30336SMax Reitz \"file\": { 1204ad30336SMax Reitz \"driver\": \"blkdebug\", 1214ad30336SMax Reitz \"inject-error\": [{ 1224ad30336SMax Reitz \"event\": \"l2_load\" 1234ad30336SMax Reitz }], 1244ad30336SMax Reitz \"image.filename\": \"$TEST_IMG\" 1254ad30336SMax Reitz } 1264ad30336SMax Reitz}" | _filter_qemu_io 1274ad30336SMax Reitz 1284ad30336SMax Reitz 1294ad30336SMax Reitzecho 1304ad30336SMax Reitzecho "=== Testing qemu-img info output ===" 1314ad30336SMax Reitzecho 1324ad30336SMax Reitz 1330bf7488aSMax ReitzTEST_IMG="json:{\"driver\":\"qcow2\",\"file.filename\":\"$TEST_IMG\"}" _img_info 1344ad30336SMax Reitz 1354ad30336SMax Reitz 1364ad30336SMax Reitzecho 1374ad30336SMax Reitzecho "=== Testing option merging ===" 1384ad30336SMax Reitzecho 1394ad30336SMax Reitz 1404ad30336SMax Reitz# Both options given directly and those given in the filename should be used 1414ad30336SMax Reitz$QEMU_IO -c "open -o driver=qcow2 json:{\"file.filename\":\"$TEST_IMG\"}" \ 1429853f5c4SMax Reitz -c "info" 2>&1 | _filter_img_info 1434ad30336SMax Reitz 1444ad30336SMax Reitz# Options given directly should be prioritized over those given in the filename 1454ad30336SMax Reitz$QEMU_IO -c "open -o driver=qcow2 json:{\"driver\":\"raw\",\"file.filename\":\"$TEST_IMG\"}" \ 1469853f5c4SMax Reitz -c "info" 2>&1 | _filter_img_info 1474ad30336SMax Reitz 1484ad30336SMax Reitz 1494ad30336SMax Reitz# success, all done 1504ad30336SMax Reitzecho "*** done" 1514ad30336SMax Reitzrm -f $seq.full 1524ad30336SMax Reitzstatus=0 153