xref: /openbmc/qemu/tests/qemu-iotests/201 (revision b05a2225d2e87a04697509219d00ced7c46ed34d)
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