17c61a4a3SKevin Wolf#!/bin/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 Wolfhere=`pwd` 287c61a4a3SKevin Wolfstatus=1 # failure is the default! 297c61a4a3SKevin Wolf 307c61a4a3SKevin WolfMIG_SOCKET="${TEST_DIR}/migrate" 317c61a4a3SKevin Wolf 327c61a4a3SKevin Wolf_cleanup() 337c61a4a3SKevin Wolf{ 347c61a4a3SKevin Wolf rm -f "${TEST_IMG}.mid" 357c61a4a3SKevin Wolf rm -f "${TEST_IMG}.ovl2" 367c61a4a3SKevin Wolf rm -f "${TEST_IMG}.ovl3" 377c61a4a3SKevin Wolf _cleanup_test_img 387c61a4a3SKevin Wolf _cleanup_qemu 397c61a4a3SKevin Wolf} 407c61a4a3SKevin Wolftrap "_cleanup; exit \$status" 0 1 2 3 15 417c61a4a3SKevin Wolf 427c61a4a3SKevin Wolf# get standard environment, filters and checks 437c61a4a3SKevin Wolf. ./common.rc 447c61a4a3SKevin Wolf. ./common.filter 457c61a4a3SKevin Wolf. ./common.qemu 467c61a4a3SKevin Wolf 477c61a4a3SKevin Wolf_supported_fmt qcow2 487c61a4a3SKevin Wolf_supported_proto file 497c61a4a3SKevin Wolf_supported_os Linux 507c61a4a3SKevin Wolf 517c61a4a3SKevin Wolfsize=64M 527c61a4a3SKevin Wolf 537c61a4a3SKevin Wolfecho 547c61a4a3SKevin Wolfecho === Preparing and starting VM === 557c61a4a3SKevin Wolfecho 567c61a4a3SKevin Wolf 577c61a4a3SKevin WolfTEST_IMG="${TEST_IMG}.base" _make_test_img $size 58760c4d43SKevin WolfIMGOPTS=$(_optstr_add "$IMGOPTS" "backing_fmt=$IMGFMT") \ 597c61a4a3SKevin Wolf TEST_IMG="${TEST_IMG}.mid" _make_test_img -b "${TEST_IMG}.base" 607c61a4a3SKevin Wolf_make_test_img -b "${TEST_IMG}.mid" 617c61a4a3SKevin WolfTEST_IMG="${TEST_IMG}.ovl2" _make_test_img -b "${TEST_IMG}.mid" 627c61a4a3SKevin Wolf 637c61a4a3SKevin Wolf$QEMU_IO -c 'write -P 0x55 1M 64k' "${TEST_IMG}.mid" | _filter_qemu_io 647c61a4a3SKevin Wolf 657c61a4a3SKevin Wolfqemu_comm_method="qmp" 667c61a4a3SKevin Wolfqmp_pretty="y" 677c61a4a3SKevin Wolf 687c61a4a3SKevin Wolf_launch_qemu \ 697c61a4a3SKevin Wolf -blockdev "driver=${IMGFMT},file.driver=file,file.filename=${TEST_IMG}.base,node-name=base" \ 707c61a4a3SKevin Wolf -blockdev "driver=${IMGFMT},file.driver=file,file.filename=${TEST_IMG}.mid,node-name=mid,backing=base" \ 717c61a4a3SKevin Wolf -blockdev "driver=${IMGFMT},file.driver=file,file.filename=${TEST_IMG},node-name=top,backing=mid" \ 727c61a4a3SKevin Wolf -blockdev "driver=${IMGFMT},file.driver=file,file.filename=${TEST_IMG}.ovl2,node-name=top2,backing=mid" 737c61a4a3SKevin Wolfh=$QEMU_HANDLE 747c61a4a3SKevin Wolf_send_qemu_cmd $h "{ 'execute': 'qmp_capabilities' }" '^}' 757c61a4a3SKevin Wolf 767c61a4a3SKevin Wolfecho 777c61a4a3SKevin Wolfecho === Perform commit job === 787c61a4a3SKevin Wolfecho 797c61a4a3SKevin Wolf 807c61a4a3SKevin Wolf_send_qemu_cmd $h \ 817c61a4a3SKevin Wolf "{ 'execute': 'block-commit', 827c61a4a3SKevin Wolf 'arguments': { 'job-id': 'commit0', 837c61a4a3SKevin Wolf 'device': 'top', 847c61a4a3SKevin Wolf 'base':'$TEST_IMG.base', 857c61a4a3SKevin Wolf 'top': '$TEST_IMG.mid' } }" \ 867c61a4a3SKevin Wolf "BLOCK_JOB_COMPLETED" 877c61a4a3SKevin Wolf_send_qemu_cmd $h "" "^}" 887c61a4a3SKevin Wolf 897c61a4a3SKevin Wolfecho 907c61a4a3SKevin Wolfecho === Check that both top and top2 point to base now === 917c61a4a3SKevin Wolfecho 927c61a4a3SKevin Wolf 937c61a4a3SKevin Wolf_send_qemu_cmd $h "{ 'execute': 'query-named-block-nodes' }" "^}" | 94*2483537eSMax Reitz _filter_generated_node_ids | _filter_actual_image_size | _filter_img_info 957c61a4a3SKevin Wolf 967c61a4a3SKevin Wolf_send_qemu_cmd $h "{ 'execute': 'quit' }" "^}" 977c61a4a3SKevin Wolfwait=1 _cleanup_qemu 987c61a4a3SKevin Wolf 997c61a4a3SKevin Wolf_img_info 1007c61a4a3SKevin WolfTEST_IMG="$TEST_IMG.ovl2" _img_info 1017c61a4a3SKevin Wolf 1027c61a4a3SKevin Wolf 1037c61a4a3SKevin Wolfecho 1047c61a4a3SKevin Wolfecho === Preparing and starting VM with -drive === 1057c61a4a3SKevin Wolfecho 1067c61a4a3SKevin Wolf 1077c61a4a3SKevin WolfTEST_IMG="${TEST_IMG}.base" _make_test_img $size 1087c61a4a3SKevin WolfTEST_IMG="${TEST_IMG}.mid" _make_test_img -b "${TEST_IMG}.base" 1097c61a4a3SKevin Wolf_make_test_img -b "${TEST_IMG}.mid" 1107c61a4a3SKevin WolfTEST_IMG="${TEST_IMG}.ovl2" _make_test_img -b "${TEST_IMG}.mid" 1117c61a4a3SKevin WolfTEST_IMG="${TEST_IMG}.ovl3" _make_test_img -b "${TEST_IMG}.ovl2" 1127c61a4a3SKevin Wolf 1137c61a4a3SKevin Wolf$QEMU_IO -c 'write -P 0x55 1M 64k' "${TEST_IMG}.mid" | _filter_qemu_io 1147c61a4a3SKevin Wolf 1157c61a4a3SKevin Wolfqemu_comm_method="qmp" 1167c61a4a3SKevin Wolfqmp_pretty="y" 1177c61a4a3SKevin Wolf 1187c61a4a3SKevin Wolf_launch_qemu \ 1197c61a4a3SKevin Wolf -drive "driver=${IMGFMT},file=${TEST_IMG},node-name=top,backing.node-name=mid" \ 1207c61a4a3SKevin Wolf -drive "driver=${IMGFMT},file=${TEST_IMG}.ovl3,node-name=top2,backing.backing=mid" 1217c61a4a3SKevin Wolfh=$QEMU_HANDLE 1227c61a4a3SKevin Wolf_send_qemu_cmd $h "{ 'execute': 'qmp_capabilities' }" '^}' 1237c61a4a3SKevin Wolf 1247c61a4a3SKevin Wolfecho 1257c61a4a3SKevin Wolfecho === Perform commit job === 1267c61a4a3SKevin Wolfecho 1277c61a4a3SKevin Wolf 1287c61a4a3SKevin Wolf_send_qemu_cmd $h \ 1297c61a4a3SKevin Wolf "{ 'execute': 'block-commit', 1307c61a4a3SKevin Wolf 'arguments': { 'job-id': 'commit0', 1317c61a4a3SKevin Wolf 'device': 'top', 1327c61a4a3SKevin Wolf 'base':'$TEST_IMG.base', 1337c61a4a3SKevin Wolf 'top': '$TEST_IMG.mid' } }" \ 1347c61a4a3SKevin Wolf "BLOCK_JOB_COMPLETED" 1357c61a4a3SKevin Wolf_send_qemu_cmd $h "" "^}" 1367c61a4a3SKevin Wolf 1377c61a4a3SKevin Wolfecho 1387c61a4a3SKevin Wolfecho === Check that both top and top2 point to base now === 1397c61a4a3SKevin Wolfecho 1407c61a4a3SKevin Wolf 1417c61a4a3SKevin Wolf_send_qemu_cmd $h "{ 'execute': 'query-named-block-nodes' }" "^}" | 142*2483537eSMax Reitz _filter_generated_node_ids | _filter_actual_image_size | _filter_img_info 1437c61a4a3SKevin Wolf 1447c61a4a3SKevin Wolf_send_qemu_cmd $h "{ 'execute': 'quit' }" "^}" 1457c61a4a3SKevin Wolfwait=1 _cleanup_qemu 1467c61a4a3SKevin Wolf 1477c61a4a3SKevin Wolf_img_info 1487c61a4a3SKevin WolfTEST_IMG="$TEST_IMG.ovl2" _img_info 1497c61a4a3SKevin Wolf 1507c61a4a3SKevin Wolf# success, all done 1517c61a4a3SKevin Wolfecho "*** done" 1527c61a4a3SKevin Wolfrm -f $seq.full 1537c61a4a3SKevin Wolfstatus=0 154