17c3a3028SDaniel Henrique Barboza#!/bin/bash 27c3a3028SDaniel Henrique Barboza# 37c3a3028SDaniel Henrique Barboza# Test savevm and loadvm after live migration with postcopy flag 47c3a3028SDaniel Henrique Barboza# 57c3a3028SDaniel Henrique Barboza# Copyright (C) 2017, IBM Corporation. 67c3a3028SDaniel Henrique Barboza# 77c3a3028SDaniel Henrique Barboza# This file is derived from tests/qemu-iotests/181 by Kevin Wolf 87c3a3028SDaniel Henrique Barboza# 97c3a3028SDaniel Henrique Barboza# This program is free software; you can redistribute it and/or modify 107c3a3028SDaniel Henrique Barboza# it under the terms of the GNU General Public License as published by 117c3a3028SDaniel Henrique Barboza# the Free Software Foundation; either version 2 of the License, or 127c3a3028SDaniel Henrique Barboza# (at your option) any later version. 137c3a3028SDaniel Henrique Barboza# 147c3a3028SDaniel Henrique Barboza# This program is distributed in the hope that it will be useful, 157c3a3028SDaniel Henrique Barboza# but WITHOUT ANY WARRANTY; without even the implied warranty of 167c3a3028SDaniel Henrique Barboza# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 177c3a3028SDaniel Henrique Barboza# GNU General Public License for more details. 187c3a3028SDaniel Henrique Barboza# 197c3a3028SDaniel Henrique Barboza# You should have received a copy of the GNU General Public License 207c3a3028SDaniel Henrique Barboza# along with this program. If not, see <http://www.gnu.org/licenses/>. 217c3a3028SDaniel Henrique Barboza 227c3a3028SDaniel Henrique Barbozaseq=`basename $0` 237c3a3028SDaniel Henrique Barbozaecho "QA output created by $seq" 247c3a3028SDaniel Henrique Barboza 257c3a3028SDaniel Henrique Barbozastatus=1 # failure is the default! 267c3a3028SDaniel Henrique Barboza 277c3a3028SDaniel Henrique BarbozaMIG_SOCKET="${TEST_DIR}/migrate" 287c3a3028SDaniel Henrique Barboza 297c3a3028SDaniel Henrique Barboza# get standard environment, filters and checks 307c3a3028SDaniel Henrique Barboza. ./common.rc 317c3a3028SDaniel Henrique Barboza. ./common.filter 327c3a3028SDaniel Henrique Barboza. ./common.qemu 337c3a3028SDaniel Henrique Barboza 347c3a3028SDaniel Henrique Barboza_cleanup() 357c3a3028SDaniel Henrique Barboza{ 367c3a3028SDaniel Henrique Barboza rm -f "${MIG_SOCKET}" 377c3a3028SDaniel Henrique Barboza _cleanup_test_img 387c3a3028SDaniel Henrique Barboza _cleanup_qemu 397c3a3028SDaniel Henrique Barboza} 407c3a3028SDaniel Henrique Barbozatrap "_cleanup; exit \$status" 0 1 2 3 15 417c3a3028SDaniel Henrique Barboza 427c3a3028SDaniel Henrique Barboza_supported_fmt qcow2 437c3a3028SDaniel Henrique Barboza_supported_proto generic 447c3a3028SDaniel Henrique Barboza_supported_os Linux 457c3a3028SDaniel Henrique Barboza 467c3a3028SDaniel Henrique Barboza# Internal snapshots are (currently) impossible with refcount_bits=1 477c3a3028SDaniel Henrique Barboza# This was taken from test 080 487c3a3028SDaniel Henrique Barboza_unsupported_imgopts 'refcount_bits=1[^0-9]' 497c3a3028SDaniel Henrique Barboza 507c3a3028SDaniel Henrique Barbozasize=64M 517c3a3028SDaniel Henrique Barboza_make_test_img $size 527c3a3028SDaniel Henrique Barboza 537c3a3028SDaniel Henrique Barbozaecho 547c3a3028SDaniel Henrique Barbozaecho === Starting VMs === 557c3a3028SDaniel Henrique Barbozaecho 567c3a3028SDaniel Henrique Barboza 577c3a3028SDaniel Henrique Barbozaqemu_comm_method="monitor" 587c3a3028SDaniel Henrique Barboza 597c3a3028SDaniel Henrique Barbozaif [ "$IMGOPTSSYNTAX" = "true" ]; then 607c3a3028SDaniel Henrique Barboza _launch_qemu \ 617c3a3028SDaniel Henrique Barboza -drive "${TEST_IMG}",cache=${CACHEMODE},id=disk 627c3a3028SDaniel Henrique Barbozaelse 637c3a3028SDaniel Henrique Barboza _launch_qemu \ 647c3a3028SDaniel Henrique Barboza -drive file="${TEST_IMG}",cache=${CACHEMODE},driver=$IMGFMT,id=disk 657c3a3028SDaniel Henrique Barbozafi 667c3a3028SDaniel Henrique Barbozasrc=$QEMU_HANDLE 677c3a3028SDaniel Henrique Barboza 687c3a3028SDaniel Henrique Barbozaif [ "$IMGOPTSSYNTAX" = "true" ]; then 697c3a3028SDaniel Henrique Barboza _launch_qemu \ 707c3a3028SDaniel Henrique Barboza -drive "${TEST_IMG}",cache=${CACHEMODE},id=disk \ 717c3a3028SDaniel Henrique Barboza -incoming "unix:${MIG_SOCKET}" 727c3a3028SDaniel Henrique Barbozaelse 737c3a3028SDaniel Henrique Barboza _launch_qemu \ 747c3a3028SDaniel Henrique Barboza -drive file="${TEST_IMG}",cache=${CACHEMODE},driver=$IMGFMT,id=disk \ 757c3a3028SDaniel Henrique Barboza -incoming "unix:${MIG_SOCKET}" 767c3a3028SDaniel Henrique Barbozafi 777c3a3028SDaniel Henrique Barbozadest=$QEMU_HANDLE 787c3a3028SDaniel Henrique Barboza 797c3a3028SDaniel Henrique Barbozaecho 807c3a3028SDaniel Henrique Barbozaecho === Set \'migrate_set_capability postcopy-ram on\' and migrate === 817c3a3028SDaniel Henrique Barbozaecho 827c3a3028SDaniel Henrique Barboza 837c3a3028SDaniel Henrique Barbozasilent=yes 847c3a3028SDaniel Henrique Barboza_send_qemu_cmd $dest 'migrate_set_capability postcopy-ram on' "(qemu)" 85*b05a2225SMax Reitz 86*b05a2225SMax Reitzqemu_error_no_exit=yes success_or_failure=yes \ 87*b05a2225SMax Reitz _send_qemu_cmd $dest '' "(qemu)" "Postcopy is not supported" 88*b05a2225SMax Reitzif [ ${QEMU_STATUS[$dest]} -lt 0 ]; then 89*b05a2225SMax Reitz _send_qemu_cmd $dest '' "(qemu)" 90*b05a2225SMax Reitz 91*b05a2225SMax Reitz _send_qemu_cmd $src 'quit' "" 92*b05a2225SMax Reitz _send_qemu_cmd $dest 'quit' "" 93*b05a2225SMax Reitz wait=1 _cleanup_qemu 94*b05a2225SMax Reitz 95*b05a2225SMax Reitz _notrun 'Postcopy is not supported' 96*b05a2225SMax Reitzfi 97*b05a2225SMax Reitz 987c3a3028SDaniel Henrique Barboza_send_qemu_cmd $src 'migrate_set_capability postcopy-ram on' "(qemu)" 997c3a3028SDaniel Henrique Barboza_send_qemu_cmd $src "migrate -d unix:${MIG_SOCKET}" "(qemu)" 1007c3a3028SDaniel Henrique Barboza 1017c3a3028SDaniel Henrique BarbozaQEMU_COMM_TIMEOUT=1 qemu_cmd_repeat=10 silent=yes \ 1027c3a3028SDaniel Henrique Barboza _send_qemu_cmd $src "info migrate" "completed\|failed" 1037c3a3028SDaniel Henrique Barbozasilent=yes _send_qemu_cmd $src "" "(qemu)" 1047c3a3028SDaniel Henrique Barboza 1057c3a3028SDaniel Henrique Barbozaecho 1067c3a3028SDaniel Henrique Barbozaecho === Check if migration was successful === 1077c3a3028SDaniel Henrique Barbozaecho 1087c3a3028SDaniel Henrique Barboza 1097c3a3028SDaniel Henrique BarbozaQEMU_COMM_TIMEOUT=1 silent=yes \ 1107c3a3028SDaniel Henrique Barboza _send_qemu_cmd $src "info migrate" "completed" 1117c3a3028SDaniel Henrique Barbozasilent=yes _send_qemu_cmd $src "" "(qemu)" 1127c3a3028SDaniel Henrique Barboza 1137c3a3028SDaniel Henrique Barbozaecho 1147c3a3028SDaniel Henrique Barbozaecho === On destination, execute savevm and loadvm === 1157c3a3028SDaniel Henrique Barbozaecho 1167c3a3028SDaniel Henrique Barboza 1177c3a3028SDaniel Henrique Barbozasilent= 1187c3a3028SDaniel Henrique Barboza_send_qemu_cmd $dest 'savevm state1' "(qemu)" 1197c3a3028SDaniel Henrique Barboza_send_qemu_cmd $dest 'loadvm state1' "(qemu)" 1207c3a3028SDaniel Henrique Barboza 1217c3a3028SDaniel Henrique Barbozaecho 1227c3a3028SDaniel Henrique Barbozaecho === Shut down and check image === 1237c3a3028SDaniel Henrique Barbozaecho 1247c3a3028SDaniel Henrique Barboza 1257c3a3028SDaniel Henrique Barboza_send_qemu_cmd $src 'quit' "" 1267c3a3028SDaniel Henrique Barboza_send_qemu_cmd $dest 'quit' "" 1277c3a3028SDaniel Henrique Barbozawait=1 _cleanup_qemu 1287c3a3028SDaniel Henrique Barboza 1297c3a3028SDaniel Henrique Barboza_check_test_img 1307c3a3028SDaniel Henrique Barboza 1317c3a3028SDaniel Henrique Barboza# success, all done 1327c3a3028SDaniel Henrique Barbozaecho "*** done" 1337c3a3028SDaniel Henrique Barbozastatus=0 134