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