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_unsupported_imgopts compat=0.10 497c61a4a3SKevin Wolf_supported_proto file 507c61a4a3SKevin Wolf_supported_os Linux 517c61a4a3SKevin Wolf 527c61a4a3SKevin Wolfsize=64M 537c61a4a3SKevin Wolf 547c61a4a3SKevin Wolfecho 557c61a4a3SKevin Wolfecho === Preparing and starting VM === 567c61a4a3SKevin Wolfecho 577c61a4a3SKevin Wolf 587c61a4a3SKevin WolfTEST_IMG="${TEST_IMG}.base" _make_test_img $size 59*760c4d43SKevin WolfIMGOPTS=$(_optstr_add "$IMGOPTS" "backing_fmt=$IMGFMT") \ 607c61a4a3SKevin Wolf TEST_IMG="${TEST_IMG}.mid" _make_test_img -b "${TEST_IMG}.base" 617c61a4a3SKevin Wolf_make_test_img -b "${TEST_IMG}.mid" 627c61a4a3SKevin WolfTEST_IMG="${TEST_IMG}.ovl2" _make_test_img -b "${TEST_IMG}.mid" 637c61a4a3SKevin Wolf 647c61a4a3SKevin Wolf$QEMU_IO -c 'write -P 0x55 1M 64k' "${TEST_IMG}.mid" | _filter_qemu_io 657c61a4a3SKevin Wolf 667c61a4a3SKevin Wolfqemu_comm_method="qmp" 677c61a4a3SKevin Wolfqmp_pretty="y" 687c61a4a3SKevin Wolf 697c61a4a3SKevin Wolf_launch_qemu \ 707c61a4a3SKevin Wolf -blockdev "driver=${IMGFMT},file.driver=file,file.filename=${TEST_IMG}.base,node-name=base" \ 717c61a4a3SKevin Wolf -blockdev "driver=${IMGFMT},file.driver=file,file.filename=${TEST_IMG}.mid,node-name=mid,backing=base" \ 727c61a4a3SKevin Wolf -blockdev "driver=${IMGFMT},file.driver=file,file.filename=${TEST_IMG},node-name=top,backing=mid" \ 737c61a4a3SKevin Wolf -blockdev "driver=${IMGFMT},file.driver=file,file.filename=${TEST_IMG}.ovl2,node-name=top2,backing=mid" 747c61a4a3SKevin Wolfh=$QEMU_HANDLE 757c61a4a3SKevin Wolf_send_qemu_cmd $h "{ 'execute': 'qmp_capabilities' }" '^}' 767c61a4a3SKevin Wolf 777c61a4a3SKevin Wolfecho 787c61a4a3SKevin Wolfecho === Perform commit job === 797c61a4a3SKevin Wolfecho 807c61a4a3SKevin Wolf 817c61a4a3SKevin Wolf_send_qemu_cmd $h \ 827c61a4a3SKevin Wolf "{ 'execute': 'block-commit', 837c61a4a3SKevin Wolf 'arguments': { 'job-id': 'commit0', 847c61a4a3SKevin Wolf 'device': 'top', 857c61a4a3SKevin Wolf 'base':'$TEST_IMG.base', 867c61a4a3SKevin Wolf 'top': '$TEST_IMG.mid' } }" \ 877c61a4a3SKevin Wolf "BLOCK_JOB_COMPLETED" 887c61a4a3SKevin Wolf_send_qemu_cmd $h "" "^}" 897c61a4a3SKevin Wolf 907c61a4a3SKevin Wolfecho 917c61a4a3SKevin Wolfecho === Check that both top and top2 point to base now === 927c61a4a3SKevin Wolfecho 937c61a4a3SKevin Wolf 947c61a4a3SKevin Wolf_send_qemu_cmd $h "{ 'execute': 'query-named-block-nodes' }" "^}" | 957c61a4a3SKevin Wolf _filter_generated_node_ids 967c61a4a3SKevin Wolf 977c61a4a3SKevin Wolf_send_qemu_cmd $h "{ 'execute': 'quit' }" "^}" 987c61a4a3SKevin Wolfwait=1 _cleanup_qemu 997c61a4a3SKevin Wolf 1007c61a4a3SKevin Wolf_img_info 1017c61a4a3SKevin WolfTEST_IMG="$TEST_IMG.ovl2" _img_info 1027c61a4a3SKevin Wolf 1037c61a4a3SKevin Wolf 1047c61a4a3SKevin Wolfecho 1057c61a4a3SKevin Wolfecho === Preparing and starting VM with -drive === 1067c61a4a3SKevin Wolfecho 1077c61a4a3SKevin Wolf 1087c61a4a3SKevin WolfTEST_IMG="${TEST_IMG}.base" _make_test_img $size 1097c61a4a3SKevin WolfTEST_IMG="${TEST_IMG}.mid" _make_test_img -b "${TEST_IMG}.base" 1107c61a4a3SKevin Wolf_make_test_img -b "${TEST_IMG}.mid" 1117c61a4a3SKevin WolfTEST_IMG="${TEST_IMG}.ovl2" _make_test_img -b "${TEST_IMG}.mid" 1127c61a4a3SKevin WolfTEST_IMG="${TEST_IMG}.ovl3" _make_test_img -b "${TEST_IMG}.ovl2" 1137c61a4a3SKevin Wolf 1147c61a4a3SKevin Wolf$QEMU_IO -c 'write -P 0x55 1M 64k' "${TEST_IMG}.mid" | _filter_qemu_io 1157c61a4a3SKevin Wolf 1167c61a4a3SKevin Wolfqemu_comm_method="qmp" 1177c61a4a3SKevin Wolfqmp_pretty="y" 1187c61a4a3SKevin Wolf 1197c61a4a3SKevin Wolf_launch_qemu \ 1207c61a4a3SKevin Wolf -drive "driver=${IMGFMT},file=${TEST_IMG},node-name=top,backing.node-name=mid" \ 1217c61a4a3SKevin Wolf -drive "driver=${IMGFMT},file=${TEST_IMG}.ovl3,node-name=top2,backing.backing=mid" 1227c61a4a3SKevin Wolfh=$QEMU_HANDLE 1237c61a4a3SKevin Wolf_send_qemu_cmd $h "{ 'execute': 'qmp_capabilities' }" '^}' 1247c61a4a3SKevin Wolf 1257c61a4a3SKevin Wolfecho 1267c61a4a3SKevin Wolfecho === Perform commit job === 1277c61a4a3SKevin Wolfecho 1287c61a4a3SKevin Wolf 1297c61a4a3SKevin Wolf_send_qemu_cmd $h \ 1307c61a4a3SKevin Wolf "{ 'execute': 'block-commit', 1317c61a4a3SKevin Wolf 'arguments': { 'job-id': 'commit0', 1327c61a4a3SKevin Wolf 'device': 'top', 1337c61a4a3SKevin Wolf 'base':'$TEST_IMG.base', 1347c61a4a3SKevin Wolf 'top': '$TEST_IMG.mid' } }" \ 1357c61a4a3SKevin Wolf "BLOCK_JOB_COMPLETED" 1367c61a4a3SKevin Wolf_send_qemu_cmd $h "" "^}" 1377c61a4a3SKevin Wolf 1387c61a4a3SKevin Wolfecho 1397c61a4a3SKevin Wolfecho === Check that both top and top2 point to base now === 1407c61a4a3SKevin Wolfecho 1417c61a4a3SKevin Wolf 1427c61a4a3SKevin Wolf_send_qemu_cmd $h "{ 'execute': 'query-named-block-nodes' }" "^}" | 1437c61a4a3SKevin Wolf _filter_generated_node_ids 1447c61a4a3SKevin Wolf 1457c61a4a3SKevin Wolf_send_qemu_cmd $h "{ 'execute': 'quit' }" "^}" 1467c61a4a3SKevin Wolfwait=1 _cleanup_qemu 1477c61a4a3SKevin Wolf 1487c61a4a3SKevin Wolf_img_info 1497c61a4a3SKevin WolfTEST_IMG="$TEST_IMG.ovl2" _img_info 1507c61a4a3SKevin Wolf 1517c61a4a3SKevin Wolf# success, all done 1527c61a4a3SKevin Wolfecho "*** done" 1537c61a4a3SKevin Wolfrm -f $seq.full 1547c61a4a3SKevin Wolfstatus=0 155