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 Reitztmp=/tmp/$$ 294ad30336SMax Reitzstatus=1 # failure is the default! 304ad30336SMax Reitz 314ad30336SMax Reitz_cleanup() 324ad30336SMax Reitz{ 334ad30336SMax Reitz _cleanup_test_img 344ad30336SMax Reitz} 354ad30336SMax Reitztrap "_cleanup; exit \$status" 0 1 2 3 15 364ad30336SMax Reitz 374ad30336SMax Reitz# get standard environment, filters and checks 384ad30336SMax Reitz. ./common.rc 394ad30336SMax Reitz. ./common.filter 404ad30336SMax Reitz 414ad30336SMax Reitz_supported_fmt qcow2 424ad30336SMax Reitz_supported_proto file 434ad30336SMax Reitz_supported_os Linux 444ad30336SMax Reitz 454ad30336SMax Reitz# Using an image filename containing quotation marks will render the JSON data 464ad30336SMax Reitz# below invalid. In that case, we have little choice but simply not to run this 474ad30336SMax Reitz# test. 484ad30336SMax Reitzcase $TEST_IMG in 494ad30336SMax Reitz *'"'*) 504ad30336SMax Reitz _notrun "image filename may not contain quotation marks" 514ad30336SMax Reitz ;; 524ad30336SMax Reitzesac 534ad30336SMax Reitz 544ad30336SMax ReitzIMG_SIZE=64M 554ad30336SMax Reitz 564ad30336SMax Reitz# Taken from test 072 574ad30336SMax Reitzecho 584ad30336SMax Reitzecho "=== Testing nested image formats ===" 594ad30336SMax Reitzecho 604ad30336SMax Reitz 614ad30336SMax ReitzTEST_IMG="$TEST_IMG.base" _make_test_img $IMG_SIZE 624ad30336SMax Reitz 634ad30336SMax Reitz$QEMU_IO -c 'write -P 42 0 512' -c 'write -P 23 512 512' \ 644ad30336SMax Reitz -c 'write -P 66 1024 512' "$TEST_IMG.base" | _filter_qemu_io 654ad30336SMax Reitz 664ad30336SMax Reitz$QEMU_IMG convert -f raw -O $IMGFMT "$TEST_IMG.base" "$TEST_IMG" 674ad30336SMax Reitz 68*8f9e835fSKevin Wolf$QEMU_IO_PROG --cache $CACHEMODE \ 69*8f9e835fSKevin 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 844ad30336SMax Reitz# Taken from test 071 854ad30336SMax Reitzecho 864ad30336SMax Reitzecho "=== Testing blkdebug ===" 874ad30336SMax Reitzecho 884ad30336SMax Reitz 894ad30336SMax Reitz_make_test_img $IMG_SIZE 904ad30336SMax Reitz 914ad30336SMax Reitz$QEMU_IO -c 'write -P 42 0x38000 512' "$TEST_IMG" | _filter_qemu_io 924ad30336SMax Reitz 934ad30336SMax Reitz# The "image.filename" part tests whether "a": { "b": "c" } and "a.b": "c" do 944ad30336SMax Reitz# the same (which they should). 95*8f9e835fSKevin Wolf$QEMU_IO_PROG --cache $CACHEMODE \ 96*8f9e835fSKevin Wolf -c 'read -P 42 0x38000 512' "json:{ 974ad30336SMax Reitz \"driver\": \"$IMGFMT\", 984ad30336SMax Reitz \"file\": { 994ad30336SMax Reitz \"driver\": \"blkdebug\", 1004ad30336SMax Reitz \"inject-error\": [{ 1014ad30336SMax Reitz \"event\": \"l2_load\" 1024ad30336SMax Reitz }], 1034ad30336SMax Reitz \"image.filename\": \"$TEST_IMG\" 1044ad30336SMax Reitz } 1054ad30336SMax Reitz}" | _filter_qemu_io 1064ad30336SMax Reitz 1074ad30336SMax Reitz 1084ad30336SMax Reitzecho 1094ad30336SMax Reitzecho "=== Testing qemu-img info output ===" 1104ad30336SMax Reitzecho 1114ad30336SMax Reitz 1120bf7488aSMax ReitzTEST_IMG="json:{\"driver\":\"qcow2\",\"file.filename\":\"$TEST_IMG\"}" _img_info 1134ad30336SMax Reitz 1144ad30336SMax Reitz 1154ad30336SMax Reitzecho 1164ad30336SMax Reitzecho "=== Testing option merging ===" 1174ad30336SMax Reitzecho 1184ad30336SMax Reitz 1194ad30336SMax Reitz# Both options given directly and those given in the filename should be used 1204ad30336SMax Reitz$QEMU_IO -c "open -o driver=qcow2 json:{\"file.filename\":\"$TEST_IMG\"}" \ 1214ad30336SMax Reitz -c "info" 2>&1 | _filter_testdir | _filter_imgfmt 1224ad30336SMax Reitz 1234ad30336SMax Reitz# Options given directly should be prioritized over those given in the filename 1244ad30336SMax Reitz$QEMU_IO -c "open -o driver=qcow2 json:{\"driver\":\"raw\",\"file.filename\":\"$TEST_IMG\"}" \ 1254ad30336SMax Reitz -c "info" 2>&1 | _filter_testdir | _filter_imgfmt 1264ad30336SMax Reitz 1274ad30336SMax Reitz 1284ad30336SMax Reitz# success, all done 1294ad30336SMax Reitzecho "*** done" 1304ad30336SMax Reitzrm -f $seq.full 1314ad30336SMax Reitzstatus=0 132