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 654ad30336SMax Reitz$QEMU_IMG convert -f raw -O $IMGFMT "$TEST_IMG.base" "$TEST_IMG" 664ad30336SMax Reitz 678dff69b9SAarushi Mehta$QEMU_IO_PROG --cache $CACHEMODE --aio $AIOMODE \ 688f9e835fSKevin Wolf -c 'read -P 42 0 512' -c 'read -P 23 512 512' \ 694ad30336SMax Reitz -c 'read -P 66 1024 512' "json:{ 704ad30336SMax Reitz \"driver\": \"$IMGFMT\", 714ad30336SMax Reitz \"file\": { 724ad30336SMax Reitz \"driver\": \"$IMGFMT\", 734ad30336SMax Reitz \"file\": { 744ad30336SMax Reitz \"filename\": \"$TEST_IMG\" 754ad30336SMax Reitz } 764ad30336SMax Reitz } 774ad30336SMax Reitz}" | _filter_qemu_io 784ad30336SMax Reitz 794ad30336SMax Reitz# This should fail (see test 072) 804ad30336SMax Reitz$QEMU_IO -c 'read -P 42 0 512' "$TEST_IMG" | _filter_qemu_io 814ad30336SMax Reitz 824ad30336SMax Reitz 83e59a0cf1SMax Reitzecho 84e59a0cf1SMax Reitzecho "=== Testing correct handling of 'backing':null ===" 85e59a0cf1SMax Reitzecho 86e59a0cf1SMax Reitz 87*b66ff2c2SEric Blake_make_test_img -b "$TEST_IMG.base" -F $IMGFMT $IMG_SIZE 88e59a0cf1SMax Reitz 89e59a0cf1SMax Reitz# This should read 42 90e59a0cf1SMax Reitz$QEMU_IO -c 'read -P 42 0 512' "$TEST_IMG" | _filter_qemu_io 91e59a0cf1SMax Reitz 92e59a0cf1SMax Reitz# This should read 0 93e59a0cf1SMax Reitz$QEMU_IO -c 'read -P 0 0 512' "json:{\ 94e59a0cf1SMax Reitz 'driver': '$IMGFMT', 95e59a0cf1SMax Reitz 'file': { 96e59a0cf1SMax Reitz 'driver': 'file', 97e59a0cf1SMax Reitz 'filename': '$TEST_IMG' 98e59a0cf1SMax Reitz }, 99e59a0cf1SMax Reitz 'backing': null 100e59a0cf1SMax Reitz}" | _filter_qemu_io 101e59a0cf1SMax Reitz 102e59a0cf1SMax Reitz 1034ad30336SMax Reitz# Taken from test 071 1044ad30336SMax Reitzecho 1054ad30336SMax Reitzecho "=== Testing blkdebug ===" 1064ad30336SMax Reitzecho 1074ad30336SMax Reitz 1084ad30336SMax Reitz_make_test_img $IMG_SIZE 1094ad30336SMax Reitz 1104ad30336SMax Reitz$QEMU_IO -c 'write -P 42 0x38000 512' "$TEST_IMG" | _filter_qemu_io 1114ad30336SMax Reitz 1124ad30336SMax Reitz# The "image.filename" part tests whether "a": { "b": "c" } and "a.b": "c" do 1134ad30336SMax Reitz# the same (which they should). 1148dff69b9SAarushi Mehta$QEMU_IO_PROG --cache $CACHEMODE --aio $AIOMODE \ 1158f9e835fSKevin Wolf -c 'read -P 42 0x38000 512' "json:{ 1164ad30336SMax Reitz \"driver\": \"$IMGFMT\", 1174ad30336SMax Reitz \"file\": { 1184ad30336SMax Reitz \"driver\": \"blkdebug\", 1194ad30336SMax Reitz \"inject-error\": [{ 1204ad30336SMax Reitz \"event\": \"l2_load\" 1214ad30336SMax Reitz }], 1224ad30336SMax Reitz \"image.filename\": \"$TEST_IMG\" 1234ad30336SMax Reitz } 1244ad30336SMax Reitz}" | _filter_qemu_io 1254ad30336SMax Reitz 1264ad30336SMax Reitz 1274ad30336SMax Reitzecho 1284ad30336SMax Reitzecho "=== Testing qemu-img info output ===" 1294ad30336SMax Reitzecho 1304ad30336SMax Reitz 1310bf7488aSMax ReitzTEST_IMG="json:{\"driver\":\"qcow2\",\"file.filename\":\"$TEST_IMG\"}" _img_info 1324ad30336SMax Reitz 1334ad30336SMax Reitz 1344ad30336SMax Reitzecho 1354ad30336SMax Reitzecho "=== Testing option merging ===" 1364ad30336SMax Reitzecho 1374ad30336SMax Reitz 1384ad30336SMax Reitz# Both options given directly and those given in the filename should be used 1394ad30336SMax Reitz$QEMU_IO -c "open -o driver=qcow2 json:{\"file.filename\":\"$TEST_IMG\"}" \ 1409853f5c4SMax Reitz -c "info" 2>&1 | _filter_img_info 1414ad30336SMax Reitz 1424ad30336SMax Reitz# Options given directly should be prioritized over those given in the filename 1434ad30336SMax Reitz$QEMU_IO -c "open -o driver=qcow2 json:{\"driver\":\"raw\",\"file.filename\":\"$TEST_IMG\"}" \ 1449853f5c4SMax Reitz -c "info" 2>&1 | _filter_img_info 1454ad30336SMax Reitz 1464ad30336SMax Reitz 1474ad30336SMax Reitz# success, all done 1484ad30336SMax Reitzecho "*** done" 1494ad30336SMax Reitzrm -f $seq.full 1504ad30336SMax Reitzstatus=0 151