111a82d14SPhilippe Mathieu-Daudé#!/usr/bin/env bash 2*9dd003a9SVladimir Sementsov-Ogievskiy# group: rw auto 37c61a4a3SKevin Wolf# 47c61a4a3SKevin Wolf# Test commit block job where top has two parents 57c61a4a3SKevin Wolf# 67c61a4a3SKevin Wolf# Copyright (C) 2017 Red Hat, Inc. 77c61a4a3SKevin Wolf# 87c61a4a3SKevin Wolf# This program is free software; you can redistribute it and/or modify 97c61a4a3SKevin Wolf# it under the terms of the GNU General Public License as published by 107c61a4a3SKevin Wolf# the Free Software Foundation; either version 2 of the License, or 117c61a4a3SKevin Wolf# (at your option) any later version. 127c61a4a3SKevin Wolf# 137c61a4a3SKevin Wolf# This program is distributed in the hope that it will be useful, 147c61a4a3SKevin Wolf# but WITHOUT ANY WARRANTY; without even the implied warranty of 157c61a4a3SKevin Wolf# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 167c61a4a3SKevin Wolf# GNU General Public License for more details. 177c61a4a3SKevin Wolf# 187c61a4a3SKevin Wolf# You should have received a copy of the GNU General Public License 197c61a4a3SKevin Wolf# along with this program. If not, see <http://www.gnu.org/licenses/>. 207c61a4a3SKevin Wolf# 217c61a4a3SKevin Wolf 227c61a4a3SKevin Wolf# creator 237c61a4a3SKevin Wolfowner=kwolf@redhat.com 247c61a4a3SKevin Wolf 257c61a4a3SKevin Wolfseq=`basename $0` 267c61a4a3SKevin Wolfecho "QA output created by $seq" 277c61a4a3SKevin Wolf 287c61a4a3SKevin Wolfstatus=1 # failure is the default! 297c61a4a3SKevin Wolf 307c61a4a3SKevin Wolf_cleanup() 317c61a4a3SKevin Wolf{ 32f91ecbd7SMax Reitz _rm_test_img "${TEST_IMG}.mid" 33f91ecbd7SMax Reitz _rm_test_img "${TEST_IMG}.ovl2" 34f91ecbd7SMax Reitz _rm_test_img "${TEST_IMG}.ovl3" 357c61a4a3SKevin Wolf _cleanup_test_img 367c61a4a3SKevin Wolf _cleanup_qemu 377c61a4a3SKevin Wolf} 387c61a4a3SKevin Wolftrap "_cleanup; exit \$status" 0 1 2 3 15 397c61a4a3SKevin Wolf 407c61a4a3SKevin Wolf# get standard environment, filters and checks 417c61a4a3SKevin Wolf. ./common.rc 427c61a4a3SKevin Wolf. ./common.filter 437c61a4a3SKevin Wolf. ./common.qemu 447c61a4a3SKevin Wolf 457c61a4a3SKevin Wolf_supported_fmt qcow2 4657284d2aSMax Reitz_supported_proto file fuse 473be2024aSMax Reitz# An external data file would change the query-named-block-nodes output 483be2024aSMax Reitz_unsupported_imgopts data_file 497c61a4a3SKevin Wolf 507c61a4a3SKevin Wolfsize=64M 517c61a4a3SKevin Wolf 527c61a4a3SKevin Wolfecho 537c61a4a3SKevin Wolfecho === Preparing and starting VM === 547c61a4a3SKevin Wolfecho 557c61a4a3SKevin Wolf 567c61a4a3SKevin WolfTEST_IMG="${TEST_IMG}.base" _make_test_img $size 57407fb56aSMax ReitzTEST_IMG="${TEST_IMG}.mid" _make_test_img -o "backing_fmt=$IMGFMT" -b "${TEST_IMG}.base" 58b66ff2c2SEric Blake_make_test_img -b "${TEST_IMG}.mid" -F $IMGFMT 59b66ff2c2SEric BlakeTEST_IMG="${TEST_IMG}.ovl2" _make_test_img -b "${TEST_IMG}.mid" -F $IMGFMT 607c61a4a3SKevin Wolf 617c61a4a3SKevin Wolf$QEMU_IO -c 'write -P 0x55 1M 64k' "${TEST_IMG}.mid" | _filter_qemu_io 627c61a4a3SKevin Wolf 637c61a4a3SKevin Wolfqemu_comm_method="qmp" 647c61a4a3SKevin Wolfqmp_pretty="y" 657c61a4a3SKevin Wolf 667c61a4a3SKevin Wolf_launch_qemu \ 677c61a4a3SKevin Wolf -blockdev "driver=${IMGFMT},file.driver=file,file.filename=${TEST_IMG}.base,node-name=base" \ 687c61a4a3SKevin Wolf -blockdev "driver=${IMGFMT},file.driver=file,file.filename=${TEST_IMG}.mid,node-name=mid,backing=base" \ 697c61a4a3SKevin Wolf -blockdev "driver=${IMGFMT},file.driver=file,file.filename=${TEST_IMG},node-name=top,backing=mid" \ 707c61a4a3SKevin Wolf -blockdev "driver=${IMGFMT},file.driver=file,file.filename=${TEST_IMG}.ovl2,node-name=top2,backing=mid" 717c61a4a3SKevin Wolfh=$QEMU_HANDLE 727c61a4a3SKevin Wolf_send_qemu_cmd $h "{ 'execute': 'qmp_capabilities' }" '^}' 737c61a4a3SKevin Wolf 747c61a4a3SKevin Wolfecho 757c61a4a3SKevin Wolfecho === Perform commit job === 767c61a4a3SKevin Wolfecho 777c61a4a3SKevin Wolf 787c61a4a3SKevin Wolf_send_qemu_cmd $h \ 797c61a4a3SKevin Wolf "{ 'execute': 'block-commit', 807c61a4a3SKevin Wolf 'arguments': { 'job-id': 'commit0', 817c61a4a3SKevin Wolf 'device': 'top', 827c61a4a3SKevin Wolf 'base':'$TEST_IMG.base', 837c61a4a3SKevin Wolf 'top': '$TEST_IMG.mid' } }" \ 841dac83f1SKevin Wolf '"status": "null"' 857c61a4a3SKevin Wolf_send_qemu_cmd $h "" "^}" 867c61a4a3SKevin Wolf 877c61a4a3SKevin Wolfecho 887c61a4a3SKevin Wolfecho === Check that both top and top2 point to base now === 897c61a4a3SKevin Wolfecho 907c61a4a3SKevin Wolf 917c61a4a3SKevin Wolf_send_qemu_cmd $h "{ 'execute': 'query-named-block-nodes' }" "^}" | 922483537eSMax Reitz _filter_generated_node_ids | _filter_actual_image_size | _filter_img_info 937c61a4a3SKevin Wolf 947c61a4a3SKevin Wolf_send_qemu_cmd $h "{ 'execute': 'quit' }" "^}" 957c61a4a3SKevin Wolfwait=1 _cleanup_qemu 967c61a4a3SKevin Wolf 977c61a4a3SKevin Wolf_img_info 987c61a4a3SKevin WolfTEST_IMG="$TEST_IMG.ovl2" _img_info 997c61a4a3SKevin Wolf 1007c61a4a3SKevin Wolf 1017c61a4a3SKevin Wolfecho 1027c61a4a3SKevin Wolfecho === Preparing and starting VM with -drive === 1037c61a4a3SKevin Wolfecho 1047c61a4a3SKevin Wolf 1057c61a4a3SKevin WolfTEST_IMG="${TEST_IMG}.base" _make_test_img $size 106b66ff2c2SEric BlakeTEST_IMG="${TEST_IMG}.mid" _make_test_img -b "${TEST_IMG}.base" -F $IMGFMT 107b66ff2c2SEric Blake_make_test_img -b "${TEST_IMG}.mid" -F $IMGFMT 108b66ff2c2SEric BlakeTEST_IMG="${TEST_IMG}.ovl2" _make_test_img -b "${TEST_IMG}.mid" -F $IMGFMT 109b66ff2c2SEric BlakeTEST_IMG="${TEST_IMG}.ovl3" _make_test_img -b "${TEST_IMG}.ovl2" -F $IMGFMT 1107c61a4a3SKevin Wolf 1117c61a4a3SKevin Wolf$QEMU_IO -c 'write -P 0x55 1M 64k' "${TEST_IMG}.mid" | _filter_qemu_io 1127c61a4a3SKevin Wolf 1137c61a4a3SKevin Wolfqemu_comm_method="qmp" 1147c61a4a3SKevin Wolfqmp_pretty="y" 1157c61a4a3SKevin Wolf 1167c61a4a3SKevin Wolf_launch_qemu \ 1177c61a4a3SKevin Wolf -drive "driver=${IMGFMT},file=${TEST_IMG},node-name=top,backing.node-name=mid" \ 1187c61a4a3SKevin Wolf -drive "driver=${IMGFMT},file=${TEST_IMG}.ovl3,node-name=top2,backing.backing=mid" 1197c61a4a3SKevin Wolfh=$QEMU_HANDLE 1207c61a4a3SKevin Wolf_send_qemu_cmd $h "{ 'execute': 'qmp_capabilities' }" '^}' 1217c61a4a3SKevin Wolf 1227c61a4a3SKevin Wolfecho 1237c61a4a3SKevin Wolfecho === Perform commit job === 1247c61a4a3SKevin Wolfecho 1257c61a4a3SKevin Wolf 1267c61a4a3SKevin Wolf_send_qemu_cmd $h \ 1277c61a4a3SKevin Wolf "{ 'execute': 'block-commit', 1287c61a4a3SKevin Wolf 'arguments': { 'job-id': 'commit0', 1297c61a4a3SKevin Wolf 'device': 'top', 1307c61a4a3SKevin Wolf 'base':'$TEST_IMG.base', 1317c61a4a3SKevin Wolf 'top': '$TEST_IMG.mid' } }" \ 1321dac83f1SKevin Wolf '"status": "null"' 1337c61a4a3SKevin Wolf_send_qemu_cmd $h "" "^}" 1347c61a4a3SKevin Wolf 1357c61a4a3SKevin Wolfecho 1367c61a4a3SKevin Wolfecho === Check that both top and top2 point to base now === 1377c61a4a3SKevin Wolfecho 1387c61a4a3SKevin Wolf 1397c61a4a3SKevin Wolf_send_qemu_cmd $h "{ 'execute': 'query-named-block-nodes' }" "^}" | 1402483537eSMax Reitz _filter_generated_node_ids | _filter_actual_image_size | _filter_img_info 1417c61a4a3SKevin Wolf 1427c61a4a3SKevin Wolf_send_qemu_cmd $h "{ 'execute': 'quit' }" "^}" 1437c61a4a3SKevin Wolfwait=1 _cleanup_qemu 1447c61a4a3SKevin Wolf 1457c61a4a3SKevin Wolf_img_info 1467c61a4a3SKevin WolfTEST_IMG="$TEST_IMG.ovl2" _img_info 1477c61a4a3SKevin Wolf 1487c61a4a3SKevin Wolf# success, all done 1497c61a4a3SKevin Wolfecho "*** done" 1507c61a4a3SKevin Wolfrm -f $seq.full 1517c61a4a3SKevin Wolfstatus=0 152